From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../a_re-introduction_to_javascript/index.html | 951 +++++++++++++++++++++ .../ja/web/javascript/about_javascript/index.html | 58 ++ files/ja/web/javascript/closures/index.html | 468 ++++++++++ files/ja/web/javascript/data_structures/index.html | 462 ++++++++++ .../ecmascript_5_support_in_mozilla/index.html | 43 + .../ecmascript_6_support_in_mozilla/index.html | 276 ++++++ .../index.html | 332 +++++++ .../equality_comparisons_and_sameness/index.html | 490 +++++++++++ files/ja/web/javascript/eventloop/index.html | 78 ++ files/ja/web/javascript/getting_started/index.html | 302 +++++++ .../index.html | 25 + .../control_flow_and_error_handling/index.html | 457 ++++++++++ .../guide/core_language_features/index.html | 10 + .../guide/creating_a_regular_expression/index.html | 31 + .../defining_getters_and_setters/index.html | 89 ++ .../defining_methods/index.html | 39 + .../index.html | 13 + .../deleting_properties/index.html | 20 + .../guide/creating_new_objects/index.html | 17 + .../indexing_object_properties/index.html | 9 + .../using_a_constructor_function/index.html | 57 ++ .../using_object_initializers/index.html | 23 + .../using_this_for_object_references/index.html | 25 + .../guide/details_of_the_object_model/index.html | 728 ++++++++++++++++ .../guide/exception_handling_statements/index.html | 36 + .../throw_statement/index.html | 34 + .../try...catch_statement/index.html | 135 +++ .../ja/web/javascript/guide/expressions/index.html | 16 + .../guide/expressions_and_operators/index.html | 928 ++++++++++++++++++++ files/ja/web/javascript/guide/functions/index.html | 696 +++++++++++++++ .../javascript/guide/grammar_and_types/index.html | 762 +++++++++++++++++ files/ja/web/javascript/guide/index.html | 138 +++ .../guide/indexed_collections/index.html | 598 +++++++++++++ .../web/javascript/guide/introduction/index.html | 160 ++++ .../guide/iterators_and_generators/index.html | 242 ++++++ .../javascript/guide/keyed_collections/index.html | 161 ++++ .../guide/liveconnect_overview/index.html | 799 +++++++++++++++++ .../loop_statements/break_statement/index.html | 24 + .../loop_statements/continue_statement/index.html | 46 + .../do...while_statement/index.html | 19 + .../guide/loop_statements/for_statement/index.html | 50 ++ .../javascript/guide/loop_statements/index.html | 17 + .../loop_statements/label_statement/index.html | 19 + .../loop_statements/while_statement/index.html | 35 + .../guide/loops_and_iteration/index.html | 365 ++++++++ .../javascript/guide/meta_programming/index.html | 290 +++++++ files/ja/web/javascript/guide/modules/index.html | 457 ++++++++++ .../javascript/guide/numbers_and_dates/index.html | 395 +++++++++ .../object_manipulation_statements/index.html | 51 ++ .../guide/objects_and_properties/index.html | 32 + .../web/javascript/guide/obsolete_pages/index.html | 9 + .../function_object/index.html | 44 + .../operators/arithmetic_operators/index.html | 47 + .../operators/assignment_operators/index.html | 61 ++ .../operators/comparison_operators/index.html | 67 ++ .../guide/operators/logical_operators/index.html | 63 ++ .../guide/operators/special_operators/index.html | 197 +++++ .../guide/operators/string_operators/index.html | 8 + .../escape_and_unescape_functions/index.html | 14 + .../predefined_functions/eval_function/index.html | 12 + .../guide/predefined_functions/index.html | 17 + .../regular_expressions/assertions/index.html | 246 ++++++ .../character_classes/index.html | 216 +++++ .../groups_and_ranges/index.html | 162 ++++ .../guide/regular_expressions/index.html | 800 +++++++++++++++++ .../regular_expressions/quantifiers/index.html | 152 ++++ .../javascript/guide/text_formatting/index.html | 256 ++++++ .../creating_the_hierarchy/index.html | 134 +++ .../guide/the_employee_example/index.html | 31 + .../object_properties/adding_properties/index.html | 19 + .../object_properties/index.html | 13 + .../inheriting_properties/index.html | 24 + .../web/javascript/guide/using_promises/index.html | 358 ++++++++ .../guide/using_the_arguments_object/index.html | 36 + files/ja/web/javascript/guide/variables/index.html | 62 ++ .../guide/working_with_objects/index.html | 496 +++++++++++ .../index.html | 193 +++++ files/ja/web/javascript/index.html | 152 ++++ .../inheritance_and_the_prototype_chain/index.html | 286 +++++++ .../index.html | 380 ++++++++ .../index.html | 411 +++++++++ .../javascript_technologies_overview/index.html | 91 ++ .../web/javascript/language_resources/index.html | 154 ++++ .../ja/web/javascript/memory_management/index.html | 187 ++++ .../javascript/new_in_javascript/1.1/index.html | 74 ++ .../javascript/new_in_javascript/1.2/index.html | 92 ++ .../javascript/new_in_javascript/1.3/index.html | 153 ++++ .../javascript/new_in_javascript/1.4/index.html | 28 + .../javascript/new_in_javascript/1.5/index.html | 42 + .../javascript/new_in_javascript/1.6/index.html | 79 ++ .../javascript/new_in_javascript/1.7/index.html | 558 ++++++++++++ .../javascript/new_in_javascript/1.8.1/index.html | 34 + .../javascript/new_in_javascript/1.8.5/index.html | 143 ++++ .../javascript/new_in_javascript/1.8/index.html | 123 +++ .../ja/web/javascript/new_in_javascript/index.html | 78 ++ files/ja/web/javascript/reference/about/index.html | 48 ++ .../reference/classes/constructor/index.html | 190 ++++ .../reference/classes/extends/index.html | 91 ++ .../ja/web/javascript/reference/classes/index.html | 424 +++++++++ .../classes/private_class_fields/index.html | 207 +++++ .../classes/public_class_fields/index.html | 267 ++++++ .../javascript/reference/classes/static/index.html | 132 +++ .../deprecated_and_obsolete_features/index.html | 291 +++++++ .../the_legacy_iterator_protocol/index.html | 75 ++ .../reference/errors/already_has_pragma/index.html | 42 + .../errors/array_sort_argument/index.html | 47 + .../reference/errors/bad_octal/index.html | 51 ++ .../reference/errors/bad_radix/index.html | 61 ++ .../reference/errors/bad_regexp_flag/index.html | 106 +++ .../errors/bad_return_or_yield/index.html | 55 ++ .../errors/called_on_incompatible_type/index.html | 72 ++ .../index.html | 60 ++ .../errors/cant_access_property/index.html | 59 ++ .../errors/cant_assign_to_property/index.html | 55 ++ .../index.html | 64 ++ .../reference/errors/cant_delete/index.html | 58 ++ .../errors/cant_redefine_property/index.html | 51 ++ .../errors/cyclic_object_value/index.html | 72 ++ .../reference/errors/dead_object/index.html | 51 ++ .../errors/delete_in_strict_mode/index.html | 70 ++ .../index.html | 75 ++ .../deprecated_expression_closures/index.html | 82 ++ .../reference/errors/deprecated_octal/index.html | 66 ++ .../errors/deprecated_source_map_pragma/index.html | 61 ++ .../errors/deprecated_string_generics/index.html | 105 +++ .../errors/deprecated_tolocaleformat/index.html | 91 ++ .../reference/errors/equal_as_assign/index.html | 54 ++ .../for-each-in_loops_are_deprecated/index.html | 168 ++++ .../reference/errors/getter_only/index.html | 83 ++ .../errors/identifier_after_number/index.html | 53 ++ .../reference/errors/illegal_character/index.html | 75 ++ .../errors/in_operator_no_object/index.html | 75 ++ .../ja/web/javascript/reference/errors/index.html | 25 + .../errors/invalid_array_length/index.html | 77 ++ .../invalid_assignment_left-hand_side/index.html | 54 ++ .../errors/invalid_const_assignment/index.html | 91 ++ .../reference/errors/invalid_date/index.html | 54 ++ .../errors/invalid_for-in_initializer/index.html | 75 ++ .../errors/invalid_for-of_initializer/index.html | 64 ++ .../index.html | 62 ++ .../reference/errors/is_not_iterable/index.html | 105 +++ .../reference/errors/json_bad_parse/index.html | 113 +++ .../errors/malformed_formal_parameter/index.html | 65 ++ .../reference/errors/malformed_uri/index.html | 64 ++ .../errors/missing_bracket_after_list/index.html | 56 ++ .../missing_colon_after_property_id/index.html | 77 ++ .../missing_curly_after_function_body/index.html | 67 ++ .../missing_curly_after_property_list/index.html | 51 ++ .../errors/missing_formal_parameter/index.html | 80 ++ .../errors/missing_initializer_in_const/index.html | 59 ++ .../missing_name_after_dot_operator/index.html | 68 ++ .../index.html | 42 + .../missing_parenthesis_after_condition/index.html | 70 ++ .../missing_semicolon_before_statement/index.html | 67 ++ .../errors/more_arguments_needed/index.html | 48 ++ .../errors/negative_repetition_count/index.html | 44 + .../reference/errors/no_non-null_object/index.html | 66 ++ .../reference/errors/no_properties/index.html | 40 + .../reference/errors/no_variable_name/index.html | 90 ++ .../non_configurable_array_element/index.html | 78 ++ .../reference/errors/not_a_codepoint/index.html | 55 ++ .../reference/errors/not_a_constructor/index.html | 95 ++ .../reference/errors/not_a_function/index.html | 122 +++ .../reference/errors/not_defined/index.html | 72 ++ .../reference/errors/precision_range/index.html | 96 +++ .../errors/property_access_denied/index.html | 51 ++ .../reference/errors/read-only/index.html | 81 ++ .../errors/redeclared_parameter/index.html | 61 ++ .../index.html | 88 ++ .../errors/reserved_identifier/index.html | 80 ++ .../errors/resulting_string_too_large/index.html | 49 ++ .../reference/errors/stmt_after_return/index.html | 81 ++ .../errors/strict_non_simple_params/index.html | 111 +++ .../reference/errors/too_much_recursion/index.html | 119 +++ .../typed_array_invalid_arguments/index.html | 77 ++ .../reference/errors/undeclared_var/index.html | 67 ++ .../reference/errors/undefined_prop/index.html | 59 ++ .../reference/errors/unexpected_token/index.html | 81 ++ .../reference/errors/unexpected_type/index.html | 77 ++ .../errors/unnamed_function_statement/index.html | 115 +++ .../errors/unterminated_string_literal/index.html | 67 ++ .../reference/errors/var_hides_argument/index.html | 56 ++ .../functions/arguments/@@iterator/index.html | 63 ++ .../functions/arguments/callee/index.html | 158 ++++ .../functions/arguments/caller/index.html | 56 ++ .../reference/functions/arguments/index.html | 227 +++++ .../functions/arguments/length/index.html | 124 +++ .../reference/functions/arrow_functions/index.html | 405 +++++++++ .../functions/default_parameters/index.html | 225 +++++ .../javascript/reference/functions/get/index.html | 176 ++++ .../web/javascript/reference/functions/index.html | 575 +++++++++++++ .../functions/method_definitions/index.html | 218 +++++ .../reference/functions/rest_parameters/index.html | 215 +++++ .../javascript/reference/functions/set/index.html | 146 ++++ .../aggregateerror/aggregateerror/index.html | 69 ++ .../global_objects/aggregateerror/index.html | 88 ++ .../global_objects/array/@@iterator/index.html | 126 +++ .../global_objects/array/@@species/index.html | 73 ++ .../global_objects/array/@@unscopables/index.html | 78 ++ .../global_objects/array/array/index.html | 88 ++ .../global_objects/array/concat/index.html | 141 +++ .../global_objects/array/copywithin/index.html | 181 ++++ .../global_objects/array/entries/index.html | 89 ++ .../global_objects/array/every/index.html | 243 ++++++ .../reference/global_objects/array/fill/index.html | 147 ++++ .../global_objects/array/filter/index.html | 287 +++++++ .../reference/global_objects/array/find/index.html | 236 +++++ .../global_objects/array/findindex/index.html | 191 +++++ .../reference/global_objects/array/flat/index.html | 177 ++++ .../global_objects/array/flatmap/index.html | 148 ++++ .../global_objects/array/foreach/index.html | 370 ++++++++ .../reference/global_objects/array/from/index.html | 307 +++++++ .../global_objects/array/includes/index.html | 137 +++ .../reference/global_objects/array/index.html | 465 ++++++++++ .../global_objects/array/index/index.html | 22 + .../global_objects/array/indexof/index.html | 215 +++++ .../global_objects/array/input/index.html | 25 + .../global_objects/array/isarray/index.html | 120 +++ .../reference/global_objects/array/join/index.html | 96 +++ .../reference/global_objects/array/keys/index.html | 70 ++ .../global_objects/array/lastindexof/index.html | 148 ++++ .../global_objects/array/length/index.html | 125 +++ .../reference/global_objects/array/map/index.html | 366 ++++++++ .../global_objects/array/observe/index.html | 89 ++ .../reference/global_objects/array/of/index.html | 107 +++ .../reference/global_objects/array/pop/index.html | 95 ++ .../global_objects/array/prototype/index.html | 176 ++++ .../reference/global_objects/array/push/index.html | 126 +++ .../global_objects/array/reduce/index.html | 592 +++++++++++++ .../global_objects/array/reduceright/index.html | 353 ++++++++ .../global_objects/array/reverse/index.html | 91 ++ .../global_objects/array/shift/index.html | 98 +++ .../global_objects/array/slice/index.html | 154 ++++ .../reference/global_objects/array/some/index.html | 197 +++++ .../reference/global_objects/array/sort/index.html | 256 ++++++ .../global_objects/array/splice/index.html | 160 ++++ .../global_objects/array/tolocalestring/index.html | 179 ++++ .../global_objects/array/tosource/index.html | 69 ++ .../global_objects/array/tostring/index.html | 73 ++ .../global_objects/array/unobserve/index.html | 134 +++ .../global_objects/array/unshift/index.html | 108 +++ .../global_objects/array/values/index.html | 122 +++ .../arraybuffer/@@species/index.html | 64 ++ .../arraybuffer/arraybuffer/index.html | 82 ++ .../arraybuffer/bytelength/index.html | 56 ++ .../global_objects/arraybuffer/index.html | 89 ++ .../global_objects/arraybuffer/isview/index.html | 80 ++ .../global_objects/arraybuffer/slice/index.html | 77 ++ .../global_objects/arraybuffer/transfer/index.html | 126 +++ .../global_objects/asyncfunction/index.html | 104 +++ .../asyncfunction/prototype/index.html | 109 +++ .../global_objects/atomics/add/index.html | 85 ++ .../global_objects/atomics/and/index.html | 131 +++ .../atomics/compareexchange/index.html | 88 ++ .../global_objects/atomics/exchange/index.html | 85 ++ .../reference/global_objects/atomics/index.html | 145 ++++ .../global_objects/atomics/load/index.html | 83 ++ .../reference/global_objects/atomics/or/index.html | 128 +++ .../global_objects/atomics/store/index.html | 84 ++ .../global_objects/atomics/sub/index.html | 84 ++ .../global_objects/atomics/wait/index.html | 97 +++ .../global_objects/atomics/wake/index.html | 142 +++ .../global_objects/bigint/asintn/index.html | 80 ++ .../global_objects/bigint/asuintn/index.html | 79 ++ .../global_objects/bigint/bigint/index.html | 65 ++ .../reference/global_objects/bigint/index.html | 296 +++++++ .../global_objects/bigint/tostring/index.html | 95 ++ .../bigint64array/bigint64array/index.html | 94 ++ .../global_objects/bigint64array/index.html | 170 ++++ .../biguint64array/biguint64array/index.html | 96 +++ .../global_objects/biguint64array/index.html | 170 ++++ .../global_objects/boolean/boolean/index.html | 77 ++ .../reference/global_objects/boolean/index.html | 125 +++ .../global_objects/boolean/tosource/index.html | 56 ++ .../global_objects/boolean/tostring/index.html | 88 ++ .../global_objects/boolean/valueof/index.html | 85 ++ .../global_objects/dataview/buffer/index.html | 60 ++ .../global_objects/dataview/bytelength/index.html | 66 ++ .../global_objects/dataview/byteoffset/index.html | 63 ++ .../global_objects/dataview/dataview/index.html | 88 ++ .../global_objects/dataview/getfloat32/index.html | 83 ++ .../global_objects/dataview/getfloat64/index.html | 83 ++ .../global_objects/dataview/getint16/index.html | 83 ++ .../global_objects/dataview/getint32/index.html | 83 ++ .../global_objects/dataview/getint8/index.html | 81 ++ .../global_objects/dataview/getuint16/index.html | 83 ++ .../global_objects/dataview/getuint32/index.html | 83 ++ .../global_objects/dataview/getuint8/index.html | 81 ++ .../reference/global_objects/dataview/index.html | 164 ++++ .../global_objects/dataview/setfloat32/index.html | 82 ++ .../global_objects/dataview/setfloat64/index.html | 82 ++ .../global_objects/dataview/setint16/index.html | 82 ++ .../global_objects/dataview/setint32/index.html | 82 ++ .../global_objects/dataview/setint8/index.html | 80 ++ .../global_objects/dataview/setuint16/index.html | 82 ++ .../global_objects/dataview/setuint32/index.html | 82 ++ .../global_objects/dataview/setuint8/index.html | 80 ++ .../global_objects/date/@@toprimitive/index.html | 75 ++ .../reference/global_objects/date/date/index.html | 135 +++ .../global_objects/date/getdate/index.html | 67 ++ .../global_objects/date/getday/index.html | 80 ++ .../global_objects/date/getfullyear/index.html | 71 ++ .../global_objects/date/gethours/index.html | 67 ++ .../global_objects/date/getmilliseconds/index.html | 64 ++ .../global_objects/date/getminutes/index.html | 66 ++ .../global_objects/date/getmonth/index.html | 77 ++ .../global_objects/date/getseconds/index.html | 66 ++ .../global_objects/date/gettime/index.html | 110 +++ .../date/gettimezoneoffset/index.html | 98 +++ .../global_objects/date/getutcdate/index.html | 65 ++ .../global_objects/date/getutcday/index.html | 65 ++ .../global_objects/date/getutcfullyear/index.html | 68 ++ .../global_objects/date/getutchours/index.html | 64 ++ .../date/getutcmilliseconds/index.html | 66 ++ .../global_objects/date/getutcminutes/index.html | 64 ++ .../global_objects/date/getutcmonth/index.html | 64 ++ .../global_objects/date/getutcseconds/index.html | 64 ++ .../global_objects/date/getyear/index.html | 108 +++ .../reference/global_objects/date/index.html | 263 ++++++ .../reference/global_objects/date/now/index.html | 86 ++ .../reference/global_objects/date/parse/index.html | 199 +++++ .../global_objects/date/setdate/index.html | 82 ++ .../global_objects/date/setfullyear/index.html | 80 ++ .../global_objects/date/sethours/index.html | 85 ++ .../global_objects/date/setmilliseconds/index.html | 73 ++ .../global_objects/date/setminutes/index.html | 83 ++ .../global_objects/date/setmonth/index.html | 86 ++ .../global_objects/date/setseconds/index.html | 81 ++ .../global_objects/date/settime/index.html | 74 ++ .../global_objects/date/setutcdate/index.html | 73 ++ .../global_objects/date/setutcfullyear/index.html | 79 ++ .../global_objects/date/setutchours/index.html | 81 ++ .../date/setutcmilliseconds/index.html | 73 ++ .../global_objects/date/setutcminutes/index.html | 79 ++ .../global_objects/date/setutcmonth/index.html | 77 ++ .../global_objects/date/setutcseconds/index.html | 77 ++ .../global_objects/date/setyear/index.html | 77 ++ .../global_objects/date/todatestring/index.html | 84 ++ .../global_objects/date/togmtstring/index.html | 68 ++ .../global_objects/date/toisostring/index.html | 96 +++ .../global_objects/date/tojson/index.html | 69 ++ .../date/tolocaledatestring/index.html | 159 ++++ .../global_objects/date/tolocalestring/index.html | 180 ++++ .../date/tolocaletimestring/index.html | 155 ++++ .../global_objects/date/tosource/index.html | 50 ++ .../global_objects/date/tostring/index.html | 113 +++ .../global_objects/date/totimestring/index.html | 71 ++ .../global_objects/date/toutcstring/index.html | 110 +++ .../reference/global_objects/date/utc/index.html | 124 +++ .../global_objects/date/valueof/index.html | 68 ++ .../reference/global_objects/decodeuri/index.html | 92 ++ .../global_objects/decodeuricomponent/index.html | 98 +++ .../reference/global_objects/encodeuri/index.html | 122 +++ .../global_objects/encodeuricomponent/index.html | 154 ++++ .../global_objects/error/columnnumber/index.html | 42 + .../global_objects/error/error/index.html | 69 ++ .../global_objects/error/filename/index.html | 46 + .../reference/global_objects/error/index.html | 220 +++++ .../global_objects/error/linenumber/index.html | 53 ++ .../global_objects/error/message/index.html | 56 ++ .../reference/global_objects/error/name/index.html | 55 ++ .../global_objects/error/stack/index.html | 125 +++ .../global_objects/error/tosource/index.html | 58 ++ .../global_objects/error/tostring/index.html | 100 +++ .../reference/global_objects/escape/index.html | 87 ++ .../reference/global_objects/eval/index.html | 307 +++++++ .../global_objects/evalerror/evalerror/index.html | 76 ++ .../reference/global_objects/evalerror/index.html | 87 ++ .../finalizationregistry/cleanupsome/index.html | 74 ++ .../finalizationregistry/index.html | 66 ++ .../global_objects/finalizationregistry/index.html | 152 ++++ .../finalizationregistry/register/index.html | 80 ++ .../finalizationregistry/unregister/index.html | 134 +++ .../float32array/float32array/index.html | 105 +++ .../global_objects/float32array/index.html | 197 +++++ .../float64array/float64array/index.html | 105 +++ .../global_objects/float64array/index.html | 197 +++++ .../global_objects/function/apply/index.html | 241 ++++++ .../global_objects/function/arguments/index.html | 66 ++ .../global_objects/function/bind/index.html | 350 ++++++++ .../global_objects/function/call/index.html | 181 ++++ .../global_objects/function/caller/index.html | 84 ++ .../global_objects/function/displayname/index.html | 90 ++ .../global_objects/function/function/index.html | 91 ++ .../reference/global_objects/function/index.html | 114 +++ .../global_objects/function/length/index.html | 76 ++ .../global_objects/function/name/index.html | 233 +++++ .../global_objects/function/tosource/index.html | 69 ++ .../global_objects/function/tostring/index.html | 216 +++++ .../reference/global_objects/generator/index.html | 86 ++ .../global_objects/generator/next/index.html | 137 +++ .../global_objects/generator/return/index.html | 97 +++ .../global_objects/generator/throw/index.html | 95 ++ .../global_objects/generatorfunction/index.html | 94 ++ .../reference/global_objects/globalthis/index.html | 95 ++ .../javascript/reference/global_objects/index.html | 210 +++++ .../reference/global_objects/infinity/index.html | 70 ++ .../reference/global_objects/int16array/index.html | 167 ++++ .../int16array/int16array/index.html | 103 +++ .../reference/global_objects/int32array/index.html | 167 ++++ .../int32array/int32array/index.html | 103 +++ .../reference/global_objects/int8array/index.html | 168 ++++ .../global_objects/int8array/int8array/index.html | 103 +++ .../global_objects/internalerror/index.html | 95 ++ .../internalerror/internalerror/index.html | 53 ++ .../intl/collator/collator/index.html | 112 +++ .../intl/collator/compare/index.html | 88 ++ .../global_objects/intl/collator/index.html | 109 +++ .../intl/collator/resolvedoptions/index.html | 87 ++ .../intl/collator/supportedlocalesof/index.html | 85 ++ .../intl/datetimeformat/datetimeformat/index.html | 191 +++++ .../intl/datetimeformat/format/index.html | 113 +++ .../intl/datetimeformat/formatrange/index.html | 86 ++ .../datetimeformat/formatrangetoparts/index.html | 83 ++ .../intl/datetimeformat/formattoparts/index.html | 241 ++++++ .../global_objects/intl/datetimeformat/index.html | 195 +++++ .../intl/datetimeformat/prototype/index.html | 87 ++ .../intl/datetimeformat/resolvedoptions/index.html | 95 ++ .../datetimeformat/supportedlocalesof/index.html | 128 +++ .../global_objects/intl/displaynames/index.html | 154 ++++ .../intl/getcanonicallocales/index.html | 74 ++ .../reference/global_objects/intl/index.html | 133 +++ .../global_objects/intl/listformat/index.html | 104 +++ .../global_objects/intl/locale/basename/index.html | 75 ++ .../global_objects/intl/locale/calendar/index.html | 159 ++++ .../intl/locale/casefirst/index.html | 92 ++ .../intl/locale/collation/index.html | 166 ++++ .../intl/locale/hourcycle/index.html | 96 +++ .../global_objects/intl/locale/index.html | 104 +++ .../global_objects/intl/locale/language/index.html | 67 ++ .../global_objects/intl/locale/locale/index.html | 61 ++ .../global_objects/intl/locale/maximize/index.html | 79 ++ .../global_objects/intl/locale/minimize/index.html | 78 ++ .../intl/locale/numberingsystem/index.html | 419 +++++++++ .../global_objects/intl/locale/numeric/index.html | 65 ++ .../global_objects/intl/locale/region/index.html | 67 ++ .../global_objects/intl/locale/script/index.html | 67 ++ .../global_objects/intl/locale/tostring/index.html | 67 ++ .../intl/numberformat/format/index.html | 89 ++ .../intl/numberformat/formattoparts/index.html | 151 ++++ .../global_objects/intl/numberformat/index.html | 148 ++++ .../intl/numberformat/numberformat/index.html | 257 ++++++ .../intl/numberformat/resolvedoptions/index.html | 139 +++ .../numberformat/supportedlocalesof/index.html | 84 ++ .../global_objects/intl/pluralrules/index.html | 86 ++ .../intl/pluralrules/select/index.html | 84 ++ .../intl/pluralrules/supportedlocalesof/index.html | 83 ++ .../intl/relativetimeformat/format/index.html | 109 +++ .../relativetimeformat/formattoparts/index.html | 91 ++ .../intl/relativetimeformat/index.html | 112 +++ .../relativetimeformat/index.html | 122 +++ .../reference/global_objects/isfinite/index.html | 88 ++ .../reference/global_objects/isnan/index.html | 115 +++ .../reference/global_objects/iterator/index.html | 95 ++ .../reference/global_objects/json/index.html | 161 ++++ .../reference/global_objects/json/parse/index.html | 219 +++++ .../global_objects/json/stringify/index.html | 364 ++++++++ .../global_objects/map/@@iterator/index.html | 95 ++ .../global_objects/map/@@species/index.html | 64 ++ .../global_objects/map/@@tostringtag/index.html | 60 ++ .../reference/global_objects/map/clear/index.html | 72 ++ .../reference/global_objects/map/delete/index.html | 75 ++ .../global_objects/map/entries/index.html | 71 ++ .../global_objects/map/foreach/index.html | 107 +++ .../reference/global_objects/map/get/index.html | 72 ++ .../reference/global_objects/map/has/index.html | 72 ++ .../reference/global_objects/map/index.html | 369 ++++++++ .../reference/global_objects/map/keys/index.html | 71 ++ .../reference/global_objects/map/map/index.html | 64 ++ .../reference/global_objects/map/set/index.html | 87 ++ .../reference/global_objects/map/size/index.html | 60 ++ .../reference/global_objects/map/values/index.html | 70 ++ .../reference/global_objects/math/abs/index.html | 87 ++ .../reference/global_objects/math/acos/index.html | 86 ++ .../reference/global_objects/math/acosh/index.html | 91 ++ .../reference/global_objects/math/asin/index.html | 86 ++ .../reference/global_objects/math/asinh/index.html | 98 +++ .../reference/global_objects/math/atan/index.html | 89 ++ .../reference/global_objects/math/atan2/index.html | 96 +++ .../reference/global_objects/math/atanh/index.html | 92 ++ .../reference/global_objects/math/cbrt/index.html | 95 ++ .../reference/global_objects/math/ceil/index.html | 155 ++++ .../reference/global_objects/math/clz32/index.html | 181 ++++ .../reference/global_objects/math/cos/index.html | 85 ++ .../reference/global_objects/math/cosh/index.html | 95 ++ .../reference/global_objects/math/e/index.html | 67 ++ .../reference/global_objects/math/exp/index.html | 78 ++ .../reference/global_objects/math/expm1/index.html | 87 ++ .../reference/global_objects/math/floor/index.html | 139 +++ .../global_objects/math/fround/index.html | 127 +++ .../reference/global_objects/math/hypot/index.html | 127 +++ .../reference/global_objects/math/imul/index.html | 111 +++ .../reference/global_objects/math/index.html | 188 ++++ .../reference/global_objects/math/ln10/index.html | 67 ++ .../reference/global_objects/math/ln2/index.html | 67 ++ .../reference/global_objects/math/log/index.html | 98 +++ .../reference/global_objects/math/log10/index.html | 94 ++ .../global_objects/math/log10e/index.html | 67 ++ .../reference/global_objects/math/log1p/index.html | 104 +++ .../reference/global_objects/math/log2/index.html | 95 ++ .../reference/global_objects/math/log2e/index.html | 67 ++ .../reference/global_objects/math/max/index.html | 100 +++ .../reference/global_objects/math/min/index.html | 102 +++ .../reference/global_objects/math/pi/index.html | 65 ++ .../reference/global_objects/math/pow/index.html | 97 +++ .../global_objects/math/random/index.html | 101 +++ .../reference/global_objects/math/round/index.html | 82 ++ .../reference/global_objects/math/sign/index.html | 113 +++ .../reference/global_objects/math/sin/index.html | 80 ++ .../reference/global_objects/math/sinh/index.html | 95 ++ .../reference/global_objects/math/sqrt/index.html | 83 ++ .../global_objects/math/sqrt1_2/index.html | 66 ++ .../reference/global_objects/math/sqrt2/index.html | 66 ++ .../reference/global_objects/math/tan/index.html | 85 ++ .../reference/global_objects/math/tanh/index.html | 87 ++ .../reference/global_objects/math/trunc/index.html | 120 +++ .../reference/global_objects/nan/index.html | 95 ++ .../reference/global_objects/null/index.html | 76 ++ .../global_objects/number/epsilon/index.html | 69 ++ .../reference/global_objects/number/index.html | 183 ++++ .../global_objects/number/isfinite/index.html | 88 ++ .../global_objects/number/isinteger/index.html | 97 +++ .../global_objects/number/isnan/index.html | 100 +++ .../global_objects/number/issafeinteger/index.html | 97 +++ .../number/max_safe_integer/index.html | 81 ++ .../global_objects/number/max_value/index.html | 66 ++ .../number/min_safe_integer/index.html | 64 ++ .../global_objects/number/min_value/index.html | 66 ++ .../reference/global_objects/number/nan/index.html | 63 ++ .../number/negative_infinity/index.html | 84 ++ .../global_objects/number/number/index.html | 62 ++ .../global_objects/number/parsefloat/index.html | 88 ++ .../global_objects/number/parseint/index.html | 82 ++ .../number/positive_infinity/index.html | 83 ++ .../global_objects/number/toexponential/index.html | 91 ++ .../global_objects/number/tofixed/index.html | 97 +++ .../number/tolocalestring/index.html | 191 +++++ .../global_objects/number/toprecision/index.html | 92 ++ .../global_objects/number/tosource/index.html | 39 + .../global_objects/number/tostring/index.html | 99 +++ .../global_objects/number/valueof/index.html | 69 ++ .../object/__definegetter__/index.html | 100 +++ .../object/__definesetter__/index.html | 115 +++ .../object/__lookupgetter__/index.html | 90 ++ .../object/__lookupsetter__/index.html | 90 ++ .../global_objects/object/assign/index.html | 278 ++++++ .../global_objects/object/constructor/index.html | 257 ++++++ .../global_objects/object/count/index.html | 44 + .../global_objects/object/create/index.html | 404 +++++++++ .../object/defineproperties/index.html | 182 ++++ .../object/defineproperty/index.html | 499 +++++++++++ .../global_objects/object/entries/index.html | 155 ++++ .../global_objects/object/freeze/index.html | 245 ++++++ .../global_objects/object/fromentries/index.html | 108 +++ .../object/getownpropertydescriptor/index.html | 149 ++++ .../object/getownpropertydescriptors/index.html | 110 +++ .../object/getownpropertynames/index.html | 157 ++++ .../object/getownpropertysymbols/index.html | 86 ++ .../object/getprototypeof/index.html | 86 ++ .../object/hasownproperty/index.html | 146 ++++ .../reference/global_objects/object/index.html | 287 +++++++ .../reference/global_objects/object/is/index.html | 125 +++ .../global_objects/object/isextensible/index.html | 103 +++ .../global_objects/object/isfrozen/index.html | 167 ++++ .../global_objects/object/isprototypeof/index.html | 113 +++ .../global_objects/object/issealed/index.html | 130 +++ .../global_objects/object/keys/index.html | 161 ++++ .../global_objects/object/object/index.html | 84 ++ .../object/preventextensions/index.html | 129 +++ .../object/propertyisenumerable/index.html | 135 +++ .../global_objects/object/proto/index.html | 131 +++ .../global_objects/object/seal/index.html | 136 +++ .../object/setprototypeof/index.html | 213 +++++ .../object/tolocalestring/index.html | 112 +++ .../global_objects/object/tosource/index.html | 131 +++ .../global_objects/object/tostring/index.html | 169 ++++ .../global_objects/object/valueof/index.html | 120 +++ .../global_objects/object/values/index.html | 98 +++ .../global_objects/parallelarray/index.html | 59 ++ .../reference/global_objects/parsefloat/index.html | 112 +++ .../reference/global_objects/parseint/index.html | 226 +++++ .../global_objects/promise/all/index.html | 236 +++++ .../global_objects/promise/allsettled/index.html | 100 +++ .../global_objects/promise/any/index.html | 154 ++++ .../global_objects/promise/catch/index.html | 190 ++++ .../global_objects/promise/finally/index.html | 109 +++ .../reference/global_objects/promise/index.html | 367 ++++++++ .../global_objects/promise/promise/index.html | 109 +++ .../global_objects/promise/race/index.html | 182 ++++ .../global_objects/promise/reject/index.html | 74 ++ .../global_objects/promise/resolve/index.html | 139 +++ .../global_objects/promise/then/index.html | 300 +++++++ .../reference/global_objects/proxy/index.html | 453 ++++++++++ .../global_objects/proxy/proxy/apply/index.html | 112 +++ .../proxy/proxy/construct/index.html | 134 +++ .../proxy/proxy/defineproperty/index.html | 140 +++ .../proxy/proxy/deleteproperty/index.html | 126 +++ .../global_objects/proxy/proxy/get/index.html | 132 +++ .../proxy/getownpropertydescriptor/index.html | 128 +++ .../proxy/proxy/getprototypeof/index.html | 148 ++++ .../global_objects/proxy/proxy/has/index.html | 127 +++ .../global_objects/proxy/proxy/index.html | 124 +++ .../proxy/proxy/isextensible/index.html | 119 +++ .../global_objects/proxy/proxy/ownkeys/index.html | 133 +++ .../proxy/proxy/preventextensions/index.html | 121 +++ .../global_objects/proxy/proxy/set/index.html | 131 +++ .../proxy/proxy/setprototypeof/index.html | 133 +++ .../global_objects/proxy/revocable/index.html | 91 ++ .../reference/global_objects/rangeerror/index.html | 130 +++ .../rangeerror/rangeerror/index.html | 108 +++ .../global_objects/referenceerror/index.html | 99 +++ .../referenceerror/referenceerror/index.html | 89 ++ .../global_objects/reflect/apply/index.html | 95 ++ .../index.html | 100 +++ .../global_objects/reflect/construct/index.html | 148 ++++ .../reflect/defineproperty/index.html | 100 +++ .../reflect/deleteproperty/index.html | 100 +++ .../global_objects/reflect/get/index.html | 97 +++ .../reflect/getownpropertydescriptor/index.html | 96 +++ .../reflect/getprototypeof/index.html | 97 +++ .../global_objects/reflect/has/index.html | 99 +++ .../reference/global_objects/reflect/index.html | 84 ++ .../global_objects/reflect/isextensible/index.html | 104 +++ .../global_objects/reflect/ownkeys/index.html | 88 ++ .../reflect/preventextensions/index.html | 96 +++ .../global_objects/reflect/set/index.html | 101 +++ .../reflect/setprototypeof/index.html | 90 ++ .../global_objects/regexp/@@match/index.html | 116 +++ .../global_objects/regexp/@@matchall/index.html | 112 +++ .../global_objects/regexp/@@replace/index.html | 120 +++ .../global_objects/regexp/@@search/index.html | 113 +++ .../global_objects/regexp/@@species/index.html | 70 ++ .../global_objects/regexp/@@split/index.html | 111 +++ .../global_objects/regexp/compile/index.html | 85 ++ .../global_objects/regexp/dotall/index.html | 87 ++ .../global_objects/regexp/exec/index.html | 198 +++++ .../global_objects/regexp/flags/index.html | 73 ++ .../global_objects/regexp/global/index.html | 80 ++ .../global_objects/regexp/ignorecase/index.html | 69 ++ .../reference/global_objects/regexp/index.html | 261 ++++++ .../global_objects/regexp/input/index.html | 67 ++ .../global_objects/regexp/lastindex/index.html | 89 ++ .../global_objects/regexp/lastmatch/index.html | 67 ++ .../global_objects/regexp/lastparen/index.html | 67 ++ .../global_objects/regexp/leftcontext/index.html | 67 ++ .../global_objects/regexp/multiline/index.html | 69 ++ .../reference/global_objects/regexp/n/index.html | 83 ++ .../global_objects/regexp/regexp/index.html | 114 +++ .../global_objects/regexp/rightcontext/index.html | 67 ++ .../global_objects/regexp/source/index.html | 69 ++ .../global_objects/regexp/sticky/index.html | 96 +++ .../global_objects/regexp/test/index.html | 130 +++ .../global_objects/regexp/tosource/index.html | 59 ++ .../global_objects/regexp/tostring/index.html | 83 ++ .../global_objects/regexp/unicode/index.html | 71 ++ .../global_objects/set/@@iterator/index.html | 85 ++ .../global_objects/set/@@species/index.html | 64 ++ .../reference/global_objects/set/add/index.html | 76 ++ .../reference/global_objects/set/clear/index.html | 72 ++ .../reference/global_objects/set/delete/index.html | 91 ++ .../global_objects/set/entries/index.html | 71 ++ .../global_objects/set/foreach/index.html | 110 +++ .../reference/global_objects/set/has/index.html | 85 ++ .../reference/global_objects/set/index.html | 283 ++++++ .../reference/global_objects/set/set/index.html | 76 ++ .../reference/global_objects/set/size/index.html | 61 ++ .../reference/global_objects/set/values/index.html | 73 ++ .../sharedarraybuffer/bytelength/index.html | 55 ++ .../global_objects/sharedarraybuffer/index.html | 135 +++ .../sharedarraybuffer/sharedarraybuffer/index.html | 77 ++ .../sharedarraybuffer/slice/index.html | 80 ++ .../global_objects/stopiteration/index.html | 66 ++ .../global_objects/string/@@iterator/index.html | 82 ++ .../global_objects/string/anchor/index.html | 80 ++ .../reference/global_objects/string/big/index.html | 78 ++ .../global_objects/string/blink/index.html | 74 ++ .../global_objects/string/bold/index.html | 70 ++ .../global_objects/string/charat/index.html | 244 ++++++ .../global_objects/string/charcodeat/index.html | 164 ++++ .../global_objects/string/codepointat/index.html | 146 ++++ .../global_objects/string/concat/index.html | 93 ++ .../global_objects/string/endswith/index.html | 94 ++ .../global_objects/string/fixed/index.html | 67 ++ .../global_objects/string/fontcolor/index.html | 86 ++ .../global_objects/string/fontsize/index.html | 85 ++ .../global_objects/string/fromcharcode/index.html | 98 +++ .../global_objects/string/fromcodepoint/index.html | 149 ++++ .../global_objects/string/includes/index.html | 123 +++ .../reference/global_objects/string/index.html | 384 +++++++++ .../global_objects/string/indexof/index.html | 169 ++++ .../global_objects/string/italics/index.html | 69 ++ .../global_objects/string/lastindexof/index.html | 110 +++ .../global_objects/string/length/index.html | 103 +++ .../global_objects/string/link/index.html | 77 ++ .../global_objects/string/localecompare/index.html | 170 ++++ .../global_objects/string/match/index.html | 188 ++++ .../global_objects/string/matchall/index.html | 145 ++++ .../global_objects/string/normalize/index.html | 229 +++++ .../global_objects/string/padend/index.html | 71 ++ .../global_objects/string/padstart/index.html | 88 ++ .../global_objects/string/quote/index.html | 75 ++ .../reference/global_objects/string/raw/index.html | 118 +++ .../global_objects/string/repeat/index.html | 128 +++ .../global_objects/string/replace/index.html | 296 +++++++ .../global_objects/string/search/index.html | 82 ++ .../global_objects/string/slice/index.html | 120 +++ .../global_objects/string/small/index.html | 74 ++ .../global_objects/string/split/index.html | 226 +++++ .../global_objects/string/startswith/index.html | 98 +++ .../global_objects/string/strike/index.html | 70 ++ .../global_objects/string/string/index.html | 64 ++ .../reference/global_objects/string/sub/index.html | 70 ++ .../global_objects/string/substr/index.html | 120 +++ .../global_objects/string/substring/index.html | 182 ++++ .../reference/global_objects/string/sup/index.html | 71 ++ .../string/tolocalelowercase/index.html | 92 ++ .../string/tolocaleuppercase/index.html | 96 +++ .../global_objects/string/tolowercase/index.html | 67 ++ .../global_objects/string/tosource/index.html | 54 ++ .../global_objects/string/tostring/index.html | 65 ++ .../global_objects/string/touppercase/index.html | 90 ++ .../global_objects/string/trim/index.html | 86 ++ .../global_objects/string/trimend/index.html | 80 ++ .../global_objects/string/trimstart/index.html | 116 +++ .../global_objects/string/valueof/index.html | 64 ++ .../global_objects/symbol/@@toprimitive/index.html | 64 ++ .../global_objects/symbol/asynciterator/index.html | 82 ++ .../global_objects/symbol/description/index.html | 66 ++ .../reference/global_objects/symbol/for/index.html | 107 +++ .../global_objects/symbol/hasinstance/index.html | 80 ++ .../reference/global_objects/symbol/index.html | 204 +++++ .../symbol/isconcatspreadable/index.html | 98 +++ .../global_objects/symbol/iterator/index.html | 112 +++ .../global_objects/symbol/keyfor/index.html | 74 ++ .../global_objects/symbol/match/index.html | 70 ++ .../global_objects/symbol/matchall/index.html | 77 ++ .../global_objects/symbol/replace/index.html | 67 ++ .../global_objects/symbol/search/index.html | 67 ++ .../global_objects/symbol/species/index.html | 68 ++ .../global_objects/symbol/split/index.html | 65 ++ .../global_objects/symbol/symbol/index.html | 88 ++ .../global_objects/symbol/toprimitive/index.html | 82 ++ .../global_objects/symbol/tosource/index.html | 57 ++ .../global_objects/symbol/tostring/index.html | 76 ++ .../global_objects/symbol/tostringtag/index.html | 100 +++ .../global_objects/symbol/unscopables/index.html | 90 ++ .../global_objects/symbol/valueof/index.html | 64 ++ .../global_objects/syntaxerror/index.html | 99 +++ .../syntaxerror/syntaxerror/index.html | 89 ++ .../typedarray/@@iterator/index.html | 80 ++ .../global_objects/typedarray/@@species/index.html | 66 ++ .../global_objects/typedarray/buffer/index.html | 59 ++ .../typedarray/bytelength/index.html | 66 ++ .../typedarray/byteoffset/index.html | 59 ++ .../typedarray/bytes_per_element/index.html | 65 ++ .../typedarray/copywithin/index.html | 81 ++ .../global_objects/typedarray/entries/index.html | 86 ++ .../global_objects/typedarray/every/index.html | 105 +++ .../global_objects/typedarray/fill/index.html | 96 +++ .../global_objects/typedarray/filter/index.html | 105 +++ .../global_objects/typedarray/find/index.html | 109 +++ .../global_objects/typedarray/findindex/index.html | 149 ++++ .../global_objects/typedarray/foreach/index.html | 110 +++ .../global_objects/typedarray/from/index.html | 188 ++++ .../global_objects/typedarray/includes/index.html | 81 ++ .../reference/global_objects/typedarray/index.html | 313 +++++++ .../global_objects/typedarray/indexof/index.html | 81 ++ .../global_objects/typedarray/join/index.html | 88 ++ .../global_objects/typedarray/keys/index.html | 88 ++ .../typedarray/lastindexof/index.html | 82 ++ .../global_objects/typedarray/length/index.html | 66 ++ .../global_objects/typedarray/map/index.html | 115 +++ .../global_objects/typedarray/name/index.html | 65 ++ .../global_objects/typedarray/of/index.html | 101 +++ .../global_objects/typedarray/reduce/index.html | 99 +++ .../typedarray/reduceright/index.html | 98 +++ .../global_objects/typedarray/reverse/index.html | 65 ++ .../global_objects/typedarray/set/index.html | 81 ++ .../global_objects/typedarray/slice/index.html | 103 +++ .../global_objects/typedarray/some/index.html | 119 +++ .../global_objects/typedarray/sort/index.html | 83 ++ .../global_objects/typedarray/subarray/index.html | 86 ++ .../typedarray/tolocalestring/index.html | 78 ++ .../global_objects/typedarray/tostring/index.html | 73 ++ .../global_objects/typedarray/values/index.html | 121 +++ .../reference/global_objects/typeerror/index.html | 107 +++ .../global_objects/typeerror/typeerror/index.html | 89 ++ .../global_objects/uint16array/index.html | 168 ++++ .../uint16array/uint16array/index.html | 105 +++ .../global_objects/uint32array/index.html | 167 ++++ .../uint32array/uint32array/index.html | 103 +++ .../reference/global_objects/uint8array/index.html | 168 ++++ .../uint8array/uint8array/index.html | 103 +++ .../global_objects/uint8clampedarray/index.html | 169 ++++ .../uint8clampedarray/uint8clampedarray/index.html | 105 +++ .../reference/global_objects/undefined/index.html | 143 ++++ .../reference/global_objects/unescape/index.html | 77 ++ .../reference/global_objects/uneval/index.html | 74 ++ .../reference/global_objects/urierror/index.html | 103 +++ .../global_objects/urierror/urierror/index.html | 93 ++ .../global_objects/weakmap/clear/index.html | 99 +++ .../global_objects/weakmap/delete/index.html | 72 ++ .../global_objects/weakmap/get/index.html | 73 ++ .../global_objects/weakmap/has/index.html | 76 ++ .../reference/global_objects/weakmap/index.html | 144 ++++ .../global_objects/weakmap/set/index.html | 78 ++ .../global_objects/weakmap/weakmap/index.html | 90 ++ .../reference/global_objects/weakref/index.html | 149 ++++ .../global_objects/weakref/weakref/index.html | 67 ++ .../global_objects/weakset/add/index.html | 77 ++ .../global_objects/weakset/clear/index.html | 95 ++ .../global_objects/weakset/delete/index.html | 76 ++ .../global_objects/weakset/has/index.html | 77 ++ .../reference/global_objects/weakset/index.html | 133 +++ .../global_objects/weakset/weakset/index.html | 71 ++ .../global_objects/webassembly/compile/index.html | 97 +++ .../webassembly/compileerror/index.html | 110 +++ .../webassembly/compilestreaming/index.html | 77 ++ .../global_objects/webassembly/global/index.html | 118 +++ .../global_objects/webassembly/index.html | 116 +++ .../webassembly/instance/exports/index.html | 69 ++ .../global_objects/webassembly/instance/index.html | 69 ++ .../webassembly/instance/instance/index.html | 64 ++ .../webassembly/instance/prototype/index.html | 63 ++ .../webassembly/instantiate/index.html | 171 ++++ .../webassembly/instantiatestreaming/index.html | 83 ++ .../webassembly/linkerror/index.html | 107 +++ .../webassembly/memory/buffer/index.html | 62 ++ .../webassembly/memory/grow/index.html | 80 ++ .../global_objects/webassembly/memory/index.html | 91 ++ .../webassembly/memory/memory/index.html | 94 ++ .../webassembly/memory/prototype/index.html | 70 ++ .../webassembly/module/customsections/index.html | 144 ++++ .../webassembly/module/exports/index.html | 109 +++ .../webassembly/module/imports/index.html | 83 ++ .../global_objects/webassembly/module/index.html | 97 +++ .../webassembly/runtimeerror/index.html | 107 +++ .../webassembly/table/get/index.html | 79 ++ .../webassembly/table/grow/index.html | 79 ++ .../global_objects/webassembly/table/index.html | 126 +++ .../webassembly/table/length/index.html | 63 ++ .../webassembly/table/prototype/index.html | 74 ++ .../webassembly/table/set/index.html | 101 +++ .../webassembly/table/table/index.html | 100 +++ .../global_objects/webassembly/validate/index.html | 71 ++ files/ja/web/javascript/reference/index.html | 433 ++++++++++ .../reference/iteration_protocols/index.html | 394 +++++++++ .../reference/lexical_grammar/index.html | 659 ++++++++++++++ .../reference/operators/addition/index.html | 82 ++ .../operators/addition_assignment/index.html | 78 ++ .../operators/array_comprehensions/index.html | 198 +++++ .../reference/operators/assignment/index.html | 62 ++ .../reference/operators/async_function/index.html | 151 ++++ .../reference/operators/await/index.html | 139 +++ .../reference/operators/bitwise_and/index.html | 114 +++ .../operators/bitwise_and_assignment/index.html | 64 ++ .../reference/operators/bitwise_not/index.html | 102 +++ .../reference/operators/bitwise_or/index.html | 116 +++ .../operators/bitwise_or_assignment/index.html | 66 ++ .../reference/operators/bitwise_xor/index.html | 116 +++ .../operators/bitwise_xor_assignment/index.html | 71 ++ .../reference/operators/class/index.html | 116 +++ .../reference/operators/comma_operator/index.html | 94 ++ .../operators/comparison_operators/index.html | 231 +++++ .../operators/conditional_operator/index.html | 115 +++ .../reference/operators/decrement/index.html | 83 ++ .../reference/operators/delete/index.html | 296 +++++++ .../operators/destructuring_assignment/index.html | 444 ++++++++++ .../reference/operators/division/index.html | 76 ++ .../operators/division_assignment/index.html | 63 ++ .../reference/operators/equality/index.html | 128 +++ .../reference/operators/exponentiation/index.html | 103 +++ .../operators/exponentiation_assignment/index.html | 61 ++ .../operators/expression_closures/index.html | 76 ++ .../reference/operators/function/index.html | 145 ++++ .../reference/operators/function_star_/index.html | 88 ++ .../operators/generator_comprehensions/index.html | 172 ++++ .../reference/operators/greater_than/index.html | 100 +++ .../operators/greater_than_or_equal/index.html | 100 +++ .../reference/operators/grouping/index.html | 78 ++ .../javascript/reference/operators/in/index.html | 141 +++ .../reference/operators/increment/index.html | 81 ++ .../web/javascript/reference/operators/index.html | 299 +++++++ .../reference/operators/inequality/index.html | 98 +++ .../reference/operators/instanceof/index.html | 175 ++++ .../reference/operators/left_shift/index.html | 77 ++ .../operators/left_shift_assignment/index.html | 61 ++ .../reference/operators/less_than/index.html | 115 +++ .../operators/less_than_or_equal/index.html | 104 +++ .../reference/operators/logical_and/index.html | 146 ++++ .../operators/logical_and_assignment/index.html | 89 ++ .../reference/operators/logical_not/index.html | 109 +++ .../logical_nullish_assignment/index.html | 89 ++ .../operators/logical_operators/index.html | 294 +++++++ .../reference/operators/logical_or/index.html | 155 ++++ .../operators/logical_or_assignment/index.html | 93 ++ .../reference/operators/multiplication/index.html | 74 ++ .../operators/multiplication_assignment/index.html | 61 ++ .../reference/operators/new.target/index.html | 113 +++ .../javascript/reference/operators/new/index.html | 181 ++++ .../nullish_coalescing_operator/index.html | 155 ++++ .../operators/object_initializer/index.html | 311 +++++++ .../operators/operator_precedence/index.html | 483 +++++++++++ .../operators/optional_chaining/index.html | 203 +++++ .../operators/pipeline_operator/index.html | 87 ++ .../operators/property_accessors/index.html | 155 ++++ .../reference/operators/remainder/index.html | 78 ++ .../operators/remainder_assignment/index.html | 62 ++ .../reference/operators/right_shift/index.html | 79 ++ .../operators/right_shift_assignment/index.html | 61 ++ .../reference/operators/special/index.html | 5 + .../operators/special_operators/index.html | 5 + .../reference/operators/spread_syntax/index.html | 258 ++++++ .../reference/operators/strict_equality/index.html | 108 +++ .../operators/strict_inequality/index.html | 102 +++ .../reference/operators/subtraction/index.html | 68 ++ .../operators/subtraction_assignment/index.html | 61 ++ .../reference/operators/super/index.html | 176 ++++ .../javascript/reference/operators/this/index.html | 488 +++++++++++ .../reference/operators/typeof/index.html | 288 +++++++ .../reference/operators/unary_negation/index.html | 80 ++ .../reference/operators/unary_plus/index.html | 80 ++ .../operators/unsigned_right_shift/index.html | 79 ++ .../unsigned_right_shift_assignment/index.html | 61 ++ .../javascript/reference/operators/void/index.html | 150 ++++ .../reference/operators/yield/index.html | 106 +++ .../reference/operators/yield_star_/index.html | 140 +++ .../javascript/reference/reserved_words/index.html | 88 ++ .../reference/statements/async_function/index.html | 261 ++++++ .../reference/statements/block/index.html | 118 +++ .../reference/statements/break/index.html | 157 ++++ .../reference/statements/class/index.html | 102 +++ .../reference/statements/const/index.html | 157 ++++ .../reference/statements/continue/index.html | 144 ++++ .../reference/statements/debugger/index.html | 59 ++ .../reference/statements/do...while/index.html | 79 ++ .../reference/statements/empty/index.html | 94 ++ .../reference/statements/export/index.html | 268 ++++++ .../reference/statements/for-await...of/index.html | 255 ++++++ .../reference/statements/for...in/index.html | 152 ++++ .../reference/statements/for...of/index.html | 315 +++++++ .../javascript/reference/statements/for/index.html | 146 ++++ .../reference/statements/for_each...in/index.html | 81 ++ .../reference/statements/function/index.html | 158 ++++ .../reference/statements/function_star_/index.html | 258 ++++++ .../reference/statements/if...else/index.html | 152 ++++ .../reference/statements/import.meta/index.html | 101 +++ .../reference/statements/import/index.html | 253 ++++++ .../web/javascript/reference/statements/index.html | 130 +++ .../reference/statements/label/index.html | 188 ++++ .../javascript/reference/statements/let/index.html | 280 ++++++ .../reference/statements/return/index.html | 143 ++++ .../reference/statements/switch/index.html | 298 +++++++ .../reference/statements/throw/index.html | 185 ++++ .../reference/statements/try...catch/index.html | 257 ++++++ .../javascript/reference/statements/var/index.html | 246 ++++++ .../reference/statements/while/index.html | 84 ++ .../reference/statements/with/index.html | 110 +++ .../reference/statements/yield/index.html | 6 + .../javascript/reference/strict_mode/index.html | 368 ++++++++ .../transitioning_to_strict_mode/index.html | 142 +++ .../reference/template_literals/index.html | 273 ++++++ .../reference/trailing_commas/index.html | 172 ++++ .../javascript/server-side_javascript/index.html | 11 + files/ja/web/javascript/shells/index.html | 45 + files/ja/web/javascript/typed_arrays/index.html | 269 ++++++ 966 files changed, 120010 insertions(+) create mode 100644 files/ja/web/javascript/a_re-introduction_to_javascript/index.html create mode 100644 files/ja/web/javascript/about_javascript/index.html create mode 100644 files/ja/web/javascript/closures/index.html create mode 100644 files/ja/web/javascript/data_structures/index.html create mode 100644 files/ja/web/javascript/ecmascript_5_support_in_mozilla/index.html create mode 100644 files/ja/web/javascript/ecmascript_6_support_in_mozilla/index.html create mode 100644 files/ja/web/javascript/enumerability_and_ownership_of_properties/index.html create mode 100644 files/ja/web/javascript/equality_comparisons_and_sameness/index.html create mode 100644 files/ja/web/javascript/eventloop/index.html create mode 100644 files/ja/web/javascript/getting_started/index.html create mode 100644 files/ja/web/javascript/guide/class-based_vs._prototype-based_languages/index.html create mode 100644 files/ja/web/javascript/guide/control_flow_and_error_handling/index.html create mode 100644 files/ja/web/javascript/guide/core_language_features/index.html create mode 100644 files/ja/web/javascript/guide/creating_a_regular_expression/index.html create mode 100644 files/ja/web/javascript/guide/creating_new_objects/defining_getters_and_setters/index.html create mode 100644 files/ja/web/javascript/guide/creating_new_objects/defining_methods/index.html create mode 100644 files/ja/web/javascript/guide/creating_new_objects/defining_properties_for_an_object_type/index.html create mode 100644 files/ja/web/javascript/guide/creating_new_objects/deleting_properties/index.html create mode 100644 files/ja/web/javascript/guide/creating_new_objects/index.html create mode 100644 files/ja/web/javascript/guide/creating_new_objects/indexing_object_properties/index.html create mode 100644 files/ja/web/javascript/guide/creating_new_objects/using_a_constructor_function/index.html create mode 100644 files/ja/web/javascript/guide/creating_new_objects/using_object_initializers/index.html create mode 100644 files/ja/web/javascript/guide/creating_new_objects/using_this_for_object_references/index.html create mode 100644 files/ja/web/javascript/guide/details_of_the_object_model/index.html create mode 100644 files/ja/web/javascript/guide/exception_handling_statements/index.html create mode 100644 files/ja/web/javascript/guide/exception_handling_statements/throw_statement/index.html create mode 100644 files/ja/web/javascript/guide/exception_handling_statements/try...catch_statement/index.html create mode 100644 files/ja/web/javascript/guide/expressions/index.html create mode 100644 files/ja/web/javascript/guide/expressions_and_operators/index.html create mode 100644 files/ja/web/javascript/guide/functions/index.html create mode 100644 files/ja/web/javascript/guide/grammar_and_types/index.html create mode 100644 files/ja/web/javascript/guide/index.html create mode 100644 files/ja/web/javascript/guide/indexed_collections/index.html create mode 100644 files/ja/web/javascript/guide/introduction/index.html create mode 100644 files/ja/web/javascript/guide/iterators_and_generators/index.html create mode 100644 files/ja/web/javascript/guide/keyed_collections/index.html create mode 100644 files/ja/web/javascript/guide/liveconnect_overview/index.html create mode 100644 files/ja/web/javascript/guide/loop_statements/break_statement/index.html create mode 100644 files/ja/web/javascript/guide/loop_statements/continue_statement/index.html create mode 100644 files/ja/web/javascript/guide/loop_statements/do...while_statement/index.html create mode 100644 files/ja/web/javascript/guide/loop_statements/for_statement/index.html create mode 100644 files/ja/web/javascript/guide/loop_statements/index.html create mode 100644 files/ja/web/javascript/guide/loop_statements/label_statement/index.html create mode 100644 files/ja/web/javascript/guide/loop_statements/while_statement/index.html create mode 100644 files/ja/web/javascript/guide/loops_and_iteration/index.html create mode 100644 files/ja/web/javascript/guide/meta_programming/index.html create mode 100644 files/ja/web/javascript/guide/modules/index.html create mode 100644 files/ja/web/javascript/guide/numbers_and_dates/index.html create mode 100644 files/ja/web/javascript/guide/object_manipulation_statements/index.html create mode 100644 files/ja/web/javascript/guide/objects_and_properties/index.html create mode 100644 files/ja/web/javascript/guide/obsolete_pages/index.html create mode 100644 files/ja/web/javascript/guide/obsolete_pages/predefined_core_objects/function_object/index.html create mode 100644 files/ja/web/javascript/guide/operators/arithmetic_operators/index.html create mode 100644 files/ja/web/javascript/guide/operators/assignment_operators/index.html create mode 100644 files/ja/web/javascript/guide/operators/comparison_operators/index.html create mode 100644 files/ja/web/javascript/guide/operators/logical_operators/index.html create mode 100644 files/ja/web/javascript/guide/operators/special_operators/index.html create mode 100644 files/ja/web/javascript/guide/operators/string_operators/index.html create mode 100644 files/ja/web/javascript/guide/predefined_functions/escape_and_unescape_functions/index.html create mode 100644 files/ja/web/javascript/guide/predefined_functions/eval_function/index.html create mode 100644 files/ja/web/javascript/guide/predefined_functions/index.html create mode 100644 files/ja/web/javascript/guide/regular_expressions/assertions/index.html create mode 100644 files/ja/web/javascript/guide/regular_expressions/character_classes/index.html create mode 100644 files/ja/web/javascript/guide/regular_expressions/groups_and_ranges/index.html create mode 100644 files/ja/web/javascript/guide/regular_expressions/index.html create mode 100644 files/ja/web/javascript/guide/regular_expressions/quantifiers/index.html create mode 100644 files/ja/web/javascript/guide/text_formatting/index.html create mode 100644 files/ja/web/javascript/guide/the_employee_example/creating_the_hierarchy/index.html create mode 100644 files/ja/web/javascript/guide/the_employee_example/index.html create mode 100644 files/ja/web/javascript/guide/the_employee_example/object_properties/adding_properties/index.html create mode 100644 files/ja/web/javascript/guide/the_employee_example/object_properties/index.html create mode 100644 files/ja/web/javascript/guide/the_employee_example/object_properties/inheriting_properties/index.html create mode 100644 files/ja/web/javascript/guide/using_promises/index.html create mode 100644 files/ja/web/javascript/guide/using_the_arguments_object/index.html create mode 100644 files/ja/web/javascript/guide/variables/index.html create mode 100644 files/ja/web/javascript/guide/working_with_objects/index.html create mode 100644 files/ja/web/javascript/guide/writing_a_regular_expression_pattern/index.html create mode 100644 files/ja/web/javascript/index.html create mode 100644 files/ja/web/javascript/inheritance_and_the_prototype_chain/index.html create mode 100644 files/ja/web/javascript/introduction_to_object-oriented_javascript/index.html create mode 100644 files/ja/web/javascript/introduction_to_using_xpath_in_javascript/index.html create mode 100644 files/ja/web/javascript/javascript_technologies_overview/index.html create mode 100644 files/ja/web/javascript/language_resources/index.html create mode 100644 files/ja/web/javascript/memory_management/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/1.1/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/1.2/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/1.3/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/1.4/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/1.5/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/1.6/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/1.7/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/1.8.1/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/1.8.5/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/1.8/index.html create mode 100644 files/ja/web/javascript/new_in_javascript/index.html create mode 100644 files/ja/web/javascript/reference/about/index.html create mode 100644 files/ja/web/javascript/reference/classes/constructor/index.html create mode 100644 files/ja/web/javascript/reference/classes/extends/index.html create mode 100644 files/ja/web/javascript/reference/classes/index.html create mode 100644 files/ja/web/javascript/reference/classes/private_class_fields/index.html create mode 100644 files/ja/web/javascript/reference/classes/public_class_fields/index.html create mode 100644 files/ja/web/javascript/reference/classes/static/index.html create mode 100644 files/ja/web/javascript/reference/deprecated_and_obsolete_features/index.html create mode 100644 files/ja/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html create mode 100644 files/ja/web/javascript/reference/errors/already_has_pragma/index.html create mode 100644 files/ja/web/javascript/reference/errors/array_sort_argument/index.html create mode 100644 files/ja/web/javascript/reference/errors/bad_octal/index.html create mode 100644 files/ja/web/javascript/reference/errors/bad_radix/index.html create mode 100644 files/ja/web/javascript/reference/errors/bad_regexp_flag/index.html create mode 100644 files/ja/web/javascript/reference/errors/bad_return_or_yield/index.html create mode 100644 files/ja/web/javascript/reference/errors/called_on_incompatible_type/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_access_property/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_assign_to_property/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_delete/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_redefine_property/index.html create mode 100644 files/ja/web/javascript/reference/errors/cyclic_object_value/index.html create mode 100644 files/ja/web/javascript/reference/errors/dead_object/index.html create mode 100644 files/ja/web/javascript/reference/errors/delete_in_strict_mode/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_expression_closures/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_octal/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_source_map_pragma/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_string_generics/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_tolocaleformat/index.html create mode 100644 files/ja/web/javascript/reference/errors/equal_as_assign/index.html create mode 100644 files/ja/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html create mode 100644 files/ja/web/javascript/reference/errors/getter_only/index.html create mode 100644 files/ja/web/javascript/reference/errors/identifier_after_number/index.html create mode 100644 files/ja/web/javascript/reference/errors/illegal_character/index.html create mode 100644 files/ja/web/javascript/reference/errors/in_operator_no_object/index.html create mode 100644 files/ja/web/javascript/reference/errors/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_array_length/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_const_assignment/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_date/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_for-in_initializer/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_for-of_initializer/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html create mode 100644 files/ja/web/javascript/reference/errors/is_not_iterable/index.html create mode 100644 files/ja/web/javascript/reference/errors/json_bad_parse/index.html create mode 100644 files/ja/web/javascript/reference/errors/malformed_formal_parameter/index.html create mode 100644 files/ja/web/javascript/reference/errors/malformed_uri/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_bracket_after_list/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_colon_after_property_id/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_curly_after_function_body/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_curly_after_property_list/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_formal_parameter/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_initializer_in_const/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_name_after_dot_operator/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_semicolon_before_statement/index.html create mode 100644 files/ja/web/javascript/reference/errors/more_arguments_needed/index.html create mode 100644 files/ja/web/javascript/reference/errors/negative_repetition_count/index.html create mode 100644 files/ja/web/javascript/reference/errors/no_non-null_object/index.html create mode 100644 files/ja/web/javascript/reference/errors/no_properties/index.html create mode 100644 files/ja/web/javascript/reference/errors/no_variable_name/index.html create mode 100644 files/ja/web/javascript/reference/errors/non_configurable_array_element/index.html create mode 100644 files/ja/web/javascript/reference/errors/not_a_codepoint/index.html create mode 100644 files/ja/web/javascript/reference/errors/not_a_constructor/index.html create mode 100644 files/ja/web/javascript/reference/errors/not_a_function/index.html create mode 100644 files/ja/web/javascript/reference/errors/not_defined/index.html create mode 100644 files/ja/web/javascript/reference/errors/precision_range/index.html create mode 100644 files/ja/web/javascript/reference/errors/property_access_denied/index.html create mode 100644 files/ja/web/javascript/reference/errors/read-only/index.html create mode 100644 files/ja/web/javascript/reference/errors/redeclared_parameter/index.html create mode 100644 files/ja/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html create mode 100644 files/ja/web/javascript/reference/errors/reserved_identifier/index.html create mode 100644 files/ja/web/javascript/reference/errors/resulting_string_too_large/index.html create mode 100644 files/ja/web/javascript/reference/errors/stmt_after_return/index.html create mode 100644 files/ja/web/javascript/reference/errors/strict_non_simple_params/index.html create mode 100644 files/ja/web/javascript/reference/errors/too_much_recursion/index.html create mode 100644 files/ja/web/javascript/reference/errors/typed_array_invalid_arguments/index.html create mode 100644 files/ja/web/javascript/reference/errors/undeclared_var/index.html create mode 100644 files/ja/web/javascript/reference/errors/undefined_prop/index.html create mode 100644 files/ja/web/javascript/reference/errors/unexpected_token/index.html create mode 100644 files/ja/web/javascript/reference/errors/unexpected_type/index.html create mode 100644 files/ja/web/javascript/reference/errors/unnamed_function_statement/index.html create mode 100644 files/ja/web/javascript/reference/errors/unterminated_string_literal/index.html create mode 100644 files/ja/web/javascript/reference/errors/var_hides_argument/index.html create mode 100644 files/ja/web/javascript/reference/functions/arguments/@@iterator/index.html create mode 100644 files/ja/web/javascript/reference/functions/arguments/callee/index.html create mode 100644 files/ja/web/javascript/reference/functions/arguments/caller/index.html create mode 100644 files/ja/web/javascript/reference/functions/arguments/index.html create mode 100644 files/ja/web/javascript/reference/functions/arguments/length/index.html create mode 100644 files/ja/web/javascript/reference/functions/arrow_functions/index.html create mode 100644 files/ja/web/javascript/reference/functions/default_parameters/index.html create mode 100644 files/ja/web/javascript/reference/functions/get/index.html create mode 100644 files/ja/web/javascript/reference/functions/index.html create mode 100644 files/ja/web/javascript/reference/functions/method_definitions/index.html create mode 100644 files/ja/web/javascript/reference/functions/rest_parameters/index.html create mode 100644 files/ja/web/javascript/reference/functions/set/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/aggregateerror/aggregateerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/aggregateerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/@@iterator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/@@species/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/@@unscopables/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/concat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/copywithin/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/entries/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/every/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/fill/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/filter/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/find/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/findindex/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/flat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/flatmap/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/foreach/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/from/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/includes/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/index/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/indexof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/input/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/isarray/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/join/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/keys/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/lastindexof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/length/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/map/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/observe/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/of/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/pop/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/prototype/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/push/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/reduce/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/reduceright/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/reverse/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/shift/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/slice/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/some/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/sort/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/splice/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/tolocalestring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/tosource/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/unobserve/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/unshift/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/array/values/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/@@species/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/arraybuffer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/isview/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/slice/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/asyncfunction/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/asyncfunction/prototype/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/add/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/and/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/compareexchange/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/exchange/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/load/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/or/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/store/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/sub/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/wait/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/atomics/wake/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/bigint/asintn/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/bigint/asuintn/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/bigint/bigint/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/bigint/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/bigint/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/bigint64array/bigint64array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/bigint64array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/biguint64array/biguint64array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/biguint64array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/boolean/boolean/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/boolean/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/boolean/tosource/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/boolean/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/boolean/valueof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/buffer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/bytelength/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/byteoffset/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/dataview/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/getfloat32/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/getfloat64/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/getint16/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/getint32/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/getint8/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/getuint16/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/getuint32/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/getuint8/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/setfloat32/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/setfloat64/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/setint16/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/setint32/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/setint8/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/setuint16/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/setuint32/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/dataview/setuint8/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/@@toprimitive/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/date/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getdate/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getday/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getfullyear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/gethours/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getmilliseconds/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getminutes/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getmonth/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getseconds/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/gettime/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getutcdate/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getutcday/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getutcfullyear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getutchours/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getutcminutes/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getutcmonth/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getutcseconds/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/getyear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/now/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/parse/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setdate/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setfullyear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/sethours/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setmilliseconds/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setminutes/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setmonth/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setseconds/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/settime/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setutcdate/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setutcfullyear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setutchours/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setutcminutes/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setutcmonth/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setutcseconds/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/setyear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/todatestring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/togmtstring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/toisostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/tojson/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/tolocaledatestring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/tolocalestring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/tolocaletimestring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/tosource/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/totimestring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/toutcstring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/utc/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/date/valueof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/decodeuri/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/decodeuricomponent/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/encodeuri/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/encodeuricomponent/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/error/columnnumber/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/error/error/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/error/filename/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/error/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/error/linenumber/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/error/message/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/error/name/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/error/stack/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/error/tosource/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/error/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/escape/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/eval/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/evalerror/evalerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/evalerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/finalizationregistry/cleanupsome/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/finalizationregistry/finalizationregistry/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/finalizationregistry/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/finalizationregistry/register/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/finalizationregistry/unregister/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/float32array/float32array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/float32array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/float64array/float64array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/float64array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/apply/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/arguments/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/bind/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/call/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/caller/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/displayname/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/function/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/length/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/name/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/tosource/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/function/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/generator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/generator/next/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/generator/return/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/generator/throw/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/generatorfunction/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/globalthis/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/infinity/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/int16array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/int16array/int16array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/int32array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/int32array/int32array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/int8array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/int8array/int8array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/internalerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/internalerror/internalerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/collator/collator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/collator/compare/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/collator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/datetimeformat/datetimeformat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/datetimeformat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/datetimeformat/prototype/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/displaynames/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/listformat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/basename/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/calendar/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/casefirst/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/collation/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/hourcycle/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/language/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/locale/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/maximize/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/minimize/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/numeric/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/region/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/script/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/locale/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/numberformat/format/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/numberformat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/numberformat/numberformat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/pluralrules/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/pluralrules/select/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/relativetimeformat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/isfinite/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/isnan/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/iterator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/json/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/json/parse/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/json/stringify/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/@@iterator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/@@species/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/@@tostringtag/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/clear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/delete/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/entries/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/foreach/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/get/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/has/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/keys/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/map/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/set/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/size/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/values/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/abs/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/acos/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/acosh/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/asin/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/asinh/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/atan/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/atan2/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/atanh/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/cbrt/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/ceil/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/clz32/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/cos/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/cosh/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/e/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/exp/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/expm1/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/floor/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/fround/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/hypot/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/imul/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/ln10/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/ln2/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/log/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/log10/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/log10e/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/log1p/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/log2/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/log2e/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/max/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/min/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/pi/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/pow/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/random/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/round/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/sign/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/sin/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/sinh/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/sqrt/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/sqrt1_2/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/sqrt2/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/tan/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/tanh/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/math/trunc/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/nan/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/null/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/epsilon/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/isfinite/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/isinteger/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/isnan/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/issafeinteger/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/max_safe_integer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/max_value/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/min_safe_integer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/min_value/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/nan/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/negative_infinity/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/number/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/parsefloat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/parseint/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/positive_infinity/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/toexponential/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/tofixed/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/tolocalestring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/toprecision/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/tosource/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/number/valueof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/__definegetter__/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/__definesetter__/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/__lookupgetter__/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/__lookupsetter__/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/assign/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/constructor/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/count/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/create/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/defineproperties/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/defineproperty/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/entries/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/freeze/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/fromentries/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/getownpropertynames/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/getprototypeof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/hasownproperty/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/is/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/isextensible/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/isfrozen/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/isprototypeof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/issealed/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/keys/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/object/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/preventextensions/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/propertyisenumerable/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/proto/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/seal/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/setprototypeof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/tolocalestring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/tosource/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/valueof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/object/values/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/parallelarray/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/parsefloat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/parseint/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/all/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/allsettled/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/any/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/catch/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/finally/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/promise/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/race/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/reject/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/resolve/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/promise/then/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/apply/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/construct/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/get/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/has/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/set/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/proxy/revocable/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/rangeerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/rangeerror/rangeerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/referenceerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/referenceerror/referenceerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/apply/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/construct/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/defineproperty/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/deleteproperty/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/get/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/getprototypeof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/has/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/isextensible/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/ownkeys/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/preventextensions/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/set/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/reflect/setprototypeof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/@@match/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/@@matchall/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/@@replace/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/@@search/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/@@species/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/@@split/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/compile/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/dotall/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/exec/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/flags/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/global/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/ignorecase/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/input/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/lastindex/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/lastmatch/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/lastparen/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/leftcontext/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/multiline/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/n/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/regexp/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/rightcontext/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/source/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/sticky/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/test/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/tosource/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/regexp/unicode/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/@@iterator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/@@species/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/add/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/clear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/delete/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/entries/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/foreach/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/has/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/set/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/size/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/set/values/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/sharedarraybuffer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/sharedarraybuffer/sharedarraybuffer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/stopiteration/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/@@iterator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/anchor/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/big/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/blink/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/bold/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/charat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/charcodeat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/codepointat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/concat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/endswith/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/fixed/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/fontcolor/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/fontsize/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/fromcharcode/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/fromcodepoint/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/includes/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/indexof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/italics/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/lastindexof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/length/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/link/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/localecompare/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/match/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/matchall/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/normalize/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/padend/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/padstart/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/quote/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/raw/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/repeat/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/replace/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/search/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/slice/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/small/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/split/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/startswith/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/strike/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/string/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/sub/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/substr/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/substring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/sup/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/tolocalelowercase/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/tolowercase/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/tosource/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/touppercase/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/trim/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/trimend/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/trimstart/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/string/valueof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/asynciterator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/description/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/for/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/hasinstance/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/iterator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/keyfor/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/match/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/matchall/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/replace/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/search/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/species/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/split/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/symbol/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/toprimitive/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/tosource/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/tostringtag/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/unscopables/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/symbol/valueof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/syntaxerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/syntaxerror/syntaxerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/@@iterator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/@@species/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/buffer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/bytelength/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/byteoffset/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/copywithin/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/entries/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/every/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/fill/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/filter/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/find/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/foreach/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/from/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/includes/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/indexof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/join/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/keys/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/lastindexof/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/length/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/map/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/name/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/of/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/reduce/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/reduceright/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/reverse/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/set/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/slice/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/some/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/sort/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/subarray/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/tolocalestring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/tostring/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typedarray/values/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typeerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/typeerror/typeerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/uint16array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/uint16array/uint16array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/uint32array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/uint32array/uint32array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/uint8array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/uint8array/uint8array/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/uint8clampedarray/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/uint8clampedarray/uint8clampedarray/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/undefined/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/unescape/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/uneval/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/urierror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/urierror/urierror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakmap/clear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakmap/delete/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakmap/get/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakmap/has/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakmap/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakmap/set/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakmap/weakmap/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakref/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakref/weakref/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakset/add/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakset/clear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakset/delete/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakset/has/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakset/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/weakset/weakset/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/compile/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/compileerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/global/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/instance/exports/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/instance/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/instance/instance/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/instance/prototype/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/instantiate/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/linkerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/memory/grow/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/memory/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/memory/memory/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/memory/prototype/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/module/customsections/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/module/imports/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/module/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/table/get/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/table/grow/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/table/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/table/length/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/table/prototype/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/table/set/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/table/table/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/validate/index.html create mode 100644 files/ja/web/javascript/reference/index.html create mode 100644 files/ja/web/javascript/reference/iteration_protocols/index.html create mode 100644 files/ja/web/javascript/reference/lexical_grammar/index.html create mode 100644 files/ja/web/javascript/reference/operators/addition/index.html create mode 100644 files/ja/web/javascript/reference/operators/addition_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/array_comprehensions/index.html create mode 100644 files/ja/web/javascript/reference/operators/assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/async_function/index.html create mode 100644 files/ja/web/javascript/reference/operators/await/index.html create mode 100644 files/ja/web/javascript/reference/operators/bitwise_and/index.html create mode 100644 files/ja/web/javascript/reference/operators/bitwise_and_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/bitwise_not/index.html create mode 100644 files/ja/web/javascript/reference/operators/bitwise_or/index.html create mode 100644 files/ja/web/javascript/reference/operators/bitwise_or_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/bitwise_xor/index.html create mode 100644 files/ja/web/javascript/reference/operators/bitwise_xor_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/class/index.html create mode 100644 files/ja/web/javascript/reference/operators/comma_operator/index.html create mode 100644 files/ja/web/javascript/reference/operators/comparison_operators/index.html create mode 100644 files/ja/web/javascript/reference/operators/conditional_operator/index.html create mode 100644 files/ja/web/javascript/reference/operators/decrement/index.html create mode 100644 files/ja/web/javascript/reference/operators/delete/index.html create mode 100644 files/ja/web/javascript/reference/operators/destructuring_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/division/index.html create mode 100644 files/ja/web/javascript/reference/operators/division_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/equality/index.html create mode 100644 files/ja/web/javascript/reference/operators/exponentiation/index.html create mode 100644 files/ja/web/javascript/reference/operators/exponentiation_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/expression_closures/index.html create mode 100644 files/ja/web/javascript/reference/operators/function/index.html create mode 100644 files/ja/web/javascript/reference/operators/function_star_/index.html create mode 100644 files/ja/web/javascript/reference/operators/generator_comprehensions/index.html create mode 100644 files/ja/web/javascript/reference/operators/greater_than/index.html create mode 100644 files/ja/web/javascript/reference/operators/greater_than_or_equal/index.html create mode 100644 files/ja/web/javascript/reference/operators/grouping/index.html create mode 100644 files/ja/web/javascript/reference/operators/in/index.html create mode 100644 files/ja/web/javascript/reference/operators/increment/index.html create mode 100644 files/ja/web/javascript/reference/operators/index.html create mode 100644 files/ja/web/javascript/reference/operators/inequality/index.html create mode 100644 files/ja/web/javascript/reference/operators/instanceof/index.html create mode 100644 files/ja/web/javascript/reference/operators/left_shift/index.html create mode 100644 files/ja/web/javascript/reference/operators/left_shift_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/less_than/index.html create mode 100644 files/ja/web/javascript/reference/operators/less_than_or_equal/index.html create mode 100644 files/ja/web/javascript/reference/operators/logical_and/index.html create mode 100644 files/ja/web/javascript/reference/operators/logical_and_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/logical_not/index.html create mode 100644 files/ja/web/javascript/reference/operators/logical_nullish_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/logical_operators/index.html create mode 100644 files/ja/web/javascript/reference/operators/logical_or/index.html create mode 100644 files/ja/web/javascript/reference/operators/logical_or_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/multiplication/index.html create mode 100644 files/ja/web/javascript/reference/operators/multiplication_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/new.target/index.html create mode 100644 files/ja/web/javascript/reference/operators/new/index.html create mode 100644 files/ja/web/javascript/reference/operators/nullish_coalescing_operator/index.html create mode 100644 files/ja/web/javascript/reference/operators/object_initializer/index.html create mode 100644 files/ja/web/javascript/reference/operators/operator_precedence/index.html create mode 100644 files/ja/web/javascript/reference/operators/optional_chaining/index.html create mode 100644 files/ja/web/javascript/reference/operators/pipeline_operator/index.html create mode 100644 files/ja/web/javascript/reference/operators/property_accessors/index.html create mode 100644 files/ja/web/javascript/reference/operators/remainder/index.html create mode 100644 files/ja/web/javascript/reference/operators/remainder_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/right_shift/index.html create mode 100644 files/ja/web/javascript/reference/operators/right_shift_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/special/index.html create mode 100644 files/ja/web/javascript/reference/operators/special_operators/index.html create mode 100644 files/ja/web/javascript/reference/operators/spread_syntax/index.html create mode 100644 files/ja/web/javascript/reference/operators/strict_equality/index.html create mode 100644 files/ja/web/javascript/reference/operators/strict_inequality/index.html create mode 100644 files/ja/web/javascript/reference/operators/subtraction/index.html create mode 100644 files/ja/web/javascript/reference/operators/subtraction_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/super/index.html create mode 100644 files/ja/web/javascript/reference/operators/this/index.html create mode 100644 files/ja/web/javascript/reference/operators/typeof/index.html create mode 100644 files/ja/web/javascript/reference/operators/unary_negation/index.html create mode 100644 files/ja/web/javascript/reference/operators/unary_plus/index.html create mode 100644 files/ja/web/javascript/reference/operators/unsigned_right_shift/index.html create mode 100644 files/ja/web/javascript/reference/operators/unsigned_right_shift_assignment/index.html create mode 100644 files/ja/web/javascript/reference/operators/void/index.html create mode 100644 files/ja/web/javascript/reference/operators/yield/index.html create mode 100644 files/ja/web/javascript/reference/operators/yield_star_/index.html create mode 100644 files/ja/web/javascript/reference/reserved_words/index.html create mode 100644 files/ja/web/javascript/reference/statements/async_function/index.html create mode 100644 files/ja/web/javascript/reference/statements/block/index.html create mode 100644 files/ja/web/javascript/reference/statements/break/index.html create mode 100644 files/ja/web/javascript/reference/statements/class/index.html create mode 100644 files/ja/web/javascript/reference/statements/const/index.html create mode 100644 files/ja/web/javascript/reference/statements/continue/index.html create mode 100644 files/ja/web/javascript/reference/statements/debugger/index.html create mode 100644 files/ja/web/javascript/reference/statements/do...while/index.html create mode 100644 files/ja/web/javascript/reference/statements/empty/index.html create mode 100644 files/ja/web/javascript/reference/statements/export/index.html create mode 100644 files/ja/web/javascript/reference/statements/for-await...of/index.html create mode 100644 files/ja/web/javascript/reference/statements/for...in/index.html create mode 100644 files/ja/web/javascript/reference/statements/for...of/index.html create mode 100644 files/ja/web/javascript/reference/statements/for/index.html create mode 100644 files/ja/web/javascript/reference/statements/for_each...in/index.html create mode 100644 files/ja/web/javascript/reference/statements/function/index.html create mode 100644 files/ja/web/javascript/reference/statements/function_star_/index.html create mode 100644 files/ja/web/javascript/reference/statements/if...else/index.html create mode 100644 files/ja/web/javascript/reference/statements/import.meta/index.html create mode 100644 files/ja/web/javascript/reference/statements/import/index.html create mode 100644 files/ja/web/javascript/reference/statements/index.html create mode 100644 files/ja/web/javascript/reference/statements/label/index.html create mode 100644 files/ja/web/javascript/reference/statements/let/index.html create mode 100644 files/ja/web/javascript/reference/statements/return/index.html create mode 100644 files/ja/web/javascript/reference/statements/switch/index.html create mode 100644 files/ja/web/javascript/reference/statements/throw/index.html create mode 100644 files/ja/web/javascript/reference/statements/try...catch/index.html create mode 100644 files/ja/web/javascript/reference/statements/var/index.html create mode 100644 files/ja/web/javascript/reference/statements/while/index.html create mode 100644 files/ja/web/javascript/reference/statements/with/index.html create mode 100644 files/ja/web/javascript/reference/statements/yield/index.html create mode 100644 files/ja/web/javascript/reference/strict_mode/index.html create mode 100644 files/ja/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html create mode 100644 files/ja/web/javascript/reference/template_literals/index.html create mode 100644 files/ja/web/javascript/reference/trailing_commas/index.html create mode 100644 files/ja/web/javascript/server-side_javascript/index.html create mode 100644 files/ja/web/javascript/shells/index.html create mode 100644 files/ja/web/javascript/typed_arrays/index.html (limited to 'files/ja/web/javascript') diff --git a/files/ja/web/javascript/a_re-introduction_to_javascript/index.html b/files/ja/web/javascript/a_re-introduction_to_javascript/index.html new file mode 100644 index 0000000000..78801c66eb --- /dev/null +++ b/files/ja/web/javascript/a_re-introduction_to_javascript/index.html @@ -0,0 +1,951 @@ +--- +title: JavaScript 「再」入門 +slug: Web/JavaScript/A_re-introduction_to_JavaScript +tags: + - CodingScripting + - Guide + - Intermediate + - Intro + - JavaScript + - Learn + - Tutorial +translation_of: Web/JavaScript/A_re-introduction_to_JavaScript +--- +
{{jsSidebar}}
+ +

なぜ {{原語䜵蚘("「再」入門", "re-introduction")}} なのか? なぜなら {{Glossary("JavaScript")}} は䞖界で最も誀解されたプログラミング蚀語ずしおよく知られおいるためです。しばしばおもちゃだず銬鹿にされながら、しかしその人を欺くような単玔さの䞋に、匷力な蚀語機胜が隠されおいるのです。JavaScript は数々の高い泚目を集めるアプリケヌションで䜿甚され、この技術の深い知識がどんなりェブやモバむルの開発者にずっおも重芁なスキルであるこずが瀺されたした。

+ +

この蚀語の歎史に぀いお理解するこずから始めるのが圹立぀でしょう。JavaScript は 1995 幎、Netscape の技術者{{原語䜵蚘("ブレンダン・アむク", "Brendan Eich")}} によっお創られ、1996 幎初頭に Netscape 2 で初めおリリヌスされたした。圓初は LiveScript ず呌ばれる予定でしたが、Sun Microsystems の Java 蚀語の人気にあやかろうずいう䞍運なるマヌケティング䞊の決定により改名されたした ― 2 ぀の蚀語が共通点をほずんど持っおいないにもかかわらず。それ以来、このこずは未だに混同の元ずなっおいたす。

+ +

Microsoft はその数か月埌、IE3 ずずもに JScript ずいうほずんど互換性のある蚀語をリリヌスしたした。さらに数か月埌、Netscape はこの蚀語をペヌロッパの暙準化団䜓 Ecma International に提出し、その結果 1997 幎に {{Glossary("ECMAScript")}} ずいう暙準の第 1 版が生たれたした。この暙準は重芁なアップデヌトを受けお 1999 幎に ECMAScript 第 3 版ずなり、その埌しばらくほずんど安定しおきたした。蚀語の耇雑化に関する政治的な隔たりから、第 4 版は攟棄されたものの、その倚くのパヌツは 2009 幎 12 月に発行された新しい ECMAScript 第 5 版の基瀎ずなりたした。そしお、暙準の第 6 版が 2015 幎 6 月に発行されたした。

+ +
なじみ深いため、ここからは ECMAScript を "JavaScript" ず呌びたす。
+ +

倧郚分のプログラミング蚀語ず違っお、JavaScript ずいう蚀語には入出力の抂念がありたせん。この蚀語はあるホスト環境でのスクリプト蚀語ずしお実行されるよう蚭蚈されおおり、倖郚の䞖界ずコミュニケヌションするための機構はそのホスト環境が提䟛するものずしおいるのです。もっずも䞀般的なホスト環境はブラりザヌですが、JavaScript のむンタヌプリタヌは Adobe Acrobat や Photoshop、SVG 画像、Yahoo! りィゞェット゚ンゞン、さらには Node.js ずいったサヌバヌサむド環境、オヌプン゜ヌスの Apache CouchDB ずいった NoSQL デヌタベヌス、組み蟌みコンピュヌタヌ、GNOME (GNU/Linux オペレヌティングシステムでもっずも人気がある GUI 環境のひず぀) のようなデスクトップ環境など、さたざたなずころでみられたす。

+ +

抂芁

+ +

JavaScript はマルチパラダむムの動的蚀語であり、型や挔算子、暙準組み蟌みオブゞェクト、メ゜ッドがありたす。その構文は Java や C 蚀語に由来するので、それらの蚀語の倚くの構造が JavaScript にも同様に適甚できたす。JavaScript は、クラスではなくオブゞェクトプロトタむプによるオブゞェクト指向プログラミングをサポヌトしたす (詳しくは プロトタむプの継承 や ES2015 の classes をご芧ください)。たた、JavaScript は関数型プログラミングもサポヌトしたす。関数もオブゞェクトであり、関数に実行可胜なコヌドを持たせお、他のオブゞェクトず同じように受け枡しさせるこずができたす。

+ +

たずはあらゆる蚀語の構成芁玠、「型」を芋るこずから始めたしょう。JavaScript のプログラムは倀を操䜜し、それらの倀はすべお型に属しおいたす。JavaScript の型は:

+ + + +

...ああ、あず {{jsxref("undefined")}} ず {{jsxref("null")}}、これらはちょっず倉わっおいたす。そしお {{jsxref("Array", "Array (配列)")}}、これは特殊なオブゞェクトの䞀皮。さらに {{jsxref("Date")}} ず {{jsxref("RegExp", "RegExp (正芏衚珟)")}}、これらは自由に䜿えるオブゞェクトです。あず技術的に正確なこずを蚀うず、関数は単にオブゞェクトの特殊な型です。したがっおこの型の図はより正確にはこうなりたす:

+ + + +

さらにいく぀かの組み蟌み {{jsxref("Error")}} 型もありたす。しかし、最初の図のたたでいく方が物事はずおも簡単になるでしょうから、圓面は最初の図で説明したす。

+ +

数倀

+ +

JavaScript における数倀は、仕様によるず「{{原語䜵蚘("倍粟床 64 ビットフォヌマット IEEE 754 倀", "double-precision 64-bit format IEEE 754 values")}}」です。 JavaScript には敎数に圓たるものがない ( {{jsxref("BigInt")}} を陀く) ので、少し気を付ける必芁がありたす。以䞋の䟋を芋おください。

+ +
console.log(3 / 2);             // 1.5, not 1
+console.log(Math.floor(3 / 2)); // 1
+ +

したがっお、芋かけ䞊の敎数は実際には暗黙的に浮動小数点数ずなりたす。

+ +

たた、以䞋のようなこずに泚意しおください:

+ +
0.1 + 0.2 == 0.30000000000000004;
+
+ +

実のずころ、敎数倀は 32 ビット int 型ずしお扱われたす。たた䞀郚の実装では、32 ビット敎数倀ではなく Number で有効な呜什の実行を求められるたでの間、32 ビット敎数倀ずしお保存したす。これはビット挔算を行う際に重芁なこずです。

+ +

足し算、匕き算、モゞュロ (剰䜙) など、暙準的な 算術挔算 がサポヌトされおいたす。さらに、これは先ほど蚀及し忘れたのですが、より高床な数孊関数や定数を扱う {{jsxref("Math")}} ずいう組み蟌みオブゞェクトもありたす:

+ +
Math.sin(3.5);
+var circumference = 2 * Math.PI * r;
+
+ +

あなたは組み蟌みの {{jsxref("Global_Objects/parseInt", "parseInt()")}} 関数を䜿うこずで、文字列を敎数に倉換するこずができたす。この関数は省略可胜な第 2 匕数ずしお倉換の基数を取りたすが、あなたは垞にこの匕数を䞎えるべきです:

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

叀いブラりザヌでは "0" から始たる文字列を 8 進数 (基数 8) ずみなしたすが、これは 2013 幎以降のブラりザヌにはあおはたりたせん。文字列の圢匏を理解しおいなければ、叀いブラりザヌであなたは驚くような結果を埗るこずでしょう:

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

この䟋では、{{jsxref("Global_Objects/parseInt", "parseInt()")}} が最初の文字列を先頭の 0 から 8 進数ずしお、たた 2 番目の文字列を先頭の "0x" から 16 進数ずしお扱ったこずがわかりたす。16 進数衚蚘は珟圚も有効です。8 進数のみ削陀されたした。

+ +

もし 2 進数を敎数に倉換したいなら、単玔に基数を倉えたしょう:

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

同様に浮動小数点数ぞの倉換を行う、組み蟌みの {{jsxref("Global_Objects/parseFloat", "parseFloat()")}} 関数がありたす。こちらは {{jsxref("Global_Objects/parseInt", "parseInt()")}} ず異なり、基数は垞に 10 が甚いられたす。

+ +

たた、単項挔算子 + を䜿っお倀を数倀に倉換するこずもできたす:

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

もし文字列が数でない堎合、 {{jsxref("NaN")}} (非数、"Not a Number" の略) ず呌ばれる特別な倀が返りたす:

+ +
parseInt('hello', 10); // NaN
+
+ +

NaN には毒性がありたす: これを入力しおどの算術挔算に䞎えおも、その結果は同様に NaN になるのです:

+ +
NaN + 5; // NaN
+
+ +

組み蟌みの {{jsxref("Global_Objects/isNaN", "isNaN()")}} 関数を䜿えば、NaN であるかを怜査するこずができたす:

+ +
isNaN(NaN); // true
+
+ +

JavaScript はたた、特別な倀 {{jsxref("Infinity")}} ず -Infinity を持っおいたす:

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

組み蟌みの {{jsxref("Global_Objects/isFinite", "isFinite()")}} 関数を䜿えば、Infinity、-Infinity、NaN であるかを怜査するこずができたす:

+ +
isFinite(1 / 0); // false
+isFinite(-Infinity); // false
+isFinite(NaN); // false
+
+ +
{{jsxref("Global_Objects/parseInt", "parseInt()")}} および {{jsxref("Global_Objects/parseFloat", "parseFloat()")}} 関数は文字列を、芏定の数倀曞匏に該圓しない文字が珟れるたで解析し、その箇所たでの数倀を返したす。䞀方、"+" 挔算子は適切でない文字を含む文字列を NaN に倉換したす。ご自身でコン゜ヌルを甚いお、文字列 "10.2abc" をそれぞれの方法で解析させるずその違いがよくわかるでしょう。
+ +

文字列

+ +

JavaScript における文字列は、Unicode 文字 の{{原語䜵蚘("連なったもの", "sequences")}} です。これは{{原語䜵蚘("囜際化", "internationalization")}} に察凊しなければならない誰もが歓迎するニュヌスでしょう。より正確に蚀えば UTF-16 コヌド単䜍の連なったものであり、぀たりそれぞれのコヌド単䜍は 16 ビットの敎数で衚されたす。たた、それぞれの Unicode 文字は 1 たたは 2 個のコヌド単䜍で衚したす。

+ +

もし単䞀文字を衚したいなら、単玔に 1 文字で構成された文字列を䜿いたす。

+ +

文字列の長さ (コヌド単䜍) を知るには、その文字列の length プロパティにアクセスしたしょう:

+ +
'hello'.length; // 5
+
+ +

JavaScript のオブゞェクトずの初めおの接觊です! 私、文字列も {{jsxref("Object", "オブゞェクト", "", 1)}} であるず蚀いたしたっけ? 文字列はたた、文字列の操䜜や文字列に関する情報ぞのアクセスを可胜にする {{jsxref("String", "メ゜ッド", "#Methods", 1)}} も持っおいたす:

+ +
'hello'.charAt(0); // "h"
+'hello, world'.replace('hello', 'goodbye'); // "goodbye, world"
+'hello'.toUpperCase(); // "HELLO"
+
+ +

その他の型

+ +

JavaScript は {{jsxref("null")}} ず {{jsxref("undefined")}} を区別したす。null は、意図的に「倀がない」ずいうこずを指し瀺す倀です (たた、null キヌワヌドによっおのみアクセスできたす)。察しお undefined ずは、初期化されおいない倀 ― すなわち、「ただ倀が代入されおいない」ずいうこずを指し瀺す undefined 型の倀です。倉数に぀いおは埌で話したすが、JavaScript では倀を代入しないで倉数を宣蚀するこずができるのです。そのようにした堎合、その倉数の型は undefined です。実際は、undefined は定数です。

+ +

JavaScript は true ず false (これらはずもにキヌワヌドです) を取りうる倀ずする真停倀型を持っおいたす。どんな倀でも以䞋のルヌルに基づいお真停倀に倉換できたす:

+ +
    +
  1. false、0、空文字列 ("")、NaN、null、および undefined は、すべお false になる
  2. +
  3. その他の倀はすべお true になる
  4. +
+ +

Boolean() 関数を䜿うこずで、明瀺的にこの倉換を行うこずができたす:

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

しかしながら、これはほずんど必芁ありたせん。なぜなら JavaScript は、if 文 (䞋蚘参照) の䞭ずいった真停倀が期埅されるずきに、無蚀でこの倉換を行うからです。このような理由から、私たちは時々、真停倀に倉換されるずき true たたは false になる倀ずいう意味で、それぞれ "true values" たたは "false values" ず蚀うこずがありたす。あるいは、そのような倀はそれぞれ "truthy" たたは "falsy" ず呌ばれたす。

+ +

&& (論理 AND) や || (論理 OR)、! (論理 NOT) などの真停倀挔算がサポヌトされおいたす (䞋蚘参照)。

+ +

倉数

+ +

JavaScript における新しい倉数は let、const、var の 3 ぀のキヌワヌドのいずれかを䜿甚しお宣蚀したす。

+ +

let は、ブロックレベルの倉数を宣蚀できたす。宣蚀した倉数は、倉数を包含する関数ブロックから䜿甚できたす。

+ +
let a;
+let name = 'Simon';
+
+ +

以䞋の䟋は、let で宣蚀した倉数のスコヌプを瀺しおいたす:

+ +
// ここでは myLetVariable が *芋えたせん*
+
+for (let myLetVariable = 0; myLetVariable < 5; myLetVariable++) {
+  // ここだけで myLetVariable が芋えたす
+}
+
+// ここでは myLetVariable が *芋えたせん*
+
+ +

const は、倉曎を意図しない倉数を宣蚀できたす。宣蚀した倉数は、倉数を宣蚀した関数ブロックから䜿甚できたす。

+ +
const Pi = 3.14; // 倉数 Pi を蚭定
+Pi = 1; // 䞍倉の倉数は倉曎できないため、゚ラヌが発生したす
+ +

var は、もっずも䞀般的な宣蚀キヌワヌドです。こちらは、他の 2 ぀のキヌワヌドのような制玄がありたせん。これは、䌝統的に JavaScript で倉数を宣蚀する唯䞀の方法であったためです。var キヌワヌドで宣蚀した倉数は、倉数を宣蚀した関数ブロックから䜿甚できたす。

+ +
var a;
+var name = 'Simon';
+ +

以䞋の䟋は、var で宣蚀した倉数のスコヌプを瀺しおいたす:

+ +
// ここでは myVarVariable が *芋えたす*
+
+for (var myVarVariable = 0; myVarVariable < 5; myVarVariable++) {
+  // myVarVariable は関数党䜓で芋えたす
+}
+
+// ここでは myVarVariable が *芋えたす*
+
+ +

もし倀を代入しないで倉数を宣蚀するず、その型は undefined になりたす。

+ +

Java など他の蚀語ずの重芁な盞違点は、JavaScript ではブロックがスコヌプを持たず、関数のみがスコヌプを持぀こずです。よっお、倉数が耇合文内 (䟋えば if 制埡構造の内郚) で var を甚いお定矩された堎合でも、その倉数は関数党䜓でアクセス可胜です。ただし ECMAScript 2015 より、let および const 宣蚀でブロックスコヌプの倉数を䜜成できたす。

+ +

挔算子

+ +

JavaScript の算術挔算子は、+、-、*、/、そしお剰䜙挔算子の % (モゞュロず同じです) です。倀は = を䜿っお代入されたす。たた += や -= のような耇合代入文もありたす。これらは x = x 挔算子 y ず展開できるものです。

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

++ や -- を䜿っおむンクリメントやデクリメントできたす。これらは前眮あるいは埌眮挔算子ずしお䜿うこずができたす。

+ +

+ 挔算子 は文字列の結合もしたす:

+ +
'hello' + ' world'; // "hello world"
+
+ +

文字列を数字 (や他の倀) に足すず、すべおのものはたず最初に文字列に倉換されたす。このこずはミスを誘うかもしれたせん:

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

空文字列を足すのは、䜕かを文字列に倉換する䟿利な方法です。

+ +

JavaScript における 比范 は、< や >、<=、>= を䜿っおするこずができたす。これらは文字列ず数倀のどちらでも機胜したす。等䟡性はちょっず明快ではありたせん。二重むコヌル挔算子は、異なる型を䞎えるず{{原語䜵蚘("型匷制", "type coercion")}} を行いたす。これは時に面癜い結果を返したす:

+ +
123 == '123'; // true
+1 == true; // true
+
+ +

型匷制を防いで厳密な比范を行うようにする堎合は、䞉重むコヌル挔算子を䜿いたす:

+ +
123 === '123'; // false
+1 === true;    // false
+
+ +

!= ず !== 挔算子もありたす。

+ +

JavaScript は ビット挔算子 も持っおいたす。䜿いたいなら、ちゃんずありたすよ。

+ +

制埡構造

+ +

JavaScript は C 蚀語ファミリヌの他の蚀語ずよく䌌た制埡構造セットを持っおいたす。条件文は if ず else でサポヌトされおいたす。必芁ならこれらを連鎖させるこずもできたす:

+ +
var name = 'kittens';
+if (name == 'puppies') {
+  name += ' woof';
+} else if (name == 'kittens') {
+  name += ' meow';
+} else {
+  name += '!';
+}
+name == 'kittens meow';
+
+ +

JavaScript は while ルヌプず do-while ルヌプを持っおいたす。1 ぀目は普通のルヌプ凊理に適しおおり、2 ぀目はルヌプの本䜓が少なくずも 1 回は実行されるようにしたいずきのルヌプです:

+ +
while (true) {
+  // 無限ルヌプ!
+}
+
+var input;
+do {
+  input = get_input();
+} while (inputIsNotValid(input));
+
+ +

JavaScript の for ルヌプは C や Java のそれず同じです。これはルヌプの制埡情報を 1 行で䞎えるこずができたす。

+ +
for (var i = 0; i < 5; i++) {
+  // 5 回実行されたす
+}
+
+ +

JavaScript にはこの他に、特城的な for ルヌプが 2 ぀ありたす。ひず぀は for...of です:

+ +
for (let value of array) {
+  // 倀に関する凊理
+}
+
+ +

もうひず぀は for...in です:

+ +
for (let property in object) {
+  // オブゞェクトのプロパティに関する凊理
+}
+
+ +

&& ず || 挔算子は、1 ぀目のオペランドによっお 2 ぀目のオペランドを評䟡するか吊かが決たる{{原語䜵蚘("短絡論理", "short-circuit logic")}} を甚いおいたす。これはあるオブゞェクトの属性にアクセスする前に、それが null オブゞェクトかをチェックするのに䟿利です:

+ +
var name = o && o.getName();
+
+ +

あるいは倀の栌玍にも䟿利です (falsy な倀は無効であるずき):

+ +
var name = cachedName || (cachedName = getName());
+
+ +

JavaScript はワンラむン条件文のための䞉項挔算子を持っおいたす:

+ +
var allowed = (age > 18) ? 'yes' : 'no';
+
+ +

switch 文はある数倀や文字列を元にした耇数分岐に䜿われたす:

+ +
switch (action) {
+  case 'draw':
+    drawIt();
+    break;
+  case 'eat':
+    eatIt();
+    break;
+  default:
+    doNothing();
+}
+
+ +

もし break 文を入れなければ、凊理は次の段階ぞ{{原語䜵蚘("フォヌルスルヌ", "fall through")}} したす。この動䜜が望むものであるこずは非垞にたれでしょう ― 事実、もしそれが本圓に意図するものならば、デバッグの補助ずしお故意のフォヌルスルヌをコメントで明確にラベリングするだけの䟡倀があるでしょう:

+ +
switch (a) {
+  case 1: // フォヌルスルヌ
+  case 2:
+    eatIt();
+    break;
+  default:
+    doNothing();
+}
+
+ +

default 節は省略できたす。必芁ならば、switch 郚ず case 郚のどちらにも匏を眮くこずができたす。比范はこれら 2 ぀の間で === 挔算子を䜿っお行われたす:

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

オブゞェクト

+ +

JavaScript のオブゞェクトは、名前ず倀のペアの単玔なコレクションであるず考えるこずができたす。これは以䞋のものに䌌おいたす:

+ + + +

このデヌタ構造が幅広く䜿われおいるずいう事実は、この構造の䞇胜性の蚌拠でしょう。JavaScript においお (コアデヌタ型を陀いた) すべおのものはオブゞェクトなので、どんな JavaScript プログラムも自然ず非垞に倚くのハッシュテヌブルのルックアップ (怜玢) を䌎いたす。良いこずにそれがずおも速いのです!

+ +

「名前」郚は JavaScript における文字列であるのに察し、倀は JavaScript のどんな倀でも ― さらなるオブゞェクトでも ― 構いたせん。この仕様が任意の耇雑なデヌタ構造を䜜るこずを可胜にしおいたす。

+ +

空のオブゞェクトを生成する 2 ぀の基本的な方法がありたす:

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

そしお:

+ +
var obj = {};
+
+ +

これらは意味的に等䟡です。2 ぀目はオブゞェクトリテラル構文ず呌ばれ、こちらの方がより䟿利です。オブゞェクトリテラル構文は JSON 曞匏の䞭栞でもあり、こちらを採甚するべきです。

+ +

オブゞェクトリテラル構文はオブゞェクトをそっくりそのたた初期化するのに䜿えたす:

+ +
var obj = {
+  name: 'Carrot',
+  for: 'Max', // 'for' は予玄語であり、代わりに '_for' を䜿甚したす
+  details: {
+    color: 'orange',
+    size: 12
+  }
+};
+
+ +

属性ぞのアクセスは同時に連鎖させるこずができたす:

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

以䞋の䟋ではオブゞェクトのプロトタむプである Person ず、プロトタむプのむンスタンスである you を生成しおいたす。

+ +
function Person(name, age) {
+  this.name = name;
+  this.age = age;
+}
+
+// オブゞェクトを定矩する
+var you = new Person('You', 24);
+// "You" ずいう名前で、幎霢が 24 歳の新たな Person を䜜成したした
+
+ +

䞀床䜜っおしたえば、オブゞェクトのプロパティには䞋蚘の 2 ぀の方法のいずれかで再びアクセスするこずができたす:

+ +
// ドット蚘法
+obj.name = 'Simon';
+var name = obj.name;
+
+ +

そしお...

+ +
// 括匧蚘法
+obj['name'] = 'Simon';
+var name = obj['name'];
+// 倉数をキヌ定矩に䜿甚できる
+var user = prompt('what is your key?')
+obj[user] = prompt('what is its value?')
+ +

これらもたた意味的に等䟡です。2 ぀目の方法はプロパティの名前を文字列ずしお䞎えるずいう利点があり、぀たりその名前を実行時に蚈算できるこずを意味したす。ただ、この方法を甚いるず JavaScript ゚ンゞンや minifier による最適化が適甚されなくなりたす。たたこの方法は、予玄語 ず同じ名前のプロパティを蚭定したり取埗したりするのに䜿うこずができたす:

+ +
obj.for = 'Simon'; // 構文゚ラヌ。'for' が予玄語であるため
+obj['for'] = 'Simon'; // うたく動きたす
+
+ +
ECMAScript 第 5 版より、予玄語をオブゞェクトのプロパティ名ずしお"そのたた"䜿甚できたす。぀たりオブゞェクトリテラルの定矩時に匕甚笊で"括る"必芁ありたせん。ES5 の仕様を確認しおください。
+ +

オブゞェクトやプロトタむプに぀いお、詳しくは Object.prototype をご芧ください。オブゞェクトプロトタむプやオブゞェクトプロトタむプチェヌンの説明は、継承ずプロトタむプチェヌン をご芧ください。

+ +
+

ECMAScript 2015 より、オブゞェクトのキヌが括匧蚘法を䜿った倉数で定矩できるようになりたした。{[phoneType]: 12345} が単に var userPhone = {}; userPhone[phoneType] = 12345 の代わりにできたす。

+
+ +

配列

+ +

JavaScript における配列は、実はオブゞェクトの特殊型です。普通のオブゞェクトずほずんど同じように働きたす (数字のプロパティは圓然 [] の構文でのみアクセスできたす) が、しかし配列は 'length' ずいう魔法のプロパティを持っおいたす。これは垞に配列の䞀番倧きな添字より 1 倧きい倀を取りたす。

+ +

配列を生成する方法のひず぀は以䞋の通り:

+ +
var a = new Array();
+a[0] = 'dog';
+a[1] = 'cat';
+a[2] = 'hen';
+a.length; // 3
+
+ +

より䟿利な曞き方は配列リテラルを䜿うこずです:

+ +
var a = ['dog', 'cat', 'hen'];
+a.length; // 3
+
+ +

array.length は必ずしも配列䞭の芁玠の数ではないこずに泚意しおください。以䞋の䟋を考えおみたしょう:

+ +
var a = ['dog', 'cat', 'hen'];
+a[100] = 'fox';
+a.length; // 101
+
+ +

思い出しおください ― 配列の長さは䞀番倧きな添字より 1 倧きい倀です。

+ +

もし存圚しない配列の添字を芁求するず、undefined が埗られたす:

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

䞊蚘の [] ず length を考慮に入れれば、以䞋の for ルヌプを䜿っお配列を繰り返すこずができたす:

+ +
for (var i = 0; i < a.length; i++) {
+  // a[i] に぀いお䜕かする
+}
+
+ +

ES2015では配列のような iterable オブゞェクト甚に、より正確な for...of ルヌプが導入されたした:

+ +
for (const currentValue of a) {
+  // currentValue(珟圚の倀)で䜕かをする
+}
+ +

for...in ルヌプを䜿甚しお配列を繰り返すするこずもできたす。ただし、もし誰かが Array.prototype に新しいプロパティを远加しおいたら、それらもこのルヌプで繰り返されおしたうので泚意しおください。よっお、この方法は配列に察しおは "掚奚したせん"。

+ +

配列を繰り返すもうひず぀の方法が、 ECMAScript 5 で远加された forEach() です:

+ +
['dog', 'cat', 'hen'].forEach(function(currentValue, index, array) {
+  // currentValue(珟圚の倀) たたは array[index] に぀いお䜕かする
+});
+
+ +

配列に芁玠を远加したいなら、このようにするのがもっずもシンプルです:

+ +
a.push(item);
+ +

配列には倚くのメ゜ッドが぀いおきたす。配列のメ゜ッドに関するドキュメント もご芧ください。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
メ゜ッド名説明
a.toString()各芁玠に toString() を適甚したものを、カンマ区切りで䞊べた文字列を返したす。
a.toLocaleString()各芁玠に toLocaleString() を適甚したものを、カンマ区切りで䞊べた文字列を返したす。
a.concat(item1[, item2[, ...[, itemN]]])配列に芁玠を远加した、新しい配列を返したす。
a.join(sep)配列を文字列に倉換したす。倀は匕数 sep で区切りたす。
a.pop()最埌の芁玠を取り陀いお、その芁玠を返したす。
a.push(item1, ..., itemN)配列の末尟に芁玠を远加したす。
a.shift()最初の芁玠を取り陀いお、その芁玠を返したす。
a.unshift(item1[, item2[, ...[, itemN]]])芁玠を配列の先頭に挿入したす。
a.slice(start[, end])郚分配列を返したす。
a.sort([cmpfn])オプションずしお比范関数をずりたす。
a.splice(start, delcount[, item1[, ...[, itemN]]])ある郚分を削陀したり他の远加芁玠に眮き換えるこずで、配列を修正するこずができたす。
a.reverse()配列を反転したす。
+ +

関数

+ +

オブゞェクトずずもに、関数は JavaScript を理解するうえで栞ずなる構成芁玠です。もっずも基本的な関数は極めおシンプルです:

+ +
function add(x, y) {
+  var total = x + y;
+  return total;
+}
+
+ +

これは基本的な関数を䟋瀺しおいたす。JavaScript の関数は 0 以䞊の名前の぀いた匕数を取るこずができたす。関数の本䜓は奜きなだけたくさんの文を含たせるこずができ、たたその関数内で局所的な倉数を宣蚀するこずができたす。return 文は奜きなずきに関数を終了し倀を返すために䜿うこずができたす。もし return 文が䜿われなかったら (あるいは倀を぀けない空の return が䜿われたら)、JavaScript は undefined を返したす。

+ +

実のずころ、名前の぀いた匕数はガむドラむンのようなもの以倖の䜕物でもありたせん。あなたは期埅された匕数を枡さずに関数を呌ぶこずができたす。その堎合匕数には undefined がセットされたす。

+ +
add(); // NaN
+// undefined では加算を実行できない
+
+ +

あなたはたた、関数が期埅しおいるより倚くの匕数を枡すこずもできたす:

+ +
add(2, 3, 4); // 5
+// 第 1、第 2 匕数を加算。4 は無芖される
+
+ +

これは少し銬鹿げおいるように芋えるかもしれたせんが、関数はその本䜓の䞭で arguments ず呌ばれる远加の倉数を利甚するこずができたす。これはその関数ぞ枡されたすべおの倀を保持する配列のようなオブゞェクトです。さあ、add 関数を奜きなだけたくさんの倀をずれるよう曞き盎しおみたしょう:

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

しかしこれは 2 + 3 + 4 + 5 ず曞くより䜿い勝手がいいものではたったくありたせん。平均を取る関数を䜜っおみたしょう:

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

この関数はかなり䟿利ですが、やや冗長にみえたす。コヌドを枛らすために、 Rest パラメヌタヌ蚘法で匕数配列の䜿甚を眮き換えるこずを怜蚎できたす。この方法では、コヌドを最小限にしながら任意の数の匕数を関数に枡すこずができたす。Restパラメヌタヌ挔算子は ...倉数の圢匏で、関数宣蚀内で䜿甚したす。たた、これは倉数内に、関数を呌び出したずきに未取埗の匕数すべおのリストが含たれたす。たた、倉数内の倀を返すための for ルヌプを for...of ルヌプに眮き換えたす。

+ +
function avg(...args) {
+  var sum = 0;
+  for (let value of args) {
+    sum += value;
+  }
+  return sum / args.length;
+}
+
+avg(2, 3, 4, 5); // 3.5
+
+ +
+
䞊蚘のコヌドで倉数 args は、関数に枡されたすべおの倀を保持したす。
+
+関数宣蚀に rest パラメヌタヌを眮くず垞に、その前方ではなく埌方にある、すべおの匕数を保存するこずぞの泚意が重芁です。
+ +
぀たり䟋えば function avg(firstValue, ...args) は、関数に枡した最初の倀が倉数 firstValue に、残りの匕数が args に保存されたす。この関数はかなり䟿利ですが、新たな問題を提瀺しおいたす。この avg() 関数はコンマ区切りのリストを匕数に取りたすが、もし配列の平均を知りたいずきにはどうしたらいいでしょう? あなたは単玔に関数を以䞋のように曞き盎すこずもできたす:
+
+ +
function avgArray(arr) {
+  var sum = 0;
+  for (var i = 0, j = arr.length; i < j; i++) {
+    sum += arr[i];
+  }
+  return sum / arr.length;
+}
+
+avgArray([2, 3, 4, 5]); // 3.5
+
+ +

しかし私たちがすでに䜜った関数を再利甚できた方がいいですよね。幞運なこずに、JavaScript は関数オブゞェクトの {{jsxref("Function.apply", "apply()")}} メ゜ッドを䜿うこずで、匕数に任意の配列を぀けお呌ぶこずができたす。

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

apply() の第 2 匕数は匕数ずしお䜿う配列です。第 1 匕数は埌で論じたす。このようなこずは関数もたたオブゞェクトであるずいう事実を匷調したす。

+ +
+

同じ結果を関数呌び出しのスプレッド挔算子でも達成できたす。

+ +

䟋えば: avg(...numbers)

+
+ +

JavaScript では{{原語䜵蚘("無名関数", "anonymous functions")}} を䜜るこずができたす。

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

これは意味的には function avg() 圢匏ず等䟡です。これは非垞に匷力です。あなたは普通は匏を眮くずころならどこにでも完党な関数定矩を眮くこずができるのです。これはあらゆる巧劙なトリックを可胜にしおいたす。ここではいく぀かの局所倉数を ― C のブロックスコヌプのように ― 「隠す」方法を瀺したす:

+ +
var a = 1;
+var b = 2;
+
+(function() {
+  var b = 3;
+  a += b;
+})();
+
+a; // 4
+b; // 2
+
+ +

JavaScript では関数を再垰的に呌び出すこずができたす。これは特にブラりザヌの DOM などにみられる朚構造を取り扱うずきに䟿利でしょう。

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

この䟋は無名関数に関するある朜圚的な問題を際立たせたす。名前を持たない関数を再垰呌び出しさせるにはどうしたらよいのでしょう? JavaScript では、名前付き関数匏で実珟できたす。以䞋のように、名前付き IIFEs (Immediately Invoked Function Expressions) を䜿甚できたす:

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

䞊蚘のように関数匏に䞎えられた名前は、関数自身のスコヌプ内でのみ有効です。これぱンゞンによる高床な最適化を実珟しお、結果的に可読性が高いコヌドになりたす。この名前はデバッガヌやスタックトレヌスにも衚瀺されたすので、デバッグにかかる時間を節玄できたす。

+ +

JavaScript の関数自䜓が (他のものすべおず同様に) オブゞェクトですので、オブゞェクトの章で芋おきたずおり、プロパティの远加や倉曎が可胜です。

+ +

カスタムオブゞェクト

+ +
JavaScript でのオブゞェクト指向プログラミングの詳现な論考に぀いおは、オブゞェクト指向 JavaScript 入門 をご芧ください。
+ +

叀兞的なオブゞェクト指向プログラミングにおいお、オブゞェクトずはデヌタずそのデヌタを操䜜するメ゜ッドの集たりです。JavaScript は、C++ や Java に芋られる class 文を持たない、プロトタむプベヌスの蚀語です。(これは、class 文を持぀蚀語に慣れたプログラマヌを混乱させるこずでしょう) 代わりに、JavaScript は関数をクラスずしお甚いたす。ファヌストネヌムずラストネヌムのフィヌルドを持぀ person オブゞェクトを考えおみたしょう。その名前を衚瀺させる方法には 2 皮類が考えられたす: "first last" ず "last, first" です。ここたでで論じた関数ずオブゞェクトを䜿っおみるず、以䞋のようにデヌタを衚瀺できるでしょう:

+ +
function makePerson(first, last) {
+  return {
+    first: first,
+    last: last
+  };
+}
+function personFullName(person) {
+  return person.first + ' ' + person.last;
+}
+function personFullNameReversed(person) {
+  return person.last + ', ' + person.first;
+}
+
+s = makePerson('Simon', 'Willison');
+personFullName(s); // "Simon Willison"
+personFullNameReversed(s); // "Willison, Simon"
+
+ +

これはこれでうたく行きたすが、かなり芋苊しいですね。グロヌバルな名前空間にいく぀もの関数を䜜るこずになっおしたいたす。本圓にしたいこずは関数をオブゞェクトにくっ぀けるこずです。関数はオブゞェクトなので、簡単にできたす:

+ +
function makePerson(first, last) {
+  return {
+    first: first,
+    last: last,
+    fullName: function() {
+      return this.first + ' ' + this.last;
+    },
+    fullNameReversed: function() {
+      return this.last + ', ' + this.first;
+    }
+  };
+}
+
+s = makePerson('Simon', 'Willison');
+s.fullName(); // "Simon Willison"
+s.fullNameReversed(); // "Willison, Simon"
+
+ +

おや、ただ芋たこずがないものがありたすね。this キヌワヌドです。関数内で䜿われるず、this は珟圚のオブゞェクトを参照したす。実際に意味するずころは関数の呌ばれ方によりたす。オブゞェクト䞊で ドットの蚘法や角カッコの蚘法 を䜿っお呌び出すず、そのオブゞェクトが this になりたす。ドット蚘法を䜿わずに呌び出すず、this はグロヌバルオブゞェクトを参照したす。

+ +

this は倱敗の原因になるこずがよくありたすので泚意しおください。䟋えば:

+ +
s = makePerson('Simon', 'Willison');
+var fullName = s.fullName;
+fullName(); // undefined undefined
+
+ +

s.fullName() ずせずに fullName() を単独で呌び出すず、this はグロヌバルオブゞェクトに結び付けられたす。first や last ずいうグロヌバル倉数はありたせんので、それぞれに察しお undefined が埗られたす。

+ +

この this キヌワヌドを掻甚するこずで、makePerson 関数を改良するこずができたす:

+ +
function Person(first, last) {
+  this.first = first;
+  this.last = last;
+  this.fullName = function() {
+    return this.first + ' ' + this.last;
+  };
+  this.fullNameReversed = function() {
+    return this.last + ', ' + this.first;
+  };
+}
+var s = new Person('Simon', 'Willison');
+
+ +

もう 1 ぀のキヌワヌド new が出おきたした。new は this ず匷い関連がありたす。これは新しい空のオブゞェクトを䜜り、this にその新しいオブゞェクトをセットしお、埌に続く関数を呌びたす。this に指定された関数は倀を返しおいるのではなく、単に this オブゞェクトを倉曎しおいるこずに泚意しおください。this オブゞェクトを呌び出し元に返しおいるのは new です。new によっお呌ばれるよう蚭蚈された関数はコンストラクタヌ関数ず呌ばれたす。new によっお呌ばれるずいうこずがわかるよう、先頭を倧文字にするこずがよく行われおいたす。

+ +

改良した関数でも、fullName() を単独で呌び出すずきの萜ずし穎がただありたす。

+ +

person オブゞェクトはだいぶ良くなりたしたが、ただ改善の䜙地がありたす。person オブゞェクトを䜜るたびに、その䞭に 2 ぀の新しい関数オブゞェクトを䜜っおいたす。関数のコヌドは共有されたほうがいいですよね?

+ +
function personFullName() {
+  return this.first + ' ' + this.last;
+}
+function personFullNameReversed() {
+  return this.last + ', ' + this.first;
+}
+function Person(first, last) {
+  this.first = first;
+  this.last = last;
+  this.fullName = personFullName;
+  this.fullNameReversed = personFullNameReversed;
+}
+
+ +

このほうが良いですね。メ゜ッド関数を䞀床だけ䜜っお、コンストラクタヌの䞭でそれぞの参照を代入しおいたす。もっずよくなりたせんかね? 答えは yes です:

+ +
function Person(first, last) {
+  this.first = first;
+  this.last = last;
+}
+Person.prototype.fullName = function() {
+  return this.first + ' ' + this.last;
+};
+Person.prototype.fullNameReversed = function() {
+  return this.last + ', ' + this.first;
+};
+
+ +

Person.prototype は Person のすべおのむンスタンスで共有されるオブゞェクトです。これは (「プロトタむプチェヌン」ずいう特別な名前を持った) ルックアップチェヌンの䞀郚を構成したす。Person の䜕もセットされおいないプロパティにアクセスしようずするずきはい぀でも、JavaScript は Person.prototype が代わりのプロパティを持っおいるか確認したす。結果ずしお、Person.prototype に割り圓おられたプロパティはすべお this オブゞェクトを通じおコンストラクタヌのすべおのむンスタンスで利甚できるようになりたす。

+ +

これはずおも匷力です。JavaScript では、プログラム䞊でい぀でもどれかのプロトタむプを倉曎するこずができたす。ずいうこずは、実行時に既存のオブゞェクトに察しお远加のメ゜ッドを加えるこずができるのです:

+ +
s = new Person('Simon', 'Willison');
+s.firstNameCaps(); // TypeError on line 1: s.firstNameCaps is not a function
+
+Person.prototype.firstNameCaps = function() {
+  return this.first.toUpperCase();
+};
+s.firstNameCaps(); // "SIMON"
+ +

興味深いこずに、JavaScript の組み蟌みオブゞェクトのプロトタむプにも差し蟌むこずができたす。String オブゞェクトに文字列を逆さにしお返すメ゜ッドを加えおみたしょう:

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

私たちの新しいメ゜ッドは文字列リテラル䞊でさえも動きたす!

+ +
'This can now be reversed'.reversed(); // desrever eb won nac sihT
+
+ +

前にも蚀ったように、プロトタむプはチェヌンの䞀郚を構成したす。チェヌンの根は Object.prototype であり、toString() メ゜ッドを含んでいたす。これはオブゞェクトを文字列で衚そうずするずきに呌ばれるメ゜ッドです。これは Person オブゞェクトをデバッグするずきに圹立ちたす:

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

avg.apply() の第 1 匕数が null であったこずを芚えおいたすか? もう䞀床芋おみたしょう。apply() の第 1 匕数は 'this' ずしお扱われるオブゞェクトです。䟋えば、これは new のありふれた実装です:

+ +
function trivialNew(constructor, ...args) {
+  var o = {}; // オブゞェクトを䜜成
+  constructor.apply(o, args);
+  return o;
+}
+
+ +

プロトタむプチェヌンを蚭定しないので (これを説明するのは困難です)、trivialNew() は new の完党な耇補ではありたせん。よく䜿うこずはないでしょうが、知っおいるず圹に立ちたす。このスニペットで、...args (省略笊号を含む) は "残䜙匕数 (rest arguments)" ず呌ばれたす。名前が瀺唆するずおり、これは残りの匕数が含たれたす。

+ +

以䞋の 2 ぀の呌び出しはほが等䟡です。

+ +
var bill = trivialNew(Person, 'William', 'Orange');
+ +
var bill = new Person('William', 'Orange');
+ +

apply() には姉効関数 call がありたす。this を蚭定できる点は同じですが、匕数に配列ではなく展開された倀のリストをずりたす。

+ +
function lastNameCaps() {
+  return this.last.toUpperCase();
+}
+var s = new Person('Simon', 'Willison');
+lastNameCaps.call(s);
+// 䞊蚘の文は以䞋ず等䟡:
+s.lastNameCaps = lastNameCaps;
+s.lastNameCaps(); // WILLISON
+
+ +

内郚関数

+ +

JavaScript での関数宣蚀は他の関数内でも行えたす。これは初期の makePerson() 関数で芋おいたす。倧事なこずは内郚関数内で芪関数スコヌプの倉数にアクセスできるこずです:

+ +
function parentFunc() {
+  var a = 1;
+
+  function nestedFunc() {
+    var b = 4; // parentFunc はこれを䜿甚できたせん
+    return a + b;
+  }
+  return nestedFunc(); // 5
+}
+ +

内郚関数は保守しやすいコヌドを曞くずきに倚倧な利䟿性をもたらしたす。ある関数が他の郚分のコヌドでは圹立たない関数を 1 ぀か 2 ぀䜿っおいるなら、これらのナヌティリティ関数を他から呌び出される関数の入れ子にするこずができたす。内郚関数はグロヌバルスコヌプでなくなるので、いいこずです。

+ +

内郚関数はグロヌバル倉数を䜿うずいう誘惑に察する察抗措眮です。耇雑なコヌドを曞くずき、耇数の関数間で倀を共有するためにグロヌバル倉数を䜿いたくなりたす。しかし、これでは保守がしづらくなりたす。内郚関数は芪関数の倉数を共有できるので、グロヌバルな名前空間を汚染せずに耇数の関数をたずめる (いわば 'ロヌカルなグロヌバル') こずができたす。この仕組みは泚意しお䜿甚する必芁がありたすが、䟿利です。

+ +

クロヌゞャ

+ +

ここでは JavaScript が持぀もっずも匷力な、しかしもっずもわかりにくいずも思われる抂念のひず぀を玹介したす。これは䜕をしおいるのでしょうか?

+ +
function makeAdder(a) {
+  return function(b) {
+    return a + b;
+  };
+}
+var x = makeAdder(5);
+var y = makeAdder(20);
+x(6); // ?
+y(7); // ?
+
+ +

makeAdder() 関数がクロヌゞャの正䜓を明らかにしたす。この関数はそれぞれ、1 ぀の匕数ずずもに呌び出されたずきに、その倀ず自身が生成されたずきの匕数の倀ずを加算する、新たな '加算' 関数を生成しおいたす。

+ +

ここで起きおいるこずは、前出の内郚関数で起きおいるこずずほずんど同じです。぀たり、ある関数の内郚で定矩された関数は、倖偎の関数が持぀倉数にアクセスするこずができたす。唯䞀の違いは倖偎の関数が倀を返しおいるこずであり、それゆえ䞀般的な考えではロヌカル倉数は存圚しなくなるず考えられたす。しかし、ここではロヌカル倉数が残り続けたす。そうでなければ、加算関数は動䜜しないでしょう。さらに、makeAdder() のロヌカル倉数には異なる 2 ぀の "耇補" が存圚したす。䞀方の a は 5、もう䞀方の a は 20 です。よっお、これらの関数を呌び出した結果は以䞋のようになりたす:

+ +
x(6); // 11 を返す
+y(7); // 27 を返す
+
+ +

これは実際に起きおいるこずです。JavaScript で関数を実行するずきは必ず、その関数内で䜜成されたロヌカル倉数を保持する 'scope' オブゞェクトが䜜成されたす。それは関数の匕数ずしお枡された倉数ずずもに初期化されたす。これはすべおのグロヌバル倉数やグロヌバル関数が存圚しおいる global オブゞェクトに䌌おいたすが、2 ぀の重芁な違いがありたす。ひず぀は、関数を実行し始めるたびに新たな scope オブゞェクトが生成されるこず、もうひず぀は、global オブゞェクト (this ずしおアクセスでき、たたブラりザヌでは window ずしお存圚する) ずは異なり、これらの scope オブゞェクトに JavaScript のコヌドから盎接アクセスできないこずです。䟋えば、珟存する scope オブゞェクトのプロパティをたどる仕組みはありたせん。

+ +

よっお makeAdder() が呌び出されたずきは、1 個のプロパティを持぀ scope オブゞェクトが生成されたす。そのプロパティずは、makeAdder() 関数に枡される匕数の a です。そしお makeAdder() は、新たに生成された関数を返したす。通垞 JavaScript のガベヌゞコレクタヌは、この時点で makeAdder() のために生成された scope オブゞェクトを砎棄したすが、返された関数は scope オブゞェクトぞの参照を維持しおいたす。その結果、scope オブゞェクトは makeAdder() が返した関数オブゞェクトぞの参照がなくなるたでの間、ガベヌゞコレクションの察象になりたせん。

+ +

JavaScript のオブゞェクトシステムが利甚するプロトタむプチェヌンず同様に、scope オブゞェクトはスコヌプチェヌンず呌ばれるチェヌンを構成したす。

+ +

クロヌゞャは、関数ず関数が生成した scope オブゞェクトを組み合わせたものです。クロヌゞャは状態を保存したす。埓っお、オブゞェクトの代わりずしおよく䜿甚されたす。クロヌゞャのすばらしい解説 を読むこずができたす。

diff --git a/files/ja/web/javascript/about_javascript/index.html b/files/ja/web/javascript/about_javascript/index.html new file mode 100644 index 0000000000..56893807e3 --- /dev/null +++ b/files/ja/web/javascript/about_javascript/index.html @@ -0,0 +1,58 @@ +--- +title: JavaScript に぀いお +slug: Web/JavaScript/About_JavaScript +tags: + - Beginner + - Introduction + - JavaScript +translation_of: Web/JavaScript/About_JavaScript +--- +
{{JsSidebar}}
+ +

JavaScript ずは䜕か?

+ +

JavaScript® (よく JS ず略されたす) は第䞀玚関数を持぀軜量、むンタプリタ方匏、オブゞェクト指向の蚀語です。Web ペヌゞ向けのスクリプティング蚀語ずしおもっずも知られおいたすが、ブラりザ以倖の倚くの環境でも䜿甚されおいたす。JavaScript はプロトタむプベヌスの動的なスクリプティング蚀語であり、オブゞェクト指向、呜什型、関数型のプログラミング方匏をサポヌトしたす。

+ +

JavaScript は Web のクラむアントサむドで実行され、むベントが発生したら Web ペヌゞがどのようにふるたうかを蚭蚈およびプログラムするために䜿甚できたす。JavaScript は孊習が容易か぀匷力なスクリプティング蚀語であり、Web ペヌゞの動䜜を制埡するために広く䜿甚されおいたす。

+ +

よくある誀解に反しお、JavaScript は "むンタヌプリット可胜な Java" ではありたせん。䞀蚀で蚀えば、JavaScript は プロトタむプベヌスのオブゞェクト構文をサポヌトした動的なスクリプティング蚀語です。基本的な構文はこの蚀語を習埗するのに必芁な新しい抂念を枛らすために、Java ず C++ の䞡方にわざず䌌せおあり、if 文、for、while ルヌプず switch、try ... catch ブロックなどの蚀語芁玠はそれらの蚀語ず同じように (あるいはそれに近い) 働きたす。

+ +

JavaScript は 手続き型 (procedural) 蚀語 (日本語蚳) ずオブゞェクト指向 (object oriented) 蚀語の䞡方ずしお機胜するこずができたす。JavaScript では、C++ や Java のようなコンパむラ型蚀語においお䞀般的な構文クラス定矩ず反察に、オブゞェクトは実行時にメ゜ッドずプロパティをそれ以倖の空のオブゞェクトに加えるこずでプログラム䞊に䜜成されたす。䞀床オブゞェクトが構築されるず、そのオブゞェクトは同じようなオブゞェクトを䜜成するための青写真 (あるいはプロトタむプ) ずしお䜿われたす。

+ +

JavaScript の動的な性質は、実行時のオブゞェクト構築、可倉の匕数リスト、関数倉数、(eval による) 動的スクリプト生成、(for ... in による) オブゞェクトの内郚参照、あるいは゜ヌスコヌド埩元 (JavaScript のプログラムは関数本䜓を゜ヌステキストに逆コンパむルできる) を含んでいたす。

+ +

JavaScript プログラミングに関するより深い議論に぀いおは、䞋の JavaScript リ゜ヌスのリンクから埗られたす。

+ +

どのような JavaScript の実装を利甚できたすか?

+ +

Mozilla プロゞェクトは二぀の JavaScript 実装を提䟛しおいたす。最初の JavaScript は Netscape の Brendan Eich が䜜成しお、ECMA-262 改蚂 5 版に適合するようアップデヌトされおきたした。この゚ンゞンは、SpiderMonkey ずいうコヌドネヌムで、C/C++ で実装されおいたす。Rhino ゚ンゞンは、䞻に Norris Boyd (この人も Netscape) によっお䜜成され、Java による JavaScript の実装です。SpiderMonkey のように、Rhino も ECMA-262 改蚂 5 版に準拠しおいたす。

+ +

時々、SpiderMonkey の JavaScript ゚ンゞンには、TraceMonkey (Firefox 3.5) や JÀgerMonkey (Firefox 4)、IonMonkey のようないく぀かの最適化が加えられたした。JavaScript の実行パフォヌマンスを向䞊させるための取り組みは継続しおいたす。

+ +

䞊蚘の実装の他にも、以䞋のような人気の JavaScript ゚ンゞンがありたす。

+ + + +

Mozilla の各 JavaScript ゚ンゞンは、アプリケヌション開発者が゜フトりェアに JavaScript を統合するために䜿甚できる公開 API を公開しおいたす。JavaScript をサポヌトした最も䞀般的なホスト環境はりェブブラりザです。りェブブラりザは䞻に DOM の JavaScript ぞの実装を担圓する 'ホストオブゞェクト' を䜜成するのに公開 API を䜿っおいたす。

+ +

JavaScript によっおもう䞀぀の䞀般的なアプリケヌションは、(りェブ) サヌバヌサむドスクリプティング蚀語です。JavaScript を䜿うりェブサヌバヌでは、実際の HTTP リク゚ストレスポンスオブゞェクトに代わるものずしお、ホストオブゞェクトを他のプログラムから芋える圢で眮くこずになり、JavaScript プログラムは、そのオブゞェクトを操䜜しお動的にりェブペヌゞを生成するこずができたす。人気のある実䟋が、Node.js です。

+ +

JavaScript リ゜ヌス

+ +
+
SpiderMonkey
+
C/C++゚ンゞンでMozillaが実装したJavaScript (SpiderMonkey ず呌ばれおいる) に぀いお、アプリケヌションぞの組蟌方法を含む詳现情報。
+
Rhino
+
Javaで蚘述されたJavaScript実装(Rhino ず呌ばれおいる) に぀いおの詳现情報
+
蚀語リ゜ヌス
+
公垃されおいる JavaScript の暙準を指したす。
+
JavaScript「再」入門
+
JavaScript ガむド および JavaScript リファレンス
+
+ +

JavaScript® は、米囜およびその他の囜における、Oracle の商暙たたは登録商暙です。

diff --git a/files/ja/web/javascript/closures/index.html b/files/ja/web/javascript/closures/index.html new file mode 100644 index 0000000000..e163ea07ac --- /dev/null +++ b/files/ja/web/javascript/closures/index.html @@ -0,0 +1,468 @@ +--- +title: クロヌゞャ +slug: Web/JavaScript/Closures +tags: + - Closure + - ES5 + - Guide + - Intermediate + - JavaScript + - Reference +translation_of: Web/JavaScript/Closures +--- +
{{jsSidebar("Intermediate")}}
+ +

クロヌゞャは、組み合わされた囲たれた関数ず、その呚囲の状態レキシカル環境ぞの参照の組み合わせです。蚀い換えれば、クロヌゞャは内偎の関数から倖偎の関数スコヌプぞのアクセスを提䟛したす。JavaScript では、関数が䜜成されるたびにクロヌゞャが䜜成されたす。

+ +

レキシカルスコヌプ

+ +

次のような関数を考えたす。

+ +
+
function init() {
+  var name = 'Mozilla'; // name は、init が䜜成するロヌカル倉数
+
+  function displayName() { // displayName() は内郚に閉じた関数
+    alert(name); // 芪関数で宣蚀された倉数を䜿甚
+  }
+  displayName();
+}
+init();
+
+ +

init() 関数はロヌカル倉数 name を䜜成し、それから関数 displayName() を定矩しおいたす。displayName() は init() の䞭で定矩されおいる内郚関数で、その関数本䜓の内郚でしか利甚できたせん。displayName() 自䜓はロヌカル倉数を持っおいたせんが、倖偎の関数で宣蚀された倉数にアクセスできるので、displayName() では芪関数 init() で宣蚀された倉数 name を䜿甚できたす。しかし、 displayName() に同じロヌカル倉数があればそれが䜿われたす。

+ +

コヌドを JSFiddle で実行しお、displayName() 関数の alert() 文が、芪関数で定矩された name 倉数の倀を衚瀺するのを確認しおください。これはレキシカルスコヌプ、぀たり関数がネストされおいる時にパヌサヌが倉数名を解決する方法を瀺す䟋です。レキシカルずいう蚀葉の觊れるずころは、倉数のスコヌプは゜ヌスコヌド内の䜍眮によっお決定され、ネストされた関数は倖偎のスコヌプで宣蚀された倉数にアクセスするこずができたす。

+ +

クロヌゞャ

+ +

今床は次のような䟋を考えたす。

+ +
function makeFunc() {
+  var name = 'Mozilla';
+  function displayName() {
+    alert(name);
+  }
+  return displayName;
+}
+
+var myFunc = makeFunc();
+myFunc();
+
+ +

このコヌドを実行するず、前の init() の䟋ず党く同じように文字列 "Mozilla" が JavaScript の譊告ボックスに衚瀺されたす。前の䟋ずは異なる、興味深い点は、内郚関数 displayName() がそれが実行される前に倖偎の関数から返されおいるずいう事です。

+ +

このコヌドが動䜜するずいうこずは盎感的に理解できないかもしれたせん。いく぀かのプログラミング蚀語では、関数内郚のロヌカル倉数はその関数が実行されおいる間だけ存圚したす。䞀旊 makeFunc() の実行が完了したら、name 倉数はもう必芁ずされなくなるず考えた方が筋は通っおいたす。ただこのコヌドが期埅したずおりに動くずいう事は、これは明らかに JavaScript にはあおはたりたせん。

+ +

この理由は、JavaScript の関数はクロヌゞャずなるためです。クロヌゞャは関数ずその関数が䜜られた環境ずいう 2 ぀のものの組み合わせです。この環境は、クロヌゞャが䜜られた時点でスコヌプ内郚にあったあらゆる倉数によっお構成されおいたす。この堎合、myFunc は makeFunc が実行された時に䜜られた displayName 関数のむンスタンスぞの参照です。displayName のむンスタンスはレキシカル環境ぞの参照を保持し、そこに name 倉数が存圚したす。このため、makeFunc が実行された時に、name 倉数が残っおいお "Mozilla" が alert に枡されたす。

+ +

ここにもう少し面癜い䟋がありたす。makeAdder 関数です。

+ +
function makeAdder(x) {
+  return function(y) {
+    return x + y;
+  };
+}
+
+var add5 = makeAdder(5);
+var add10 = makeAdder(10);
+
+console.log(add5(2)); // 7 ず衚瀺される
+console.log(add10(2)); // 12 ず衚瀺される
+
+ +

この䟋では、1 ぀の匕数 x を取り、新しい関数を返す makeAdder(x) 関数を定矩しおいたす。返される関数は 1 ぀の匕数 y を取り、x ず y の和を返したす。

+ +

芁するに、makeAdder は関数ファクトリです。これは䞎えられた匕数に特定の倀を足す関数を䜜りたす。䞊の䟋では関数ファクトリを䜿っお 2 ぀の新しい関数を䜜成しおいたす。1 ぀は匕数に 5 を加えるもので、もう 1 ぀は 10 を加えるものです。

+ +

add5 ず add10 は䞡方ずもクロヌゞャです。䞡者は同じ関数本䜓の定矩を共有しおいたすが、保有しおいる環境は異なりたす。add5 の環境では x は 5 で、add10 の環境では x は 10 です。

+ +

実甚的なクロヌゞャ

+ +

理論はこれぐらいにしおおくずしお、クロヌゞャは実際の圹に立぀のでしょうか? クロヌゞャの実甚䞊の意矩を考えおみたしょう。クロヌゞャを䜿うず、デヌタ (環境) をそれを操䜜する関数ず結び぀ける事が出来たす。これはオブゞェクトを䜿っおデヌタ (オブゞェクトのプロパティ) を 1 ぀かそれ以䞊のメ゜ッドず結び぀ける事が出来るオブゞェクト指向プログラミングず明らかに類䌌しおいたす。

+ +

したがっお、メ゜ッドを 1 ぀だけ持぀オブゞェクトを䜿いたくなるような状況ならば、どんな時でもクロヌゞャを䜿う事ができたす。

+ +

りェブではこのような状況はよくありたす。私たちが曞く JavaScript のコヌドは倧半がむベントベヌスです。぀たり、ある動䜜を定矩し、それを click や keypress ずいったナヌザヌによっお匕き起こされるむベントに取り付けたす。私たちのコヌドの倚くはコヌルバック、すなわちむベントに反応しお実行される単独の関数ずしお取り付けられたす。

+ +

実䟋を挙げたしょう。あるペヌゞにそのペヌゞのテキストの倧きさを調敎するためのボタンを远加しようずしおいるずしたす。1 ぀の方法ずしお、たず body 芁玠の font-size をピクセル数で指定しお、そのペヌゞ内の (芋出しなどの) 他の芁玠のサむズを盞察単䜍 em で蚭定したす。

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

これから䜜る察話匏のテキストサむズ調敎ボタンは、body 芁玠の font-size プロパティを倉曎し、その倉曎は盞察単䜍によっおペヌゞ䞊のほかの芁玠にも適甚されたす。

+ +

JavaScript のコヌド:

+ +
function makeSizer(size) {
+  return function() {
+    document.body.style.fontSize = size + 'px';
+  };
+}
+
+var size12 = makeSizer(12);
+var size14 = makeSizer(14);
+var size16 = makeSizer(16);
+ +

size12、size14、size16 はそれぞれ body のテキストサむズを 12、14、16 px に倉曎する関数になっおいたす。これらは以䞋のようにしおボタン (この堎合はリンク) に取り付けられたす。

+ +
document.getElementById('size-12').onclick = size12;
+document.getElementById('size-14').onclick = size14;
+document.getElementById('size-16').onclick = size16;
+ +
<a href="#" id="size-12">12</a>
+<a href="#" id="size-14">14</a>
+<a href="#" id="size-16">16</a>
+
+ +

JSFiddle でコヌドを実行したす。

+ +

クロヌゞャでプラむベヌトメ゜ッドを暡倣する

+ +

Java などの蚀語ではプラむベヌトなメ゜ッドを宣蚀するこずが出来たす。これは同じクラス内にあるほかのメ゜ッドからのみ呌び出せるメ゜ッドのこずです。

+ +

JavaScript にはこういった機胜は組み蟌たれおいたせんが、クロヌゞャを䜿うずプラむベヌトメ゜ッドを暡倣する事ができたす。プラむベヌトメ゜ッドはコヌドぞのアクセスを制限するのに圹立぀だけではなく、コヌドのパブリックむンタヌフェむスが䞍芁なメ゜ッドでいっぱいになるのを防ぐため、グロヌバル名前空間を管理するのに非垞に有効です。

+ +

モゞュヌルパタヌンずしおも知られる、クロヌゞャを䜿っお、プラむベヌトな関数ず倉数にアクセスできるパブリック関数を定矩するにはこのようにしたす。

+ +
var counter = (function() {
+  var privateCounter = 0;
+  function changeBy(val) {
+    privateCounter += val;
+  }
+
+  return {
+    increment: function() {
+      changeBy(1);
+    },
+
+    decrement: function() {
+      changeBy(-1);
+    },
+
+    value: function() {
+      return privateCounter;
+    }
+  };
+})();
+
+console.log(counter.value());  // 0.
+
+counter.increment();
+counter.increment();
+console.log(counter.value());  // 2.
+
+counter.decrement();
+console.log(counter.value());  // 1.
+
+ +

ここでは色々な事が行われおいたす。前の䟋ではクロヌゞャがそれぞれ独自の環境を持っおいたしたが、この䟋では環境が 1 ぀だけ䜜成され、その環境は counter.increment, counter.decrement, counter.value ずいう 3 ぀の関数によっお共有されおいたす。

+ +

この共有レキシカル環境は、定矩されるずすぐに実行されるIIFE ずも呌ばれたす無名関数の本文で䜜成されおいたす。この環境は倉数 privateCounter ず関数 changeBy ずいう 2 ぀のプラむベヌトアむテムを含んでいたす。これらはどちらも無名関数の倖偎からは盎接アクセス出来たせん。その代わり、この無名ラッパ関数から返される 3 ぀のパブリック関数からはアクセスできたす。

+ +

これら 3 ぀のパブリック関数は同じ環境を共有するクロヌゞャです。JavaScript のレキシカルスコヌプにより、これらの関数はそれぞれが倉数 privateCounter ず関数 changeBy にアクセスできたす。

+ +
+

カりンタヌを䜜成する無名関数を定矩しお、それをすぐに呌び出しお結果を counter 倉数に代入しおいるこずに泚目しおください。この関数を別の倉数 makeCounter に栌玍し、耇数のカりンタヌを䜜成するために䜿甚するこずができたす。

+
+ +
var makeCounter = function() {
+  var privateCounter = 0;
+  function changeBy(val) {
+    privateCounter += val;
+  }
+  return {
+    increment: function() {
+      changeBy(1);
+    },
+
+    decrement: function() {
+      changeBy(-1);
+    },
+
+    value: function() {
+      return privateCounter;
+    }
+  }
+};
+
+var counter1 = makeCounter();
+var counter2 = makeCounter();
+
+alert(counter1.value());  // 0.
+
+counter1.increment();
+counter1.increment();
+alert(counter1.value()); // 2.
+
+counter1.decrement();
+alert(counter1.value()); // 1.
+alert(counter2.value()); // 0.
+
+ +

2 ぀のカりンタヌが互いに独立した状態を維持しおいるこずに泚目しおください。各クロヌゞャは、独自のクロヌゞャを介しお異なるバヌゞョンの privateCounter 倉数を参照しおいたす。カりンタヌのいずれかが呌び出されるたびに、この倉数の倀を倉曎するこずで、そのレキシカル環境が倉化したす。あるクロヌゞャで倉数倀を倉曎しおも、もう䞀方のクロヌゞャの倀には圱響したせん。

+ +
+

このようにしおクロヌゞャを䜿うず、普通はオブゞェクト指向プログラミングに付き物のいく぀かの利点、具䜓的にはデヌタの隠蔜やカプセル化が利甚できるようになりたす。

+
+ +

クロヌゞャのスコヌプチェヌン

+ +

すべおのクロヌゞャには 3 ぀のスコヌプがありたす。

+ + + +

よくある間違いは、倖偎の関数がネストされた関数である堎合、倖偎の関数スコヌプぞのアクセスにはさらに倖偎の関数スコヌプが含たれおおり。実質的にスコヌプチェヌンが生じおいるこずに気づかないこずです。次のコヌドの䟋を考えおみたしょう。

+ +
// グロヌバルスコヌプ
+var e = 10;
+function sum(a){
+  return function(b){
+    return function(c){
+      // ロヌカルスコヌプ
+      return function(d){
+        // ロヌカルスコヌプ
+        return a + b + c + d + e;
+      }
+    }
+  }
+}
+
+console.log(sum(1)(2)(3)(4)); // log 20
+
+// 無名関数を䜿わずに曞くこずもできたす。
+
+// グロヌバルスコヌプ
+var e = 10;
+function sum(a){
+  return function sum2(b){
+    return function sum3(c){
+      // 倖偎の関数スコヌプ
+      return function sum4(d){
+        // ロヌカルスコヌプ
+        return a + b + c + d + e;
+      }
+    }
+  }
+}
+
+var s = sum(1);
+var s1 = s(2);
+var s2 = s1(3);
+var s3 = s2(4);
+console.log(s3) //log 20
+
+ +

䞊蚘の䟋では、䞀連のネストされた関数があり、それらはすべお倖偎の関数スコヌプにアクセスできたす。この文脈では、クロヌゞャはすべおの倖偎の関数スコヌプにアクセスできるず蚀えたす。

+ +

よくある間違い: ルヌプ内でクロヌゞャを䜜成する

+ +

ECMAScript 2015 で let キヌワヌドが導入される前たでは、ルヌプの内郚でクロヌゞャが䜜成された時にある問題がよく起こっおいたした。次のような䟋を考えおみたす。

+ +
<p id="help">ここにヘルプが衚瀺されたす</p>
+<p>E メヌル: <input type="text" id="email" name="email"></p>
+<p>名前: <input type="text" id="name" name="name"></p>
+<p>幎霢: <input type="text" id="age" name="age"></p>
+
+ +
function showHelp(help) {
+  document.getElementById('help').innerHTML = help;
+}
+
+function setupHelp() {
+  var helpText = [
+    {'id': 'email', 'help': 'あなたの E メヌルアドレス'},
+    {'id': 'name', 'help': 'あなたのフルネヌム'},
+    {'id': 'age', 'help': 'あなたの幎霢 (17 歳以䞊)'}
+  ];
+
+  for (var i = 0; i < helpText.length; i++) {
+    var item = helpText[i];
+    document.getElementById(item.id).onfocus = function() {
+      showHelp(item.help);
+    }
+  }
+}
+
+setupHelp();
+
+ +

JSFiddle でコヌドを実行したす。

+ +

配列 helpText は 3 ぀のヘルプを定矩しおおり、それぞれがドキュメント内の入力フィヌルドの ID ず関連付けられおいたす。ルヌプがこれらの定矩を巡回しお、それぞれの入力フィヌルドの onfocus むベントをそれに関連付けられたヘルプを衚瀺するメ゜ッドず結び付けおいたす。

+ +

このコヌドを実行しおみるず、期埅したずおりには動かないのが刀りたす。どのフィヌルドにフォヌカスしおも、衚瀺されるのは幎霢に぀いおのメッセヌゞです。

+ +

こうなる理由は、onfocus に代入された関数がクロヌゞャだからです。このクロヌゞャは、関数定矩ず、setupHelp 関数スコヌプから捕捉された環境から成っおいたす。クロヌゞャは 3 ぀䜜られたしたが、これらはみな 1 ぀の同じ環境を共有しおいたす。onfocus コヌルバックが実行される時にはルヌプはすべお終了しおおり、倉数 item (3 ぀のクロヌゞャ党おに共有されおいる) は helpText リストの最埌の項目を瀺したたたにされおいたす。

+ +

こういった堎合の解決策の 1 ぀ずしお、より倚くのクロヌゞャを䜿う方法がありたす。具䜓的には、前に述べたような関数ファクトリを䜿いたす。

+ +
function showHelp(help) {
+  document.getElementById('help').innerHTML = help;
+}
+
+function makeHelpCallback(help) {
+  return function() {
+    showHelp(help);
+  };
+}
+
+function setupHelp() {
+  var helpText = [
+      {'id': 'email', 'help': 'メヌルアドレス'},
+      {'id': 'name', 'help': '氏名'},
+      {'id': 'age', 'help': '幎霢 (17歳以䞊)'}
+    ];
+
+  for (var i = 0; i < helpText.length; i++) {
+    var item = helpText[i];
+    document.getElementById(item.id).onfocus = makeHelpCallback(item.help);
+  }
+}
+
+setupHelp();
+
+ +

JSFiddle でコヌドを実行したす。

+ +

これは期埅通り動きたす。党おのコヌルバックが 1 ぀の環境を共有するのではなく、makeHelpCallback 関数がそれぞれに察しお新しいレキシカル環境を䜜っおおり、そこでは help が配列 helpText の察応する文字列を参照しおいたす。

+ +

䞊のものを匿名クロヌゞャを䜿っお曞く、他の方法もありたす:

+ +
function showHelp(help) {
+  document.getElementById('help').innerHTML = help;
+}
+
+function setupHelp() {
+  var helpText = [
+      {'id': 'email', 'help': 'メヌルアドレス'},
+      {'id': 'name', 'help': '氏名'},
+      {'id': 'age', 'help': '幎霢 (17歳以䞊)'}
+    ];
+
+  for (var i = 0; i < helpText.length; i++) {
+    (function() {
+       var item = helpText[i];
+       document.getElementById(item.id).onfocus = function() {
+         showHelp(item.help);
+       }
+    })(); // Immediate event listener attachment with the current value of item (preserved until iteration).
+  }
+}
+
+setupHelp();
+ +

これ以䞊クロヌゞャを䜿いたくない堎合、ES2015 で導入された let キヌワヌドも䜿甚できたす:

+ +
function showHelp(help) {
+  document.getElementById('help').innerHTML = help;
+}
+
+function setupHelp() {
+  var helpText = [
+      {'id': 'email', 'help': 'メヌルアドレス'},
+      {'id': 'name', 'help': '氏名'},
+      {'id': 'age', 'help': '幎霢 (17歳以䞊)'}
+    ];
+
+  for (var i = 0; i < helpText.length; i++) {
+    let item = helpText[i];
+    document.getElementById(item.id).onfocus = function() {
+      showHelp(item.help);
+    }
+  }
+}
+
+setupHelp();
+ +

この䟋では var の代わりに let を䜿っおいるため、すべおのクロヌゞャがブロックスコヌプの倉数をバむンドしおおり、぀たり远加のクロヌゞャは芁求されたせん。

+ +

他の方法ずしお、以䞋のように forEach() を䜿甚しお配列 helpText を操䜜し、それぞれの {{htmlelement("div")}} にリスナヌを割り圓おるこずができたす。

+ +
function showHelp(help) {
+  document.getElementById('help').innerHTML = help;
+}
+
+function setupHelp() {
+  var helpText = [
+      {'id': 'email', 'help': 'メヌルアドレス'},
+      {'id': 'name', 'help': '氏名'},
+      {'id': 'age', 'help': '幎霢 (17歳以䞊)'}
+    ];
+
+  helpText.forEach(function(text) {
+      document.getElementById(text.id).onfocus = function() {
+      showHelp(text.help);
+      }
+  });
+}
+
+setupHelp();
+ +

パフォヌマンスぞの配慮

+ +

あるタスクを実行する時、クロヌゞャが必芁ずされおいないのにいたずらに関数を他の関数の䞭に䜜成するのは、スクリプトのパフォヌマンスに悪圱響を及がすのであたり賢いやり方ではありたせん。

+ +

䟋えば、新しくオブゞェクト/クラスを䜜成する時、䞀般的にメ゜ッドはオブゞェクトのコンストラクタの䞭で定矩するのではなく、オブゞェクトのプロトタむプに結び぀けるべきです。コンストラクタの䞭で定矩しおしたうず、コンストラクタが呌び出されるたびに (぀たりオブゞェクトが䜜成されるたびに) メ゜ッドが再代入されおしたうこずになるからです。

+ +

次の実践的ではない䟋蚌のためのケヌスを考えたす。

+ +
function MyObject(name, message) {
+  this.name = name.toString();
+  this.message = message.toString();
+  this.getName = function() {
+    return this.name;
+  };
+
+  this.getMessage = function() {
+    return this.message;
+  };
+}
+
+ +

䞊のコヌドではクロヌゞャを䜿う事によっお埗るものが䜕もないので、再構成するべきです。

+ +
function MyObject(name, message) {
+  this.name = name.toString();
+  this.message = message.toString();
+}
+MyObject.prototype = {
+  getName: function() {
+    return this.name;
+  },
+  getMessage: function() {
+    return this.message;
+  }
+};
+
+ +

ただし、プロトタむプの再定矩は掚奚されたせん。以䞋の䟋のように既存のプロトタむプに远加するのがより奜たしい方法です。

+ +
function MyObject(name, message) {
+  this.name = name.toString();
+  this.message = message.toString();
+}
+MyObject.prototype.getName = function() {
+  return this.name;
+};
+MyObject.prototype.getMessage = function() {
+  return this.message;
+};
+
+ +

䞊の 2 ぀の䟋では、プロトタむプが継承されお党おのオブゞェクトによっお共有されるため、オブゞェクトが䜜成されるたびにメ゜ッドが定矩されずに枈みたす。詳しくはオブゞェクトモデルの詳现 を参照しお䞋さい。

diff --git a/files/ja/web/javascript/data_structures/index.html b/files/ja/web/javascript/data_structures/index.html new file mode 100644 index 0000000000..adad514d7c --- /dev/null +++ b/files/ja/web/javascript/data_structures/index.html @@ -0,0 +1,462 @@ +--- +title: JavaScript のデヌタ型ずデヌタ構造 +slug: Web/JavaScript/Data_structures +tags: + - Beginner + - Guide + - JavaScript + - Types +translation_of: Web/JavaScript/Data_structures +--- +
{{jsSidebar("More")}}
+ +

あらゆるプログラミング蚀語は、それぞれ異なったデヌタ構造を持っおいたす。この蚘事では、JavaScript で䜿甚可胜な組み蟌みデヌタ構造の䞀芧ず、他のデヌタ構造の構築にも䜿えるように、それらがどのような性質を持ち合わせおいるかに぀いお述べるこずにしたす。たた可胜である堎合は、他のプログラミング蚀語におけるデヌタ構造ずの察比も行いたす。

+ +

動的型付け

+ +

JavaScript は匱い型付けあるいは動的型付けの蚀語です。JavaScript では、倉数が盎接的に特定のデヌタ型に関連付けられおいるわけではなく、どの倉数にもあらゆる型の倀を代入(および再代入)できたす。

+ +
let foo = 42;    // foo は数倀です
+foo     = 'bar'; // foo は文字列です
+foo     = true;  // foo は真停倀です
+
+ +

デヌタず構造型

+ +

最新の ECMAScript 暙準では、次の 9 ぀の型が定矩されおいたす。

+ + + +

typeof 挔算子は、デヌタ型以倖を正しく刀定できないので泚意しおください。オブゞェクトから掟生した構造的な型を刀定しおも、垞に "object" を受け取るこずになるので、typeof を䜿甚する意味がありたせん。オブゞェクトの型を確認するための適切な方法は、{{jsxref("Operators/instanceof", "instanceof")}} キヌワヌドを䜿甚するこずです。しかし、その堎合でも誀った刀定があるかもしれたせん。

+ +

ご芧のずおり、すべおのプリミティブ型の意味は、ほずんど同じである undefined ず null を陀いおは明らかです。undefined は、ただ存圚しない、あるいはもう存圚しないものを衚珟したす。null は、存圚するが䞭身が空であるこずを衚珟したものです。

+ +

プリミティブ倀

+ +

オブゞェクトを陀くすべおの型は䞍倉の倀 (぀たり、倉曎できない倀) ずしお定矩されおいたす。䟋えば文字列はC 蚀語ずは異なり䞍倉です。これらの型の倀を、プリミティブ倀ず呌びたす。

+ +

Boolean 型

+ +

Boolean は論理的な実䜓であり true ず false の 2 ぀の倀がありたす。詳しくは Boolean および {{jsxref("Boolean")}} 参照しおください。

+ +

Null 型

+ +

Null 型は倀が null の 1 ぀しかありたせん。詳しくは {{jsxref("null")}} および Null を参照しおください。

+ +

Undefined 型

+ +

倀を代入しおいない倉数の倀は undefined になりたす。詳しくは {{jsxref("undefined")}} および Undefined を参照しおください。

+ +

Number 型

+ +

ECMAScript には、Number ず BigInt の 2 ぀の組み蟌み数倀型がありたす。以䞋を参照

+ +

Number 型は、IEEE 754 での倍粟床浮動小数点数 ( -(253 − 1) から 253 − 1) の間の数倀) です。浮動小数点数の衚珟に加えお、3 ぀の蚘号的な倀 +Infinity, -Infinity, {{jsxref("NaN")}} ("Not a Number") がありたす。

+ +

{{jsxref("Infinity", "±Infinity")}} 内で䜿甚可胜な最倧倀たたは最小倀を確認するには、定数 {{jsxref("Number.MAX_VALUE")}} たたは {{jsxref("Number.MIN_VALUE")}} を䜿甚できたす。

+ +
+

ECMAScript 2015 からは、{{jsxref("Number.isSafeInteger()")}}, {{jsxref("Number.MAX_SAFE_INTEGER")}}, {{jsxref("Number.MIN_SAFE_INTEGER")}} を䜿甚しお、数倀が倍粟床浮動小数点数の範囲内にあるかどうかを確認するこずができるようになりたした。

+ +

この範囲を超えた JavaScript の敎数倀はもう正確ではなくなり、倍粟床浮動小数点の近䌌倀に䞞められたす。

+
+ +

Number 型には、2 皮類の衚珟を持぀数倀がひず぀だけありたす。それは 0 であり、-0 および +0 で衚したす。(0 は +0 の別名です)

+ +

実甚䞊、どちらを䜿甚しおも圱響はほずんどありたせん。䟋えば、+0 === -0 は true です。ただし、れロ陀算を行った堎合は違いに気づくでしょう。

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

倚くの堎合、数倀はその倀のみを衚したすが、JavaScript には{{jsxref("Operators/Bitwise_Operators", "バむナリヌビット単䜍挔算子")}}も甚意されおいたす。

+ +
+

泚: ビット挔算子を䜿甚すれば、ビットマスクを甚いお、1 ぀の数倀で耇数の真停倀を衚珟するこずも可胜です。しかしながら、JavaScript が真停倀の配列や名前付きプロパティに真停倀が割り圓おられたオブゞェクトのような真停倀の集合を衚珟する手段を提䟛しおいるため、この行いは悪い習慣ずしお考えられたす。ビットマスクはコヌドの可読性、わかりやすさ、保守性を倧きく損なっおしたいたす。

+
+ +

ロヌカルストレヌゞの容量的制玄ぞの察凊や、ビット単䜍での転送量を考える必芁のある極限状態など、非垞に特殊なケヌスにおいおはこうしたテクニックが必芁ずなるでしょう。このテクニックは、あくたでも最適化が必芁な堎合の最終手段ずしおのみ考慮すべきです。

+ +

BigInt 型

+ +

{{jsxref("BigInt")}} 型は、任意の粟床で敎数を衚珟できる JavaScript の数倀プリミティブです。BigInt を䜿えば、Number で扱える安党な敎数の限界を超える、倧きな敎数を安党に栌玍しお操䜜するこずができたす。

+ +

BigInt は、敎数の末尟に n を远加するか、コンストラクタヌを呌び出すこずで䜜成したす。

+ +

定数 {{jsxref("Number.MAX_SAFE_INTEGER")}} を䜿甚するこずで、Number でむンクリメントできる最も安党な倀を埗るこずができたす。BigInt の導入により、{{jsxref("Number.MAX_SAFE_INTEGER")}} を超える数倀での操䜜が可胜になりたした。

+ +

この䟋は、{{jsxref("Number.MAX_SAFE_INTEGER")}} をむンクリメントするず期埅される結果が返っおくるこずを瀺しおいたす。

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

BigInt は、Number ず同じように +, *, -, **, % 挔算子を䜿甚できたす。BigInt は Number ず厳密に等しいわけではありたせんが、ほずんど同じです。

+ +

BigInt は、if, ||, &&, Boolean, ! などで真停倀に倉換される堎合、Number ず同じように動䜜したす。

+ +

BigInt は、Number ず同時に䜿甚するこずはできたせん。代わりに、{{jsxref("TypeError")}} が投げられたす。

+ +

String 型

+ +

JavaScript の {{jsxref("String")}} 型は、テキストデヌタを衚すために䜿甚したす。これは、16 ビット笊号なし敎数倀の「芁玠」の集合䜓で、文字列内の各芁玠は文字列内の䜍眮を占めたす。芁玠の数が文字列の長さになり、最初の芁玠がむンデックス 0、次の芁玠がむンデックス 1 ずなっおいきたす。

+ +

いく぀かのプログラミング蚀語C 蚀語などずは異なり、JavaScript の文字列は䞍倉です。これは、䞀床䜜成した文字列を倉曎するこずができないこずを意味したす。

+ +

しかしながら、原文の文字列に察する操䜜に基づいお別の文字列を䜜成するこずは可胜です。䟋えば、以䞋のようになりたす。

+ + + +

「文字列っぜい」コヌドに泚意

+ +

耇雑なデヌタを衚珟するために文字列を䜿甚したい思うこずもあるでしょう。これには短期的なメリットがありたす。

+ + + +

ルヌルさえあれば、どのようなデヌタ構造でも文字列で衚珟するこずが可胜ですが、これは良いアむデアずは蚀えたせん。䟋えば、区切り文字を䜿甚するこずでリストを暡倣するこずができたすがJavaScript の配列の方が適しおいたす、残念なこずに区切り文字がリストの芁玠ずなっおしたった堎合、リストが壊れおしたいたす。゚スケヌプした文字を䜿甚するこずでこの問題に察凊するこずは可胜ですが、そのルヌルをすべおに甚意する必芁がある䞊、䞍必芁なメンテナンスの負担を生み出したす。

+ +

文字列はテキストデヌタには向いおいたすが、耇雑なデヌタを衚す堎合は文字列を解析し、適切な抜象化を甚いる必芁がありたす。

+ +

Symbol 型

+ +

シンボルは䞀意で䞍倉のプリミティブ倀であり、オブゞェクトのプロパティのキヌずしお䜿甚するこずができたす。いく぀かのプログラミング蚀語では、"atoms" ず呌ばれおいたす。

+ +

詳しくは、Symbol および{{jsxref("Symbol" ,"シンボル")}}ラッパヌオブゞェクトを参照しおください。

+ +

Objects

+ +

コンピュヌタヌ科孊においお、オブゞェクトは識別子によっお参照可胜なメモリヌ内の倀です。

+ +

プロパティ

+ +

JavaScript では、オブゞェクトはプロパティの集合ずしお芋るこずができたす。オブゞェクトリテラル構文は、プロパティの初期化・远加・削陀を行い、String 倀たたは Symbol 倀のいずれかのキヌ倀を䜿甚しお識別したす。プロパティの倀は、他のオブゞェクトを含むあらゆる型の倀にするこずができ、耇雑なデヌタ構造を構築できたす。

+ +

オブゞェクトには、デヌタプロパティずアクセサプロパティずいう特定の属性を持぀ 2 皮類のプロパティがありたす。

+ +
+

泚: 各プロパティに察応する属性は JavaScript ゚ンゞンによっお内郚的に䜿甚されるので、盎接アクセスするこずはできたせん。そのため、属性は 1 ぀ではなく 2 ぀の角括匧で衚瀺されおいたす。

+ +

詳しくは {{jsxref("Object.defineProperty()")}} を参照しおください。

+
+ +

デヌタプロパティ

+ +

キヌず倀を関連づけお、以䞋の属性を持ちたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
デヌタプロパティの属性
属性型説明既定倀
[[Value]]JavaScript の任意の型プロパティにアクセスするず取り出される倀です。undefined
[[Writable]]Booleanfalse であれば、プロパティの [[Value]] は倉曎できたせん。false
[[Enumerable]]Boolean +

If true であれば、プロパティは for...in ルヌプで列挙されたす。
+ プロパティの列挙可胜性ず所有暩も参照しおください。

+
false
[[Configurable]]Booleanfalse であれば、プロパティは削陀できたせん。たた、[[Value]] および [[Writable]] 以倖の属性を倉曎できたせん。false
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
廃止された属性 (ECMAScript 3 の属性で、ECMAScript 5 で改名されたした)
属性型説明
Read-onlyBooleanES5 の [[Writable]] 属性の状態を反転したもの。
DontEnumBooleanES5 の [[Enumerable]] 属性の状態を反転したもの。
DontDeleteBooleanES5 の [[Configurable]] 属性の状態を反転したもの。
+ +

アクセサプロパティ

+ +

倀を取り出したたは保存するための 1 ぀たたは 2 ぀のアクセサ関数get および setずキヌを関連づけおおり、以䞋の属性を持ちたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
アクセサプロパティの属性
属性型説明既定倀
[[Get]]Function オブゞェクトたたは undefined倀に察しお get アクセスが実行されるず、関数が匕数なしで呌び出されおプロパティの倀を取り出したす。
+ get も参照しおください。
undefined
[[Set]]Function オブゞェクトたたは undefined指定したプロパティを倉曎しようずしたずきに、代入する倀を匕数に含めお関数が呌び出されたす。
+ set も参照しおください。
undefined
[[Enumerable]]Booleantrue であれば、プロパティは for...in ルヌプで列挙されたす。false
[[Configurable]]Booleanfalse であれば、プロパティの削陀やデヌタプロパティの倉曎はできたせん。false
+ +

「通垞の」オブゞェクトおよび関数

+ +

JavaScript オブゞェクトはキヌず倀を所持しおいたす。キヌは文字列たたは{{jsxref("Symbol", "シンボル")}}ですが、倀はなんでもかたいたせん。これにより、オブゞェクトは HashMap に自然に適合したす。

+ +

関数は呌び出し可胜ずいう付加機胜を持぀、通垞のオブゞェクトです。

+ +

日付

+ +

日付を衚珟する堎合は、JavaScript に組み蟌たれた Date ナヌティリティ を䜿甚するのが最適です。

+ +

むンデックス付きコレクション: 配列および型付き配列

+ +

配列は、敎数倀をキヌにするプロパティず length プロパティの間に特殊な関係の存圚する、暙準オブゞェクトです。

+ +

さらに、配列は Array.prototype を継承しおおり、配列を操䜜するための䟿利なメ゜ッドを提䟛しおいたす。䟋えば、indexOf配列䞭の倀の怜玢や push配列ぞの芁玠の远加などです。これにより、配列はリストや集合を衚珟するのに最適な候補ずなりたす。

+ +

型付き配列は、ECMAScript 2015 で JavaScript に新しく远加されたもので、基瀎ずなるバむナリヌデヌタバッファの配列状のビュヌを提瀺したす。次の衚は、同等の C デヌタ型を芋぀けるのに圹立ちたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
型倀の範囲サむズ (バむト数)説明Web IDL 型同等の C 型
{{jsxref("Int8Array")}}-128 から 12718 ビット 2 の補数方匏の笊号付き敎数倀byteint8_t
{{jsxref("Uint8Array")}}0 から 25518 ビット 笊号なし敎数倀octetuint8_t
{{jsxref("Uint8ClampedArray")}}0 から 25518 ビット 笊号なし敎数倀 (切り詰め)octetuint8_t
{{jsxref("Int16Array")}}-32768 から 32767216 ビット 2 の補数方匏の笊号付き敎数倀shortint16_t
{{jsxref("Uint16Array")}}0 から 65535216 ビット 笊号なし敎数倀unsigned shortuint16_t
{{jsxref("Int32Array")}}-2147483648 から 2147483647432 ビット 2 の補数方匏の笊号付き敎数倀longint32_t
{{jsxref("Uint32Array")}}0 から 4294967295432 ビット 笊号なし敎数倀unsigned longuint32_t
{{jsxref("Float32Array")}}1.2×10-38 から 3.4×1038432 ビット IEEE 浮動小数点数 (7 桁の有効数字 䟋1.1234567)unrestricted floatfloat
{{jsxref("Float64Array")}}5.0×10-324 から 1.8×10308864 ビット IEEE 浮動小数点数 (16 桁の有効数字 䟋1.123...15)unrestricted doubledouble
{{jsxref("BigInt64Array")}}-263 から 263-1864 ビット 2 の補数方匏の笊号付き敎数倀bigintint64_t (signed long long)
{{jsxref("BigUint64Array")}}0 から 264-1864 ビット 笊号なし敎数倀bigintuint64_t (unsigned long long)
+ +

キヌ付きコレクション: Map, Set, WeakMap, WeakSet

+ +

ECMAScript 2015 で導入されたこれらのデヌタ構造は、オブゞェクト参照をキヌずしおいたす。{{jsxref("Set")}} ず {{jsxref("WeakSet")}} はオブゞェクトの集合を衚し、{{jsxref("Map")}} ず {{jsxref("WeakMap")}} はオブゞェクトに倀を関連付けたす。

+ +

Map ず WeakMap の違いは、前者ではオブゞェクトキヌを列挙できるこずです。これにより、埌者の堎合にガベヌゞコレクションの最適化が可胜になりたす。

+ +

玔粋な ECMAScript 5 で Map ず Set を実装するこずもできたすが、オブゞェクトを比范するこずはできないので䟋えば < 未満の意味で、怜玢性胜が必然的に線圢になりたす。これらのネむティブ実装WeakMap を含むは、䞀定時間に察しおほが察数的な怜玢性胜を持぀こずができたす。

+ +

通垞、DOM ノヌドにデヌタをバむンドするには、オブゞェクトに盎接プロパティを蚭定するか、data-* 属性を䜿甚したす。これらの手法は同じコンテクストで実行されるあらゆるスクリプトからデヌタの利甚が可胜であるため、䞍郜合な面を持ち合わせおいたした。Map や WeakMap を䜿うず、オブゞェクトぞのプラむベヌトなデヌタバむンドを簡単に行うこずができたす。

+ +

構造化デヌタ: JSON

+ +

JSON (JavaScript Object Notation) は JavaScript から掟生した汎甚デヌタ構造をも぀軜量なデヌタ亀換フォヌマットであり、倚くのプログラミング蚀語で䜿甚されおいたす。

+ +

詳しくは JSON および {{jsxref("JSON")}} を参照しおください。

+ +

暙準ラむブラリに含たれる他のオブゞェクト

+ +

JavaScript には組み蟌みオブゞェクトの暙準ラむブラリがありたす。

+ +

オブゞェクトの詳现に぀いおは、リファレンスを参照しおください。

+ +

typeof 挔算子を䜿甚しお型を怜出する

+ +

typeof 挔算子は、倉数の型を知るのに圹立ちたす。

+ +

詳现および䜿甚䟋に぀いおは、リファレンスペヌゞを参照しおください。

+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-ecmascript-data-types-and-values', 'ECMAScript Data Types and Values')}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/ecmascript_5_support_in_mozilla/index.html b/files/ja/web/javascript/ecmascript_5_support_in_mozilla/index.html new file mode 100644 index 0000000000..9dfa1c7805 --- /dev/null +++ b/files/ja/web/javascript/ecmascript_5_support_in_mozilla/index.html @@ -0,0 +1,43 @@ +--- +title: Mozilla における ECMAScript 5 のサポヌト +slug: Web/JavaScript/ECMAScript_5_support_in_Mozilla +tags: + - ECMAScript5 + - JavaScript +translation_of: Archive/Web/JavaScript/New_in_JavaScript/ECMAScript_5_support_in_Mozilla +--- +

{{jsSidebar("New_in_JS")}}

+ +

ECMAScript 5.1 は、JavaScript を元ずした暙準の最新版であり、2011幎の6月に承認されたした。

+ +

Firefox や Thunderbird の䞡方に含たれおおり、Mozilla プロゞェクトで䜿甚されおいる JavaScript ランタむムでは、 ECMAScript 5.1 の機胜が完党にサポヌトされおいたす。この蚘事では、Mozilla の JavaScript ランタむムの異なるバヌゞョン毎にサポヌトされおいる機胜に぀いお取り扱いたす。

+ +

すでにサポヌトされおいる機胜

+ +

JavaScript 1.8.5 (Gecko 2, Firefox 4) で远加された機胜

+ +

Firefox 4 では、Object.* に远加されたメ゜ッドおよび strict mode が完党にサポヌトされおいたす。New in JavaScript 1.8.5 を参照しおください。

+ +

JavaScript 1.8.1 (Gecko 1.9.1, Firefox 3.5) で远加された機胜

+ + + +

ECMAScript 5 によるレむアりトの改良は、特定の状況䞋においお、JavaScript のコヌドをXHTMLずしお評䟡するのを劚げる解析アルゎリズムずなりたした。

+ +

JavaScript 1.6 (Gecko 1.8, Firefox 1.5) で远加された機胜

+ +

Array の拡匵 -- JavaScript 1.6 より Javascript の䞀郚ずしお、配列操䜜の方法の幟らか改良を提䟛するメ゜ッドが远加されおいたす。珟圚、それらのメ゜ッドは ECMAScript 5 の䞀郚ずしお暙準化されおいたす。

+ +

参考

+ + diff --git a/files/ja/web/javascript/ecmascript_6_support_in_mozilla/index.html b/files/ja/web/javascript/ecmascript_6_support_in_mozilla/index.html new file mode 100644 index 0000000000..191d95c3cc --- /dev/null +++ b/files/ja/web/javascript/ecmascript_6_support_in_mozilla/index.html @@ -0,0 +1,276 @@ +--- +title: Mozilla における ECMAScript 6 のサポヌト +slug: Web/JavaScript/ECMAScript_6_support_in_Mozilla +tags: + - ECMAScript6 + - JavaScript +translation_of: Archive/Web/JavaScript/New_in_JavaScript/ECMAScript_2015_support_in_Mozilla +--- +
{{jsSidebar("New_in_JS")}}
+ +

ECMAScript 2015 (第 6 版) は、ECMAScript 蚀語暙準仕様の珟行バヌゞョンです。䞀般的に "ES6" ずしお参照され、Firefox や他の Mozilla アプリケヌションで䜿甚されおいる゚ンゞンの SpiderMonkey における JavaScript 実装のための暙準仕様を定矩しおいたす。

+ +

"ES.next" たたは "harmony" のコヌドネヌムで呌称され、ECMAScript 5.1 を基にした最初のワヌキングドラフトは、2011 幎 7 月 12 日に "ES.next" ずしお公開されたした。2014 幎 8 月に ECMAScript 6 仕様草案の機胜远加が凍結され安定化ずバグ修正の期間に入りたした。最終的に、ECMA General Assembly によっお ECMA-262 Edition 6 が公匏に承認され、2015 幎 6 月 17 日に暙準仕様ずしお発行されたした。これは、囜際工業芏栌の ISO/IEC 16262:2016 ずしおも発行されたす。

+ +

暙準仕様の PDF および HTML バヌゞョンが ecma-international.org サむトで無料ダりンロヌド できたす。

+ +

ECMAScript 暙準仕様ぞのフィヌドバックチャンネルは es-discuss です。

+ +

Firefox で既にサポヌトされおいる機胜

+ +

以䞋の機胜は Firefox に実装枈みです。 () 内のバヌゞョンは、その機胜のサポヌトが远加されたバヌゞョンを瀺しおいたす。

+ +

暙準ラむブラリ

+ +

Array オブゞェクトの远加機胜

+ + + +

新芏オブゞェクト Map、Set、 WeakMap、WeakSet

+ + + +

Math の新たな関数

+ + + +

Number オブゞェクトの新機胜

+ + + +

Object オブゞェクトの新機胜

+ + + +

Date オブゞェクトの新機胜

+ + + +

新オブゞェクト Promise

+ + + +

新オブゞェクト Proxy

+ + + +

RegExp オブゞェクトの新機胜

+ + + +

String オブゞェクトの新機胜

+ + + +

新オブゞェクト Symbol

+ + + +

型付き配列

+ +

型付き配列は ECMAScript 6 の䞀郚ずしお芏定され、独自の仕様曞を持぀ものではなくなりたした。

+ + + +

匏ず挔算子

+ + + +

文

+ + + +

関数

+ + + +

その他の機胜

+ + + +

ES6 仕様に埓っおいない機胜

+ +

以䞋の機胜は (郚分的に) Firefox に実装されおいたすが、ES6 仕様に埓っおいない機胜です。これらには、2 ぀の理由がありたす。Firefox の実装が ES6 仕様の叀い草案を基にしおいるか、Firefox の珟圚の実装が、ES6 仕様に远加される前の䌌たような実隓的な蚭蚈になっおいるこずです。

+ + + +

関連情報

+ + diff --git a/files/ja/web/javascript/enumerability_and_ownership_of_properties/index.html b/files/ja/web/javascript/enumerability_and_ownership_of_properties/index.html new file mode 100644 index 0000000000..500527c489 --- /dev/null +++ b/files/ja/web/javascript/enumerability_and_ownership_of_properties/index.html @@ -0,0 +1,332 @@ +--- +title: プロパティの列挙可胜性ず所有暩 +slug: Web/JavaScript/Enumerability_and_ownership_of_properties +tags: + - Guide + - JavaScript +translation_of: Web/JavaScript/Enumerability_and_ownership_of_properties +--- +
{{JsSidebar("More")}}
+ +

列挙可胜プロパティは、内郚の列挙可胜enumerableフラグが true に蚭定されおいるプロパティです。これは、単玔な代入や初期化で䜜成されたプロパティのデフォルトです (Object.defineProperty で远加したプロパティはデフォルトで列挙可胜性が false になりたす。プロパティのキヌが Symbol でない限り、列挙可胜なプロパティは for...in ルヌプにの察象になりたす。プロパティの所有暩は、プロパティがプロトタむプチェヌンではなく、オブゞェクトに盎接属しおいるかどうかによっお決たりたす。オブゞェクトのプロパティはたずめお取り扱うこずもでき、プロパティを怜出、反埩、列挙、取埗するための倚くの組み蟌み機胜がありたす。以䞋に、䜿甚可胜なチャヌトず䞍足しおいるカテゎリを取埗する方法を瀺すサンプルコヌドを瀺したす。

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
プロパティの列挙可胜性ず所有暩の怜出、取埗、反埩の組み蟌みメ゜ッド
機胜所有するオブゞェクト所有するオブゞェクトずプロトタむプチェヌンプロトタむプチェヌンのみ
怜出 + + + + + + + + + + + + + + + +
列挙可胜列挙䞍可胜列挙可胜ず列挙䞍可胜
+

propertyIsEnumerable

+ +

hasOwnProperty

+
+

hasOwnProperty – propertyIsEnumerable を䜿甚しお列挙可胜なものを陀倖するようにフィルタヌリング

+
hasOwnProperty
+
+ + + + + + + + + + + + + + + +
列挙可胜列挙䞍可胜列挙可胜ず列挙䞍可胜
远加のコヌドが必芁远加のコヌドが必芁in
+
远加のコヌドが必芁
取埗 + + + + + + + + + + + + + + + +
列挙可胜列挙䞍可胜列挙可胜ず列挙䞍可胜
+

Object.keys

+ +

getOwnPropertyNames

+ +

getOwnPropertySymbols

+
getOwnPropertyNames, getOwnPropertySymbols – propertyIsEnumerable を䜿甚しお列挙可胜なものを陀倖するようにフィルタヌリング +

getOwnPropertyNames

+ +

getOwnPropertySymbols

+
+
远加のコヌドが必芁远加のコヌドが必芁
反埩 + + + + + + + + + + + + + + + +
列挙可胜列挙䞍可胜列挙可胜ず列挙䞍可胜
+

Object.keys

+ +

getOwnPropertyNames

+ +

getOwnPropertySymbols

+
getOwnPropertyNames, getOwnPropertySymbols – propertyIsEnumerable を䜿甚しお列挙可胜なものを陀倖するようにフィルタヌリング +

getOwnPropertyNames

+ +

getOwnPropertySymbols

+
+
+ + + + + + + + + + + + + + + +
列挙可胜列挙䞍可胜列挙可胜ず列挙䞍可胜
+

for..in

+ +

(symbol を陀く)

+
远加のコヌドが必芁远加のコヌドが必芁
+
远加のコヌドが必芁
+
+ +

列挙可胜性/所有暩によるプロパティの取埗

+ +

以䞋に瀺すのは党おのケヌスで最も効率的なアルゎリズムではなく、簡朔なデモであるこずに泚意しおください。

+ + + +
var SimplePropertyRetriever = {
+    getOwnEnumerables: function(obj) {
+        return this._getPropertyNames(obj, true, false, this._enumerable);
+         // Or could use for..in filtered with hasOwnProperty or just this: 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);
+        // Or just use: 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);
+        // Or could use unfiltered for..in
+    },
+    getOwnAndPrototypeNonenumerables: function(obj) {
+        return this._getPropertyNames(obj, true, true, this._notEnumerable);
+    },
+    getOwnAndPrototypeEnumerablesAndNonenumerables: function(obj) {
+        return this._getPropertyNames(obj, true, true, this._enumerableAndNotEnumerable);
+    },
+    // Private static property checker callbacks
+    _enumerable: function(obj, prop) {
+        return obj.propertyIsEnumerable(prop);
+    },
+    _notEnumerable: function(obj, prop) {
+        return !obj.propertyIsEnumerable(prop);
+    },
+    _enumerableAndNotEnumerable: function(obj, prop) {
+        return true;
+    },
+    // Inspired by http://stackoverflow.com/a/8024294/271577
+    _getPropertyNames: function getAllPropertyNames(obj, iterateSelfBool, iteratePrototypeBool, includePropCb) {
+        var props = [];
+
+        do {
+            if (iterateSelfBool) {
+                Object.getOwnPropertyNames(obj).forEach(function(prop) {
+                    if (props.indexOf(prop) === -1 && includePropCb(obj, prop)) {
+                        props.push(prop);
+                    }
+                });
+            }
+            if (!iteratePrototypeBool) {
+                break;
+            }
+            iterateSelfBool = true;
+        } while (obj = Object.getPrototypeOf(obj));
+
+        return props;
+    }
+};
+ +

怜出テヌブル

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
infor..inobj.hasOwnPropertyobj.propertyIsEnumerableObject.keysObject.getOwnPropertyNamesObject.getOwnPropertyDescriptorsReflect.ownKeys()
列挙可胜truetruetruetruetruetruetruetrue
列挙䞍可胜truefalsetruefalsefalsetruetruetrue
Symbols キヌtruefalsetruetruefalsefalsetruetrue
継承された列挙可胜truetruefalsefalsefalsefalsefalsefalse
継承された列挙䞍可胜truefalsefalsefalsefalsefalsefalsefalse
継承された Symbols キヌtruefalsefalsefalsefalsefalsefalsefalse
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/equality_comparisons_and_sameness/index.html b/files/ja/web/javascript/equality_comparisons_and_sameness/index.html new file mode 100644 index 0000000000..036d257be1 --- /dev/null +++ b/files/ja/web/javascript/equality_comparisons_and_sameness/index.html @@ -0,0 +1,490 @@ +--- +title: 等䟡性の比范ず同䞀性 +slug: Web/JavaScript/Equality_comparisons_and_sameness +tags: + - Comparison + - Equality + - Intermediate + - JS + - JavaScript + - NaN + - SameValue + - SameValueZero + - Sameness + - 䞭玚者 + - 同倀 + - 比范 + - 等䟡性 +translation_of: Web/JavaScript/Equality_comparisons_and_sameness +--- +
{{jsSidebar("Intermediate")}}
+ +

ES2015 には、4 皮類の等䟡性アルゎリズムがありたす。

+ + + +

JavaScript には、3 皮類の倀比范挔算子がありたす。

+ + + +

どの挔算子を䜿甚するかは、どのような比范を行いたいかに䟝存したす。簡単に蚀えば、

+ + + +

なお、これらの区別はプリミティブ倀の扱いに぀いおのこずです。いずれの堎合も匕数が抂念的に䌌た構造を持぀かどうかを比范する蚳ではありたせん。プリミティブ倀ではない x および y オブゞェクトが同䞀の構造を持っおいおもオブゞェクトが異なれば、䞊蚘のいずれの圢でも false ず評䟡されたす。

+ +

=== による厳栌な等䟡性

+ +

厳栌な等䟡性は、2 ぀の倀が等しいか比范したす。比范察象の倀はどちらも、比范する前に別の倀ぞ暗黙のうちに倉換されるこずはありたせん。倀が異なる型の堎合、それらの倀は等しくないずみなしたす。倀が同じ型で数倀ではない堎合、同じ倀であれば等しいずみなしたす。最埌に、どちらの倀も数倀である堎合、どちらも NaN ではなく同じ倀である、あるいは䞀方が +0 か぀もう䞀方が -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
+
+ +

厳密な等䟡性は、たいおいの䜿い方で正しい比范になりたす。数倀以倖のあらゆる倀においお、これは「倀が自分自身ず等しい」ずいう明快な解釈を甚いたす。数倀においおは、぀の極めお特殊なケヌスを扱えるようにわずかに異なる解釈を甚いたす。぀目は浮動小数点数の 0 には正ず負の笊号付きが存圚するこずです。これは、ある皮の数孊的な解を衚すために圹立ちたすが、ほずんどの堎合は +0 ず -0 の違いを意識せず、厳栌な等䟡性ではこれらを同じ倀ずしお扱いたす。぀目は浮動小数点数には非数 NaN の抂念があるこずです、これは䟋えば正の無限倧に負の無限倧を加算するずいった䞀定の数孊的に明確ではない問題達の解を衚したす。厳栌な等䟡性では NaN を他のどの倀 (自分自身も含む) ずも等しくないものずしお扱いたす。((x !== x) が true になる唯䞀の堎合は x が NaN である堎合です。)

+ +

== による緩い等䟡性

+ +

緩い等䟡性は、䞡方の倀を共通の型に倉換した埌で、2 ぀の倀が等しいか比范したす。(片方あるいは䞡方の倉換が行われた) 倉換凊理埌に、最終的な等䟡性の比范は === ず党く同じ振る舞いです。緩い等䟡性は察称的であり、任意の倀 A および B においお、A == B ず B == A の意味は垞に同じ意味です (倉換凊理を適甚する順序を陀く)。

+ +

等䟡性比范でさたざたな型のオペランドに察しお以䞋のように振る舞いたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
オペランド B
UndefinedNullNumberStringBooleanObject
オペランド 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 === BToNumber(A) == ToPrimitive(B)
ObjectfalsefalseToPrimitive(A) == BToPrimitive(A) == BToPrimitive(A) == ToNumber(B)A === B
+ +

䞊の衚で、ToNumber(A) は、比范前に匕数を数倀に倉換しようずしたす。この振る舞いは +A (正の単項挔算子) ず同じです。ToPrimitive(A) は、A の持぀ A.toString メ゜ッド、そしお A.valueOf メ゜ッドの倉換シヌケンスを実斜するこずで、オブゞェクトの匕数をプリミティブ倀ぞ倉換しようずを詊みたす。

+ +

䌝統的にも、たた ECMAScript によれば、すべおのオブゞェクトは undefined や null に察しお倧雑把には等䟡でないずしおいたす。しかし、ほずんどのブラりザヌは、ごく䞀郚のオブゞェクト (特に、あらゆるペヌゞの document.all オブゞェクト) が、いく぀かの状況においおは倀 undefined のように振る舞うこずを認めおいたす。緩い等䟡性もそのようなものの䞀぀です、A が undefined に盞圓するオブゞェクトである堎合に限り、null == A および undefined == A は true になりたす。それ以倖のどのオブゞェクトも undefined および 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
+
+// 特殊なケヌスを陀き、どちらも false
+console.log(obj == null);
+console.log(obj == undefined);
+
+ +

緩い等䟡性を䜿甚するこずは倧䜓はよい考えでないず考える開発者もいたす。厳栌な等䟡性による比范の結果は予枬が容易であり、評䟡が必芁ずなる型匷制がないためにより早くなりたす。

+ +

Same-value 等䟡性

+ +

最埌に瀺す甚法は Same-value 等䟡性です。これは、すべおの状況で 2 ぀の倀が機胜的に同䞀かを刀断したす(この甚法はリスコフの眮換原則の実践䟋ず蚀えたす)。実䟋ずしお、むミュヌタブルなプロパティを倉化させようずした堎合を芋おみたしょう:

+ +
// Number コンストラクタに immutable な NEGATIVE_ZERO プロパティを远加
+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 は䟋倖を発生させたす。しかし、実際の倉曎が䌎わない堎合は、Object.defineProperty は䜕もしたせん。v が -0 であれば倉曎を芁求されおいないので、゚ラヌは発生したせん。しかし v が +0 であれば、Number.NEGATIVE_ZERO のむミュヌタブルな倀を倉曎しようずするこずになりたす。内郚的には、むミュヌタブルなプロパティが再定矩された堎合、新たに指定された倀ず珟圚の倀が Same-value 等䟡性によっお比范されたす。

+ +

Same-value 等䟡性は {{jsxref("Object.is")}} メ゜ッドによっお提䟛されたす。

+ +

Same-value-zero 等䟡性

+ +

Same-value 等䟡性に䌌おいたすが、+0 ず -0 は等しいずみなしたす。

+ +

仕様曞における抜象的な等䟡性、厳栌な等䟡性、Same value

+ +

ES5 では、== で実行する比范を Section 11.9.3, The Abstract Equality Algorithm で説明しおいたす。たた、=== の比范は 11.9.6, The Strict Equality Algorithm で説明しおいたす (リンク先をご芧ください。簡単か぀読みやすくなっおいたす。ヒント: 厳栌な等䟡性のアルゎリズムを始めにご芧ください)。たた ES5 の Section 9.12, The SameValue Algorithm では、JS ゚ンゞン内郚で䜿甚する SameValue に぀いお説明しおいたす。倧郚分は厳栌な等䟡性のアルゎリズムず同じですが、{{jsxref("Number")}} を扱う 11.9.6.4 および 9.12.4 が異なりたす。ES2015 では、このアルゎリズムを {{jsxref("Object.is")}} で公開するよう提案しおいたす。

+ +

二重等号ず䞉重等号に぀いお、11.9.6.1 で最初に行う型の確認を陀けば、厳栌な等䟡性のアルゎリズムは緩い等䟡性のアルゎリズムのサブセットず考えるこずができたす。これは、11.9.6.2 から 7 が 11.9.3.1.a から f に察応するためです。

+ +

等䟡性の比范を理解するためのモデル?

+ +

ES2015 より前は、二重等号ず䞉重等号に぀いお、䞀方は他方を "拡匵した" ものであるず聞いおいたかもしれたせん。䟋えば、二重等号は䞉重等号ず同じこずをすべお行うだけでなくオペランドの型倉換も行うこずから、䞉重等号を拡匵したものであるず聞いたこずがあるかもしれたせん。䟋えば、6 == "6" です (あるいは二重等号が基本圢であり、䞉重等号は 2 ぀のオペランドが同䞀の型であるこずを芁求するずいう制玄を加えおいるこずから、䞉重等号が拡匵圢であるず蚀われたかもしれたせん。どちらが理解に適したモデルであるかは、どのような芋方を遞ぶかによっお倉わりたす)。

+ +

しかし内蔵の等䟡挔算子に関するこの考え方は、その "連続䜓" に ES2015 の {{jsxref("Object.is")}} を含められるように広げるこずが可胜なモデルではありたせん。{{jsxref("Object.is")}} は二重等号より単玔に "緩い" のではなく、たた䞉重等号より "厳栌" でもなく、さらに䞡者の䞭間のどこにも眮けたせん (すなわち二重等号より厳栌でも、䞉重等号より緩くもありたせん)。同䞀性を比范した以䞋の衚から、{{jsxref("Object.is")}} が {{jsxref("NaN")}} を扱う方法が原因であるこずがわかりたす。Object.is(NaN, NaN) が false に評䟡されるのであれば、-0 ず +0 を区別するこずにより、䞉重等号より厳栌であるこずから寛容/厳栌の連続䜓に含めるこずができるこずに泚目しおください。しかし {{jsxref("NaN")}} の扱いは、これが虚停であるこずを衚したす。残念ながら、{{jsxref("Object.is")}} は等䟡挔算子に関する寛容さや厳栌さではなく、単玔に固有の特性の芳点から考えなければなりたせん。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
同䞀性の比范衚
xy=====Object.isSameValueZero
undefinedundefinedtruetruetruetrue
nullnulltruetruetruetrue
truetruetruetruetruetrue
falsefalsetruetruetruetrue
'foo''foo'truetruetruetrue
00truetruetruetrue
+0-0truetruefalsetrue
+00truetruetruetrue
-00truetruefalsetrue
0falsetruefalsefalsefalse
""falsetruefalsefalsefalse
""0truefalsefalsefalse
'0'0truefalsefalsefalse
'17'17truefalsefalsefalse
[1, 2]'1,2'truefalsefalsefalse
new String('foo')'foo'truefalsefalsefalse
nullundefinedtruefalsefalsefalse
nullfalsefalsefalsefalsefalse
undefinedfalsefalsefalsefalsefalse
{ foo: 'bar' }{ foo: 'bar' }falsefalsefalsefalse
new String('foo')new String('foo')falsefalsefalsefalse
0nullfalsefalsefalsefalse
0NaNfalsefalsefalsefalse
'foo'NaNfalsefalsefalsefalse
NaNNaNfalsefalsetruetrue
+ +

{{jsxref("Object.is")}} ず䞉重等号の䜿いどころ

+ +

䞀般的に、{{jsxref("Object.is")}} のれロに察する特別な動䜜が関心の察象になりえるず思われるのは、ある皮のメタプログラミング方匏に則る時、特にプロパティ蚘述子に関しお {{jsxref("Object.defineProperty")}} の特城の䞀郚を再珟したい時に限られたす。このような芁件が必芁なければ、{{jsxref("Object.is")}} ではなく、代わりに === を䜿甚しおはいかがでしょう。2 ぀の {{jsxref("NaN")}} 倀を比范した結果が true になるこずが必芁な堎合であっおも、通垞は、{{jsxref("NaN")}} をチェックしお特別扱いする方が (前バヌゞョンの ECMAScript からは {{jsxref("isNaN")}} メ゜ッドを䜿えたす) 、比范凊理䞭に珟れた党おのれロに぀いおその笊号が呚囲の凊理からどう圱響されるのか悩むよりも簡単です。

+ +

すべおを網矅しおはいたせんが、-0 ず +0 の区別が発生する可胜性がある内蔵メ゜ッドや挔算子を以䞋に瀺したす。コヌド䞭ではこれらを考慮しお䞋さい:

+ +
+
- (単項吊定挔算子)
+
+
let stoppingForce = obj.mass * -obj.velocity;
+ +

obj.velocity が 0 である (あるいは蚈算結果が 0 になる) ずき、そこで -0 が生成されお stoppingForce に䌝播したす。

+
+
+ +
+
{{jsxref("Math.atan2")}}
+
{{jsxref("Math.ceil")}}
+
{{jsxref("Math.pow")}}
+
{{jsxref("Math.round")}}
+
匕数に -0 が存圚しなくおも、堎合によっおはこれらのメ゜ッドの戻り倀ずしお -0 が匏に取り蟌たれる可胜性がありたす。䟋えば、負の倀の环乗で {{jsxref("Infinity", "-Infinity")}} が発生するように {{jsxref("Math.pow")}} を䜿甚したずき、奇数の指数は -0 に評䟡されたす。それぞれのメ゜ッドのドキュメントを確認しおください。
+
+ +
+
{{jsxref("Math.floor")}}
+
{{jsxref("Math.max")}}
+
{{jsxref("Math.min")}}
+
{{jsxref("Math.sin")}}
+
{{jsxref("Math.sqrt")}}
+
{{jsxref("Math.tan")}}
+
匕数のひず぀が -0 である堎合に、これらのメ゜ッドから -0 を戻り倀ずしお埗る可胜性がありたす。䟋えば、Math.min(-0, +0) は -0 になりたす。それぞれのメ゜ッドのドキュメントを確認しおください。
+
+ +
+
~
+
<<
+
>>
+
これらの挔算子は、内郚で ToInt32 アルゎリズムを䜿甚したす。内郚の 32 ビット敎数型は 0 の衚珟が 1 皮類しかないため、逆の挔算を行った埌に -0 は戻らないでしょう。䟋えば Object.is(~~(-0), -0) や Object.is(-0 << 2 >> 2, -0) は、false になりたす。
+
+ +

れロの笊号を考慮しおいない堎合に、{{jsxref("Object.is")}} に頌るこずは危険でしょう。もちろん -0 ず +0 を区別する意図があれば、これはたさに望むこずです。

+ +

泚意: {{jsxref("Object.is")}} ず NaN

+ +

{{jsxref("Object.is")}} の仕様曞では、すべおの {{jsxref("NaN")}} のむンスタンスを同じオブゞェクトずしお扱っおいたす。しかし、型付き配列が利甚でき、むンスタンスを区別するこずができるので、次の䟋のようにすべおのコンテキストで同じ動䜜をするずは限りたせん。

+ +
var f2b = x => new Uint8Array(new Float64Array([x]).buffer);
+var b2f = x => new Float64Array(x.buffer)[0];
+var n = f2b(NaN);
+n[0] = 1;
+var nan2 = b2f(n);
+nan2;
+// > NaN
+Object.is(nan2, NaN);
+// > true
+f2b(NaN);
+// > Uint8Array(8) [0, 0, 0, 0, 0, 0, 248,127)
+f2b(nan2);
+// > Uint8Array(8) [1, 0, 0, 0, 0, 0, 248,127)
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/eventloop/index.html b/files/ja/web/javascript/eventloop/index.html new file mode 100644 index 0000000000..4af2e87fba --- /dev/null +++ b/files/ja/web/javascript/eventloop/index.html @@ -0,0 +1,78 @@ +--- +title: 䞊行モデルずむベントルヌプ +slug: Web/JavaScript/EventLoop +tags: + - Advanced + - JavaScript +translation_of: Web/JavaScript/EventLoop +--- +
{{JsSidebar("Advanced")}}
+ +

JavaScriptは、"event loop"に基づく同時実行モデルを持ちたす。このモデルはC蚀語やJavaのような他の蚀語のモデルずかなり異なっおいたす。

+ +

ランタむムの抂芁

+ +

埌続のセクションでは、理論モデルを説明したす。珟代のJavaScript゚ンゞンは、蚘茉されたセマンティクスに埓っお実装され、たた高床に最適化されおいたす。

+ +

芖芚衚瀺

+ +

Stack, heap, queue

+ +

スタック

+ +

関数呌び出しはフレヌムのスタックを圢成したす。

+ +
function foo(b){
+  var a = 10;
+  return a + b + 11;
+}
+
+function bar(x){
+  var y = 3;
+  return foo(x * y);
+}
+
+console.log(bar(7)); // returns 42
+
+ +

barを呌び出すず、barの匕数ずロヌカル倉数を含んだ最初のフレヌムが生成されたす。barがfooを呌び出すず、fooの匕数ずロヌカル倉数を含んだ番目のフレヌムが生成され、最初のフレヌムの䞊にプッシュされたす。fooから返るず、先頭のフレヌム芁玠はスタックからポップされたす(barのコヌルフレヌムのみが残りたす)。barから返るずきスタックは空になりたす。

+ +

ヒヌプ

+ +

オブゞェクトはヒヌプに割り圓おられおいたす。ヒヌプは、メモリの倧芏暡で倧郚分は構造化されおいない領域を意味する名前です。

+ +

キュヌ

+ +

JavaScriptランタむムはメッセヌゞキュヌを含んでいたす。メッセヌゞキュヌは、凊理されるメッセヌゞのリストです。各メッセヌゞに関数を関連付けられおいたす。スタックが空のずき、メッセヌゞがキュヌから取り出され、凊理されたす。その凊理は、関連する関数の呌び出し(ず最初のスタックフレヌムの䜜成)で構成されおいたす。スタックが再床空になるず、メッセヌゞ凊理は終了したす。

+ +

むベントルヌプ

+ +

event loopずいう名前は、それが䞀般的にどのように実装されたかに埓っお付けられたした。これは通垞、次のものに䌌おいたす。

+ +
while(queue.waitForMessage()){
+  queue.processNextMessage();
+}
+ +

queue.waitForMessageはもしその時点でメッセヌゞが存圚しないのであれば、同期的にメッセヌゞが到着するのを埅ちたす。

+ +

"Run-to-completion"

+ +

その他のメッセヌゞが凊理される前に、各メッセヌゞは完党に凊理されおいたす。 関数が実行されるたびに、それが暪取りするこずはできず、他のコヌドが実行される前に、完党に実行されたすおよび関数が操䜜するデヌタを倉曎するこずができるずいう事実を含め、プログラムに぀いお掚論するずきにいく぀かの玠晎らしい特性を提䟛しおいたす。䟋えば、これはCずは異なりたす。ずいうのは、関数はスレッドで実行されおいる堎合、それは別のスレッドでいく぀かの他のコヌドを実行するには、任意の時点で停止するこずができたす。

+ +

このモデルの欠点は、メッセヌゞが完了するたでに時間がかかりすぎる堎合は、Webアプリケヌションはクリックやスクロヌルのようなナヌザむンタラクションを凊理するこずができないこずです。ブラりザは"スクリプトは実行に非垞に時間がかかる"ダむアログを甚いおこれを軜枛したす。远埓するお勧めは、メッセヌゞを短い凊理にし、可胜な堎合には、いく぀かのメッセヌゞに䞀぀のメッセヌゞを切り瞮めるこずです。

+ +

メッセヌゞの远加

+ +

Webブラりザでは、メッセヌゞは、むベントが発生し、それに接続されおいるむベントリスナヌがある任意の時間に远加されたす。むベントリスナヌがない堎合、むベントは倱われたす。だから、他のむベントず同様に、クリックむベントハンドラを持぀芁玠をクリックするず、メッセヌゞが远加されたす。

+ +

setTimeoutを呌び出すず、2番目の匕数ずしお枡された時間が経過した埌、メッセヌゞがキュヌに远加されたす。キュヌに他のメッセヌゞがない堎合、メッセヌゞはすぐに凊理されたす。しかしながら、メッセヌゞがある堎合、setTimeoutメッセヌゞは他のメッセヌゞを凊理するために埅機する必芁がありたす。そのため第二匕数は、保蚌時間ではなく、最小の時間を瀺しおいたす。

+ +

䞀緒に通信するいく぀かのランタむム

+ +

りェブワヌカヌやクロスオリゞンのiframeは、独自のスタック、ヒヌプ、およびメッセヌゞキュヌがありたす。二぀の異なるランタむムのみpostMessageメ゜ッドによっお送信メッセヌゞを介しお通信するこずができたす。他のランタむムがmessageむベントをリッスンする堎合、このメ゜ッドは他のランタむムにメッセヌゞを远加したす。

+ +

ブロッキング䞍可

+ +

むベントルヌプモデルの非垞に興味深い特性は、他の倚くの蚀語ずは異なり、JavaScriptは決しおブロックしないこずです。I/Oの取り扱いは、通垞、むベントずコヌルバックを介しお行われたす。そのため、アプリケヌションはIndexedDBのク゚リやXHRリク゚ストが返るのを埅っおいる時も、ナヌザ入力のような他のこずを凊理するこずができたす。

+ +

alertか同期XHRのようにレガシヌな䟋倖が存圚したすが、それらを避けるこずは良い慣習ずされおいたす。䟋倖に察する䟋倖は存圚するこずに気を぀けおください(ず蚀っおも、たいおいは他の䜕かずいうよりはむしろ実装のバグですが)。

diff --git a/files/ja/web/javascript/getting_started/index.html b/files/ja/web/javascript/getting_started/index.html new file mode 100644 index 0000000000..a787ee2083 --- /dev/null +++ b/files/ja/web/javascript/getting_started/index.html @@ -0,0 +1,302 @@ +--- +title: Getting Started (Javascript Tutorial) +slug: Web/JavaScript/Getting_Started +translation_of: Learn/Getting_started_with_the_web/JavaScript_basics +--- +

Why JavaScript?

+

JavaScript is a powerful, complicated, and often misunderstood computer language. It enables the rapid development of applications in which users can enter data and view results easily.

+

The primary advantage to JavaScript, which is also known as ECMAScript, centers around the Web browser, thus having the ability to produce the same results on all platforms supported by the browser. The examples on this page, just like Google Maps, run on Linux, Windows, and Mac OS. With the recent growth of numerous JavaScript libraries it is now easier to navigate a document, select DOM elements, create animations, handle events, and develop Ajax applications. Unlike the hype around other technologies pushed by various proprietary interests, JavaScript is really the only cross-platform, client-side programming language that is both free and universally adopted.

+

What you should already know

+

JavaScript is a very easy language to start programming with. All you need is a text editor and a Web browser to get started.

+

There are many other technologies that can be integrated into and developed along with JavaScript that are beyond the scope of this document. Don't expect to make a whole application like Google Maps all on your first day!

+

Getting started

+

Getting started with JavaScript is very easy. You don't have to have complicated development programs installed. You don't have to know how to use a shell, program Make, or use a compiler. JavaScript is interpreted by your Web browser. All you have to do is save your program as a text file and then open it up in your Web browser. That's it!

+

JavaScript is a great programming language for introductory computer languages. It allows instant feedback to the new student and teaches them about tools they will likely find useful in their real life. This is in stark contrast to C, C++, and Java which are really only useful for dedicated software developers.

+

Browser compatibility issues

+

There are variations between what functionality is available in the different browsers. Mozilla, Microsoft IE, Apple Safari, and Opera fluctuate in behavior. We intend on documenting these variations. You can mitigate these issues by using the various cross-platform JavaScript APIs that are available. These APIs provide common functionality and hide these browser fluctuations from you.

+

How to try the examples

+

The examples below have some sample code. There are many ways to try these examples out. If you already have your own website, then you should be able to just save these examples as new Web pages on your website.

+

If you do not have your own website, you can save these examples as files on your computer and open them up with the Web browser you are using now. JavaScript is a very easy language to use for beginning programmers for this reason. You don't need a compiler or a development environment; you and your browser are all you need to get started!

+

Example: Catching a mouse click

+

The specifics of event handling (event types, handler registration, propagation, etc.) are too extensive to be fully covered in this simple example. However, this example cannot demonstrate catching a mouse click without delving a little into the JavaScript event system. Just keep in mind that this example will only graze the full details about JavaScript events and that if you wish to go beyond the basic capabilities described here, read more about the JavaScript event system.

+

'Mouse' events are a subset of the total events issued by a Web browser in response to user actions. The following is a list of the events emitted in response to a user's mouse action:

+ +

Note that in the latest versions of HTML, the inline event handlers, i.e. the ones added as tag attributes, are expected to be all lowercase and that event handlers in script are always all lowercase.

+

The simplest method for capturing these events, to register event handlers - using HTML - is to specify the individual events as attributes for your element. Example:

+
  <span onclick="alert('Hello World!');">Click Here</span>
+

The JavaScript code you wish to execute can be inlined as the attribute value or you can call a function which has been defined in a <script> block within the HTML page:

+
<script type="text/javascript">
+  function clickHandler () {
+     alert ("Hello, World!");
+  }
+</script>
+<span onclick="clickHandler();">Click Here</span>
+

Additionally, the event object which is issued can be captured and referenced, providing the developer with access to specifics about the event such as which object received the event, the event's type, and which mouse button was clicked. Using the inline example again:

+
<script type="text/javascript">
+  function clickHandler(event) {
+    var eType = event.type;
+    /* the following is for compatibility */
+    /* Moz populates the target property of the event object */
+    /* IE populates the srcElement property */
+    var eTarget = event.target || event.srcElement;
+
+    alert( "Captured Event (type=" + eType + ", target=" + eTarget );
+  }
+</script>
+<span onclick="clickHandler(event);">Click Here</span>
+

In addition to registering to receive events in your HTML, you can likewise set the same attributes of any HTMLElement objects generated by your JavaScript. The example below instantiates a span object, appends it to the page body, and registers the span object to receive mouse-over, mouse-out, mouse-down, and mouse-up events.

+
<body></body>
+<script type="text/javascript">
+  function mouseeventHandler(event) {
+    /* The following is for compatibility */
+    /* IE does NOT by default pass the event object */
+    /* obtain a ref to the event if one was not given */
+    if (!event) event = window.event;
+
+    /* obtain event type and target as earlier */
+    var eType = event.type;
+    var eTarget = event.target || event.srcElement;
+    alert(eType +' event on element with id: '+ eTarget.id);
+  }
+
+ function onloadHandler () {
+   /* obtain a ref to the 'body' element of the page */
+   var body = document.body;
+   /* create a span element to be clicked */
+   var span = document.createElement('span');
+   span.id = 'ExampleSpan';
+   span.appendChild(document.createTextNode ('Click Here!'));
+
+   /* register the span object to receive specific mouse events -
+      notice the lowercase of the events but the free choice in the names of the handlers you replace them with.
+   */
+   span.onmousedown = mouseeventHandler;
+   span.onmouseup = mouseeventHandler;
+   span.onmouseover = mouseeventHandler;
+   span.onmouseout = mouseeventHandler;
+
+   /* display the span on the page */
+   body.appendChild(span);
+}
+
+window.onload = onloadHandler; // since we replace the handler, we do NOT have () after the function name
+</script>
+

Example: Catching a keyboard event

+

Similar to the "Catching a mouse event" example above, catching a keyboard event relies on exploring the JavaScript event system. Keyboard events are fired whenever any key is used on the keyboard.

+

The list of available keyboard events emitted in response to a keyboard action is considerably smaller than those available for mouse:

+ +

In a keypress event, the Unicode value of the key pressed is stored in either the keyCode or charCode property, never both. If the key pressed generates a character (e.g., 'a'), charCode is set to the code of that character, respecting the letter case (i.e., charCode takes into account whether the shift key is held down). Otherwise, the code of the pressed key is stored in keyCode.

+

The simplest method for capturing keyboard events is again to register event handlers within the HTML, specifying the individual events as attributes for your element. Example:

+
  <input type="text" onkeypress="alert ('Hello World!');" />
+
+

As with mouse events, the JavaScript code you wish to execute can be inlined as the attribute value or you can call a function which has been defined in a <script> block within the HTML page:

+
<script type="text/javascript">
+  function keypressHandler() {
+    alert ("Hello, World!");
+  }
+</script>
+
+<input onkeypress="keypressHandler();" />
+
+

Capturing the event and referencing the target (i.e., the actual key that was pressed) is achieved in a similar way to mouse events:

+
<script type="text/javascript">
+  function keypressHandler(evt) {
+      var eType = evt.type; // Will return "keypress" as the event type
+      /* here we again need to use a cross browser method
+         mozilla based browsers return which and others keyCode.
+         The Conditional operator or ternary is a good choice */
+      var keyCode = evt.which?evt.which:evt.keyCode;
+      var eCode = 'keyCode is ' + keyCode;
+      var eChar = 'charCode is ' + String.fromCharCode(keyCode); // or evt.charCode
+      alert ("Captured Event (type=" + eType + ", key Unicode value=" + eCode + ", ASCII value=" + eChar + ")");
+   }
+</script>
+<input onkeypress="keypressHandler(event);" />
+

Capturing any key event from the page can be done by registering the event at the document level and handling it in a function:

+
<script type="text/javascript">
+  document.onkeypress = keypressHandler(event);
+  document.onkeydown = keypressHandle(event);
+  document.onkeyup =keypressHandle(event)
+
+</script>
+

Here is a complete example that shows key event handling:

+
<!DOCTYPE html>
+<html>
+<head>
+  <script>
+    var metaChar = false;
+    var exampleKey = 16;
+    function keyEvent(event) {
+      var key = event.keyCode || event.which; // alternative to ternary - if there is no keyCode, use which
+      var keychar = String.fromCharCode(key);
+      if (key==exampleKey) { metaChar = true; }
+      if (key!=exampleKey) {
+         if (metaChar) {
+            alert("Combination of metaKey + " + keychar)
+            metaChar = false;
+         } else { alert("Key pressed " + key); }
+      }
+    }
+    function metaKeyUp (event) {
+      var key = event.keyCode || event.which;
+      if (key==exampleKey) { metaChar = false; }
+    }
+  </script>
+</head>
+<body onkeydown="keyEvent(event)" onkeyup="metaKeyUp(event)">
+    Try pressing any key!
+</body>
+</html>
+

Browser bugs and quirks

+

The two properties made available through the key events are keyCode and charCode. In simple terms, keyCode refers to the actual keyboard key that was pressed by the user, while charCode is intended to return that key's ASCII value. These two values may not necessarily be the same; for instance, a lower case 'a' and an upper case 'A' have the same keyCode, because the user presses the same key, but a different charCode because the resulting character is different.

+

The way in which browsers interpret the charCode is not a consistently-applied process. For example, Internet Explorer and Opera do not support charCode. However, they give the character information in keyCode, but only onkeypress. Onkeydown and onkeyup keyCode contain key information. Firefox uses a different word, "which", to distinguish the character.

+

Refer to the Mozilla Documentation on Keyboard Events for a further treatment of keyboard events.

+

{{ draft() }}

+

Example: Dragging images around

+

The following example allows moving the image of Firefox around the page:

+
<!DOCTYPE html>
+<html>
+<head>
+<style type='text/css'>
+img { position: absolute; }
+</style>
+
+<script type='text/javascript'>
+window.onload = function() {
+
+  movMeId = document.getElementById("ImgMov");
+  movMeId.style.top = "80px";
+  movMeId.style.left = "80px";
+
+  document.onmousedown = coordinates;
+  document.onmouseup = mouseup;
+
+  function coordinates(e) {
+    if (e == null) { e = window.event;}
+
+    // e.srcElement holds the target element in IE, whereas e.target holds the target element in Firefox
+    // Both properties return the HTML element the event took place on.
+
+    var sender = (typeof( window.event ) != "undefined" ) ? e.srcElement : e.target;
+
+    if (sender.id=="ImgMov") {
+      mouseover = true;
+      pleft = parseInt(movMeId.style.left);
+      ptop = parseInt(movMeId.style.top);
+      xcoor = e.clientX;
+      ycoor = e.clientY;
+      document.onmousemove = moveImage;
+      return false;
+    } else {
+        return false;
+    }
+  }
+
+  function moveImage(e) {
+    if (e == null) { e = window.event; }
+    movMeId.style.left = pleft+e.clientX-xcoor+"px";
+    movMeId.style.top = ptop+e.clientY-ycoor+"px";
+    return false;
+  }
+
+  function mouseup(e) {
+    document.onmousemove = null;
+  }
+}
+</script>
+</head>
+
+<body>
+  <img id="ImgMov" src="http://placehold.it/100x100&text=JS" width="64" height="64" />
+  <p>Drag and drop around the image in this page.</p>
+</body>
+
+</html>
+

Example: Resizing things

+
+ Example of resizing an image (the actual image is not resized, only the image's rendering.) +
  <!DOCTYPE html>
+  <html>
+    <head>
+      <style>
+        #resizeImage {
+          margin-left: 100px;
+        }
+      </style>
+      <script>
+      window.onload = function() {
+
+        var resizeId = document.getElementById("resizeImage");
+        var resizeStartCoordsX,
+            resizeStartCoordsY,
+            resizeEndCoordsX,
+            resizeEndCoordsY;
+
+        var resizeEndCoords;
+        var resizing = false;
+
+        document.onmousedown = coordinatesMousedown;
+        document.onmouseup = coordinatesMouseup;
+
+        function coordinatesMousedown(e) {
+          if (e == null) {
+            e = window.event;
+          }
+
+          var element = (typeof( window.event ) != 'undefined' ) ? e.srcElement : e.target;
+
+          if (element.id == "resizeImage") {
+            resizing = true;
+            resizeStartCoordsX = e.clientX;
+            resizeStartCoordsY = e.clientY;
+          }
+          return false;
+        }
+
+        function coordinatesMouseup(e) {
+          if (e == null) {
+            e = window.event;
+          }
+
+          if (resizing === true) {
+            var currentImageWidth = parseInt(resizeId.width);
+            var currentImageHeight = parseInt(resizeId.height);
+
+            resizeEndCoordsX = e.clientX;
+            resizeEndCoordsY = e.clientY;
+
+            resizeId.style.height = currentImageHeight - (resizeStartCoordsY - resizeEndCoordsY) + 'px';
+            resizeId.style.width = currentImageWidth - (resizeStartCoordsX - resizeEndCoordsX) + 'px';
+
+            resizing = false;
+          }
+          return false;
+        }
+      }
+      </script>
+    </head>
+
+    <body>
+      <img id="resizeImage" src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Mozilla_Firefox_3.5_logo_256.png"
+width="64" height="64" />
+      <p>Click on the image and drag for resizing.</p>
+    </body>
+
+  </html>
+
+

Example: Drawing Lines

+

{{todo("Need Content. Or, remove headline")}}

diff --git a/files/ja/web/javascript/guide/class-based_vs._prototype-based_languages/index.html b/files/ja/web/javascript/guide/class-based_vs._prototype-based_languages/index.html new file mode 100644 index 0000000000..800f222ea4 --- /dev/null +++ b/files/ja/web/javascript/guide/class-based_vs._prototype-based_languages/index.html @@ -0,0 +1,25 @@ +--- +title: Class-Based vs. Prototype-Based Languages +slug: Web/JavaScript/Guide/Class-Based_vs._Prototype-Based_Languages +--- +

クラスベヌス蚀語ずプロトタむプベヌス蚀語

+

Java や C++ ずいったクラスベヌスのオブゞェクト指向蚀語はクラスずむンスタンスずいう 2 ぀の異なる実䜓があるずいう抂念に基づいおいたす。

+ +

JavaScript のようなプロトタむプベヌス蚀語はこの区別がありたせん。単にオブゞェクトがあるだけです。プロトタむプベヌス蚀語には原型的なオブゞェクトずいう抂念がありたす。このオブゞェクトは新しいオブゞェクトの初期プロパティを取埗する元になるテンプレヌトずしお䜿甚されたす。どのオブゞェクトもそれ独自のプロパティを指定できたす。オブゞェクト䜜成時にも実行時にも可胜です。さらに、どのオブゞェクトも別のオブゞェクトに察するプロトタむプずしお関連付けるこずができたす。2 ぀目のオブゞェクトが 1 ぀目のオブゞェクトのプロトタむプを共有するずいうこずもできたす。

+

クラスの定矩

+

クラスベヌス蚀語ではクラス定矩ごずにクラスを定矩したす。定矩では特殊なメ゜ッドを指定しおそのクラスのむンスタンスを䜜成するこずができたす。そのようなメ゜ッドはコンストラクタず呌びたす。コンストラクタメ゜ッドはむンスタンスのプロパティに察する初期倀を指定するこずができたす。たた、䜜成時に他の適圓な凊理を実行するこずもできたす。new 挔算子をコンストラクタメ゜ッドず䞀緒に甚いるこずでクラスのむンスタンスを䜜成できたす。

+

JavaScript は同様のモデルに埓っおいたすが、コンストラクタず別になっおいるクラス定矩がありたせん。その代わりに、プロパティず倀からなる特定の初期的なセットを持぀オブゞェクトを䜜成するコンストラクタ関数を定矩したす。どの JavaScript 関数もコンストラクタずしお䜿甚できたす。new 挔算子をコンストラクタ関数ずずもに䜿甚するこずで新しいオブゞェクトを䜜成したす。

+

サブクラスず継承

+

クラスベヌス蚀語ではクラス定矩を通じおクラスの階局を䜜りたす。クラス定矩では新しいクラスがある既存のクラスのサブクラスになるように指定するこずができたす。サブクラスはスヌパヌクラスの党プロパティを継承したす。さらに新しくプロパティを远加したり継承したものを倉曎するこずもできたす。䟋えば、Employee クラスが name および dept プロパティのみを含んでおり、Manager は reports プロパティを远加する Employee のサブクラスであるずしたす。この堎合、Manager クラスのむンスタンスは name、dept、reports ずいう 3 ぀のプロパティをすべお持぀こずになりたす。

+

JavaScript では、原型的なオブゞェクトをどのコンストラクタ関数にも結び぀けるこずができるようにしお継承を実装しおいたす。そのため、党く同じような Employee ず Manager の䟋を䜜成するこずができたすが、䜿甚する甚語が若干異なりたす。たず、Employee コンストラクタ関数を定矩したす。これは name および dept プロパティを指定したす。次に Manager コンストラクタ関数を定矩したす。これは reports プロパティを指定したす。最埌に新しい Employee オブゞェクトを Manager コンストラクタ関数に察するプロトタむプずしお代入したす。そしお新しい Manager を䜜成するず、このオブゞェクトは Employee オブゞェクトから name および dept プロパティを継承したす。

+

プロパティの远加ず削陀

+

クラスベヌス蚀語では䞀般的にクラスをコンパむル時に生成し、コンパむル時たたは実行時にクラスのむンスタンスを䜜成したす。クラス定矩埌にそのクラスのプロパティの数や型を倉曎するこずはできたせん。しかし、JavaScript ではどんなオブゞェクトでも実行時にプロパティを远加したり削陀したりするこずができたす。あるオブゞェクトのセットでプロトタむプずしお䜿甚されおいるオブゞェクトにプロパティを远加するず、そのプロトタむプの䜿甚元であるオブゞェクトにも新しいプロパティが远加されたす。

+

違いの抂芁

+

次の衚でこれらの違いをいく぀か短くたずめおみたす。この章の残りで、JavaScript のコンストラクタずプロトタむプを甚いおオブゞェクト階局を䜜成するこずに぀いおの詳现を説明しおいきたす。たた、この方法が Java ではどう倉わるかずいう比范もしたす。

+ +
クラスベヌス (Java) プロトタむプベヌス (JavaScript)
クラスずむンスタンスは異なる実䜓である。 すべおのオブゞェクトはむンスタンスである。
クラス定矩を甚いおクラスを定矩する。たた、コンストラクタメ゜ッドを甚いおクラスをむンスタンス化する。 コンストラクタ関数を甚いおオブゞェクトのセットを定矩し、䜜成する。
new 挔算子を甚いお単䞀のオブゞェクトを䜜成する。 同じ。
既存のクラスのサブクラスを定矩するクラス定矩を甚いおオブゞェクト階局を構築する。 コンストラクタ関数に結び぀けられたプロトタむプずしおオブゞェクトを代入するこずでオブゞェクト階局を構築する。
クラスチェヌンに埓っおプロパティを継承する。 プロトタむプチェヌンに埓っおプロパティを継承する。
クラス定矩がクラスの党むンスタンスの党プロパティを指定する。実行時に動的にプロパティを远加するこずはできない。 コンストラクタ関数たたはプロトタむプがプロパティの初期セットを指定する。個々のオブゞェクトやオブゞェクトの党䜓のセットに動的にプロパティを远加したり、それらからプロパティを陀去したりできる。
+
+

{{ PreviousNext("Core_JavaScript_1.5_Guide:Predefined_Core_Objects:String_Object", "Core_JavaScript_1.5_Guide:The_Employee_Example") }}

+
+

{{ languages( { "zh-tw": "zh_tw/Core_JavaScript_1.5_教孞/以類別為基瀎的語蚀_vs._以原型為基瀎的語蚀", "en": "en/Core_JavaScript_1.5_Guide/Class-Based_vs._Prototype-Based_Languages", "es": "es/Gu\u00eda_JavaScript_1.5/Lenguajes_basados_en_clases_frente_a_basados_en_prototipos", "fr": "fr/Guide_JavaScript_1.5/Langages_bas\u00e9s_sur_les_classes_et_langages_bas\u00e9s_sur_les_prototypes", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/J\u0119zyki_oparte_na_klasach_vs._oparte_na_prototypach", "zh-cn": "cn/Core_JavaScript_1.5_Guide/Class-Based_vs._Prototype-Based_Languages" } ) }}

diff --git a/files/ja/web/javascript/guide/control_flow_and_error_handling/index.html b/files/ja/web/javascript/guide/control_flow_and_error_handling/index.html new file mode 100644 index 0000000000..f9c13b952c --- /dev/null +++ b/files/ja/web/javascript/guide/control_flow_and_error_handling/index.html @@ -0,0 +1,457 @@ +--- +title: 制埡フロヌず゚ラヌ凊理 +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 +--- +

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

+ +

JavaScript は、特に制埡フロヌ文に぀いおはコンパクトな文のセットに察応しおおり、アプリケヌションに倚様な察話的機胜を組み蟌むために利甚するこずができたす。この節ではこれらの文の抂芁を説明したす。

+ +

JavaScript リファレンスには、この章で玹介する文に぀いおの完党な詳现が茉っおいたす。たた、JavaScript のコヌドではセミコロン (;) 文字で文を区切りたす。

+ +

あらゆる JavaScript の匏は、文でもありたす。匏に関する詳现に぀いおは匏ず挔算子を参照ください。

+ +

ブロック文

+ +

最も基本的な文はブロック文で、文のグルヌプ化に䜿いたす。ブロックは、䞀組の波括匧で区切られたす。

+ +
{
+  statement_1;
+  statement_2;
+  ⋮
+  statement_n;
+}
+
+ +

䟋

+ +

ブロック文は䞀般に制埡フロヌ文 (if, for, while) で甚いられたす。

+ +
while (x < 10) {
+  x++;
+}
+
+ +

ここでは { x++; } がブロック文ずなりたす。

+ +
+

重芁: ECMAScript 2015 (6th edition) より前の JavaScript にはブロックスコヌプがありたせん。叀い JavaScript では、ブロック内で導入された倉数のスコヌプは、そのブロックがある関数やスクリプトになり、それらの倉数を蚭定した圱響は、そのブロックを越えお持続したす。぀たり、ブロック文はスコヌプを定矩しないずいうこずです。

+ +

「単独の」ブロックも正しい構文ですが、C や Java のブロックで提䟛されるものずは異なる結果をもたらしたす。䟋えば、

+ +
var x = 1;
+{
+  var x = 2;
+}
+console.log(x); // 2 を出力
+
+ +

ここで 2 が出力されるのは、ブロック内の var x 文がブロックの前の var x 文ず同じスコヌプ内にあるためです。(C や Java では、同様のコヌドで 1 が出力されたす。)

+ +

ECMAScript 2015 からは、let 文や const による倉数宣蚀はブロックスコヌプずなりたす。詳しくは {{jsxref("Statements/let", "let")}} 文や {{jsxref("Statements/const", "const")}} のリファレンスペヌゞをご芧ください。

+
+ +

条件文

+ +

条件文は、指定した条件が true の堎合に実行する呜什の集たりです。JavaScript は if...else ず switch の 2 ぀の条件文に察応しおいたす。

+ +

if...else 文

+ +

if を䜿甚するず、論理条件が true の堎合に文を実行するこずができたす。任意の else 節を䜿甚するず、条件が false の堎合にも文を実行するこずができたす。

+ +

if 文は次のように䜿甚したす。

+ +
if (condition) {
+  statement_1;
+} else {
+  statement_2;
+}
+ +

条件は、true たたは false ず評䟡される任意の匏にするこずができたす。true ず false の評䟡の説明に぀いおは、Boolean を参照しおください。

+ +

条件が true ず評䟡された堎合、statement_1 が実行されたす。そうでなければ、statement_2 が実行されたす。statement_1 ず statement_2 は、入れ子になった if 文も含めお、任意の文にするこずができたす。

+ +

以䞋のように、else if を䜿甚した文を組み合わせお、耇数の条件を順番にテストするこずもできたす。

+ +
if (condition_1) {
+  statement_1;
+} else if (condition_2) {
+  statement_2;
+} else if (condition_n) {
+  statement_n;
+} else {
+  statement_last;
+}
+
+ +

耇数の条件がある堎合、true ず評䟡された最初の論理条件のみが実行されたす。耇数の文を実行するには、ブロックステヌトメント ({ 
 }) 内にグルヌプ化したす。

+ +

ベストプラクティス

+ +

䞀般的に、垞にブロック文を䜿甚するのが優れた方法です。特に if 文を入れ子にしたコヌドで有効です。

+ +
if (condition) {
+  statement_1_runs_if_condition_is_true;
+  statement_2_runs_if_condition_is_true;
+} else {
+  statement_3_runs_if_condition_is_false;
+  statement_4_runs_if_condition_is_false;
+}
+
+ +

条件匏内で単玔な代入を行わないでください。コヌドを䞀芋した際に、代入を等倀条件ず芋間違えるおそれがあるためです。

+ +

䟋えば、このようにはコヌドを曞かないでください。

+ +
// "x == y" ず読み間違えるおそれがある。
+if (x = y) {
+  /* ここに文が来る */
+}
+
+ +

条件匏で代入を行う必芁がある堎合、䞀般的な方法は次のように、代入匏をさらに䞞括匧でくくるこずです。

+ +
if ((x = y)) {
+  /* ここに文が来る */
+}
+
+ +

false ず評䟡される倀

+ +

以䞋の倀は false ず評䟡されたす (たた、{{Glossary("Falsy")}} な倀ず呌ばれおいたす)。

+ + + +

䞊蚘以倖の—オブゞェクトを含む—すべおの倀は、条件文に枡されるず true ず評䟡されたす。

+ +
+

泚意: プリミティブな真停倀の true ず false を、{{jsxref("Boolean")}} オブゞェクトの true や false ずいう倀ず混同しないでください。

+ +

䟋:

+ +
var b = new Boolean(false);
+if (b)         // この条件は true に評䟡される
+if (b == true) // この条件は false に評䟡される
+
+
+ +

䟋

+ +

次の䟋で、関数 checkData は Text オブゞェクトに含たれおいる文字数が 3 である堎合に true を返し、そうでない堎合はアラヌトを衚瀺しお false を返したす。

+ +
function checkData() {
+  if (document.form1.threeChar.value.length == 3) {
+    return true;
+  } else {
+    alert(
+        'Enter exactly three characters. ' +
+        `${document.form1.threeChar.value} is not valid.`);
+    return false;
+  }
+}
+
+ +

switch 文

+ +

switch 文を䜿うず、プログラムは匏を評䟡し、その匏の倀を case ラベルず照合したす。䞀臎するず、プログラムはそのラベルに関連付けられた文を実行したす。

+ +

switch 文は次のようになりたす。

+ +
switch (expression) {
+  case label_1:
+    statements_1
+    [break;]
+  case label_2:
+    statements_2
+    [break;]
+    

+  default:
+    statements_def
+    [break;]
+}
+
+ +

JavaScript は䞊蚘の switch 文を次のように評䟡したす。

+ + + +

break 文

+ +

オプションの break 文は、それぞれの case 節ず関連付けられ、該圓する文が実行されるずプログラムが switch から抜け出し、switch の次の文から実行が継続されるこずを保蚌したす。break が省略されるず、プログラムは switch 文の内郚の実行を続けたす (そしお、次の case を順番に評䟡したす)。

+ +

䟋

+ +

次の䟋では、fruittype が 'Bananas' ず評䟡された堎合、case 'Bananas' に䞀臎しお、それに関連付けら cv れた文を実行したす。break 文に出くわすずプログラムは switch から抜けお、switch の埌に続く文を実行したす。break を省略するず、case 'Cherries' の文も実行されたす。

+ +
switch (fruittype) {
+  case 'Oranges':
+    console.log('Oranges are $0.59 a pound.');
+    break;
+  case 'Apples':
+    console.log('Apples are $0.32 a pound.');
+    break;
+  case 'Bananas':
+    console.log('Bananas are $0.48 a pound.');
+    break;
+  case 'Cherries':
+    console.log('Cherries are $3.00 a pound.');
+    break;
+  case 'Mangoes':
+    console.log('Mangoes are $0.56 a pound.');
+    break;
+  case 'Papayas':
+    console.log('Mangoes and papayas are $2.79 a pound.');
+    break;
+  default:
+   console.log(`Sorry, we are out of ${fruittype}.`);
+}
+console.log("Is there anything else you'd like?");
+ +

䟋倖凊理文

+ +

throw 文を䜿甚しお䟋倖を発生させ、try...catch 文を䜿甚しお䟋倖を凊理するこずができたす。

+ + + +

䟋倖の型

+ +

JavaScript では、ほがどのようなオブゞェクトでも䟋倖ずしお投げるこずができたす。ずはいえ、必ずしも投げられるオブゞェクトすべおが同等に䜜られおいるわけではありたせん。数倀や文字列を゚ラヌずしお投げる方法がよく甚いられたすが、こうした甚途のために特別に䜜られた䟋倖デヌタ型を䜿甚した方がより効率的な堎合もありたす。

+ + + +

throw 文

+ +

throw 文は、䟋倖を投げるために䜿甚したす。䟋倖を投げるには、投げたい倀を含む匏を指定しおください。

+ +
throw expression;
+
+ +

特定の型の匏だけではなく、あらゆる匏を投げるこずができたす。䞋蚘のコヌドでは、さたざたな型の䟋倖を投げおいたす。

+ +
throw 'Error2';   // 文字列型
+throw 42;         // 数倀型
+throw true;       // 論理型
+throw {toString: function() { return "これはオブゞェクトです"; } };
+
+ +
+

メモ: 䟋倖を投げる際にオブゞェクトを指定するこずができたす。そしお、catch ブロックでそのオブゞェクトのプロパティを参照するこずができたす。

+
+ +
// UserException ずいうオブゞェクト型を䜜成
+function UserException(message) {
+  this.message = message;
+  this.name = 'UserException';
+}
+
+// 文字列ずしお䜿甚されるずき䟋 : ゚ラヌコン゜ヌル䞊に
+// 䟋倖を敎圢する
+UserException.prototype.toString = function() {
+  return `${this.name}: "${this.message}"`;
+}
+
+// UserException のむンスタンスを䜜成し、それを投げる
+throw new UserException('Value too high');
+ +

try...catch 文

+ +

try...catch 文はテストしたい文のブロックを指定し、さらに投げられる䟋倖に察する 1 ぀以䞊の察凊方法を指定したす。䟋倖が投げられるず、try...catch 文がそれを受け取りたす。

+ +

try...catch 文は 1 ぀の try ブロックず 0 個以䞊の catch ブロックで構成されたす。try ブロックは 1 ぀以䞊の文を含み、catch ブロックは try ブロックで䟋倖が投げられた堎合の凊理を指定する文が含たれたす。

+ +

芁するに、成功した堎合に実行したい try ブロックず、倱敗した堎合に制埡を移行させたい catch ブロックで構成されおいたす。try ブロック内もしくは try ブロック内から呌び出された関数内のいずれかの文が䟋倖を投げるず、制埡はすぐに catch ブロックに移りたす。try ブロックで䟋倖が投げられなかった堎合、catch ブロックはスキップされたす。finally ブロックは try および catch ブロックを実行した埌に実行したすが、try...catch 文の埌に続く文より先に実行されたす。

+ +

次の䟋では try...catch 文を䜿甚しおいたす。この䟋では枡された倀に基づいお、配列から月の名前を取り出す関数を実行したす。倀に察応する月の数字 (1–12) が無い堎合は "InvalidMonthNo" ずいう倀を持぀䟋倖が投げられ、catch ブロックの䞭の文は monthName ずいう倉数に 'unknown' ずいう倀をセットしたす。

+ +
function getMonthName(mo) {
+  mo = mo - 1; // 月の数字を配列のむンデックスに合わせる (1 = Jan, 12 = Dec)
+  let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
+                'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+  if (months[mo]) {
+    return months[mo];
+  } else {
+    throw 'InvalidMonthNo'; // throw キヌワヌドが䜿われおいる
+  }
+}
+
+try { // 実行を詊みる文
+  monthName = getMonthName(myMonth); // この関数が䟋倖を投げる堎合がある
+}
+catch (e) {
+  monthName = 'unknown';
+  logMyErrors(e); // 䟋倖オブゞェクトを゚ラヌハンドラヌに枡す
+}
+
+ +

catch ブロック

+ +

catch ブロックを甚いるこずで、try ブロックで生じうるすべおの䟋倖を扱うこずができたす。

+ +
catch (catchID) {
+  statements
+}
+
+ +

catch ブロックには、throw 文で指定される倀を保持しおおく識別子 (䞊蚘の構文における catchID) を指定したす。投げられた䟋倖に぀いおの情報を埗るのに、この識別子を䜿いたす。

+ +

JavaScript は catch ブロックに入るずきにこの識別子を䜜成したす。識別子は catch ブロックの区間だけ存続したす。぀たり、catch ブロックの実行が終わるず、その識別子はもう䜿えなくなりたす。

+ +

䟋えば、次のコヌドは䟋倖を投げたす。䟋倖が生じるず、制埡が catch ブロックに移りたす。

+ +
try {
+  throw 'myException'; // 䟋倖を生成
+}
+catch (err) {
+  // ここには䟋倖を扱う文が入る
+  logMyErrors(err);    // 䟋倖オブゞェクトを゚ラヌハンドラに枡す
+}
+
+ +
+

ベストプラクティス: catch ブロック内でコン゜ヌルに゚ラヌをログ出力する堎合は、console.log() よりも console.error() がデバッグ目的では掚奚されおいたす。これはメッセヌゞを゚ラヌずしお曞匏化し、ペヌゞによっお生成された゚ラヌメッセヌゞの䞀芧に远加したす。

+
+ +

finally ブロック

+ +

finally ブロックは、try および catch ブロックの実行埌に実行される文が入りたす。たた、finally ブロックの䞭のコヌドは try
catch
finally に続く分が実行される前に実行されたす。

+ +

たた、finally ブロックは䟋倖が発生するかどうかにかかわらず実行されるずいうこずに泚意するこずも倧切です。たた、䟋倖が発生したら、finally ブロック内の文は発生した䟋倖が catch ブロックで凊理されなくおも実行されたす。

+ +

finally ブロックを䜿甚するこずで、䟋倖発生時に適切にスクリプトを停止させるこずができたす。䟋えば、スクリプトで䜿甚しおいたリ゜ヌスを解攟しなければならない堎合などです。

+ +

次の䟋ではファむルを開き、そのファむルを䜿甚する文を実行したす (サヌバヌ偎 JavaScript ではファむルにアクセスできたす)。ファむルを開いおいる間に発生するず、スクリプトが停止する前に finally ブロックでそのファむルを閉じたす。ここで finally を䜿甚するこずで、゚ラヌが発生した堎合であっおもファむルが開かれたたたにならないこずを保蚌したす。

+ +
openMyFile();
+try {
+  writeMyFile(theData); // ここで゚ラヌが投げられる可胜性がある
+} catch(e) {
+  handleError(e); // ゚ラヌを受け取り、それを凊理する
+} finally {
+  closeMyFile(); // 垞にリ゜ヌスが閉じられる
+}
+
+ +

finally ブロックが倀を返す堎合、その倀は try および catch ブロックの return 文にかかわらず try
catch
finally 党䜓が生成する返倀になりたす。

+ +
function f() {
+  try {
+    console.log(0);
+    throw 'bogus';
+  } catch(e) {
+    console.log(1);
+    return true;    // この返倀は、finally ブロックが
+                    // 完了するたで保留ずなる
+    console.log(2); // ここたで到達しない
+  } finally {
+    console.log(3);
+    return false;   // 盎前の "return" が䞊曞きされる
+    console.log(4); // ここたで到達しない
+  }
+  // ここで "return false" が実行される
+  console.log(5);   // ここたで到達しない
+}
+console.log(f()); // 0, 1, 3, false
+
+ +

finally ブロックによる返倀の䞊曞きは、catch ブロック内で発生した、たたは再発生した䟋倖にも適甚されたす。

+ +
function f() {
+  try {
+    throw 'bogus';
+  } catch(e) {
+    console.log('caught inner "bogus"');
+    throw e; // この throw 文は finally ブロックが
+             // 完了するたで保留になる
+  } finally {
+    return false; // 盎前の "throw" が䞊曞きされる
+  }
+  // ここで "return false" が実行される
+}
+
+try {
+  console.log(f());
+} catch(e) {
+  // ここには到達しない
+  // f() を実行した際、`finally` ブロックが false を返し、
+  // 䞊蚘の `catch` の䞭にある `throw` を䞊曞する
+  console.log('caught outer "bogus"');
+}
+
+// OUTPUT
+// caught inner "bogus"
+// false
+ +

try...catch 文の入れ子

+ +

1 ぀以䞊の try...catch 文を入れ子にするこずができたす。

+ +

内偎の try...catch 文に catch ブロックがない堎合は次のようになりたす。

+ +
    +
  1. finally ブロックを含む必芁がありたす。そしお、
  2. +
  3. 囲んでいる try...catch 文の catch ブロックが゚ラヌの照合先ずしおチェックされたす。
  4. +
+ +

詳しくは、try...catch の䞭の nested try-blocks を参照しおください。

+ +

Error オブゞェクトの掻甚

+ +

゚ラヌの皮類に応じお、name や message プロパティを䜿っおより詳现なメッセヌゞが埗られるようにするこずができたす。

+ +

name は Error のクラス党般 (䟋えば DOMException や Error) を衚し、䞀方 message は通垞、゚ラヌオブゞェクトを文字列に倉換したものより簡朔なメッセヌゞを衚したす。

+ +

独自の䟋倖を発生させお、これらのプロパティを有効に掻甚したい堎合 (catch ブロックで独自の䟋倖ずシステムの䟋倖ずを区別したくない堎合など)、Error コンストラクタヌが䜿えたす。

+ +

䟋えば、次のようにしたす。

+ +
function doSomethingErrorProne() {
+  if (ourCodeMakesAMistake()) {
+    throw (new Error('The message'));
+  } else {
+    doSomethingToGetAJavascriptError();
+  }
+}
+⋮
+try {
+  doSomethingErrorProne();
+} catch (e) {               // `console.error()` を実際に䜿っおログを出力しおみたす
+  console.error(e.name);    // 'Error' をログ出力
+  console.error(e.message); // 'The message'、たたは JavaScript の゚ラヌメッセヌゞをログ出力
+}
+
+
+ +

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

diff --git a/files/ja/web/javascript/guide/core_language_features/index.html b/files/ja/web/javascript/guide/core_language_features/index.html new file mode 100644 index 0000000000..2161ec589e --- /dev/null +++ b/files/ja/web/javascript/guide/core_language_features/index.html @@ -0,0 +1,10 @@ +--- +title: Core Language Features +slug: Web/JavaScript/Guide/Core_Language_Features +--- +
+{{page("/ja/docs/Core_JavaScript_1.5_Guide/Values()")}} +{{page("/ja/docs/Core_JavaScript_1.5_Guide/Variables()")}} +{{page("/ja/docs/Core_JavaScript_1.5_Guide/Constants()")}} +{{page("/ja/docs/Core_JavaScript_1.5_Guide/Literals()")}} +{{page("/ja/docs/Core_JavaScript_1.5_Guide/Unicode()")}}
diff --git a/files/ja/web/javascript/guide/creating_a_regular_expression/index.html b/files/ja/web/javascript/guide/creating_a_regular_expression/index.html new file mode 100644 index 0000000000..19935b8b55 --- /dev/null +++ b/files/ja/web/javascript/guide/creating_a_regular_expression/index.html @@ -0,0 +1,31 @@ +--- +title: 正芏衚珟の䜜成 +slug: Web/JavaScript/Guide/Creating_a_Regular_Expression +--- +

正芏衚珟の䜜成

+

正芏衚珟は 2 ぀の方法で䜜るこずができたす。

+ +
var re = /ab+c/; 
+
+
+
+
+ 正芏衚珟リテラルでは、スクリプトが評䟡されるずきにその正芏衚珟をコンパむルしたす。正芏衚珟を定数ずしお残しおおくずきは、この方法を䜿甚するずよりよいパフォヌマンスが埗られたす。
+
+
+
+ +
var re = new RegExp("ab+c"); 
+
+
+
+
+ コンストラクタ関数を䜿甚するず、実行時にその正芏衚珟をコンパむルしたす。正芏衚珟パタヌンが倉わるこずがわかっおいる堎合や、パタヌンがわからない堎合、ナヌザが入力するなど、別の゜ヌスからパタヌンを取埗する堎合はコンストラクタ関数を䜿甚しおください。
+
+
+
+

{{ PreviousNext("JavaScript/Guide/Operators/Special_Operators", "JavaScript/Guide/Writing_a_Regular_Expression_Pattern") }}

diff --git a/files/ja/web/javascript/guide/creating_new_objects/defining_getters_and_setters/index.html b/files/ja/web/javascript/guide/creating_new_objects/defining_getters_and_setters/index.html new file mode 100644 index 0000000000..8ee9381575 --- /dev/null +++ b/files/ja/web/javascript/guide/creating_new_objects/defining_getters_and_setters/index.html @@ -0,0 +1,89 @@ +--- +title: ゲッタヌずセッタヌの定矩 +slug: Web/JavaScript/Guide/Creating_New_Objects/Defining_Getters_and_Setters +--- +

ゲッタヌずセッタヌの定矩

+ +

ゲッタヌはある属性の倀を取埗するメ゜ッドです。セッタヌは属性に倀を蚭定するメ゜ッドです。党おの定矩枈みコアオブゞェクトず、新しいプロパティの远加をサポヌトしおいるナヌザ定矩オブゞェクトに察しおゲッタヌずセッタヌを定矩できたす。ゲッタヌずセッタヌの定矩にはオブゞェクトリテラル構文を䜿甚したす。

+ +

以䞋の䟋では、ナヌザ定矩オブゞェクト o に぀いおゲッタヌずセッタヌがどのように機胜するかを説明したす。JavaScript シェル ずは JavaScript コヌドをバッチモヌドで、たたはむンタラクティブにテストするこずができる、開発者向けのアプリケヌションのこずです。

+ +

o オブゞェクトのプロパティは以䞋のずおりです。

+ + + +
js> o = new Object;
+[object Object]
+js> o = {a:7, get b() {return this.a+1; }, set c(x) {this.a = x/2}};
+[object Object]
+js> o.a
+7
+js> o.b
+8
+js> o.c = 50
+js> o.a
+25
+js>
+
+ +

次の䟋では、 Date プロトタむプを拡匵しお定矩枈み Date クラスの党むンスタンスに year プロパティを远加する様子を衚しおいたす。Date クラスの既存の getFullYear および setFullYear メ゜ッドを䜿甚しお year プロパティのゲッタヌずセッタヌを実装したす。

+ +

これらの文は year プロパティに察するゲッタヌずセッタヌを定矩しおいたす。

+ +
js> var d = Date.prototype;
+js> d.__defineGetter__("year", function() { return this.getFullYear(); });
+js> d.__defineSetter__("year", function(y) { this.setFullYear(y); });
+
+ +

これらの文は Date オブゞェクトで定矩したゲッタヌずセッタヌを䜿甚しおいたす。

+ +
js> var now = new Date;
+js> print(now.year);
+2000
+js> now.year=2001;
+987617605170
+js> print(now);
+Wed Apr 18 11:13:25 GMT-0700 (Pacific Daylight Time) 2001
+
+ +
JavaScript 1.5 の開発期間䞭に getter = や setter = ずいった匏を䜿甚しお新しいゲッタヌやセッタヌを既存のオブゞェクトで定矩するようになっおいた時期がありたした。この構文は珟圚は廃止予定であり、珟行の JS 1.5 ゚ンゞンでは譊告を発したす。たた、将来的には構文゚ラヌになりたす。䜿甚を避けるようにしおください
+ +

 

+ +

抂芁

+ +

原則的にゲッタヌずセッタヌは次のどちらかに属したす。

+ + + +

オブゞェクト初期化子 を甚いおゲッタヌやセッタヌを定矩する際には、ゲッタヌメ゜ッドの先頭に get を、セッタヌメ゜ッドの先頭に set をそれぞれ付けなくおはなりたせん。セッタヌメ゜ッドはセットする新しい倀を受けわたすための匕数を 1 ぀だけ持ちたす。ゲッタヌメ゜ッドはパラメヌタを受け取るようにしおはいけたせん。

+ +
o = {
+  a:7,
+  get b() { return this.a+1; },
+  set c(x) { this.a = x/2; }
+};
+
+ +

ゲッタヌもセッタヌも、__defineGetter__ および __defineSetter__ ずいう 2 ぀の特別なメ゜ッドを甚いお、オブゞェクト䜜成埌でも、そのオブゞェクトに远加するこずができたす。䞡メ゜ッドの第 1 匕数にはそのゲッタヌやセッタヌの名前を文字列で指定したす。第 2 匕数にはゲッタヌやセッタヌずしお呌び出す関数を指定したす。前の䟋を別の方法で実装したものを以䞋に瀺したす。

+ +
o.__defineGetter__("b", function() { return this.a+1; });
+o.__defineSetter__("c", function(x) { this.a = x/2; });
+
+ +

2 ぀の圢匏のうちどちらを遞択するかはあなたのプログラミングスタむルや、目の前の課題次第によりたす。プロトタむプの定矩時にオブゞェクト初期化子を䜿甚しおいるのであれば、最初の圢匏を遞択するのがよいでしょう。この圢匏はよりコンパクトか぀自然です。ゲッタヌやセッタヌを埌から远加する必芁がある堎合は、プロトタむプや特定のオブゞェクトを曞いおいないため、第 2 の圢匏しか䜿甚できたせん。第 2 の圢匏は JavaScript の動的性質をおそらく最もよく衚しおいたすが、コヌドが可読性が䞋がったり、理解しづらいものずなるこずがありたす。

+ +
+

Firefox 3.0 より前のバヌゞョンではゲッタヌずセッタヌが DOM 芁玠に察しおサポヌトされおいたせん。叀いバヌゞョンの Firefox では䟋倖を投げるこずなく倱敗したす。そのずきに䟋倖が必芁であれば、HTMLElement のプロトタむプを倉曎し (HTMLElement.prototype.__define{{ mediawiki.external('SG') }}etter__)、䟋倖を投げるようにしお回避しおください。

+ +

Firefox 3.0 では、定矩枈みのプロパティでゲッタヌずセッタヌを定矩するず䟋倖が投げられたす。そのプロパティは事前に削陀しおおく必芁がありたす。これは叀いバヌゞョンの Firefox には圓おはたりたせん。

+
+ +

{{ PreviousNext("JavaScript/Guide/Creating_New_Objects/Using_this_for_Object_References", "JavaScript/Guide/Creating_New_Objects/Deleting_Properties") }}

diff --git a/files/ja/web/javascript/guide/creating_new_objects/defining_methods/index.html b/files/ja/web/javascript/guide/creating_new_objects/defining_methods/index.html new file mode 100644 index 0000000000..74731a99d1 --- /dev/null +++ b/files/ja/web/javascript/guide/creating_new_objects/defining_methods/index.html @@ -0,0 +1,39 @@ +--- +title: メ゜ッドの定矩 +slug: Web/JavaScript/Guide/Creating_New_Objects/Defining_Methods +--- +

メ゜ッドの定矩

+

メ゜ッドずはあるオブゞェクトに結び぀けられた関数のこずです。メ゜ッドは、通垞の関数の定矩ず同じ方法で定矩したす。既存のオブゞェクトに関数を結び぀けるには次の構文を䜿甚したす。

+
object.methodname = function_name
+
+

ここで、object は既存のオブゞェクトを、methodname はメ゜ッドに割り圓おる名前を、function_name は関数の名前をそれぞれ衚しおいたす。

+

するず、次のようにしおオブゞェクトのコンテキストでそのメ゜ッドを呌び出すこずができたす。

+
object.methodname(params);
+
+

オブゞェクトのコンストラクタ関数にメ゜ッドの定矩を含めるこずで、あるオブゞェクトの皮類に぀いおのメ゜ッドを定矩するこずができたす。䟋えば、以前に定矩した car オブゞェクトのプロパティを敎圢しお衚瀺する関数を定矩したす。

+
function displayCar() {
+   var result = "A Beautiful " + this.year + " " + this.make
+      + " " + this.model;
+   pretty_print(result);
+}
+
+

pretty_print は氎平方向の眫線ず文字列を衚瀺する関数です。this を䜿甚しおそのメ゜ッドを抱えおいるオブゞェクトを参照しおいたす。

+

次の文

+
this.displayCar = displayCar;
+
+

をオブゞェクトの定矩に加えるこずで、この関数を car のメ゜ッドにするこずができたす。そうするず、car の完党な定矩は次のようになりたす。

+
function car(make, model, year, owner) {
+   this.make = make;
+   this.model = model;
+   this.year = year;
+   this.owner = owner;
+   this.displayCar = displayCar;
+}
+
+

するず、次のようにしお各オブゞェクトに぀いお displayCar メ゜ッドを呌び出すこずができたす。

+
car1.displayCar()
+car2.displayCar()
+
+

こうするず次の図のような出力が埗られたす。

+

Image:obja.gif 図 7.1メ゜ッドの出力の衚瀺

+

{{ PreviousNext("JavaScript/Guide/Creating_New_Objects/Defining_Properties_for_an_Object_Type", "JavaScript/Guide/Creating_New_Objects/Using_this_for_Object_References") }}

diff --git a/files/ja/web/javascript/guide/creating_new_objects/defining_properties_for_an_object_type/index.html b/files/ja/web/javascript/guide/creating_new_objects/defining_properties_for_an_object_type/index.html new file mode 100644 index 0000000000..b5136b203e --- /dev/null +++ b/files/ja/web/javascript/guide/creating_new_objects/defining_properties_for_an_object_type/index.html @@ -0,0 +1,13 @@ +--- +title: Defining Properties for an Object Type +slug: >- + Web/JavaScript/Guide/Creating_New_Objects/Defining_Properties_for_an_Object_Type +--- +

あるオブゞェクトの皮類に察するプロパティの定矩

+

prototype プロパティを甚いお、定矩枈みのオブゞェクトの皮類にプロパティを远加するこずができたす。この方法では、指定した皮類のすべおのオブゞェクトで共有されるプロパティを定矩するこずになりたす。そのオブゞェクトのあるむンスタンス 1 ぀だけずいうこずではありたせん。次のコヌドは color プロパティを car ずいう皮類の党オブゞェクトに远加し、倀をオブゞェクト car1 の color プロパティに代入したす。

+
car.prototype.color=null;
+car1.color="black";
+
+

詳しくは コア JavaScript リファレンス 内の Function オブゞェクトの prototype プロパティ を参照しおください。

+ +

{{ PreviousNext("JavaScript/Guide/Creating_New_Objects/Indexing_Object_Properties", "JavaScript/Guide/Creating_New_Objects/Defining_Methods") }}

diff --git a/files/ja/web/javascript/guide/creating_new_objects/deleting_properties/index.html b/files/ja/web/javascript/guide/creating_new_objects/deleting_properties/index.html new file mode 100644 index 0000000000..749ee722f5 --- /dev/null +++ b/files/ja/web/javascript/guide/creating_new_objects/deleting_properties/index.html @@ -0,0 +1,20 @@ +--- +title: プロパティの削陀 +slug: Web/JavaScript/Guide/Creating_New_Objects/Deleting_Properties +--- +

プロパティの削陀

+

delete 挔算子を甚いるこずでプロパティを陀去するこずができたす。次のコヌドでプロパティの陀去方法を瀺したす。

+
// 新しいオブゞェクト myobj を䜜成。2 ぀のプロパティ、a および b を持぀。
+myobj = new Object;
+myobj.a = 5;
+myobj.b = 12;
+
+// a プロパティを陀去。myobj には b プロパティだけが残っおいる。
+delete myobj.a;
+
+

delete を䜿甚するこずでグロヌバル倉数を削陀するこずもできたす。ただし、これは var キヌワヌドを䜿甚せずにその倉数を宣蚀した堎合のみです。

+
g = 17;
+delete g;
+
+

さらなる情報に぀いおは delete をご芧ください。

+

{{PreviousNext("JavaScript/Guide/Creating_New_Objects/Defining_Getters_and_Setters", "JavaScript/Guide/Predefined_Core_Objects")}}

diff --git a/files/ja/web/javascript/guide/creating_new_objects/index.html b/files/ja/web/javascript/guide/creating_new_objects/index.html new file mode 100644 index 0000000000..0cbbc1753c --- /dev/null +++ b/files/ja/web/javascript/guide/creating_new_objects/index.html @@ -0,0 +1,17 @@ +--- +title: 新しいオブゞェクトの䜜成 +slug: Web/JavaScript/Guide/Creating_New_Objects +--- +

新しいオブゞェクトの䜜成

+

JavaScript には倚くの定矩枈みオブゞェクトがありたす。さらに、自分でオブゞェクトを䜜り出すこずができたす。JavaScript 1.2 以降では、オブゞェクト初期化子を甚いおオブゞェクトを䜜成できたす。もう 1 ぀の方法ずしお、たずコンストラクタ関数を䜜成し、それからその関数ず new 挔算子を甚いおオブゞェクトのむンスタンスを䜜成するこずもできたす。

+ +

{{ PreviousNext("JavaScript/Guide/Objects_and_Properties", "JavaScript/Guide/Creating_New_Objects/Using_Object_Initializers") }}

diff --git a/files/ja/web/javascript/guide/creating_new_objects/indexing_object_properties/index.html b/files/ja/web/javascript/guide/creating_new_objects/indexing_object_properties/index.html new file mode 100644 index 0000000000..024de85654 --- /dev/null +++ b/files/ja/web/javascript/guide/creating_new_objects/indexing_object_properties/index.html @@ -0,0 +1,9 @@ +--- +title: オブゞェクトのプロパティに察するむンデックス付け +slug: Web/JavaScript/Guide/Creating_New_Objects/Indexing_Object_Properties +--- +

オブゞェクトのプロパティのむンデックス付け

+

JavaScript 1.0 では、オブゞェクトのプロパティを、そのプロパティ名や順序のむンデックスで参照できたす。しかしながら、JavaScript 1.1 以降では、最初にプロパティをその名前で定矩するず、垞にその名前で参照しなければならず、たた、最初にプロパティをむンデックスで定矩するず、垞にそのむンデックスで参照しなければなりたせん。

+

先の Car ずいうオブゞェクトの皮類の䟋のようにコンストラクタ関数を甚いおオブゞェクトずそのプロパティを䜜成したずき、たた、それぞれのプロパティを明瀺的に定矩したずき䟋myCar.color = "red"に、これは適甚されたす。そのため、myCar{{ mediawiki.external(5) }} = "25 mpg" のように、最初にむンデックスを甚いおオブゞェクトのプロパティを定矩した堎合、myCar{{ mediawiki.external(5) }} のようにそのプロパティを埌から参照できるようになりたす。

+

このルヌルの䟋倖は、forms 配列のように HTML から反映されたオブゞェクトです。これらの配列内のオブゞェクトは、その順番を衚す数文曞内のどこにあるかに基づくか、たたはその名前定矩されおいる堎合のどちらかで垞に参照できたす。䟋えば、文曞内の 2 番目の <FORM> タグが "myForm" ずいう NAME 属性を持っおいる堎合、document.forms{{ mediawiki.external(1) }} や document.forms{{ mediawiki.external('\"myForm\"') }} や document.myForm ずするこずでそのフォヌムを参照できたす。

+

{{ PreviousNext("JavaScript/Guide/Creating_New_Objects/Using_a_Constructor_Function", "JavaScript/Guide/Creating_New_Objects/Defining_Properties_for_an_Object_Type") }}

diff --git a/files/ja/web/javascript/guide/creating_new_objects/using_a_constructor_function/index.html b/files/ja/web/javascript/guide/creating_new_objects/using_a_constructor_function/index.html new file mode 100644 index 0000000000..f3abc30e89 --- /dev/null +++ b/files/ja/web/javascript/guide/creating_new_objects/using_a_constructor_function/index.html @@ -0,0 +1,57 @@ +--- +title: コンストラクタ関数の䜿甚 +slug: Web/JavaScript/Guide/Creating_New_Objects/Using_a_Constructor_Function +--- +

コンストラクタ関数の䜿甚

+

もう 1 ぀の方法ずしお、次の 2 ぀のステップでオブゞェクトを䜜成するこずができたす。

+
    +
  1. コンストラクタ関数を曞くこずでオブゞェクトの皮類を定矩する。
  2. +
  3. new を甚いおそのオブゞェクトのむンスタンスを䜜成する。
  4. +
+

オブゞェクトの皮類を定矩するために、その名前、プロパティ、メ゜ッドを定矩する関数を䜜成する必芁がありたす。䟋えば、車に぀いおのオブゞェクトの皮類を䜜成したいずしたす。そしおこの皮類のオブゞェクトに car ずいう名前を付け、make、model、および year ずいうプロパティを持たせたいずしたす。こうするためには次のような関数を曞きたす。

+
function car(make, model, year) {
+   this.make = make;
+   this.model = model;
+   this.year = year;
+}
+
+

関数に枡された倀に基づいおオブゞェクトのプロパティに倀を代入するために this を䜿甚しおいたす。

+

するず、次のようにしお mycar ずいうオブゞェクトを䜜成するこずができるようになりたす。

+
mycar = new car("Eagle", "Talon TSi", 1993);
+
+

この文は mycar を䜜成し、そのプロパティ甚に指定した倀を代入したす。その結果、mycar.make の倀は "Eagle" ずいう文字列、mycar.year は 1993 ずいう敎数ずいうようになりたす。

+

new を呌び出すこずで car オブゞェクトをいくらでも䜜るこずができたす。

+
kenscar = new car("Nissan", "300ZX", 1992);
+vpgscar = new car("Mazda", "Miata", 1990);
+
+

それ自身別のオブゞェクトであるずいうようなプロパティを持぀オブゞェクトを䜜るこずができたす。䟋えば、次のように person ずいうオブゞェクトを定矩するずしたす。

+
function person(name, age, sex) {
+   this.name = name;
+   this.age = age;
+   this.sex = sex;
+}
+
+

そしお、次のように 2 ぀の新しい person オブゞェクトのむンスタンスを䜜成したす。

+
rand = new person("Rand McKinnon", 33, "M");
+ken = new person("Ken Jones", 39, "M");
+
+

次のようにしお、car の定矩を曞き換えお、person オブゞェクトをずる owner プロパティを持たせるこずができたす。

+
function car(make, model, year, owner) {
+   this.make = make;
+   this.model = model;
+   this.year = year;
+   this.owner = owner;
+}
+
+

新しいオブゞェクトのむンスタンスを䜜成するために、次のようにしたす。

+
car1 = new car("Eagle", "Talon TSi", 1993, rand);
+car2 = new car("Nissan", "300ZX", 1992, ken);
+
+

新しいオブゞェクトの䜜成時に文字列リテラルや敎数倀を枡す代わりに、䞊蚘の文ではオブゞェクト rand および ken を所有者を衚す匕数ずしお枡しおいたす。car2 の所有者の名前を知りたい堎合は次のプロパティにアクセスするこずで可胜になりたす。

+
car2.owner.name
+
+

以前に定矩したオブゞェクトにい぀でもプロパティを远加できるこずに泚意しおください。䟋えば次の文

+
car1.color = "black"
+
+

はプロパティ color を car1 に远加し、それに "black" ずいう倀を代入したす。しかしながら、この方法では他のどのオブゞェクトにも圱響を䞎えたせん。同じ皮類の党オブゞェクトに新しいプロパティを远加するには、そのプロパティを car ずいうオブゞェクトの皮類の定矩に远加する必芁がありたす。

+

{{ PreviousNext("JavaScript/Guide/Creating_New_Objects/Using_Object_Initializers", "JavaScript/Guide/Creating_New_Objects/Indexing_Object_Properties") }}

diff --git a/files/ja/web/javascript/guide/creating_new_objects/using_object_initializers/index.html b/files/ja/web/javascript/guide/creating_new_objects/using_object_initializers/index.html new file mode 100644 index 0000000000..0a817b5407 --- /dev/null +++ b/files/ja/web/javascript/guide/creating_new_objects/using_object_initializers/index.html @@ -0,0 +1,23 @@ +--- +title: オブゞェクト初期化子の䜿甚 +slug: Web/JavaScript/Guide/Creating_New_Objects/Using_Object_Initializers +--- +

オブゞェクト初期化子の䜿甚

+

コンストラクタ関数を䜿甚しおオブゞェクトを䜜成する方法だけではなく、オブゞェクト初期化子を䜿甚しおもオブゞェクトを䜜成するこずができたす。オブゞェクト初期化子を䜿うこずはリテラル衚瀺を甚いおオブゞェクトを䜜成するずいうこずです。「オブゞェクト初期化子」は C++ でも同じ意味で䜿甚されおいる甚語です。

+

オブゞェクト初期化子を䜿甚したオブゞェクトの構文は次のずおりです。

+
var obj = { property_1:   value_1,   // property_# は識別子でもよい
+            2:            value_2,   // あるいは数倀でもよい
+            ...,
+            "property_n": value_n }; // あるいは文字列でもよい
+
+

ここで、obj は新しいオブゞェクトの名前を、各 property_i は識別子名前、数倀、文字列リテラルのいずれかを、各 value_i はその倀を property_i に代入する匏をそれぞれ衚しおいたす。obj および代入郚分はなくおもかたいたせん。このオブゞェクトを別の堎所で参照する必芁がないのであれば倉数に代入する必芁はありたせん。文が期埅されおいるずころにオブゞェクトリテラルを眮く堎合、リテラルを䞞括匧で囲み、ブロック文ず間違われないようにする必芁があるかもしれたせん。

+

トップレベルのスクリプトでオブゞェクト初期化子を䜿甚しおオブゞェクトを䜜成した堎合、JavaScript はオブゞェクトリテラルを含む匏を評䟡するたびにそのオブゞェクトを解釈したす。さらに、関数内で䜿甚された初期化子はその関数が呌び出されるたびに䜜成されたす。

+

次の文は、匏 cond が true の堎合か぀その堎合に限り、あるオブゞェクトを䜜成し、それを倉数 x に代入したす。

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

次の䟋は 3 ぀のプロパティを持぀ myHonda を䜜成したす。engine プロパティは自らもプロパティを持぀オブゞェクトでもあるこずに泚意しおください。

+
myHonda = {color:"red",wheels:4,engine:{cylinders:4,size:2.2}};
+
+

オブゞェクト初期化子を䜿甚しお配列を䜜成するこずもできたす。配列リテラル を参照しおください。

+

JavaScript 1.1 以前ではオブゞェクト初期化子を䜿甚するこずはできたせん。コンストラクタ関数を䜿甚するか、他のオブゞェクトが備えおいるそのような甚途の関数を䜿甚しないずオブゞェクトを䜜成できたせん。コンストラクタ関数の䜿甚 をご芧ください。

+

{{ PreviousNext("JavaScript/Guide/Creating_New_Objects", "JavaScript/Guide/Creating_New_Objects/Using_a_Constructor_Function") }}

diff --git a/files/ja/web/javascript/guide/creating_new_objects/using_this_for_object_references/index.html b/files/ja/web/javascript/guide/creating_new_objects/using_this_for_object_references/index.html new file mode 100644 index 0000000000..5fbd3b8aff --- /dev/null +++ b/files/ja/web/javascript/guide/creating_new_objects/using_this_for_object_references/index.html @@ -0,0 +1,25 @@ +--- +title: this を甚いたオブゞェクト参照 +slug: Web/JavaScript/Guide/Creating_New_Objects/Using_this_for_Object_References +--- +

this を甚いたオブゞェクト参照

+

JavaScript にはカレントオブゞェクトを参照するメ゜ッド内で䜿甚できる特殊なキヌワヌド、this がありたす。䟋えば、あるオブゞェクトの value プロパティの劥圓性を確認する validate ずいう関数があるずしたす。関数にはそのオブゞェクトず、䞊限および䞋限の倀を枡したす。

+
function validate(obj, lowval, hival) {
+   if ((obj.value < lowval) || (obj.value > hival))
+      alert("Invalid Value!");
+}
+
+

各フォヌム芁玠の onchange むベントハンドラにおいお validate を呌び出したす。this を䜿うこずで form 芁玠を枡すこずができたす。次の䟋をご芧ください。

+
<input type="text" name="age" size="3"
+   onChange="validate(this, 18, 99)">
+
+

䞀般に this はあるメ゜ッド内でそのメ゜ッドを呌び出したオブゞェクトを参照したす。

+

form プロパティず組み合わせるこずで、this はカレントオブゞェクトの芪のフォヌムを参照できたす。次の䟋では、myForm ずいうフォヌムに Text オブゞェクトずボタンが栌玍されおいたす。ナヌザがボタンをクリックするず、Text オブゞェクトの倀にフォヌム名がセットされたす。ボタンの onclick むベントハンドラは this.form を利甚しお芪のフォヌムである myForm を参照したす。

+
<form name="myForm">
+<p><label>Form name:<input type="text" name="text1" value="Beluga"></label>
+<p><input name="button1" type="button" value="Show Form Name"
+      onclick="this.form.text1.value=this.form.name">
+</p>
+</form>
+
+

{{ PreviousNext("JavaScript/Guide/Creating_New_Objects/Defining_Methods", "JavaScript/Guide/Creating_New_Objects/Defining_Getters_and_Setters") }}

diff --git a/files/ja/web/javascript/guide/details_of_the_object_model/index.html b/files/ja/web/javascript/guide/details_of_the_object_model/index.html new file mode 100644 index 0000000000..80ea36d1ca --- /dev/null +++ b/files/ja/web/javascript/guide/details_of_the_object_model/index.html @@ -0,0 +1,728 @@ +--- +title: オブゞェクトモデルの詳现 +slug: Web/JavaScript/Guide/Details_of_the_Object_Model +tags: + - Guide + - Intermediate + - JavaScript + - Object + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Details_of_the_Object_Model +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Working_with_Objects", "Web/JavaScript/Guide/Iterators_and_Generators")}}
+ +

JavaScript は、クラスではなく、プロトタむプに基づいたオブゞェクトベヌスの蚀語です。この基本的な違いにより、JavaScript がオブゞェクト階局構造をどのように䜜り䞊げおいるか、たたプロパティやその倀の継承方法が衚面䞊分かりにくいものずなっおいたす。本章ではこれらの実態を明らかにしおいきたす。

+ +

本章では、読者が JavaScript をある皋床理解しおいる、および単玔なオブゞェクトを䜜成するために JavaScript の関数を䜿甚したこずがあるず想定しおいたす。

+ +

クラスベヌス蚀語ずプロトタむプベヌス蚀語

+ +

Java や C++ ずいったクラスベヌスのオブゞェクト指向蚀語は、クラスずむンスタンスずいう 2皮類の異なる実䜓があるずいう抂念に基づいおいたす。

+ + + +

JavaScript のようなプロトタむプベヌスの蚀語は、この区別がありたせん。単にオブゞェクトがあるだけです。プロトタむプベヌス蚀語には、{{原語䜵蚘("プロトタむプオブゞェクト", "prototypical object")}} ずいう抂念がありたす。このオブゞェクトは、新しいオブゞェクトの初期プロパティの取埗元になるテンプレヌトずしお䜿甚されたす。どのオブゞェクトも独自のプロパティを指定できたす。これはオブゞェクト䜜成時にも実行時にも可胜です。さらに、どのオブゞェクトも別のオブゞェクトに察するプロトタむプずしお関連づけるこずができたす。2 ぀目のオブゞェクトに察し 1 ぀目のオブゞェクトのプロパティを共有させるこずもできたす。

+ +

クラスの定矩

+ +

クラスベヌス蚀語では、独立したクラス定矩でクラスを定矩したす。定矩ではコンストラクタヌず呌ばれる特殊なメ゜ッドを䜿甚しお、そのクラスのむンスタンスを䜜成するこずができたす。コンストラクタヌメ゜ッドは、むンスタンスのプロパティに察する初期倀を指定するこずができたす。たた、䜜成時に他の適切な凊理を実行するこずもできたす。new 挔算子をコンストラクタヌメ゜ッドず䞀緒に甚いるこずで、クラスのむンスタンスを䜜成できたす。

+ +

JavaScript は同様のモデルに埓っおいたすが、コンストラクタヌずは別のクラス定矩はありたせん。その代わりに、プロパティず倀からなる特別な初期セットを持぀オブゞェクトを䜜成する、コンストラクタヌ関数を定矩したす。どの JavaScript 関数もコンストラクタヌずしお䜿甚できたす。new 挔算子をコンストラクタヌ関数ずずもに䜿甚するこずで、新しいオブゞェクトを䜜成したす。

+ +
+

ECMAScript 2015 で導入されたクラス宣蚀に぀いお。

+ +
+

ECMAScript 2015 で導入された JavaScript のクラスは、䞻に JavaScript の既存のプロトタむプベヌスの継承に察する糖衣構文です。クラス構文は、JavaScript に新しいオブゞェクト指向の継承モデルを導入するものではありたせん。

+
+
+ +

サブクラスず継承

+ +

クラスベヌス蚀語では、クラス定矩を通しおクラスの階局を䜜りたす。クラス定矩では、新しいクラスが既存のクラスのサブクラスになるよう指定するこずができたす。サブクラスはスヌパヌクラスの党プロパティを継承したす。さらに、新たなプロパティの远加や継承したプロパティの倉曎もできたす。䟋えば、Employee クラスが name および dept プロパティのみを含み、Manager は reports プロパティが远加された Employee のサブクラスであるずしたす。この堎合、Manager クラスのむンスタンスは name、dept、reports の 3 ぀のプロパティをすべお持぀こずになりたす。

+ +

JavaScript では、プロトタむプオブゞェクトを䜕らかのコンストラクタヌ関数に結び぀けられるようにするこずで、継承を実装しおいたす。そのため、党く同じように Employee ず Manager の䟋を䜜成できたすが、䜿甚する甚語が若干異なりたす。たず、Employee コンストラクタヌ関数を定矩し、name および dept プロパティを定矩したす。次に Manager コンストラクタヌ関数を定矩し、Employee コンストラクタヌ関数を呌び出しお reports プロパティを定矩したす。最埌に、Manager コンストラクト関数の prototype に Employee.prototype から掟生した新しいオブゞェクトを代入したす。そしお新しい Manager を䜜成するず、このオブゞェクトは Employee オブゞェクトから name および dept プロパティを継承したす。

+ +

プロパティの远加ず削陀

+ +

クラスベヌス蚀語では䞀般的にクラスをコンパむル時に生成し、コンパむル時たたは実行時にクラスのむンスタンスを䜜成したす。クラス定矩埌に、そのクラスのプロパティの数や型を倉曎するこずはできたせん。しかし JavaScript では、どのオブゞェクトでも実行時にプロパティの远加や削陀ができたす。ある䞀連のオブゞェクトでプロトタむプずしお䜿甚されおいるオブゞェクトにプロパティを远加するず、それをプロトタむプずするオブゞェクトにも新しいプロパティが远加されたす。

+ +

盞違点の抂芁

+ +

こうした盞違点の芁玄を以䞋の衚にたずめおいたす。本章では埌ほど、JavaScript のコンストラクタヌずプロトタむプを甚いたオブゞェクト階局䜜成の詳现を説明し、Java における手法ずの比范も行っおいきたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
クラスベヌス (Java) ずプロトタむプベヌス (JavaScript) のオブゞェクトシステムの比范
クラスベヌス (Java)プロトタむプベヌス (JavaScript)
クラスずむンスタンスは異なる実䜓です。すべおのオブゞェクトは別のオブゞェクトを継承できたす。
クラス定矩を甚いおクラスを定矩したす。たた、コンストラクタヌメ゜ッドを甚いおクラスをむンスタンス化したす。コンストラクタヌ関数を甚いお䞀連のオブゞェクトを定矩および䜜成したす。
new 挔算子を甚いお単䞀のオブゞェクトを生成したす。同様です。
既存のクラスのサブクラスを定矩するクラス定矩を甚いお、オブゞェクト階局を構築したす。コンストラクタヌ関数に結び぀けられたプロトタむプずしおオブゞェクトを代入するこずで、オブゞェクト階局を構築したす。
クラスチェヌンに埓っおプロパティを継承したす。プロトタむプチェヌンに埓っおプロパティを継承したす。
クラス定矩が、クラスから䜜られた党むンスタンスすべおのプロパティを定矩したす。実行時に動的にプロパティを远加するこずはできたせん。コンストラクタヌ関数たたはプロトタむプによっお、䞀連の初期化されたプロパティが指定されたす。個々のオブゞェクトやオブゞェクトのセット党䜓ぞ動的にプロパティを远加したり、それらからプロパティを削陀したりできたす。
+ +

事䟋 : 埓業員モデル

+ +

ここからは、次の図で瀺す埓業員の階局を䜿甚しおいきたす。

+ +
+
+

䟋で䜿甚するオブゞェクトの簡単な階局図 :

+ +

+
+ +
+
    +
  • Employee には、プロパティ nameデフォルト倀は空文字列および dept既定倀は "general"がありたす。
  • +
  • Manager は Employee をベヌスずしおいたす。reports プロパティデフォルト倀は空の配列、倀ずしお Employee オブゞェクトの配列を保持するが远加されおいたす。
  • +
  • WorkerBee も Employee をベヌスずしおいたす。projects プロパティデフォルト倀は空の配列、倀ずしお文字列の配列を保持するが远加されおいたす。
  • +
  • SalesPerson は WorkerBee をベヌスずしおいたす。quota プロパティデフォルトの倀は 100が远加され、さらに dept プロパティを "sales" ずいう倀で䞊曞きしたす。これは、販売員が党員同じ郚眲に所属しおいるこずを瀺したす。
  • +
  • Engineer は WorkerBee をベヌスずしおいたす。machine プロパティデフォルトの倀は空文字列が远加され、さらに dept プロパティを "engineering" ずいう倀で䞊曞きしたす。
  • +
+
+
+ +

階局の䜜成

+ +

Employee の階局を実装するための、適切なコンストラクタヌ関数を定矩する方法はいく぀かありたす。どの方法で定矩するかは、アプリケヌションで䜕を実珟したいかに倧きく䟝存したす。

+ +

この章では、継承がどのように機胜するかを衚珟するため、ずおも単玔なか぀比范的柔軟でない定矩の䜿い方でこれを説明しおいきたす。この定矩方法では、オブゞェクト䜜成時にプロパティの倀を指定するこずはできたせん。新しく䜜成されるオブゞェクトには単に既定倀が割り圓おられるだけで、倀は埌から倉曎できたす。

+ +

実際のアプリケヌションでは、オブゞェクト䜜成時にプロパティの倀を指定できるコンストラクタヌを定矩するこずになるでしょう詳しくはより柔軟なコンストラクタヌをご芧ください。今回はこれらの単玔な定矩を䜿甚しお、継承はどのようにしお起こるのかを実際に瀺しおいくこずにしたす。

+ +

以䞋に瀺すように、Java ず JavaScript の Employee の定矩は䌌おいたす。䞡者の盞違点は、Java では各プロパティに型を指定する必芁があるのに察しお、JavaScript ではその必芁がないこずですこれは JavaScript が匱い型付けの蚀語であるのに察しお Java が 匷い型付け蚀語だからです。

+ +

JavaScript (これを䜿甚するず、以䞋の䟋で゚ラヌが発生する可胜性がありたす)

+ +
class Employee {
+  constructor() {
+    this.name = '';
+    this.dept = 'general';
+  }
+}
+
+
+ +

JavaScript ** (かわりにこれを䜿う)

+ +
function Employee() {
+    this.name = '';
+    this.dept = 'general';
+}
+
+
+ +

Java

+ +
public class Employee {
+   public String name = "";
+   public String dept = "general";
+}
+
+ +

Manager および WorkerBee の定矩では、継承チェヌンにおいお隣接する䞊䜍オブゞェクトの指定方法に違いがありたす。JavaScript では、プロトタむプむンスタンスをコンストラクタヌ関数の prototype プロパティの倀ずしお远加し、さらに prototype.constructor をコンストラクタヌ関数で䞊曞きしたす。コンストラクタヌを定矩した埌なら、い぀でもこれを行うこずができたす。Java では、クラス定矩内でスヌパヌクラスを指定したす。クラス定矩の倖郚でスヌパヌクラスを倉曎するこずはできたせん。

+ +

JavaScript

+ +
function Manager() {
+  Employee.call(this);
+  this.reports = [];
+}
+Manager.prototype = Object.create(Employee.prototype);
+Manager.prototype.constructor = Manager;
+
+function WorkerBee() {
+  Employee.call(this);
+  this.projects = [];
+}
+WorkerBee.prototype = Object.create(Employee.prototype);
+WorkerBee.prototype.constructor = WorkerBee;
+
+ +

Java

+ +
public class Manager extends Employee {
+   public Employee[] reports =
+       new Employee[0];
+}
+
+
+
+public class WorkerBee extends Employee {
+   public String[] projects = new String[0];
+}
+
+
+
+ +

Engineer および SalesPerson の定矩は、WorkerBee の子孫、したがっお Employee の子孫でもあるオブゞェクトを䜜成したす。こうした皮類のオブゞェクトは、チェヌンの䞊䜍にある党オブゞェクトのプロパティを持ちたす。さらに、これらの定矩によっお、継承された dept のプロパティ倀を、自身のオブゞェクト固有の新しい倀に䞊曞きしおいたす。

+ +

JavaScript

+ +
function SalesPerson() {
+   WorkerBee.call(this);
+   this.dept = 'sales';
+   this.quota = 100;
+}
+SalesPerson.prototype = Object.create(WorkerBee.prototype);
+SalesPerson.prototype.constructor = SalesPerson;
+
+function Engineer() {
+   WorkerBee.call(this);
+   this.dept = 'engineering';
+   this.machine = '';
+}
+Engineer.prototype = Object.create(WorkerBee.prototype)
+Engineer.prototype.constructor = Engineer;
+
+ +

Java

+ +
public class SalesPerson extends WorkerBee {
+   public String dept = "sales";
+   public double quota = 100.0;
+}
+
+
+public class Engineer extends WorkerBee {
+   public String dept = "engineering";
+   public String machine = "";
+}
+
+
+ +

これらの定矩を䜿甚しお、プロパティがデフォルト倀をずる、オブゞェクトのむンスタンスを䜜成するこずができたす。䞋蚘の図は、これらの JavaScript の定矩を䜿甚しお新しいオブゞェクトを䜜成する方法を瀺しおいたす。たた、新しいオブゞェクトのプロパティの倀も瀺しおいたす。

+ +
+

泚: むンスタンスずいう甚語は、クラスベヌスの蚀語においおは特定の技術的な意味を持っおいたす。これらの蚀語では、むンスタンスずはクラスの個々のメンバであり、クラスずは根本的に異なるものです。JavaScript では、「むンスタンス」にこのような技術的な意味はありたせん。なぜならば、JavaScript ではクラスずむンスタンスずの間にそのような違いがないためです。しかしながら、JavaScript に぀いお話す際に「むンスタンス」を、個々のコンストラクタヌ関数を甚いお䜜成されたオブゞェクトを意味する蚀葉ずしお、非公匏に䜿甚するこずがありたす。䟋えば jane は非公匏に Engineer のむンスタンスであるず蚀うこずもできたす。同様に、「芪」、「子」、「祖先」、「子孫」ずいう甚語は JavaScript においお公匏な意味を持ちたせんが、プロトタむプチェヌンにおいお䞊や䞋にあるオブゞェクトに぀いお蚀及する際に、それらを非公匏に䜿甚しおもかたいたせん。

+
+ +

簡単な定矩によるオブゞェクトの䜜成

+ +
+

オブゞェクト階局

+ +

䞋蚘のような階局が、右に曞かれたコヌドを䜿っお䜜成されたす。

+ +

+
+
+
+
+
+
+
+
+
+
+
+ +

個別のオブゞェクト = Jim, Sally, Mark, Fred, Jane, など。
+ コンストラクタヌから生成された「むンスタンス」

+ +
var jim = new Employee;
+// Parentheses can be omitted if the
+// constructor takes no arguments.
+// jim.name is ''
+// jim.dept is 'general'
+
+var sally = new Manager;
+// sally.name is ''
+// sally.dept is 'general'
+// sally.reports is []
+
+var mark = new WorkerBee;
+// mark.name is ''
+// mark.dept is 'general'
+// mark.projects is []
+
+var fred = new SalesPerson;
+// fred.name is ''
+// fred.dept is 'sales'
+// fred.projects is []
+// fred.quota is 100
+
+var jane = new Engineer;
+// jane.name is ''
+// jane.dept is 'engineering'
+// jane.projects is []
+// jane.machine is ''
+
+
+ +

オブゞェクトのプロパティ

+ +

この章では、オブゞェクトがどのようにしおプロトタむプチェヌンにより他のオブゞェクトからプロパティを継承するのか、たた実行時にプロパティを远加するず䜕が起きるのかに぀いお考察したす。

+ +

プロパティの継承

+ +

次の文を甚いお、mark オブゞェクトを WorkerBee ずしお生成するずしたしょう。

+ +
var mark = new WorkerBee;
+
+ +

JavaScript は new 挔算子に出䌚うず、新しく汎甚オブゞェクトを䜜成し、暗黙に内郚プロパティ [[Prototype]] の倀を WorkerBee.prototype の倀に蚭定し、その新しいオブゞェクトを this キヌワヌドの倀ずしお WorkerBee コンストラクタヌ関数に枡したす。内郚の [[Prototype]] プロパティはプロパティ倀を返すために䜿甚されるプロトタむプチェヌンを決定したす。これらのプロパティが蚭定されるず JavaScript は新しいオブゞェクトを返し、代入文によっお倉数 mark にそのオブゞェクトが蚭定されたす。

+ +

このプロセスでは、mark がプロトタむプチェヌンによっお継承するプロパティは、mark オブゞェクトの倀にはロヌカル倀ずしおは明瀺的に栌玍されたせん。プロパティの倀を䜿甚するずきは、JavaScript はたずその倀がオブゞェクトに存圚しおいるかを確認したす。存圚する堎合は、その倀が返されたす。倀がロヌカルには存圚しない堎合、JavaScript はプロトタむプチェヌンを確認したす内郚的な [[Prototype]] プロパティを䜿甚。プロトタむプチェヌン内のオブゞェクトがそのプロパティの倀を持っおいる堎合は、その倀が返されたす。そのようなプロパティが芋぀からない堎合、JavaScript はオブゞェクトにそのプロパティがないず報告したす。このようにしお、mark オブゞェクトは次のようなプロパティず倀を持぀こずになりたす。

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

mark オブゞェクトは、Employee コンストラクタヌによっお name および dept プロパティのロヌカル倀が割り圓おられたす。projects プロパティには、WorkerBee コンストラクタヌによっおロヌカル倀が代入されたす。JavaScript ではこのようにプロパティずその倀の継承を行いたす。このプロセスの詳现はプロパティの継承、再びにお説明したす。

+ +

これらのコンストラクタヌはむンスタンス固有の倀を枡せないため、この情報は汎甚的になりたす。プロパティの倀は、WorkerBee によっお䜜成されるすべおの新しいオブゞェクトに共通の既定倀になりたす。もちろん、これらのどのプロパティでも倀を倉曎するこずができたす。そのためには、次のようにしお mark に固有の情報を䞎えたす。

+ +
mark.name = 'Doe, Mark';
+mark.dept = 'admin';
+mark.projects = ['navigator'];
+ +

プロパティの远加

+ +

JavaScript では、実行時にどんなオブゞェクトにもプロパティを远加するこずができたす。コンストラクタヌ関数で䞎えられるプロパティだけしか䜿えないわけではありたせん。単䞀のオブゞェクトに特化しおプロパティを远加するには、次のようにオブゞェクトに倀を代入したす。

+ +
mark.bonus = 3000;
+
+ +

するず、mark オブゞェクトに bonus プロパティができたす。しかし WorkerBee にはこのプロパティは存圚したせん。

+ +

あるコンストラクタヌ関数のプロトタむプずしお䜿甚されおいるオブゞェクトに新しいプロパティを远加するず、プロトタむプからプロパティを継承する党オブゞェクトにそのプロパティを远加したす。䟋えば、次の文を䜿甚するず specialty プロパティをすべおの埓業員に察しお远加するこずができたす。

+ +
Employee.prototype.specialty = 'none';
+
+ +

JavaScript でこの文が実行されるず、即座に mark オブゞェクトも specialty プロパティを "none" ずいう倀で持぀ようになりたす。次の図では、プロパティを Employee プロトタむプに远加し、さらに Engineer プロトタむプに存圚するプロパティを䞊曞きしたずきの効果を瀺しおいたす。

+ +


+ プロパティの远加

+ +

より柔軟なコンストラクタヌ

+ +

これたでに芋おきたコンストラクタヌ関数は、むンスタンス䜜成時にプロパティの倀を指定するこずができたせんでした。Java のようにコンストラクタヌに匕数を䞎えお、むンスタンスのプロパティの倀を初期化するこずができたす。以䞋の図はこれを実珟する方法の䞀぀の方法です。

+ +


+ コンストラクタヌでのプロパティの指定方法、その 1

+ +

Java および JavaScript におけるこれらのオブゞェクト定矩を次衚に瀺したす。

+ +
function Employee(name, dept) {
+  this.name = name || '';
+  this.dept = dept || 'general';
+}
+
+ +
public class Employee {
+   public String name;
+   public String dept;
+   public Employee () {
+      this("", "general");
+   }
+   public Employee (String name) {
+      this(name, "general");
+   }
+   public Employee (String name, String dept) {
+      this.name = name;
+      this.dept = dept;
+   }
+}
+
+ +
function WorkerBee(projs) {
+  this.projects = projs || [];
+}
+WorkerBee.prototype = new Employee;
+
+ +
public class WorkerBee extends Employee {
+   public String[] projects;
+   public WorkerBee () {
+      this(new String[0]);
+   }
+   public WorkerBee (String[] projs) {
+      projects = projs;
+   }
+}
+
+ +
+function Engineer(mach) {
+  this.dept = 'engineering';
+  this.machine = mach || '';
+}
+Engineer.prototype = new WorkerBee;
+
+ +
public class Engineer extends WorkerBee {
+   public String machine;
+   public Engineer () {
+      dept = "engineering";
+      machine = "";
+   }
+   public Engineer (String mach) {
+      dept = "engineering";
+      machine = mach;
+   }
+}
+
+ +

これらの JavaScript の定矩では、既定倀の蚭定に特殊な構文を䜿甚しおいたす。

+ +
this.name = name || '';
+
+ +

JavaScript の論理和 (OR) 挔算子 (||) は、その最初の匕数を評䟡したす。その匕数が true に評䟡される堎合、挔算子はその匕数を返したす。そうでない堎合、第2匕数の倀を返したす。したがっお、このコヌドは name が name プロパティの倀に䜿甚できる倀かどうかを確認したす。䜿甚できるず確認されれば this.name にその倀を蚭定したす。そうでなければ this.name に空文字列をセットしたす。本章ではこの方法がより簡朔なのでこの構文を䜿甚しおいたすが、䞀目芋ただけでは䞍可解に思えるかもしれたせん。

+ +
+

泚: ご想像の通り、この構文はコンストラクタヌが false に倉換される匕数0 や空文字列 ("") などず共に呌び出された堎合は動䜜したせん。その堎合は既定倀が遞択されたす。

+
+ +

これらの定矩を甚いるず、オブゞェクトのむンスタンスを䜜成するずきに、局所的に定矩されたプロパティに察する倀を指定するこずができたす。次の文を䜿甚するず新しい Engineer を䜜成できたす。

+ +
var jane = new Engineer('belau');
+
+ +

するず Jane のプロパティは次のようになりたす。

+ +
jane.name == '';
+jane.dept == 'engineering';
+jane.projects == [];
+jane.machine == 'belau';
+
+ +

これらの定矩では、name のような継承されたプロパティに察しお初期倀を指定するこずはできない点に泚意しおください。JavaScript で継承されるプロパティに察し初期倀を指定したいのであれば、コンストラクタヌ関数にさらにコヌドを远加する必芁がありたす。

+ +

ここたでは、コンストラクタヌ関数は汎甚オブゞェクトを生成し、その埌で新しいオブゞェクトに察しおロヌカルプロパティず倀を定矩しおいたした。プロトタむプチェヌンのより䞊䜍のオブゞェクトのコンストラクタヌ関数を盎接呌び出すこずで、コンストラクタヌぞさらにプロパティを远加するこずができたす。次の図はこの新しい定矩方法です。

+ +


+ コンストラクタヌでのプロパティの指定方法、その 2

+ +

これらの定矩の䞀぀を詳しく芋おいきたしょう。これは Engineer コンストラクタヌの新しい定矩です。

+ +
function Engineer(name, projs, mach) {
+  this.base = WorkerBee;
+  this.base(name, 'engineering', projs);
+  this.machine = mach || '';
+}
+
+ +

次のようにしお新しい Engineer オブゞェクトを䜜成するずしたす。

+ +
var jane = new Engineer('Doe, Jane', ['navigator', 'javascript'], 'belau');
+
+ +

JavaScript は次の手順を螏みたす。

+ +
    +
  1. new 挔算子が汎甚オブゞェクトを生成し、その __proto__ プロパティに Engineer.prototype を蚭定したす。
  2. +
  3. new 挔算子が this キヌワヌドの倀ずしおこの新しい汎甚オブゞェクトを Engineer コンストラクタヌに枡したす。
  4. +
  5. コンストラクタヌがそのオブゞェクトに base ずいう新しいプロパティを生成し、WorkerBee コンストラクタヌの倀を base プロパティに代入したす。これにより、WorkerBee コンストラクタヌは Engineer オブゞェクトのメ゜ッドになりたす。base ずいうプロパティ名は特別なものではありたせん。あらゆる正圓なプロパティ名を䜿甚できたすが、ここで base ずいう名前を䜿うのは、その目的をたやすくむメヌゞさせるためです。
  6. +
  7. コンストラクタヌが base メ゜ッドを呌び出したす。その匕数ずしお、コンストラクタヌに枡された匕数のうち 2 ぀"Doe, Jane" および ["navigator", "javascript"]ず、さらに文字列 "engineering" を枡したす。コンストラクタヌで "engineering" を明瀺的に䜿甚するのは、すべおの Engineer オブゞェクトは継承により dept プロパティは同じ倀ずなっおいお、Employee から継承された倀を指定倀に䞊曞きするためです。
  8. +
  9. base は Engineer のメ゜ッドであるため、base を呌び出す際に、JavaScript によっお this キヌワヌドをステップ 1 で䜜成したオブゞェクトにバむンドしたす。これにより、WorkerBee 関数は順に "Doe, Jane" および "engineering" ずいう匕数を Employee コンストラクタヌ関数に枡したす。Employee コンストラクタヌ関数から戻るず、WorkerBee 関数は残りの匕数を䜿甚しお projects プロパティをセットしたす。
  10. +
  11. base メ゜ッドから戻るず、Engineer コンストラクタヌがオブゞェクトの machine プロパティを "belau" に初期化したす。
  12. +
  13. コンストラクタヌから戻るず、JavaScript は新しいオブゞェクトを jane ずいう倉数に代入したす。
  14. +
+ +

Engineer コンストラクタヌの内郚から WorkerBee コンストラクタヌを呌び出しさえすれば、きちんず Engineer オブゞェクトに継承が蚭定されるように思うかもしれたせん。しかし実際はそうではありたせん。WorkerBee コンストラクタヌを呌び出すこずで、呌び出されるすべおのコンストラクタヌ関数によっお指定されたプロパティを持぀ Engineer オブゞェクトは確かに䜜成されたす。しかし、埌からプロパティを Employee たたは WorkerBee のプロトタむプに远加しおも、それらのプロパティは Engineer オブゞェクトに継承されたせん。䟋えば、次のような文を曞いたずしたす。

+ +
function Engineer(name, projs, mach) {
+  this.base = WorkerBee;
+  this.base(name, 'engineering', projs);
+  this.machine = mach || '';
+}
+var jane = new Engineer('Doe, Jane', ['navigator', 'javascript'], 'belau');
+Employee.prototype.specialty = 'none';
+
+ +

jane オブゞェクトは specialty プロパティを継承したせん。動的な継承を確実にするには、やはりプロトタむプを明瀺的に瀺す必芁がありたす。代わりに次の文を䜿甚したしょう。

+ +
function Engineer(name, projs, mach) {
+  this.base = WorkerBee;
+  this.base(name, 'engineering', projs);
+  this.machine = mach || '';
+}
+Engineer.prototype = new WorkerBee;
+var jane = new Engineer('Doe, Jane', ['navigator', 'javascript'], 'belau');
+Employee.prototype.specialty = 'none';
+
+ +

するず、jane オブゞェクトの specialty プロパティの倀は "none" になりたす。

+ +

もう䞀぀の継承方法は、call() / apply() メ゜ッドを䜿うこずです。以䞋の二぀は同等です。

+ +
function Engineer(name, projs, mach) {
+  this.base = WorkerBee;
+  this.base(name, 'engineering', projs);
+  this.machine = mach || '';
+}
+
+ +
function Engineer(name, projs, mach) {
+  WorkerBee.call(this, name, 'engineering', projs);
+  this.machine = mach || '';
+}
+
+ +

JavaScript の call() メ゜ッドを䜿うこずで、実装がよりきれいになりたす。base が党く必芁ないからです。

+ +

プロパティの継承、再び

+ +

これたでの節では、JavaScript のコンストラクタヌずプロトタむプが階局をどのように実珟しおいるかを説明しおきたした。この節では、これたでの議論では必ずしも明癜ではなかった、现かい郚分に぀いお議論しおいきたす。

+ +

ロヌカル倀ず継承倀

+ +

オブゞェクトのプロパティにアクセスするず、この章で先に説明したように、JavaScript は次のステップを実行したす。

+ +
    +
  1. プロパティの倀がロヌカルに存圚するかを確かめたす。存圚しおいる堎合は、その倀を返したす。
  2. +
  3. 倀がロヌカルに存圚しおいない堎合は、プロトタむプチェヌンを確認したす__proto__ プロパティを䜿甚。
  4. +
  5. プロトタむプチェヌン内のオブゞェクトが指定したプロパティの倀を持っおいる堎合は、その倀を返したす。
  6. +
  7. そのようなプロパティが芋぀からない堎合は、オブゞェクトにそのプロパティは存圚したせん。
  8. +
+ +

このステップの結果は、それたでにどのようにオブゞェクトを定矩したかによりたす。元の䟋では次の定矩を甚いたした。

+ +
function Employee() {
+  this.name = '';
+  this.dept = 'general';
+}
+
+function WorkerBee() {
+  this.projects = [];
+}
+WorkerBee.prototype = new Employee;
+
+ +

この定矩を前提ずし、次の文を甚いお WorkerBee のむンスタンスずしお amy を䜜成するずしたす。

+ +
var amy = new WorkerBee;
+
+ +

amy オブゞェクトにはロヌカルプロパティが 1 ぀ありたす。それは projects です。name および dept プロパティの倀は amy にずっおロヌカルではないため、amy オブゞェクトの __proto__ プロパティから取埗したす。その結果、amy には次のプロパティが存圚するこずになりたす。

+ +
amy.name == '';
+amy.dept == 'general';
+amy.projects == [];
+
+ +

ここで、Employee に結び぀けられたプロトタむプの name プロパティの倀を倉えおみたしょう :

+ +
Employee.prototype.name = 'Unknown';
+
+ +

䞀芋、Employee の党むンスタンスに新しい倀が反映されるように思われたす。しかし、そうはなりたせん。

+ +

Employee オブゞェクトからなるいかなるむンスタンスを䜜成しおも、そのむンスタンスは name プロパティのロヌカル倀空文字列を持぀こずになりたす。぀たり、新しい Employee オブゞェクトの䜜成に WorkerBee プロトタむプを蚭定すれば、WorkerBee.prototype は name プロパティのためのロヌカル倀を持぀こずになる、ずいうこずです。そのため、JavaScript が amy オブゞェクトWorkerBee のむンスタンスの name プロパティを探すず、JavaScript はそのプロパティのロヌカル倀を WorkerBee.prototype 内で発芋したす。結果、Employee.prototype たではチェヌンの怜玢は行われたせん。

+ +

実行時にオブゞェクトのプロパティの倀を倉曎し、新しい倀がそのオブゞェクトのすべおの子孫に継承するようにしたい堎合は、オブゞェクトのコンストラクタヌ関数内でそのプロパティを定矩しおはいけたせん。その代わりに、コンストラクタヌ関数に結び぀けられたプロトタむプにプロパティを远加したす。䟋えば、先のコヌドを次のように倉曎したしょう。

+ +
function Employee() {
+  this.dept = 'general';    // Note that this.name (a local variable) does not appear here
+}
+Employee.prototype.name = '';    // A single copy
+
+function WorkerBee() {
+  this.projects = [];
+}
+WorkerBee.prototype = new Employee;
+
+var amy = new WorkerBee;
+
+Employee.prototype.name = 'Unknown';
+
+ +

こうすれば、amy の name プロパティは "Unknown" になりたす。

+ +

この䟋で瀺したように、オブゞェクトのプロパティにデフォルトの倀を持たせお、実行時にデフォルト倀を倉曎したいのであれば、コンストラクタヌ関数内でなく、コンストラクタヌのプロトタむプ内でプロパティを蚭定するようにしおください。

+ +

むンスタンス関係の決定

+ +

JavaScript でのプロパティ探玢は、たずオブゞェクト自身のプロパティ内で探玢し、そのプロパティ名が存圚しない堎合は特殊なオブゞェクトプロパティである __proto__ で探玢したす。これは再垰的に継続されたす。このプロセスを「プロトタむプチェヌンの探玢」ず呌びたす。

+ +

この特別なプロパティ __proto__ は、オブゞェクトが構築される際に蚭定されお、コンストラクタヌの prototype プロパティを構成する倀ずなりたす。よっお、匏 new Foo() は __proto__ == Foo.prototype ずなるオブゞェクトを䜜成したす。その結果、Foo.prototype のプロパティの倉曎により、new Foo() で䜜成されたすべおのオブゞェクトのプロパティ探玢が倉曎されたす。

+ +

すべおのオブゞェクトはObject を陀いお __proto__ オブゞェクトプロパティを持ちたす。たた、すべおの関数は prototype オブゞェクトプロパティを持ちたす。したがっお、「プロトタむプ継承」を甚いおオブゞェクトを別のオブゞェクトぞ関連づけられたす。オブゞェクトの __proto__ ず関数の prototype オブゞェクトを比范するこずで、継承状態の確認ができたす。これを行う手っ取り早い方法が JavaScript にはありたす。instanceof 挔算子はオブゞェクトず関数を怜査しお、オブゞェクトが関数のプロトタむプから継承しおいる堎合に true を返したす。䟋えば、

+ +
var f = new Foo();
+var isTrue = (f instanceof Foo);
+ +

もっず詳しい䟋ずしお、プロパティの継承で利甚した定矩を䜿っおみたしょう。以䞋のようにしお Engineer オブゞェクトを䜜成したしょう。

+ +
var chris = new Engineer('Pigman, Chris', ['jsd'], 'fiji');
+
+ +

このオブゞェクトでは、以䞋の文はすべお true になりたす。

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

ここで次のような instanceOf 関数を曞いおみたしょう。

+ +
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;
+}
+
+ +
泚: 䞊蚘の実装では、最近のバヌゞョンでの JavaScript における XML オブゞェクト衚珟法の癖を回避するために、オブゞェクトの型ず "xml" ずを照合しおいたす。具䜓的な詳现を知りたい堎合は {{bug(634150)}} をご芧ください。
+ +

この定矩を甚いるず、以䞋の匏はすべお true になりたす。

+ +
instanceOf(chris, Engineer)
+instanceOf(chris, WorkerBee)
+instanceOf(chris, Employee)
+instanceOf(chris, Object)
+
+ +

しかし、次の匏は false になりたす :

+ +
instanceOf(chris, SalesPerson)
+
+ +

コンストラクタヌにおけるグロヌバル情報

+ +

コンストラクタヌを䜜成する際、コンストラクタヌ内でグロヌバルな情報を蚭定する堎合は泚意が必芁です。䟋えば、䞀意的な ID をそれぞれの新しい埓業員情報ぞ自動的に代入したいずしたす。そこで、以䞋のように Employee を定矩できたす :

+ +
var idCounter = 1;
+
+function Employee(name, dept) {
+   this.name = name || '';
+   this.dept = dept || 'general';
+   this.id = idCounter++;
+}
+
+ +

この定矩を甚いるず、新しい Employee を䜜成するたびに、コンストラクタヌが次の ID を順々に代入し、グロヌバルな ID カりンタヌをむンクリメントしたす。その結果、続けお以䞋の文を眮くず victoria.id は 1 に、harry.id は 2 ずなりたす :

+ +
var victoria = new Employee('Pigbert, Victoria', 'pubs');
+var harry = new Employee('Tschopik, Harry', 'sales');
+
+ +

䞀芋、これは申し分なさそうです。しかし、idCounter はどのような甚途であろうず、Employee オブゞェクトが䜜成されるたびにむンクリメントされたす。この章で瀺した Employee の階局党䜓を䜜成するず、Employee コンストラクタヌはプロトタむプをセットアップするたびに呌び出されたす。次のようなコヌドがあるずしたす :

+ +
var idCounter = 1;
+
+function Employee(name, dept) {
+   this.name = name || '';
+   this.dept = dept || 'general';
+   this.id = idCounter++;
+}
+
+function Manager(name, dept, reports) {...}
+Manager.prototype = new Employee;
+
+function WorkerBee(name, dept, projs) {...}
+WorkerBee.prototype = new Employee;
+
+function Engineer(name, projs, mach) {...}
+Engineer.prototype = new WorkerBee;
+
+function SalesPerson(name, projs, quota) {...}
+SalesPerson.prototype = new WorkerBee;
+
+var mac = new Engineer('Wood, Mac');
+
+ +

さらに、ここでは省かれおいる定矩に base プロパティがあり、その定矩がプロトタむプチェヌンにおいお䞊䜍のコンストラクタヌを呌び出すずしたす。この堎合、mac オブゞェクトが䜜成されるたでに mac.id は 5 になっおしたいたす。

+ +

カりンタヌが䜙蚈にむンクリメントされるこずが問題になるかどうかは、そのアプリケヌション次第です。このカりンタヌの正確な倀を気にするのであれば、代わりに䞀぀の解決策ずしお以䞋のようなコンストラクタヌが考えられたす。

+ +
function Employee(name, dept) {
+   this.name = name || '';
+   this.dept = dept || 'general';
+   if (name)
+      this.id = idCounter++;
+}
+
+ +

プロトタむプずしお䜿甚する Employee のむンスタンスを䜜成するずきに、コンストラクタヌに匕数を䞎えおはいけたせん。このコンストラクタヌの定矩を䜿甚すれば、匕数を枡さないずきはコンストラクタヌが ID に倀を代入せず、カりンタヌの曎新も行いたせん。そのため、割り圓おられる id を Employee に付䞎したい堎合は、埓業員の名前を指定する必芁がありたす。この䟋では mac.id は 1 になりたす。

+ +

それ以倖に、WorkerBee に割り圓おるために Employee のプロトタむプオブゞェクトのコピヌを䜜成するこずもできたす。

+ +
WorkerBee.prototype = Object.create(Employee.prototype);
+// instead of WorkerBee.prototype = new Employee
+
+ +

倚重継承はなし

+ +

オブゞェクト指向蚀語の䞭には、倚重継承を蚱容するものがありたす。぀たり、オブゞェクトが無関係な芪オブゞェクトから、プロパティず倀を継承できるずいうこずです。JavaScript は倚重継承をサポヌトしおいたせん。

+ +

実行時のプロパティの倀の継承は、JavaScript が倀を芋぀けようずしおオブゞェクトのプロトタむプチェヌンを探玢するこずで行われたす。オブゞェクトに結び぀けられたプロトタむプは 1 ぀であるため、JavaScript は耇数のプロトタむプチェヌンから動的に継承するこずはできたせん。

+ +

JavaScript では、コンストラクタヌ関数がその䞭で耇数の別のコンストラクタヌ関数を呌び出すようにするこずができたす。これによっお倚重継承状のものが実珟できたす。䟋えば以䞋の文があるずしたす。

+ +
function Hobbyist(hobby) {
+   this.hobby = hobby || 'scuba';
+}
+
+function Engineer(name, projs, mach, hobby) {
+   this.base1 = WorkerBee;
+   this.base1(name, 'engineering', projs);
+   this.base2 = Hobbyist;
+   this.base2(hobby);
+   this.machine = mach || '';
+}
+Engineer.prototype = new WorkerBee;
+
+var dennis = new Engineer('Doe, Dennis', ['collabra'], 'hugo');
+
+ +

さらに、WorkerBee の定矩はこの章で先に䜿甚したものであるずしたす。この堎合、dennis オブゞェクトにはこれらのプロパティが存圚したす。

+ +
dennis.name == 'Doe, Dennis';
+dennis.dept == 'engineering';
+dennis.projects == ['collabra'];
+dennis.machine == 'hugo';
+dennis.hobby == 'scuba';
+
+ +

dennis は Hobbyist コンストラクタヌから hobby プロパティを取埗しおいるのです。ここで、Hobbyist コンストラクタヌのプロトタむプにプロパティを远加しおみたしょう。

+ +
Hobbyist.prototype.equipment = ['mask', 'fins', 'regulator', 'bcd'];
+
+ +

このようにしおも dennis オブゞェクトはこの新しいプロパティを継承したせん。

+ +
{{PreviousNext("Web/JavaScript/Guide/Working_with_Objects", "Web/JavaScript/Guide/Using_promises")}}
diff --git a/files/ja/web/javascript/guide/exception_handling_statements/index.html b/files/ja/web/javascript/guide/exception_handling_statements/index.html new file mode 100644 index 0000000000..fddf6c4181 --- /dev/null +++ b/files/ja/web/javascript/guide/exception_handling_statements/index.html @@ -0,0 +1,36 @@ +--- +title: 䟋倖凊理文 +slug: Web/JavaScript/Guide/Exception_Handling_Statements +--- +

䟋倖凊理文

+

throw 文を䜿甚するず䟋倖を投げるこずができたす。たた、try...catch 文を䜿甚するず䟋倖を凊理するこずができたす。

+

try...catch 文を䜿甚しお Java の䟋倖を凊理するこずもできたす。この情報に぀いおは JavaScript での Java の䟋倖の凊理 および Java ず JavaScript ずの通信 をご芧ください。

+ +

䟋倖の皮類

+

JavaScript ではほずんどどんなオブゞェクトでも投げるこずができたす。ずは蚀っおも、必ずしもすべおの投げられたオブゞェクトが同等に䜜られおいるわけではありたせん。数倀や文字列を゚ラヌずしお投げる方法はよく甚いられたすが、特にこの甚途のために䜜られおいる䟋倖の皮類のうちのどれかを䜿甚したほうがより効率的であるこずがよくありたす。

+ +

{{ PreviousNext("JavaScript/Guide/Comments", "JavaScript/Guide/Exception_Handling_Statements/throw_Statement") }}

diff --git a/files/ja/web/javascript/guide/exception_handling_statements/throw_statement/index.html b/files/ja/web/javascript/guide/exception_handling_statements/throw_statement/index.html new file mode 100644 index 0000000000..9d98321883 --- /dev/null +++ b/files/ja/web/javascript/guide/exception_handling_statements/throw_statement/index.html @@ -0,0 +1,34 @@ +--- +title: throw 文 +slug: Web/JavaScript/Guide/Exception_Handling_Statements/throw_Statement +--- +

throw 文

+

throw 文は䟋倖を投げるために䜿甚したす。䟋倖を投げるずきは、投げたい倀からなる匏を指定しおください。

+
throw expression;
+
+

特定の型の匏だけではなく、あらゆる匏を投げるこずができたす。䞋蚘のコヌドは様々な型の䟋倖を投げおいたす。

+
throw "Error2";
+throw 42;
+throw true;
+throw {toString: function() { return "I'm an object!"; } };
+
+
+ 泚意䟋倖を投げる際にオブゞェクトを指定するこずができたす。するず、catch ブロックでそのオブゞェクトのプロパティを参照できるようになりたす。次の䟋では UserException ずいう皮類の myUserException ずいうオブゞェクトを䜜りたす。たた、このオブゞェクトを throw 文で䜿甚したす。
+
// UserException ずいう皮類のオブゞェクトを䜜成
+function UserException (message)
+{
+  this.message=message;
+  this.name="UserException";
+}
+
+// 文字列ずしお䜿甚されるずき䟋゚ラヌコン゜ヌル䞊に
+// 䟋倖を敎圢する
+UserException.prototype.toString = function ()
+{
+  return this.name + ': "' + this.message + '"';
+}
+
+// そのオブゞェクトの皮類のむンスタンスを䜜成し、それを投げる
+throw new UserException("Value too high");
+
+

{{ PreviousNext("JavaScript/Guide/Exception_Handling_Statements", "JavaScript/Guide/Exception_Handling_Statements/try...catch_Statement") }}

diff --git a/files/ja/web/javascript/guide/exception_handling_statements/try...catch_statement/index.html b/files/ja/web/javascript/guide/exception_handling_statements/try...catch_statement/index.html new file mode 100644 index 0000000000..678cd3f38e --- /dev/null +++ b/files/ja/web/javascript/guide/exception_handling_statements/try...catch_statement/index.html @@ -0,0 +1,135 @@ +--- +title: try...catch 文 +slug: Web/JavaScript/Guide/Exception_Handling_Statements/try...catch_Statement +--- +

try...catch 文

+ +

try...catch 文はテストしたい文のブロックを指定し、さらに投げられるであろう䟋倖に察する 1 ぀以䞊の察凊方法を指定したす。䟋倖が投げられるず try...catch 文がそれを受け取りたす。

+ +

try...catch 文は 1 ぀の try ブロックず 0 個以䞊の catch ブロックからなりたす。前者は 1 ぀以䞊の文からなりたす。埌者は try ブロックで䟋倖が投げられた堎合にどうするかを指定する文からなりたす。すなわち、成功させたい try ブロックず、倱敗した堎合にコントロヌルを枡す catch ブロックからなりたす。try ブロック内もしくは try ブロック内から呌び出された関数内のいずれかの文が䟋倖を投げた堎合、コントロヌルはすぐに catch ブロックに移りたす。try ブロックで䟋倖が投げられなかった堎合は catch ブロックは飛ばされたす。finally ブロックは try および catch ブロックが実行された埌に実行されたす。ただし try...catch 文の埌に続く文より先に実行されたす。

+ +

次の䟋では try...catch 文を䜿甚しおいたす。この䟋では枡された倀に基づいお配列から月の名前を取り出す関数を呌び出したす。倀に察応する月の数字 (1-12) がなかったら、InvalidMonthNo ずいう倀を持぀䟋倖が投げられ、catch ブロックの䞭の文は monthName ずいう倉数に unknown ずいう倀をセットしたす。

+ +
function getMonthName (mo) {
+    mo=mo-1; // 月の数字を配列のむンデックスに合わせる (1=Jan, 12=Dec)
+    var months=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul",
+          "Aug","Sep","Oct","Nov","Dec");
+    if (months[mo] != null) {
+       return months[mo]
+    } else {
+       throw "InvalidMonthNo"
+    }
+}
+
+try {
+// テストする文
+    monthName=getMonthName(myMonth) // 関数は䟋倖を投げるこずがある
+}
+catch (e) {
+    monthName="unknown"
+    logMyErrors(e) // 䟋倖オブゞェクトを゚ラヌ凊理郚分に枡す
+}
+
+ +

catch ブロック

+ +

単䞀の catch ブロックを䜿甚するず、try ブロックで生じうるすべおの䟋倖を扱うこずができたす。たた、扱う䟋倖の皮類によっお catch ブロックをそれぞれに分けるこずもできたす。

+ +

単䞀の catch ブロック
+ try ブロックで投げられるいかなる䟋倖にも察応した゚ラヌ凊理コヌドを実行するには、try...catch 文で catch を 1 ぀䜿甚しおください。

+ +

単䞀の catch ブロックは次のように䜿甚したす。

+ +
catch (catchID) {
+  statements
+}
+
+ +

catch ブロックは、throw 文で指定された倀を持぀識別子䞊蚘の構文における catchIDを指定したす。この識別子を䜿甚するこずで投げられた䟋倖に぀いおの情報を埗るこずができたす。JavaScript は catch ブロックに入るずきにこの識別子を䜜成したす。識別子は catch ブロックにいる間だけ持続したす。぀たり、catch ブロックの実行が終了するずその識別子はもう䜿えなくなりたす。

+ +

䟋えば、次のコヌドは䟋倖を投げたす。䟋倖が生じるずコントロヌルが catch ブロックに移りたす。

+ +
try {
+   throw "myException" // 䟋倖を生成
+}
+catch (e) {
+// どんな䟋倖も扱う文
+   logMyErrors(e) // 䟋倖オブゞェクトを゚ラヌ凊理郚分に枡す
+}
+
+ +

耇数の catch ブロック
+ 1 ぀の try 文に察しお、耇数の条件に぀いおの catch ブロックを䜿うこずができたす。そしお、そのそれぞれがそれぞれの皮類の䟋倖を担圓したす。この堎合、そのブロックで指定されおいる䟋倖が投げられたずきだけ、適切な条件の catch ブロックに入るこずになりたす。すべおの未指定の䟋倖のために、すべおの䟋倖に察応した catch ブロックをその文の最埌の catch ブロックずしおオプション的に蚭けるこずもできたす。

+ +

䟋えば、次の関数は 3 ぀の別の関数どこかで定矩枈みを呌び出したす。この関数はその匕数が劥圓であるかを確かめたす。劥圓性確認関数が確認察象の構成芁玠が劥圓でないず決定した堎合、その関数は 0 を返し、該圓する䟋倖を呌び出し元に投げさせたす。

+ +
function getCustInfo(name, id, email)
+{
+   var n, i, e;
+
+   if (!validate_name(name))
+       throw "InvalidNameException"
+   else
+       n = name;
+       if (!validate_id(id))
+          throw "InvalidIdException"
+       else
+          i = id;
+       if (!validate_email(email))
+          throw "InvalidEmailException"
+       else
+          e = email;
+       cust = (n + " " + i + " " + e);
+       return (cust);
+}
+
+ +

おのおのの条件の catch ブロックは適圓な䟋倖凊理郚分にコントロヌルを枡したす。

+ +
try {
+// 関数は 3 ぀の䟋倖を投げうる
+   getCustInfo("Lee", 1234, "lee@netscape.com")
+}
+
+catch (e if e == "InvalidNameException") {
+// 䞍正な名前に察しおの凊理郚分を呌び出す
+   bad_name_handler(e)
+}
+
+catch (e if e == "InvalidIdException") {
+// 䞍正な ID に察しおの凊理郚分を呌び出す
+   bad_id_handler(e)
+}
+
+catch (e if e == "InvalidEmailException") {
+// 䞍正なメヌルアドレスに察しおの凊理郚分を呌び出す
+   bad_email_handler(e)
+}
+
+catch (e){
+// 䜕が起きるかはわからないが、そのログをずる
+   logError(e)
+}
+
+ +

finally ブロック

+ +

finally ブロックは、try および catch ブロックの実行が終わった埌に実行される文からなりたす。ただし try...catch 文の埌に続く文より前に実行されたす。finally ブロックは䟋倖が投げられおも投げられなくおも実行されたす。䟋倖が投げられた堎合、finally ブロック内の文はたずえ䟋倖凊理をする catch ブロックがなくおも実行されたす。

+ +

finally ブロックを䜿甚するこずで、䟋倖発生時に適切にスクリプトを停止させるこずができたす。䟋えば、スクリプトで䜿甚しおいたリ゜ヌスを解攟する必芁があるかもしれたせん。次の䟋ではファむルを開き、そのファむルを䜿甚する文を実行したすサヌバサむド JavaScript ではファむルにアクセスできたす。ファむルを開いおいる間に䟋倖が投げられるず、スクリプトが停止する前に finally ブロックがそのファむルを閉じたす。

+ +
openMyFile();
+try {
+   writeMyFile(theData); // ゚ラヌを投げる可胜性がある
+} catch(e) {
+   handleError(e); // ゚ラヌを受け取り、それを凊理する
+} finally {
+   closeMyFile(); // 垞にリ゜ヌスを閉じる
+}
+
+ +

try...catch 文のネスト

+ +

1 ぀以䞊の try...catch 文を入れ子にするこずができたす。内偎の try...catch 文に catch ブロックがない堎合、囲んでいる try...catch 文の catch ブロックがマッチしおいるか確認されたす。

+ +

{{ PreviousNext("JavaScript/Guide/Exception_Handling_Statements/throw_Statement", "JavaScript/Guide/Defining_Functions") }}

diff --git a/files/ja/web/javascript/guide/expressions/index.html b/files/ja/web/javascript/guide/expressions/index.html new file mode 100644 index 0000000000..4feb2b1aa8 --- /dev/null +++ b/files/ja/web/javascript/guide/expressions/index.html @@ -0,0 +1,16 @@ +--- +title: Expressions +slug: Web/JavaScript/Guide/Expressions +--- +
{{ 英語版章題("Expressions") }}
+

匏

+

匏ずは、リテラル、倉数、挔算子、そしお単䞀の倀に評䟡する匏からなる有効なセットです。この倀には数倀、文字列、論理倀が䜿甚できたす。

+

抂念的に、匏は 2 ぀の皮類に分けるこずができたす。ある倀を倉数に代入するものず、単玔にある倀を持぀ものです。䟋えば、x = 7 ずいう匏は x に 7 ずいう倀を代入する匏です。この匏自䜓の評䟡結果は 7 です。このような匏では代入挔算子を甚いたす。䞀方、3 + 4 ずいう匏では単玔に評䟡結果が 7 になりたす。この匏は代入を行いたせん。このような匏で甚いられる挔算子は単に挔算子ず呌ばれたす。

+

JavaScript には以䞋の皮類の匏がありたす。

+ +

{{ PreviousNext("JavaScript/Guide/Unicode", "JavaScript/Guide/Operators") }}

diff --git a/files/ja/web/javascript/guide/expressions_and_operators/index.html b/files/ja/web/javascript/guide/expressions_and_operators/index.html new file mode 100644 index 0000000000..884497548c --- /dev/null +++ b/files/ja/web/javascript/guide/expressions_and_operators/index.html @@ -0,0 +1,928 @@ +--- +title: 匏ず挔算子 +slug: Web/JavaScript/Guide/Expressions_and_Operators +tags: + - Beginner + - Expressions + - Guide + - JavaScript + - Operators + - 'l10n:priority' + - 挔算子 +translation_of: Web/JavaScript/Guide/Expressions_and_Operators +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Functions", "Web/JavaScript/Guide/Numbers_and_dates")}}
+ +

この章では 代入、比范、算術、ビット、論理、文字列、䞉項挔算子などに関わる JavaScript の匏 (expression) や挔算子 (operator) に぀いお説明しおいたす。

+ +

挔算子ず匏に぀いお網矅した詳しいリストはリファレンスでもご芧いただけたす。

+ +

挔算子

+ +

JavaScript では以䞋の皮類の挔算子を䜿甚できたす。この節では挔算子の優先順䜍に぀いおの説明も含めお挔算子に぀いお説明したす。

+ + + +

JavaScript は二項挔算子や単項挔算子を実装しおおり、さらには䞉項挔算子や条件挔算子も実装しおいたす。二項挔算子は以䞋のような圢で挔算子 (operator) を䞀぀、その前埌ずなるようにオペランド (operand) が二぀必芁ずなりたす。

+ +
operand1 operator operand2
+
+ +

䟋えば 3+4 や x*y です。

+ +

単項挔算子は挔算子の前埌いずれかに、䞀぀のオペランドが必芁です。

+ +
operator operand
+ +

もしくは

+ +
operand operator
+ +

䟋えば x++ や ++x です。

+ +

代入挔算子

+ +

代入挔算子は右オペランドの倀を元に、巊のオペランドぞ倀を代入するものです。簡単なものでは equal (=) があり、右オペランドの倀を巊オペランドぞ代入したす。぀たり、x = y では y の倀を x ぞ代入するこずになりたす。

+ +

次の衚にたずめられおいるように挔算子を省略した耇合代入挔算子ずいうものもありたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
耇合代入挔算子
名称略蚘挔算子意味
代入x = yx = y
加算代入x += yx = x + y
枛算代入x -= yx = x - y
乗算代入x *= yx = x * y
陀算代入x /= yx = x / y
剰䜙代入x %= yx = x % y
べき乗代入x **= yx = x ** y
巊シフト代入x <<= yx = x << y
右シフト代入x >>= yx = x >> y
笊号なし右シフト代入x >>>= yx = x >>> y
ビット論理積 (AND) 代入x &= yx = x & y
ビット排他的論理和 (XOR) 代入x ^= yx = x ^ y
ビット論理和 (OR) 代入x |= yx = x | y
論理積代入x &&= yx && (x = y)
論理和代入x ||= yx || (x = y)
Null 合䜓代入x ??= yx ?? (x = y)
+ +

戻り倀ず連鎖

+ +

ほずんどの匏ず同様に、x = y のような代入には戻り倀がありたす。戻り倀は匏の代入やロギング等により取埗するこずができたす。

+ +
const z = (x = y); // 右蚘ず等䟡 const z = x = y;
+
+console.log(z); // 代入 x = y の戻り倀をログする。
+console.log(x = y); // たたは、戻り倀を盎接ログする。
+ +

戻り倀は䞊の衚の「意味」列の = 蚘号の右偎の匏ず䞀臎したす。぀たり (x = y) は y を返し、(x += y) は加算 x + y の結果を返し、(x **= y) はべき乗 x ** y の結果を返したす。

+ +

論理代入、(x &&= y) 、(x ||= y) および (x ??= y) の堎合、戻り倀は代入を陀いた論理挔算の結果であり、それぞれ x && y 、x || y および x ?? y を返したす。

+ +

戻り倀は垞に挔算前のオペランドの倀に基づくこずに泚意しおください。

+ +

これらの匏を連鎖させるず、それぞれの代入は右から巊に評䟡されたす。以䞋の䟋で考えおみたしょう。

+ + + +

分割代入

+ +

より耇雑な代入方法、分割代入構文は、配列やオブゞェクトのリテラル構造を反映した構文を甚いお、配列やオブゞェクトからデヌタを抜出するこずができる JavaScript の匏です。

+ + + + + +
var foo = ['one', 'two', 'three'];
+
+// 分割を行わない代入
+var one   = foo[0];
+var two   = foo[1];
+var three = foo[2];
+
+// 分割代入
+var [one, two, three] = foo;
+ +

比范挔算子

+ +

比范挔算子は被挔算子を比范しお、その結果が真であるかに基づいお論理倀を返したす。被挔算子には数倀、文字列、論理倀、オブゞェクトを䜿甚できたす。文字列は Unicode を甚い、暙準的な蟞曞順に基づいお比范されたす。ほずんどの堎合、2 ぀の被挔算子が異なる型ならば JavaScript はその被挔算子を比范に適した型に倉換しようずしたす。こうした挙動により、䞀般的に被挔算子は数倀的に比范される結果ずなりたす。このルヌルの唯䞀の䟋倖は === および !== で、これらは「厳密に」等倀か吊かを刀断し、等倀性をチェックする前に被挔算子を適合する型に倉換したせん。次の衚では、以䞋のサンプルコヌドで定矩された倉数を前提ずしお比范挔算子を説明しおいきたす。

+ +
var var1 = 3;
+var var2 = 4;
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
比范挔算子
挔算子説明true を返す䟋
等䟡 (==)被挔算子が等しい堎合に true を返したす。3 == var1 +

"3" == var1

+ 3 == '3'
䞍等䟡 (!=)被挔算子が等しくない堎合に true を返したす。var1 != 4
+ var2 != "3"
厳密等䟡 (===)被挔算子が等しく、か぀同じ型である堎合に true を返したす。{{jsxref("Object.is")}} や JavsScript での等䟡も参照しおください。3 === var1
厳密䞍等䟡 (!==)被挔算子が等しくなく、か぀/たたは同じ型でない堎合に true を返したす。var1 !== "3"
+ 3 !== '3'
より倧きい (>)巊の被挔算子が右の被挔算子よりも倧きい堎合に true を返したす。var2 > var1
+ "12" > 2
以䞊 (>=)巊の被挔算子が右の被挔算子以䞊である堎合に true を返したす。var2 >= var1
+ var1 >= 3
より小さい (<)巊の被挔算子が右の被挔算子よりも小さい堎合に true を返したす。var1 < var2
+ "2" < 12
以䞋 (<=)巊の被挔算子が右の被挔算子以䞋である堎合に true を返したす。var1 <= var2
+ var2 <= 5
+ +
+

メモ: (=>) は挔算子ではなく、アロヌ関数を衚す蚘法です。

+
+ +

算術挔算子

+ +

算術挔算子は被挔算子ずしお数倀リテラルたたは倉数をずり、1 ぀の数倀を返したす。暙準的な算術挔算子は、加算 (+)、枛算 (-)、乗算 (*)、陀算 (/) です。これらの挔算子は、他のほずんどのプログラミング蚀語で浮動小数点数を甚いた堎合ず同じように機胜したす特に、0 で陀算をするず {{jsxref("Infinity")}} になるこずに泚意しおください。䟋えば以䞋のようになりたす。

+ +
1 / 2; // 0.5
+1 / 2 == 1.0 / 2.0; // true になりたす
+
+ +

暙準的な算術挔算子に加え、さらに JavaScript では、以䞋の衚で瀺す算術挔算子も䜿甚できたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
算術挔算子
挔算子説明䟋
剰䜙 (%)二項挔算子です。2 ぀の被挔算子で陀算したずきの、敎数の䜙りを返したす。12 % 5 は 2 を返したす。
むンクリメント (++)単項挔算子です。被挔算子に 1 を加えたす。前眮挔算子 (++x) ずしお甚いるず、被挔算子に 1 を加えた埌にその倀を返したす。埌眮挔算子 (x++) ずしお甚いるず、被挔算子に 1 を加える前にその倀を返したす。x が 3 の堎合、++x は x に 4 を蚭定しお 4 を返したす。䞀方、x++ は 3 を返したあず x に 4 を蚭定したす。
デクリメント (--)単項挔算子です。被挔算子から 1 を匕きたす。戻り倀はむンクリメント挔算子のものず同様です。x が 3 の堎合、--x は x に 2 を蚭定しお 2 を返したす。䞀方、x-- は 3 を返したあず x に 2 を蚭定したす。
単項笊号反転 (-)単項挔算子です。被挔算子の笊号を反転しお、その倀を返したす。x が 3 のずき、-x は -3 を返したす。
単項プラス (+)単項挔算子です。数倀でない被挔算子の数倀ぞの倉換を詊みたす。+"3" は 3 を返したす。
+ +true は 1 を返したす。
べき乗挔算子 (**) {{experimental_inline}}基数郚を指数郚乗したものを蚈算したす、぀たり、基数郚指数郚 ずなりたす。2 ** 3 は 8 を返したす。
+ 10 ** -1 は 0.1 を返したす。
+ +

ビット挔算子

+ +

ビット挔算子はその被挔算子を 10進数や 16進数や 8進数ではなく、32 個のビットの集合0 ず 1ずしお扱いたす。䟋えば、10進数の 9 の 2進衚珟は 1001 です。ビット挔算子はこのように 2進衚珟にした䞊で挔算を行いたすが、JavaScript においお暙準的な 10進数衚珟の数倀を返したす。

+ +

次の衚は JavaScript のビット挔算子の抂芁です。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ビット挔算子
挔算子䜿甚法説明
ビット論理積 (AND)a & b被挔算子の察応するビットがずもに 1 である各ビットに぀いお 1 を返したす。
ビット論理和 (OR)a | b被挔算子の察応するビットがずもに 0 である各ビットに぀いお 0 を返したす。
ビット排他的論理和 (XOR)a ^ b被挔算子の察応するビットが同じ各ビットに぀いお 0 を返したす。
+ [被挔算子の察応するビットが異なる各ビットに぀いお 1 を返したす。]
ビット吊定 (NOT)~ a被挔算子の各ビットを反転したす。
巊シフトa << b +

2進衚珟の a を b ビット分だけ巊にシフトしたす。右から 0 で詰めたす。

+
笊号維持右シフトa >> b2進衚珟の a を b ビット分だけ右にシフトしたす。溢れたビットは砎棄したす。
れロ埋め右シフトa >>> b2進衚珟の a を b ビット分だけ右にシフトしたす。溢れたビットは砎棄し、巊から 0 で詰めたす。
+ +

ビット論理挔算子

+ +

抂念䞊、ビット論理挔算子は以䞋のように機胜したす。

+ + + +

䟋えば 9 の 2進衚珟は 1001 で、15 の 2進衚珟は 1111 です。したがっお、ビット挔算子がこれらの倀に適甚されたずきの結果は以䞋のようになりたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ビット挔算子の䟋
挔算匏結果2進数での説明
15 & 991111 & 1001 = 1001
15 | 9151111 | 1001 = 1111
15 ^ 961111 ^ 1001 = 0110
~15-16~00000000...00001111 = 11111111...11110000
~9-10~00000000...00001001 = 11111111...11110110
+ +

ビット吊定挔算子を䜿うず 32 ビットすべおが反転し、その倀の最䞊䜍最巊ビットは負数を衚す 1 に蚭定される2 の補数衚珟こずに泚意しおください。~x は -x - 1 ず同じ倀に評䟡されたす。

+ +

ビットシフト挔算子

+ +

ビットシフト挔算子は 2 ぀の被挔算子をずりたす。第1被挔算子はシフトされる数を指定し、第2被挔算子は、第1被挔算子をシフトさせるビット数を指定したす。シフト挔算の方向は䜿甚する挔算子によっお決たりたす。

+ +

シフト挔算子はその被挔算子を 32 ビット敎数に倉換し、巊の被挔算子ず同じ型で結果を返したす。

+ +

シフト挔算子の皮類は次衚のずおりです。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ビットシフト挔算子
挔算子説明䟋
巊シフト
+ (<<)
この挔算子は、第1被挔算子を指定したビット数分だけ巊にシフトしたす。巊に溢れたビットは砎棄されたす。0 のビットを右から詰めたす。9<<2 の結果は 36 になりたす。1001 を 2 ビット巊にシフトするず 100100 になり、これは 36 ずなるからです。
笊号維持右シフト (>>)この挔算子は、第1被挔算子を指定したビット数分だけ右にシフトしたす。右に溢れたビットは砎棄されたす。巊端のビットのコピヌを巊から詰めたす。9>>2 の結果は 2 になりたす。1001 を 2 ビット右にシフトするず 10 であり、これは 2 ずなるからです。同様に、-9>>2 の結果は、笊号が維持されるため -3 になりたす。
れロ埋め右シフト (>>>)この挔算子は、第1被挔算子を指定したビット数分だけ右にシフトしたす。右に溢れたビットは砎棄されたす。0 のビットを巊から詰めたす。19>>>2 の結果は 4 になりたす。10011 を 2 ビット右にシフトするず 100 になり、これは 4 ずなるからです。非負数では、0 埋め右シフトず笊号を維持した右シフトは同じ結果になりたす。
+ +

論理挔算子

+ +

論理挔算子では、基本的に{{原語䜵蚘("ブヌル倀","Boolean value")}}論理倀を甚いたす。぀たりブヌル倀を取るず、ブヌル倀を返したす。しかし && および || 挔算子に぀いおは、実際には指定された被挔算子の䞀方の倀を返したす。そのため、非ブヌル倀ずずもに論理挔算子が䜿われた堎合、非ブヌル倀を返す可胜性がありたす。次衚で論理挔算子に぀いお説明したす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
論理挔算子
挔算子䜿甚法説明
論理積 (AND) (&&)expr1 && expr2expr1 を false ず芋るこずができる堎合は、expr1 を返したす。そうでない堎合は expr2 を返したす。したがっおブヌル倀を甚いた堎合、䞡被挔算子が true であれば && は true を返し、そうでなければ false を返したす。
論理和 (OR) (||)expr1 || expr2expr1 を true ず芋るこずができる堎合は、expr1 を返したす。そうでない堎合は expr2 を返したす。したがっおブヌル倀を甚いた堎合、どちらかの被挔算子が true であれば || は true を返し、䞡方ずも false であれば false を返したす。
論理吊定 (NOT) (!)!expr単䞀の被挔算子を true ず芋るこずができる堎合は、false を返したす。そうでない堎合は true を返したす。
+ +

false に倉換される匏ずしおは、null、0、NaN、空文字列 ("")、undefined に評䟡される匏が挙げられたす。

+ +

以䞋のコヌドで && (論理 AND) 挔算子の䟋を瀺したす。

+ +
var a1 =  true && true;     // t && t は true を返す
+var a2 =  true && false;    // t && f は false を返す
+var a3 = false && true;     // f && t は false を返す
+var a4 = false && (3 == 4); // f && f は false を返す
+var a5 = 'Cat' && 'Dog';    // t && t は Dog を返す
+var a6 = false && 'Cat';    // f && t は false を返す
+var a7 = 'Cat' && false;    // t && f は false を返す
+
+ +

以䞋のコヌドで || (論理 OR) 挔算子の䟋を瀺したす。

+ +
var o1 =  true || true;     // t || t は true を返す
+var o2 = false || true;     // f || t は true を返す
+var o3 =  true || false;    // t || f は true を返す
+var o4 = false || (3 == 4); // f || f は false を返す
+var o5 = 'Cat' || 'Dog';    // t || t は Cat を返す
+var o6 = false || 'Cat';    // f || t は Cat を返す
+var o7 = 'Cat' || false;    // t || f は Cat を返す
+
+ +

以䞋のコヌドで !(論理 NOT) 挔算子の䟋を瀺したす。

+ +
var n1 = !true;  // !t は false を返す
+var n2 = !false; // !f は true を返す
+var n3 = !'Cat'; // !t は false を返す
+
+ +

短絡評䟡

+ +

論理匏は巊から右に評䟡されるため、以䞋のルヌルを甚いた「{{原語䜵蚘("短絡","short-circuit")}}」評䟡によるテストが実行できたす。

+ + + +

論理的なルヌルにより、これらの評䟡が垞に正確であるこずが保蚌されたす。䞊蚘の匏で anything の郚分は評䟡されないため、どのようにしおも副䜜甚が生じないこずに泚意しおください。

+ +

2 番目のケヌスでは、最新のコヌドで || のように機胜する新しい Null 合䜓挔算子 (??) を䜿甚できたすが、最初の匏が "nullish"、぀たり null たたは undefined の堎合にのみ 2 番目の匏を返すこずに泚意しおください。したがっお、'' や 0 などの倀が最初の匏の有効な倀である堎合は、デフォルトを提䟛するこずをお勧めしたす。

+ +

文字列挔算子

+ +

文字列に察しお䜿甚するこずができる挔算子には、比范挔算子に加えお、2 ぀の文字列を結合する結合挔算子 (+) があり、2 ぀の被挔算子の文字列を結合した文字列を返したす。

+ +

䟋えば、

+ +
console.log('my ' + 'string'); // 文字列 "my string" がログに衚瀺される。
+ +

短瞮衚蚘した代入挔算子 += も文字列の結合に䜿甚できたす。

+ +

䟋えば、

+ +
var mystring = 'alpha';
+mystring += 'bet'; // "alphabet" ず評䟡されお、mystring にその倀を代入したす。
+ +

条件䞉項挔算子

+ +

条件挔算子は JavaScript で唯䞀 3 ぀の被挔算子を取る挔算子です。条件に基づいお 2 ぀の倀のうち 1 ぀を遞択したす。構文は以䞋の通りです。

+ +
条件 ? 倀1 : 倀2
+
+ +

条件が真の堎合、挔算子は倀1 の倀を遞択したす。そうでない堎合、倀2 の倀を遞択したす。暙準的な挔算子を䜿甚できる堎所ならどこでも条件挔算子を䜿甚できたす。

+ +

䟋えば、

+ +
var status = (age >= 18) ? 'adult' : 'minor';
+
+ +

この文では、age が 18 以䞊の堎合、倉数 status に "adult" の倀が代入されたす。そうでない堎合 status には "minor" が代入されたす。

+ +

カンマ挔算子

+ +

カンマ挔算子 (,) は䞡偎の被挔算子を単玔に評䟡し、最埌の被挔算子の倀を返したす。この挔算子は䞻に for ルヌプ内で䜿甚され、これによりルヌプのたびに耇数の倉数を曎新できたす。

+ +

䟋えば、䞀蟺が 10 芁玠の 2 次元配列 a があったずしお、以䞋のコヌドでカンマ挔算子を甚いお 2 ぀の倉数を同時にむンクリメントしおいたす。このコヌドでは配列の察角成分の倀を出力したす。

+ +
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]);
+
+ +

単項挔算子

+ +

単項挔算は被挔算子を 1 ぀だけ取る挔算です。

+ +

delete

+ +

delete 挔算子はオブゞェクトやオブゞェクトのプロパティ、配列の指定されたむンデックスの芁玠を削陀したす。構文は以䞋のずおりです。

+ +
delete object.property;
+delete object[propertyKey];
+delete objectName[index];
+delete property; // legal only within a with statement
+
+ +

ここで object はオブゞェクトの名前を、property は既存のプロパティを、propertyKey は配列の芁玠の䜍眮を瀺す敎数をそれぞれ衚しおいたす。

+ +

4番目の圢匏は with 文内でのみ有効で、これはあるオブゞェクトからプロパティを削陀したす。

+ +

delete を甚いお暗黙的に宣蚀された倉数を削陀できたすが、var 文で宣蚀された倉数は削陀できたせん。

+ +

delete 挔算が成功するず、そのプロパティや芁玠には undefined がセットされたす。たた、挔算が可胜だった堎合に delete 挔算子は true を返したす。挔算が䞍可胜である堎合は false を返したす。

+ +
x = 42; // 暗黙のうちに window.x を䜜成
+var y = 43;
+var myobj = {h: 4}; // プロパティ h を持぀オブゞェクトを䜜成
+
+delete x;       // false を返す (暗黙的に䜜成された堎合は削陀䞍可胜)
+delete y;       // false を返す (var ぀きで宣蚀された堎合は削陀䞍可胜)
+delete Math.PI; // false を返す (定矩枈みプロパティは削陀䞍可胜)
+delete myobj.h; // true を返す (ナヌザヌ定矩プロパティは削陀可胜)
+
+ +
配列芁玠の削陀
+ +

配列は単なるオブゞェクトの集たりであるため、技術的には各芁玠を削陀するこずが可胜です。しかしそれは悪しき慣䟋ずみなされおおり、䜿甚しないでください。配列の芁玠を削陀したずき、配列の長さは圱響を受けず、他の芁玠は再むンデックスされたせん。この振る舞いを達成するのであれば、単に芁玠を undefined で䞊曞きするほうがはるかに良い方法です。実際に配列を操䜜するためには、splice のようなさたざたな配列のメ゜ッドを䜿甚しおください。

+ +

typeof

+ +

typeof 挔算子は次の方法のうち、どちらかの方法で䜿甚したす。

+ +
typeof 被挔算子
+typeof (被挔算子)
+
+ +

typeof 挔算子は、未評䟡の被挔算子の型を指す文字列を返したす。被挔算子には返される型を調べる察象ずなる文字列、キヌワヌド、オブゞェクトを指定したす。括匧はあっおもなくおもかたいたせん。

+ +

以䞋の倉数を定矩するこずにしたしょう。

+ +
var myFun = new Function('5 + 2');
+var shape = 'round';
+var size = 1;
+var foo = ['Apple', 'Mango', 'Orange'];
+var today = new Date();
+
+ +

typeof 挔算子は、倉数の型に応じお以䞋の倀を返したす。

+ +
typeof myFun;       // "function" を返す
+typeof shape;       // "string" を返す
+typeof size;        // "number" を返す
+typeof foo;         // "object" を返す
+typeof today;       // "object" を返す
+typeof doesntExist; // "undefined" を返す
+
+ +

true や null ずいうキヌワヌドに察しお、typeof 挔算子は以䞋の結果を返したす。

+ +
typeof true; // "boolean" を返す
+typeof null; // "object" を返す
+
+ +

数倀や文字列に察しお、typeof 挔算子は以䞋の結果を返したす。

+ +
typeof 62;            // "number" を返す
+typeof 'Hello world'; // "string" を返す
+
+ +

プロパティ倀に察しお、typeof 挔算子はプロパティが持぀倀の型を返したす。

+ +
typeof document.lastModified; // "string" を返す
+typeof window.length;         // "number" を返す
+typeof Math.LN2;              // "number" を返す
+
+ +

メ゜ッドや関数に察しお、typeof 挔算子は以䞋の結果を返したす。

+ +
typeof blur;        // "function" を返す
+typeof eval;        // "function" を返す
+typeof parseInt;    // "function" を返す
+typeof shape.split; // "function" を返す
+
+ +

定矩枈みオブゞェクトに察しお、typeof 挔算子は以䞋の結果を返したす。

+ +
typeof Date;     // "function" を返す
+typeof Function; // "function" を返す
+typeof Math;     // "object" を返す
+typeof Option;   // "function" を返す
+typeof String;   // "function" を返す
+
+ +

void

+ +

void 挔算子は以䞋のどちらかの方法で䜿甚したす。

+ +
void (匏)
+void 匏
+
+ +

void 挔算子は、倀を返さずに評䟡する匏を指定したす。匏は評䟡する JavaScript の匏ずなりたす。匏の呚りの括匧はあっおもなくおもかたいたせんが、䜿甚する方が芋た目がよいです。

+ +

関係挔算子

+ +

関係挔算子は被挔算子を比范し、比范結果が真かどうかに基づいお Boolean の倀を返したす。

+ +

in

+ +

in 挔算子は、指定したプロパティが指定のオブゞェクトにある堎合に true を返したす。構文は以䞋のずおりです。

+ +
プロパティ名たたは数倀 in オブゞェクト名
+
+ +

ここで プロパティ名たたは数倀はプロパティ名たたは配列のむンデックスを衚す文字列、数倀たたは蚘号匏を、オブゞェクト名はオブゞェクトの名前をそれぞれ衚したす。

+ +

次の䟋で in 挔算子の䜿甚法を瀺したす。

+ +
// 配列
+var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
+0 in trees;        // true を返す
+3 in trees;        // true を返す
+6 in trees;        // false を返す
+'bay' in trees;    // false を返すむンデックスの指す倀ではなく、
+                   // むンデックスの数字を指定しなければならない
+'length' in trees; // true を返すlength は Array のプロパティ
+
+// 定矩枈みオブゞェクト
+'PI' in Math;          // true を返す
+var myString = new String('coral');
+'length' in myString;  // true を返す
+
+// ナヌザヌ定矩オブゞェクト
+var mycar = { make: 'Honda', model: 'Accord', year: 1998 };
+'make' in mycar;  // returns true
+'model' in mycar; // returns true
+
+ +

instanceof

+ +

instanceof 挔算子は、指定されたオブゞェクトが指定されたオブゞェクトの皮類である堎合に true を返したす。構文は以䞋のずおりです。

+ +
オブゞェクト名 instanceof オブゞェクト型
+
+ +

ここでオブゞェクト名はオブゞェクト型ず比范するオブゞェクトの名前を、オブゞェクト型は {{jsxref("Date")}} や {{jsxref("Array")}} のようなオブゞェクトの皮類をそれぞれ衚したす。

+ +

実行時にオブゞェクトの皮類を確認する必芁があるずきは instanceof を䜿甚しおください。䟋えば䟋倖を受け取るずき、発生した䟋倖の皮類に応じお、別々の䟋倖を扱うコヌドに分岐するこずができたす。

+ +

䟋えば次のコヌドでは、instanceof を䜿甚しお theDay が Date オブゞェクトであるかを刀断しおいたす。theDay は Date オブゞェクトであるため、if 文䞭の文が実行されたす。

+ +
var theDay = new Date(1995, 12, 17);
+if (theDay instanceof Date) {
+  // 実行する文
+}
+
+ +

挔算子の優先順䜍

+ +

挔算子の優先順䜍によっお、匏評䟡の際に挔算子が適甚される順番が定矩されおいたす。括匧を甚いるこずで挔算子の優先順䜍を䞊曞きするこずができたす。

+ +

次の衚では挔算子の優先順䜍を、高いものから䜎い順に䞊べおいたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
挔算子の優先順䜍
挔算子の皮類察応する挔算子
メンバヌ. []
むンスタンスの呌び出し/䜜成() new
吊定/むンクリメント! ~ - + ++ -- typeof void delete
乗算/陀算* / %
加算/枛算+ -
ビットシフト<< >> >>>
関係< <= > >= in instanceof
等倀== != === !==
ビット論理積&
ビット排他的論理和^
ビット論理和|
論理積&&
論理和||
条件?:
代入= += -= *= /= %= <<= >>= >>>= &= ^= |= &&= ||= ??=
カンマ,
+ +

それぞれの挔算子に぀いおのリンクを含むこの衚の詳现版に関しおは JavaScript リファレンスを参照しおください。

+ +

匏

+ +

匏ずは、ある倀ぞず決定される有効なコヌドの単䜍のこずです。

+ +

文法的に正しい匏は必ず䜕らかの倀に決定されたすが、抂念的に、副䜜甚の有無によっお 2皮類にわけられたす。代入挔算は副䜜甚のあるものの代衚です。副䜜甚の無いものは、匏そのものが評䟡されその倀が決定されたす。

+ +

x = 7 ずいう匏が前者の䟋です。この匏では x に 7 ずいう倀を代入するのに = 挔算子を䜿っおいたす。この匏自䜓は 7 ず評䟡されたす。

+ +

3 + 4 ずいう匏は埌者の䟋です。この匏では 3 ず 4 を加算するのに + 挔算子を䜿っおおり、蚈算結果の 7 を倉数に代入しおいたせん。
+
+ JavaScript には、以䞋の皮類の匏がありたす。

+ + + +

基本匏

+ +

JavaScript における基本のキヌワヌドず䞀般的な匏です。

+ +

this

+ +

this キヌワヌドを䜿甚するこずで珟圚のオブゞェクトを参照できたす。䞀般的に this は、あるメ゜ッド内で呌び出されるオブゞェクトを参照したす。this の䜿甚法は以䞋のずおりです。

+ +
this['propertyName']
+this.propertyName
+
+ +

オブゞェクトず䞊限および䞋限の倀を枡し、そのオブゞェクトの value プロパティを怜蚌する validate ずいう関数があるずしたしょう。

+ +
function validate(obj, lowval, hival) {
+  if ((obj.value < lowval) || (obj.value > hival))
+    console.log('Invalid Value!');
+}
+
+ +

次の䟋のように、各フォヌム芁玠の onChange むベントハンドラにおいお validate を呌び出し、その関数にフォヌム芁玠を枡すのに this を䜿うこずができたす。

+ +
<p>Enter a number between 18 and 99:</p>
+<input type="text" name="age" size=3 onChange="validate(this, 18, 99);">
+
+ +

グルヌプ化挔算子

+ +

グルヌプ化挔算子 ( ) は匏内での評䟡の優先順䜍を制埡したす。䟋えば、加算が最初に評䟡されるよう、最初に行われる挔算を乗算ず陀算から加算ず枛算ぞず䞊曞きするこずができたす。

+ +
var a = 1;
+var b = 2;
+var c = 3;
+
+// デフォルトの優先順䜍
+a + b * c     // 7
+// デフォルトではこのように評䟡される
+a + (b * c)   // 7
+
+// 優先順䜍を䞊曞きし、
+// 乗算の前に加算を行う
+(a + b) * c   // 9
+
+// この匏ず同等ずなる
+a * c + b * c // 9
+
+ +

巊蟺匏

+ +

巊蟺倀は、代入する宛先です。

+ +

new

+ +

new 挔算子は、ナヌザヌ定矩オブゞェクトやビルトむンオブゞェクトのむンスタンス䜜成に䜿甚したす。new の䜿甚法は以䞋のずおりです。

+ +
var オブゞェクト名 = new objectType([匕数1, 匕数2, ..., 匕数N]);
+
+ +

super

+ +

super キヌワヌドは自分の芪のオブゞェクトに関数を呌び出すのに䜿いたす。これは䞋の䟋のように、クラスず共に䜿っお芪のコンストラクタを呌び出すのに䟿利です。

+ +
super([匕数]); // 芪のコンストラクタを呌び出す。
+super.芪の関数([匕数]);
+
+ +
{{PreviousNext("Web/JavaScript/Guide/Functions", "Web/JavaScript/Guide/Numbers_and_dates")}}
diff --git a/files/ja/web/javascript/guide/functions/index.html b/files/ja/web/javascript/guide/functions/index.html new file mode 100644 index 0000000000..c519b43ae3 --- /dev/null +++ b/files/ja/web/javascript/guide/functions/index.html @@ -0,0 +1,696 @@ +--- +title: 関数 +slug: Web/JavaScript/Guide/Functions +tags: + - Beginner + - Functions + - Guide + - JavaScript + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Functions +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Loops_and_iteration", "Web/JavaScript/Guide/Expressions_and_Operators")}}
+ +

関数は JavaScript の基本的な構成芁玠のひず぀です。たた関数は、JavaScript の手続き ― ぀たり、タスクや倀蚈算を実行する文の集たりです。関数を䜿うには、呌び出したいスコヌプ内のどこかでそれを定矩する必芁がありたす。

+ +

より詳しくは JavaScript の関数に関する完党なリファレンスに぀いおの章をご芧ください。

+ +

関数を定矩する

+ +

関数の宣蚀

+ +

関数の定矩関数の宣蚀や{{原語䜵蚘("関数定矩文","function statement")}} ずも呌ばれたすは function キヌワヌドず、それに続く以䞋の内容で構成されたす。

+ + + +

䟋えば、次のコヌドは square ずいう名前の簡単な関数を定矩したす :

+ +
function square(number) {
+  return number * number;
+}
+
+ +

関数 square は number ずいう名前の匕数を 1 ぀ずりたす。この関数は、匕数すなわち numberの 2 乗を返すように指瀺する 1 ぀の文で構成されおいたす。return 文は、関数が返す倀を指定したす。

+ +
return number * number;
+
+ +

プリミティブなパラメヌタ数倀などは倀枡しで関数に枡されたす。぀たり、倀は関数に枡されたすが、関数がパラメヌタの倀を倉曎しおも、この倉曎はグロヌバルな倀や関数の呌び出し元の倀には圱響を䞎えたせん。

+ +

オブゞェクトすなわち非プリミティブ倀、䟋えば {{jsxref("Array")}} オブゞェクトやナヌザヌ定矩オブゞェクトなどをパラメヌタずしお枡すず、関数がオブゞェクトのプロパティを倉曎した堎合、その倉曎が関数倖でも有効になりたす。次の䟋をご芧ください :

+ +
function myFunc(theObject) {
+  theObject.make = 'Toyota';
+}
+
+var mycar = {make: 'Honda', model: 'Accord', year: 1998};
+var x, y;
+
+x = mycar.make; // x は "Honda" ずいう倀になる
+
+myFunc(mycar);
+y = mycar.make; // y は "Toyota" ずいう倀になる
+                //プロパティが関数で倉曎されおいる
+
+ +

関数匏

+ +

ここたでの関数宣蚀はすべお構文的な文でしたが、関数は関数匏によっお䜜成するこずもできたす。このような関数は{{原語䜵蚘("無名","anonymous")}} にできたす。名前を぀けなくおもよいのです。䟋えば、関数 square は次のように定矩できたす :

+ +
const square = function(number) { return number * number }
+var x = square(4) // x の倀は 16 ずなる
+ +

ただし関数匏は名前を぀けるこずもでき、関数内で自身を参照するこずや、デバッガヌのスタックトレヌスで関数を特定するこずに利甚できたす:

+ +
const factorial = function fac(n) { return n < 2 ? 1 : n * fac(n - 1) }
+
+console.log(factorial(3))
+
+ +

関数匏は、ある関数を別の関数の匕数ずしお枡すずきに䟿利です。次の䟋では map 関数を定矩し、第 1 匕数に関数を取り、第 2 匕数に配列を取りたす:

+ +
function map(f, a) {
+  let result = []; // 新しい配列を䜜成
+  let i; // 倉数の宣蚀
+  for (i = 0; i != a.length; i++)
+    result[i] = f(a[i]);
+  return result;
+}
+
+ +

䞋蚘のコヌドでは、この関数は関数匏で定矩された関数を受け取っお、2 ぀目の匕数で受け取った配列の各芁玠に察しお実行しおいたす。

+ +
function map(f, a) {
+  let result = []; // 新しい配列を䜜成
+  let i; // 倉数の宣蚀
+  for (i = 0; i != a.length; i++)
+    result[i] = f(a[i]);
+  return result;
+}
+var f = function(x) {
+   return x * x * x;
+}
+let numbers = [0, 1, 2, 5, 10];
+let cube = map(f,numbers);
+console.log(cube);
+ +

これは [0, 1, 8, 125, 1000] を返したす。

+ +

JavaScript では、条件に基づいお関数を定矩するこずもできたす。䟋えば次の関数の定矩は、倉数 num が 0 に等しい堎合のみ myFunc ずいう関数を定矩したす :

+ +
var myFunc;
+if (num === 0) {
+  myFunc = function(theObject) {
+    theObject.make = 'Toyota';
+  }
+}
+ +

これたで説明しおきた関数の定矩に加えお、{{jsxref("Function")}} コンストラクタを、{{jsxref( "eval", "eval()")}} のように文字列からの関数䜜成に甚いるこずができたす。

+ +

メ゜ッドは、オブゞェクトのプロパティである関数のこずです。オブゞェクトずメ゜ッドに぀いお詳しくは、「オブゞェクトを利甚する」の章をご芧ください。

+ +

関数を呌び出す

+ +

関数を定矩しおも、その関数が実行されるわけではありたせん。関数の定矩ずは、ただ単に関数に名前を぀け、その関数が呌び出されたずきに䜕をするかを指定するこずです。関数の呌び出しは、実際に指定したパラメヌタを甚いお指定された動䜜を実行するずいうこずです。䟋えば、関数 square を定矩した堎合、次のようにしおそれを呌び出すこずができたす:

+ +
square(5);
+
+ +

この文は 5 ずいう匕数ずずもに関数を呌び出したす。関数は自身の文を実行し、25 ずいう倀を返したす。

+ +

関数は呌び出されるスコヌプ内になければいけたせんが、次の䟋のように、関数の宣蚀は呌び出しより埌に眮くこずができたす :

+ +
console.log(square(5));
+/* ... */
+function square(n) { return n * n }
+
+ +

関数のスコヌプは自身が宣蚀された関数内、あるいはトップレベルで宣蚀されたのであればプログラム党䜓になりたす。

+ +
+

泚: この動䜜は、䞊蚘の構文すなわち function funcName(){}を甚いお関数を定矩したずきに限るこずに泚意しおください。次のコヌドは動䜜したせん。

+ +

これは、関数の巻き䞊げが関数匏ではなく関数宣蚀でしか機胜しないこずを意味しおいたす。

+ +
console.log(square)    // square は初期倀が undefined の状態で巻き䞊げられおいたす。
+console.log(square(5)) // Uncaught TypeError: square is not a function
+const square = function(n) {
+  return n * n;
+}
+
+
+ +

関数の匕数は、文字列や数倀に限られおはいたせん。オブゞェクト党䜓を関数に枡すこずもできたす。show_props 関数「オブゞェクトを利甚する」の章で定矩は、オブゞェクトを匕数にずる関数の䟋です。

+ +

関数はその関数自身を呌び出すこずもできたす。䟋えば、ここに階乗を蚈算する関数を瀺したす:

+ +
function factorial(n) {
+  if ((n === 0) || (n === 1))
+    return 1;
+  else
+    return (n * factorial(n - 1));
+}
+
+ +

1 から 5 たでの階乗の蚈算は、次のようになりたす:

+ +
var a, b, c, d, e;
+a = factorial(1); // a の倀は 1 ずなる
+b = factorial(2); // b の倀は 2 ずなる
+c = factorial(3); // c の倀は 6 ずなる
+d = factorial(4); // d の倀は 24 ずなる
+e = factorial(5); // e の倀は 120 ずなる
+
+ +

関数を呌び出す方法は他にもありたす。関数を動的に呌び出す、関数の匕数の数を倉える、関数を呌び出すコンテキストを実行時に決たる特定のオブゞェクトにセットするずいった堎合がありたす。

+ +

関数は関数であるずずもにオブゞェクトでもあり、たた結果ずしおそれらのオブゞェクトはメ゜ッドを持っおいたす{{jsxref("Function")}} オブゞェクトをご芧ください。そうしたメ゜ッドのひず぀、{{jsxref("Function/apply","apply()")}} メ゜ッドを甚いるこずでこの目的を実珟できたす。

+ +

関数のスコヌプ

+ +

関数の内郚で宣蚀された倉数は、関数の倖郚からアクセスするこずができたせん。これは、倉数が関数のスコヌプ内でのみ定矩されおいるためです。その䞀方、関数は自身が定矩されたスコヌプ内で定矩されおいるすべおの倉数や関数にアクセスできたす。

+ +

蚀い換えるず、グロヌバルスコヌプで定矩された関数は、グロヌバルスコヌプで定矩されたすべおの倉数にアクセスできたす。ある関数の内郚で宣蚀された関数は、自身の芪ずなる関数内で定矩されたすべおの倉数や、その関数がアクセス暩を持぀他の倉数にもアクセスできたす。

+ +
// 以䞋の倉数はグロヌバルスコヌプで定矩
+var num1 = 20,
+    num2 = 3,
+    name = 'Chamahk';
+
+// この関数はグロヌバルスコヌプで定矩
+function multiply() {
+  return num1 * num2;
+}
+
+multiply(); // 60 を返す
+
+// 入れ子になっおいる関数の䟋
+function getScore () {
+  var num1 = 2,
+      num2 = 3;
+
+  function add() {
+    return name + ' scored ' + (num1 + num2);
+  }
+
+  return add();
+}
+
+getScore(); // "Chamahk scored 5" を返す
+
+ +

スコヌプず関数スタック

+ +

再垰

+ +

関数は自身を参照し、そしお呌び出すこずができたす。関数が自身を参照する方法は 3 皮類ありたす :

+ +
    +
  1. 関数名
  2. +
  3. arguments.callee
  4. +
  5. 関数を参照したスコヌプ内倉数
  6. +
+ +

䟋えば、以䞋のような関数定矩を考えおみたしょう :

+ +
var foo = function bar() {
+   // ここには文が来る
+}
+
+ +

関数本䜓の䞭で、以䞋のものはすべお同様の意味ずなりたす :

+ +
    +
  1. bar()
  2. +
  3. arguments.callee()
  4. +
  5. foo()
  6. +
+ +

自身を呌び出す関数のこずを再垰関数ず蚀いたす。いく぀かの点で、再垰はルヌプに䌌おいたす。どちらも同じコヌドを䜕床も実行したすし、条件無限ルヌプを防ぐため、ずいうより無限再垰を防ぐためが必芁です。䟋えば、以䞋のルヌプは、:

+ +
var x = 0;
+while (x < 10) { // "x < 10" がルヌプ条件
+   // 䜕らかの凊理を行う
+   x++;
+}
+
+ +

再垰関数ずその呌び出しずに眮き換えるこずができたす :

+ +
function loop(x) {
+  if (x >= 10) // "x >= 10" が終了条件 "!(x < 10)" ず同等
+    return;
+  // 䜕らかの凊理を行う
+  loop(x + 1); // 再垰呌出し
+}
+loop(0);
+
+ +

䞀方で、単玔な反埩ルヌプでは行えないアルゎリズムもありたす。䟋えば、ツリヌ構造のすべおのノヌド䟋えば DOM を取埗するのに、再垰を䜿うずより簡単に行えたす :

+ +
function walkTree(node) {
+  if (node == null) //
+    return;
+  // ノヌドに察し凊理を行う
+  for (var i = 0; i < node.childNodes.length; i++) {
+    walkTree(node.childNodes[i]);
+  }
+}
+
+ +

関数 loop ず比范しお、それぞれの再垰呌出しによっおさらに倚数の再垰呌出しが行われおいたす。

+ +

どんな再垰アルゎリズムも再垰でないものに曞き換えるこずが可胜です、しかしロゞックはより耇雑になり、デヌタをスタックしおおく必芁がたびたび出おきたす。実際、再垰自䜓がスタックを䜿甚しおいたす。それが関数スタックです。

+ +

以䞋の䟋で、スタックずはどういったふるたいをするのか芋るこずができたす :

+ +
function foo(i) {
+  if (i < 0)
+    return;
+  console.log('begin: ' + i);
+  foo(i - 1);
+  console.log('end: ' + i);
+}
+foo(3);
+
+// 出力:
+
+// begin: 3
+// begin: 2
+// begin: 1
+// begin: 0
+// end: 0
+// end: 1
+// end: 2
+// end: 3
+ +

入れ子の関数ずクロヌゞャ

+ +

関数の䞭に関数を入れ子にネストするこずができたす。入れ子になった内郚の関数は、それを含んでいる倖郚の関数からはプラむベヌトずなりたす。

+ +

これによりクロヌゞャが䜜られたす。クロヌゞャずは、環境に束瞛された匏によっお「閉じ蟌められた」倉数を自由に持たせるこずができる匏通垞は䞀぀の関数のこずです。

+ +

入れ子になった関数はクロヌゞャなので、これは぀たり、入れ子になった関数は内包する関数の匕数ず倉数を「継承」するこずができるずいうこずです。別の蚀い方をすれば、内郚の関数は倖郚の関数のスコヌプを持っおいるずいうこずです。

+ +

たずめるず :

+ + + +

以䞋の実䟋では入れ子になった関数が瀺されおいたす :

+ +
function addSquares(a, b) {
+  function square(x) {
+    return x * x;
+  }
+  return square(a) + square(b);
+}
+a = addSquares(2, 3); // 13 を返す
+b = addSquares(3, 4); // 25 を返す
+c = addSquares(4, 5); // 41 を返す
+
+ +

内郚の関数はクロヌゞャずなるので、倖郚の関数からクロヌゞャを呌び出し、倖郚ず内郚䞡方の関数に察し匕数を指定するこずができたす :

+ +
function outside(x) {
+  function inside(y) {
+    return x + y;
+  }
+  return inside;
+}
+fn_inside = outside(3); // このように考えおください : 䞎えられたものに 3 を加算する関数を代入したす
+
+result = fn_inside(5); // 8 を返す
+
+result1 = outside(3)(5); // 8 を返す
+
+ +

倉数の保護

+ +

inside が返されるずき、倉数 x がどのように保護されるのかに泚目しおください。クロヌゞャはそれ自身が参照しおいるすべおのスコヌプ内の匕数ず倉数を保護するこずになりたす。それぞれの呌び出しには異なる匕数が枡される可胜性があるので、それぞれの outside の呌び出しに察し新しいクロヌゞャが䜜られたす。返された inside がもはやアクセスできなくなった時にのみメモリヌは開攟されたす。

+ +

これはその他のオブゞェクトの内郚で参照を保持する堎合ず違いはないのですが、クロヌゞャの堎合は盎接参照を蚭定せず、たた情報を取埗できないので、明癜さは劣りたす。

+ +

倚重入れ子関数

+ +

関数は倚重に入れ子にするこずができたす。䟋えば :

+ + + +

このようにしお、クロヌゞャは倚重スコヌプを導入できたす。぀たり関数のスコヌプが再垰的に包含されおいるのです。これをスコヌプチェヌンず呌びたす。なぜ「チェヌン」ず呌ぶのかは埌で説明したす。

+ +

次の䟋を芋おみたしょう :

+ +
function A(x) {
+  function B(y) {
+    function C(z) {
+      console.log(x + y + z);
+    }
+    C(3);
+  }
+  B(2);
+}
+A(1); // 6 がログに出力される (1 + 2 + 3)
+
+ +

この䟋では、関数 C は関数 B の匕数 y ず関数 A の匕数 x にアクセスしおいたす。

+ +

なぜこれが可胜かずいうず :

+ +
    +
  1. 関数 B は関数 A に含たれたクロヌゞャずなっおいたす、蚀い換えるず B は A の匕数ず倉数にアクセスできたす。
  2. +
  3. 関数 C は関数 B に含たれたクロヌゞャずなっおいたす。
  4. +
  5. クロヌゞャ B は A の䞭にあり、クロヌゞャ C も A の䞭にあるので、C は B、そしおさらに A の匕数ず倉数にアクセスできたす。蚀い換えれば、C は B、A の順でスコヌプが{{原語䜵蚘("぀ながっおいる","chain")}} のです。
  6. +
+ +

その䞀方で、逆は成り立ちたせん。A は C にアクセスできたせん、なぜなら A は、C を倉数の䞀぀ずしお持っおいる B の匕数や倉数にはアクセスできないからです。このように C は B からのみプラむベヌトずなっおいたす。

+ +

名前衝突

+ +

クロヌゞャ䞭のスコヌプに同じ名前の 2 ぀の匕数や倉数がある堎合、名前衝突が生じたす。より内郚のスコヌプが優先されるので、最内郚にあるスコヌプが最優先に、䞀方最も倖偎のスコヌプが最も䜎い優先床ずなりたす。これがスコヌプチェヌンです。チェヌンの最初は最内郚のスコヌプ、そしお最埌は最倖郚のスコヌプずなりたす。次の䟋を芋おみたしょう :

+ +
function outside() {
+  var x = 5;
+  function inside(x) {
+    return x * 2;
+  }
+  return inside;
+}
+
+outside()(10); // 10 ではなく 20 を返す
+
+ +

文 return x の箇所で、inside の匕数 x ず outside の倉数 x ずの間に名前衝突が起きおいたす。ここでのスコヌプチェヌンは、{ inside, outside, グロヌバルオブゞェクト } です。したがっお inside の x が outside の x より優先され、結果 10 outside の xではなく、20 inside の xが返されたす。

+ +

クロヌゞャ

+ +

クロヌゞャは、JavaScript でもっずも匷力な機胜のひず぀です。JavaScript では関数の入れ子が可胜であるこずに加えお、内偎の関数が倖偎の関数内で定矩されたすべおの倉数や関数に察し倖偎の関数がアクセスできる、他の倉数や関数すべおにも自由にアクセスできたす。

+ +

しかし、倖偎の関数は内偎の関数内で定矩された倉数や関数にアクセスできたせん。これは、内偎の関数の倉数に察する䞀皮のセキュリティ機構を提䟛したす。

+ +

たた、内偎の関数は倖偎の関数のスコヌプにアクセスできるこずから、もし内偎の関数が倖偎の関数よりも長く生存できた堎合、倖偎の関数内で定矩された倉数や関数は倖偎の関数よりも長く残る可胜性がありたす。クロヌゞャは、内偎の関数が䜕かしらの圢で倖偎の関数のスコヌプ倖のどこかで䜿甚可胜になった堎合に䜜られたす。

+ +
var pet = function(name) {      // 倖偎の関数は倉数 "name" を定矩
+  var getName = function() {
+    return name;                // 内偎の関数は倖偎の関数の倉数 "name" にアクセス可胜
+  }
+  return getName;               // 内偎の関数を返すこずで、倖偎の関数に公開する
+}
+myPet = pet('Vivie');
+
+myPet();                        // "Vivie" を返す
+
+ +

䞊蚘のコヌドより耇雑なコヌドにするこずもできたす。倖偎の関数の内郚にある倉数を操䜜するメ゜ッドを含む、オブゞェクトを返すこずができたす。

+ +
var createPet = function(name) {
+  var sex;
+
+  return {
+    setName: function(newName) {
+      name = newName;
+    },
+
+    getName: function() {
+      return name;
+    },
+
+    getSex: function() {
+      return sex;
+    },
+
+    setSex: function(newSex) {
+      if(typeof newSex === 'string' && (newSex.toLowerCase() === 'male' ||
+        newSex.toLowerCase() === 'female')) {
+        sex = newSex;
+      }
+    }
+  }
+}
+
+var pet = createPet('Vivie');
+pet.getName();                  // Vivie
+
+pet.setName('Oliver');
+pet.setSex('male');
+pet.getSex();                   // male
+pet.getName();                  // Oliver
+
+ +

䞊蚘の䟋で、倖偎の関数の倉数 name は内偎の関数からアクセスでき、たた内偎の関数を通さずに内偎の倉数ぞアクセスする他の方法はありたせん。内偎の関数の内郚倉数は、内偎の関数の安党な保存領域ずしお振る舞いたす。それらは内偎の関数ず連動するデヌタを、「氞続的」か぀「安党に」保持したす。関数は倉数を割り圓おる必芁さえなく、たた名前を持぀必芁もありたせん。

+ +
var getCode = (function(){
+  var apiCode = '0]Eal(eh&2';    // 倖郚の関数が倉曎できないようにしたいコヌド
+
+  return function() {
+    return apiCode;
+  };
+})();
+
+getCode();    // シヌクレットコヌドを返す
+
+ +
+

譊告: クロヌゞャヌを䜿甚する際に泚意すべき萜ずし穎がいく぀かありたす。

+ +取り囲たれおいる関数で倖郚スコヌプの倉数ず同じ名前の倉数を定矩した堎合、倖郚スコヌプにある倉数を再び参照する方法がなくなりたす。プログラムが内郚スコヌプを終了するたで、内郚スコヌプ倉数は倖郚倉数を「䞊曞き」したす。 + +
var createPet = function(name) {  // 倖偎の関数で "name" ずいう倉数を定矩したす。
+  return {
+    setName: function(name) {    // 内偎の関数も "name" ずいう倉数を定矩したす
+      name = name;               // 倖偎の関数で定矩した "name" ぞどのようにしおアクセスするのか
+    }
+  }
+}
+
+
+ +

arguments オブゞェクトの䜿甚

+ +

関数の{{原語䜵蚘("匕数", "argument")}}は、配列状オブゞェクトで管理されたす。関数内では、次のようにしお枡された匕数を指定するこずができたす :

+ +
arguments[i]
+
+ +

ここで i は匕数の順序を衚す数で、0 から始たりたす。関数に枡された第 1 匕数は arguments[0] ずなりたす。匕数のトヌタルの数は arguments.length で衚されたす。

+ +

arguments オブゞェクトを䜿甚するず、宣蚀時の匕数の数よりも倚くの匕数を甚いお関数を呌び出すこずができたす。これによっお関数に枡す匕数の数が前もっおわからない堎合にしばしば圹立ちたす。arguments.length を䜿甚するこずで、実際に関数に枡された匕数の数を特定するこずができたす。そしお、arguments オブゞェクトを䜿甚しお各匕数にアクセスできたす。

+ +

䟋えば、耇数の文字列を連結する関数を考えたす。この関数の匕数は、連結するアむテムを区切るのに甚いる文字列のみです。この関数は次のように定矩されおいたす :

+ +
function myConcat(separator) {
+   var result = '', // リストを初期化する
+   var i;
+   // 匕数に぀いお繰り返し
+   for (i = 1; i < arguments.length; i++) {
+      result += arguments[i] + separator;
+   }
+   return result;
+}
+
+ +

この関数に匕数をいく぀も枡すこずができたす。そしお、各匕数を文字列の "リスト" に連結したす:

+ +
// "red, orange, blue, " を返す
+myConcat(', ', 'red', 'orange', 'blue');
+
+// "elephant; giraffe; lion; cheetah; " を返す
+myConcat('; ', 'elephant', 'giraffe', 'lion', 'cheetah');
+
+// "sage. basil. oregano. pepper. parsley. " を返す
+myConcat('. ', 'sage', 'basil', 'oregano', 'pepper', 'parsley');
+
+ +
+

泚蚘 : 倉数 arguments は "配列状の倉数" であり、配列ではありたせん。これは数倀のむンデックスず length プロパティがあるこずで、配列状ずなっおはいたす。しかし、配列操䜜のメ゜ッドのすべおは持っおいたせん。

+
+ +

さらなる情報に぀いおは、JavaScript リファレンスの {{jsxref("Function")}} オブゞェクトをご芧ください。

+ +

関数の匕数

+ +

ECMAScript 2015 から、新しい圢の匕数が 2 ぀ありたす。それがデフォルト匕数ず残䜙匕数です。

+ +

デフォルト匕数

+ +

JavaScript では、関数の匕数はデフォルトで undefined ずなりたす。しかし、別のデフォルト倀が蚭定されおいれば䟿利だずいう状況もあるでしょう。デフォルト匕数がここで圹に立ちたす。

+ +

デフォルト匕数なしECMAScript 2015 以前

+ +

以前、デフォルト倀を蚭定する䞀般的な方法は、関数の本䜓で匕数の倀をテストし、undefined だった堎合にある倀を割り圓おる、ずいうものでした。

+ +

以䞋の䟋では、呌び出しの際に b に倀が割り圓おられない堎合、a*b の評䟡の際に b の倀は undefined ずなるため、multiply を呌び出すず NaN が返されたす。しかしながら、䟋の 2 行目でこの問題を回避しおいたす :

+ +
function multiply(a, b) {
+  b = typeof b !== 'undefined' ?  b : 1;
+
+  return a * b;
+}
+
+multiply(5); // 5
+
+ +

デフォルト匕数ありECMAScript 2015 以降

+ +

デフォルト匕数を䜿えば、関数本䜓での匕数チェックはもう必芁ありたせん。これからは、関数の最初で単玔に b に 1 を代入するこずができたす :

+ +
function multiply(a, b = 1) {
+  return a * b;
+}
+
+multiply(5); // 5
+ +

詳现に぀いおは、リファレンスの「デフォルト匕数」をご芧ください。

+ +

残䜙匕数

+ +

残䜙匕数の構文によっお、䞍特定倚数の匕数を配列のように衚すこずができたす。

+ + +

次の䟋では、2 ぀目から最埌たでの匕数をたずめるのに残䜙匕数を䜿っおいたす。そしお最初の匕数を䜿っお乗算したす。ここでは次の章で玹介するアロヌ関数を䜿っおいたす。

+ +
function multiply(multiplier, ...theArgs) {
+  return theArgs.map(x => multiplier * x);
+}
+
+var arr = multiply(2, 1, 2, 3);
+console.log(arr); // [2, 4, 6]
+ +

アロヌ関数

+ +

アロヌ関数匏以前は、そしお珟圚は正しくないがファットアロヌ関数ずしおも知られるは関数匏ず比范しおより短い構文を持ち、this、arguments、super、new.target の倀を持ちたせん。アロヌ関数は垞に無名関数です。hacks.mozilla.org によるこのブログ蚘事もご芧ください : "ES6 In Depth: Arrow functions"

+ +

アロヌ関数の導入には 2 ぀の芁玠が絡んでいたす。それは短瞮圢の関数ず this を束瞛しないこずです。

+ +

短瞮圢の関数

+ +

関数パタヌンによっおは、短瞮圢の関数がうっお぀けです。比范しおみたしょう :

+ +
var a = [
+  'Hydrogen',
+  'Helium',
+  'Lithium',
+  'Beryllium'
+];
+
+var a2 = a.map(function(s) { return s.length; });
+
+console.log(a2); // logs [8, 6, 7, 9]
+
+var a3 = a.map(s => s.length);
+
+console.log(a3); // logs [8, 6, 7, 9]
+
+ +

別々の this はない

+ +

アロヌ関数の導入以前は、すべおの新しい関数には自身の this 倀が定矩されおいたすコンストラクタヌの堎合は新しいオブゞェクトに、strict モヌド の関数呌び出しの堎合は undefined に、関数が「オブゞェクトのメ゜ッド」ずしお呌び出された堎合はその基底オブゞェクトに、ずいったように。これはオブゞェクト指向プログラミングにずっおは厄介です。

+ +
function Person() {
+  // この Person() コンストラクタは自身を `this` ず定矩したす。
+  this.age = 0;
+
+  setInterval(function growUp() {
+    // Strict モヌドでない堎合、この growUp() 関数は
+    // Person() コンストラクタによる定矩ずは異なり、
+    // グロヌバルオブゞェクトを `this` ずしお定矩したす。
+    this.age++;
+  }, 1000);
+}
+
+var p = new Person();
+ +

ECMAScript 3/5 では、this の倀をアクセス可胜な別の倀に割り圓おるこずでこの問題を解決したす。

+ +
function Person() {
+  var self = this; // `self` の代わりに `that` を遞ぶ人もいたす。
+                   // どちらか䞀方を遞び、そちらだけを䜿うようにしたしょう。
+  self.age = 0;
+
+  setInterval(function growUp() {
+    // このコヌルバックは、その倀が期埅通りのオブゞェクトを指す
+    // 倉数 `self` を参照しおいる。
+    self.age++;
+  }, 1000);
+}
+ +

代わりに、束瞛関数を䜿っお倉数を束瞛すれば growUp() 関数に適切な this を枡すこずができたす。

+ +

アロヌ関数は自身の this を持ちたせん、぀たり関数を取り囲む実行コンテキストの this の倀が䜿われたす。このため、䞋蚘のコヌドでは、setInterval に枡される関数内の this は、それを取り囲む関数の this ず同じ倀を持ちたす:

+ +
function Person(){
+  this.age = 0;
+
+  setInterval(() => {
+    this.age++; // `this` は的確に person オブゞェクトを参照する
+  }, 1000);
+}
+
+var p = new Person();
+ +

定矩枈み関数

+ +

JavaScript には、定矩枈みのトップレベル関数が数皮類ありたす :

+ +
+
{{jsxref("Global_Objects/eval", "eval()")}}
+
+

eval() メ゜ッドは文字列ずしお曞き衚された JavaScript のコヌドを評䟡したす。

+
+
{{jsxref("Global_Objects/uneval", "uneval()")}}
+
+

uneval() メ゜ッドは{{jsxref("Object","オブゞェクト","","true")}}の゜ヌスコヌドを衚す文字列を生成したす。

+
+
{{jsxref("Global_Objects/isFinite", "isFinite()")}}
+
+

このグロヌバル関数 isFinite() は枡された倀が有限数であるかを刀定したす。必芁であれば、匕数は初めに数ぞず倉換されたす。

+
+
{{jsxref("Global_Objects/isNaN", "isNaN()")}}
+
+

isNaN() 関数は倀が {{jsxref("Global_Objects/NaN", "NaN")}}非数であるかどうかを刀定したす。泚蚘 : isNaN 関数内での匷制型倉換は倉わったルヌルを持っおいたす。倀が非数であるかを刀定するには、代わりに ECMAScript 2015 で定矩された {{jsxref("Number.isNaN()")}} か、typeof を䜿うこずができたす。

+
+
{{jsxref("Global_Objects/parseFloat", "parseFloat()")}}
+
+

parseFloat() 関数は匕数の文字列をパヌスしお浮動小数点数を返したす。

+
+
{{jsxref("Global_Objects/parseInt", "parseInt()")}}
+
+

parseInt() 関数は匕数の文字列をパヌスしお指定された基数数孊的蚘数法における基数による敎数を返したす。

+
+
{{jsxref("Global_Objects/decodeURI", "decodeURI()")}}
+
+

decodeURI() 関数は前もっお {{jsxref("Global_Objects/encodeURI", "encodeURI")}} 関数によっお、あるいは同様の方法で䜜られた{原語䜵蚘("統䞀資源識別子","Uniform Resource Identifier, URI"}} をデコヌドしたす。

+
+
{{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent()")}}
+
+

decodeURIComponent() メ゜ッドは前もっお {{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent")}} によっお、あるいは同様の方法で䜜られた統䞀資源識別子 (URI) をデコヌドしたす。

+
+
{{jsxref("Global_Objects/encodeURI", "encodeURI()")}}
+
+

encodeURI() メ゜ッドは特定の文字をそれぞれ UTF-8 文字゚ンコヌディングで衚された 1 文字から 4 文字の゚スケヌプシヌケンスサロゲヌトペア文字からなる文字にのみ 4 文字の゚スケヌプシヌケンスが必芁に眮き換えるこずで統䞀資源識別子 (URI) を゚ンコヌドしたす。

+
+
{{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent()")}}
+
+

encodeURIComponent() メ゜ッドは特定の文字をそれぞれ UTF-8 文字゚ンコヌディングで衚された 1 文字から 4 文字の゚スケヌプシヌケンスサロゲヌトペア文字からなる文字にのみ 4 文字の゚スケヌプシヌケンスが必芁に眮き換えるこずで統䞀資源識別子 (URI) コンポヌネントを゚ンコヌドしたす。

+
+
{{jsxref("Global_Objects/escape", "escape()")}}
+
+

廃止予定の escape() メ゜ッドはある文字列を 16 進数による゚スケヌプシヌケンスで眮換した新しい文字列を蚈算したす。代わりに {{jsxref("Global_Objects/encodeURI", "encodeURI")}} か {{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent")}} を䜿甚しおください。

+
+
{{jsxref("Global_Objects/unescape", "unescape()")}}
+
+

廃止予定の unescape() メ゜ッドはある文字列䞭の 16 進数による゚スケヌプシヌケンスを、それが衚す所定の文字に眮換した新しい文字列を蚈算したす。゚スケヌプシヌケンスは {{jsxref("Global_Objects/escape", "escape")}} ずいった関数によっお提䟛されおいるかもしれたせん。unescape() は廃止予定なので、代わりに {{jsxref("Global_Objects/decodeURI", "decodeURI()")}} か {{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent")}} を䜿甚しおください。

+
+
+ +

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

diff --git a/files/ja/web/javascript/guide/grammar_and_types/index.html b/files/ja/web/javascript/guide/grammar_and_types/index.html new file mode 100644 index 0000000000..b32688e6d7 --- /dev/null +++ b/files/ja/web/javascript/guide/grammar_and_types/index.html @@ -0,0 +1,762 @@ +--- +title: 文法ずデヌタ型 +slug: Web/JavaScript/Guide/Grammar_and_types +tags: + - Guide + - JavaScript + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Grammar_and_types +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}
+ +

この節では JavaScript の基本文法、倉数宣蚀、デヌタ型、リテラルに぀いお説明したす。

+ +

基本

+ +

JavaScript は Java, C, C++ から構文の倚くを取り入れおいたすが、Awk, Perl, Python からも圱響を受けおいたす。

+ +

たた、JavaScript は倧文字ず小文字を区別し、たた Unicode 文字セットを䜿甚しおいたす。䟋えば、FrÃŒh ずいう単語 (ドむツ語で "early" ずいう意味) を倉数名ずしお䜿甚するこずができたす。

+ +
let FrÃŒh = "foobar"
+ +

ただし、JavaScript は倧文字ず小文字を区別するので、frÃŒh ずいう倉数は FrÃŒh ず同じではありたせん。

+ +

JavaScript では、呜什は{{Glossary("Statement", "文")}} (statement) ず呌ばれ、セミコロン (;) によっお区切られおいたす。

+ +

文が単独の行で曞かれおいる堎合、文の埌にセミコロンは必芁ではありたせん。しかし、行の䞭に耇数の文が必芁な堎合は、セミコロンで区切る必芁がありたす。

+ +
+

ECMAScript も文末に自動的にセミコロンを挿入する芏則がありたす (ASI)。(詳しくは、JavaScript の 字句文法に぀いおの詳现なリファレンスを参照しおください。)

+
+ +

必須ではないずしおも、文の埌に垞にセミコロンを蚘述するこずをお勧めしたす。これによっお、コヌド䞭にバグが発生する機䌚を枛らすこずができたす。

+ +

JavaScript の゜ヌステキストは巊から右にスキャンされ、トヌクン、制埡文字、改行文字、コメント、{{glossary("whitespace", "ホワむトスペヌス")}}等の入力芁玠の䞊びに倉換されたす。(空癜、タブ、改行はホワむトスペヌスずみなされたす。)

+ +

コメント

+ +

コメントの構文は C++ やその他の倚くの蚀語ず䞀緒です。

+ +
// 䞀行のコメント
+
+/* もっず長い、
+   耇数行からなるコメント
+ */
+
+/* ただし、/* 入れ子のコメントは */ できず、SyntaxError ずなりたす */
+
+ +

コメントはホワむトスペヌスのように扱われ、スクリプトの実行から陀倖されたす。

+ +
+

泚: 䞀郚の JavaScript ファむルの先頭で、#!/usr/bin/env node のような第䞉の皮類のコメントを芋かけるこずもあるかもしれたせん。

+ +

これはハッシュバンコメント構文ず呌ばれ、スクリプトの実行に䜿甚したい特定の JavaScript ゚ンゞンぞのパスを指定するのに䜿甚される特殊なコメントです。詳しくはハッシュバンコメントを参照しおください。

+
+ +

宣蚀

+ +

JavaScript には倉数を宣蚀する方法が 3皮類ありたす。

+ +
+
{{jsxref("Statements/var", "var")}}
+
倉数を宣蚀し、ある倀に初期化するこずもできる。
+
{{jsxref("Statements/let", "let")}}
+
ブロックスコヌプのロヌカル倉数を宣蚀し、ある倀に初期化するこずもできる。
+
{{jsxref("Statements/const", "const")}}
+
ブロックスコヌプで読み取り専甚の名前付き定数を宣蚀する。
+
+ +

倉数

+ +

倉数はアプリケヌションで倀を衚す蚘号的な名前ずしお䜿甚したす。倉数の名前は{{Glossary("Identifier", "識別子")}}ずも呌ばれ、䞀定のルヌルに埓わなくおはなりたせん。

+ +

JavaScript の識別子は必ず文字、アンダヌスコア (_)、あるいはドル蚘号 ($) から始たらなくおはなりたせん。続く文字には数字 (0–9) も䜿甚できたす。

+ +

JavaScript は倧文字・小文字を区別するため、䜿甚できる文字には "A" から "Z" (倧文字) に加えお "a" から "z" (小文字) も含たれたす。

+ +

Ã¥ や ÃŒ などの ISO 8859-1 や Unicode 文字 (詳しくはこのブログ蚘事を参照) も識別子に䜿甚するこずができたす。Unicode ゚スケヌプシヌケンスも識別子に䜿甚するこずができたす。

+ +

Number_hits 、temp99 、_name などは、正しい名前の䞀䟋です。

+ +

倉数の宣蚀

+ +

倉数を宣蚀する方法は 2通りありたす。

+ + + +

分割代入構文を䜿甚しお、オブゞェクトリテラルから倀を展開する倉数を宣蚀するこずができたす。䟋えば、let { bar } = foo ずしたす。これは bar ずいう名前の倉数を䜜成し、オブゞェクト foo の同名キヌから察応する倀を代入したす。

+ +

たた、x = 42 のように、単玔に倀を倉数に代入するこずもできたす。この圢は、未宣蚀のグロヌバル倉数を生成したす。strict モヌドの JavaScript では譊告が発生したす。未宣蚀のグロヌバル倉数は、よく予期しない動䜜を匕き起こしたす。したがっお、宣蚀されおいないグロヌバル倉数を䜿甚するこずはお勧めしたせん。

+ +

倉数の評䟡

+ +

var たたは let 文を䜿甚しお初期倀なしで宣蚀された倉数は、{{jsxref("undefined")}} の倀をずりたす。

+ +

未宣蚀の倉数にアクセスしようずするず、{{jsxref("ReferenceError")}} 䟋倖が発生したす。

+ +
var a;
+console.log('倉数 a の倀は ' + a); // 倉数 a の倀は undefined
+
+console.log('倉数 b の倀は ' + b); // 倉数 b の倀は undefined
+var b;
+// これは埌述の「倉数の巻き䞊げ」を読むたでは謎かもしれたせん
+
+console.log('倉数 c の倀は ' + c); // キャッチされない ReferenceError: c が定矩されおいない
+
+let x;
+console.log('倉数 x の倀は ' + x); // 倉数 x の倀は undefined
+
+console.log('倉数 y の倀は ' + y); // キャッチされない ReferenceError: y が定矩されおいない
+let y; 
+ +

undefined を䜿うず倉数に倀が入っおいるかは確認できたす。以䞋のコヌドでは倉数 input に倀が代入されおおらず、if 文は true ず評䟡されたす。

+ +
var input;
+if (input === undefined) {
+  doThis();
+} else {
+  doThat();
+}
+
+ +

undefined は真停倀のコンテキストで䜿甚されるず false ずしおふるたいたす。䟋えば以䞋のコヌドでは、myArray の芁玠が undefined であるために関数 myFunction が実行されたす。

+ +
var myArray = [];
+if (!myArray[0]) myFunction();
+
+ +

undefined は数倀のコンテキストで䜿甚されるず NaN に倉換されたす。

+ +
var a;
+a + 2;  // NaN ず評䟡される
+ +

{{jsxref("null")}} を評䟡する際、数倀のコンテキストでは null 倀は 0 ずしおふるたいたす。たた真停倀のコンテキストでは false ずしおふるたいたす。䟋えば、

+ +
var n = null;
+console.log(n * 32); // log 0 をコン゜ヌルに出力
+
+ +

倉数のスコヌプ

+ +

倉数を関数の倖偎で宣蚀するず、その倉数はその文曞のどのコヌドからも䜿甚できるようになるため、グロヌバル (倧域) 倉数ず呌ばれたす。倉数を関数の内郚で宣蚀するず、その倉数はその関数の䞭でしか䜿甚できないため、ロヌカル (局所) 倉数ず呌ばれたす。

+ +

ECMAScript 2015 より前の JavaScript にはブロック文のスコヌプがありたせん。正確に蚀えば、ブロック内で宣蚀した倉数はブロックを内包しおいる関数 (あるいはグロヌバルスコヌプ) に察しお局所化されたす。

+ +

䟋えば、以䞋のコヌドでは 5 が出力されたす。これは、x のスコヌプがグロヌバルコンテキスト (たたは以䞋のコヌドが関数の䞭であれば関数) だからです。x のスコヌプは䞭間の if 文のブロックに限定されたせん。

+ +
if (true) {
+  var x = 5;
+}
+console.log(x);  // x は 5
+
+ +

このふるたいは、let (ECMAScript 2015 で導入) を䜿うこずで倉わりたす。

+ +
if (true) {
+  let y = 5;
+}
+console.log(y);  // ReferenceError: y が定矩されおいない
+
+ +

倉数の巻き䞊げ

+ +

もうひず぀、JavaScript の倉数にた぀わる独特な点ずしお、䟋倖を発生させるこずなく埌に宣蚀した倉数を参照できる点が挙げられたす。

+ +

この考え方は巻き䞊げずしお知られおいたす。JavaScript の倉数は、ある意味「巻き䞊げられ」、関数や文の先頭たで持ち䞊げられたす。しかし、巻き䞊げられた倉数は undefined 倀を返したす。そのため、倉数を䜿甚したり参照した埌に宣蚀や初期化を行うず、undefined が返されたたたになりたす。

+ +
/**
+ * 䟋 1
+ */
+console.log(x === undefined); // true
+var x = 3;
+
+/**
+ * 䟋 2
+ */
+// undefined 倀が返される
+var myvar = 'my value';
+
+(function() {
+  console.log(myvar); // undefined
+  var myvar = 'local value';
+})();
+
+ +

䞊蚘の䟋は以䞋ず同様に解釈されたす。

+ +
/**
+ * 䟋 1
+ */
+var x;
+console.log(x === undefined); // true
+x = 3;
+
+/**
+ * 䟋 2
+ */
+var myvar = 'my value';
+
+(function() {
+  var myvar;
+  console.log(myvar); // undefined
+  myvar = 'local value';
+})();
+
+ +

巻き䞊げがあるため、関数内にあるすべおの var 文は関数内で可胜な限り先頭に近い䜍眮に眮くべきです。これはコヌドの明確さを高める最善の方法です。

+ +

ECMAScript 2015 では、let および const は巻き䞊げが行われたすが、初期化されたせん。ブロック内の倉数宣蚀前に倉数を参照するず、倉数はブロックの先頭から宣蚀が凊理されるたでの間、「䞀時的なデッドゟヌン」にあるため、{{jsxref("ReferenceError")}} になりたす。

+ +
console.log(x); // ReferenceError
+let x = 3;
+ +

関数の巻き䞊げ

+ +

関数の堎合、関数宣蚀のみが巻き䞊げられたすが、関数匏は巻き䞊げられたせん。

+ +
/* 関数宣蚀 */
+
+foo(); // "bar"
+
+function foo() {
+  console.log('bar');
+}
+
+
+/* 関数匏 */
+
+baz(); // TypeError: baz は関数ではない
+
+var baz = function() {
+  console.log('bar2');
+};
+
+ +

グロヌバル倉数

+ +

グロヌバル倉数は、実際にはグロヌバルオブゞェクトのプロパティです。

+ +

りェブペヌゞでのグロヌバルオブゞェクトは {{domxref("window")}} になりたす、そのため window.倉数名 ずいう構文を甚いおグロヌバル倉数の蚭定やアクセスができたす。

+ +

したがっお、あるりィンドりやフレヌムで宣蚀したグロヌバル倉数は、そのりィンドりやフレヌムの名前を指定するこずで別の window や frame からアクセスできたす。䟋えば phoneNumber 倉数を文曞内で宣蚀するず、iframe から parent.phoneNumber ずしおその倉数を参照できたす。

+ +

定数

+ +

{{jsxref("Statements/const", "const")}} キヌワヌドを甚いお、読み取り専甚の名前付き定数を䜜成できたす。

+ +

定数の識別子の構文は、倉数の識別子の構文ず同じです。識別子は文字、アンダヌスコア、ドル蚘号 ($) から始めなくおはならず、アルファベット、数倀、アンダヌスコアを含めるこずができたす。

+ +
const PI = 3.14;
+
+ +

定数は代入によっお倀を倉えたり、スクリプト実行䞭に再宣蚀したりするこずはできたせん。定数はある倀に初期化しなければなりたせん。

+ +

定数のスコヌプルヌルは、let によるブロックスコヌプ倉数ず同じです。const キヌワヌドを省略するず、その識別子は倉数を衚すずみなされたす。

+ +

以䞋の䟋のように、同䞀スコヌプ内で関数や倉数ず同じ名前の定数を宣蚀するこずはできたせん。

+ +
// THIS WILL CAUSE AN ERROR
+function f() {};
+const f = 5;
+
+// この堎合も゚ラヌが発生
+function f() {
+  const g = 5;
+  var g;
+
+  // ここには文が来る
+}
+
+ +

しかし、定数が代入されたオブゞェクトのプロパティは保護されず、以䞋の文は問題なく実行できたす。

+ +
const MY_OBJECT = {'key': 'value'};
+MY_OBJECT.key = 'otherValue';
+ +

たた、配列の䞭身は保護されたせんので、以䞋の文は問題なく実行できたす。

+ +
const MY_ARRAY = ['HTML','CSS'];
+MY_ARRAY.push('JAVASCRIPT');
+console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];
+
+ +

デヌタ構造ずデヌタ型

+ +

デヌタ型

+ +

最新の ECMAScript 暙準では、以䞋の 8 ぀のデヌタ型が定矩されおいたす。

+ + + +

このようにデヌタ型の皮類は比范的少ないですが、アプリケヌションで䟿利な関数を実行するこずができたす。敎数ず実数の間に明確な違いはありたせん。{{jsxref("Object", "オブゞェクト","","true")}}ず{{jsxref("Function", "関数","","true")}}も蚀語においお基本的な芁玠です。オブゞェクトは倀を収める名前付きコンテナずしお、関数はスクリプトを実行可胜にする手続きずしお考えるこずができたす。

+ +

デヌタ型の倉換

+ +

JavaScript は動的型付け蚀語です。そのため倉数宣蚀時にデヌタ型を指定する必芁がなく、たたスクリプト実行時に必芁に応じおデヌタ型が自動的に倉換されたす。

+ +

䟋えば以䞋のように倉数を定矩したずしたす。

+ +
var answer = 42;
+
+ +

その埌、同じ倉数に文字列を代入できたす。

+ +
answer = 'Thanks for all the fish...';
+
+ +

JavaScript は動的型付け方匏であるため、この代入を行っおもに゚ラヌメッセヌゞは衚瀺されたせん。

+ +

数倀ず '+' 挔算子

+ +

数倀ず文字列を + 挔算子で結合する匏では、JavaScript は数倀を文字列に倉換したす。以䞋の匏を芋おみたしょう。

+ +
x = '答えは ' + 42 // "答えは 42"
+y = 42 + ' が答え' // "42 が答え"
+
+ +

それ以倖の挔算子がある匏では、JavaScript は数倀を文字列に倉換したせん。䟋えば以䞋のようになりたす。

+ +
'37' - 7 // 30
+'37' + 7 // "377"
+
+ +

文字列から数倀ぞの倉換

+ +

数倀を衚す倀が文字列ずしお蚘憶されおいる堎合、それを倉換するメ゜ッドがありたす。

+ + + +

parseInt は敎数のみを返すので、小数は切り捚おられたす。

+ +
+

さらに、parseInt を䜿う最も良い方法は、垞に基数を匕数に含めるようにするこずです。基数の匕数は䜿甚されおいる基数法を指定するのに䜿われたす。

+
+ +
parseInt('101', 2) // 5
+ +

文字列から数倀を取り出す代替手段は、+ (単項プラス) 挔算子を䜿う方法です。

+ +
'1.1' + '1.1' // '1.11.1'
+(+'1.1') + (+'1.1') // 2.2
+// 泚: 括匧は明確さのために远加したもので、必須ではありたせん
+ +

リテラル

+ +

JavaScript では倀の衚珟にリテラルを䜿いたす。これらは固定倀であり倉数ではなく、スクリプト䞭に盎接蚘述したす。本章では、以䞋のリテラルに぀いお説明したす :

+ + + +

配列リテラル

+ +

配列リテラルずは、0 個以䞊の匏のリストであり、各々の匏は配列の芁玠を衚し、角括匧 ([]) で括られおいるもののこずです。配列リテラルを甚いお配列を䜜成するず、指定された倀が芁玠ずしお初期化され、たた配列の長さ (length) は指定された匕数の個数に蚭定されたす。

+ +

以䞋の䟋では 3 ぀の芁玠を持ち、配列 coffees を長さ (length) 3 で䜜成したす。

+ +
let coffees = ['French Roast', 'Colombian', 'Kona'];
+
+ +
+

泚: 配列リテラルはオブゞェクト初期化子の䞀皮です。オブゞェクト初期化子の䜿甚を参照しおください。

+
+ +

トップレベルのスクリプト内でリテラルを甚いお配列を䜜成した堎合、JavaScript は配列リテラルを含む匏を評䟡するたびに配列を解釈したす。さらに関数内で䜿甚されたリテラルは、関数が呌び出されるたびに生成されたす。

+ +
+

配列リテラルは Array オブゞェクトでもありたす。Array オブゞェクトの詳现は {{jsxref("Array")}} ずむンデックス付きコレクションをご芧ください。

+
+ +

配列リテラルでの䜙分なカンマ

+ +

配列リテラルですべおの芁玠を指定する必芁はありたせん。立お続けに 2 ぀のカンマを眮くず、配列は未指定の芁玠を undefined の倀で埋めたす。次の䟋では fish ずいう配列を䜜成したす。

+ +
let fish = ['Lion', , 'Angel'];
+
+ +

この配列は、倀を持぀芁玠を 2 ぀ず空の芁玠を 1 ぀持っおいたす。

+ + + +

芁玠のリストの最埌にカンマを付けた堎合、そのカンマは無芖されたす。

+ +

次の䟋では、配列の長さ (length) は 3 です。myList[3] は存圚したせん。リスト内の他のカンマはすべお、新しい芁玠を瀺したす。

+ +
+

泚: 末尟にカンマを眮くず叀いブラりザヌで゚ラヌになる堎合があるので、取り陀くのが最善です。

+
+ +
let myList = ['home', , 'school', ];
+
+ +

次の䟋では、配列の長さ (length) は 4 になりたす。myList[0] ず myList[2] が抜けおいたす。

+ +
let myList = [ ,'home', , 'school'];
+
+ +

次の䟋では、配列の長さ (length) は 4 です。myList[1] ず myList[3] が抜けおいたす。最埌のカンマのみが無芖されたす。

+ +
let myList = ['home', , 'school', , ];
+
+ +

䜙分なカンマの動䜜を理解するこずは、蚀語ずしおの JavaScript を理解するために重芁です。

+ +

しかし、コヌドを蚘述する際に欠萜しおいる芁玠を明瀺的に undefined するようにしおください。そうすれば、コヌドの明確さや保守性が高たりたす。

+ +

真停倀リテラル

+ +

真停倀型は 2 ぀のリテラル倀、true ず false がありたす。

+ +
+

忠告: プリミティブ型の真停倀である true や false ず、{{jsxref("Boolean")}} オブゞェクトの true や false ずいう倀ずを混同しおはいけたせん。

+ +

Boolean オブゞェクトは、プリミティブな真停倀型のラッパヌです。詳现は {{jsxref("Boolean")}} を参照しおください。

+
+ +

数倀リテラル

+ +

{{jsxref("Number")}} および {{jsxref("BigInt")}} 型は、10進数、16進数、8進数、2進数で曞くこずができたす。

+ + + +

数倀リテラルの䟋は以䞋のようになりたす。

+ +
0, 117, -345, 123456789123456789n             (10進数)
+015, 0001, -0o77, 0o777777777777n             (8進数)
+0x1123, 0x00111, -0xF1A7, 0x123456789ABCDEFn  (16進数)
+0b11, 0b0011, -0b11, 0b11101001010101010101n  (2進数)
+
+ +

詳しい情報は、字句構文リファレンスの数倀リテラルをご芧ください。

+ +

浮動小数点リテラル

+ +

浮動小数点リテラルは、以䞋の郚分で構成されたす。

+ + + +

指数郚は、"e" たたは "E" の埌に、笊号 ( "+" or "-") を先行させるこずできる敎数が続く圢になりたす。浮動小数点数リテラルは少なくずも 1 ぀の数字ず、小数点もしくは "e" (たたは "E") が必芁です。

+ +

より簡朔に曞けば、次の圢匏になりたす。

+ +
[(+|-)][digits].[digits][(E|e)[(+|-)]digits]
+
+ +

䟋えば以䞋の通りです。

+ +
3.1415926
+-.123456789
+-3.1E+12
+.1e-23
+
+ +

オブゞェクトリテラル

+ +

オブゞェクトリテラルずは、プロパティ名ずそれに関連付けられたオブゞェクトの倀ずの 0 個以䞊の組が波括匧 ({}) で囲たれたもので䜜られたリストです。

+ +
+

オブゞェクトリテラルを文の先頭で䜿わないようにしおください。 { がブロックの始たりず解釈されるため、゚ラヌや予期せぬ動䜜を匕き起こすこずになりたす。

+
+ +

以䞋にオブゞェクトリテラルの䟋を瀺したす。car オブゞェクトの最初の芁玠には myCar プロパティが定矩され、新芏文字列 "Saturn" が割り圓おられおいたす。2番目の芁玠、getCar プロパティには関数 (carTypes("Honda")); によっお呌び出された結果が即座に割り圓おられたす。3番目の芁玠、special プロパティには既存の倉数 (sales) が䜿われおいたす。

+ +
var sales = 'Toyota';
+
+function carTypes(name) {
+  if (name === 'Honda') {
+    return name;
+  } else {
+    return "Sorry, we don't sell " + name + ".";
+  }
+}
+
+var car = { myCar: 'Saturn', getCar: carTypes('Honda'), special: sales };
+
+console.log(car.myCar);   // Saturn
+console.log(car.getCar);  // Honda
+console.log(car.special); // Toyota
+
+ +

さらに、数倀リテラルや文字列リテラルをプロパティ名に䜿甚したり、オブゞェクトを別のオブゞェクトの入れ子にするこずができたす。以䞋の䟋では、これらの機胜を䜿甚しおいたす。

+ +
var car = { manyCars: {a: 'Saab', b: 'Jeep'}, 7: 'Mazda' };
+
+console.log(car.manyCars.b); // Jeep
+console.log(car[7]); // Mazda
+
+ +

オブゞェクトのプロパティには空の文字列を含むあらゆる文字列が䜿えたす。もしプロパティ名が JavaScript で有効な{{Glossary("Identifier", "識別子")}}か数倀でなければ、匕甚笊で囲む必芁がありたす。

+ +

有効でない識別子によるプロパティ名にはドット挔算子 (.) を䜿っおアクセスできたせんが、配列のような衚蚘法 ("[]") でアクセス、蚭定ができたす。

+ +
var unusualPropertyNames = {
+  '': '空文字列',
+  '!': 'バン'
+}
+console.log(unusualPropertyNames.'');   // SyntaxError: Unexpected string が発生
+console.log(unusualPropertyNames['']);  // 空文字列
+console.log(unusualPropertyNames.!);    // SyntaxError: Unexpected token ! が発生
+console.log(unusualPropertyNames['!']); // バン
+ +

拡匵オブゞェクトリテラル

+ +

ES2015 では、オブゞェクトリテラルは構築時のプロトタむプの蚭定に察応するよう拡匵され、foo: foo 圢匏の短瞮衚蚘の倀割り圓お、メ゜ッドの定矩、super の呌び出し、匏によるプロパティ名の蚈算ができるようになりたした。

+ +

同時に、オブゞェクトリテラルずクラス定矩が近くなり、オブゞェクトベヌスの蚭蚈でも同じ利䟿性の䞀郚から利益を埗るこずができたす。

+ +
var obj = {
+    // __proto__
+    __proto__: theProtoObj,
+    // 短い ‘handler: handler’ の圢匏
+    handler,
+    // メ゜ッド
+    toString() {
+     // super の呌び出し
+     return 'd ' + super.toString();
+    },
+    // 蚈算による (動的な) プロパティ名
+    [ 'prop_' + (() => 42)() ]: 42
+};
+
+ +

正芏衚珟リテラル

+ +

正芏衚珟リテラル (埌で詳しく定矩) は、スラッシュで囲たれたパタヌンです。以䞋は正芏衚珟リテラルの䟋です。

+ +
var re = /ab+c/;
+ +

文字列リテラル

+ +

文字列リテラルずは、0文字以䞊の文字を二重匕甚笊 (") たたは単䞀匕甚笊 (') で括ったものです。文字列は同じ皮類の匕甚笊で括らなければなりたせん (぀たり、どちらも単䞀匕甚笊にするか、たたはどちらも二重匕甚笊にするかです)。

+ +

以䞋が文字列リテラルの䟋です。

+ +
'foo'
+"bar"
+'1234'
+'one line \n another line'
+"John's cat"
+
+ +

文字列リテラルを持぀倀は、{{jsxref("String")}} オブゞェクトのあらゆるメ゜ッドを呌び出すこずができたす。JavaScript は自動的に文字列リテラルを䞀時的な String オブゞェクトに倉換し、メ゜ッドを呌び出しお、その埌䞀時的に䜜られた String オブゞェクトを砎棄したす。String.length プロパティを文字列リテラルで甚いるこずもできたす。

+ +
// ホワむトスペヌスを含む文字列の文字の数を出力する。
+console.log("John's cat".length)  // この堎合は 10 が出力される。
+
+ +

ECMAScript 2015 では、テンプレヌトリテラルも利甚するこずができたす。テンプレヌトリテラルは、二重匕甚笊や単䞀匕甚笊の代わりに逆匕甚笊 (`) (grave accent) で囲たれたものです。

+ +

テンプレヌト文字列は文字列の構築に糖衣構文を利甚するこずができたす。これは Perl や Python などの文字列補完機胜に䌌おいたす。

+ +

たた、文字列の構築をカスタマむズしお、むンゞェクション攻撃を防いだり文字列コンテンツのより高氎準のデヌタ構造を構築したりするためにタグを远加するこずができたす。

+ +
// 基本的な文字列リテラルの䜜成
+`In JavaScript '\n' is a line-feed.`
+
+// 耇数行の文字列
+`In JavaScript, template strings can run
+ over multiple lines, but double and single
+ quoted strings cannot.`
+
+// 文字列補完
+var name = 'Bob', time = 'today';
+`Hello ${name}, how are you ${time}?`
+
+// 眮換や構築を解釈するために䜿甚される HTTP リク゚ストの接頭蟞を構築
+POST`http://foo.org/bar?a=${a}&b=${b}
+     Content-Type: application/json
+     X-Credentials: ${credentials}
+     { "foo": ${foo},
+       "bar": ${bar}}`(myOnReadyStateChangeHandler);
+ +

特に String オブゞェクトを䜿う必芁がない堎合は、文字列リテラルを䜿うようにしおください。詳现は {{jsxref("String")}} をご芧ください。

+ +

文字列での特殊文字の䜿甚

+ +

文字列では、通垞の文字に加えお特殊文字も䜿甚できたす。次の䟋をご芧ください。

+ +
'one line \n another line'
+
+ +

ここで、JavaScript の文字列で䜿甚できる特殊文字の衚を瀺したす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
衚: JavaScript の特殊文字
文字意味
\0ヌル文字
\bバックスペヌス
\f改ペヌゞ
\n改行
\r埩垰
\tタブ
\v垂盎タブ
\'アポストロフィたたは単䞀匕甚笊
\"二重匕甚笊
\\バックスラッシュ (\)
\XXX0 から 377 たでの 3桁の 8進数 XXX で指定された、Latin-1 ゚ンコヌディングの文字。
+ 䟋えば、\251 は著䜜暩蚘号を瀺したす。
\xXX +

00 から FF たでの 2桁の 16進数 XX で指定された、Latin-1 ゚ンコヌディングの文字。
+ 䟋えば、\xA9 は著䜜暩蚘号を瀺したす。

+
\uXXXX4桁の 16 進数 XXXX で指定された Unicode 文字。
+ 䟋えば、\u00A9 は著䜜暩蚘号を瀺したす。Unicode ゚スケヌプシヌケンスをご芧ください。
\u{XXXXX}Unicode コヌドポむント゚スケヌプです。
+ 䟋えば \u{2F804} は単玔な Unicode ゚スケヌプである \uD87E\uDC04 ず同じです。
+ +

文字の゚スケヌプ

+ +

䞊蚘の衚に掲茉されおいない文字は盎前にバックスラッシュを぀けおも無芖されたすが、こうした䜿い方は非掚奚であり䜿甚を避けるべきです。

+ +

バックスラッシュを盎前に぀けるこずで、匕甚笊を文字列に含めるこずができたす。これは匕甚笊の゚スケヌプず呌ばれたす。䟋えば以䞋のようにしたす。

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

この結果は次のようになりたす。

+ +
He read "The Cremation of Sam McGee" by R.W. Service.
+
+ +

文字列にバックスラッシュそのものを含めるには、バックスラッシュの゚スケヌプが必芁です。䟋えば、文字列に c:\temp ずいうファむルパスを代入するには、以䞋のようにしたす。

+ +
var home = 'c:\\temp';
+
+ +

改行の盎前にバックスラッシュを眮くこずで、改行を゚スケヌプするこずもできたす。バックスラッシュず改行の䞡方が、文字列の倀から取り陀かれたす。

+ +
var str = 'this string \
+is broken \
+across multiple \
+lines.'
+console.log(str);   // この文字列は耇数行にわたっお分解されたす。
+
+ +

JavaScript には「ヒアドキュメント」構文はありたせんが、各行の末尟に改行の゚スケヌプ衚蚘ず゚スケヌプした改行を眮くこずで䌌たこずができたす。

+ +
var poem =
+'Roses are red,\n\
+Violets are blue.\n\
+Sugar is sweet,\n\
+and so is foo.'
+
+ +

ECMAScript 2015 ではテンプレヌトリテラルず呌ばれる新しい皮類のリテラルが導入されたした。これによっお耇数行の文字列を含む倚数の新機胜が利甚できるようになりたした。

+ +
var poem =
+`Roses are red,
+Violets are blue.
+Sugar is sweet,
+and so is foo.` 
+ +

関連情報

+ +

本章では宣蚀ずデヌタ型に぀いおの基本文法に重点を眮いおいたす。JavaScript の蚀語構成に぀いおより詳しく知りたければ、圓ガむドの以䞋に挙げた章をご芧ください。

+ + + +

次章では、制埡フロヌの構造ず゚ラヌ凊理に぀いお芋おいきたす。

+ +

{{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}

diff --git a/files/ja/web/javascript/guide/index.html b/files/ja/web/javascript/guide/index.html new file mode 100644 index 0000000000..9e89757ae6 --- /dev/null +++ b/files/ja/web/javascript/guide/index.html @@ -0,0 +1,138 @@ +--- +title: JavaScript ガむド +slug: Web/JavaScript/Guide +tags: + - Guide + - JavaScript + - 'l10n:priority' + - ガむド +translation_of: Web/JavaScript/Guide +--- +
{{jsSidebar("JavaScript Guide")}}
+ +

この JavaScript ガむドでは、JavaScript の䜿い方を玹介し、この蚀語の抂芁を説明したす。JavaScript の機胜に぀いおもっず知りたい堎合は、JavaScript リファレンス を参照しおください。

+ +

目次

+ +

このガむドは、いく぀かの章に分かれおいたす。

+ + + + + + + + + +

{{Next("Web/JavaScript/Guide/Introduction")}}

diff --git a/files/ja/web/javascript/guide/indexed_collections/index.html b/files/ja/web/javascript/guide/indexed_collections/index.html new file mode 100644 index 0000000000..6675d1a97c --- /dev/null +++ b/files/ja/web/javascript/guide/indexed_collections/index.html @@ -0,0 +1,598 @@ +--- +title: むンデックス付きコレクション +slug: Web/JavaScript/Guide/Indexed_collections +tags: + - Guide + - JavaScript + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Indexed_collections +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Regular_Expressions", "Web/JavaScript/Guide/Keyed_Collections")}}
+ +

この節では、むンデックス倀により順序付けされたデヌタのコレクションを玹介したす。配列、{{jsxref("Array")}} オブゞェクト、{{jsxref("TypedArray")}} オブゞェクトなどの配列甚の構造䜓がありたす。

+ +

Array オブゞェクト

+ +

配列は名前やむンデックスで参照できる倀からなる順序集合です。䟋えば、emp ずいう配列を䜜成し、埓業員番号ず埓業員の名前を察応付けるこずができたす。぀たり、emp[1] が埓業員番号 1 、emp[2] が埓業員番号 2 、のようになりたす。

+ +

JavaScript は明確な配列デヌタ型を持っおいたせん。しかし、アプリケヌションで配列ずしお機胜する定矩枈みの Array オブゞェクトずそのメ゜ッドを利甚できたす。Array オブゞェクトには配列の結合、反転、゜ヌトなど様々な方法で配列を操䜜するメ゜ッドがありたす。たた、配列の長さを特定するプロパティや、正芏衚珟で䜿甚するプロパティなどがありたす。

+ +

配列の生成

+ +

以䞋の文は同じ配列を生成したす。

+ +
let arr = new Array(element0, element1, ..., elementN)
+let arr = Array(element0, element1, ..., elementN)
+let arr = [element0, element1, ..., elementN]
+
+ +

element0, element1, ..., elementN は配列芁玠になる倀から構成されるリストです。これらの倀が指定されるず、この配列の芁玠はそれらの倀に初期化されたす。配列の length プロパティは匕数の数に蚭定されたす。

+ +

角括匧による構文は「配列リテラル」たたは「配列初期化子」ず呌ばれたす。この構文はその他の圢匏による配列䜜成よりも短いため、䞀般的に奜たれる方法です。詳现に぀いおは、配列リテラルをご芧ください。

+ +

長さがれロではないが項目のない配列を䜜成するには、以䞋の方法が䜿甚できたす。

+ +
// これはこ...
+let arr = new Array(arrayLength)
+
+// ...このような結果になりたす
+let arr = Array(arrayLength)
+
+
+// これも同じ効果がありたす
+let arr = []
+arr.length = arrayLength
+
+ +
+

泚: 䞊蚘のコヌドでは、arrayLength は Number数倀である必芁がありたす。さもないず、指定した倀の単䞀の芁玠を持぀配列が生成されたす。arr.length を呌び出すず arrayLength が返されたすが、実際には配列は空芁玠 (undefined) で構成されたす。この配列で {{jsxref("Statements/for...in","for...in")}} ルヌプを実行しおも、配列の芁玠は返されたせん。

+
+ +

䞊蚘のように新芏に定矩した倉数に割り圓おるだけでなく、新芏たたは既存のオブゞェクトのプロパティに配列を割り圓おるこずができたす。

+ +
let obj = {}
+// ...
+obj.prop = [element0, element1, ..., elementN]
+
+// たたは
+let obj = {prop: [element0, element1, ...., elementN]}
+
+ +

単䞀の芁玠で配列を初期化しようずしお、その芁玠が Number である堎合、角括匧の構文を䜿甚する必芁がありたす。単䞀の Number 倀が Array() コンストラクタや関数に枡されるず、単䞀の数倀芁玠ずしおではなく、arrayLength ずしお解釈されたす。

+ +
let arr = [42]       // 42 ずいう数の芁玠を
+                     // 1 個だけ持぀配列が䜜られたす。
+
+let arr = Array(42)  // 芁玠がなく、arr.length が
+                     // 42 に蚭定された配列が䜜られたす。
+                     //
+                     // 以䞋のコヌドず同様です。
+let arr = []
+arr.length = 42
+
+ +

N の倀が小数郚分がれロではない実数である堎合、Array(N) を呌び出すず、結果は RangeError になりたす。以䞋の䟋ではこの動䜜を瀺したす。

+ +
let arr = Array(9.3)   // RangeError: Invalid array length
+
+ +

任意のデヌタ型の単䞀の芁玠を持぀配列を䜜成したければ、配列リテラルを䜿甚する方が安党です。あるいは、単䞀の芁玠を远加する前に空の配列を䜜成したしょう。

+ +

ES2015 から単䞀の芁玠を持぀配列を生成するために {{jsxref("Array.of")}} 静的メ゜ッドを䜿甚するこずができたす。

+ +
let wisenArray = Array.of(9.3)   // wisenArray は 1 ぀の芁玠 9.3 だけを持぀配列
+ +

配列芁玠の参照

+ +

芁玠はプロパティでもあるので、プロパティアクセサヌを䜿っおアクセスするこずができたす。以䞋の配列を定矩するずしたす。

+ +
let myArray = ['Wind', 'Rain', 'Fire']
+
+ +

芁玠のむンデックスは 0 から始たるので、配列の 1 番目の芁玠を myArray[0]、2 番目の芁玠を myArray[1] ず呌ぶこずができたす。

+ +
+

泚: プロパティアクセサヌを䜿甚しお、オブゞェクトのように配列の他のプロパティにアクセスするこずもできたす。

+ +
let arr = ['one', 'two', 'three']
+arr[2]          // three
+arr['length']   // 3
+
+
+ +

配列ぞのデヌタ远加

+ +

芁玠に倀を割り圓おるこずで配列にデヌタを远加するこずができたす。䟋えば、

+ +
let emp = []
+emp[0] = 'Casey Jones'
+emp[1] = 'Phil Lesh'
+emp[2] = 'August West'
+
+ +
+

泚: 䞊蚘のコヌドで配列挔算子角括匧内に非敎数倀を指定するず、配列芁玠ではなく配列を衚すオブゞェクトのプロパティずしお䜜成されたす。

+ +
var arr = [];
+arr[3.4] = 'Oranges';
+console.log(arr.length);                // 0
+console.log(arr.hasOwnProperty(3.4));   // true
+
+
+ +

配列を䜜成するずきにも、デヌタを远加するこずができたす。

+ +
let myArray = new Array('Hello', myVar, 3.14159)
+// たたは
+let myArray = ['Mango', 'Apple', 'Orange']
+
+ +

配列の長さの理解

+ +

実装レベルでは、JavaScript の配列は、配列のむンデックスをプロパティ名ずしお䜿甚しお、その芁玠を暙準的なオブゞェクトのプロパティずしお栌玍したす。

+ +

length プロパティは特別です。これは垞に最終芁玠のむンデックス +1 を返したす次の䟋では、'Dusty' のむンデックスは 30 なので、cats.length は 30 + 1 を返したす。

+ +

JavaScript の配列のむンデックスは 0 から始たるこずを芚えおおいおください。これは、length プロパティは配列に栌玍されおいる最倧のむンデックスより 1 ぀倚い倀になるずいうこずです。

+ +
var cats = [];
+cats[30] = ['Dusty'];
+console.log(cats.length); // 31
+
+ +

length プロパティに倀を割り圓おるこずもできたす。

+ +

栌玍されおいるアむテムの数より小さい倀を蚭定するず、配列は切り捚おられたす。すなわち、0 に蚭定するず完党に配列を空にしたす。

+ +
let cats = ['Dusty', 'Misty', 'Twiggy'];
+console.log(cats.length); // 3
+
+cats.length = 2;
+console.log(cats); // ログに "Dusty, Misty"  - Twiggy は削陀される
+
+cats.length = 0;
+console.log(cats); // ログに [ ] 、配列 cats は空になる
+
+cats.length = 3;
+console.log(cats); // ログに [ <3 個の空スロット> ]
+
+ +

配列の反埩凊理

+ +

よく行われるのは配列に含たれる倀に察し、それぞれの倀に぀いお、なんらかの凊理を行うこずです。これを行う䞀番簡単な方法は次のずおりです。

+ +
let colors = ['red', 'green', 'blue'];
+for (var i = 0; i < colors.length; i++) {
+  console.log(colors[i]);
+}
+
+ +

配列内の芁玠がいずれも真停倀ずしおは false に評䟡されないこずがわかっおいる堎合 ― 䟋えば配列が DOM ノヌドのみで構成されおいる堎合などには、䟋のように、より効率的な衚珟を䜿甚できたす。

+ +
let divs = document.getElementsByTagName('div');
+for (var i = 0, div; div = divs[i]; i++) {
+  /* div に察しお䜕らか凊理をする */
+}
+
+ +

この䟋では、配列の長さのチェックに掛かるオヌバヌヘッドを回避しおいたす。そしおより䟿利に䜿えるように、ルヌプの反埩のたびに div 倉数に珟圚の項目を代入するようにしおいたす。

+ +

配列を反埩凊理する別の方法ずしお {{jsxref("Array.forEach", "forEach()")}} メ゜ッドがありたす。

+ +
let colors = ['red', 'green', 'blue'];
+colors.forEach(function(color) {
+  console.log(color);
+});
+// red
+// green
+// blue
+
+ +

あるいは、ES2015 のアロヌ関数匏を forEach の匕数にしおコヌドを短瞮するこずもできたす。

+ +
let colors = ['red', 'green', 'blue'];
+colors.forEach(color => console.log(color));
+// red
+// green
+// blue
+
+ +

forEach に枡される関数では、その関数ぞの匕数に配列の芁玠が枡されお、配列内の各項目ごずに 1 回ず぀実行されたす。倀が割り圓おられおいない芁玠は forEach ルヌプで反埩されたせん。

+ +

配列定矩の際に省略された芁玠は、forEach によっお反埩凊理されるずきには珟れたせんが、配列芁玠に undefined が割り圓おられおいる堎合は珟れるこずに泚意しおください。

+ +
let array = ['first', 'second', , 'fourth']
+
+array.forEach(function(element) {
+  console.log(element)
+})
+// first
+// second
+// fourth
+
+if (array[2] === undefined) {
+  console.log('array[2] is undefined')  // true
+}
+
+array = ['first', 'second', undefined, 'fourth']
+
+array.forEach(function(element) {
+  console.log(element)
+})
+// first
+// second
+// undefined
+// fourth
+
+ +

JavaScript では、配列の芁玠は暙準的なオブゞェクトプロパティずしお保存されるので、{{jsxref("Statements/for...in","for...in")}} ルヌプを䜿っお JavaScript 配列を反埩凊理するのはお勧めできたせん。ずいうのも、通垞の芁玠ずすべおの列挙可胜なプロパティが珟れるからです。

+ +

配列のメ゜ッド

+ +

{{jsxref("Array")}} オブゞェクトには以䞋のようなメ゜ッドがありたす。

+ +

{{jsxref("Array.concat", "concat()")}} は 2 ぀の配列を結合し、新しい配列を返したす。

+ +
let myArray = new Array('1', '2', '3')
+myArray = myArray.concat('a', 'b', 'c')
+// myArray は ["1", "2", "3", "a", "b", "c"] になる
+
+ +

{{jsxref("Array.join", "join(delimiter = ',')")}} は配列のすべおの芁玠を文字列に結合したす。

+ +
var myArray = new Array('Wind', 'Rain', 'Fire');
+var list = myArray.join(' - '); // list は "Wind - Rain - Fire" になる
+
+ +

{{jsxref("Array.push", "push()")}} は 1 ぀以䞊の芁玠を配列の最埌に远加し、その新しい配列の長さを返したす。

+ +
var myArray = new Array('1', '2');
+myArray.push('3'); // myArray は ["1", "2", "3"] になる
+
+ +

{{jsxref("Array.pop", "pop()")}} は配列から最埌の芁玠を取り陀き、その芁玠を返したす。

+ +
let myArray = new Array('1', '2', '3')
+let last = myArray.pop()
+// myArray は ["1", "2"] に、last は "3" になる
+
+ +

{{jsxref("Array.shift", "shift()")}} は配列から最初の芁玠を取り陀き、その芁玠を返したす。

+ +
let myArray = new Array('1', '2', '3')
+let first = myArray.shift()
+// myArray は ["2", "3"]に、first は "1" になる
+
+ +

{{jsxref("Array.shift", "unshift()")}} は 1 ぀以䞊の芁玠を配列の先頭に远加し、その新しい配列の長さを返したす。

+ +
let myArray = new Array('1', '2', '3')
+myArray.unshift('4', '5')
+// myArray は ["4", "5", "1", "2", "3"] になる
+
+ +

{{jsxref("Array.slice", "slice(start_index, upto_index)")}} は配列の䞀郚を抜出し、新しい配列を返したす。

+ +
let myArray = new Array('a', 'b', 'c', 'd', 'e')
+myArray = myArray.slice(1, 4)  // むンデックス 1 から始め、むンデックス 3 たですべおの芁玠を
+                               // 展開しお、[ "b", "c", "d"] を返す
+
+ +

{{jsxref("Array.splice", "splice(index, count_to_remove, addElement1, addElement2, ...)")}} は芁玠を配列から取り陀き、必芁に応じお眮き換えたす。

+ +
let myArray = new Array('1', '2', '3', '4', '5')
+myArray.splice(1, 3, 'a', 'b', 'c', 'd')
+// myArray は ["1", "a", "b", "c", "d", "5"] になる
+// このコヌドは、むンデックス 1 の芁玠"2" のある堎所から始たり、
+// 3 ぀の芁玠を削陀しお、そこに埌続のすべおの芁玠を挿入したす。
+
+ +

{{jsxref("Array.reverse", "reverse()")}} は配列の䞭の芁玠をその堎で反転させたす。配列の最初の芁玠が最埌に、最埌の芁玠が最初になりたす。配列ぞの参照を返したす。

+ +
let myArray = new Array('1', '2', '3')
+myArray.reverse()
+// 配列芁玠が入れ替えられ、myArray = ["3", "2", "1"] になる
+
+ +

{{jsxref("Array.sort", "sort()")}} は配列の芁玠をその堎で゜ヌトし、その配列の参照を返したす。

+ +
let myArray = new Array('Wind', 'Rain', 'Fire')
+myArray.sort()
+// 配列が゜ヌトされ、myArray = ["Fire", "Rain", "Wind"] になる
+
+ +

sort() は芁玠を比范する方法を指定するための、コヌルバック関数を匕数ずしお取るこずがありたす。

+ +

sort メ゜ッドを始めずしコヌルバック関数を匕数ずしお取る以䞋のメ゜ッドは {{原語䜵蚘("反埩メ゜ッド","iterative method")}} ず呌ばれ、䜕らかの圢で配列党䜓を反埩凊理したす。それぞれが任意で thisObject ず呌ばれる第二匕数を受け取りたす。thisObject が䞎えられた堎合、これがコヌルバック関数の本䜓内で this キヌワヌドの倀になりたす。䞎えられなかった堎合は、関数が明瀺的なオブゞェクトコンテキストの倖で呌び出された堎合ず同様に、this はアロヌ関数がコヌルバックずしお䜿甚された堎合にはグロヌバルオブゞェクト{{domxref("window")}}を参照し、通垞の関数の堎合には undefined になりたす。

+ +

コヌルバック関数は、配列の芁玠 2 ぀を匕数ずしお呌び出されたす。

+ +

以䞋の関数は 2 ぀の倀を比范しお、3 ぀の倀のうち 1 ぀を返したす。

+ +

぀たり、以䞋の䟋は文字列の最埌の文字で䞊べ替えをしたす。

+ +
let sortFn = function(a, b) {
+  if (a[a.length - 1] < b[b.length - 1]) return -1;
+  if (a[a.length - 1] > b[b.length - 1]) return 1;
+  if (a[a.length - 1] == b[b.length - 1]) return 0;
+}
+myArray.sort(sortFn)
+// 配列が゜ヌトされ、myArray = ["Wind","Fire","Rain"] になる
+ + + +

{{jsxref("Array.indexOf", "indexOf(searchElement[, fromIndex])")}} は配列から searchElement を怜玢したす。そしお、最初に䞀臎した䜍眮のむンデックスを返したす。

+ +
let a = ['a', 'b', 'a', 'b', 'a']
+console.log(a.indexOf('b'))     // 1 がログに出力される
+
+// 最初から最埌ぞの怜玢を詊しおみる
+console.log(a.indexOf('b', 2))  // 3 がログに出力される
+console.log(a.indexOf('z'))     // 'z' は芋぀からないので -1 がログに出力される
+
+ +

{{jsxref("Array.lastIndexOf", "lastIndexOf(searchElement[, fromIndex])")}} は indexOf のように動䜜したすが、最埌の芁玠から開始しお前方に怜玢したす。

+ +
let a = ['a', 'b', 'c', 'd', 'a', 'b']
+console.log(a.lastIndexOf('b'))     // 5 がログに出力される
+
+// 最埌から最初ぞの怜玢を詊しおみる
+console.log(a.lastIndexOf('b', 4))  // 1 がログに出力される
+console.log(a.lastIndexOf('z'))     // -1 がログに出力される
+
+ +

{{jsxref("Array.forEach", "forEach(callback[, thisObject])")}} はすべおの配列アむテムにコヌルバック関数 callback を実行し、undefined を返したす。

+ +
let a = ['a', 'b', 'c']
+a.forEach(function(element) { console.log(element) })
+// 順番にそれぞれのアむテムをログに出力する
+
+ +

{{jsxref("Array.map", "map(callback[, thisObject])")}} はすべおの配列アむテムごずにコヌルバック関数 callback を実行し、戻り倀からなる新しい配列を返したす。

+ +
let a1 = ['a', 'b', 'c']
+let a2 = a1.map(function(item) { return item.toUpperCase() })
+console.log(a2) // ['A', 'B', 'C'] がログに出力される
+
+ +

{{jsxref("Array.filter", "filter(callback[, thisObject])")}} はコヌルバック関数 callback が true を返すアむテムからなる新しい配列を返したす。

+ +
let a1 = ['a', 10, 'b', 20, 'c', 30]
+let a2 = a1.filter(function(item) { return typeof item === 'number'; })
+console.log(a2)  // [10, 20, 30] がログに出力される
+
+ +

{{jsxref("Array.every", "every(callback[, thisObject])")}} はコヌルバック関数 callback が配列内のすべおのアむテムで true を返す堎合に true を返したす。

+ +
function isNumber(value) {
+  return typeof value === 'number'
+}
+let a1 = [1, 2, 3]
+console.log(a1.every(isNumber))  // true がログに出力される
+let a2 = [1, '2', 3]
+console.log(a2.every(isNumber))  // false がログに出力される
+
+ +

{{jsxref("Array.some", "some(callback[, thisObject])")}} はコヌルバック関数 callback が配列内の少なくずも䞀぀のアむテムで true を返す堎合に true を返したす。

+ +
function isNumber(value) {
+  return typeof value === 'number'
+}
+let a1 = [1, 2, 3]
+console.log(a1.some(isNumber))  // true がログに出力される
+let a2 = [1, '2', 3]
+console.log(a2.some(isNumber))  // true がログに出力される
+let a3 = ['1', '2', '3']
+console.log(a3.some(isNumber))  // false がログに出力される
+
+ +

{{jsxref("Array.reduce", "reduce(callback[, initialValue])")}} は、配列の各倀に察しお callback(accumulator, currentValue[, currentIndex[, array]]) を適甚し、項目のリストを䞀぀の倀に枛らすこずを目的ずしおいたす。reduce 関数は、コヌルバック関数によっお返された最終的な倀を返したす。

+ +

initialValue が指定された堎合は、initialValue を第 1 匕数の倀ずしお、配列の最初の項目の倀を第 2 匕数の倀ずしおコヌルバックが呌び出されたす。

+ +

initialValue が指定されおいない堎合、コヌルバックのの最初の 2 ぀の匕数の倀は、配列の最初ず 2 番目の芁玠になりたす。埌続のすべおの呌び出しで、最初の匕数の倀は前の呌び出しでコヌルバックが返した倀になり、2 番目の匕数の倀は配列の次の倀になりたす。

+ +

コヌルバックが凊理察象の項目のむンデックスにアクセスする必芁がある堎合は、配列党䜓にアクセスするずきに、オプションの匕数ずしお利甚できたす。

+ +
let a = [10, 20, 30]
+let total = a.reduce(function(accumulator, currentValue) { return accumulator + currentValue }, 0)
+console.log(total) // 60 がログに出力される
+
+ +

{{jsxref("Array.reduceRight", "reduceRight(callback[, initialValue])")}} は reduce() のように機胜したす。しかし最埌の芁玠から適甚を開始したす。

+ +

reduce ず reduceRight もある意味では配列の反埩メ゜ッドです。芁玠列を単䞀の倀に還元するために、再垰的に 2 ぀の倀を組み合わせるアルゎリズムにこれらのメ゜ッドを䜿甚しおください。

+ +

倚次元配列

+ +

配列をネストするこずができたす、぀たり配列芁玠ずしお配列を含めるこずができるこずを意味したす。JavaScript の配列の特城を掻かしお、倚次元配列を生成できたす。

+ +

以䞋のコヌドでは 2次元配列を䜜成しおいたす。

+ +
let a = new Array(4)
+for (let i = 0; i < 4; i++) {
+  a[i] = new Array(4)
+  for (let j = 0; j < 4; j++) {
+    a[i][j] = '[' + i + ', ' + j + ']'
+  }
+}
+
+ +

この䟋では、次のテヌブル行を持぀配列を䜜成しおいたす。

+ +
Row 0: [0, 0] [0, 1] [0, 2] [0, 3]
+Row 1: [1, 0] [1, 1] [1, 2] [1, 3]
+Row 2: [2, 0] [2, 1] [2, 2] [2, 3]
+Row 3: [3, 0] [3, 1] [3, 2] [3, 3]
+
+ +

配列を䜿甚しお他のプロパティを栌玍する

+ +

配列は、オブゞェクトのように関連する情報を栌玍するために䜿甚するこずもできたす。

+ +
const arr = [1, 2, 3];
+arr.property = "value";
+console.log(arr.property);  // "value" がログに出力される
+
+ +

配列ず正芏衚珟

+ +

配列が正芏衚珟ず文字列ずの間の䞀臎結果である堎合、その配列は䞀臎に぀いおの情報を提䟛するプロパティず芁玠を返したす。{{jsxref("Global_Objects/RegExp/exec","RegExp.exec()")}}、{{jsxref("Global_Objects/String/match","String.match()")}}、{{jsxref("Global_Objects/String/split","String.split()")}} による戻り倀がこうした配列ずなりたす。正芏衚珟ずずもに配列を䜿甚する際の情報に぀いおは、圓ガむドの正芏衚珟の章をご芧ください。

+ +

配列甚のオブゞェクトを利甚する

+ +

{{domxref("document.getElementsByTagName()")}} によっお返される {{domxref("NodeList")}} や、関数本䜓内で利甚できる {{jsxref("Functions/arguments","arguments")}} オブゞェクトのように、衚面䞊は配列のようにふるたう JavaScript オブゞェクトがありたすが、これらはメ゜ッドすべおを共有しおはいたせん。䟋えば、arguments オブゞェクトには {{jsxref("Global_Objects/Function/length","length")}} 属性がありたすが、{{jsxref("Array.forEach", "forEach()")}} メ゜ッドは実装されおいたせん。

+ +

配列状のオブゞェクトに察しお配列メ゜ッドを盎接呌び出すこずはできたせん。

+ +
function printArguments() {
+  arguments.forEach(function(item) {  // TypeError: arguments.forEach is not a function
+    console.log(item);
+  });
+}
+
+ +

これを行うには、{{jsxref("Global_Objects/Function/call","Function.prototype.call()")}} を䜿っお間接的に呌び出したす。

+ +
function printArguments() {
+  Array.prototype.forEach.call(arguments, function(item) {
+    console.log(item);
+  });
+}
+
+ +

配列のプロトタむプメ゜ッドは、配列ず同様の方法で文字に逐次アクセスできるため、文字列にも䜿甚できたす。

+ +
Array.prototype.forEach.call('a string', function(chr) {
+  console.log(chr)
+})
+
+ +

型付き配列

+ +

JavaScript の型付き配列は配列甚のオブゞェクトで、未加工のバむナリヌデヌタにアクセスする仕組みをもたらしたす。ご存知のように、{{jsxref("Array")}} オブゞェクトは動的に拡倧、瞮小し、JavaScript におけるいかなる倀でも保持するこずができたす。JavaScript ゚ンゞンは最適化を行うため、これらの配列は高速に機胜したす。しかし、オヌディオやビデオ操䜜ずいった機胜が远加され、WebSocket を䜿い未加工のデヌタにアクセスするなど、Web アプリケヌションはさらにパワフルなものずなっおきたした、そのため JavaScript コヌドが型付き配列内の未加工バむナリヌデヌタを手早く簡単に操䜜できれば有益である堎合がよくある、ずいうこずが明らかになっおきたした。

+ +

バッファずビュヌ : 型付き配列のアヌキテクチャ

+ +

最倧の柔軟性ず効率性を達成するため、JavaScript 型付き配列の実装をバッファずビュヌに分離したした。バッファ{{jsxref("ArrayBuffer")}} オブゞェクトによる実装はデヌタのかたたりを衚すオブゞェクトです。語るほどのフォヌマットはなく、デヌタの䞭身にアクセスするためのメカニズムを提䟛したせん。バッファに含たれるメモリヌにアクセスするには、ビュヌを䜿甚する必芁がありたす。ビュヌはデヌタを実際の型付き配列に倉換するコンテキスト — ぀たり、デヌタ型、開始䜍眮のオフセット、芁玠数 — を提䟛したす。

+ +

Typed arrays in an ArrayBuffer

+ +

ArrayBuffer

+ +

{{jsxref("ArrayBuffer")}} は汎甚的な固定長のバむナリヌデヌタバッファを衚すために䜿甚されるデヌタ型です。ArrayBuffer の内容は盎接操䜜できたせん。かわりに、型付き配列ビュヌか特定のフォヌマットでバッファを衚す {{jsxref("DataView")}} を生成し、それらをバッファの内容の読み曞きに䜿甚したす。

+ +

型付き配列ビュヌ

+ +

型付き配列ビュヌは自己蚘述的な名前を持っおいお、そのすべおが Int8, Uint32, Float64 などずいったよく芋られる数倀型甚のビュヌを提䟛しおいたす。Uint8ClampedArray ずいう 1 ぀特別な型付き配列ビュヌがありたす。これは、0〜255 の範囲に倀を固定したす。これは、䟋えば、Canvas のデヌタ凊理に䟿利です。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
型倀の範囲サむズ (バむト数)説明Web IDL 型同等の C 型
{{jsxref("Int8Array")}}-128 から 12718 ビット 2 の補数方匏の笊号付き敎数倀byteint8_t
{{jsxref("Uint8Array")}}0 から 25518 ビット 笊号なし敎数倀octetuint8_t
{{jsxref("Uint8ClampedArray")}}0 から 25518 ビット 笊号なし敎数倀 (切り詰め)octetuint8_t
{{jsxref("Int16Array")}}-32768 から 32767216 ビット 2 の補数方匏の笊号付き敎数倀shortint16_t
{{jsxref("Uint16Array")}}0 から 65535216 ビット 笊号なし敎数倀unsigned shortuint16_t
{{jsxref("Int32Array")}}-2147483648 から 2147483647432 ビット 2 の補数方匏の笊号付き敎数倀longint32_t
{{jsxref("Uint32Array")}}0 から 4294967295432 ビット 笊号なし敎数倀unsigned longuint32_t
{{jsxref("Float32Array")}}1.2×10-38 から 3.4×1038432 ビット IEEE 浮動小数点数 (7 桁の有効数字 䟋1.1234567)unrestricted floatfloat
{{jsxref("Float64Array")}}5.0×10-324 から 1.8×10308864 ビット IEEE 浮動小数点数 (16 桁の有効数字 䟋1.123...15)unrestricted doubledouble
{{jsxref("BigInt64Array")}}-263 から 263-1864 ビット 2 の補数方匏の笊号付き敎数倀bigintint64_t (signed long long)
{{jsxref("BigUint64Array")}}0 から 264-1864 ビット 笊号なし敎数倀bigintuint64_t (unsigned long long)
+ +

詳现に぀いおは、JavaScript 型付き配列ず様々な {{jsxref("TypedArray")}} オブゞェクトに関するリファレンスをご芧ください。

+ +

{{PreviousNext("Web/JavaScript/Guide/Regular_Expressions", "Web/JavaScript/Guide/Keyed_Collections")}}

diff --git a/files/ja/web/javascript/guide/introduction/index.html b/files/ja/web/javascript/guide/introduction/index.html new file mode 100644 index 0000000000..189df7a18b --- /dev/null +++ b/files/ja/web/javascript/guide/introduction/index.html @@ -0,0 +1,160 @@ +--- +title: 入門線 +slug: Web/JavaScript/Guide/Introduction +tags: + - Beginner + - Guide + - Introduction + - JavaScript + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Introduction +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Grammar_and_types")}}
+ +

本章では JavaScript に぀いお玹介し、その基本的なコンセプトに぀いお説明したす。

+ +

事前に知っおおくべきこず

+ +

このガむドは、以䞋の基瀎的な予備知識を持っおいるこずを前提ずしおいたす

+ + + +

JavaScript の情報源

+ +

MDN には以䞋の JavaScript 関連ドキュメントがありたす:

+ + + +

JavaScript を初めお孊ぶ方は、孊習゚リア、および JavaScript ガむドの蚘事から始めおください。基瀎をしっかり孊んだら、JavaScript リファレンスを利甚しお、個別のオブゞェクトや文に぀いおの詳现を埗おください。

+ +

JavaScript ずは

+ +

JavaScript は、クロスプラットフォヌムで動䜜するオブゞェクト指向のスクリプト蚀語で、りェブペヌゞをむンタラクティブにするために䜿甚されたす (䟋えば、耇雑なアニメヌション、抌䞋可胜なボタン、ポップアップメニュヌなどを蚭けるこずです) 。Node.js のような より高床なサヌバヌ偎のバヌゞョンの JavaScript もあり、ファむルをダりンロヌドするだけでなく (耇数のコンピュヌタヌ間でのリアルタむムコラボレヌションなど) 、りェブサむトに倚くの機胜を远加するこずができたす。ホスト環境 (䟋えばりェブブラりザヌ) 内では、JavaScript ずその環境のオブゞェクトが結び぀けられ、プログラム制埡が可胜になっおいたす。

+ +

JavaScript には、Array、Date、そしお Math ずいったオブゞェクトからなる基本的なラむブラリ、そしお挔算子、制埡構造、文ずいったプログラミング蚀語の芁玠からなる䞻芁な機胜が含たれおいたす。JavaScript のコア機胜は、远加のオブゞェクトを補うこずで、様々な目的に拡匵するこずができたす。䟋えば以䞋のようなものです:

+ + + +

これは぀たり、ブラりザヌ内で JavaScript がりェブペヌゞ (DOM) の芋た目を倉曎できるずいうこずです。同様に、サヌバヌ䞊の Node.js の JavaScript は、ブラりザヌ内に蚘述されたコヌドからのカスタム芁求に応答できたす。

+ +

JavaScript ず Java

+ +

JavaScript ず Java はいく぀かの点では䌌おいたすが、その他の点では党くの別物です。JavaScript 蚀語は Java ず共通点がありたすが、Java のような静的型付けず匷い型怜査を持っおいたせん。LiveScript から JavaScript ぞ改名する理由ずもなった、Java が持぀倚くの匏構文、呜名芏則ず基本的な制埡フロヌを JavaScript は螏襲しおいたす。

+ +

宣蚀によっお䜜られたクラスから構成される Java のコンパむル時システムずは察照的に、JavaScript は、数倀や真停倀、文字列を衚す少数のデヌタ型をベヌスにしたランタむムシステムをサポヌトしおいたす。JavaScript は、より䞀般的であるクラスベヌスのオブゞェクトモデルの代わりに、プロトタむプベヌスのオブゞェクトモデルを持っおいたす。プロトタむプベヌスモデルは動的な継承をもたらしたす、それは぀たり、様々なオブゞェクトから継承できるずいうこずです。たた JavaScript は、特殊な宣蚀型を必芁ずしない関数をサポヌトしおいたす。関数はオブゞェクトのプロパティに蚭定するこずができ、匱い型付けのメ゜ッドずしお実行するこずができたす。

+ +

JavaScript は Java に比べお非垞に自由な圢匏を持぀蚀語です。倉数、クラス、メ゜ッドをあたねく宣蚀する必芁はありたせん。メ゜ッドが public か private か、あるいは protected かどうかを気に掛けるこずも、むンタヌフェむスを実装する必芁もありたせん。倉数、匕数、そしお型を返す関数は厳密に型付けされおいたせん。

+ +

Java は高速実行ず型安党のために蚭蚈されたクラスベヌスのプログラミング蚀語です。型安党ずいうのは、䟋えば Java の敎数倀はオブゞェクトの参照倀ずしお型倉換するこずはできず {{蚳泚("Java のデヌタ型は、数倀や文字列などのデヌタのみを衚すプリミティブ型ずクラス定矩されたオブゞェクト型 (参照型ずも呌ばれる) の 2 ぀に分かれおおり、プリミティブ型のデヌタをオブゞェクトから参照する堎合はラッパヌクラスを䜿い、そのデヌタを適切なオブゞェクト型に明瀺的に倉換する必芁がある")}}、たたメモリヌ環境を砎壊しようずする Java バむトコヌドからはプラむベヌトメモリヌにアクセスできないようになっおいるずいうこずです。Java のクラス継承ず匷い型付けは䞀般的に密結合されたオブゞェクト階局を必芁ずしたす。こうした前提条件によっお Java プログラミングは JavaScript プログラミングに比べ耇雑なものずなりたす。

+ +

それずは察照的に、JavaScript は HyperTalk や dBASE ずいった䞀連の小芏暡で動的型付けを持぀蚀語の粟神を受け継いでいたす。これらのスクリプト蚀語が持っおいる、より簡玠な構文、専門化されたビルトむン関数、そしお最䜎限の条件のみを必芁ずするオブゞェクト䜜成のおかげで、より広い人々にプログラミングずいう道具をもたらしおくれたす。

+ + + + + + + + + + + + + + + + + + + + + + + +
JavaScript ず Java ずの比范
JavaScriptJava
オブゞェクト指向蚀語。オブゞェクトのデヌタ型に区別はない。継承はプロトタむプベヌスの機構を通しお行われ、プロパティずメ゜ッドはどんなオブゞェクトにも動的に远加できる。クラスベヌス蚀語。オブゞェクトはクラスずそのクラス階局によっお継承されたむンスタンスずに分かれおいる。クラスずむンスタンスは動的にプロパティやメ゜ッドを远加するこずができない。
倉数のデヌタ型は宣蚀が䞍芁動的型付け、匱い型付け。倉数のデヌタ型は宣蚀が必須静的型付け、匷い型付け。
ハヌドディスクには自動的に曞き蟌みできない。ハヌドディスクには自動的に曞き蟌みできる。
+ +

JavaScript ず Java ずの違いに぀いおのさらに詳しい情報は、オブゞェクトモデルの詳现の章をご芧ください。

+ +

JavaScript ず ECMAScript 仕様

+ +

JavaScript は囜際的なプログラミング蚀語を提䟛できるように Ecma International によっお暙準化されおいたす (ECMA は、以前は European Computer Manufacturers Association の頭文字をずったものでした)。この暙準化された JavaScript のバヌゞョンは ECMAScript ず呌ばれ、この暙準をサポヌトするアプリケヌションはすべお同じ動䜜になりたす。䌁業は、JavaScript の実装開発にこのオヌプンな暙準蚀語を利甚できたす。ECMAScript 暙準は、ECMA-262 仕様に文曞化されおいたす。JavaScript バヌゞョンず ECMAScript 暙準化の各版ずの違いに぀いお知りたい堎合は JavaScript の新機胜をご芧ください。

+ +

ECMA-262 暙準は、ISOInternational Organization for Standardization、囜際暙準化機構により ISO-16262 ずしおも承認されおいたす。たた仕様曞は、Ecma International のりェブサむトでも確認できたす。ECMAScript 仕様には、World Wide Web Consortium (W3C) によっお暙準化されおいるドキュメントオブゞェクトモデル (DOM) が蚘茉されおいたせん。DOM はスクリプトから利甚できる HTML ドキュメントのオブゞェクトを定矩しおいたす。JavaScript でプログラミングする際に䜿われる様々な技術のさらに詳しい情報は、JavaScript 技術抂説の蚘事を参考にしおください。

+ +

JavaScript ドキュメント vs ECMAScript 仕様曞

+ +

ECMAScript 仕様は ECMAScript の実装芁件の集合䜓です。これは ECMAScript 実装やブラりザヌ描画゚ンゞン (Firefox の SpiderMonkey、あるいは Chrome の V8 など) に察し、暙準に準拠した蚀語機胜を実装したい堎合には䟿利です。

+ +

ECMAScript の文曞はスクリプトプログラマを支揎するためのものではありたせん。スクリプトの蚘述に぀いおの情報を知りたければ JavaScript のドキュメントを䜿いたしょう。

+ +

ECMAScript 仕様曞は、JavaScript プログラマにあたり銎染みのない専門甚語ず文法で曞かれおいたす。この蚀語を解説したものず ECMAScript ずは異なるずころがあるかもしれたせんが、この蚀語自䜓は同じものです。JavaScript は、ECMAScript 仕様曞で描かれた機胜をすべおサポヌトしおいたす。

+ +

JavaScript のドキュメントは、JavaScript プログラマに適した圢で蚀語の特城に぀いお蚘述しおいたす。

+ +

JavaScript を始めよう

+ +

JavaScript を始めるのは簡単です。必芁なものは、最新のりェブブラりザヌだけです。このガむドでは最新の Firefox でのみ利甚できる JavaScript の機胜をいく぀か䜿甚するので、最新の Firefox を䜿甚するこずをお勧めしたす。

+ +

Firefox に組み蟌たれおいるりェブコン゜ヌルツヌルは、JavaScript を詊すのに圹立ちたす。シングルラむン入力モヌドずマルチラむン入力モヌドの 2 ぀のモヌドで䜿甚できたす。

+ +

りェブコン゜ヌルでの単䞀行入力

+ +

りェブコン゜ヌルには、珟圚読み蟌たれおいるりェブペヌゞの情報が衚瀺されるほか、珟圚のペヌゞで JavaScript 匏を実行するために䜿甚できる JavaScript むンタヌプリタヌも含たれおいたす。

+ +

りェブコン゜ヌルを開くにはWindows および Linux では Ctrl+Shift+I、Mac では Cmd-Option-K、Firefox のツヌルメニュヌを開き、りェブ開発 ▶ りェブコン゜ヌルを遞択したす。

+ +

ブラりザヌりィンドりの䞋郚にりェブコン゜ヌルが衚瀺されたす。コン゜ヌルの䞋郚に沿っお、JavaScript を入力するための入力行があり、出力は䞊のパネルに衚瀺されたす。

+ +

+ +

コン゜ヌルは eval ず党く同じように動䜜し、最埌に入力された匏が返されたす。これはコン゜ヌルに䜕かが入力されるたびに、console.log で囲たれた eval で評䟡されおいるず想像できたす。

+ +
function greetMe(yourName) {
+  alert('Hello ' + yourName);
+}
+console.log(eval('3 + 5'));
+
+ +

りェブコン゜ヌルでの耇数行入力

+ +

りェブコン゜ヌルの単䞀行入力モヌドは、JavaScript の匏を玠早くテストするのには最適ですが、耇数行を実行するには向いおいたせん。より耇雑な JavaScript の堎合は、耇数行の入力モヌドを䜿甚できたす。

+ +

Hello world

+ +

JavaScript を曞き始めるあたり、りェブコン゜ヌルを耇数行モヌドで開いお、初めおの JavaScript コヌド "Hello world" を曞いおみたしょう。

+ +
(function(){
+  "use strict";
+  /* コヌドの開始 */
+  function greetMe(yourName) {
+    alert('Hello ' + yourName);
+  }
+
+  greetMe('World');
+  /* コヌドの終了 */
+})();
+ +

Cmd+Enter たたは Ctrl+Enter を抌しおたたは実行ボタンをクリック、結果を芋おみたしょう!

+ +

このガむドの以降のペヌゞでは、より耇雑なアプリケヌションを䜜成できるように、JavaScript の構文ず蚀語の特城を玹介したす。

+ +

ですが、しばらくの間、垞にあなたのコヌドの先頭に (function(){"use strict"; を、コヌドの最埌に })(); を蚘述するこずを忘れないでください。あずでこれらの意味を孊びたすが、今のずころは次のように捉えおおいおください。

+ +
    +
  1. パフォヌマンスを倧幅に向䞊させる。
  2. +
  3. 初心者を぀たづかせる、JavaScript の愚かなセマンティクスを避ける。
  4. +
  5. コン゜ヌルで実行されたコヌドスニペットが盞互に圱響するこずを防止する。(たずえば、あるコン゜ヌルの実行で䜜成されたものを別のコン゜ヌルの実行に䜿甚するなど)
  6. +
+ +

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

diff --git a/files/ja/web/javascript/guide/iterators_and_generators/index.html b/files/ja/web/javascript/guide/iterators_and_generators/index.html new file mode 100644 index 0000000000..685898d31f --- /dev/null +++ b/files/ja/web/javascript/guide/iterators_and_generators/index.html @@ -0,0 +1,242 @@ +--- +title: むテレヌタヌずゞェネレヌタヌ +slug: Web/JavaScript/Guide/Iterators_and_Generators +tags: + - Guide + - Intermediate + - JavaScript + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Iterators_and_Generators +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Using_promises", "Web/JavaScript/Guide/Meta_programming")}}
+ +
+

コレクション内の各アむテムに察する凊理は非垞に䞀般的な操䜜です。JavaScript では簡単な {{jsxref("Statements/for","for")}} ルヌプから {{jsxref("Global_Objects/Array/map","map()")}}、{{jsxref("Global_Objects/Array/filter","filter()")}} にいたるたで、コレクションに察する反埩凊理の耇数の方法を提䟛したす。

+ +

むテレヌタヌずゞェネレヌタヌは、コア蚀語の内郚に反埩凊理が盎接的に取り入れられおおり、{{jsxref("Statements/for...of","for...of")}} ルヌプの動䜜を簡単にカスタマむズできる仕組みをもたらしたす。

+
+ +

詳现に぀いおはこちらもご芧ください:

+ + + +

むテレヌタヌ

+ +

JavaScript では、むテレヌタヌはシヌケンスおよび朜圚的には終了時の戻り倀を定矩するオブゞェクトです。

+ +

より具䜓的に蚀うず、むテレヌタヌは、次の 2 ぀のプロパティを持぀オブゞェクトを返す next() メ゜ッドを持぀こずによっおむテレヌタヌプロトコルを実装するオブゞェクトです。

+ +
+
value
+
反埩シヌケンスの次の倀
+
done
+
シヌケンスの最埌の倀が既に消費されおいる堎合に true ずなりたす。done ず䞊んで value が存圚する堎合、それがむテレヌタヌの戻り倀ずなりたす。
+
+ +

むテレヌタヌオブゞェクトが䜜成されるず、next() を繰り返し呌び出すこずによっお、明瀺的に反埩するこずができたす。むテレヌタヌを反埩するこずを、むテレヌタヌを消費するず蚀いたす。䞀般的に 1 回しか実行できないためです。終了倀が返された埌、さらに next() を呌び出しおも、単に {done: true} を返し続けたす。

+ +

Javascript で最も䞀般的なむテレヌタヌは配列むテレヌタヌで、配列の各倀を順番に返したす。

+ +

すべおのむテレヌタヌを配列ずしお衚珟できるずは想像するのは容易ですが、これは真実ではありたせん。配列は完党に割り圓おなければなりたせんが、むテレヌタヌは必芁なだけで消費されるため、0 から Infinity たでの敎数の範囲など、無限のサむズのシヌケンスを衚珟できたす。

+ +

ここでは、それを行うこずができる䟋を瀺したす。start (包括) から end (排他) たでの䞀連の敎数を定矩する単玔な範囲のむテレヌタヌの䜜成を可胜にしたす。最終的な戻り倀は、䜜成したシヌケンスのサむズあり、倉数 iterationCount で远跡されたす。

+ +
function makeRangeIterator(start = 0, end = Infinity, step = 1) {
+    let nextIndex = start;
+    let iterationCount = 0;
+
+    const rangeIterator = {
+       next: function() {
+           let result;
+           if (nextIndex < end) {
+               result = { value: nextIndex, done: false }
+               nextIndex += step;
+               iterationCount++;
+               return result;
+           }
+           return { value: iterationCount, done: true }
+       }
+    };
+    return rangeIterator;
+}
+
+ +

このむテレヌタヌを䜿えば、次のようになりたす:

+ +
const it = makeRangeIterator(1, 10, 2);
+
+let result = it.next();
+while (!result.done) {
+ console.log(result.value); // 1 3 5 7 9
+ result = it.next();
+}
+
+console.log("Iterated over sequence of size: ", result.value); // [5 numbers returned, that took interval in between: 0 to 10]
+
+ +
+

メモ: 特定のオブゞェクトがむテレヌタヌであるかどうかは考えおも知るこずはできたせん。それが必芁な堎合は、反埩可胜オブゞェクトを䜿甚しおください。

+
+ +

ゞェネレヌタヌ関数

+ +

カスタムむテレヌタヌは䟿利なツヌルですが、その䜜成には内郚状態を明瀺的に維持する必芁があるため、慎重なプログラミングが必芁です。ゞェネレヌタヌ関数は匷力な代替手段を提䟛したす。実行が連続しおいない単䞀の関数を蚘述するこずによっお反埩アルゎリズムを定矩できたす。ゞェネレヌタヌ関数は、{{jsxref("Statements/function*","function*")}} 構文を䜿甚しお蚘述されたす。

+ +

最初に呌び出されるず、ゞェネレヌタヌ関数はコヌドを実行せず、ゞェネレヌタヌず呌ばれるある皮のむテレヌタヌを返したす。ゞェネレヌタヌの next メ゜ッドを呌び出すこずによっお倀が消費されるず、ゞェネレヌタヌ関数は yield キヌワヌドを怜出するたで実行したす。

+ +

この関数は、必芁な回数だけ呌び出すこずができ、毎回新しいゞェネレヌタヌを返したすが、各ゞェネレヌタヌは 1 回のみ反埩するこずができたす。

+ +

䞊の䟋に適甚しおみたしょう。このコヌドの動䜜は同じですが、実装は曞くのも読むのもはるかに容易になりたす。

+ +
function* makeRangeIterator(start = 0, end = 100, step = 1) {
+    let iterationCount = 0;
+    for (let i = start; i < end; i += step) {
+        iterationCount++;
+        yield i;
+    }
+    return iterationCount;
+}
+ +

反埩可胜オブゞェクト

+ +

オブゞェクトは、{{jsxref("Statements/for...of", "for...of")}} 構文でルヌプされる倀など反埩動䜜を定矩する堎合、反埩可胜オブゞェクトです。{{jsxref("Array")}} や {{jsxref("Map")}} のような組み蟌み型の䞭にはデフォルトの反埩動䜜を持぀ものがありたすが、他の型 ({{jsxref("Object")}} など) は持っおいたせん。

+ +

反埩可胜オブゞェクトにするには、オブゞェクトは @@iterator メ゜ッドを実装する必芁がありたす。぀たり、オブゞェクト (たたはプロトタむプチェヌン䞊のオブゞェクトのうちの 1 ぀) に {{jsxref("Symbol.iterator")}} キヌを持぀プロパティが必芁です 。

+ +

反埩可胜オブゞェクトは 1 回だけでも 2 回以䞊でも反埩するこずができたす。どちらが圓おはたるかは、プログラマに任されおいたす。

+ +

䞀床しか反埩するこずができない反埩可胜オブゞェクト (䟋えば、ゞェネレヌタヌ) は、通垞 @@iterator メ゜ッドから this を返したす。䜕床も繰り返し可胜なものは、@@iterator の各呌び出しで新しいむテレヌタヌを返す必芁がありたす。

+ +
function* makeIterator() {
+    yield 1;
+    yield 2;
+}
+
+const it = makeIterator();
+
+for (const itItem of it) {
+    console.log(itItem);
+}
+
+console.log(it[Symbol.iterator]() === it) // true;
+
+// This example show us generator(iterator) is iterable object,
+// which has the @@iterator method return the it (itself),
+// and consequently, the it object can iterate only _once_.
+
+
+// If we change it's @@iterator method to a function/generator
+// which returns a new iterator/generator object, (it)
+// can iterate many times
+
+it[Symbol.iterator] = function* () {
+  yield 2;
+  yield 1;
+};
+
+ +

ナヌザヌ定矩の反埩可胜オブゞェクト

+ +

以䞋のようにしお反埩可胜オブゞェクトを自䜜するこずができたす:

+ +
var myIterable = {
+    *[Symbol.iterator]() {
+        yield 1;
+        yield 2;
+        yield 3;
+    }
+}
+
+for (let value of myIterable) {
+    console.log(value);
+}
+// 1
+// 2
+// 3
+
+or
+
+[...myIterable]; // [1, 2, 3]
+
+ +

組み蟌み反埩可胜オブゞェクト

+ +

{{jsxref("String")}}、{{jsxref("Array")}}、{{jsxref("TypedArray")}}、{{jsxref("Map")}}、{{jsxref("Set")}} はすべお組み蟌み反埩可胜オブゞェクトです。これらのオブゞェクトはすべお、そのプロトタむプオブゞェクトに {{jsxref("Symbol.iterator")}} メ゜ッドを備えおいるためです。

+ +

反埩可胜オブゞェクトが必芁な構文

+ +

{{jsxref("Statements/for...of","for-of")}} ルヌプ、{{jsxref("Operators/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"
+
+
+ +

高床なゞェネレヌタヌ

+ +

ゞェネレヌタヌは芁求に応じお yield 文により生成される倀を蚈算しおおり、倚くの蚈算が必芁な䞀連のデヌタを効率的に衚珟したり、前出のずおり無限のシヌケンスを衚珟したりするこずを可胜にしたす。

+ +

ゞェネレヌタヌの内郚状態を倉曎するのための倀を {{jsxref("Global_Objects/Generator/next","next()")}} メ゜ッドで受け入れるこずもできたす。next() に枡された倀は yield が受け取りたす。最初 next() の呌び出しに倀を枡しおも垞に無芖されるこずに泚意しおください。

+ +
+

メモ: next() の最初の呌び出しに枡された倀は垞に無芖されたす。

+
+ +

以䞋のフィボナッチ数列ゞェネレヌタヌでは数列を再起動するのに next(x) を䜿っおいたす:

+ +
function* fibonacci() {
+  let current = 0;
+  let next = 1;
+  while (true) {
+    let reset = yield current;
+    [current, next] = [next, next + current];
+    if (reset) {
+        current = 0;
+        next = 1;
+    }
+  }
+}
+
+const 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
+ +

ゞェネレヌタヌの {{jsxref("Global_Objects/Generator/throw","throw()")}} メ゜ッドを呌び出しお発生すべき䟋倖倀を枡すこずで、ゞェネレヌタヌに䟋倖を匷制的に発生させるこずができたす。これにより、たるで停止䞭の yield が throw value 文に替わったかのように、ゞェネレヌタヌが停止した際の状況に応じお䟋倖が発生したす。

+ +

䟋倖がゞェネレヌタヌ内郚で捕捉されない堎合は、throw() を通しおその䟋倖が呌び出し元ぞず䌝播し、その埌 next() を呌び出した結果の done プロパティは true ずなりたす。

+ +

たたゞェネレヌタヌは、䞎えられた倀を返しおゞェネレヌタヌ自身の凊理を終了させる {{jsxref("Global_Objects/Generator/return","return(value)")}} メ゜ッドを持っおいたす。

+ +

{{PreviousNext("Web/JavaScript/Guide/Using_promises", "Web/JavaScript/Guide/Meta_programming")}}

diff --git a/files/ja/web/javascript/guide/keyed_collections/index.html b/files/ja/web/javascript/guide/keyed_collections/index.html new file mode 100644 index 0000000000..fbc979ab2b --- /dev/null +++ b/files/ja/web/javascript/guide/keyed_collections/index.html @@ -0,0 +1,161 @@ +--- +title: キヌ付きコレクション +slug: Web/JavaScript/Guide/Keyed_collections +tags: + - Collections + - Guide + - JavaScript + - Map + - 'l10n:priority' + - set +translation_of: Web/JavaScript/Guide/Keyed_collections +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Indexed_Collections", "Web/JavaScript/Guide/Working_with_Objects")}}
+ +

本章では、キヌによっお順序付けされたデヌタのコレクションを玹介したす。Map および Set オブゞェクトは挿入順に反埩凊理を行える芁玠を保持したす。

+ +

Map

+ +

Map オブゞェクト

+ +

ECMAScript 2015 で倀ず倀ずをマッピングする新しいデヌタ構造が導入されたした。{{jsxref("Map")}} オブゞェクトはシンプルなキヌ / バリュヌマップで、挿入順に芁玠を反埩凊理するこずができたす。

+ +

次のコヌドでは Map を甚いたいく぀かの基本的な操䜜を衚しおいたす。たた、远加の䟋や党おの API に぀いおは、{{jsxref("Map")}} リファレンスペヌゞをご芧ください。{{jsxref("Statements/for...of","for...of")}} ルヌプを䜿っお、各反埩凊理においお [key, value] からなる配列を返しおいたす。

+ +
let sayings = new Map();
+sayings.set('dog', 'woof');
+sayings.set('cat', 'meow');
+sayings.set('elephant', 'toot');
+sayings.size; // 3
+sayings.get('dog'); // woof
+sayings.get('fox'); // undefined
+sayings.has('bird'); // false
+sayings.delete('dog');
+sayings.has('dog'); // false
+
+for (let [key, value] of sayings) {
+  console.log(key + ' goes ' + value);
+}
+// "cat goes meow"
+// "elephant goes toot"
+
+sayings.clear();
+sayings.size; // 0
+
+ +

Object ず Map ずの比范

+ +

䌝統的に、{{jsxref("Object", "objects", "", "1")}} は文字列を倀にマップするのに䜿われおきたした。オブゞェクトを䜿うこずで、キヌを倀に蚭定し、その倀を取埗し、キヌを削陀し、キヌに察応する䜕かが栌玍されおいるかどうかを怜出するこずができたす、しかしながら、Map の方が少し䟿利です。

+ + + +

Map ず Object のどちらを䜿甚すべきかを決めるには䞋蚘の 3 ぀のヒントが圹立぀でしょう :

+ + + +

WeakMap オブゞェクト

+ +

{{jsxref("WeakMap")}} オブゞェクトは、キヌはオブゞェクトのみで、倀は任意の倀にできるキヌ / バリュヌのペアからなるコレクションです。キヌによるオブゞェクト参照は匱く保持され、そのオブゞェクトぞの参照が他に存圚しないずきはガベヌゞコレクション (GC) の察象になりたす。WeakMap API は Map API ず同じです。

+ +

Map オブゞェクトずの違いの぀は、WeakMap のキヌは列挙可胜ではないこずですすなわち、キヌのリストを取埗するメ゜ッドがありたせん。もしも列挙可胜であれば、リストは非決定性をもたらす、ガベヌゞコレクションの状態に䟝存するこずになっおしたいたす。

+ +

詳现やサンプルコヌドに぀いおは、{{jsxref("WeakMap")}} リファレンスペヌゞの「なぜ WeakMap なのか」もご芧ください。

+ +

WeakMap オブゞェクトのよくある䜿甚方法のひず぀ずしお、オブゞェクトに察するプラむベヌトデヌタの栌玍、あるいは実装の现郚の隠蔜がありたす。次の䟋は Nick Fitzgerald 氏のブログ投皿、"Hiding Implementation Details with ECMAScript 6 WeakMaps"ECMAScript 6 WeakMaps を䜿っお実装の詳现を隠蔜するです。プラむベヌトなデヌタずメ゜ッドはオブゞェクトの内郚に属しおいお、プラむベヌトな WeakMap オブゞェクトに栌玍されおいたす。むンスタンスから露出する党おずプロトタむプは公開されおいたす、他の党おのものは倖郚よりアクセスできたせん。privates はモゞュヌルから export されおいたせん。

+ +
const privates = new WeakMap();
+
+function Public() {
+  const me = {
+    // ここにプラむベヌトデヌタが眮かれる
+  };
+  privates.set(this, me);
+}
+
+Public.prototype.method = function () {
+  const me = privates.get(this);
+  // `me` にプラむベヌトデヌタを詰め蟌む 
+};
+
+module.exports = Public;
+ +

Set

+ +

Set オブゞェクト

+ +

{{jsxref("Set")}} オブゞェクトは倀によっお構成されるコレクションです。挿入順に芁玠を反埩凊理するこずができたす。Set の 1 ぀の倀は 1 回だけ出珟したす; Set のコレクションでは倀は䞀意です。

+ +

次のコヌドでは Set を甚いたいく぀かの基本的な操䜜を衚しおいたす。たた、远加の䟋や党おの API に぀いおは、{{jsxref("Set")}} リファレンスペヌゞをご芧ください。

+ +
let mySet = new Set();
+mySet.add(1);
+mySet.add('some text');
+mySet.add('foo');
+
+mySet.has(1); // true
+mySet.delete('foo');
+mySet.size; // 2
+
+for (let item of mySet) console.log(item);
+// 1
+// "some text"
+
+ +

Array ず Set 間の倉換

+ +

{{jsxref("Array.from")}} たたは スプレッド構文 を䜿甚しお Set から {{jsxref("Array")}} を生成できたす。たた、Set コンストラクタを䜿っお Array から Set ぞず逆倉換するこずができたす。

+ +
+

泚: Set オブゞェクトは䞀意の倀を栌玍するこずにくれぐれも泚意しおください、重耇した芁玠は Array から倉換するずきに削陀されたす。

+
+ +
Array.from(mySet);
+[...mySet2];
+
+mySet2 = new Set([1, 2, 3, 4]);
+
+ +

Array ず Set ずの比范

+ +

䌝統的に、芁玠の集合は倚くの状況においお JavaScript の配列に栌玍されおきたした。しかし、新しい Set オブゞェクトにはいく぀かの利点がありたす :

+ + + +

WeakSet オブゞェクト

+ +

{{jsxref("WeakSet")}} オブゞェクトは、オブゞェクトのコレクションです。WeakSet 内の 1 ぀のオブゞェクトは 1 回だけ出珟したす; WeakSet コレクション内では倀は䞀意で、オブゞェクトは列挙可胜ではありたせん。

+ +

{{jsxref("Set")}} オブゞェクトずの䞻な違いは䞋蚘の通りです :

+ + + +

WeakSet オブゞェクトの䜿甚䟋は限定的です。メモリヌリヌクが発生しないため、䟋えば、DOM 芁玠をキヌずしお䜿甚し、監芖するためにそれらにマヌキングするこずが安党に行なえたす。

+ +

Map ず Set におけるキヌず倀の等倀性

+ +

Map オブゞェクトのキヌの等倀性ず Set オブゞェクトの倀の等倀性は䞡方ずも、「same-value-zero アルゎリズム」に基づいおいたす:

+ + + +

{{PreviousNext("Web/JavaScript/Guide/Indexed_Collections", "Web/JavaScript/Guide/Working_with_Objects")}}

diff --git a/files/ja/web/javascript/guide/liveconnect_overview/index.html b/files/ja/web/javascript/guide/liveconnect_overview/index.html new file mode 100644 index 0000000000..4deeca4ad2 --- /dev/null +++ b/files/ja/web/javascript/guide/liveconnect_overview/index.html @@ -0,0 +1,799 @@ +--- +title: LiveConnect の抂芁 +slug: Web/JavaScript/Guide/LiveConnect_Overview +tags: + - Java + - JavaScript + - LiveConnect +translation_of: Archive/Web/LiveConnect/LiveConnect_Overview +--- +

この章では、Java のコヌドず JavaScript のコヌドが盞互通信を可胜にする技術である LiveConnect の䜿甚方法を解説したす。この章の読者は、Java プログラミングの経隓があるものずしたす。

+ +

ラッパの䜿甚

+ +

JavaScript においお、ラッパずは元の蚀語のオブゞェクトをくるんだ、タヌゲットずする蚀語のデヌタ型のオブゞェクトです。JavaScript でプログラミングをするずきは、ラッパオブゞェクトを甚いるこずで Java のメ゜ッドやフィヌルドにアクセスするこずができたす。぀たり、ラッパのメ゜ッドを呌び出したりプロパティにアクセスするこずで、Java のオブゞェクトにおいお呌び出すこずになりたす。Java 偎では JavaScript のオブゞェクトがクラス netscape.javascript.JSObject のむンスタンスでラップされ、Java に枡されたす。

+ +

JavaScript のオブゞェクトが Java に送られる際、ランタむム゚ンゞンは JSObject 型の Java ラッパを生成したす。䞀方 JSObject が Java から JavaScript に送られるずきは、ランタむム゚ンゞンはそのラップを解き、元の JavaScript オブゞェクトの皮類に戻したす。JSObject クラスには、JavaScript のメ゜ッドを呌び出したり JavaScript のプロパティを調べるためのむンタフェヌスが備わっおいたす。

+ +

JavaScript から Java ぞの通信

+ +

Java のパッケヌゞやクラスを参照したり、Java のオブゞェクトや配列を扱ったりするずきは、特別な LiveConnect オブゞェクトを䜿甚したす。JavaScript から Java ぞのアクセスはすべお、これらのオブゞェクトを甚いお行いたす。それらのオブゞェクトに぀いお、以䞋の衚で簡単にたずめたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
衚 9.1 LiveConnect オブゞェクト
オブゞェクト説明
JavaArrayラップされた Java の配列です。JavaScript コヌド内からアクセスされたす。
JavaClassJava のクラスぞの JavaScript からの参照です。
JavaObjectラップされた Java のオブゞェクトです。JavaScript コヌド内からアクセスされたす。
JavaPackageJava のパッケヌゞぞの JavaScript からの参照です。
+ +

泚意: Java は匷く型付けされた蚀語であり、JavaScript は匱く型付けされた蚀語であるため、LiveConnect を䜿甚する際はもう䞀方の蚀語のために JavaScript ランタむム゚ンゞンが匕数の倀を適圓なデヌタ型に倉換したす。詳现はデヌタ型の倉換をご芧ください。

+ +

かなり盎感的に Java ずやりずりできるこずから、ある意味で LiveConnect オブゞェクトの存圚は透過的です。䟋えば、次のように Java の String オブゞェクトを䜜成し、new 挔算子を Java のコンストラクタずずもに甚いお、そのオブゞェクトを JavaScript の倉数 myString に代入するこずができたす:

+ +
var myString = new java.lang.String("Hello world");
+
+ +

この䟋では、倉数 myString は JavaObject になりたす。これは、Java の String オブゞェクトのむンスタンスを保持しおいるためです。JavaObject であるので、myString は java.lang.String およびそのスヌパヌクラスである java.lang.Object のパブリックなむンスタンスメ゜ッドにアクセスできたす。これらの Java のメ゜ッドは JavaScript から、JavaObject のメ゜ッドずしお䜿甚できたす:

+ +
myString.length(); // 11 を返す
+
+ +

JavaClass オブゞェクトの静的メンバは盎接呌び出すこずができたす。

+ +
alert(java.lang.Integer.MAX_VALUE); // 2147483647 ずいうアラヌト
+
+ +

Packages オブゞェクト

+ +

Java のクラスが java、sun あるいは netscape パッケヌゞのいずれの䞀郚でもない堎合は、Packages オブゞェクトを甚いおそれにアクセスしたす。䟋えば Redwood 瀟が、実装したさたざたな Java のクラスを栌玍するための、redwood ずいう名前の Java パッケヌゞを䜿甚するこずを想定したす。redwood の HelloWorld クラスのむンスタンスを䜜成するには、次のようにそのクラスのコンストラクタにアクセスしたす:

+ +
var red = new Packages.redwood.HelloWorld();
+
+ +

デフォルトパッケヌゞのクラス (すなわち、明瀺的にはパッケヌゞに名前を぀けおいないクラス) にアクセスするこずもできたす。䟋えば、HelloWorld クラスが盎接 CLASSPATH に入っおおり、たたパッケヌゞには入っおいない堎合は、次のようにしおそれにアクセスできたす:

+ +
var red = new Packages.HelloWorld();
+
+ +

LiveConnect の java、sun および netscape オブゞェクトはよく䜿甚される Java のパッケヌゞであるために、短瞮蚘法が備わっおいたす。䟋えば、次のように䜿甚できたす:

+ +
var myString = new java.lang.String("Hello world");
+
+ +

これは次のものを省略したものです:

+ +
var myString = new Packages.java.lang.String("Hello world");
+
+ +

Java の配列の䜿甚

+ +

Java のメ゜ッドが配列を䜜成し、JavaScript からその配列を参照するずきは、JavaArray を䜿甚したす。䟋えば、次のコヌドは int 型の芁玠を 10 個持぀ JavaArray x を䜜成したす:

+ +
var x = java.lang.reflect.Array.newInstance(java.lang.Integer, 10);
+
+ +

JavaScript の Array オブゞェクトのように、JavaArray にはその配列の芁玠数を返す length プロパティがありたす。Array.length ずは異なり、JavaArray.length は読み取り専甚のプロパティです。これは、Java の配列は䜜成時に芁玠総数が固定されるためです。

+ +

パッケヌゞおよびクラスの参照

+ +

JavaScript から Java のパッケヌゞやクラスぞの簡単な参照では、JavaPackage や JavaClass オブゞェクトが䜜成されたす。先の Redwood 瀟に぀いおの䟋では、䟋えば Packages.redwood ずいう参照が JavaPackage オブゞェクトです。同様に、java.lang.String のような参照は JavaClass オブゞェクトです。

+ +

ほずんどの堎合は JavaPackage や JavaClass オブゞェクトに぀いお気にする必芁はありたせん。ただ Java のパッケヌゞを䜿うだけのこずであり、LiveConnect がこれらのオブゞェクトを透過的に生成するからです。LiveConnect がクラスの読み蟌みに倱敗する堎合があり、そのずきは以䞋のようにしお手動で読み蟌みを行う必芁がありたす:

+ +
var Widgetry = java.lang.Thread.currentThread().getContextClassLoader().loadClass("org.mywidgets.Widgetry");
+
+ +

JavaScript 1.3 以前では JavaClass オブゞェクトをパラメヌタずしお Java のメ゜ッドずしお枡す際に、自動的には java.lang.Class のむンスタンスに倉換されたせん。そのため、java.lang.Class のむンスタンスのラッパを䜜成しなければなりたせん。次の䟋では、forName メ゜ッドがラッパオブゞェクトである theClass を生成したす。そしおそれを newInstance メ゜ッドに枡し、配列を生成したす。

+ +
// JavaScript 1.3
+var theClass = java.lang.Class.forName("java.lang.String");
+var theArray = java.lang.reflect.Array.newInstance(theClass, 5);
+
+ +

JavaScript 1.4 以降では次の䟋のように、JavaClass オブゞェクトをメ゜ッドに盎接枡すこずができたす:

+ +
// JavaScript 1.4
+var theArray = java.lang.reflect.Array.newInstance(java.lang.String, 5);
+
+ +

char 型の匕数

+ +

JavaScript 1.4 以降では char 型の匕数を必芁ずする Java のメ゜ッドに、1 文字の文字列を枡すこずができたす。䟋えば、次のようにしお文字列 "H" を Character コンストラクタに枡すこずができたす:

+ +
var c = new java.lang.Character("H");
+
+ +

JavaScript 1.3 以前では、このようなメ゜ッドにはその文字の Unicode 倀に察応する敎数倀を枡さなければなりたせん。䟋えば、次のコヌドも "H" ずいう文字列を倉数 c に代入するものです:

+ +
var c = new java.lang.Character(72);
+
+ +

JavaScript での Java 䟋倖の凊理

+ +

Java のコヌドは実行時に倱敗するず、䟋倖を投げたす。JavaScript のコヌドが Java のデヌタメンバたたはメ゜ッドにアクセスし、倱敗するず、Java の䟋倖が JavaScript に枡されたす。これは、䟋倖を凊理できるようにするためです。JavaScript 1.4 からは try...catch 文でこの䟋倖を受け取るこずができたす。(Mozilla 固有の LiveConnect コヌドが Mozilla 内でメンテナンスされおいなかったため、この機胜は (他の䞀郚機胜もあわせお) Gecko 1.9 で壊れおいたす (バグ 391642 をご芧ください)。しかし Java 6 アップデヌト 11 および 12 での、Mozilla の汎甚 (か぀クロスブラりザの) NPAPI プラグむンコヌドに䟝存する構築のサポヌトにより修埩されたした。)

+ +

䟋えば、Java の forName メ゜ッドを䜿甚しお Java のクラス名を theClass ずいう倉数に代入するずしたす。forName メ゜ッドに枡す倀が Java のクラス名に評䟡できなければ、そのメ゜ッドは䟋倖を投げたす。次のようにしお、䟋倖を凊理できるように forName 代入文を try ブロック内に眮きたす:

+ +
function getClass(javaClassName) {
+   try {
+      var theClass = java.lang.Class.forName(javaClassName);
+   } catch (e) {
+      return ("The Java exception is " + e);
+   }
+   return theClass;
+}
+
+ +

この䟋では、javaClassName が "java.lang.String" のような正圓なクラス名に評䟡されるず代入が成功したす。javaClassName が "String" のような䞍正なクラス名に評䟡されるず、getClass 関数が䟋倖を受け取り、次のようなものを返したす:

+ +
The Java exception is java.lang.ClassNotFoundException: String
+
+ +

䟋倖の型に基づいお特別な凊理をするには instanceof 挔算子を䜿甚したす:

+ +
try {
+  // ...
+} catch (e) {
+  if (e instanceof java.io.FileNotFound) {
+     // FileNotFound に぀いおの凊理
+  } else {
+    throw e;
+  }
+}
+
+ +

JavaScript の䟋倖に぀いおの詳现情報は䟋倖凊理文を参照しおください。

+ +

Java から JavaScript ぞの通信

+ +

Java で JavaScript のオブゞェクトを䜿甚したい堎合は、その Java ファむルに netscape.javascript パッケヌゞをむンポヌトしなければなりたせん。このパッケヌゞは次のクラスを定矩しおいたす:

+ + + +

これらのクラスの詳现は JavaScript リファレンスをご芧ください。

+ +

LiveConnect クラスの堎所の特定

+ +

叀いバヌゞョンの Netscape ブラりザでは、これらのクラスがブラりザに同梱されおいたした。JavaScript 1.2 からは、これらのクラスは .jar ファむルに栌玍されおいたす。それより叀いバヌゞョンの JavaScript では、これらのクラスは .zip ファむルに栌玍されおいたす。䟋えば Windows NT 向けの Netscape Navigator 4 では、クラスは Navigator のディレクトリ盎䞋の Program\Java\Classes ディレクトリ内の java40.jar ファむルに栌玍されおいたす。

+ +

より最近では、クラスは Sun の Java ランタむムに同梱されおいたす。はじめはランタむムディストリビュヌションの "jre/lib" ディレクトリ内の "jaws.jar" ファむルに入っおいたしたが (JRE 1.3)、その埌同じ堎所の "plugin.jar" に移っおいたす (JRE 1.4 以降)。

+ +

JDK での LiveConnect クラスの䜿甚

+ +

LiveConnect クラスにアクセスするには、次のどちらかの方法で JDK コンパむラの CLASSPATH に .jar たたは .zip ファむルを配眮したす:

+ + + +

Windows NT では、コントロヌルパネルのシステムアむコンをダブルクリックし、CLASSPATH ずいう名前のナヌザ環境倉数を䜜成し、それに次のような倀を蚭定するこずで環境倉数を䜜成できたす:

+ +
C:\Program Files\Java\jre1.4.1\lib\plugin.jar
+
+ +

CLASSPATH に぀いおの詳现は Sun の JDK に関する資料をご芧ください。

+ +

泚意: Java は匷く型付けされた蚀語であり、JavaScript は匱く型付けされた蚀語であるため、LiveConnect を䜿甚する際はもう䞀方の蚀語のために JavaScript ランタむム゚ンゞンが匕数の倀を適圓なデヌタ型に倉換したす。詳现は  をご芧ください。

+ +

LiveConnect クラスの䜿甚

+ +

すべおの JavaScript オブゞェクトは、Java コヌド内では netscape.javascript.JSObject のむンスタンスずしお珟れたす。Java コヌド内でメ゜ッドを呌び出すずきに、その匕数ずしお JavaScriptのオブゞェクトを枡すこずができたす。そうするためには、そのメ゜ッドの察応する仮パラメヌタを JSObject 型で定矩しなければなりたせん。

+ +

さらに、Java コヌド内で JavaScript のオブゞェクトを䜿甚するたびに、netscape.javascript.JSException 型の䟋倖を凊理する try...catch 文の内偎で、その JavaScript オブゞェクトを呌び出すようにしおください。こうするこずで JSException 型の䟋倖ずしお Java で珟れる、JavaScript コヌドの実行における゚ラヌを Java コヌドで凊理できるようになりたす。

+ +

JSObject を甚いた JavaScript ぞのアクセス

+ +

䟋えば、JavaDog ずいう Java のクラスを䜿甚するずしたす。次のコヌドで瀺すように、JavaDog コンストラクタは JavaScript のオブゞェクトである jsDog を匕数ずしおずりたす。このオブゞェクトは JSObject 型ずしお定矩されおいたす:

+ +
import netscape.javascript.*;
+
+public class JavaDog{
+    public String dogBreed;
+    public String dogColor;
+    public String dogSex;
+
+    // クラスコンストラクタの定矩
+    public JavaDog(JSObject jsDog){
+        // ここで try...catch を䜿甚しお JSExceptions を凊理できるようにする
+        this.dogBreed = (String)jsDog.getMember("breed");
+        this.dogColor = (String)jsDog.getMember("color");
+        this.dogSex = (String)jsDog.getMember("sex");
+    }
+}
+
+ +

JSObject の getMember メ゜ッドは、JavaScript のオブゞェクトのプロパティにアクセスするために䜿甚するものです。この䟋では JavaScript のプロパティである jsDog.breed の倀を Java のデヌタメンバである JavaDog.dogBreed に代入するために、getMember を䜿甚しおいたす。

+ +

泚意: より珟実的な䟋では try...catch 文の内偎で getMember を呌び出し、JSException 型の゚ラヌを凊理できるようにしたす。詳现は、Java での JavaScript の䟋倖凊理を参照しおください。

+ +

getMember の動䜜をさらに知るために、JavaScript の Dog オブゞェクトを䜜成し、その定矩を芋おみたす:

+ +
function Dog(breed,color,sex){
+   this.breed = breed;
+   this.color = color;
+   this.sex = sex;
+}
+
+ +

Dog の JavaScript のむンスタンスである gabby は、次のようにしお䜜るこずができたす:

+ +
var gabby = new Dog("lab", "chocolate", "female");
+
+ +

gabby.color を評䟡するず、それが "chocolate" ずいう倀を持っおいるこずがわかりたす。ここで次のように gabby オブゞェクトをコンストラクタに枡し、JavaScript コヌドで JavaDog のむンスタンスを䜜成するこずにしたす:

+ +
var javaDog = new Packages.JavaDog(gabby);
+
+ +

javaDog.dogColor を評䟡するず、それも "chocolate" ずいう倀を持っおいるこずがわかりたす。これは Java のコンストラクタ内の getMember メ゜ッドが、gabby.color の倀を dogColor に代入するからです。

+ +

Java での JavaScript の䟋倖凊理

+ +

実行時に Java からの JavaScript コヌドの呌び出しに倱敗するず、䟋倖が投げられたす。Java から JavaScript コヌドを呌び出すずきに、try...catch 文でこの䟋倖を受け取るこずができたす。JavaScript の䟋倖は、netscape.javascript.JSException のむンスタンスずしお Java コヌドから扱えたす。

+ +

JSException は JavaScript が投げるあらゆる皮類の䟋倖に察応する、Java のラッパです。JSObject のむンスタンスが JavaScript のオブゞェクトのラッパであるのず同じようなものです。Java で JavaScript コヌドを評䟡するずきは JSException を䜿甚しおください。

+ +

Java で JavaScript コヌドを評䟡する際、次の状況でランタむム゚ラヌが発生したす:

+ + + +

䟋えば、Java のオブゞェクトである jsCode が自身に枡される文字列 eTest を評䟡するずしたす。次のような゚ラヌ凊理を実行するこずで、評䟡が原因で発生するどちらの皮類のランタむム゚ラヌにも察応できたす:

+ +
import netscape.javascript.JSObject;
+import netscape.javascript.JSException;
+
+public class eTest {
+    public static Object doit(JSObject obj, String jsCode) {
+        try {
+            obj.eval(jsCode);
+        } catch (JSException e) {
+            if (e.getWrappedException() == null)
+                return e;
+            return e.getWrappedException();
+        }
+        return null;
+    }
+}
+
+ +

この䟋では、枡された文字列 jsCode を try ブロック内のコヌドが評䟡しようずしたす。文字列 "myFunction()" を jsCode の倀ずしお枡すずしたす。myFunction が JavaScript の関数ずしお定矩されおいない堎合、JavaScript むンタプリタは jsCode を評䟡できたせん。むンタプリタぱラヌメッセヌゞを生成し、Java のハンドラがそのメッセヌゞを受け取り、doit メ゜ッドは netscape.javascript.JSException のむンスタンスを返したす。

+ +

しかし、次のように myFunction が JavaScript で定矩されおいるずしたす:

+ +
function myFunction() {
+   try {
+      if (theCondition == true) {
+         return "Everything's ok";
+      } else {
+         throw "JavaScript error occurred";
+      }
+   } catch (e) {
+      if (canHandle == true) {
+         handleIt();
+      } else {
+         throw e;
+      }
+   }
+}
+
+ +

theCondition が false であれば、関数は䟋倖を投げたす。その䟋倖は JavaScript コヌドで受け取られ、さらに canHandle が true の堎合に JavaScript はそれを凊理したす。canHandle false がならばその䟋倖が再び投げられ、Java のハンドラがそれを受け取り、 doit メ゜ッドが次の Java の文字列を返したす:

+ +
JavaScript error occurred
+
+ +

JavaScript の䟋倖に぀いおの詳现情報は䟋倖凊理文を参照しおください。

+ +

埌方互換性

+ +

JavaScript 1.3 以前のバヌゞョンでは、JSException クラスには省略可胜な文字列匕数をずる 3 ぀の public タむプのコンストラクタがありたした。この文字列匕数は、詳现なメッセヌゞやその䟋倖に察する他の情報を指定するものです。getWrappedException メ゜ッドは䜿甚できたせんでした。

+ +

次のような try...catch 文を䜿甚するこずで、JavaScript 1.3 以前のバヌゞョンで LiveConnect の䟋倖を凊理できたす:

+ +
try {
+   global.eval("foo.bar = 999;");
+} catch (Exception e) {
+   if (e instanceof JSException) {
+      jsCodeFailed();
+   } else {
+      otherCodeFailed();
+   }
+}
+
+ +

この䟋では foo が定矩されおいないず eval 文が倱敗したす。try ブロックの eval 文が JSException を投げるず、catch ブロックが jsCodeFailed メ゜ッドを実行したす。try ブロックがそれ以倖の゚ラヌを投げるず、otherCodeFailed メ゜ッドが実行されたす。

+ +

デヌタ型倉換

+ +

Java は匷く型付けされた蚀語であり、JavaScript は匱く型付けされた蚀語であるため、LiveConnect を䜿甚する際はもう䞀方の蚀語のために、JavaScript ランタむム゚ンゞンが匕数の倀を適切なデヌタ型に倉換したす。この倉換に぀いお以䞋のセクションで説明したす:

+ + + +

JavaScript から Java ぞの倉換

+ +

JavaScript から Java のメ゜ッドを呌び出しおパラメヌタを枡す際、枡すパラメヌタのデヌタ型は以䞋のセクションで説明するルヌルによっお倉換されたす:

+ + + +

netscape.javascript.JSObject メ゜ッドの戻り倀は垞に java.lang.Object のむンスタンスに倉換されたす。このような戻り倀の倉換ルヌルもここで説明したす。

+ +

䟋えば JSObject.eval が JavaScript の数倀を返すのであれば、この数倀を java.lang.Object のむンスタンスに倉換するルヌルは数倀に蚘茉されおいたす。

+ +

数倀

+ +

Java のメ゜ッドに JavaScript の数倀型をパラメヌタずしお枡すず、Java は次の衚で瀺すルヌルに埓っおその倀を倉換したす:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Java のパラメヌタ型倉換ルヌル
double +
    +
  • そのたたの倀が、䞞められたり絶察倀や笊号が損なわれるこずなく Java に枡されたす。
  • +
  • NaN は NaN に倉換されたす。
  • +
+
java.lang.Double
+ java.lang.Object
java.lang.Double の新しいむンスタンスが䜜成され、そのたたの倀が、䞞められたり絶察倀や笊号が損なわれるこずなく Java に枡されたす。
float +
    +
  • 倀は float 粟床に䞞められたす。
  • +
  • 倧きすぎたたは小さすぎお衚珟できない倀は、正の無限倧たたは負の無限倧に䞞められたす。
  • +
  • NaN は NaN に倉換されたす。
  • +
+
byte
+ char
+ int
+ long
+ short
+
    +
  • 倀は負の無限倧方向に䞞められたす。
  • +
  • 倧きすぎたたは小さすぎお衚珟できない倀は、ランタむム゚ラヌになりたす。
  • +
  • NaN は倉換されずにランタむム゚ラヌになりたす。
  • +
+
java.lang.String倀は文字列に倉換されたす。䟋えば: +
    +
  • 237 は "237" になりたす。
  • +
+
boolean +
    +
  • 0 および NaN は false に倉換されたす。
  • +
  • その他の倀は true に倉換されたす。
  • +
+
+ +

java.lang.String のむンスタンスをパラメヌタに想定した Java のメ゜ッドに JavaScript の数倀をパラメヌタずしお枡すず、その数倀は文字列に倉換されたす。equals() メ゜ッドを䜿甚するず、この倉換結果ず他の文字列を比范できたす。

+ +

真停倀

+ +

Java のメ゜ッドに JavaScript の真停倀型をパラメヌタずしお枡すず、Java は次の衚で瀺すルヌルに埓っおその倀を倉換したす:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Java のパラメヌタ型倉換ルヌル
booleanすべおの倀は、Java で察応するものに盎接倉換されたす。
java.lang.Boolean
+ java.lang.Object
java.lang.Boolean の新しいむンスタンスが䜜成されたす。同䞀のプリミティブ倀に察しお 1 ぀のむンスタンスではなく、各パラメヌタに぀いお新しいむンスタンスが䜜成されたす。
java.lang.String倀は文字列に倉換されたす。䟋えば: +
    +
  • true は "true" になりたす。
  • +
  • false は "false" になりたす。
  • +
+
byte
+ char
+ double
+ float
+ int
+ long
+ short
+
    +
  • true は 1 になりたす。
  • +
  • false は 0 になりたす。
  • +
+
+ +

java.lang.String のむンスタンスをパラメヌタに想定した Java のメ゜ッドに JavaScript の真停倀をパラメヌタずしお枡すず、その真停倀は文字列に倉換されたす。== 挔算子を䜿甚するず、この倉換結果ず他の文字列を比范できたす。

+ +

文字列倀

+ +

Java のメ゜ッドに JavaScript の文字列型をパラメヌタずしお枡すず、Java は次の衚で瀺すルヌルに埓っおその倀を倉換したす:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Java のパラメヌタ型倉換ルヌル
java.lang.String
+ java.lang.Object
JavaScript 1.4: +
    +
  • JavaScript の文字列は、Unicode 倀で java.lang.String のむンスタンスに倉換されたす。
  • +
+ +

JavaScript 1.3 以前:

+ +
    +
  • JavaScript の文字列は、ASCII 倀で java.lang.String のむンスタンスに倉換されたす。
  • +
+
byte
+ double
+ float
+ int
+ long
+ short
すべおの倀は、ECMA-262 に蚘茉に埓っお数倀に倉換されたす。JavaScript の文字列倀は ECMA-262 に蚘茉されたルヌルに埓っお数倀に倉換されたす。
charJavaScript 1.4: +
    +
  • 1 文字の文字列は、Unicode 文字に倉換されたす。
  • +
  • 他のすべおの倀は数倀に倉換されたす。
  • +
+ +

JavaScript 1.3 以前:

+ +
    +
  • すべおの倀が数倀に倉換されたす。
  • +
+
boolean +
    +
  • 空文字列は false になりたす。
  • +
  • 他のすべおの倀は true になりたす。
  • +
+
+ +

undefined 倀

+ +

Java のメ゜ッドに JavaScript の undefined 倀をパラメヌタずしお枡すず、Java は次の衚で瀺すルヌルに埓っおその倀を倉換したす:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Java のパラメヌタ型倉換ルヌル
java.lang.String
+ java.lang.Object
倀は java.lang.String のむンスタンスに倉換され、むンスタンスの倀は文字列 "undefined" になりたす。
boolean倀は false になりたす。
double
+ float
倀は NaN になりたす。
byte
+ char
+ int
+ long
+ short
倀は 0 になりたす。
+ +

undefined 倀の倉換は JavaScript 1.3 以降でのみ可胜です。それより叀いバヌゞョンでは、undefined 倀がサポヌトされおいたせん。

+ +

java.lang.String のむンスタンスをパラメヌタに想定した Java のメ゜ッドに JavaScript の undefined 倀をパラメヌタずしお枡すず、その undefined 倀は文字列に倉換されたす。== 挔算子を䜿甚するず、この倉換結果ず他の文字列を比范できたす。

+ +

null 倀

+ +

Java のメ゜ッドに JavaScript の null 倀をパラメヌタずしお枡すず、Java は次の衚で瀺すルヌルに埓っおその倀を倉換したす:

+ + + + + + + + + + + + + + + + + + + + + + +
Java のパラメヌタ型倉換ルヌル
あらゆるクラス
+ あらゆるむンタフェヌスの皮類
倀は null になりたす。
byte
+ char
+ double
+ float
+ int
+ long
+ short
倀は 0 になりたす。
boolean倀は false になりたす。
+ +

JavaArray および JavaObject オブゞェクト

+ +

ほずんどの堎合、Java のメ゜ッドに JavaScript の JavaArray たたは JavaObject オブゞェクトをパラメヌタずしお枡すず、Java は単にそのオブゞェクトのラップを解きたす。そうでない堎合は、Java は次の衚で瀺すルヌルに埓っおそのオブゞェクトを別のデヌタ型に倉換したす:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Java のパラメヌタ型倉換ルヌル
ラップが解かれたオブゞェクトず代入互換性のある、あらゆるむンタフェヌスたたはクラスオブゞェクトのラップが解かれたす。
java.lang.Stringオブゞェクトのラップが解かれ、ラップが解かれた Java オブゞェクトの toString メ゜ッドが呌び出され、その結果が java.lang.String の新しいむンスタンスずしお返されたす。
byte
+ char
+ double
+ float
+ int
+ long
+ short
オブゞェクトのラップが解かれ、次の状況のどちらかが起こりたす: +
    +
  • ラップが解かれた Java のオブゞェクトに doubleValue メ゜ッドがあれば、JavaArray たたは JavaObject はこのメ゜ッドが返す倀に倉換されたす。
  • +
  • ラップが解かれた Java オブゞェクトに doubleValue メ゜ッドがなければ、゚ラヌが発生したす。
  • +
+
booleanJavaScript 1.3 以降ではオブゞェクトのラップが解かれ、次の状況のどちらかが起こりたす: +
    +
  • オブゞェクトが null ならば、false に倉換されたす。
  • +
  • オブゞェクトがそれ以倖の倀ならば、true に倉換されたす。
  • +
+ +

JavaScript 1.2 以前ではオブゞェクトのラップが解かれ、次の状況のどちらかが起こりたす:

+ +
    +
  • ラップが解かれたオブゞェクトに booleanValue メ゜ッドがあれば、゜ヌスオブゞェクトは戻り倀のために倉換されたす。
  • +
  • オブゞェクトに booleanValue がなければ、倉換に倱敗したす。
  • +
+
+ +

ラップが解かれたオブゞェクトが Java のパラメヌタ型のむンスタンスであれば、むンタフェヌスたたはクラスが、ラップが解かれたオブゞェクトず代入互換性があるずいうこずです。぀たり、次の文は必ず true を返したす:

+ +
unwrappedObject instanceof parameterType;
+
+ +

JavaClass オブゞェクト

+ +

Java のメ゜ッドに JavaScript の JavaClass オブゞェクトをパラメヌタずしお枡すず、Java は次の衚で瀺すルヌルに埓っおその倀を倉換したす:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Java のパラメヌタ型倉換ルヌル
java.lang.Classオブゞェクトのラップが解かれたす。
netscape.javascript.JSObject
+ java.lang.Object
JavaClass オブゞェクトが netscape.javascript.JSObject の新しいむンスタンス内にラップされたす。
java.lang.Stringオブゞェクトのラップが解かれ、ラップが解かれた Java オブゞェクトの toString メ゜ッドが呌び出され、その結果が java.lang.String の新しいむンスタンスずしお返されたす。
booleanJavaScript 1.3 以降ではオブゞェクトのラップが解かれ、次の状況のどちらかが起こりたす: +
    +
  • オブゞェクトが null ならば、false に倉換されたす。
  • +
  • オブゞェクトがそれ以倖の倀ならば、true に倉換されたす。
  • +
+ +

JavaScript 1.2 以前ではオブゞェクトのラップが解かれ、次の状況のどちらかが起こりたす:

+ +
    +
  • ラップが解かれたオブゞェクトに booleanValue メ゜ッドがあれば、゜ヌスオブゞェクトは戻り倀のために倉換されたす。
  • +
  • オブゞェクトに booleanValue がなければ、倉換に倱敗したす。
  • +
+
+ +

その他の JavaScript のオブゞェクト

+ +

Java のメ゜ッドに JavaScript のその他のオブゞェクトをパラメヌタずしお枡すず、Java は次の衚で瀺すルヌルに埓っおその倀を倉換したす:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Java のパラメヌタ型倉換ルヌル
netscape.javascript.JSObject
+ java.lang.Object
オブゞェクトは netscape.javascript.JSObject の新しいむンスタンス内にラップされたす。
java.lang.Stringオブゞェクトのラップが解かれ、ラップが解かれたオブゞェクトの toString メ゜ッドが呌び出され、その結果が java.lang.String の新しいむンスタンスずしお返されたす。
byte
+ char
+ double
+ float
+ int
+ long
+ short
オブゞェクトは、ECMA-262 に蚘茉された ToPrimitive 挔算子のロゞックを䜿甚しお倀に倉換されたす。この挔算子で䜿甚される PreferredType ヒントは Number です。
booleanJavaScript 1.3 以降ではオブゞェクトのラップが解かれ、次の状況のどちらかが起こりたす: +
    +
  • オブゞェクトが null ならば、false に倉換されたす。
  • +
  • オブゞェクトがそれ以倖の倀ならば、true に倉換されたす。
  • +
+ +

JavaScript 1.2 以前ではオブゞェクトのラップが解かれ、次の状況のどちらかが起こりたす:

+ +
    +
  • ラップが解かれたオブゞェクトに booleanValue メ゜ッドがあれば、゜ヌスオブゞェクトは戻り倀のために倉換されたす。
  • +
  • オブゞェクトに booleanValue がなければ、倉換に倱敗したす。
  • +
+
+ +

Java から JavaScript ぞの倉換

+ +

Java から JavaScript に枡された倀は、次のように倉換されたす:

+ + + +

java.lang.Double および java.lang.Integer のむンスタンスは、JavaScript の数倀ではなく JavaScript のオブゞェクトに倉換されるこずに泚意しおください。同様に java.lang.String のむンスタンスも、JavaScript の文字列ではなく JavaScript のオブゞェクトに倉換されたす。

+ +

Java の String オブゞェクトも、JavaScript のラッパに盞圓したす。JavaScript の文字列を必芁ずする JavaScript のメ゜ッドを、このラッパを枡しお呌び出すず゚ラヌになりたす。そうではなく、次のようにラッパに空文字列を付加するこずで、ラッパを JavaScript の文字列に倉換しおください:

+ +
var JavaString = JavaObj.methodThatReturnsAString();
+var JavaScriptString = JavaString + "";
diff --git a/files/ja/web/javascript/guide/loop_statements/break_statement/index.html b/files/ja/web/javascript/guide/loop_statements/break_statement/index.html new file mode 100644 index 0000000000..35cc94abdf --- /dev/null +++ b/files/ja/web/javascript/guide/loop_statements/break_statement/index.html @@ -0,0 +1,24 @@ +--- +title: break 文 +slug: Web/JavaScript/Guide/Loop_Statements/break_Statement +--- +

break 文

+

break 文は loop 文や switch 文、label 文から抜け出すために䜿甚したす。

+ +

break 文は次のように䜿甚したす。

+
    +
  1. break;
  2. +
  3. break label;
  4. +
+

番目の圢匏の構文は最も内偎のルヌプもしくは switch から抜けたす。番目の圢匏の構文は指定した label 文から抜けたす。

+

䟋
+ 次の䟋は、その倀が theValue である芁玠のむンデックスが芋぀かるたで、配列の芁玠に぀いお繰り返したす。

+
for (i = 0; i < a.length; i++) {
+   if (a[i] == theValue)
+      break;
+}
+
+

{{ PreviousNext("JavaScript/Guide/Loop_Statements/label_Statement", "JavaScript/Guide/Loop_Statements/continue_Statement") }}

diff --git a/files/ja/web/javascript/guide/loop_statements/continue_statement/index.html b/files/ja/web/javascript/guide/loop_statements/continue_statement/index.html new file mode 100644 index 0000000000..f7a5697eeb --- /dev/null +++ b/files/ja/web/javascript/guide/loop_statements/continue_statement/index.html @@ -0,0 +1,46 @@ +--- +title: continue 文 +slug: Web/JavaScript/Guide/Loop_Statements/continue_Statement +--- +

continue 文

+

continue 文は while 文、do-while 文、for 文、label 文をリスタヌトさせるために甚いたす。

+ +

continue 文は次のように䜿甚したす。

+
    +
  1. continue
  2. +
  3. continue label
  4. +
+

䟋 1
+ 次の䟋では、i の倀が 3 のずきに実行される continue 文を甚いた while ルヌプを瀺したす。こうするこずで n は順に 1、3、7、12 ずいう倀をずりたす。

+
i = 0;
+n = 0;
+while (i < 5) {
+   i++;
+   if (i == 3)
+      continue;
+   n += i;
+}
+
+

䟋 2
+ checkiandj ずいうラベルの付いた文の䞭に checkj ずいうラベルの付いた文がありたす。continue に出くわすず、プログラムは checkj の珟圚の反埩を終了し、次の反埩を始めたす。continue に出くわすたびに、条件が false になるたで checkj を繰り返したす。false が返されるず checkiandj 文の残りを完了し、条件が false を返すたで checkiandj を繰り返したす。false が返されるず checkiandj に続く文が実行されたす。

+

continue が checkiandj ずいうラベルを持っおいるずプログラムは checkiandj 文の最初から続けたす。

+
checkiandj :
+   while (i < 4) {
+      document.write(i + "<br/>");
+      i += 1;
+      checkj :
+         while (j > 4) {
+            document.write(j + "<br/>");
+            j -= 1;
+            if ((j % 2) == 0)
+               continue checkj;
+            document.write(j + " is odd.<br/>");
+         }
+      document.write("i = " + i + "<br/>");
+      document.write("j = " + j + "<br/>");
+   }
+
+

{{ PreviousNext("JavaScript/Guide/Loop_Statements/break_Statement", "JavaScript/Guide/Object_Manipulation_Statements") }}

diff --git a/files/ja/web/javascript/guide/loop_statements/do...while_statement/index.html b/files/ja/web/javascript/guide/loop_statements/do...while_statement/index.html new file mode 100644 index 0000000000..6e1df1e586 --- /dev/null +++ b/files/ja/web/javascript/guide/loop_statements/do...while_statement/index.html @@ -0,0 +1,19 @@ +--- +title: do...while 文 +slug: Web/JavaScript/Guide/Loop_Statements/do...while_Statement +--- +

do...while 文

+

do...while 文は指定した条件が false に評䟡されるたで繰り返したす。do...while 文は次のように䜿甚したす。

+
do
+   statement
+while (condition);
+
+

statement は条件がチェックされる前に䞀床実行されたす。耇数の文を実行するにはブロック文 ({ ... }) を䜿甚しお文をグルヌプ化しおください。condition が true の堎合、その文が再び実行されたす。毎回実行された埌に条件がチェックされたす。条件が false ずきは実行が停止され、コントロヌルが do...while の埌に続く文に枡されたす。

+

䟋
+ 次の䟋では do ルヌプは最䜎 1 回は反埩され、i が 5 より小さくなくなるたで反埩されたす。

+
do {
+   i += 1;
+   document.write(i);
+} while (i < 5);
+
+

{{ PreviousNext("JavaScript/Guide/Loop_Statements/for_Statement", "JavaScript/Guide/Loop_Statements/while_Statement") }}

diff --git a/files/ja/web/javascript/guide/loop_statements/for_statement/index.html b/files/ja/web/javascript/guide/loop_statements/for_statement/index.html new file mode 100644 index 0000000000..b2dccec25b --- /dev/null +++ b/files/ja/web/javascript/guide/loop_statements/for_statement/index.html @@ -0,0 +1,50 @@ +--- +title: for 文 +slug: Web/JavaScript/Guide/Loop_Statements/for_Statement +--- +

for 文

+

for ルヌプは指定した条件が false に評䟡されるたで繰り返したす。JavaScript の for ルヌプは Java や C の for ルヌプに䌌おいたす。for 文は次のように䜿甚したす。

+
for ([initialExpression]; [condition]; [incrementExpression])
+   statement
+
+

for ルヌプを実行するず以䞋のこずが起こりたす。

+
    +
  1. 初期化匏 initialExpression があれば実行されたす。この匏は通垞、1 ぀かそれ以䞊のルヌプカりンタを初期化したすが、構文的にはある皋床耇雑な匏も指定できたす。たた、この匏は倉数を宣蚀するこずもできたす。
  2. +
  3. condition 匏が評䟡されたす。condition の倀が true であればルヌプ文が実行されたす。condition が false の堎合は for ルヌプは終了したす。condition 匏が完党に省略されおいる堎合、条件は true であるず仮定されたす。
  4. +
  5. statement が実行されたす。耇数の匏を実行するにはブロック文 ({ ... }) を䜿甚しお文をグルヌプ化しおください。
  6. +
  7. 曎新匏 incrementExpression があれば実行されたす。そしおコントロヌルがステップ 2 に戻りたす。
  8. +
+

䟋
+ 次の関数には、スクロヌリングリスト耇数遞択できる Select オブゞェクトで遞択されたオプションの数を数える for 文が含たれおいたす。for 文では倉数 i が宣蚀され、それが 0 に初期化されおいたす。i が Select オブゞェクトのオプションの個数より小さいかをチェックし、続く if 文を実行し、ルヌプが 1 回りしたら i を 1 だけ増加させたす。

+
<script type="text/javascript">//<![CDATA[
+
+function howMany(selectObject) {
+   var numberSelected = 0;
+   for (var i = 0; i < selectObject.options.length; i++) {
+      if (selectObject.options[i].selected)
+         numberSelected++;
+   }
+   return numberSelected;
+}
+
+//]]></script>
+<form name="selectForm">
+   <p>
+      <strong>Choose some music types, then click the button below:</strong>
+      <br/>
+      <select name="musicTypes" multiple="multiple">
+         <option selected="selected">R&B</option>
+         <option>Jazz</option>
+         <option>Blues</option>
+         <option>New Age</option>
+         <option>Classical</option>
+         <option>Opera</option>
+      </select>
+   </p>
+   <p>
+      <input type="button" value="How many are selected?"
+         onclick="alert ('Number of options selected: ' + howMany(document.selectForm.musicTypes))"/>
+   </p>
+</form>
+
+

{{ PreviousNext("JavaScript/Guide/Loop_Statements", "JavaScript/Guide/Loop_Statements/do...while_Statement") }}

diff --git a/files/ja/web/javascript/guide/loop_statements/index.html b/files/ja/web/javascript/guide/loop_statements/index.html new file mode 100644 index 0000000000..54ef32d2c9 --- /dev/null +++ b/files/ja/web/javascript/guide/loop_statements/index.html @@ -0,0 +1,17 @@ +--- +title: ルヌプ文 +slug: Web/JavaScript/Guide/Loop_Statements +--- +

ルヌプ文

+

ルヌプは指定した条件が満たされおいる限り繰り返し実行されるコマンドのセットです。JavaScript は、label はもちろん、for、do while、while ずいったルヌプ文をサポヌトしおいたすlabel 自䜓はルヌプ文ではありたせんが、これらの文ずずもに頻繁に䜿甚されたす。さらに、break および continue 文をルヌプ文の䞭で䜿うこずができたす。

+

さらに for...in 文も文を繰り返し実行したすが、これはオブゞェクトの操䜜に䜿甚したす。オブゞェクト操䜜文 をご芧ください。

+

ルヌプ文は以䞋のずおりです。

+ +

{{ PreviousNext("JavaScript/Guide/Conditional_Statements", "JavaScript/Guide/Loop_Statements/for_Statement") }}

diff --git a/files/ja/web/javascript/guide/loop_statements/label_statement/index.html b/files/ja/web/javascript/guide/loop_statements/label_statement/index.html new file mode 100644 index 0000000000..d0b878455b --- /dev/null +++ b/files/ja/web/javascript/guide/loop_statements/label_statement/index.html @@ -0,0 +1,19 @@ +--- +title: label 文 +slug: Web/JavaScript/Guide/Loop_Statements/label_Statement +--- +

label 文

+

label を䜿うず、そのプログラムのどこからでも参照できる、識別子を持った文を䜜るこずができたす。䟋えば、ラベルを䜿甚しおあるルヌプに名前を付けるず、break 文や continue 文を䜿甚しおプログラムがルヌプを脱出するべきかそのたた実行を継続するべきかを瀺すこずができたす。

+

label 文は次のように䜿甚したす。

+
label :
+   statement
+
+

label の倀は予玄語でなければどんな JavaScript の識別子でも䜿甚できたす。ラベルを甚いお名前を付ける statement はどんな文でも結構です。

+

䟋
+ この䟋では markLoop ずいうラベルを甚いお while ルヌプに名前を付けおいたす。

+
markLoop:
+while (theMark == true)
+   doSomething();
+}
+
+

{{ PreviousNext("JavaScript/Guide/Loop_Statements/while_Statement", "JavaScript/Guide/Loop_Statements/break_Statement") }}

diff --git a/files/ja/web/javascript/guide/loop_statements/while_statement/index.html b/files/ja/web/javascript/guide/loop_statements/while_statement/index.html new file mode 100644 index 0000000000..77fd191f75 --- /dev/null +++ b/files/ja/web/javascript/guide/loop_statements/while_statement/index.html @@ -0,0 +1,35 @@ +--- +title: while 文 +slug: Web/JavaScript/Guide/Loop_Statements/while_Statement +--- +

while 文

+

while 文は、指定した条件が true に評䟡される限り文を実行したす。while 文は次のように䜿甚したす。

+
while (condition)
+   statement
+
+

条件が false になるずルヌプ内の statement の実行が停止し、ルヌプの埌に続く文にコントロヌルが枡されたす。

+

ルヌプの statement を実行する前に条件がテストされたす。条件が true を返すず statement が実行され、再び条件がテストされたす。条件が false を返すず、実行が停止され、while の埌に続く文にコントロヌルが枡されたす。

+

耇数の文を実行するにはブロック文 ({ ... }) を甚いお文をグルヌプ化しおください。

+

䟋 1
+ 次の while ルヌプでは n が 3 より小さい限り反埩されたす。

+
n = 0;
+x = 0;
+while (n < 3) {
+   n++;
+   x += n;
+}
+
+

それぞれの反埩で、ルヌプは n をむンクリメントし、その倀を x に加えおいたす。その結果、x ず n は次の倀をずりたす。

+ +

第 3 段階が完了するず条件 n < 3 が true ではなくなっおいるため、ルヌプは終了したす。

+

䟋 2
+ 無限ルヌプは避けおください。ルヌプの条件が最終的には false になるこずを確認しおください。そうしないずルヌプが終了しなくなりたす。次の while ルヌプ内の文は氞久に実行されたす。条件が決しお false にならないためです。

+
while (true) {
+   alert("Hello, world");
+}
+
+

{{ PreviousNext("JavaScript/Guide/Loop_Statements/do...while_Statement", "JavaScript/Guide/Loop_Statements/label_Statement") }}

diff --git a/files/ja/web/javascript/guide/loops_and_iteration/index.html b/files/ja/web/javascript/guide/loops_and_iteration/index.html new file mode 100644 index 0000000000..baf78c7d80 --- /dev/null +++ b/files/ja/web/javascript/guide/loops_and_iteration/index.html @@ -0,0 +1,365 @@ +--- +title: ルヌプず反埩凊理 +slug: Web/JavaScript/Guide/Loops_and_iteration +tags: + - Guide + - JavaScript + - Loop + - Syntax + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Loops_and_iteration +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Control_flow_and_error_handling", "Web/JavaScript/Guide/Functions")}}
+ +

ルヌプは繰り返し䜕かを実行するための簡䟿な方法を提䟛したす。本章では JavaScript で利甚可胜な反埩凊理を行う数々の文を玹介したす。

+ +

誰かに話しかけようず、ある方向に X 歩進み、別の方向に Y 進むずいった堎面を、コンピュヌタヌ化されたゲヌムずずらえた䞊で、ルヌプに぀いお考えおみたしょう。䟋えば、「西に 5 歩進む」ずいう抂念はルヌプずしお、䞋蚘のように衚珟できたす :

+ +
for (let step = 0; step < 5; step++) {
+  // 倀が 0 から 4 たで蚈 5 回実行される
+  console.log('䞀歩西に歩く');
+}
+
+ +

ルヌプには様々な皮類がありたすが、本質的にはそれらはすべお同じこずをしおいたす : 䜕らかの行為をある回数繰り返すずいうこずですただしその回数がれロずいうこずもありえたす。

+ +

様々なルヌプ機構が存圚するこずによっお、色々な方法でルヌプの開始点ず終了点を決定するこずができたす。あるルヌプの方が別のタむプのルヌプより簡単に目的を果たせる、ずいう状況はたくさんありたす。

+ +

JavaScript で提䟛されるルヌプ文は以䞋のずおりです :

+ + + +

for 文

+ +

{{jsxref("Statements/for","for")}} 文によるルヌプは指定された条件が false ず評䟡されるたで繰り返されたす。JavaScript の for ルヌプは Java や C 蚀語の for ルヌプず同じです。

+ +

for 文は以䞋のような圢です :

+ +
for ([初期化匏]; [条件匏]; [加算匏])
+  文
+
+ +

for ルヌプが実行されるずき、次の凊理が行われたす :

+ +
    +
  1. もしあれば、初期化匏が実行されたす。この匏は通垞、1 個たたはそれ以䞊のルヌプカりンタヌを初期化したすが、この構文ではいかなるレベルの耇雑な匏を入れるこずが可胜です。初期化匏で倉数を宣蚀するこずもできたす。
  2. +
  3. 条件匏 条件匏が評䟡されたす。条件匏の倀が true の堎合、ルヌプ文が実行されたす。条件匏の倀が false の堎合、for ルヌプは終了したす。条件匏がすべお省略されおいる堎合、条件匏は真であるず仮定されたす。
  4. +
  5. 文が実行されたす。耇数の文を実行するには、それらの文をグルヌプ化するためにブロック文 ({ ... }) を䜿甚したす。
  6. +
  7. もしあれば、曎新匏 加算匏が実行されたす。
  8. +
  9. ステップ 2 に制埡が戻りたす。
  10. +
+ +

䟋

+ +

䞋の䟋では、スクロヌルリスト耇数遞択できる {{HTMLElement("select")}} 芁玠で遞択したオプションの数をカりントする for 文が関数内にありたす。for 文が倉数 i を宣蚀しれロに初期化したす。i が <select> 芁玠のオプション数未満であるこずがチェックされるず、埌続の if 文が実行され、オプションが遞択されおいれば、ルヌプの各通過埌に 1 個ず぀ i が加算されたす。

+ +
<form name="selectForm">
+  <p>
+    <label for="musicTypes">Choose some music types, then click the button below:</label>
+    <select id="musicTypes" name="musicTypes" multiple="multiple">
+      <option selected="selected">R&B</option>
+      <option>Jazz</option>
+      <option>Blues</option>
+      <option>New Age</option>
+      <option>Classical</option>
+      <option>Opera</option>
+    </select>
+  </p>
+  <p><input id="btn" type="button" value="How many are selected?" /></p>
+</form>
+
+<script>
+function howMany(selectObject) {
+  let numberSelected = 0;
+  for (let i = 0; i < selectObject.options.length; i++) {
+    if (selectObject.options[i].selected) {
+      numberSelected++;
+    }
+  }
+  return numberSelected;
+}
+
+let btn = document.getElementById('btn');
+btn.addEventListener('click', function() {
+  alert('Number of options selected: ' + howMany(document.selectForm.musicTypes));
+});
+</script>
+
+
+ +

do...while 文

+ +

{{jsxref("Statements/do...while","do...while")}} 文は指定された条件が false になるたで繰り返したす。

+ +

do...while 文は以䞋のような圢です :

+ +
do
+  文
+while (条件匏);
+
+ +

文は条件匏がチェックされる前に毎回䞀床実行されたす。(耇数の文を実行するには、ブロック文 ({ ... }) を䜿っお䞀぀の文にしたす)。

+ +

条件匏が true の堎合、文が再び実行されたす。文の実行終了時に毎回条件がチェックされたす。条件が false の堎合、実行は停止し、制埡は do...while の次の文に枡りたす。

+ +

䟋

+ +

次の䟋では、do ルヌプは少なくずも䞀床繰り返されたす。そしお i が 5 未満でなくなる盎前たで繰り返しされたす。

+ +
let i = 0;
+do {
+  i += 1;
+  console.log(i);
+} while (i < 5);
+ +

while 文

+ +

{{jsxref("Statements/while","while")}} 文は指定された条件が true に評䟡される限り文を実行したす。while 文は以䞋のようになりたす :

+ +
while (条件匏)
+  文
+
+ +

条件匏が false ずなる堎合、ルヌプ内の文は実行を停止し、ルヌプに続く文に制埡が枡されたす。

+ +

ルヌプ内の文が実行される前に条件がテストされたす。条件が true を返す堎合、文は実行され、条件が再びテストされたす。条件が false を返す堎合、実行は停止し、while の次の文に制埡が枡されたす。

+ +

耇数の文を実行するには、それらの文をグルヌプ化するブロック文 ({ ... }) を䜿甚したす。

+ +

䟋 1

+ +

次の䟋では、while ルヌプは、n が 3 未満の堎合繰り返されたす。:

+ +
let n = 0;
+let x = 0;
+while (n < 3) {
+  n++;
+  x += n;
+}
+
+ +

各反埩で、n がむンクリメントされ、その倀が x に加算されたす。そのため、x ず n は以䞋の倀をずりたす:

+ + + +

3 回目の通過完了埌、条件匏 n < 3 はもはや true ではなくなるため、ルヌプが終了したす。

+ +

䟋 2

+ +

無限ルヌプは避けおください。ルヌプ内の条件が最終的に false になるこずを確かめるようにしたしょう。さもないず、ルヌプは氞遠に終了したせん。次の while ルヌプ文は、条件が決しお false にならないので氞遠に実行されたす :

+ +
// 無限ルヌプは悪!
+while (true) {
+  console.log('Hello, world!');
+}
+ +

ラベル぀き文

+ +

{{jsxref("Statements/label","label")}} を䜿っお、プログラム内の他の堎所から参照できる識別子を組み蟌んだ文が䜜成できたす。䟋えば、ルヌプの識別にラベルを䜿い、そのプログラムでルヌプを䞭断するか、実行を継続するかどうかを指定する堎合に、ラベルを break 文や continue 文で䜿甚するこずができたす。

+ +

ラベル文の構文は以䞋のようになりたす :

+ +
ラベル :
+   文
+
+ +

ラベル の倀には、予玄語でなければあらゆる JavaScript 識別子を䜿甚できたす。ラベルによっお識別される文はどんな文でもかたいたせん。

+ +

䟋

+ +

この䟋では、ラベル markLoop は while ルヌプを指し瀺しおいたす。

+ +
markLoop:
+while (theMark === true) {
+   doSomething();
+}
+ +

break 文

+ +

ルヌプ、switch、ラベル文を䜿った関連付けを終了させるには {{jsxref("Statements/break","break")}} 文を䜿いたす。

+ + + +

break 文の構文は䞋蚘のようになりたす:

+ +
break;
+break [ラベル];
+
+ +
    +
  1. 最初の圢では最も内偎のルヌプや switch を終了したす
  2. +
  3. 2 ぀目の圢では指定した倖偎のラベル぀き文を終了したす。
  4. +
+ +

䟋 1

+ +

次の䟋では、倀が theValue である芁玠のむンデックスを探すたで配列の芁玠を反埩したす。:

+ +
for (let i = 0; i < a.length; i++) {
+  if (a[i] === theValue) {
+    break;
+  }
+}
+ +

䟋 2: ラベルたでブレヌク

+ +
let x = 0;
+let z = 0;
+labelCancelLoops: while (true) {
+  console.log('倖偎のルヌプ: ' + x);
+  x += 1;
+  z = 1;
+  while (true) {
+    console.log('内偎のルヌプ: ' + z);
+    z += 1;
+    if (z === 10 && x === 10) {
+      break labelCancelLoops;
+    } else if (z === 10) {
+      break;
+    }
+  }
+}
+
+ +

continue 文

+ +

{{jsxref("Statements/continue","continue")}} 文は while、do-while、for、label 文を再開する際に䜿甚されたす。

+ + + +

continue文の構文は䞋蚘のようになりたす :

+ +
continue [ラベル];
+
+ +

䟋 1

+ +

次の䟋では、i の倀が 3 のずきに実行される continue 文が䜿甚された while ルヌプを瀺しおいたす。この堎合、n の倀は 1、3、7、12 ずなりたす。

+ +
let i = 0;
+let n = 0;
+while (i < 5) {
+  i++;
+  if (i === 3) {
+    continue;
+  }
+  n += i;
+  console.log(n);
+}
+//1,3,7,12
+
+
+let i = 0;
+let n = 0;
+while (i < 5) {
+  i++;
+  if (i === 3) {
+     // continue;
+  }
+  n += i;
+  console.log(n);
+}
+// 1,3,6,10,15
+
+ +

䟋 2

+ +

次の䟋では、checkiandj ずラベル付けされた文には checkj ずラベル付けされた文が含たれおいたす。continue 文に出䌚うず、プログラムは checkj の珟圚の反埩を終了し次の反埩を開始したす。continue に出䌚うたびに、checkj はその条件が false を返すたで繰り返されたす。false が返されるず、checkiandj の残りの郚分が完了し、その条件が false を返すたで checkiandj が繰り返されたす。false が返されるず、プログラムは checkiandj に続く文を継続したす。

+ +

もし continue が checkiandj のラベルを持っおいるず、プログラムは checkiandj のラベル文の先頭から継続されたす。

+ +
let i = 0;
+let j = 10;
+checkiandj:
+  while (i < 4) {
+    console.log(i);
+    i += 1;
+    checkj:
+      while (j > 4) {
+        console.log(j);
+        j -= 1;
+        if ((j % 2) === 0) {
+          continue checkj;
+        }
+        console.log(j + ' is odd.');
+      }
+      console.log('i = ' + i);
+      console.log('j = ' + j);
+  }
+ +

for...in 文

+ +

{{jsxref("Statements/for...in","for...in")}} 文はオブゞェクトにあるすべおの列挙可胜なプロパティに察し指定された倉数を通しお反埩凊理を行いたす。それぞれの異なるプロパティに、JavaScript は指定された文を実行したす。for...in 文は䞋蚘のようになりたす :

+ +
for (倉数 in オブゞェクト)
+  文
+
+ +

䟋

+ +

次の関数は匕数ずしおオブゞェクトず、そのオブゞェクトの名前を衚す文字列を取りたす。それからすべおのオブゞェクトのプロパティに察しお反埩し、プロパティ名ずその倀を衚瀺する文字列を返したす。

+ +
function dump_props(obj, obj_name) {
+  let result = '';
+  for (let i in obj) {
+    result += obj_name + '.' + i + ' = ' + obj[i] + '<br>';
+  }
+  result += '<hr>';
+  return result;
+}
+
+ +

make プロパティず model プロパティを持぀ car オブゞェクトに察し、result は䞋蚘のようになりたす :

+ +
car.make = Ford
+car.model = Mustang
+
+ +

配列

+ +

{{jsxref("Array")}} の芁玠に察しお反埩凊理を行う方法ずしお for...in 文を䜿甚したくなるかもしれたせんが、これは数倀のむンデックスに加えおナヌザヌ定矩プロパティの名前も返したす。

+ +

そのため、配列に察しおの反埩凊理には、数倀のむンデックスを䜿い埓来の {{jsxref("Statements/for","for")}} ルヌプを䜿甚するほうが良いです。なぜなら、(カスタムプロパティやカスタムメ゜ッドを远加するずいった) Array オブゞェクトの倉曎を行った堎合、for...in 文は配列芁玠に加えおナヌザヌ定矩プロパティに察しおも反埩凊理するからです。

+ +

for...of 文

+ +

{{jsxref("Statements/for...of","for...of")}} 文は、反埩可胜オブゞェクト{{jsxref("Array")}}、{{jsxref("Map")}}、{{jsxref("Set")}}、{{jsxref("functions/arguments","arguments")}} オブゞェクトなどを含むを反埩凊理するルヌプを生成し、それぞれのプロパティの倀に察しお実行したい文をずもなっお䜜られた反埩凊理フックを呌び出したす。

+ +
for (倉数 of オブゞェクト)
+  文
+
+ +

次の䟋では、for...of ルヌプず {{jsxref("Statements/for...in","for...in")}} ルヌプずの違いを瀺しおいたす。for...in はプロパティ名に察し反埩凊理される䞀方、for...of はプロパティの倀に察し反埩凊理したす :

+ +
const arr = [3, 5, 7];
+arr.foo = 'hello';
+
+for (let i in arr) {
+   console.log(i); // "0", "1", "2", "foo" が出力される
+}
+
+for (let i of arr) {
+   console.log(i); // 3, 5, 7 が出力される
+}
+
+ +

{{PreviousNext("Web/JavaScript/Guide/Control_flow_and_error_handling", "Web/JavaScript/Guide/Functions")}}

diff --git a/files/ja/web/javascript/guide/meta_programming/index.html b/files/ja/web/javascript/guide/meta_programming/index.html new file mode 100644 index 0000000000..c0b3b18129 --- /dev/null +++ b/files/ja/web/javascript/guide/meta_programming/index.html @@ -0,0 +1,290 @@ +--- +title: メタプログラミング +slug: Web/JavaScript/Guide/Meta_programming +tags: + - ECMAScript 2015 + - Guide + - JavaScript + - Proxy + - Reflect + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Meta_programming +--- +
{{jsSidebar("JavaScript Guide")}} {{Previous("Web/JavaScript/Guide/Iterators_and_Generators")}}
+ +

ECMAScript 2015 から、JavaScript には {{jsxref("Proxy")}} オブゞェクトず {{jsxref("Reflect")}} オブゞェクトがサポヌトされたした。これらは基本的な蚀語操䜜䟋えば、プロパティ怜玢、代入、列挙、関数呌び出しなどに割り蟌み、動䜜をカスタマむズできたす。この 2 ぀のオブゞェクトのおかげで、JavaScript でメタレベルのプログラミングが行えたす。

+ +

Proxy

+ +

ECMAScript 6 で導入された {{jsxref("Proxy")}} オブゞェクトによっお、特定の操䜜に割り蟌んで動䜜をカスタマむズできたす。

+ +

䟋えば、オブゞェクトのプロパティを取埗しおみたしょう :

+ +
let handler = {
+  get: function(target, name) {
+    return name in target? target[name] : 42
+  }
+}
+
+let p = new Proxy({}, handler)
+p.a = 1
+console.log(p.a, p.b) // 1, 42
+
+ +

この Proxy オブゞェクトは targetここでは空オブゞェクトず get トラップが実装された handler オブゞェクトを定矩しおいたす。ここで、プロキシずなったオブゞェクトは未定矩のプロパティを取埗しようずした時 undefined を返さず、代わりに数倀 42 を返したす。

+ +

さらなる䜿甚䟋がリファレンスの「{{jsxref("Proxy")}}」ペヌゞにありたす。

+ +

甚語集

+ +

プロキシの機胜に぀いお話題にする際は、次の甚語が䜿甚されたす。

+ +
+
{{jsxref("Global_Objects/Proxy/handler","ハンドラ","","true")}} (handler)
+
トラップを入れるためのプレヌスホルダ甚オブゞェクト。
+
{{原語䜵蚘("トラップ","trap")}}
+
プロパティぞのアクセスを提䟛するメ゜ッド。オペレヌティングシステムにおけるトラップの抂念ず同じようなものです。
+
{{原語䜵蚘("タヌゲット","target")}}
+
プロキシが仮想化するオブゞェクト。これはプロキシのストレヌゞバック゚ンドずしおしばしば䜿われたす。拡匵・蚭定可胜でないプロパティを持぀オブゞェクトに関する䞍倉条件倉曎されないセマンティック、぀たりオブゞェクトの意味情報は、このタヌゲットに察しお怜蚌されたす。
+
{{原語䜵蚘("䞍倉条件","invariant")}}
+
カスタマむズした動䜜を実装する際、倉曎されないセマンティックを䞍倉条件ず呌びたす。ハンドラの䞍倉条件に違反した堎合、{{jsxref("TypeError")}} が発生したす。
+
+ +

ハンドラずトラップ

+ +

次の衚は、Proxy オブゞェクトに察しお利甚可胜なトラップをたずめたものです。詳现ず䟋に぀いおはリファレンスのハンドラに぀いおのペヌゞをご芧ください。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ハンドラ / トラップ割り蟌みされる凊理䞍倉条件
{{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}{{jsxref("Object.getPrototypeOf()")}}
+ {{jsxref("Reflect.getPrototypeOf()")}}
+ {{jsxref("Object/proto", "__proto__")}}
+ {{jsxref("Object.prototype.isPrototypeOf()")}}
+ {{jsxref("Operators/instanceof", "instanceof")}}
+
    +
  • getPrototypeOf メ゜ッドはオブゞェクトか null を返す必芁がありたす。
  • +
  • target が拡匵䞍可の堎合、Object.getPrototypeOf(proxy) メ゜ッドは Object.getPrototypeOf(target) ず同じ倀を返す必芁がありたす。
  • +
+
{{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}{{jsxref("Object.setPrototypeOf()")}}
+ {{jsxref("Reflect.setPrototypeOf()")}}
target が拡匵䞍可の堎合、prototype パラメヌタは Object.getPrototypeOf(target) ず同じ倀である必芁がありたす。
{{jsxref("Global_Objects/Proxy/handler/isExtensible", "handler.isExtensible()")}}{{jsxref("Object.isExtensible()")}}
+ {{jsxref("Reflect.isExtensible()")}}
Object.isExtensible(proxy) は Object.isExtensible(target) ず同じ倀を返す必芁がありたす。
{{jsxref("Global_Objects/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}{{jsxref("Object.preventExtensions()")}}
+ {{jsxref("Reflect.preventExtensions()")}}
+

Object.isExtensible(proxy) が false の堎合のみ、Object.preventExtensions(proxy) は true を返したす。

+
{{jsxref("Global_Objects/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}{{jsxref("Object.getOwnPropertyDescriptor()")}}
+ {{jsxref("Reflect.getOwnPropertyDescriptor()")}}
+
    +
  • getOwnPropertyDescriptor はオブゞェクトか undefined のいずれかを返す必芁がありたす。
  • +
  • タヌゲットオブゞェクトに蚭定䞍可の所有プロパティずしお存圚する堎合、そのプロパティに぀いお存圚しないず報告するこずはできたせん。
  • +
  • 拡匵䞍可のタヌゲットオブゞェクトに所有プロパティずしお存圚する堎合、そのプロパティに぀いお存圚しないず報告するこずはできたせん。
  • +
  • 拡匵䞍可のタヌゲットオブゞェクトに所有プロパティずしお存圚しない堎合、そのプロパティに぀いお存圚するず報告するこずはできたせん。
  • +
  • タヌゲットオブゞェクトに所有プロパティずしお存圚しない堎合、あるいはタヌゲットオブゞェクトに蚭定可胜な所有プロパティずしお存圚する堎合、そのプロパティに぀いお蚭定䞍可ず報告するこずはできたせん。
  • +
  • Object.getOwnPropertyDescriptor(target) の結果は Object.defineProperty を䜿甚しおタヌゲットオブゞェクトに適甚され、この時に䟋倖は発生したせん。
  • +
+
{{jsxref("Global_Objects/Proxy/handler/defineProperty", "handler.defineProperty()")}}{{jsxref("Object.defineProperty()")}}
+ {{jsxref("Reflect.defineProperty()")}}
+
    +
  • タヌゲットオブゞェクトが拡匵可胜ではない堎合、プロパティは远加できたせん。
  • +
  • タヌゲットオブゞェクトに蚭定䞍可の所有プロパティずしお存圚しない堎合、そのプロパティを远加したり、たた蚭定䞍可に曎新するこずはできたせん。
  • +
  • タヌゲットオブゞェクトに察応する蚭定可胜なプロパティずしお存圚する堎合、そのプロパティを蚭定䞍可ずしおもかたいたせん。
  • +
  • プロパティが察応するタヌゲットオブゞェクトプロパティを持぀堎合、Object.defineProperty(target, prop, descriptor) は䟋倖を発生したせん。
  • +
  • strict モヌドでは、defineProperty ハンドラからの戻り倀が false の堎合、{{jsxref("TypeError")}} 䟋倖が発生したす。
  • +
+
{{jsxref("Global_Objects/Proxy/handler/has", "handler.has()")}}プロパティの照䌚 :
+ foo in proxy
+ 継承されたプロパティの照䌚 :
+ foo in Object.create(proxy)
+ {{jsxref("Reflect.has()")}}
+
    +
  • タヌゲットオブゞェクトに蚭定䞍可の所有プロパティずしお存圚する堎合、そのプロパティに぀いお存圚しないず報告するこずはできたせん。
  • +
  • タヌゲットオブゞェクトの所有プロパティずしお存圚し、そのタヌゲットオブゞェクトが拡匵可胜ではない堎合、そのプロパティに぀いお存圚しないず報告するこずはできたせん。
  • +
+
{{jsxref("Global_Objects/Proxy/handler/get", "handler.get()")}}プロパティぞのアクセス :
+ proxy[foo]and proxy.bar
+ 継承されたプロパティアクセス :
+ Object.create(proxy)[foo]
+ {{jsxref("Reflect.get()")}}
+
    +
  • タヌゲットオブゞェクトプロパティが曞蟌䞍可、蚭定䞍可のデヌタプロパティである堎合、プロパティに察しお報告する倀は察応するプロパティず同じ倀である必芁がありたす。
  • +
  • 察応するタヌゲットオブゞェクトプロパティが、Get 属性に undefined を持぀蚭定䞍可のアクセサプロパティである堎合、プロパティに察しお報告される倀を undefined ずする必芁がありたす。
  • +
+
{{jsxref("Global_Objects/Proxy/handler/set", "handler.set()")}}プロパティぞの代入 :
+ proxy[foo] = bar, proxy.foo = bar
+ 継承されたプロパティの割り圓お :
+ Object.create(proxy)[foo] = bar
+ {{jsxref("Reflect.set()")}}
+
    +
  • 察応するタヌゲットオブゞェクトのプロパティが曞蟌䞍可、蚭定䞍可のデヌタプロパティである堎合、そのプロパティずは違うプロパティ倀に倉曎するこずはできたせん。
  • +
  • 察応するタヌゲットオブゞェクトプロパティが、Set 属性に undefined を持぀蚭定䞍可のアクセサプロパティである堎合、プロパティの倀を蚭定するこずはできたせん。
  • +
  • strict モヌドでは、set ハンドラからの戻り倀が false の堎合、{{jsxref("TypeError")}} 䟋倖が発生したす。 +
      +
    +
  • +
+
{{jsxref("Global_Objects/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}プロパティの削陀 :
+ delete proxy[foo], delete proxy.foo
+ {{jsxref("Reflect.deleteProperty()")}}
タヌゲットオブゞェクトに蚭定䞍可の所有プロパティずしお存圚する堎合、削陀するこずはできたせん。
{{jsxref("Global_Objects/Proxy/handler/enumerate", "handler.enumerate()")}}プロパティの列挙 / for...in :
+ for (var name in proxy) {...}
+ {{jsxref("Reflect.enumerate()")}}
enumerate メ゜ッドはオブゞェクトを返す必芁がありたす。
{{jsxref("Global_Objects/Proxy/handler/ownKeys", "handler.ownKeys()")}}{{jsxref("Object.getOwnPropertyNames()")}}
+ {{jsxref("Object.getOwnPropertySymbols()")}}
+ {{jsxref("Object.keys()")}}
+ {{jsxref("Reflect.ownKeys()")}}
+
    +
  • ownKeys の結果はリストずなりたす。
  • +
  • 出力リストの芁玠の型は {{jsxref("String")}} か {{jsxref("Symbol")}} のどちらかずなりたす。
  • +
  • 出力リストはタヌゲットオブゞェクト䞭にあるすべおの蚭定䞍可な所有プロパティのキヌを含める必芁がありたす。
  • +
  • タヌゲットオブゞェクトが拡匵䞍可の堎合、出力リストはタヌゲットオブゞェクト䞭の所有プロパティのキヌをすべお含める必芁があり、他の倀は含たれたせん。 +
      +
    +
  • +
+
{{jsxref("Global_Objects/Proxy/handler/apply", "handler.apply()")}}proxy(..args)
+ {{jsxref("Function.prototype.apply()")}} and {{jsxref("Function.prototype.call()")}}
+ {{jsxref("Reflect.apply()")}}
handler.apply メ゜ッドに察する䞍倉条件はありたせん。
{{jsxref("Global_Objects/Proxy/handler/construct", "handler.construct()")}}new proxy(...args)
+ {{jsxref("Reflect.construct()")}}
出力結果は Object ずする必芁がありたす。
+ +

取り消し可胜 Proxy

+ +

{{jsxref("Proxy.revocable()")}} メ゜ッドは取り消し可胜な Proxy オブゞェクトの生成に䜿甚されたす。これにより、プロキシを revoke 関数で取り消し、プロキシの機胜を停止するこずができたす。

+ +

その埌はプロキシを通じたいかなる操䜜も {{jsxref("TypeError")}} になりたす。

+ +
let revocable = Proxy.revocable({}, {
+  get: function(target, name) {
+    return '[[' + name + ']]'
+  }
+})
+let proxy = revocable.proxy
+console.log(proxy.foo)  // "[[foo]]"
+
+revocable.revoke()
+
+console.log(proxy.foo)  // TypeError が発生
+proxy.foo = 1           // TypeError が再び発生
+delete proxy.foo        // TypeError がここでも発生
+typeof proxy            // "object" が返され, typeof はどんなトラップも匕き起こさない
+
+ +

リフレクション

+ +

{{jsxref("Reflect")}} は JavaScript で割り蟌み操䜜を行うメ゜ッドを提䟛するビルトむンオブゞェクトです。そのメ゜ッドは {{jsxref("Global_Objects/Proxy/handler","Proxy ハンドラ","","true")}}のメ゜ッドず同じです。

+ +

Reflect は関数オブゞェクトではありたせん。

+ +

Reflect はハンドラからタヌゲットぞのデフォルト操䜜を転送するのに圹立ちたす。

+ +

䟋えば、{{jsxref("Reflect.has()")}} を䜿えば、in 挔算子を関数ずしお䜿うこずができたす :

+ +
Reflect.has(Object, 'assign') // true
+
+ +

より優れた apply 関数

+ +

ES5 では、所定の this 倀ず配列や配列様のオブゞェクトずしお提䟛される arguments を䜿っお関数を呌び出す {{jsxref("Function.prototype.apply()")}} メ゜ッドがよく䜿われおきたした。

+ +
Function.prototype.apply.call(Math.floor, undefined, [1.75])
+
+ +

{{jsxref("Reflect.apply")}} を䜿えば、より簡朔で分かりやすいものにできたす :

+ +
Reflect.apply(Math.floor, undefined, [1.75])
+// 1
+
+Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111])
+// "hello"
+
+Reflect.apply(RegExp.prototype.exec, /ab/, ['confabulation']).index
+// 4
+
+Reflect.apply(''.charAt, 'ponies', [3])
+// "i"
+
+ +

プロパティ定矩の成吊チェック

+ +

成功した時はオブゞェクトを返し、倱敗した時は {{jsxref("TypeError")}} を発生させる {{jsxref("Object.defineProperty")}} では、プロパティを定矩する際に発生する゚ラヌを捉えるのに {{jsxref("Statements/try...catch","try...catch")}} ブロックを䜿おうずしおいたでしょう。{{jsxref("Reflect.defineProperty")}} では成功したかどうかによっお真停倀を返すので、ここでは {{jsxref("Statements/if...else","if...else")}} ブロックを䜿えたす :

+ +
if (Reflect.defineProperty(target, property, attributes)) {
+  // 成功した時の凊理
+} else {
+  // 倱敗した時の凊理
+}
+ +

{{Previous("Web/JavaScript/Guide/Iterators_and_Generators")}}

diff --git a/files/ja/web/javascript/guide/modules/index.html b/files/ja/web/javascript/guide/modules/index.html new file mode 100644 index 0000000000..1f976ae67a --- /dev/null +++ b/files/ja/web/javascript/guide/modules/index.html @@ -0,0 +1,457 @@ +--- +title: JavaScript モゞュヌル +slug: Web/JavaScript/Guide/Modules +tags: + - Guide + - JavaScript + - Modules + - export + - impot +translation_of: Web/JavaScript/Guide/Modules +--- +
{{jsSidebar("JavaScript Guide")}}{{Previous("Web/JavaScript/Guide/Meta_programming")}}
+ +

本章では、JavaScript のモゞュヌルを䜿い始めるために必芁なこずすべおを玹介したす。

+ +

モゞュヌルの背景

+ +

JavaScript のプログラムはずおも小さいものから始たりたした。初期の甚途は、必芁に応じおりェブペヌゞにちょっずした察話的な機胜を远加する独立したスクリプト凊理がほずんどであったため、倧きなスクリプトは通垞必芁ありたせんでした。そしお䜕幎かが過ぎ、今や倧量の JavaScript を持぀完党なアプリケヌションをブラりザヌで実行するこずはもちろん、JavaScript を他のコンテキスト (䟋えば Node.js) で䜿うこずもありたす。

+ +

それゆえ近幎は、JavaScript プログラムをモゞュヌルに分割しお必芁な時にむンポヌトできるような仕組みの提䟛が怜蚎されるようになっおきたした。Node.js は長幎この機胜を提䟛しおおり、モゞュヌルの利甚を可胜にする JavaScript ラむブラリヌやフレヌムワヌクも数倚くありたす (䟋えば、他の CommonJS や、AMD ベヌスのモゞュヌルシステムである RequireJS など、そしおより最近では Webpack や Babel)。

+ +

良い知らせは、モダンブラりザヌがモゞュヌル機胜のネむティブサポヌトを開始しおいるこずで、この蚘事がその党おです。これは良いこずです。ブラりザヌはモゞュヌルの読み蟌みを最適化できるので、倖郚ラむブラリヌを䜿甚しおクラむアント偎の䜙分な凊理やラりンドトリップを行うよりも効率的にするこずができたす。

+ +

ブラりザヌのサポヌト状況

+ +

ネむティブの JavaScript モゞュヌル機胜は、import ず export 文を利甚したす。これらに察するブラりザヌの互換性は次のずおりです。

+ +

import

+ +

{{Compat("javascript.statements.import")}}

+ +

export

+ +

{{Compat("javascript.statements.export")}}

+ +

䜿甚䟋の玹介

+ +

モゞュヌルの䜿い方を玹介するために、GitHub 䞊に簡単な䜿甚䟋を䜜りたした。これらは、りェブペヌゞに {{htmlelement("canvas")}} 芁玠を远加し、その canvas 䞊にいく぀かの異なる図圢 (ず、それに関するレポヌト) を描画する簡単なモゞュヌルの䟋です。

+ +

このような機胜はあたり圹に立ちたせんが、モゞュヌルの説明が明確になるように意図的に単玔にしおいたす。

+ +
+

泚意: 䜿甚䟋をダりンロヌドしおロヌカル実行する堎合、ロヌカルのりェブサヌバヌ䞊で実行する必芁がありたす。

+
+ +

構造の基本的な䟋

+ +

最初の䜿甚䟋 (basic-modules を参照) には、次のようなファむル構造がありたす。

+ +
index.html
+main.js
+modules/
+    canvas.js
+    square.js
+ +
+

泚意: このガむドの䜿甚䟋のファむル構造は、党お基本的に同䞀ですので、䞊蚘のファむル構造をよく芋るこずになるでしょう。

+
+ +

ディレクトリヌ modules には、次の 2 ぀のモゞュヌルがありたす。

+ + + +

䜙談 — .mjs 察 .js

+ +

この蚘事ではモゞュヌルファむルに .js の拡匵子を䜿甚しおいたすが、他の蚘事では .mjs ずいう拡匵子が䜿甚されおいるのを目にするこずがあるかもしれたせん。䟋えば、V8 のドキュメントではこれを掚奚しおいたす。理由は以䞋の通りです。

+ + + +

しかし、少なくずも今のずころは .js を䜿い続けるこずにしたした。ブラりザでモゞュヌルを正しく動䜜させるためには、サヌバヌが text/javascript などの JavaScript MIME タむプを含む Content-Type ヘッダでモゞュヌルを提䟛しおいるこずを確認する必芁がありたす。そうしないず、"The server responded with a non-JavaScript MIME type" のような厳栌な MIME タむプチェック゚ラヌが衚瀺され、ブラりザは JavaScript を実行したせん。ほずんどのサヌバヌでは、.js ファむルにはすでに正しい MIME タむプが蚭定されおいたすが、.mjs ファむルにはただ蚭定されおいたせん。すでに .mjs ファむルを正しく提䟛しおいるサヌバヌには、GitHub Pages や Node.js の http-server などがありたす。

+ +

これは、すでにそのような環境を䜿甚しおいる堎合や、今はただ䜿甚しおいないが、䜕をしおいるか知っおいおアクセスできる堎合には問題ありたせん(぀たり、.mjs ファむルに正しい Content-Type を蚭定するようにサヌバヌを蚭定するこずができたす)。しかし、あなたがファむルを提䟛しおいるサヌバヌを制埡できない堎合には、混乱を匕き起こす可胜性がありたす。

+ +

この蚘事では孊習ず移怍性を考慮しお、.js を䜿甚するこずにしたした。

+ +

通垞の JavaScript ファむルに .js を䜿甚するのず比范しお、モゞュヌルに .mjs を䜿甚するこずの明確さを本圓に重芖しおいるが、䞊蚘の問題に盎面したくない堎合は、開発䞭に .mjs を䜿甚し、ビルドステップで .js に倉換するこずをおすすめしたす。

+ +

たた、次の点にも泚意しおください。

+ + + +

モゞュヌル機胜の゚クスポヌト

+ +

モゞュヌルが持぀機胜にアクセスするために最初に必芁なこずは、そのような機胜を゚クスポヌトするこずです。これは export 文を䜿っお行いたす。

+ +

最も簡単な䜿い方は、モゞュヌル倖郚に公開したい項目の前に export を぀けるこずです。

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

゚クスポヌトできるものは、関数、var、let、const、および埌で芋るこずになりたすが、クラスです。これらは最䞊䜍の階局にある必芁がありたす。䟋えば、関数内で export を䜿うこずはできたせん。

+ +

゚クスポヌトしたい党おの項目を゚クスポヌトするより䟿利な方法は、モゞュヌルファむルの末尟に単䞀の export 文を远加し、その埌に゚クスポヌトしたい機胜のカンマ区切りリストを䞭かっこで囲んで続けるこずです。䟋えば次のようにしたす。

+ +
export { name, draw, reportArea, reportPerimeter };
+ +

スクリプトぞの機胜のむンポヌト

+ +

モゞュヌルから䜕らかの機胜を゚クスポヌトした埌は、それらを䜿えるようにするためにスクリプトにむンポヌトする必芁がありたす。その最も単玔な方法は次のずおりです。

+ +
import { name, draw, reportArea, reportPerimeter } from './modules/square.js';
+ +

import 文の埌ろに、䞭かっこで囲たれたむンポヌトしたい機胜のカンマ区切りリストを続け、その埌ろに from キヌワヌドず、モゞュヌルファむルぞのパスを続けたす。このパスは、サむトのルヌトからの盞察パスであり、basic-modules の堎合は /js-examples/modules/basic-modules です。

+ +

しかし、この䟋ではパスの曞き方が少し異なっおいたす。「珟圚の䜍眮」を意味するドット (.) 蚘法を䜿っおおり、その埌ろに芋぀けようずするファむルぞのパスを続けおいたす。これは、完党な盞察パスを毎回蚘述するよりも短くおすむためずおもよい方法であり、URL の可搬性もあるため、サむト階局構造の異なる堎所に移動させた堎合でも動䜜するでしょう。

+ +

そのため、このようなパスは、

+ +
/js-examples/modules/basic-modules/modules/square.js
+ +

このように曞けたす。

+ +
./modules/square.js
+ +

このような曞き方の動䜜しおいる䟋は main.js にありたす。

+ +
+

泚意: モゞュヌルシステムの䞭には、ファむルの拡匵子やドットを省略できるものがありたす (䟋えば '/modules/square')。このような曞き方は、ネむティブの JavaScript モゞュヌルでは動䜜したせん。

+
+ +

スクリプトぞ機胜をむンポヌトするず、同じファむル内で定矩されおいるのず同じように䜿うこずができたす。次のコヌドは、main.js でむンポヌトに続く郚分です。

+ +
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);
+
+ +
+

泚: むンポヌトされた機胜はファむル内で利甚できたすが、゚クスポヌトされた機胜の読み取り専甚ビュヌです。むンポヌトされた倉数を倉曎するこずはできたせんが、const ず同様にプロパティを倉曎するこずはできたす。さらに、これらの機胜はラむブバむンディングずしおむンポヌトされたす。぀たり、const ず違っおバむンディングを倉曎できなくおも倀を倉曎できるずいうこずです。

+
+ +

HTML にモゞュヌルを適甚する

+ +

次に main.js モゞュヌルを HTML ペヌゞに適甚する必芁がありたす。これは少し重芁な点に違いがありたすが、通垞のスクリプトをペヌゞに適甚する方法ずずおもよく䌌おいたす。

+ +

最初に type="module" を {{htmlelement("script")}} 芁玠に含めるこずで、そのスクリプトがモゞュヌルであるこずを宣蚀したす。

+ +
<script type="module" src="main.js"></script>
+ +

たた、<script> 芁玠の本文内に JavaScript コヌドを配眮するこずで、モゞュヌルのスクリプトをHTMLファむルに盎接埋め蟌むこずもできたす。

+ +
<script type="module">
+  /* ここに JavaScript モゞュヌルコヌド */
+</script>
+ +

モゞュヌルをむンポヌトする先のスクリプトは、基本的に最䞊䜍のモゞュヌルずしお動䜜したす。これを無芖するず、䟋えば Firefox の堎合は "SyntaxError: import declarations may only appear at top level of a module" (構文゚ラヌ: むンポヌト宣蚀は最䞊䜍のモゞュヌルしか䜿えたせん) ずいう゚ラヌが発生したす。

+ +

import ず export 文は、モゞュヌルの䞭でのみ䜿うこずができたす。通垞のスクリプトの䞭では䜿えたせん。

+ +

モゞュヌルの通垞のスクリプトの間のその他の違い

+ + + +

デフォルト゚クスポヌトず名前付き゚クスポヌト

+ +

これたで゚クスポヌトした機胜は、名前付き゚クスポヌト (named export) ずいうものです。それぞれの項目 (関数、const など) は、゚クスポヌト時にその名前を参照されお、むンポヌト時にもその名前で参照されたす。

+ +

゚クスポヌトの皮類には、他にデフォルト゚クスポヌトず呌ばれるものもありたす。これは、モゞュヌルがデフォルトの機胜を簡単に持぀こずができるように蚭蚈されたもので、たた JavaScript のモゞュヌルが既存の CommonJS や AMD のモゞュヌルシステムず盞互運甚できるようになりたす (Json Orendorff による ES6 In Depth: Modules で䞊手く説明されおいたす。"Default exports" で怜玢しおみおください)。

+ +

どのように動䜜するか説明するので、䜿甚䟋をみおみたしょう。basic-modules の square.js に、ランダムな色、倧きさ、䜍眮の正方圢を描く randomSquare() ずいう関数がありたす。この関数をデフォルトずしお゚クスポヌトしたいので、ファむルの末尟に次の内容を曞きたす。

+ +
export default randomSquare;
+ +

䞭かっこがないこずに泚意しおください。

+ +

たたは、export default を関数に远加しお、次のように匿名関数のように定矩するこずもできたす。

+ +
export default function(ctx) {
+  ...
+}
+ +

main.js では、次のようにしおデフォルトの関数をむンポヌトしたす。

+ +
import randomSquare from './modules/square.js';
+ +

むンポヌトの時にも䞭かっこがないこずに泚意しおください。これは、デフォルト゚クスポヌトはモゞュヌルごずにひず぀しか䜜れず、randomSquare がそれであるこずがわかっおいるからです。䞊蚘は、基本的に次の簡略衚珟です。

+ +
import {default as randomSquare} from './modules/square.js';
+ +
+

泚意: ゚クスポヌトされる項目の名前を倉曎するために䜿われる as の文法に぀いおは、以䞋の {{anch("Renaming imports and exports")}} セクションで説明したす。

+
+ +

名前の衝突を避ける

+ +

これたでのずころ、キャンバスに図圢を描く私たちのモゞュヌルは正垞に動䜜しおいるようです。しかし、円や䞉角圢など別の図圢を描くモゞュヌルを远加しようずしたらどうなるでしょう そのような図圢にも draw() や reportArea() のような関数があるかもしれたせん。もし同じ名前を持぀異なる関数を同じトップレベルのモゞュヌルファむルにむンポヌトしようずするず、最終的に名前の衝突による゚ラヌが起きるでしょう。

+ +

幞いなこずに、これに察凊する方法はいく぀かありたす。それらに぀いお、次のセクションで芋おいきたしょう。

+ +

むンポヌトや゚クスポヌトの名前を倉曎する

+ +

import 文や export 文の䞭かっこの䞭では、キヌワヌド as ず新しい名前を䜿うこずで、トップレベルのモゞュヌルでその機胜を䜿うずきの名前を倉曎するこずができたす。

+ +

次の二぀の䟋は、異なる方法ですが、同じこずをしおいたす。

+ +
// module.js の内郚
+export {
+  function1 as newFunctionName,
+  function2 as anotherNewFunctionName
+};
+
+// main.js の内郚
+import { newFunctionName, anotherNewFunctionName } from './modules/module.js';
+ +
// module.js の内郚
+export { function1, function2 };
+
+// main.js の内郚
+import { function1 as newFunctionName,
+         function2 as anotherNewFunctionName } from './modules/module.js';
+ +

実際の䟋を芋おみたしょう。renaming ディレクトリでは、前の䜿甚䟋ず同じモゞュヌルを䜿っおいたすが、円や䞉角圢を描画するためのモゞュヌルである circle.js ず triangle.js も远加しおいたす。

+ +

それぞれのモゞュヌル内郚では、同じ名前を持぀機胜が゚クスポヌトされおおり、それゆえそれぞれの末尟の export 文は次のように同䞀であるこずがわかりたす。

+ +
export { name, draw, reportArea, reportPerimeter };
+ +

これらを main.js にむンポヌトするために、次のようにするずしたす。

+ +
import { name, draw, reportArea, reportPerimeter } from './modules/square.js';
+import { name, draw, reportArea, reportPerimeter } from './modules/circle.js';
+import { name, draw, reportArea, reportPerimeter } from './modules/triangle.js';
+ +

するず、ブラりザヌは "SyntaxError: redeclaration of import name" (構文゚ラヌ: むンポヌト名の再宣蚀) (Firefox の堎合) のような゚ラヌを発生させるでしょう。

+ +

そのため、それぞれが固有の名前を持぀ようにするために、次のようにむンポヌトの名前を倉える必芁がありたす。

+ +
import { name as squareName,
+         draw as drawSquare,
+         reportArea as reportSquareArea,
+         reportPerimeter as reportSquarePerimeter } from './modules/square.js';
+
+import { name as circleName,
+         draw as drawCircle,
+         reportArea as reportCircleArea,
+         reportPerimeter as reportCirclePerimeter } from './modules/circle.js';
+
+import { name as triangleName,
+        draw as drawTriangle,
+        reportArea as reportTriangleArea,
+        reportPerimeter as reportTrianglePerimeter } from './modules/triangle.js';
+ +

他の方法ずしお、䟋えば次のようにするこずで、モゞュヌルファむル偎でこの問題を解決するこずもできたす。

+ +
// in square.js
+export { name as squareName,
+         draw as drawSquare,
+         reportArea as reportSquareArea,
+         reportPerimeter as reportSquarePerimeter };
+ +
// in main.js
+import { squareName, drawSquare, reportSquareArea, reportSquarePerimeter } from './modules/square.js';
+ +

これも同じように機胜したす。どちらのスタむルを取るかはあなた次第ですが、モゞュヌル偎のコヌドはそのたたにしおむンポヌト偎を倉曎する方が、間違いなく賢明です。これは、制埡できないサヌドパヌティヌのモゞュヌルからむンポヌトするずきには、特に意味がありたす。

+ +

モゞュヌルオブゞェクトの䜜成

+ +

䞊蚘のむンポヌト方法は正垞に動䜜したすが、少し䜿いづらく冗長です。よりよい方法は、モゞュヌル内のそれぞれの機胜を、モゞュヌルオブゞェクトの䞭にむンポヌトするこずです。その構文は次のずおりです。

+ +
import * as Module from './modules/module.js';
+ +

これは、module.js の䞭にある党おの゚クスポヌトを取埗しお、それらを Module ずいうオブゞェクトのメンバヌずしお利甚できるようにするこずで、独自の名前空間を持たせるような効果がありたす。次のようにしお䜿いたす。

+ +
Module.function1()
+Module.function2()
+など
+ +

実際の䜿甚䟋を芋おみたしょう。module-objects ディレクトリでは、たた同じ䟋を䜿っおいたすが、この新しい構文を利甚するために曞き盎されおいたす。モゞュヌル内の゚クスポヌトは、いずれも次の単玔な構文を䜿っおいたす。

+ +
export { name, draw, reportArea, reportPerimeter };
+ +

䞀方でむンポヌトは次のようなものです。

+ +
import * as Canvas from './modules/canvas.js';
+
+import * as Square from './modules/square.js';
+import * as Circle from './modules/circle.js';
+import * as Triangle from './modules/triangle.js';
+ +

どの堎合も、その指定されたオブゞェクト名の配䞋からモゞュヌルのむンポヌトにアクセスできたす。䟋えば次のようにしお䜿いたす。

+ +
let square1 = Square.draw(myCanvas.ctx, 50, 50, 100, 'blue');
+Square.reportArea(square1.length, reportList);
+Square.reportPerimeter(square1.length, reportList);
+ +

このように (必芁な箇所にオブゞェクトの名前を含むようにさえすれば) コヌドは以前ず同じように曞くこずができ、そしおむンポヌトはより簡朔になりたす。

+ +

モゞュヌルずクラス

+ +

最初の方で觊れたしたが、クラスを゚クスポヌトしたりむンポヌトするこずもできたす。これがコヌド䞊で名前の衝突を避けるもう䞀぀の方法で、もし自分のモゞュヌルを既にオブゞェクト指向のスタむルで曞いおいるのであれば、特に䟿利です。

+ +

classes ディレクトリの䞭には、私たちの図圢を描くモゞュヌルを ES クラスを䜿っお曞き盎した䟋がありたす。䟋えば square.js ファむルでは、次のように党おの機胜を䞀぀のクラスの䞭に持たせおいたす。

+ +
class Square {
+  constructor(ctx, listId, length, x, y, color) {
+    ...
+  }
+
+  draw() {
+    ...
+  }
+
+  ...
+}
+ +

そしお、次のように゚クスポヌトしたす。

+ +
export { Square };
+ +

main.js では、これを次のようにむンポヌトしたす。

+ +
import { Square } from './modules/square.js';
+ +

そしお、正方圢を描くために次のようにクラスを䜿いたす。

+ +
let square1 = new Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue');
+square1.draw();
+square1.reportArea();
+square1.reportPerimeter();
+ +

モゞュヌルの集玄

+ +

耇数のモゞュヌルをひず぀に集玄させたいず思うこずがあるかもしれたせん。䟝存性の階局は耇数になるこずがあり、いく぀かあるサブモゞュヌルをひず぀の芪モゞュヌルにたずめお管理を単玔化したいず思うかもしれたせん。これは、芪モゞュヌルで次の圢匏による゚クスポヌト構文を䜿うこずで可胜です。

+ +
export * from 'x.js'
+export { name } from 'x.js'
+ +

䜿甚䟋は module-aggregation ディレクトリを参照しおください。この䟋 (クラスを䜿った以前の䟋を元にしおいたす) には、shapes.js ずいうモゞュヌルが远加されおいたす。これは circle.js、square.js、triangle.js の党おの機胜をひず぀に集玄したものです。たた、サブモゞュヌルを modules ディレクトリの䞭にある shapes ずいうサブディレクトリに移動させおいたす。぀たり、この䟋のモゞュヌル構造は次のようなものです。

+ +
modules/
+  canvas.js
+  shapes.js
+  shapes/
+    circle.js
+    square.js
+    triangle.js
+ +

それぞれのサブモゞュヌルでは、䟋えば次のような同じ圢匏の゚クスポヌトが行われおいたす。

+ +
export { Square };
+ +

その次は集玄を行う郚分です。shapes.js の内郚には次のような行がありたす。

+ +
export { Square } from './shapes/square.js';
+export { Triangle } from './shapes/triangle.js';
+export { Circle } from './shapes/circle.js';
+ +

これらは、個々のサブモゞュヌルの゚クスポヌトを取埗しお、それらを shapes.js モゞュヌルから利甚できるようにする効果がありたす。

+ +
+

泚意: shapes.mjs の䞭で参照されおいる゚クスポヌトは、基本的にそのファむルを経由しお転送されるだけで、ファむルの䞭には存圚したせん。そのため、同じファむルの䞭でそれらを䜿ったコヌドを曞くこずはできたせん。

+
+ +

最埌に main.js ファむルでは、党おのモゞュヌルのクラスにアクセスするために、次のむンポヌトを曞き換えおいたす。

+ +
import { Square } from './modules/square.js';
+import { Circle } from './modules/circle.js';
+import { Triangle } from './modules/triangle.js';
+ +

曞き換え埌は、次のような 1行になりたす。

+ +
import { Square, Circle, Triangle } from './modules/shapes.js';
+ +

動的なモゞュヌルの読み蟌み

+ +

ブラりザヌで利甚できる JavaScript モゞュヌルの最新機胜は、動的なモゞュヌルの読み蟌みです。これにより、党おを最初に読み蟌んでしたうのではなく、必芁が生じたずきにのみ動的にモゞュヌルを読み蟌むこずができたす。これには明らかなパフォヌマンス䞊の利点がありたす。どのように動䜜するのか、読んで芋おたしょう。

+ +

この新しい機胜により、import() を関数ずしお実行し、そのずきのパラメヌタヌずしおモゞュヌルぞのパスを指定するこずができたす。これは次のように Promise を返し、゚クスポヌトにアクセスできるモゞュヌルオブゞェクト ({{anch("Creating a module object")}} を参照) を䜿っお fulfilled 状態になりたす。

+ +
import('./modules/myModule.js')
+  .then((module) => {
+    // モゞュヌルを䜿っお䜕かをする。
+  });
+ +

䟋を芋おみたしょう。dynamic-module-imports ディレクトリには、以前のクラスの䟋に基づいた別の䜿甚䟋がありたす。しかし、今回は䜿甚䟋が読み蟌たれたずきにはキャンバスに䜕も描画したせん。その代わり "Circle" (円)、"Square" (正方圢)、"Triangle" (䞉角圢) ずいう 3぀のボタンを衚瀺し、それらが抌されたずき、察応した図圢を描くために必芁なモゞュヌルを動的に読み蟌んで䜿甚したす。

+ +

この䜿甚䟋では index.html ず main.js のみを倉曎しおおり、モゞュヌルの゚クスポヌトは以前ず同じたたです。

+ +

main.js では、それぞれのボタンぞの参照を取埗するために、次のように document.querySelector() を䜿っおいたす。

+ +
let squareBtn = document.querySelector('.square');
+ +

そしおそれぞれのボタンに、抌されたずきに関連するモゞュヌルを動的に読み蟌んで図圢を描くためのむベントリスナヌを蚭定したす。

+ +
squareBtn.addEventListener('click', () => {
+  import('./modules/square.js').then((Module) => {
+    let square1 = new Module.Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue');
+    square1.draw();
+    square1.reportArea();
+    square1.reportPerimeter();
+  })
+});
+ +

Promise が fullfilled 状態になったずきにモゞュヌルオブゞェクトを返し、クラスはそのオブゞェクトの郚分機胜であるため、Module.Square( ... ) のように Module. を远加したコンストラクタヌにアクセスする必芁がありたす。

+ +

トラブルシュヌティング

+ +

これらは、モゞュヌルの動䜜に問題があるずきに助けになるかもしれないヒントです。もし他にあれば自由にリストに远加しおください。

+ + + +

関連情報

+ + + +

{{Previous("Web/JavaScript/Guide/Meta_programming")}}

diff --git a/files/ja/web/javascript/guide/numbers_and_dates/index.html b/files/ja/web/javascript/guide/numbers_and_dates/index.html new file mode 100644 index 0000000000..dbe09c4412 --- /dev/null +++ b/files/ja/web/javascript/guide/numbers_and_dates/index.html @@ -0,0 +1,395 @@ +--- +title: 数倀ず日付 +slug: Web/JavaScript/Guide/Numbers_and_dates +tags: + - Calculation + - Dates + - FP + - Floating Point + - Floating-Point + - Guide + - Integer + - JavaScript + - Math + - Numbers + - Numeric + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Numbers_and_dates +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Expressions_and_Operators", "Web/JavaScript/Guide/Text_formatting")}}
+ +

本章では、JavaScript で数倀ず日付の蚈算を実行するのに䜿われる抂念、オブゞェクト、関数に぀いお玹介したす。これには 10進数、2進数、16 進数数倀を含むそれぞれの基数で衚された数倀を䜿甚するこずや、数倀の幅広い皮類の数孊的挔算を実行するグロヌバル {{jsxref("Math")}} オブゞェクトの䜿い方も含みたす。

+ +

数倀

+ +

JavaScript では、数倀はすべお 64 ビット倍粟床浮動小数点数のフォヌマットである IEEE 754 (すなわち、±2−1022 ず ±2+1023 の間、もしくはおよそ ±10−308 ず ±10+308 の間の数倀、53 ビットの粟床による) にしたがっお実装されおいたす。±253 − 1 たでの敎数は正確に衚珟できたす。

+ +

浮動小数点数の衚珟に加えお、数倀型は 3 ぀の蚘号的な倀を持っおいたす。 +{{jsxref("Infinity")}}、-{{jsxref("Infinity")}}、{{jsxref("NaN")}}非数、not-a-numberです。

+ +

JavaScript に最近巚倧な数倀を衚す {{jsxref("BigInt")}} が実装されたした。 BigInt には泚意事項があり、䟋えば、BigInt ず {{jsxref("Number")}} の倀は同じ挔算で混ぜたり比范するこずができず、BigInt の倀を {{jsxref("Math")}} オブゞェクトで䜿甚するこずもできたせん。

+ +

JavaScript における他のプリミティブ型ずの関わりに぀いおは、JavaScript のデヌタ型ずデヌタ構造 もご芧ください。

+ +

4 皮類の数倀リテラル、10 進数、2 進数、8 進数、16 進数を䜿甚するこずができたす。

+ +

10 進数

+ +
1234567890
+42
+
+// れロを先頭に䜿甚するずきは気を぀けお:
+
+0888 // 10 進数ずしお 888 ず解析される
+0777 // Strict モヌドでない堎合 8 進数ずしお解析される (10 進数の 511 になる)
+
+ +

10 進数リテラルはれロ (0) から始めお、それ以降に 10 進の桁を続けるこずが可胜ですが、0 に続くすべおの数倀が 8 より小さい堎合、その数倀は 8 進数ずしお解析されるこずに泚意しおください。

+ +

2 進数

+ +

2 進数の構文では、先行れロの埌に小文字たたは倧文字の "B" を䜿いたす (0b たたは 0B)。0b の埌の数倀が 0 たたは 1 ではない堎合、 {{jsxref("SyntaxError")}}: "Missing binary digits after 0b"0b の埌に 2 進数の桁がありたせん が発生したす。

+ +
var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
+var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
+var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
+ +

8 進数

+ +

8 進数の構文では、先頭にれロを䜿甚したす。0 の埌の数倀が 0 から 7 の範囲倖の堎合、数倀は 10 進数ずしお解釈されたす。

+ +
var n = 0755; // 493
+var m = 0644; // 420
+
+ +

ECMAScript 5 における厳栌モヌドでは䞊蚘の 8 進数蚘法を犁じおいたす。8 進数蚘法は ECMAScript 5 仕様の䞀郚ではありたせんが、すべおのブラりザヌで先行れロによる 8 進数蚘法をサポヌトしおおり、 0644 === 420 や "\045" === "%" ずなりたす。ECMAScript 2015 ではたた、先行する 0o を䜿う 8 進数構文をサポヌトしおいたす。

+ +
var a = 0o10; // ES2015: 8
+
+ +

16 進数

+ +

16 進数の構文では、先行れロの埌に小文字たたは倧文字の "X" を䜿いたす (0x たたは 0X)。0x の埌の数倀が範囲 (0123456789ABCDEF) 倖の堎合、 {{jsxref("SyntaxError")}}: "Identifier starts immediately after numeric literal" (数倀リテラルの盎埌に識別子がありたす) が発生したす。

+ +
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
+0x123456789ABCDEF   // 81985529216486900
+0XA                 // 10
+
+ +

指数衚珟

+ +
1E3   // 1000
+2e6   // 2000000
+0.1e2 // 10
+ +

Number オブゞェクト

+ +

組み蟌み {{jsxref("Number")}} オブゞェクトは最倧倀、NaN、無限倧ずいった数倀定数のプロパティを持っおいたす。これらのプロパティの倀は倉曎できたせん。䞋蚘のように䜿甚したす:

+ +
var biggestNum = Number.MAX_VALUE;
+var smallestNum = Number.MIN_VALUE;
+var infiniteNum = Number.POSITIVE_INFINITY;
+var negInfiniteNum = Number.NEGATIVE_INFINITY;
+var notANum = Number.NaN;
+
+ +

自䜜した Number オブゞェクトのプロパティではなく、䞊蚘の定矩枈み Number オブゞェクトのプロパティを垞に参照しおください。

+ +

次の衚は Number オブゞェクトのプロパティの芁玄です。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Number オブゞェクトプロパティ
プロパティ説明
{{jsxref("Number.MAX_VALUE")}}衚珟可胜な最倧倀。(±1.7976931348623157e+308)
{{jsxref("Number.MIN_VALUE")}}衚珟可胜な最小倀。(±5e-324)
{{jsxref("Number.NaN")}}非数を衚す特別な倀。
{{jsxref("Number.NEGATIVE_INFINITY")}}負の無限倧を衚す特別な倀。オヌバヌフロヌした際に返されたす。
{{jsxref("Number.POSITIVE_INFINITY")}}正の無限倧を衚す特別な倀。オヌバヌフロヌした際に返されたす。
{{jsxref("Number.EPSILON")}}{{jsxref("Number")}} オブゞェクトで衚珟可胜な、ある数ずそれよりも倧きい最小数ずの差分倀 (蚈算機むプシロン)。(2.220446049250313e-16)
{{jsxref("Number.MIN_SAFE_INTEGER")}}JavaScript で正確に扱える最小の敎数倀。(−253 + 1, or −9007199254740991)
{{jsxref("Number.MAX_SAFE_INTEGER")}}JavaScript で正確に扱える最倧の敎数倀。(+253 − 1, or +9007199254740991)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Number オブゞェクトメ゜ッド
メ゜ッド説明
{{jsxref("Number.parseFloat()")}}文字列匕数を解析し、浮動小数点数を返したす。
+ グロヌバル関数 {{jsxref("parseFloat", "parseFloat()")}} ず同等。
{{jsxref("Number.parseInt()")}}文字列匕数を解析し、指定された根基数の敎数を返したす。
+ グロヌバル関数 {{jsxref("parseInt", "parseInt()")}} ず同等。
{{jsxref("Number.isFinite()")}}枡された倀が有限数であるか吊かを刀定したす。
{{jsxref("Number.isInteger()")}}枡された倀が敎数であるか吊かを刀定したす。
{{jsxref("Number.isNaN()")}}枡された倀が {{jsxref("Global_Objects/NaN", "NaN")}}非数であるか吊かを刀定したす。原型ずなったグロヌバル関数 {{jsxref("Global_Objects/isNaN", "isNaN()")}} よりもロバストな察応胜力が匷いバヌゞョン。
{{jsxref("Number.isSafeInteger()")}}枡された倀が正確に扱える敎数であるか吊かを刀定したす。
+ +

Number オブゞェクトのプロトタむプは様々なフォヌマットの Number オブゞェクトから情報を取埗するメ゜ッドを提䟛したす。次衚は Number.prototype のメ゜ッドの芁玄です。

+ + + + + + + + + + + + + + + + + + + + + + + +
Number.prototype メ゜ッド
メ゜ッド説明
{{jsxref("Number.toExponential", "toExponential()")}}数倀の指数衚蚘を衚す文字列を返したす。
{{jsxref("Number.toFixed", "toFixed()")}}数倀の固定小数点衚蚘を衚す文字列を返したす。
{{jsxref("Number.toPrecision", "toPrecision()")}}特定の粟床の固定小数点衚蚘による数倀を衚す文字列を返したす。
+ +

Math オブゞェクト

+ +

組み蟌み {{jsxref("Math")}} オブゞェクトは数孊定数および数孊関数のためのプロパティずメ゜ッドを有しおいたす。䟋えば、Math オブゞェクトの PI プロパティは π (3.141...) の倀を持ちたす。以䞋のようにアプリケヌション内で䜿甚できたす。

+ +
Math.PI
+
+ +

同様に、暙準的な数孊関数が Math のメ゜ッドにありたす。数孊関数には、䞉角関数、察数、指数、およびその他の関数が含たれたす。䟋えば、䞉角関数 sin を䜿甚したい堎合、䞋蚘のように蚘述したす。

+ +
Math.sin(1.56)
+
+ +

Math のすべおの䞉角関数メ゜ッドはラゞアンで匕数を取るこずに泚意しおください。

+ +

次衚は Math オブゞェクトメ゜ッドの芁玄です。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Math オブゞェクトメ゜ッド
メ゜ッド説明
{{jsxref("Math.abs", "abs()")}}絶察倀。
{{jsxref("Math.sin", "sin()")}}, {{jsxref("Math.cos", "cos()")}}, {{jsxref("Math.tan", "tan()")}}暙準䞉角関数。匕数はラゞアン。
{{jsxref("Math.asin", "asin()")}}, {{jsxref("Math.acos", "acos()")}}, {{jsxref("Math.atan", "atan()")}}, {{jsxref("Math.atan2", "atan2()")}}逆䞉角関数。戻り倀はラゞアン。
{{jsxref("Math.sinh", "sinh()")}}, {{jsxref("Math.cosh", "cosh()")}}, {{jsxref("Math.tanh", "tanh()")}}双曲線䞉角関数。匕数は双曲線角床。
{{jsxref("Math.asinh", "asinh()")}}, {{jsxref("Math.acosh", "acosh()")}}, {{jsxref("Math.atanh", "atanh()")}}逆双曲線䞉角関数。戻り倀は双曲線角床。
+

{{jsxref("Math.pow", "pow()")}}, {{jsxref("Math.exp", "exp()")}}, {{jsxref("Math.expm1", "expm1()")}}, {{jsxref("Math.log10", "log10()")}}, {{jsxref("Math.log1p", "log1p()")}}, {{jsxref("Math.log2", "log2()")}}

+
指数ず察数関数。
{{jsxref("Math.floor", "floor()")}}, {{jsxref("Math.ceil", "ceil()")}}匕数以䞋の最倧の敎数倀、匕数以䞊の最小の敎数倀を返したす。
{{jsxref("Math.min", "min()")}}, {{jsxref("Math.max", "max()")}}カンマで区切られた数倀リストの匕数から最小倀、最倧倀をそれぞれ返したす。
{{jsxref("Math.random", "random()")}}0 から 1 の間のランダムな数倀を返したす。
{{jsxref("Math.round", "round()")}}, {{jsxref("Math.fround", "fround()")}}, {{jsxref("Math.trunc", "trunc()")}},䞞めず切り捚お関数。
{{jsxref("Math.sqrt", "sqrt()")}}, {{jsxref("Math.cbrt", "cbrt()")}}, {{jsxref("Math.hypot", "hypot()")}}平方根、立方根、匕数の二乗の和の平方根を返す。
{{jsxref("Math.sign", "sign()")}}数の笊号、すなわち数が正、負たたはれロかどうかを返したす。
{{jsxref("Math.clz32", "clz32()")}},
+ {{jsxref("Math.imul", "imul()")}}
32 ビットのバむナリヌ衚珟にした堎合の先行れロの個数を返す関数。
+ 2 ぀の匕数を C 蚀語のように 32 ビット乗算した結果を返す関数。
+ +

他の倚くのオブゞェクトずは異なり、決しお独自の Math オブゞェクトを生成しないでください。垞にビルトむン Math オブゞェクトを䜿甚しおください。

+ +

Date オブゞェクト

+ +

JavaScript には日付のためのデヌタ型がありたせん。しかし、アプリケヌション内で日付を取り扱うための {{jsxref("Date")}} オブゞェクトずそのメ゜ッドが利甚できたす。 Date オブゞェクトは日付の蚭定、取埗、操䜜を行う倚数のメ゜ッドを有しおいたす。このオブゞェクトはいかなるプロパティも持ちたせん。

+ +

JavaScript は Java ず同じように日付を取り扱いたす。2 ぀の蚀語は同様の日付甚メ゜ッドを倚く持ち、䞡方の蚀語ずも、Unix タむムスタンプが 1970 幎 1 月 1 日 00:00:00 からの秒の数倀であるのず同様に、1970 幎 1 月 1 日 00:00:00 からのミリ秒の数倀で日付を栌玍しおいたす。

+ +

Date オブゞェクトの蚭定可胜範囲は 1970 幎 1 月 1 日 UTC 時間 に察し -100,000,000 日から 100,000,000 日たでです。

+ +

Date オブゞェクトは次のように生成したす。

+ +
var dateObjectName = new Date([parameters]);
+
+ +

ここで dateObjectName は生成される Date オブゞェクトの名前です。新しいオブゞェクトか、あるいは既存のオブゞェクトのプロパティにするこずができたす。

+ +

new キヌワヌドなしで Date を呌び出すず、単に珟圚の日付ず時間を文字列衚珟にしたものを返したす。

+ +

䞊蚘構文の parameters は以䞋のいずれかになりたす。

+ + + +

Date オブゞェクトのメ゜ッド

+ +

日時を扱う Date オブゞェクトのメ゜ッドは䞋蚘のカテゎリに分類されたす:

+ + + +

"get" ず "set" メ゜ッドを䜿甚しお、秒、分、時、日、曜日、月、幎をそれぞれ取埗、蚭定できたす。曜日を返す getDay メ゜ッドはありたすが、察応する setDay メ゜ッドはありたせん。ずいうのも、曜日は自動的に蚭定されるからです。これらのメ゜ッドはそれぞれの倀を衚すのに䞋蚘の敎数倀を䜿甚したす:

+ + + +

䟋えば、次の日付を定矩しおみたす。

+ +
var Xmas95 = new Date('December 25, 1995');
+
+ +

するず、Xmas95.getMonth() は 11 を返し、Xmas95.getFullYear() は 1995 を返したす。

+ +

getTime ず setTime メ゜ッドは日付を比范するのに䟿利です。getTime メ゜ッドは Date オブゞェクトに察しお January 1, 1970, 00:00:00 からのミリ秒の数倀を返したす。

+ +

䟋えば、次のコヌドでは今幎に残された日数を衚瀺したす。:

+ +
var today = new Date();
+var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // 月日を蚭定
+endYear.setFullYear(today.getFullYear()); // 今幎の幎を蚭定
+var msPerDay = 24 * 60 * 60 * 1000; // 䞀日をミリ秒に換算
+var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
+var daysLeft = Math.round(daysLeft); // 今幎の残り日数を返す
+
+ +

この䟋では、今日の日時を含む today ず名付けられた Date オブゞェクトを生成したす。それから、endYear ず名付けられた Date オブゞェクトを生成し、幎を今幎に蚭定したす。そしお、1日あたりのミリ秒倀を䜿っお、today ず endYear 間の日数を蚈算する際に getTime を䜿甚し、そしお日数に䞞めたす。

+ +

parse メ゜ッドは日付文字列から既存の Date オブゞェクトに倀を割り圓おるのに䟿利です。䟋えば、次のコヌドは parse ず setTime を䜿甚し、日付の倀を IPOdate オブゞェクトに割り圓おたす:

+ +
var IPOdate = new Date();
+IPOdate.setTime(Date.parse('Aug 9, 1995'));
+
+ +

䟋

+ +

次の䟋では、JSClock() 関数がデゞタル時蚈の圢匏で時刻を返したす。

+ +
function JSClock() {
+  var time = new Date();
+  var hour = time.getHours();
+  var minute = time.getMinutes();
+  var second = time.getSeconds();
+  var temp = '' + ((hour > 12) ? hour - 12 : hour);
+  if (hour == 0)
+    temp = '12';
+  temp += ((minute < 10) ? ':0' : ':') + minute;
+  temp += ((second < 10) ? ':0' : ':') + second;
+  temp += (hour >= 12) ? ' P.M.' : ' A.M.';
+  return temp;
+}
+
+ +

JSClock 関数は、はじめに time ずいう名前の新しい Date オブゞェクトを生成したす。匕数が䞎えられおいないため、time は珟圚の日付ず時刻で生成されたす。次に、getHours および getMinutes、getSeconds メ゜ッドを呌び出しお、珟圚の時、分、秒を hour、minute、second に代入したす。

+ +

続く 4 ぀の匏は、時刻を基にした文字列倀を組み立おたす。最初の匏は temp 倉数を生成し、それに条件匏を甚いお倀を代入したす。hour が 12 よりも倧きい堎合は (hour - 12)、そうでない堎合は単に hour を代入したす。hour が 0 の堎合は 12 になりたす。

+ +

次の匏は、minute 倀を temp に远加したす。minute の倀が 10 よりも小さい堎合、条件匏により先行れロの文字が远加されたす。そうでない堎合は区切りのコロン文字を远加したす。そしお秒の倀を同じ方法で temp に远加したす。

+ +

最埌の条件匏は、hour が 12 以䞊の堎合、"P.M." を temp に远加したす。そうでない堎合は "A.M." を temp に远加したす。

+ +

{{PreviousNext("Web/JavaScript/Guide/Expressions_and_Operators", "Web/JavaScript/Guide/Text_formatting")}}

diff --git a/files/ja/web/javascript/guide/object_manipulation_statements/index.html b/files/ja/web/javascript/guide/object_manipulation_statements/index.html new file mode 100644 index 0000000000..ddf781e031 --- /dev/null +++ b/files/ja/web/javascript/guide/object_manipulation_statements/index.html @@ -0,0 +1,51 @@ +--- +title: Object Manipulation Statements +slug: Web/JavaScript/Guide/Object_Manipulation_Statements +--- +

オブゞェクト操䜜文

+

JavaScript はオブゞェクトの操䜜に for...in、for each...in および with 文を䜿甚したす。

+

for...in 文

+

for...in 文は指定した倉数をオブゞェクトの党プロパティに察しお反埩したす。それぞれのプロパティに察しお JavaScript は指定した文を実行したす。for...in 文は次のように䜿甚したす。

+
for (variable in object) {
+   statements
+}
+
+

䟋
+ 次の関数は、あるオブゞェクトずそのオブゞェクトの名前を匕数にずりたす。そしおそのオブゞェクトの党プロパティに察しお反埩し、プロパティ名ずその倀のリストにした文字列を返したす。

+
function dump_props(obj, obj_name) {
+   var result = "";
+   for (var i in obj) {
+      result += obj_name + "." + i + " = " + obj[i] + "<br>";
+   }
+   result += "<hr>";
+   return result;
+}
+
+

make および model ずいうプロパティを持぀ car ずいうオブゞェクトでは次のような結果が埗られたす。

+
car.make = Ford
+car.model = Mustang
+
+

配列
+ Array の芁玠に察しお反埩する方法ずしおこれを甚いるこずは魅力的かもしれたせんが、for...in 文はその配列の芁玠に加えおナヌザ定矩プロパティに察しお繰り返すため、独自のプロパティやメ゜ッドを远加するなどしお Array オブゞェクトに倉曎を加えるず for...in 文は数倀のむンデックスに加えおナヌザ定矩プロパティの名前を返したす。したがっお、配列に察しお反埩したいずきには数倀のむンデックスを甚いた埓来の for ルヌプを䜿甚したほうがいいでしょう。

+

for each...in 文

+

for each...in は JavaScript 1.6 で導入されるルヌプ文です。これは for...in に䌌おいたすが、オブゞェクトのプロパティの名前ではなく、プロパティの倀に察しお反埩したす。

+

with 文

+

with 文はデフォルトのオブゞェクトに぀いお文のセットを実行したす。JavaScript はその文のセットにおいお非修食名を怜玢し、その名前がデフォルトのオブゞェクトのプロパティであるかを決定したす。非修食名がプロパティにマッチするず、そのプロパティがその文で䜿われたす。そうでない堎合はロヌカル倉数かグロヌバル倉数が䜿われたす。

+

with 文は次のように䜿甚したす。

+
with (object) {
+   statements
+}
+
+

䟋
+ 次の with 文では Math オブゞェクトがデフォルトのオブゞェクトに指定されおいたす。with 文内の文は PI プロパティや cos および sin メ゜ッドを参照しおいたすが、オブゞェクトは指定しおいたせん。JavaScript はこれらの参照は Math オブゞェクトぞのものであるず想定したす。

+
var a, x, y;
+var r = 10;
+with (Math) {
+   a = PI * r * r;
+   x = r * cos(PI);
+   y = r * sin(PI/2);
+}
+
+

泚意with 文を䜿うこずでプログラムをより簡朔にするこずができたすが、with の䞍適切な䜿甚はプログラムを倧幅にスロヌダりンさせるこずに繋がりたす。Core JavaScript 1.5 Reference:Statements:with を参照しおください。

+ +

{{ PreviousNext("JavaScript/Guide/Loop_Statements/continue_Statement", "JavaScript/Guide/Comments") }}

diff --git a/files/ja/web/javascript/guide/objects_and_properties/index.html b/files/ja/web/javascript/guide/objects_and_properties/index.html new file mode 100644 index 0000000000..f2679c1d00 --- /dev/null +++ b/files/ja/web/javascript/guide/objects_and_properties/index.html @@ -0,0 +1,32 @@ +--- +title: オブゞェクトずプロパティ +slug: Web/JavaScript/Guide/Objects_and_Properties +--- +

オブゞェクトずプロパティ

+

JavaScript のオブゞェクトには、それに結び぀けられたプロパティがありたす。簡単な蚘法でオブゞェクトのプロパティにアクセスできたす。

+
objectName.propertyName
+
+

オブゞェクト名もプロパティ名も倧文字ず小文字を区別したす。プロパティの定矩は、そのプロパティに倀を代入するこずで行いたす。䟋えば、myCar ずいう名前のオブゞェクトがあるずしたす今回はオブゞェクトが既に存圚しおいるず仮定。次のようにしお、そのオブゞェクトに make、model、year ずいう名前のプロパティをそれぞれ䜜成するこずができたす。

+
myCar.make = "Ford";
+myCar.model = "Mustang";
+myCar.year = 1969;
+
+

配列はある単䞀の倉数名に結び぀けられた倀の順序集合です。JavaScript におけるプロパティず配列は密接に関連しおいたす。事実、それらは同䞀のデヌタ構造ぞの異なるむンタフェヌスなのです。そのため、䟋えば次のようにしお myCar オブゞェクトのプロパティにアクセスするこずができたす。

+
myCar["make"] = "Ford";
+myCar["model"] = "Mustang";
+myCar["year"] = 1969;
+
+

この手の配列は連想配列ずしお知られおいたす。それぞれのむンデックスの芁玠が文字列にも結び぀けられおいるからです。これがどう動䜜するかずいうず、次の関数は匕数ずしおオブゞェクトずそのオブゞェクトの名前を枡すずオブゞェクトのプロパティを衚瀺したす。

+
function show_props(obj, obj_name) {
+   var result = "";
+   for (var i in obj)
+      result += obj_name + "." + i + " = " + obj[i] + "\n";
+   return result;
+}
+
+

関数 show_props(myCar, "myCar") を呌び出すず以䞋の結果が返されたす。

+
myCar.make = Ford
+myCar.model = Mustang
+myCar.year = 1969
+
+

{{ PreviousNext("JavaScript/Guide/Predefined_Functions/escape_and_unescape_Functions", "JavaScript/Guide/Creating_New_Objects") }}

diff --git a/files/ja/web/javascript/guide/obsolete_pages/index.html b/files/ja/web/javascript/guide/obsolete_pages/index.html new file mode 100644 index 0000000000..7594f13fd9 --- /dev/null +++ b/files/ja/web/javascript/guide/obsolete_pages/index.html @@ -0,0 +1,9 @@ +--- +title: Obsolete Pages +slug: Web/JavaScript/Guide/Obsolete_Pages +translation_of: Web/JavaScript/Guide +--- +

This is a list of pages that have been merged into chapters (in alphabetical order):

+ + +
{{tree}}
diff --git a/files/ja/web/javascript/guide/obsolete_pages/predefined_core_objects/function_object/index.html b/files/ja/web/javascript/guide/obsolete_pages/predefined_core_objects/function_object/index.html new file mode 100644 index 0000000000..79c30b670a --- /dev/null +++ b/files/ja/web/javascript/guide/obsolete_pages/predefined_core_objects/function_object/index.html @@ -0,0 +1,44 @@ +--- +title: Function Object +slug: Web/JavaScript/Guide/Obsolete_Pages/Predefined_Core_Objects/Function_Object +--- +

 

+

Function オブゞェクト

+

定矩枈みの Function オブゞェクトは、関数ずしおコンパむルさせたい JavaScript コヌドの文字列を指定したす。

+

Function オブゞェクトを䜜成するには次のようにしたす。

+
functionObjectName = new Function ([arg1, arg2, ... argn], functionBody)
+
+

functionObjectName は倉数名たたは既存のオブゞェクトのプロパティ名です。オブゞェクトに小文字のむベントハンドラ名を続けお、window.onerror のようにしお指定するこずもできたす。

+

arg1, arg2, ... argn は関数が仮匕数名ずしお䜿甚する匕数です。それぞれが JavaScript の識別子ずしお劥圓な文字列である必芁がありたす。䟋えば、"x" や "theForm" などです。

+

functionBody は関数の本䜓ずしおコンパむルさせたい JavaScript コヌドを衚す文字列です。

+

Function オブゞェクトはそれが䜿甚されるたびに評䟡されたす。これは関数を宣蚀し、それをコヌド内で呌び出す方法よりも非効率的です。宣蚀された関数はコンパむルされるからです。

+

ここで説明した関数の定矩方法に加えお、function 文ず関数匏を甚いるこずもできたす。詳しくは コア JavaScript 1.5 リファレンス を参照しおください。

+

次のコヌドは関数を倉数 setBGColor に代入したす。この関数は開いおいる文曞の背景色をセットしたす。

+
var setBGColor = new Function("document.bgColor='antiquewhite'")
+
+

Function オブゞェクトを呌び出すには、それがあたかも関数であるかのように倉数名を指定すればいいのです。次のコヌドは setBGColor 倉数で指定された関数を実行したす。

+
var colorChoice="antiquewhite"
+if (colorChoice=="antiquewhite") {setBGColor()}
+
+

次のどちらかの方法を䜿甚するこずでむベントハンドラに関数を代入するこずができたす。

+
1. document.form1.colorButton.onclick=setBGColor
+2. <INPUT NAME="colorButton" TYPE="button"
+      VALUE="Change background color"
+      onClick="setBGColor()">
+
+

䞊蚘の倉数 setBGColor を䜜成するこずは次の関数を宣蚀するこずず同じようなこずです。

+
function setBGColor() {
+   document.bgColor='antiquewhite'
+}
+
+

関数を倉数に代入するこずは関数を宣蚀するこずず䌌おいたすが、異なる点もありたす。

+ +

関数を関数の䞭に入れ子にするこずができたす。内偎の関数は倖偎の関数に察しおプラむベヌトになりたす。

+ +

{{ PreviousNext("Core_JavaScript_1.5_Guide:Predefined_Core_Objects:Date_Object", "Core_JavaScript_1.5_Guide:Predefined_Core_Objects:Math_Object") }}

diff --git a/files/ja/web/javascript/guide/operators/arithmetic_operators/index.html b/files/ja/web/javascript/guide/operators/arithmetic_operators/index.html new file mode 100644 index 0000000000..4aa9662292 --- /dev/null +++ b/files/ja/web/javascript/guide/operators/arithmetic_operators/index.html @@ -0,0 +1,47 @@ +--- +title: 算術挔算子 +slug: Web/JavaScript/Guide/Operators/Arithmetic_Operators +--- +

算術挔算子

+

算術挔算子は、そのオペランドに数倀リテラルか倉数をずり、1 ぀の数倀を返したす。暙準的な算術挔算子は、加算 (+)、枛算 (-)、乗算 (*)、陀算 (/) です。これらの挔算子は他のほずんどのプログラミング蚀語ず同じように機胜したすが、そのずきの数倀は、浮動小数点数ずしお扱われたす0 で陀算した結果は、NaN になるこずにも泚意しおください。

+
1 / 2 // JavaScript では 0.5 を返す
+1 / 2 // Java では 0 を返すどちらの数も浮動小数点数ずしお明蚘されおいない
+
+1.0 / 2.0  // JavaScript でも Java でも 0.5 を返す
+
+

さらに、JavaScript では以䞋の衚で瀺された算術挔算子も䜿甚できたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
挔算子説明䟋
%
+ モゞュロ
2 項挔算子。2 ぀のオペランドで陀算したずきの敎数の䜙りを返す。12 % 5 は 2 を返す。
++
+ むンクリメント
単項挔算子。オペランドに 1 を加える。前眮挔算子 (++x) を䜿った堎合、オペランドに 1 を加えた埌にその倀を返す。埌眮挔算子 (x++) を䜿った堎合、オペランドに 1 を加える前にその倀を返す。x が 3 のずき、++x は x に 4 をセットし、4 を返す。䞀方、x++ は x に 4 をセットし、3 を返す。
--
+ デクリメント
単項挔算子。オペランドから 1 を匕く。戻り倀はむンクリメント挔算子のものず同様。x が 3 のずき、--x は x に 2 をセットし、2 を返す。䞀方、x-- は x に 2 をセットし、3 を返す。
-
+ 笊号反転
単項挔算子。オペランドの笊号を反転しおその倀を返す。x が 3 のずき、-x は -3 を返す。
+

衚 3.4算術挔算子

+

{{ PreviousNext("JavaScript/Guide/Operators/Comparison_Operators", "JavaScript/Guide/Operators/Bitwise_Operators") }}

diff --git a/files/ja/web/javascript/guide/operators/assignment_operators/index.html b/files/ja/web/javascript/guide/operators/assignment_operators/index.html new file mode 100644 index 0000000000..88a0b0beb7 --- /dev/null +++ b/files/ja/web/javascript/guide/operators/assignment_operators/index.html @@ -0,0 +1,61 @@ +--- +title: 代入挔算子 +slug: Web/JavaScript/Guide/Operators/Assignment_Operators +--- +

代入挔算子

+

代入挔算子は、右のオペランドの倀に基づいた倀を巊のオペランドに代入したす。基本的な代入挔算子はむコヌル (=) ですが、これは右のオペランドの倀を巊のオペランドに代入したす。すなわち、x = y では y の倀を x に代入したす。

+

他の代入挔算子は暙準的な挔算をするための短瞮衚蚘がありたす。次の衚でそれを瀺したす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
短瞮衚蚘した挔算子意味
x += yx = x + y
x -= yx = x - y
x *= yx = x * y
x /= yx = x / y
x %= yx = x % y
x <<= yx = x << y
x >>= yx = x >> y
x >>>= yx = x >>> y
x &= yx = x & y
x ^= yx = x ^ y
x |= yx = x | y
+

衚 3.2代入挔算子

+

{{ PreviousNext("JavaScript/Guide/Operators", "JavaScript/Guide/Operators/Comparison_Operators") }}

diff --git a/files/ja/web/javascript/guide/operators/comparison_operators/index.html b/files/ja/web/javascript/guide/operators/comparison_operators/index.html new file mode 100644 index 0000000000..182802bb5a --- /dev/null +++ b/files/ja/web/javascript/guide/operators/comparison_operators/index.html @@ -0,0 +1,67 @@ +--- +title: 比范挔算子 +slug: Web/JavaScript/Guide/Operators/Comparison_Operators +--- +

比范挔算子

+

This seems to me kind of poorly explained, mostly the diference betwen "==" and "==="... 比范挔算子は、オペランドを比范し、比范結果に基づいた論理倀を返したす。オペランドには数倀、文字列、論理倀、オブゞェクトが䜿甚できたす。文字列は、Unicode 倀を甚いお暙準的な蟞曞順に基づいお比范されたす。ほずんどの堎合、2 ぀のオペランドが異なる型ならば JavaScript はそのオペランドを比范に適した型に倉換しようずしたすこのルヌルの唯䞀の䟋倖は === および !== であり、これらは厳密に等倀か吊かを刀断し、等倀性をチェックする前にオペランドを適合する型に倉換するずいうこずはありたせん。これは䞀般に数倀の比范が実行されるこずになりたす。次の衚では比范挔算子に぀いお説明したす。次のコヌドで考えたす。

+
var var1 = 3, var2 = 4;
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
挔算子説明true を返す䟋
等しい (==)オペランドが等しい堎合に true を返す。3 == var1
+

"3" == var1

+ 3 == '3'
等しくない (!=)オペランドが等しくない堎合に true を返す。var1 != 4
+ var2 != "3"
厳密に等しい (===)オペランドが等しく、か぀同じ型である堎合に true を返す。3 === var1
厳密には等しくない (!==)オペランドが等しくなく、か぀/たたは同じ型でない堎合に true を返す。var1 !== "3"
+ 3 !== '3'
より倧きい (>)巊のオペランドが右のオペランドよりも倧きい堎合に true を返す。var2 > var1
+ "12" > 2
以䞊 (>=)巊のオペランドが右のオペランド以䞊である堎合に true を返す。var2 >= var1
+ var1 >= 3
より小さい (<)巊のオペランドが右のオペランドよりも小さい堎合に true を返す。var1 < var2
+ "12" < "2"
以䞋 (<=)巊のオペランドが右のオペランド以䞋である堎合に true を返す。var1 <= var2
+ var2 <= 5
+

衚 3.3比范挔算子

+

{{ PreviousNext("JavaScript/Guide/Operators/Assignment_Operators", "JavaScript/Guide/Operators/Arithmetic_Operators")}}

diff --git a/files/ja/web/javascript/guide/operators/logical_operators/index.html b/files/ja/web/javascript/guide/operators/logical_operators/index.html new file mode 100644 index 0000000000..fa6fa08068 --- /dev/null +++ b/files/ja/web/javascript/guide/operators/logical_operators/index.html @@ -0,0 +1,63 @@ +--- +title: 論理挔算子 +slug: Web/JavaScript/Guide/Operators/Logical_Operators +--- +

論理挔算子

+

論理挔算子では基本的に真停論理倀を甚いたす。そのような倀があるず真停倀を返したす。しかし、&& および || 挔算子は実際には指定されたオペランドの䞀方の倀を返したす。そのため、非真停倀ずずもに論理挔算子が䜿われるず非真停倀を返したす。論理挔算子に぀いお次の衚で説明したす。

+ + + + + + + + + + + + + + + + + + + + + + + +
挔算子䜿甚法説明
&&expr1 && expr2論理 ANDexpr1 を false ず芋るこずができる堎合は expr1 を返す。そうでない堎合は expr2 を返す。したがっお、真停倀が䜿われた堎合、䞡オペランドが true の堎合は && は true を返し、そうでない堎合は false を返す。
||expr1 || expr2論理 ORexpr1 を true ず芋るこずができる堎合は expr1 を返す。そうでない堎合は expr2 を返す。したがっお、真停倀が䜿われた堎合、どちらかのオペランドが true の堎合は || は true を返し、䞡方ずも false の堎合は false を返す。
!!expr論理 NOTオペランドを true ず芋るこずができる堎合は false を返す。そうでない堎合は true を返す。
+

衚 3.7論理挔算子

+

false ず芋るこずができる匏ずは、null、0、空文字列 ("")、たたは undefined に評䟡される匏のこずです。

+

以䞋のコヌドで &&論理 AND挔算子の䟋を瀺したす。

+
a1=true && true       // t && t は true を返す
+a2=true && false      // t && f は false を返す
+a3=false && true      // f && t は false を返す
+a4=false && (3 == 4)  // f && f は false を返す
+a5="Cat" && "Dog"     // t && t は Dog を返す
+a6=false && "Cat"     // f && t は false を返す
+a7="Cat" && false     // t && f は false を返す
+
+

以䞋のコヌドで ||論理 OR挔算子の䟋を瀺したす。

+
o1=true || true       // t || t は true を返す
+o2=false || true      // f || t は true を返す
+o3=true || false      // t || f は true を返す
+o4=false || (3 == 4)  // f || f は false を返す
+o5="Cat" || "Dog"     // t || t は Cat を返す
+o6=false || "Cat"     // f || t は Cat を返す
+o7="Cat" || false     // t || f は Cat を返す
+
+

以䞋のコヌドで !論理 NOT挔算子の䟋を瀺したす。

+
n1=!true              // !t は false を返す
+n2=!false             // !f は true を返す
+n3=!"Cat"             // !t は false を返す
+
+

ショヌトサヌキット評䟡

+

論理匏は巊から右に評䟡されるため、以䞋のルヌルを甚いるこずで「ショヌトサヌキット」評䟡ができるようになっおいたす。

+ +

論理のルヌルはこれらの評䟡が垞に正確であるこずを保蚌しおいたす。䞊蚘の匏の anything の郚分は評䟡されないため、䜕らかの副䜜甚が生じないように泚意しおください。

+

{{ PreviousNext("JavaScript/Guide/Operators/Bitwise_Operators", "JavaScript/Guide/Operators/String_Operators") }}

diff --git a/files/ja/web/javascript/guide/operators/special_operators/index.html b/files/ja/web/javascript/guide/operators/special_operators/index.html new file mode 100644 index 0000000000..226faf2b3c --- /dev/null +++ b/files/ja/web/javascript/guide/operators/special_operators/index.html @@ -0,0 +1,197 @@ +--- +title: 特殊挔算子 +slug: Web/JavaScript/Guide/Operators/Special_Operators +--- +

特殊挔算子

+

JavaScript は以䞋の特殊挔算子がありたす。

+ +

条件挔算子

+

条件挔算子は JavaScript では唯䞀の 3 ぀のオペランドをずる挔算子です。挔算子は条件に基づいお 2 ぀の倀のうち、1 ぀を遞択したす。構文は次のずおりです。

+
condition ? val1 : val2
+
+

condition が true の堎合、挔算子は val1 の倀を遞択したす。そうでない堎合は val2 の倀を遞択したす。暙準的な挔算子が䜿甚できる堎所でならどこででも条件挔算子を䜿甚するこずができたす。

+

䟋えば、

+
status = (age >= 18) ? "adult" : "minor"
+
+

この文では、age が 18 以䞊の堎合 "adult" ずいう倀を倉数 status に代入したす。そうでない堎合は "minor" ずいう倀を status に代入したす。

+

コンマ挔算子

+

コンマ挔算子 (,) は単に䞡方のオペランドを評䟡し、第 2 のオペランドの倀を返したす。この挔算子は䞻に for ルヌプ内で䜿甚されたす。このこずでルヌプのたびに耇数の倉数を曎新できるようになりたす。

+

䟋えば、a が䞀蟺が 10 芁玠の 2 次元配列のずき、以䞋のコヌドではコンマ挔算子を甚いるこずで 2 倉数を同時にむンクリメントしおいたす。このコヌドでは配列の察角成分の倀を出力したす。

+
for (var i=0, j=9; i <= 9; i++, j--)
+   document.writeln("a["+i+"]["+j+"]= " + a[i][j])
+
+

delete

+

delete 挔算子はオブゞェクトやオブゞェクトのプロパティ、配列の指定されたむンデックスの芁玠を削陀したす。構文は以䞋のずおりです。

+
delete objectName
+delete objectName.property
+delete objectName[index]
+delete property // with 文内でのみ有効
+
+

ここで、objectName はオブゞェクトの名前を、property は既存のプロパティを、index は配列の芁玠の䜍眮を衚す敎数をそれぞれ衚しおいたす。

+

4 番目の圢匏は with 文内でのみ有効で、これはあるオブゞェクトからプロパティを削陀したす。

+

delete 挔算子を䜿うこずで暗黙的に宣蚀された倉数を削陀するこずができたすが、var 文を甚いお宣蚀された倉数は削陀できたせん。

+

delete 挔算子が成功するず、そのプロパティや芁玠には undefined がセットされたす。たた、挔算が可胜な堎合は delete 挔算子は true を返したす。挔算が䞍可胜な堎合は false を返したす。

+
x=42
+var y= 43
+myobj=new Number()
+myobj.h=4      // プロパティ h を䜜成
+delete x       // true を返す暗黙的に宣蚀されおいるならば削陀可胜
+delete y       // false を返すvar 付きで宣蚀されおいるなら削陀䞍可胜
+delete Math.PI // false を返す定矩枈みプロパティは削陀䞍可胜
+delete myobj.h // true を返すナヌザ定矩プロパティは削陀可胜
+delete myobj   // true を返す暗黙的に宣蚀されおいるならば削陀可胜
+
+

配列芁玠の削陀
+ 配列芁玠を削陀したずき、配列の長さには圱響を及がしたせん。䟋えば a{{ mediawiki.external(3) }} を削陀したずき、a{{ mediawiki.external(4) }} は䟝然 a{{ mediawiki.external(4) }} のたたで、a{{ mediawiki.external(3) }} は undefined になりたす。

+

delete 挔算子で配列芁玠を陀去するず、もうその芁玠はその配列からなくなりたす。次の䟋では tree{{ mediawiki.external(3) }} は delete によっお陀去されたす。

+
trees=new Array("redwood","bay","cedar","oak","maple")
+delete trees[3]
+if (3 in trees) {
+   // ここは実行されない
+}
+
+

配列芁玠は存圚させたいが、倀は未定矩にしたいずいう堎合は、delete 挔算子の代わりに undefined キヌワヌドを䜿甚しおください。次の䟋では trees{{ mediawiki.external(3) }} には undefined ずいう倀が代入されたすが、その配列芁玠は存圚したたたになりたす。

+
trees=new Array("redwood","bay","cedar","oak","maple")
+trees[3]=undefined
+if (3 in trees) {
+   // ここは実行される
+}
+
+

in

+

in 挔算子は、指定されたプロパティが指定されたオブゞェクトにある堎合に true を返したす。構文は以䞋のずおりです。

+
propNameOrNumber in objectName
+
+

ここで、propNameOrNumber はプロパティ名か配列のむンデックスを衚す文字列匏たたは数倀匏を、objectName はオブゞェクトの名前をそれぞれ衚しおいたす。

+

次の䟋では in 挔算子の䜿甚法を瀺したす。

+
// 配列
+trees=new Array("redwood","bay","cedar","oak","maple")
+0 in trees        // true を返す
+3 in trees        // true を返す
+6 in trees        // false を返す
+"bay" in trees    // false を返すむンデックスの指す倀ではなく、
+                  // むンデックスの数字を指定しなければならない
+"length" in trees // true を返すlength は Array のプロパティ
+
+// 定矩枈みオブゞェクト
+"PI" in Math          // true を返す
+myString=new String("coral")
+"length" in myString  // true を返す
+
+// ナヌザ定矩オブゞェクト
+mycar = {make:"Honda",model:"Accord",year:1998}
+"make" in mycar  // true を返す
+"model" in mycar // true を返す
+
+

instanceof

+

instanceof 挔算子は、指定されたオブゞェクトが指定されたオブゞェクトの皮類である堎合に true を返したす。構文は次のずおりです。

+
objectName instanceof objectType
+
+

ここで、objectName は objectType ず比范するオブゞェクトの名前を、objectType は Date や Array のようなオブゞェクトの皮類をそれぞれ衚しおいたす。

+

実行時にオブゞェクトの皮類を確認する必芁があるずきは instanceof を䜿甚しおください。䟋えば、䟋倖を受け取るずき、投げられた䟋倖の皮類によっお別々の䟋倖を扱うコヌドに分岐させるこずができたす。

+

䟋えば、次のコヌドでは instanceof を䜿甚するこずで theDay が Date オブゞェクトであるかどうかを決定しおいたす。theDay は Date オブゞェクトなので if 文の䞭の文は実行されたす。

+
theDay=new Date(1995, 12, 17)
+if (theDay instanceof Date) {
+   // 実行される文
+}
+
+

new

+

new 挔算子は、ナヌザ定矩オブゞェクトや、Array、Boolean、Date、Function、Image、Number、Object、Option、RegExp、String ずいった定矩枈みオブゞェクトのむンスタンスを䜜成するのに䜿甚したす。サヌバでは DbPool、Lock、File、SendMail ずいったオブゞェクトも䜿甚できたす。new の䜿甚法は以䞋のずおりです。

+
objectName = new objectType ( param1 [,param2] ...[,paramN] )
+
+

オブゞェクト初期化子を䜿甚しおもオブゞェクトを䜜成するこずができたす。オブゞェクト初期化子の䜿甚 にお説明しおいたす。

+

詳しくはコア JavaScript リファレンスの new 挔算子 のペヌゞを参照しおください。

+

this

+

this キヌワヌドを䜿うこずでカレントオブゞェクトを参照するこずができたす。䞀般に this はあるメ゜ッド内でそのメ゜ッドを呌び出したオブゞェクトを参照したす。䜿甚法は以䞋のずおりです。

+
this[.propertyName]
+
+

䟋 1
+ あるオブゞェクトの value プロパティの劥圓性を確認する validate ずいう関数を想定したす。関数にはそのオブゞェクトず、䞊限および䞋限の倀を枡したす。

+
function validate(obj, lowval, hival) {
+   if ((obj.value < lowval) || (obj.value > hival))
+      alert("Invalid Value!")
+}
+
+

各フォヌム芁玠の onChange むベントハンドラにおいお validate を呌び出したす。this を䜿うこずでフォヌム芁玠を枡すこずができたす。次の䟋をご芧ください。

+
<B>Enter a number between 18 and 99:</B>
+<INPUT TYPE = "text" NAME = "age" SIZE = 3
+   onChange="validate(this, 18, 99)">
+
+

䟋 2
+ form プロパティず組み合わせるず this でカレントオブゞェクトの芪のフォヌムを参照できたす。次の䟋では、myForm ずいうフォヌムに Text オブゞェクトずボタンが栌玍されおいたす。ナヌザがボタンをクリックするず、Text オブゞェクトの倀にフォヌム名がセットされたす。ボタンの onClick むベントハンドラは this.form を利甚しお芪のフォヌムである myForm を参照したす。

+
<FORM NAME="myForm">
+Form name:<INPUT TYPE="text" NAME="text1" VALUE="Beluga">
+<P>
+<INPUT NAME="button1" TYPE="button" VALUE="Show Form Name"
+   onClick="this.form.text1.value=this.form.name">
+</FORM>
+
+

typeof

+

typeof 挔算子は次の方法のうち、どちらかの方法で䜿甚したす。

+
1. typeof operand
+2. typeof (operand)
+
+

typeof 挔算子は、未評䟡のオペランドの型を指す文字列を返したす。operand は返される型を調べる察象ずなる文字列、倉数、キヌワヌド、オブゞェクトです。括匧はあっおもなくおもかたいたせん。

+

以䞋の倉数を定矩するこずを想定したす。

+
var myFun = new Function("5+2")
+var shape="round"
+var size=1
+var today=new Date()
+
+

typeof 挔算子はこれらの倉数に察しお以䞋の結果を返したす。

+
typeof myFun is function
+typeof shape is string
+typeof size is number
+typeof today is object
+typeof dontExist is undefined
+
+

true や null ずいうキヌワヌドに察しお、typeof 挔算子は以䞋の結果を返したす。

+
typeof true is boolean
+typeof null is object
+
+

数倀や文字列に察しお、typeof 挔算子は以䞋の結果を返したす。

+
typeof 62 is number
+typeof 'Hello world' is string
+
+

プロパティ倀に察しお、typeof 挔算子はプロパティ倀の型を返したす。

+
typeof document.lastModified is string
+typeof window.length is number
+typeof Math.LN2 is number
+
+

メ゜ッドや関数に察しお、typeof 挔算子は以䞋の結果を返したす。

+
typeof blur is function
+typeof eval is function
+typeof parseInt is function
+typeof shape.split is function
+
+

定矩枈みオブゞェクトに察しお、typeof 挔算子は以䞋の結果を返したす。

+
typeof Date is function
+typeof Function is function
+typeof Math is function
+typeof Option is function
+typeof String is function
+
+

void

+

void 挔算子は次の方法のうち、どちらかの方法で䜿甚したす。

+
1. void (expression)
+2. void expression
+
+

void 挔算子は倀を返さずに評䟡する匏を指定したす。expression は評䟡する JavaScript の匏です。匏の呚りの括匧はあっおもなくおもかたいたせんが、䜿甚したほうが芋た目はいいです。

+

void 挔算子を䜿甚するこずで匏をハむパヌテキストリンクずしお指定するこずができたす。匏は評䟡されたすが、開いおいる文曞の代わりに読み蟌たれるずいうこずはありたせん。

+

以䞋のコヌドはナヌザがクリックしおも䜕も起こらないハむパヌテキストリンクを䜜成したす。ナヌザがリンクをクリックするず void(0) は undefined に評䟡され、JavaScript ずしおは圱響を及がしたせん。

+
<A HREF="javascript:void(0)">Click here to do nothing</A>
+
+

以䞋のコヌドはナヌザがクリックするずフォヌムが送信されるハむパヌテキストリンクを䜜成したす。

+
<A HREF="javascript:void(document.form.submit())">
+Click here to submit</A>
+
+

{{ PreviousNext("JavaScript/Guide/Operators/String_Operators", "JavaScript/Guide/Creating_a_Regular_Expression") }}

diff --git a/files/ja/web/javascript/guide/operators/string_operators/index.html b/files/ja/web/javascript/guide/operators/string_operators/index.html new file mode 100644 index 0000000000..41bf8bbc44 --- /dev/null +++ b/files/ja/web/javascript/guide/operators/string_operators/index.html @@ -0,0 +1,8 @@ +--- +title: 文字列挔算子 +slug: Web/JavaScript/Guide/Operators/String_Operators +--- +

文字列挔算子

+

比范挔算子は文字列に䜿甚できたすが、これに加えお 2 ぀の文字列を結合する結合挔算子 (+) も䜿甚できたす。これは 2 ぀のオペランドの文字列を結合した文字列を返したす。䟋えば、"my " + "string" は "my string" ずいう文字列を返したす。

+

短瞮衚蚘した代入挔算子 += も文字列の結合に䜿甚できたす。䟋えば、倉数 mystring に "alpha" ずいう倀が栌玍されおいるずき、匏 mystring += "bet" の評䟡結果は "alphabet" ずなり、この倀を mystring に代入したす。

+

{{ PreviousNext("JavaScript/Guide/Operators/Logical_Operators", "JavaScript/Guide/Operators/Special_Operators") }}

diff --git a/files/ja/web/javascript/guide/predefined_functions/escape_and_unescape_functions/index.html b/files/ja/web/javascript/guide/predefined_functions/escape_and_unescape_functions/index.html new file mode 100644 index 0000000000..aecb8a81f1 --- /dev/null +++ b/files/ja/web/javascript/guide/predefined_functions/escape_and_unescape_functions/index.html @@ -0,0 +1,14 @@ +--- +title: escape 関数ず unescape 関数 +slug: Web/JavaScript/Guide/Predefined_Functions/escape_and_unescape_Functions +--- +
+

escape および unescape 関数

+

escape および unescape 関数は文字列を゚ンコヌドしたりデコヌドしたりしたす。escape 関数は ISO Latin 文字セットで衚された匕数の 16 進゚ンコヌディングを返したす。unescape は指定した 16 進゚ンコヌディングの倀に察する ASCII 文字列を返したす。

+

これらの関数の構文は以䞋のずおりです。

+
escape(string)
+unescape(string)
+
+

これらの関数は䞻にサヌバサむド JavaScript で URL 䞭の名前ず倀のペアの゚ンコヌドやデコヌドに䜿甚されたす。

+ escape および unescape 関数は 非 ASCII 文字に察しおは正しく機胜せず、廃止予定になっおいたす。JavaScript 1.5 以降では encodeURI、decodeURI、encodeURIComponent および decodeURIComponent を䜿甚しおください。
+

{{ PreviousNext("JavaScript/Guide/Predefined_Functions/Number_and_String_Functions", "JavaScript/Guide/Objects_and_Properties") }}

diff --git a/files/ja/web/javascript/guide/predefined_functions/eval_function/index.html b/files/ja/web/javascript/guide/predefined_functions/eval_function/index.html new file mode 100644 index 0000000000..3945955e86 --- /dev/null +++ b/files/ja/web/javascript/guide/predefined_functions/eval_function/index.html @@ -0,0 +1,12 @@ +--- +title: eval 関数 +slug: Web/JavaScript/Guide/Predefined_Functions/eval_Function +--- +
+

eval 関数

+

eval 関数は JavaScript のコヌドの文字列を特定のオブゞェクトを参照するこずなく評䟡したす。eval の構文は次のずおりです。

+
eval(expr)
+
+

ここで expr は評䟡される文字列です。

+ 文字列が匏を衚しおいる堎合は eval はその匏を評䟡したす。たた、1 ぀以䞊の JavaScript の文を衚しおいる堎合は eval はその匏を実行したす。eval のコヌドのスコヌプは呌び出し元コヌドのスコヌプず同じです。挔算匏を評䟡するために eval を呌び出さないでください。JavaScript は自動的に挔算匏を評䟡したす。
+

{{ PreviousNext("JavaScript/Guide/Predefined_Functions", "JavaScript/Guide/Predefined_Functions/isFinite_Function") }}

diff --git a/files/ja/web/javascript/guide/predefined_functions/index.html b/files/ja/web/javascript/guide/predefined_functions/index.html new file mode 100644 index 0000000000..758c6f22a0 --- /dev/null +++ b/files/ja/web/javascript/guide/predefined_functions/index.html @@ -0,0 +1,17 @@ +--- +title: 定矩枈み関数 +slug: Web/JavaScript/Guide/Predefined_Functions +--- +
+

定矩枈み関数

+

JavaScript にはトップレベルの定矩枈み関数がいく぀かありたす。

+ +
+

{{ PreviousNext("JavaScript/Guide/Using_the_arguments_object", "JavaScript/Guide/Predefined_Functions/eval_Function") }}

diff --git a/files/ja/web/javascript/guide/regular_expressions/assertions/index.html b/files/ja/web/javascript/guide/regular_expressions/assertions/index.html new file mode 100644 index 0000000000..e92e05b312 --- /dev/null +++ b/files/ja/web/javascript/guide/regular_expressions/assertions/index.html @@ -0,0 +1,246 @@ +--- +title: 蚀明 +slug: Web/JavaScript/Guide/Regular_Expressions/Assertions +tags: + - Assertions + - JavaScript + - Reference + - Regular Expressions + - regex +translation_of: Web/JavaScript/Guide/Regular_Expressions/Assertions +--- +

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

+ +

蚀明には、 行や単語の始たり・終わりを瀺す、境界や、先読み、埌読み、条件匏を含む䜕らかの方法でマッチが可胜なこずを瀺す、その他のパタヌンが含たれたす。

+ +

皮類

+ +

境界型の蚀明

+ + + + + + + + + + + + + + + + + + + + + + + + +
文字意味
^ +

入力の先頭にマッチしたす。耇数行フラグが true にセットされおいる堎合は、改行文字の盎埌にもマッチしたす。䟋えば /^A/ は "an A" の 'A' にはマッチしたせんが、"An E" の 'A' にはマッチしたす。

+ +
+

この文字は、文字集合パタヌンの先頭にある堎合は異なる意味を持ちたす。

+
+
$ +

入力の末尟にマッチしたす。耇数行フラグが true にセットされおいる堎合は、改行文字の盎前にもマッチしたす。䟋えば /t$/ は "eater" の "t" にはマッチしたせんが、"eat" の "t" にはマッチしたす。

+
\b +

単語の区切りにマッチしたす。これは、単語構成文字ず埌に続く非単語構成文字の間、たたは非単語構成文字ず埌に続く単語構成文字の間、たたは文字列の先頭・最埌です。単語の区切りはマッチする「文字」ではありたせん。アンカヌのように、単語の区切りはマッチした郚分に含たれたせん。蚀い換えるず、マッチした単語の区切りの長さは 0 です。

+ +

入力文字に "moon" を䜿甚した䟋:

+ +
    +
  • /\bm/ は "m" にマッチしたす。これは `\b` が文字列の先頭に存圚するからです。
  • +
  • /oo\b/ は "oo" にマッチしたせん。これは '\b' の前埌に単語構成文字があるためです。
  • +
  • /oon\b/ は "oon" にマッチしたす。これは、文字列の終端であるためです。
  • +
  • /\w\b\w/ はどこにもマッチしないでしょう。これは、'\b' の前埌に単語構成文字があるためです。
  • +
+ +

バックスペヌス文字 ([\b]) に぀いおは文字クラスを芋おください。

+
\B +

単語の区切り以倖にマッチしたす。マッチするのは以䞋の堎合です

+ +
    +
  • 文字列の先頭の文字の前
  • +
  • 文字列の終端の文字の埌
  • +
  • 単語内の 2 文字の間
  • +
  • 2 ぀の単語ではない文字の間
  • +
  • 空文字列
  • +
+ +

䟋えば /\B../ は "noonday" の 'oo' に、/y\B./ は "possibly yesterday" の 'ye' にマッチしたす。

+
+ +

その他の蚀明

+ +
+

? 文字は数量詞ずしお䜿うこずができたす。

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
文字意味
x(?=y) +

先読み蚀明 x に y が続く堎合のみ x にマッチしたす。䟋えば /Jack(?=Sprat)/ は "Jack" の埌に "Sprat" が続く堎合のみ "Jack" にマッチしたす。
+ /Jack(?=Sprat|Frost)/ は "Jack" の埌ろに "Sprat" たたは "Frost" が続く堎合のみ "Jack" にマッチしたす。しかしながら、"Sprat" も "Frost" もマッチの結果には衚れたせん。

+
x(?!y) +

吊定先読み蚀明 x に y が続かない堎合のみ x にマッチしたす。䟋えば /\d+(?!\.)/ は埌ろに小数点が続かない数倀にマッチしたす。正芏衚珟 /\d+(?!\.)/.exec("3.141") は "141" にマッチしたすが "3.141" にはマッチしたせん。

+
(?<=y)x +

埌読み蚀明 y に x が続く堎合のみ x にマッチしたす。䟋えば、/(?<=Jack)Sprat/ は "Jack" に続く "Sprat" のみにマッチしたす。 /(?<=Jack|Tom)Sprat/ は "Jack" たたは "Tom" に続く "Sprat" のみにマッチしたす。しかしながら、"Jack" も "Tom" もマッチの結果には衚れたせん。

+
(?<!y)x +

吊定埌読み蚀明 y に x が続かない堎合のみ x にマッチしたす。䟋えば、/(?<!-)\d+/ は、マむナス蚘号の぀かない数字のみにマッチしたす。 /(?<!-)\d+/.exec('3') は "3" がマッチしたす。 /(?<!-)\d+/.exec('-3') はマむナス蚘号に数字が続いおいるため、マッチが芋぀かりたせん。

+
+ +

䟋

+ +

基本的な境界型の䟋

+ +
// おかしい文字列を修正するために正芏衚珟の境界を利甚したす。
+buggyMultiline = `tey, ihe light-greon apple
+tangs on ihe greon traa`;
+
+// 1) 文字列の最初ず改行の盎埌のマッチを修正するために ^ を利甚したす。
+buggyMultiline = buggyMultiline.replace(/^t/gim,'h');
+console.log(1, buggyMultiline); // 'tey', 'tangs' を 'hey', 'hangs' に修正したす。 'traa' は察象倖です。
+
+// 2) テキストの末尟を修正するために $ を利甚したす。
+buggyMultiline = buggyMultiline.replace(/aa$/gim,'ee.');
+console.log(2, buggyMultiline); // 'traa' を 'tree' に修正したす。
+
+// 3) 単語ず空癜の間の境界の右の文字にマッチさせるために \b を利甚したす。
+buggyMultiline = buggyMultiline.replace(/\bi/gim,'t');
+console.log(3, buggyMultiline); // 'ihe' を修正したすが、'light'は察象倖です。
+
+// 4) ゚ンティティの境界内の文字にマッチするために \B を利甚したす。
+fixedMultiline = buggyMultiline.replace(/\Bo/gim,'e');
+console.log(4, fixedMultiline); // 'greon' を修正したすが、'on' は察象倖です。
+ +

^ 制埡文字を利甚した入力の開始ぞのマッチ

+ +

 ^ は、通垞、単語の開始にマッチさせるために利甚したす。この䟋では、/^A/ ずいう正芏衚珟で 'A' で始たるフルヌツを取埗したす。ここでの ^ は、入力の開始を瀺すずいう、たった 1 ぀の圹割を果たしおいたす。適切なフルヌツを遞択するためにアロヌ 関数で filter メ゜ッドを甚いたす。

+ +
let fruits = ["Apple", "Watermelon", "Orange", "Avocado", "Strawberry"];
+
+// /^A/ 正芏衚珟で 'A' で始たるフルヌツを遞択したす。
+// ここでの'^' 制埡蚘号は「入力の開始にマッチする」ずいう 1 ぀の圹割だけで利甚されおいたす。
+
+let fruitsStartsWithA = fruits.filter(fruit => /^A/.test(fruit));
+console.log(fruitsStartsWithA); // [ 'Apple', 'Avocado' ]
+ +

2 番目の䟋での ^ は、入力の開始ぞのマッチず、グル―プで甚いられた堎合の文字集合の吊定たたは補集合ずいう、䞡方で利甚されおいたす。

+ +
let fruits = ["Apple", "Watermelon", "Orange", "Avocado", "Strawberry"];
+
+// /^[^A]/ ずいう正芏衚珟で 'A' で始たらないフルヌツを遞択したす。
+// この䟋では、'^' 制埡蚘号は 2 ぀の意味を衚しおいたす。
+// 1) 入力の開始にマッチ
+// 2) [^A]ずいう文字集合の吊定たたは補集合: 
+// ぀たり、角括匧で囲たれたものでないあらゆるものにマッチしたす
+
+let fruitsStartsWithNotA = fruits.filter(fruit => /^[^A]/.test(fruit));
+
+console.log(fruitsStartsWithNotA); // [ 'Watermelon', 'Orange', 'Strawberry' ]
+ +

単語の境界にマッチ

+ +
let fruitsWithDescription = ["Red apple", "Orange orange", "Green Avocado"];
+
+// 単語の終わりに 'en' たたは 'ed' を含む蚘述を遞択したす。
+let enEdSelection = fruitsWithDescription.filter(descr => /(en|ed)\b/.test(descr));
+
+console.log(enEdSelection); // [ 'Red apple', 'Green Avocado' ]
+ +

先読み蚀明

+ +
// JS Lookahead assertion x(?=y)
+
+let regex = /First(?= test)/g;
+
+console.log('First test'.match(regex)); // [ 'First' ]
+console.log('First peach'.match(regex)); // null
+console.log('This is a First test in a year.'.match(regex)); // [ 'First' ]
+console.log('This is a First peach in a month.'.match(regex)); // null
+ +

基本的な吊定先読み蚀明

+ +

䟋えば、/\d+(?!\.)/ は小数点が埌に続かない数倀にだけマッチしたす。/\d+(?!\.)/.exec('3.141') は "141" にマッチしたすが、 "3" にはマッチしたせん。

+ +
console.log(/\d+(?!\.)/g.exec('3.141')); // [ '141', index: 2, input: '3.141' ]
+ +

蚀明ず範囲における '?!' の組み合わせの異なる意味での利甚

+ +

 ?! の組み合わせを利甚するずき、蚀明 /x(?!y)/ ず範囲 [^?!]では異なる意味を持ちたす。

+ +
let orangeNotLemon = "Do you want to have an orange? Yes, I do not want to have a lemon!";
+
+// 蚀明 /x(?!y)/ ず範囲 /[^?!]/ では '?!' の組み合わせの利甚は異なる意味を持ちたす。
+let selectNotLemonRegex = /[^?!]+have(?! a lemon)[^?!]+[?!]/gi
+console.log(orangeNotLemon.match(selectNotLemonRegex)); // [ 'Do you want to have an orange?' ]
+
+let selectNotOrangeRegex = /[^?!]+have(?! an orange)[^?!]+[?!]/gi
+console.log(orangeNotLemon.match(selectNotOrangeRegex)); // [ ' Yes, I do not want to have a lemon!' ]
+ +

埌読み蚀明

+ +
let oranges = ['ripe orange A ', 'green orange B', 'ripe orange C',];
+
+let ripe_oranges = oranges.filter( fruit => fruit.match(/(?<=ripe )orange/));
+console.log(ripe_oranges); // [ 'ripe orange A ', 'ripe orange C' ]
+ +

仕様

+ + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('ESDraft', '#sec-assertion', 'RegExp: Assertions')}}{{Spec2('ESDraft')}}
+ +

ブラりザサポヌト

+ +
+ + +

{{Compat("javascript.builtins.RegExp.assertions")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/guide/regular_expressions/character_classes/index.html b/files/ja/web/javascript/guide/regular_expressions/character_classes/index.html new file mode 100644 index 0000000000..accc601eef --- /dev/null +++ b/files/ja/web/javascript/guide/regular_expressions/character_classes/index.html @@ -0,0 +1,216 @@ +--- +title: 文字クラス +slug: Web/JavaScript/Guide/Regular_Expressions/Character_Classes +tags: + - JavaScript + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Guide/Regular_Expressions/Character_Classes +--- +

{{JSSidebar("JavaScript Guide")}}{{Draft}}

+ +

文字クラスは、文字や数字の区別など、文字の皮類を区別したす。

+ +

皮類

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
文字意味
. +

次のいずれかの意味を持ちたす。

+ +
    +
  • 行末文字 ( \n、\r、\u2028、\u2029 ) を陀くあらゆる 1 文字ずマッチしたす。䟋えば、/.y/ は "my" ず "ay" にマッチし、"yes make my day" の "yes" にはマッチしたせん。
  • +
  • 文字セット内では . はその特別な意味を倱い、文字通りの "."ず䞀臎したす。
  • +
+ +

耇数行フラグ (m)  は "." の意味を倉えないこずに泚意しおください。そのため、耇数行にわたるパタヌンに䞀臎させるには、IEの叀いバヌゞョン以倖なら文字集合 [^] を䜿うこずで、改行を含む任意の文字に䞀臎したす。

+ +

ES2018 では s "dotAll" フラグが远加されたした。これは行末文字ず䞀臎するこずを可胜にしたす。

+
\d +

あらゆるアラビア数字にマッチしたす。[0-9] に盞圓したす。䟋えば /\d/ や /[0-9]/ は "B2 is the suite number" の "2" にマッチしたす。

+
\D +

あらゆるアラビア数字以倖の文字にマッチしたす。[^0-9] に盞圓したす。䟋えば /\D/ や /[^0-9]/ は "B2 is the suite number" の "B" にマッチしたす。

+
\w +

アンダヌスコアを含むあらゆる半角英数字基本ラテンアルファベットにマッチしたす。[A-Za-z0-9_] に盞圓したす。䟋えば /\w/ は、"apple," の 'a' や "$5.28," の "5" や "3D" の "3" にマッチしたす。

+
\W +

前述以倖の文字にマッチしたす。[^A-Za-z0-9_] に盞圓したす。䟋えば /\W/ や /[^A-Za-z0-9_]/ は、"50%" の "%" にマッチしたす。

+
\s +

スペヌス、タブ、改ペヌゞ、改行を含むホワむトスペヌス文字にマッチしたす。[ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​-\u200a​\u2028\u2029\u202f\u205f​\u3000\ufeff] に盞圓したす。䟋えば /\s\w*/ は "foo bar" の " bar" にマッチしたす。

+
\S +

ホワむトスペヌス以倖の文字にマッチしたす。[^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] に盞圓したす。䟋えば /\S\w*/ は "foo bar" の "foo" にマッチしたす。

+
\tタブ (U+0009) にマッチしたす。
\r埩垰文字 (U+000D) にマッチしたす。
\n改行文字 (U+000A) にマッチしたす。
\v垂盎タブ (U+000B) にマッチしたす。
\f改ペヌゞ (U+000C) にマッチしたす。
[\b]埌退文字バックスペヌス、U+0008にマッチしたす。単語境界文字 (\b) に぀いおは境界を芋おください。
\0NULL 文字 (U+0000) にマッチしたす。この埌ろに他の数字を続けおはいけたせん。\0 の埌に0 から 7 たでの数字が続くず 8 進数の゚スケヌプシヌケンスずなるからです。
\cX +

X には A から Z のうち 1 文字が入りたす。文字列䞭の制埡文字にマッチしたす。䟋えば /\cM/ は文字列䞭の control-M (U+000D) にマッチしたす。

+
\xhhhh2 桁の 16 進数コヌドからなる文字にマッチしたす。
\uhhhhhhhh4 桁の 16 進数の倀からなる UTF-16 コヌドナニットにマッチしたす。
\u{hhhh} たたは \u{hhhhh} +

(u フラグがセットされた時のみ) U+hhhh たたは U+hhhhh (16 進数) Unicode 倀からなる文字にマッチしたす。

+
\ +

次の文字を特別に扱うこず、「゚スケヌプ」するこずを瀺したす。 その振る舞いは、2 通りのうちのどちらか 1 ぀です。

+ +
    +
  • 通垞文字の前に付けられた堎合、次の文字が特別なもので、文字通りには評䟡されないこずを瀺したす。䟋えば b は文字 "b" にマッチしたす。しかし "b" の前にバックスラッシュを眮いお \b ずするず、単語区切りを意味するようになりたす。
  • +
  • 特殊文字の前に付けられた堎合、次の文字が特別なものでなく、文字通りに評䟡されるこずを衚したす。䟋えば、"*" は、先行文字の 0 回以䞊の出珟が䞀臎する必芁があるこずを意味する特殊文字です。䟋えば、/a*/ は 0 回以䞊の "a" ずマッチしたす。文字通りの * にマッチさせるには、その盎前にバックスラッシュを入れたす。䟋えば、/a\*/ は "a*" ずマッチしたす。
  • +
+ +
+

この文字を文字通りにマッチさせるには、それ自身を゚スケヌプしたす。぀たり、 /\\/ を䜿っお \ を怜玢したす。

+
+
+ +

䟋

+ +

䞀連の数字を探す

+ +
var randomData = "015 354 8787 687351 3512 8735";
+var regexpFourDigits = /\b\d{4}\b/g;
+// \b は境界を瀺したす぀たり、単語の真ん䞭からマッチを開始したせん
+// \d{4} は 4 ぀の数字を瀺したす
+// \b は別の境界を瀺したす぀たり、単語の真ん䞭でマッチが終わりたせん
+
+
+console.table(randomData.match(regexpFourDigits));
+// ['8787', '3512', '8735']
+ +

A から始たるラテンアルファベットの単語を探す

+ +
var aliceExcerpt = "I’m sure I’m not Ada,’ she said, ‘for her hair goes in such long ringlets, and mine doesn’t go in ringlets at all.";
+var regexpWordStartingWithA = /\b[aA]\w+/g;
+// \b は境界を瀺したす぀たり、単語の真ん䞭からマッチを開始したせん
+// [aA] は a たたは A の文字を瀺したす
+// \w+ は耇数回の *ラテンアルファベットからなる* 任意の文字を瀺したす
+
+console.table(aliceExcerpt.match(regexpWordStartingWithA));
+// ['Ada', 'and', 'at', 'all']
+ +

ナニコヌド文字の単語を探す

+ +

単語を衚すために、ラテンアルファベットではなく、 Unicode 文字の範囲が䜿えたす。぀たり、ロシア語やアラビア語のような他の蚀語のテキストを扱えたす。 Unicode の 「基本倚蚀語面」には、䞖界䞭で䜿われおいるほずんどの文字が含たれおおり、それらの文字で曞かれた単語にマッチするための文字クラスず範囲を利甚できたす。

+ +
var nonEnglishText = "ПрОключеМОя АлОсы в СтраМе чуЎес";
+var regexpBMPWord = /([\u0000-\u0019\u0021-\uFFFF])+/gu;
+// U+0000 から U+FFFF たでの BMP、ただし、U+0020 は空癜
+
+console.table(nonEnglishText.match(regexpBMPWord));
+[ 'ПрОключеМОя', 'АлОсы', 'в', 'СтраМе', 'чуЎес' ]
+ + + +

仕様

+ + + + + + + + + + + + + + + + + + +
仕様曞策定状況コメント
{{SpecName('ESDraft', '#sec-characterclass', 'RegExp: Character classes')}}{{Spec2('ESDraft')}}
+ +

ブラりザサポヌト

+ + + +

{{Compat("javascript.builtins.RegExp.character_classes")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/guide/regular_expressions/groups_and_ranges/index.html b/files/ja/web/javascript/guide/regular_expressions/groups_and_ranges/index.html new file mode 100644 index 0000000000..d79009b14e --- /dev/null +++ b/files/ja/web/javascript/guide/regular_expressions/groups_and_ranges/index.html @@ -0,0 +1,162 @@ +--- +title: グルヌプず範囲 +slug: Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges +tags: + - Guide + - JavaScript + - Reference + - Regular Expressions + - regex +translation_of: Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges +--- +

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

+ +

グルヌプず範囲は、匏にある文字のグルヌプず範囲を瀺したす。

+ +

皮類

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
文字意味
x|y +

"x" たたは "y" にマッチしたす。䟋えば /green|red/ は "green apple" の "green" や "red apple" の "red" にマッチしたす。

+
[xyz]
+ [a-c]
+

文字集合です。角括匧で囲たれた文字のいずれか 1 個にマッチしたす。ハむフンを甚いお文字の範囲を指定するこずも可胜ですが、ハむフンが括匧に囲たれた最初たたは最埌の文字に珟れおいる堎合、それはハむフンリテラルずみなされお、通垞文字ずしお文字集合に含たれたす。文字集合には文字クラスを含めるこずができたす。

+ +

䟋えば [abcd] は [a-d] ず同じです。これは "brisket" の "b" や "chop" の "c" にマッチしたす。

+ +

䟋えば、[abcd-] ず [-abcd] は "brisket" の "b" ず "chop" の "c" ず "non-profit" の "-" ハむフンずマッチしたす。

+ +

䟋えば、[\w-] は [A-Za-z0-9_-] ず同じです。これは "brisket" の "b" や "chop" の "c" 、"non-profit" の "n" にマッチしたす。

+
+

[^xyz]
+ [^a-c]

+
+

文字集合の吊定たたは補集合です。角括匧で囲たれた文字ではない文字にマッチしたす。ハむフンを甚いお文字の範囲を指定するこずも可胜ですが、ハむフンが括匧に囲たれた最初たたは最埌の文字に珟れおいる堎合、それはハむフンリテラルずみなされお、通垞文字ずしお文字集合に含たれたす。䟋えば [^abc] は [^a-c] ず同じです。これは "bacon" の 'o' や "chop" の 'h' にマッチしたす。

+ +
+

^ 文字は入力の先頭を瀺すこずもできたす。

+
+
(x) +

キャプチャグルヌプ x にマッチし、マッチした内容を蚘憶したす。䟋えば /(foo)/ は "foo bar" の "foo" にマッチし、蚘憶したす。

+ +

正芏衚珟は耇数のキャプチャグルヌプを持぀こずができたす。結果、䞀般的にキャプチャグルヌプ内の巊括匧ず同じ順にある、配列の芁玠のキャプチャグルヌプに䞀臎しおいたす。たいおいの堎合、これはキャプチャグルヌプ自身の順番です。これはキャプチャグルヌプがネストしおいる堎合に重芁です。マッチは結果の芁玠のむンデックス ([1], ..., [n]) や、あらかじめ定矩されおいる RegExp オブゞェクトのプロパティ ($1, ..., $9) を䜿っおアクセスできたす。

+ +

キャプチャグルヌプはパフォヌマンスペナルティがありたす。マッチした郚分文字列を䜿わない堎合はキャプチャしない括匧埌述を䜿ったほうがいいでしょう。

+ +

党䜓マッチ (/.../g) がある堎合、{{JSxRef("String.match()")}} はグルヌプを返せたせん。ですが、 {{JSxRef("String.matchAll()")}} によっおすべおのマッチを取埗できたす。

+
\n +

n に正の敎数が入りたす。正芏衚珟内においお n 番目の括匧の郚分にマッチした最新の郚分文字列ぞの埌方参照ずなりたす括匧の数は巊からカりントしたす。䟋えば /apple(,)\sorange\1/ は "apple, orange, cherry, peach" の "apple, orange," にマッチしたす。A complete example follows this table.

+
(?<Name>x) +

名前付きキャプチャグルヌプ x にマッチし、<Name> で指定された名前に埓い、返されるマッチの groups プロパティに蚘憶されたす。䞉角括匧 ('<' ず '>') にはグルヌプ名が必須です。

+ +

䟋えば、電話番号からアメリカの゚リアコヌドを取り出す際、/\((?<area>\d\d\d)\)/ を䜿うこずができたす。 結果の番号は matches.groups.area に衚瀺されたす。

+
(?:x) +

非キャプチャグルヌプ x にマッチしたすが、マッチした内容は蚘憶したせん。マッチの郚分文字列は、結果の配列の芁玠 ([1], ..., [n]) や、あらかじめ定矩されおいる RegExp オブゞェクトのプロパティ ($1, ..., $9) から呌び出すこずはできたせん。.

+
+ +

䟋

+ +

母音を数える

+ +
var aliceExcerpt = "There was a long silence after this, and Alice could only hear whispers now and then.";
+var regexpVowels = /[aeiouy]/g;
+
+console.log("母音の数:", aliceExcerpt.match(regexpVowels).length);
+// 母音の数: 25
+ +

グルヌプの䜿い方

+ +
let personList = `First_Name: John, Last_Name: Doe
+First_Name: Jane, Last_Name: Smith`;
+
+let regexpNames =  /First_Name: (\w+), Last_Name: (\w+)/mg;
+let match = regexpNames.exec(personList);
+do {
+  console.log(`Hello ${match[1]} ${match[2]}`);
+} while((match = regexpNames.exec(personList)) !== null);
+
+ +

名前付きグルヌプの䜿い方

+ +
let personList = `First_Name: John, Last_Name: Doe
+First_Name: Jane, Last_Name: Smith`;
+
+let regexpNames =  /First_Name: (?<firstname>\w+), Last_Name: (?<lastname>\w+)/mg;
+let match = regexpNames.exec(personList);
+do {
+  console.log(`Hello ${match.groups.firstname} ${match.groups.lastname}`);
+} while((match = regexpNames.exec(personList)) !== null);
+ +
+

泚: すべおのブラりザがこの機胜をサポヌトしおいるわけではありたせん。以䞋の互換性の衚を参照しおください。

+
+ +

仕様

+ + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('ESDraft', '#sec-classranges', 'RegExp: Ranges')}}{{Spec2('ESDraft')}}
+ +

ブラりザサポヌト

+ +
+ + + + +

{{Compat("javascript.builtins.RegExp.groups_ranges")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/guide/regular_expressions/index.html b/files/ja/web/javascript/guide/regular_expressions/index.html new file mode 100644 index 0000000000..a6a571bb88 --- /dev/null +++ b/files/ja/web/javascript/guide/regular_expressions/index.html @@ -0,0 +1,800 @@ +--- +title: 正芏衚珟 +slug: Web/JavaScript/Guide/Regular_Expressions +tags: + - Guide + - Intermediate + - JavaScript + - Reference + - RegExp + - Regular Expressions + - regex +translation_of: Web/JavaScript/Guide/Regular_Expressions +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Text_formatting", "Web/JavaScript/Guide/Indexed_collections")}}
+ +

正芏衚珟ずは、文字列内で文字の組み合わせを照合するために甚いられるパタヌンです。JavaScript では、正芏衚珟はオブゞェクトでもありたす。これらのパタヌンは {{jsxref("RegExp")}} の {{jsxref("RegExp.exec", "exec")}} および {{jsxref("RegExp.test", "test")}} メ゜ッドや、{{jsxref("String")}} の {{jsxref("String.match", "match")}}、 {{jsxref("String.matchAll", "matchAll")}}、{{jsxref("String.replace", "replace")}}、{{jsxref("String.search", "search")}}、および {{jsxref("String.split", "split")}} メ゜ッドで䜿甚できたす。本章では、JavaScript の正芏衚珟に぀いお説明したす。

+ +

正芏衚珟の䜜成

+ +

正芏衚珟は 2 皮類の方法で䜜成できたす :

+ +

次のように、スラッシュによっお囲たれたパタヌンからなる正芏衚珟リテラルを䜿甚したす :

+ +
var re = /ab+c/;
+
+ +

正芏衚珟リテラルはスクリプトのロヌド時にその正芏衚珟をコンパむルしたす。正芏衚珟が䞀定のたたの堎合、この方法を䜿うずよいパフォヌマンスが埗られたす。

+ +

たた、次のように {{jsxref("RegExp")}} オブゞェクトのコンストラクタ関数を呌び出す方法がありたす :

+ +
var re = new RegExp('ab+c');
+
+ +

コンストラクタ関数を䜿甚するず、実行時にその正芏衚珟をコンパむルしたす。正芏衚珟パタヌンが倉わるこずがわかっおいる堎合や、パタヌンがわからない堎合、ナヌザヌが入力するなど別の゜ヌスからパタヌンを取埗する堎合は、コンストラクタ関数を䜿甚しおください。

+ +

正芏衚珟パタヌンの蚘述

+ +

正芏衚珟パタヌンは、/abc/ のような単玔な文字、たたは /ab*c/ や /Chapter (\d+)\.\d*/ のような単玔な文字ず特殊文字ずの組み合わせからなりたす。最埌の䟋には蚘憶装眮ずしお甚いられる䞞括匧がありたす。パタヌンのこの䞞括匧で囲たれた郚分でマッチした箇所は、埌で䜿甚できるように蚘憶されたす。詳しくは{{anch("Using_Parenthesized_Substring_Matches", "括匧で囲たれた郚分文字列のマッチの䜿甚")}}を参照しおください。

+ +

単玔なパタヌンの䜿い方

+ +

単玔なパタヌンずは、盎接マッチしおいる郚分を芋぀けたい文字から構成されたものです。䟋えば /abc/ ずいうパタヌンは、実際に 'abc' ずいう文字が䞀緒にその順で存圚しおいるずきだけ、文字列䞭の文字の組み合わせにマッチしたす。"Hi, do you know your abc's?" や "The latest airplane designs evolved from slabcraft." ずいった文字列でのマッチは成功したす。どちらの堎合でも 'abc' ずいう郚分文字列にマッチしたす。"Grab crab" ずいう文字列では、'abc' ずいう郚分文字列が含たれおいないためマッチしたせん。

+ +

特殊文字の䜿い方

+ +

1 個以䞊の b を芋぀けたり、ホワむトスペヌスを芋぀けたりずいった盎接マッチより高床なマッチの怜玢では、パタヌンに特殊文字を䜿甚したす。䟋えば /ab*c/ ずいうパタヌンでは、1 個の 'a' ずその埌ろに続く 0 個以䞊の 'b' (* は盎前のアむテムの 0 回以䞊の出珟を意味したす)、そしおそのすぐ埌ろに続く 'c' で構成される文字の組み合わせにマッチしたす。"cbbabbbbcdebc," ずいう文字列では、このパタヌンは 'abbbbc' ずいう郚分文字列にマッチしたす。

+ +

以䞋のペヌゞで、正芏衚珟で䜿甚できる特殊文字の完党なリストずその意味を詳しく説明したす。

+ +
+
蚀明
+
蚀明には、 行や単語の始たり・終わりを瀺す、境界や、先読み、埌読み、条件匏を含む䜕らかの方法でマッチが可胜なこずを瀺す、その他のパタヌンが含たれたす。
+
文字クラス
+
文字や数字の区別など、文字の皮類を区別したす。
+
グルヌプず範囲
+
匏にある文字のグルヌプず範囲を瀺したす。
+
数量詞
+
マッチする文字や匏の数を瀺したす。
+
Unicode プロパティ゚スケヌプ
+
倧文字ず小文字、数孊蚘号、句読点など、Unicode文字のプロパティに基づき区別したす。
+
+ +

正芏衚珟で利甚可胜なすべおの特殊文字を単䞀の衚で芋たい堎合は、以䞋を参照しおください。

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
正芏衚珟における特殊文字
文字意味
\ +

以䞋のルヌルに基づいおマッチしたす :

+ +

特別な意味を持たない文字の前に付けられたバックスラッシュ文字は、次の文字が特別なもので、文字通りには評䟡されないこずを衚したす。䟋えば、前に '\' がない 'b' は文字列䞭のあらゆる箇所の小文字の 'b' にマッチしたす。぀たり、その文字は文字通り評䟡されたす。しかし '\b' ずいう衚珟はどんな文字にもマッチしたせん。これは単語区切りを意味したす。
+
+ 特別な意味を持぀文字の前に付けられたバックスラッシュ文字は、次の文字が特別なものでなく、文字通りに評䟡されるこずを衚したす。詳しくは "Escaping" の章を芋おください。

+ +

RegExp コンストラクタの匕数に文字列を指定しお䜿う堎合、文字列リテラル内でのバックスラッシュぱスケヌプ文字であるこずを忘れないでください。぀たり、パタヌン内でバックスラッシュを䜿うためには、文字列リテラル内でそれを゚スケヌプする必芁があるのです。 /[a-z]\s/i ず new RegExp("[a-z]\\s", "i") は同じ正芏衚珟を䜜成したす。この衚珟は、A から Z たでの範囲の任意の文字ずそれに続く 1 ぀の空癜を探したす\s は次以降を芋おください。文字列を匕数ずしお指定した新しい RegExp むンスタンスでリテラルずしおの バックスラッシュを衚珟するには、文字列レベルず正芏衚珟レベルの䞡方でバックスラッシュを゚スケヌプする必芁がありたす。぀たり、 /[a-z]:\\/i ず new RegExp("[a-z]:\\\\","i") は "C:\" にマッチする同じ衚珟を䜜成したす。

+
^ +

入力の先頭にマッチしたす。耇数行フラグが true にセットされおいる堎合は、改行文字の盎埌にもマッチしたす。
+
+ 䟋えば、/^A/ は "an A" の 'A' にはマッチしたせんが、"An E" の 'A' にはマッチしたす。

+ +

この文字は、文字集合パタヌンの先頭にある堎合は異なる意味を持ちたす。䟋ず詳现に぀いおは盞補文字集合をご芧ください。

+
$ +

入力の末尟にマッチしたす。耇数行フラグが true にセットされおいる堎合は、改行文字の盎前にもマッチしたす。

+ +

䟋えば、/t$/ は "eater" の 't' にはマッチしたせんが、"eat" の 't' にはマッチしたす。

+
* +

盎前の文字の 0 回以䞊の繰り返しにマッチしたす。{0,}に盞圓したす。

+ +

䟋えば、 /bo*/ は "A ghost booooed" の 'boooo' や "A bird warbled" の 'b' にマッチしたすが、"A goat grunted" ではマッチしたせん。

+
+ +

盎前の文字の 1 回以䞊の繰り返しにマッチしたす。{1,}に盞圓したす。

+ +

䟋えば、/a+/  は "candy" の 'a' や "caaaaaaandy" のすべおの a にマッチしたす。

+
?盎前の文字の 0 回か 1 回の出珟にマッチしたす。{0,1}に盞圓したす。
+
+ 䟋えば、 /e?le?/ +

は "angel" の 'el' や "angle" の 'le'、あるいは "oslo" の 'l' にマッチしたす。

+ *、+、?、{} ずいった量指定子の盎埌に䜿甚した堎合、その量指定子をデフォルトずは逆の{{原語䜵蚘("非貪欲","non-greedy")}} 最短マッチにしたす。デフォルトは{{原語䜵蚘("欲匵り","greedy")}}最長マッチです。䟋えば、/\d+/ は "123abc" の "123" にマッチしたすが、/\d+?/ の堎合は "1" にだけマッチしたす。
+
+ この特殊文字は、この衚の x(?=y) および x(?!y) + +

の項目で説明する先読みアサヌションでも䜿甚できたす。

+
. +

(小数点) はデフォルトでは改行文字以倖のどの 1 文字にもマッチしたす。

+ +

䟋えば、 /.n/ は "nay, an apple is on the tree" の 'an' や 'on' にはマッチしたすが、'nay' にはマッチしたせん。

+ +

s ("dotAll") フラグが true にセットされおいる堎合は、改行文字にもマッチしたす。

+
(x) +

'x' にマッチし、マッチした内容を蚘憶したす。この括匧はキャプチャリング栌玍括匧ず呌ばれたす。
+
+ 䟋えば、パタヌン/(foo) (bar)\1 \2/内の '(foo)' ず '(bar)' は、文字列 "foo bar foo bar" の最初の 2 個の単語にマッチし、それを蚘憶したす。パタヌン内の \1 ず\2 の 1 個目ず 2 個目の括匧内の文字、すなわち foo ず barを衚し、文字列の最埌の 2 個の単語にマッチしたす。\1, \2, ..., \n は正芏衚珟のマッチ郚分で䜿甚するこずに泚意しおください。詳しくは䞋蚘の \n を参照しおください。 眮換郚分で䜿甚する際は $1, $2, ..., $n ずする必芁がありたす。䟋えば、 'bar foo'.replace(/(...) (...)/, '$2 $1')ずいうように。$& はマッチした文字列党䜓を意味したす。

+
(?:x) +

'x' にマッチしたすが、マッチした内容は蚘憶したせん。この括匧は非キャプチャリング非栌玍括匧ず呌ばれ、パタヌンをグルヌピングしお、正芏衚珟挔算子ず䞀緒に䜿う際の郚分正芏衚珟匏を定矩するこずができたす。 芋本ずしお匏 /(?:foo){1,2}/ を芋おみたしょう。匏が /foo{1,2}/であれば、{1,2} の文字は 'foo' の最埌の 'o' にのみ適甚されたす。非キャプチャリング括匧を䜿うず、{1,2} は'foo' ずいう単語党䜓に適甚されたす。詳しい情報は、䞋蚘の括匧を䜿うを芋おください。

+
x(?=y) +

'x' に 'y' が続く堎合のみ 'x' にマッチしたす。この特殊文字は先読みず呌ばれたす。

+ +

䟋えば、/Jack(?=Sprat)/ は 'Jack' の埌に 'Sprat' が続く堎合のみ 'Jack' にマッチしたす。 /Jack(?=Sprat|Frost)/ は 'Jack' の埌ろに 'Sprat' たたは 'Frost' が続く堎合のみ 'Jack' にマッチしたす。しかしながら、'Sprat' も 'Frost' もマッチの結果には衚れたせん。

+
x(?!y) +

'x' に 'y' が続かない堎合のみ 'x' にマッチしたす。これは吊定先読みず呌ばれたす。

+ +

䟋えば、 /\d+(?!\.)/ は埌ろに小数点が続かない数倀にマッチしたす。正芏衚珟 /\d+(?!\.)/.exec("3.141") は'141' にマッチしたすが '3.141' にはマッチしたせん。

+
(?<=y)x +

x の前に y がある堎合のみxにマッチしたす。 これは埌読みず呌ばれたす。

+ +

䟋えば、 /(?<=Jack)Sprat/ は "Sprat" の前に "Jack" がある堎合にのみマッチし、
+ /(?<=Jack|Tom)Sprat/ は "Sprat" の前に "Jack" たたは "Tom" がある堎合にのみマッチしたす。
+ しかしながら、"Jack"も "Tom" もマッチの結果には衚れたせん。

+
(?<!y)x +

x の前に yがない堎合のみ x にマッチしたす。これは吊定埌読みず呌ばれたす。

+ +

䟋えば、 /(?<!-)\d+/ は前にマむナス笊号がない数倀にのみマッチしたす。
+ /(?<!-)\d+/.exec('3') は "3"にマッチしおいたすが、
+ /(?<!-)\d+/.exec('-3') にマッチは芋぀かりたせん。なぜなら' -3' の前にはマむナス笊号があるからです。

+
x|y +

'x', たたは 'y' にマッチしたす。'x' にマッチする必芁はありたせん。

+ +

䟋えば、/green|red/ は "green apple" の 'green' や "red apple." の 'red' にマッチしたす。'x' ず 'y' の順番は重芁です。䟋えば a*|b は"b" の空文字列にマッチしたすが、 b|a* は同じ文字列の "b" にマッチしたす。

+
{n}盎前の文字がちょうど n 回出珟するものにマッチしたす。n には正の敎数が入りたす。
+
+ 䟋えば、 /a{2}/ は "candy" の 'a' にはマッチしたせんが、"caaandy" の最初の 2 個の a にはマッチしたす。
{n,} +

盎前の匏の少なくずも n 回の出珟にマッチしたす。n には正の敎数が入りたす。

+ +

䟋えば、 /a{2,}/ は "aa", "aaaa", "aaaaa" にマッチしたすが "a" にはマッチしたせん。

+
{n,m} +

盎前の文字が少なくずも n 回、倚くおも m 回出珟するものにマッチしたす。n および m には正の敎数が入りたす。m を省略した堎合は ∞ ずみなされたす。

+ +

䟋えば、 /a{1,3}/ は "cndy" ではマッチせず、"candy," の 'a'、"caandy," の 最初の 2 個の a、"caaaaaaandy" の最初の 3 個の a にマッチしたす。"caaaaaaandy" では元の文字列に a が 4 個以䞊ありたすが、マッチするのは "aaa" であるこずに泚意しおください。

+
[xyz] +

文字集合を衚したす。このパタヌンでは、角括匧で囲たれた文字のいずれか 1 個にマッチしたす。察象の文字ぱスケヌプシヌケンスも含みたす。 文字の集合内では、特殊文字 (䟋えばドット (.) やアスタリスク (*)) は特別な意味を持たないので、それらに゚スケヌプは䞍芁です。以䞋で䟋瀺するように、ハむフンを甚いお文字の範囲を指定するこずも可胜です。
+
+ 䟋えば [abcd] は [a-d] ず同じです。これは "brisket" の 'b' や "city" の 'c' にマッチしたす。/[a-z.]+/ および /[\w.]+/ はどちらも、"test.i.ng" の党䜓にマッチしたす。

+
[^xyz] +

文字集合の吊定たたは補集合です。角括匧で囲たれた文字ではない文字にマッチしたす。ハむフンを甚いお文字の範囲を指定するこずも可胜です。文字集合パタヌンで動䜜するものすべおがこちらでも機胜したす。

+ +

䟋えば、 [^abc] は [^a-c]ず同じです。これは "brisket" の 'r' や "chop" の 'h' ずいった䞀番最初の該圓文字にマッチしたす。

+
[\b]埌退文字バックスペヌス、U+0008にマッチしたす。 埌退文字自䜓にマッチさせるには角括匧を䜿う必芁がありたす。\b ず混同しないように。
\b +

単語の区切りにマッチしたす。単語の区切りは、単語構成文字ず埌に続く非単語構成文字の間、たたは非単語構成文字ず埌に続く単語構成文字の間、たたは文字列の先頭、たたは文字列の最埌ずマッチしたす。単語の区切りはマッチする「文字」ではありたせん。アンカヌのように、単語の区切りはマッチした郚分に含たれたせん。蚀い換えるず、マッチした単語の区切りの長さは 0 です。([\b] ず混同しおはいけたせん。)

+ +

入力文字に "moon" を䜿甚した䟋:
+ /\bm/ はマッチしたす。これは `\b` が文字列の先頭に存圚するからです。
+ /oo\b/ の '\b' はマッチしたせん。これは '\b' の前埌に単語構成文字があるためです。
+ /oon\b/ の '\b' はマッチしたす。これは、文字列の終端であるためです。
+ /\w\b\w/ の '\b' はどこにもマッチしないでしょう。これは、'\b' の前埌に単語構成文字があるためです。

+ +
+

泚蚘 : JavaScript の正芏衚珟゚ンゞンでは「{{原語䜵蚘("単語","word")}}」を構成する文字ずしお 特定の文字集合を定矩しおいたす。 この集合内にない文字は非単語構成文字ず芋なされたす。この文字集合はかなり限定的なもので、ロヌマ字の倧文字小文字のアルファベット、10 進数字ずアンダヌスコアのみが含たれたす。"é" や "ÃŒ" ずいった文字{{蚳泚("そしお日本語を構成する文字たちも")}}、残念ながら、䞀般的な衚意文字ず同様に、単語の区切りのために非単語構成文字ずしお扱われたす。

+
+
\B +

単語の区切り以倖にマッチしたす。マッチするのは以䞋の堎合です

+ +
    +
  • 文字列の先頭の文字の前
  • +
  • 文字列の終端の文字の埌
  • +
  • 単語内の 2 文字の間
  • +
  • 2 ぀の単語ではない文字の間
  • +
  • 空文字列
  • +
+ +

䟋えば、/\B../ は "noonday" の 'oo' に、/y\B./ は "possibly yesterday" の 'ye' にマッチしたす。

+
\cX +

文字列䞭の制埡文字にマッチしたす。 X には A から Z のうち 1 文字が入りたす。

+ +

䟋えば、 /\cM/ は文字列䞭の control-M (U+000D) にマッチしたす。

+
\d +

数字にマッチしたす。[0-9] に盞圓したす。

+ +

䟋えば、 /\d/ や /[0-9]/ は "B2 is the suite number" の '2' にマッチしたす。

+
\D +

数字以倖の文字にマッチしたす。[^0-9] に盞圓したす。

+ +

䟋えば、/\D/ や/[^0-9]/ は "B2 is the suite number" の 'B' にマッチしたす。

+
\f改ペヌゞ (U+000C) にマッチしたす。
\n改行文字 (U+000A) にマッチしたす。
\r埩垰文字 (U+000D) にマッチしたす。
\s +

スペヌス、タブ、改ペヌゞ、改行を含むホワむトスペヌス文字にマッチしたす。[ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​-\u200a​\u2028\u2029\u202f\u205f​\u3000\ufeff] に盞圓したす。

+ +

䟋えば /\s\w*/ は "foo bar" の ' bar' にマッチしたす。

+
\S +

ホワむトスペヌス以倖の文字にマッチしたす。 [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] に盞圓したす。

+ +

䟋えば、 /\S*/ は "foo bar" の 'foo' にマッチしたす。

+
\tタブ (U+0009) にマッチしたす。
\v垂盎タブ (U+000B) にマッチしたす。
\w +

アンダヌスコアを含むどの英数字にもマッチしたす。[A-Za-z0-9_] に盞圓したす。

+ +

䟋えば /\w/ は、"apple," の 'a' や "$5.28," の '5' や "3D" の '3' にマッチしたす。

+
\W +

前述以倖の文字にマッチしたす。[^A-Za-z0-9_] に盞圓したす。

+ +

䟋えば、/\w/ や /[^A-Za-z0-9_]/ は、"50%" の '%' にマッチしたす。

+
\n +

n に正の敎数が入る堎合、正芏衚珟内においお n 番目の括匧の郚分にマッチした最新の郚分文字列ぞの埌方参照ずなりたす括匧の数は巊からカりントしたす。

+ +

䟋えば /apple(,)\sorange\1/ は "apple, orange, cherry, peach" の 'apple, orange,' にマッチしたす。

+
\0NULL 文字 (U+0000) にマッチしたす。この埌ろに他の数字を続けおはいけたせん。\0 の埌に0 から 7 たでの数字が続くず 8 進数の ゚スケヌプシヌケンスずなるからです。
\xhhhh2 桁の 16 進数コヌドからなる文字列にマッチしたす。
\uhhhhhhhh4 桁の 16 進数コヌドからなる文字列にマッチしたす。
\u{hhhh}(u フラグがセットされた時のみ) Unicode 倀 hhhh (16 進数) からなる文字列にマッチしたす。
+
+
+
+ +

゚スケヌプする

+ +

もし特殊な文字を䜿う必芁があるのなら䟋えば実際に * を怜玢したい堎合、その文字の前にバックスラッシュを付けお゚スケヌプする必芁がありたす。䟋えば、a ず * ず b が続くのを怜玢する堎合、/a\*b/ ずしたす。これはバックスラッシュが * を特殊な文字ではなく、リテラルずしお扱うように゚スケヌプしおいたす。

+ +

同様に、もし正芏衚珟リテラルを曞いおいおスラッシュ('/')ずマッチさせる必芁があるならば、スラッシュを゚スケヌプする必芁がありたすそうしないずスラッシュがパタヌンを終了しおしたいたす。䟋えば、"/example/"の文字列ずそれに続く1぀以䞊のアルファベットを探すためには、/\/example\/[a-z]+/i ずしたす。各スラッシュ前のバックスラッシュが、スラッシュをリテラルにしおいたす。

+ +

リテラルのバックスラッシュにマッチするためには、バックスラッシュを゚スケヌプする必芁がありたす。䟋えば、'C' は任意の文字である "C:\" ずいう文字列にマッチするためには、/[A-Z]:\\/ずしたす。最初のバックスラッシュはその埌のバックスラッシュを゚スケヌプし、この衚珟は単䞀のリテラルバックスラッシュを探したす。

+ +

RegExp コンストラクタを文字列リテラルを匕数に指定しお利甚する堎合は、バックスラッシュは文字列リテラル内での゚スケヌプ文字であるこずを思い出しおください。぀たり、バックスラッシュを正芏衚珟で甚いるには文字列リテラルレベルで゚スケヌプする必芁がありたす。 /a\*b/ ず new RegExp("a\\*b") は、 'a' の次に '*'、その次に 'b' を探す同じ衚珟を䜜成したす。

+ +

゚スケヌプ文字がパタヌンに远加されおないなら、{{jsxref("String.replace")}} を䜿甚しお远加するこずができたす:

+ +
function escapeRegExp(string) {
+  return string.replace(/[.*+?^=!:${}()|[\]\/\\]/g, '\\$&'); // $&はマッチした郚分文字列党䜓を意味したす
+}
+ +

正芏衚珟の埌の g はグロヌバルサヌチを行うオプション/フラグで、党䜓の文字列を芋おすべおのマッチを返したす。䞋の{{anch("Advanced_Searching_With_Flags", "フラグを甚いた高床な怜玢")}}に詳しく説明されおいたす。

+ +

括匧の䜿い方

+ +

正芏衚珟パタヌンの䞀郚を括匧で囲むこずで、マッチした郚分文字列を蚘憶しおおくこずができたす。いったん蚘憶されれば、埌からその郚分文字列を呌び出すこずができたす。これに関しおは{{anch("Using_Parenthesized_Substring_Matches", "括匧で囲たれた郚分文字列のマッチの䜿甚")}}で説明しおいたす。

+ +

䟋ずしお /Chapter (\d+)\.\d*/ ずいうパタヌンを䜿い、゚スケヌプ文字ず特殊文字に぀いおも説明した䞊で、どのようにパタヌンの䞀郚が蚘憶されるかを瀺したす。これは 'Chapter ' ずいう文字列に正確にマッチし、それに続く 1 文字以䞊の数字 \d はいずれかの数字を、+ は 1 回以䞊の繰り返しを意味したす、それに続く小数点それ自䜓は特殊文字であり、小数点の前の \ はパタヌンが '.' ずいう文字そのものを探すようにするこずを意味したす、それに続く 0 文字以䞊の数字 \d は数字を、* は 0 回以䞊の繰り返しを意味したすにマッチしたす。さらに、最初にマッチした数字の蚘憶に括匧が䜿われおいたす。

+ +

このパタヌンは "Open Chapter 4.3, paragraph 6" ずいう文字列で怜玢され、'4' が蚘憶されたす。このパタヌンは "Chapter 3 and 4" では芋぀かりたせん。この文字列は '3' の埌にピリオドがないからです。

+ +

マッチした郚分を蚘憶させるこずなく郚分文字列にマッチさせたい堎合は、その括匧においおパタヌンの前に ?: を぀けおください。䟋えば (?:\d+) は 1 文字以䞊の数字にマッチしたすが、マッチした文字列は蚘憶したせん。

+ +

JavaScriptでの正芏衚珟の䜿い方

+ +

正芏衚珟は、RegExp の test および exec メ゜ッド、String の match、replace、search、split メ゜ッドずずもに䜿甚したす。これらのメ゜ッドの詳现は JavaScript リファレンスで説明しおいたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
正芏衚珟を䜿甚するメ゜ッド
メ゜ッド説明
{{jsxref("RegExp.exec", "exec")}}文字列䞭で䞀臎するものを怜玢する RegExp のメ゜ッドです。結果情報の配列を返したす。
{{jsxref("RegExp.test", "test")}}文字列䞭で䞀臎するものがあるかをテストする RegExp のメ゜ッドです。true たたは false を返したす。
{{jsxref("String.match", "match")}}文字列䞭で䞀臎するものを怜玢する String のメ゜ッドです。結果情報の配列を返したす。マッチしない堎合は null を返したす。
{{jsxref("String.matchAll", "matchAll")}}キャプチャグルヌプを含んだ、すべおのマッチをも぀ iterator を返す String のメ゜ッドです。 
{{jsxref("String.search", "search")}}文字列䞭で䞀臎するものがあるかをテストする String のメ゜ッドです。マッチした堎所のむンデックスを返したす。怜玢に倱敗した堎合は -1 を返したす。
{{jsxref("String.replace", "replace")}}文字列䞭で䞀臎するものを怜玢し、マッチした郚分文字列を別の郚分文字列に眮換する String のメ゜ッドです。
{{jsxref("String.split", "split")}}正芏衚珟たたは固定文字列を甚いお文字列を分割し、郚分文字列の配列に入れる String のメ゜ッドです。
+ +

あるパタヌンが文字列に存圚するかを知りたいずきは、test たたは search メ゜ッドを䜿甚しおください。詳现な情報が知りたいずきは実行時間が長くなりたすがexec たたは match メ゜ッドを䜿甚しおください。exec や match を䜿甚しおマッチが成功した堎合、これらのメ゜ッドは配列を返し、たた結び぀けられた正芏衚珟オブゞェクトず定矩枈みオブゞェクトである RegExp オブゞェクトのプロパティを曎新したす。マッチが倱敗するず、exec メ゜ッドは nullfalse に倉換したすを返したす。

+ +

次の䟋では、exec メ゜ッドを䜿甚しお文字列を怜玢したす。

+ +
var myRe = /d(b+)d/g;
+var myArray = myRe.exec("cdbbdbsbz");
+
+ +

正芏衚珟のプロパティにアクセスする必芁がない堎合は、次のスクリプトが myArray を䜜成する別の方法になりたす:

+ +
var myArray = /d(b+)d/g.exec('cdbbdbsbz'); // similar to "cdbbdbsbz".match(/d(b+)d/g); however,
+    // the latter outputs Array [ "dbbd" ], while
+    // /d(b+)d/g.exec('cdbbdbsbz') outputs Array [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ].
+ +

(異なるふるたいの詳しい情報は {{anch("g-different-behaviors", "g フラグによる振る舞いの違い")}}を参照しおください。)

+ +

ある文字列から正芏衚珟を組み立おたい堎合は、次のスクリプトのような方法がありたす:

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

これらのスクリプトではマッチが成功するず、配列を返すずずもに次衚で瀺されるプロパティを曎新したす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
正芏衚珟の実行結果
オブゞェクトプロパティたたはむンデックス説明この䟋の堎合
myArrayマッチした文字列ず、すべおの蚘憶された郚分文字列です。['dbbd', 'bb', index: 1, input: 'cdbbdbsbz']
index入力文字列でマッチした䜍眮を瀺す、0 から始たるむンデックスです。1
input元の文字列です。"cdbbdbsbz"
[0]最埌にマッチした文字列です。"dbbd"
myRelastIndex次のマッチが始たるむンデックスです。このプロパティは、g オプションを甚いる正芏衚珟でのみセットされたす。これに぀いおは{{anch("Advanced_Searching_With_Flags", "フラグを甚いた高床な怜玢")}}で説明したす。5
sourceパタヌンのテキストです。正芏衚珟の実行時ではなく䜜成時に曎新されたす。"d(b+)d"
+ +

この䟋の 2 ぀目の圢匏で瀺したように、オブゞェクト初期化子を䜿甚しお、倉数に代入せずに正芏衚珟を䜿うこずができたす。しかしながら、この方法では生成される正芏衚珟はすべお、別の正芏衚珟ずしお䜜成されたす。このため、倉数に代入しないこの圢匏を䜿甚する堎合は、その正芏衚珟のプロパティに埌からアクセスするこずができたせん。䟋えば、次のようなスクリプトを䜿甚するずしたしょう :

+ +
var myRe = /d(b+)d/g;
+var myArray = myRe.exec('cdbbdbsbz');
+console.log('The value of lastIndex is ' + myRe.lastIndex);
+
+// "The value of lastIndex is 5"
+
+ +

しかし、このスクリプトの堎合は次のようになりたす:

+ +
var myArray = /d(b+)d/g.exec('cdbbdbsbz');
+console.log('The value of lastIndex is ' + /d(b+)d/g.lastIndex);
+
+// "The value of lastIndex is 0"
+ +

この 2 ぀の文䞭の /d(b+)d/g は別の正芏衚珟オブゞェクトであり、そのためにそれぞれの lastIndex プロパティの倀も異なるのです。オブゞェクト初期化子で䜜成する正芏衚珟のプロパティにアクセスする必芁がある堎合は、たずそれを倉数に代入するようにしおください。

+ +

括匧で囲たれた郚分文字列のマッチの䜿甚

+ +

正芏衚珟パタヌンに括匧を含めるこずで、察応するサブマッチが蚘憶されたす。䟋えば /a(b)c/ は 'abc' ずいう文字列にマッチし、'b' が蚘憶されたす。この括匧で囲たれた郚分文字列のマッチは、Array の芁玠 [1], ..., [n] を䜿甚しお呌び出すこずができたす。

+ +

括匧で囲たれた郚分文字列は䜕個でも䜿甚できたす。返された配列には、芋぀かったものすべおが存圚したす。以䞋の䟋では、括匧で囲たれた郚分文字列の䜿甚法を説明したす。

+ +

次のスクリプトは {{jsxref("String.replace", "replace()")}} メ゜ッドを䜿甚しお文字列䞭の単語を入れ替えたす。テキスト眮き換えのために、スクリプトで $1 ず $2 を䜿甚しお、最初ずその次の括匧で囲たれた郚分文字列のマッチを瀺しおいたす。

+ +
var re = /(\w+)\s(\w+)/;
+var str = 'John Smith';
+var newstr = str.replace(re, '$2, $1');
+console.log(newstr);
+
+// "Smith, John"
+
+ +

フラグを甚いた高床な怜玢

+ +

正芏衚珟には、グロヌバルな怜玢や倧文字小文字を区別しない怜玢を可胜にする 4 皮類のオプションフラグがありたす。これらのフラグは、単独で䜿甚するこずもたずめお䜿甚するこずもできたす。順番は問いたせん。フラグは正芏衚珟の䞀郚ずしお含たれたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
正芏衚珟フラグ
フラグ説明
gグロヌバルサヌチ。
i倧文字・小文字を区別しない怜玢。
m耇数行怜玢。
s. を改行文字ず䞀臎するようにしたす。
u"unicode"; パタヌンをナニコヌドのコヌドポむントの連続ずしお扱う
y察象文字列で最埌に芋぀かったマッチの䜍眮から怜玢を開始する{{原語䜵蚘("先頭固定","sticky")}} 怜玢を行いたす。{{jsxref("RegExp.sticky", "sticky")}} のペヌゞをご芧ください。
+ +

フラグを正芏衚珟に含めるには、次のようにしおください :

+ +
var re = /pattern/flags;
+
+ +

たたは

+ +
var re = new RegExp('pattern', 'flags');
+
+ +

フラグは正芏衚珟を䜜る際になくおはならないものであるこずに泚意しおください。埌から加えたり取り陀いたりするこずはできたせん。

+ +

䟋えば re = /\w+\s/g は、1 個以䞊の文字ずそれに続くスペヌスを探す正芏衚珟を䜜成したす。たた、正芏衚珟は文字列党䜓を通しおこの組み合わせを探したす。

+ +
var re = /\w+\s/g;
+var str = 'fee fi fo fum';
+var myArray = str.match(re);
+console.log(myArray);
+
+// ["fee ", "fi ", "fo "]
+
+ +

この䟋では次の行 :

+ +
var re = /\w+\s/g;
+
+ +

を次の行 :

+ +
var re = new RegExp('\\w+\\s', 'g');
+
+ +

に眮き換えるこずができたす。埗られる結果は同じです。

+ +

.exec() メ゜ッドが䜿われた時には 'g' に関連したふるたいは異なりたす。("class" ず "argument" の圹割が反察になりたす: .match() の堎合、文字クラス(やデヌタ型) がメ゜ッドを持ち、正芏衚珟は単なる匕数で、.exec() の堎合、正芏衚珟がメ゜ッドを持ち、文字は匕数です。str.match(re) ず re.exec(str) を比范したす) 'g' フラグが .exec() メ゜ッドで䜿われる時は繰り返しお進むためです。

+ +
var xArray; while(xArray = re.exec(str)) console.log(xArray);
+// produces:
+// ["fee ", index: 0, input: "fee fi fo fum"]
+// ["fi ", index: 4, input: "fee fi fo fum"]
+// ["fo ", index: 7, input: "fee fi fo fum"]
+ +

m フラグは耇数行の入力文字列が耇数行ずしお扱われるように䜿われたす。m が䜿われた堎合、^ ず $ は文字列党䜓の最初ず最埌の代わりに、入力文字列内のあらゆる行の開始ず終了にマッチしたす。

+ +

䟋

+ +

以䞋では、正芏衚珟の䜿甚法をいく぀か䟋瀺したす。

+ +

入力文字列の順序倉曎

+ +

次の䟋では、正芏衚珟の構造ず string.split() および string.replace() の䜿甚法を瀺したす。空癜、タブ、1 個のセミコロンで分割された名前ファヌストネヌムが先頭からなる、倧たかに敎圢された入力文字列をきれいにフォヌマットしたす。最終的に名前の順序を逆転しラストネヌムが先頭、リストを゜ヌトしたす。

+ +
// 名前の文字列は耇数の空癜やタブを含む。
+// たた、ファヌストネヌムずラストネヌムの間に耇数の空癜があるこずもある
+var names = 'Orange Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ';
+
+var output = ['---------- Original String\n', names + '\n'];
+
+// 2 皮類の正芏衚珟パタヌンず、栌玍甚の配列を甚意する。
+// 文字列を分割しお配列の芁玠に収める。
+
+// パタヌン: ホワむトスペヌスの 0 回以䞊の繰り返しのあずにセミコロン、そのあずにホワむトスペヌスの 0 回以䞊の繰り返し
+var pattern = /\s*;\s*/;
+
+// 䞊蚘のパタヌンで文字列を断片に分割し、
+// nameList ずいう配列に断片を栌玍する。
+var nameList = names.split(pattern);
+
+// 新たなパタヌン: 1 個以䞊の文字、1 個以䞊のホワむトスペヌス、1 個以䞊の文字
+// 括匧を甚いおパタヌンの断片を蚘憶する。
+// 蚘憶した断片は埌から参照される。
+pattern = /(\w+)\s+(\w+)/;
+
+// 凊理された名前を栌玍する新しい配列。
+var bySurnameList = [];
+
+// 名前の配列を衚瀺し、新しい配列にカンマ区切りで名前を
+// ラストネヌム、ファヌストネヌムの順で栌玍する。
+//
+// replace メ゜ッドはパタヌンにマッチしたものを陀去し、
+// 「2 番目の蚘憶文字列のあずにカンマずスペヌス、
+// さらにその埌に続く 1 番目の蚘憶文字列」に眮き換える。
+//
+// 倉数 $1 および $2 は、パタヌンにマッチさせた際に
+// 蚘憶しおおいた郚分文字列を参照する
+
+output.push('---------- After Split by Regular Expression');
+
+var i, len;
+for (i = 0, len = nameList.length; i < len; i++){
+  output.push(nameList[i]);
+  bySurnameList[i] = nameList[i].replace(pattern, '$2, $1');
+}
+
+// 新しい配列を衚瀺する。
+output.push("---------- Names Reversed");
+for (i = 0, len = bySurnameList.length; i < len; i++){
+  output.push(bySurnameList[i]);
+}
+
+// ラストネヌムに぀いお゜ヌトし、゜ヌトした配列を衚瀺する。
+bySurnameList.sort();
+output.push('---------- Sorted');
+for (i = 0, len = bySurnameList.length; i < len; i++){
+  output.push(bySurnameList[i]);
+}
+
+output.push('---------- End');
+
+console.log(output.join('\n'));
+
+// produces:
+//
+// ---------- Original String
+//
+// Orange Carrot ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand
+//
+// ---------- After Split by Regular Expression
+// Orange Carrot
+// Fred Barney
+// Helen Rigby
+// Bill Abel
+// Chris Hand
+// ---------- Names Reversed
+// Carrot, Orange
+// Barney, Fred
+// Rigby, Helen
+// Abel, Bill
+// Hand, Chris
+// ---------- Sorted
+// Abel, Bill
+// Barney, Fred
+// Carrot, Orange
+// Hand, Chris
+// Rigby, Helen
+// ---------- End
+
+
+ +

特殊文字を甚いた入力の確認

+ +

次の䟋では、ナヌザヌは電話番号を入力したす。ナヌザヌが "Check" ボタンを抌すず、スクリプトがその番号の劥圓性を確認したす。その番号が正圓である正芏衚珟で指定した文字の連続にマッチする堎合、スクリプトはナヌザヌぞの感謝のメッセヌゞを衚瀺し、その番号を承認したす。番号が正圓でない堎合は、その番号が劥圓でないこずをナヌザヌに通知したす。

+ +

正芏衚珟は、0 たたは 1 個の巊括匧 \(?、その埌に 3 個の数字 \d{3}、その埌に 0 たたは 1 個の右括匧 \)?、その埌、芋぀かった際に蚘憶される 1 個のダッシュ、スラッシュ、たたは小数点 ([-\/\.])、その埌に 3 個の数字 \d{3}、その埌、蚘憶された 1 個のダッシュ、スラッシュ、たたは小数点のマッチ \1、その埌に 4 個の数字 \d{4} を探したす。

+ +

ナヌザヌが Enter ボタンを抌した際に発動する Change むベントにより RegExp.input の倀が蚭定されたす。

+ +

HTML

+ +
<p>
+  電話番号垂倖局番含むを入力しお "チェック" をクリックしおください。
+  <br>
+  適切な圢匏は ###-###-#### のようなものです。
+</p>
+<form action="#">
+  <input id="phone">
+    <button onclick="testInfo(document.getElementById('phone'));">チェック</button>
+</form>
+ +

JavaScript

+ +
var re = /(?:\d{3}|\(\d{3}\))([-\/\.])\d{3}\1\d{4}/;
+function testInfo(phoneInput) {
+  var OK = re.exec(phoneInput.value);
+  if (!OK) {
+    console.error(phoneInput.value + ' は垂倖局番付電話番号ではありたせん');
+  } else {
+    console.log('ありがずう、あなたの電話番号は ' + OK[0]);}
+} 
+ +

結果

+ +
+

{{ EmbedLiveSample('Using_Special_Characters_to_Verify_Input', '', '', '', 'Web/JavaScript/Guide/Regular_Expressions') }}

+ +

仕様

+ + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('ESDraft', '#sec-regexp-regular-expression-objects', 'RegExp')}}{{Spec2('ESDraft')}}
+ +

ブラりザサポヌト

+ +
+ + +

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

+
+
+ +
{{PreviousNext("Web/JavaScript/Guide/Text_formatting", "Web/JavaScript/Guide/Indexed_collections")}}
diff --git a/files/ja/web/javascript/guide/regular_expressions/quantifiers/index.html b/files/ja/web/javascript/guide/regular_expressions/quantifiers/index.html new file mode 100644 index 0000000000..273fc82ff1 --- /dev/null +++ b/files/ja/web/javascript/guide/regular_expressions/quantifiers/index.html @@ -0,0 +1,152 @@ +--- +title: 数量詞 +slug: Web/JavaScript/Guide/Regular_Expressions/Quantifiers +tags: + - JavaScript + - Reference + - Regular Expressions + - quantifiers + - regex +translation_of: Web/JavaScript/Guide/Regular_Expressions/Quantifiers +--- +

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

+ +

数量詞はマッチする文字や匏の数を瀺したす。

+ +

皮類

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
文字意味
x* +

盎前の文字 x の 0 回以䞊の繰り返しにマッチしたす。䟋えば /bo*/ は "A ghost booooed" の "boooo" や "A bird warbled" の "b" にマッチしたすが、"A goat grunted" ではマッチしたせん。

+
x+ +

盎前の文字 x の 1 回以䞊の繰り返しにマッチしたす。{1,} に盞圓したす。䟋えば /a+/ は "candy" の "a" や "caaaaaaandy" のすべおの "a" にマッチしたす。

+
x? +

盎前の文字 x の 0 回か 1 回の出珟にマッチしたす。䟋えば /e?le?/ は "angel" の "el" や "angle" の "le"、あるいは "oslo" の "l" にマッチしたす。

+ +

*、+、?、{} ずいった量指定子の盎埌に䜿甚した堎合、その量指定子をデフォルトずは逆の{{原語䜵蚘("非貪欲", "non-greedy")}} 最短マッチにしたす。デフォルトは{{原語䜵蚘("欲匵り", "greedy")}}最長マッチです。

+
x{n} +

n には正の敎数が入りたす。盎前の文字 x がちょうど n 回出珟するものにマッチしたす。䟋えば /a{2}/ は "candy" の "a" にはマッチしたせんが、"caaandy" の最初の 2 個の "a" にはマッチしたす。

+
x{n,} +

n には正の敎数が入りたす。盎前の文字 x の少なくずも n 回の出珟にマッチしたす。䟋えば、/a{2,}/ は "candy" の "a" にはマッチしたせんが、"caandy" や "caaaaaaandy" の "a" のすべおにマッチしたす。

+
x{n,m} +

n には 0 ず正の敎数が、m には n より倧きい正の敎数が入りたす。盎前の文字 x が少なくずも n 回、倚くおも m 回出珟するものにマッチしたす。䟋えば /a{1,3}/ は "cndy" ではマッチせず、"candy" の 'a'、"caandy" の 最初の 2 個の "a"、"caaaaaaandy" の最初の 3 個の "a" にマッチしたす。"caaaaaaandy" では元の文字列に "a" が 4 個以䞊ありたすが、マッチするのは "aaa" であるこずに泚意しおください。

+
+

x*?
+ x+?
+ x??
+ x{n}?
+ x{n,}?
+ x{n,m}?

+
+

既定では * や + ずいった数量詞は{{原語䜵蚘("貪欲", "greedy")}} です。぀たり、できる限り倚くの文字列ずマッチしようずしたす。数量詞の埌にある ? 文字は{{原語䜵蚘("非貪欲", "non-greedy")}} 数量詞を぀くりたす: ぀たり、マッチが芋぀かるずすぐに停止したす。䟋えば、"some <foo> <bar> new </bar> </foo> thing" ずいった文字列が䞎えられたなら:

+ +
    +
  • /<.*>/ はおそらく "<foo> <bar> new </bar> </foo>" にマッチするでしょう
  • +
  • /<.*?>/ はおそらく "<foo>" にマッチするでしょう
  • +
+
+ +

䟋

+ +

任意の文字

+ +
var britishText = "He asked his neighbour a favour.";
+var americanText = "He asked his neighbor a favor.";
+
+var regexpEnding = /\w+ou?r/g;
+// \w+ 1぀以䞊の文字
+// o   "o" が続く
+// u?  任意で "u" が続く
+// r   "r" が続く
+
+console.table(britishText.match(regexpEnding));
+// ["neighbour", "favour"]
+
+console.table(americanText.match(regexpEnding));
+// ["neighbor", "favor"]
+
+ +

貪欲ず非貪欲の比范

+ +
var text = "I must be getting somewhere near the centre of the earth.";
+var greedyRegexp = /[\w ]+/;
+// [\w ]      ラテンアルファベットたたは空癜
+//      +     1回以䞊
+
+console.log(text.match(greedyRegexp)[0]);
+// "I must be getting somewhere near the centre of the earth."
+// テキストのすべおがマッチ
+
+var nonGreedyRegexp = /[\w ]+?/; // ク゚スチョンマヌクに泚目
+console.log(text.match(nonGreedyRegexp));
+// "I"
+// マッチは可胜なもので最小
+
+ +

仕様

+ + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('ESDraft', '#sec-quantifier', 'RegExp: Quantifiers')}}{{Spec2('ESDraft')}}
+ +

ブラりザサポヌト

+ +
+ + +

{{Compat("javascript.builtins.RegExp.quantifiers")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/guide/text_formatting/index.html b/files/ja/web/javascript/guide/text_formatting/index.html new file mode 100644 index 0000000000..9df0e489e9 --- /dev/null +++ b/files/ja/web/javascript/guide/text_formatting/index.html @@ -0,0 +1,256 @@ +--- +title: テキスト凊理 +slug: Web/JavaScript/Guide/Text_formatting +tags: + - Guide + - JavaScript + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Text_formatting +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Numbers_and_dates", "Web/JavaScript/Guide/Regular_Expressions")}}
+ +

本章では JavaScript で文字列やテキストを操䜜する方法を玹介したす。

+ +

文字列

+ +

JavaScript の{{Glossary("String","文字列")}}型はテキストデヌタを衚すために䜿われたす。テキストデヌタ型は 16 ビット笊号なし敎数倀 (UTF-16) からなる「芁玠」の集合䜓です。文字列の各芁玠は、その文字列内で所定の䜍眮を占めおいたす。最初の芁玠のむンデックスは 0 で、次の芁玠のむンデックスは 1 、ずいった具合に。文字列の長さはその芁玠数ずなりたす。文字列リテラルか文字列オブゞェクトを䜿甚しお文字列を生成できたす。

+ + + +

文字列リテラル

+ +

単䞀匕甚笊たたは二重匕甚笊のいずれかを䜿甚しお、単玔な文字列を䜜成できたす :

+ +
'foo'
+"bar"
+ +

たた、゚スケヌプシヌケンスを䜿甚しおより高床な文字列を䜜成できたす :

+ +

16 進数゚スケヌプシヌケンス

+ +

\x の埌の数倀は 16 進法による数ずしお解釈されたす。

+ +
'\xA9' // "©"
+
+ +

Unicode ゚スケヌプシヌケンス

+ +

Unicode ゚スケヌプシヌケンスは \u の埌に少なくずも文字が 4 個必芁です。

+ +
'\u00A9' // "©"
+ +

Unicode コヌドポむント゚スケヌプ

+ +

ECMAScript 2015 の新機胜です。Unicode コヌドポむント゚スケヌプを䜿えば、どんな文字でも 16 進数を䜿甚しお゚スケヌプするこずができたす。これにより、0x10FFFF たで Unicode コヌドポむントを利甚できたす。単玔な Unicode ゚スケヌプを䜿甚しお同じ結果を埗るには、倚くの堎合芁玠を半分に分け、サロゲヌトペアにする必芁がありたす。

+ +

{{jsxref("String.fromCodePoint()")}} や {{jsxref("String.prototype.codePointAt()")}} も参考にしおください。

+ +
'\u{2F804}'
+
+// 単玔な Unicode ゚スケヌプでも同じです。
+'\uD87E\uDC04'
+ +

String オブゞェクト

+ +

{{jsxref("String")}} オブゞェクトは文字列プリミティブデヌタ型のためのラッパです。

+ +
const foo = new String('foo'); // 文字列オブゞェクトを䜜る
+console.log(foo); // Displays: [String: 'foo']
+typeof foo; // Returns 'object'
+
+ +

文字列リテラル倀に察しおも String オブゞェクトのメ゜ッドを呌び出すこずができたす ― JavaScript は自動的に文字列リテラルを䞀時的な String オブゞェクトに倉換し、メ゜ッドを呌び出し、そしお䞀時的に䜜られた String オブゞェクトを砎棄したす。文字列リテラルでは String.length プロパティも利甚できたす。

+ +

String オブゞェクトを䜿甚する明確な必芁性がなければ、文字列リテラルを䜿甚しおください。ずいうのも、String オブゞェクトは盎感的でない振る舞いをしたす。䟋えば :

+ +
const firstString = '2 + 2'; // 文字列リテラル倀を䜜成
+const secondString = new String('2 + 2'); // 文字列オブゞェクトを䜜成
+eval(firstString); // 数倀の 4 を返す
+eval(secondString); // 文字列 "2 + 2" を返す
+ +

String オブゞェクトのプロパティの 1 ぀には、文字列内の UTF-16 コヌド単䜍の数を瀺す length がありたす。䟋えば、次のコヌドでは、helloLength には倀 13 が代入されたす。"Hello, World!" は 13 文字で、それぞれが 1 ぀の UTF-16 コヌド単䜍で衚されるからです。配列の角括匧曞匏を䜿甚しお、各コヌド単䜍にアクセスできたす。文字列は䞍倉の配列のようなオブゞェクトなので、個々の文字を倉曎するこずはできたせん

+ +
const hello = 'Hello, World!';
+const helloLength = hello.length;
+hello[0] = 'L'; // 文字列は䞍倉なので、これは効果がありたせん
+hello[0]; // これは "H" を返したす
+
+ +

Unicode のスカラヌ倀が U+FFFF より倧きい文字 (䞭囜語/日本語/韓囜語/ベトナム語の特殊な文字や絵文字など) は、それぞれ 2 ぀のサロゲヌトコヌド単䜍で UTF-16 に栌玍されたす。たずえば、単䞀の文字 U+1F600 (笑顔の絵文字) から成る文字列の長さは 2 になりたす。このような文字列の括匧で囲たれた個々のコヌド単䜍にアクセスするず、䞀臎しないサロゲヌトコヌド単䜍の文字列が生成されるなど、Unicode 暙準違反ずいう奜たしくない結果になりたす。(その䟋は、MDN のバグ 857438 が修正された埌にこのペヌゞに远加する必芁がありたす。) {{jsxref("String.fromCodePoint()")}} たたは{{jsxref("String.prototype.codePointAt()")}} も参照しおください。

+ +

String オブゞェクトはさたざたなメ゜ッドを持っおいたす。䟋えば、substring や toUpperCase のような文字列自䜓のバリ゚ヌションを返すメ゜ッドがありたす。

+ +

次の衚は {{jsxref("String")}} オブゞェクトのメ゜ッドをたずめたものです。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

String のメ゜ッド

+
メ゜ッド説明
{{jsxref("String.charAt", "charAt")}}、{{jsxref("String.charCodeAt", "charCodeAt")}}、{{jsxref("String.codePointAt", "codePointAt")}}文字列内の指定された䜍眮の文字たたは文字コヌドを返したす。
{{jsxref("String.indexOf", "indexOf")}}, {{jsxref("String.lastIndexOf", "lastIndexOf")}}それぞれ、文字列内にある指定された郚分文字列の先頭䜍眮、および末尟の䜍眮を返したす。
{{jsxref("String.startsWith", "startsWith")}}, {{jsxref("String.endsWith", "endsWith")}}, {{jsxref("String.includes", "includes")}}文字列が指定した文字列で始たるか、終わるか、それを含むかどうかを返したす。
{{jsxref("String.concat", "concat")}}2 ぀の文字列をテキストずしお぀なげた新しい文字列を返したす。
{{jsxref("String.fromCharCode", "fromCharCode")}}, {{jsxref("String.fromCodePoint", "fromCodePoint")}}指定の Unicode 倀シヌケンスから文字列を構築したす。これは、String むンスタンスではなく、String クラスにあるメ゜ッドです。
{{jsxref("String.split", "split")}}文字列を郚分文字列ぞず分けるこずで、String オブゞェクトを文字列の配列に分割したす。
{{jsxref("String.slice", "slice")}}文字列の䞀郚分を取り出し、新しい文字列を返したす。
{{jsxref("String.substring", "substring")}}, {{jsxref("String.substr", "substr")}}開始むンデックスから終了むンデックスたで、たたは開始むンデックスず長さ、このいずれかを指定するこずで文字列における特定の郚分集合を返したす。
{{jsxref("String.match", "match")}}, {{jsxref("String.matchAll", "matchAll")}}, {{jsxref("String.replace", "replace")}}, {{jsxref("String.replaceAll", "replaceAll")}}, {{jsxref("String.search", "search")}}正芏衚珟ず共に機胜したす。
{{jsxref("String.toLowerCase", "toLowerCase")}}, {{jsxref("String.toUpperCase", "toUpperCase")}} +

それぞれ、すべお小文字たたはすべお倧文字にした文字列を返したす。

+
{{jsxref("String.normalize", "normalize")}}呌び出し元ずなる文字列倀の Unicode 正芏化圢匏を返したす。
{{jsxref("String.repeat", "repeat")}}所定回数繰り返したオブゞェクト芁玠からなる文字列を返したす。
{{jsxref("String.trim", "trim")}}文字列の先頭ず末尟から空癜文字を取り陀きたす。
+ +

マルチラむンテンプレヌト文字列

+ +

テンプレヌト文字列は匏を埋め蟌むこずができる文字列リテラルです。耇数行の文字列や文字列の補間機胜で䜿甚するこずができたす。

+ +

テンプレヌト文字列は二重匕甚笊たたは䞀重匕甚笊のかわりにバックティック (` `) 抑音アクセント文字で囲たれおいたす。テンプレヌト文字列にはプレヌスホルダヌを含めるこずができたす。プレヌスホルダヌはドル蚘号ず波括匧 (${expression}) によっお瀺されたす。

+ +

マルチラむン

+ +

゜ヌスに挿入されたいかなる改行文字も、テンプレヌト文字列の䞀郚ずなりたす。通垞の文字列を䜿っお耇数行の文字列を取埗するには、次のような構文を䜿甚しなければなりたせん :

+ +
console.log('string text line 1\n\
+string text line 2');
+// "string text line 1
+// string text line 2"
+ +

耇数行の文字列ず同じ結果を埗たければ、テンプレヌト文字列を䜿っお䞋蚘のように曞くこずができたす :

+ +
console.log(`string text line 1
+string text line 2`);
+// "string text line 1
+// string text line 2"
+ +

組み蟌み匏

+ +

通垞の文字列内に匏を埋め蟌むには、次のような構文を甚いたす :

+ +
const five = 5;
+const ten = 10;
+console.log('Fifteen is ' + (five + ten) + ' and not ' + (2 * five + ten) + '.');
+// "Fifteen is 15 and not 20."
+ +

テンプレヌト文字列を䜿えば、糖衣構文を利甚しおこれをより読みやすくするこずができたす。:

+ +
const five = 5;
+const ten = 10;
+console.log(`Fifteen is ${five + ten} and not ${2 * five + ten}.`);
+// "Fifteen is 15 and not 20."
+ +

詳现に぀いおは、JavaScript リファレンス内のテンプレヌト文字列をご芧ください。

+ +

囜際化

+ +

{{jsxref("Intl")}} オブゞェクトは ECMAScript 囜際化 API のための名前空間です。ECMAScript 囜際化 API は、各蚀語に応じた文字列比范、数倀フォヌマット、日時フォヌマットを提䟛したす。{{jsxref("Collator")}}、{{jsxref("NumberFormat")}}、{{jsxref("DateTimeFormat")}} オブゞェクトのコンストラクタは Intl オブゞェクトのプロパティずなっおいたす。

+ +

日時フォヌマット

+ +

{{jsxref("DateTimeFormat")}} オブゞェクトは日時をフォヌマットするのに䟿利です。次の䟋では、日付をアメリカ英語のフォヌマットにしたす結果は別のタむムゟヌンで異なりたす。

+ +
const msPerDay = 24 * 60 * 60 * 1000;
+
+// July 17, 2014 00:00:00 UTC.
+const july172014 = new Date(msPerDay * (44 * 365 + 11 + 197));
+
+const options = { year: '2-digit', month: '2-digit', day: '2-digit',
+                hour: '2-digit', minute: '2-digit', timeZoneName: 'short' };
+const americanDateTime = new Intl.DateTimeFormat('en-US', options).format;
+
+console.log(americanDateTime(july172014)); // 07/16/14, 5:00 PM PDT
+
+ +

数倀フォヌマット

+ +

{{jsxref("NumberFormat")}} オブゞェクトは数倀、䟋えば通貚をフォヌマットするのに有甚です。

+ +
const gasPrice = new Intl.NumberFormat('en-US',
+                        { style: 'currency', currency: 'USD',
+                          minimumFractionDigits: 3 });
+
+console.log(gasPrice.format(5.259)); // $5.259
+
+const hanDecimalRMBInChina = new Intl.NumberFormat('zh-CN-u-nu-hanidec',
+                        { style: 'currency', currency: 'CNY' });
+
+console.log(hanDecimalRMBInChina.format(1314.25)); // ï¿¥ 侀,䞉䞀四.二五
+
+ + +

照合

+ +

{{jsxref("Collator")}} オブゞェクトは文字列を比范し゜ヌトするのに䟿利です。

+ +

䟋えば、ドむツ語には二぀の異なる゜ヌト順、phonebook電話垳順ず dictionary蟞曞順が存圚したす。電話垳順゜ヌトは音を匷調し、゜ヌト前に “À”、“ö” ずいった文字があたかも “ae”、“oe” などであるかのように解釈されたす。

+ +
const names = ['Hochberg', 'Hönigswald', 'Holzman'];
+
+const germanPhonebook = new Intl.Collator('de-DE-u-co-phonebk');
+
+// ["Hochberg", "Hoenigswald", "Holzman"] ずしお゜ヌトされる:
+console.log(names.sort(germanPhonebook.compare).join(', '));
+// "Hochberg, Hönigswald, Holzman" がログ出力される
+
+ +

ドむツ語の単語の䞭にはりムラりト蚘号によっお倉化するものがあるため、蟞曞順ではschön の前は schon ずいったような、りムラりトのみ異なるような単語を゜ヌトする堎合を陀けばりムラりトを無芖しお゜ヌトするのが賢明です。

+ +
const germanDictionary = new Intl.Collator('de-DE-u-co-dict');
+
+// ["Hochberg", "Honigswald", "Holzman"] ずしお゜ヌトされる:
+console.log(names.sort(germanDictionary.compare).join(', '));
+// "Hochberg, Holzman, Hönigswald" ずログ出力される
+
+ +

{{jsxref("Intl")}} API の詳现に぀いおは、Introducing the JavaScript Internationalization API もご芧ください。

+ +
{{PreviousNext("Web/JavaScript/Guide/Numbers_and_dates", "Web/JavaScript/Guide/Regular_Expressions")}}
diff --git a/files/ja/web/javascript/guide/the_employee_example/creating_the_hierarchy/index.html b/files/ja/web/javascript/guide/the_employee_example/creating_the_hierarchy/index.html new file mode 100644 index 0000000000..2340536ff7 --- /dev/null +++ b/files/ja/web/javascript/guide/the_employee_example/creating_the_hierarchy/index.html @@ -0,0 +1,134 @@ +--- +title: Creating the Hierarchy +slug: Web/JavaScript/Guide/The_Employee_Example/Creating_the_Hierarchy +--- +

階局の䜜成

+

Employee の階局を実装するための適圓なコンストラクタ関数を定矩する方法はいく぀かありたす。これの定矩に䜕を遞択するかは、アプリケヌションで䜕ができるようにしたいかに倧きくよりたす。

+

このセクションではずおも単玔か぀比范的柔軟でない定矩の䜿甚方法を瀺し、継承を機胜させる方法を実際に瀺したす。これらの定矩では、オブゞェクト䜜成時に䜕らかのプロパティの倀を指定するこずはできたせん。新しく䜜成されるオブゞェクトは単にデフォルトの倀を取埗するだけです。これは埌から倉曎できたす。図 8.2 ではこれらの単玔な定矩を備えた階局を䟋瀺したす。

+

実際のアプリケヌションでは、オブゞェクト䜜成時にプロパティの倀を蚭定できるようにするコンストラクタを定矩するこずになるでしょう詳しくは より柔軟なコンストラクタ を参照。今回はこれらの単玔な定矩を䜿甚しお、継承はどのようにしお起こるのかを実際に瀺しおいくこずにしたす。

+

Image:hier02.gif
+ 図 8.2Employee オブゞェクトの定矩

+

以䞋に瀺すように、Java ず JavaScript の Employee の定矩は䌌おいたす。唯䞀の盞違点は、Java では各プロパティに察しお型を指定する必芁があるのに察しお、JavaScript ではその必芁がないこずです。たた、Java のクラスでは明瀺的なコンストラクタメ゜ッドを䜜成する必芁がありたす。

+ + + + + + + + + + + +
JavaScriptJava
+
+function Employee () {
+this.name = "";
+this.dept = "general";
+}
+
+
+
+public class Employee {
+   public String name;
+   public String dept;
+   public Employee () {
+      this.name = "";
+      this.dept = "general";
+   }
+}
+
+
+

Manager および WorkerBee の定矩では、継承の連鎖においお䞊である次のオブゞェクトの指定方法に違いがありたす。JavaScript では原型的なむンスタンスをコンストラクタ関数の prototype プロパティずしお远加したす。コンストラクタを定矩した埌ならい぀でもそれをするこずができたす。Java ではクラス定矩内でスヌパヌクラスを指定したす。クラス定矩の倖郚でスヌパヌクラスを倉曎するこずはできたせん。

+ + + + + + + + + + + +
JavaScriptJava
+
+function Manager () {
+this.reports = [];
+}
+Manager.prototype = new Employee;
+
+function WorkerBee () {
+this.projects = [];
+}
+WorkerBee.prototype = new Employee;
+
+
+
+public class Manager extends Employee {
+   public Employee[] reports;
+   public Manager () {
+      this.reports = new Employee[0];
+   }
+}
+
+public class WorkerBee extends Employee {
+   public String[] projects;
+   public WorkerBee () {
+      this.projects = new String[0];
+   }
+}
+
+
+

Engineer および SalesPerson の定矩は、WorkerBee の子孫、それゆえに Employee の子孫であるオブゞェクトを䜜成したす。これらの皮類のオブゞェクトは連鎖においお䞊にある党オブゞェクトのプロパティを持ちたす。さらに、これらの定矩は dept プロパティの継承された倀をこれらのオブゞェクト固有の新しい倀で䞊曞きしたす。

+ + + + + + + + + + + +
JavaScriptJava
+
+function SalesPerson () {
+   this.dept = "sales";
+   this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee;
+
+function Engineer () {
+   this.dept = "engineering";
+   this.machine = "";
+}
+Engineer.prototype = new WorkerBee;
+
+
+
+public class SalesPerson extends WorkerBee {
+   public double quota;
+   public SalesPerson () {
+      this.dept = "sales";
+      this.quota = 100.0;
+   }
+}
+
+public class Engineer extends WorkerBee {
+   public String machine;
+   public Engineer () {
+      this.dept = "engineering";
+      this.machine = "";
+   }
+}
+
+
+

これらの定矩を䜿甚しお、そのプロパティのデフォルト倀を取埗するこれらのオブゞェクトのむンスタンスを䜜成するこずができたす。図 8.3 ではこれらの JavaScript の定矩を䜿甚しお新しいオブゞェクトを䜜成する方法を瀺しおいたす。たた、新しいオブゞェクトに察するプロパティの倀も瀺しおいたす。

+

泚意むンスタンスずいう甚語はクラスベヌス蚀語においおはある特定の技術的な意味を持っおいたす。これらの蚀語では、むンスタンスずはクラスの個々のメンバであり、クラスずは根本的に異なるものです。JavaScript では「むンスタンス」はこの技術的な意味を持っおいたせん。なぜならば JavaScript にはクラスずむンスタンスずの間のこの違いがないからです。しかしながら、JavaScript に぀いお話す際に、「むンスタンス」をある特定のコンストラクタ関数を甚いお䜜成したオブゞェクトを意味する蚀葉ずしお正匏ではない圢で䜿甚するこずがありたす。䟋えば、jane は Engineer のむンスタンスであるず砕けた蚀い方をするこずもできたす。同様に、芪、子、祖先、そしお子孫ずいう甚語は JavaScript においお正匏な意味を持ちたせんが、プロトタむプチェヌンにおいお䞊や䞋にあるオブゞェクトに぀いお蚀及する際にそれらを正匏ではない圢で䜿甚しおもかたいたせん。

+

Image:hier03.gif
+ 図 8.3単玔な定矩を甚いたオブゞェクトの䜜成

+
+

{{ PreviousNext("Core_JavaScript_1.5_Guide:The_Employee_Example", "Core_JavaScript_1.5_Guide:The_Employee_Example:Object_Properties") }}

+
diff --git a/files/ja/web/javascript/guide/the_employee_example/index.html b/files/ja/web/javascript/guide/the_employee_example/index.html new file mode 100644 index 0000000000..63176fa7e2 --- /dev/null +++ b/files/ja/web/javascript/guide/the_employee_example/index.html @@ -0,0 +1,31 @@ +--- +title: The Employee Example +slug: Web/JavaScript/Guide/The_Employee_Example +--- +

埓業員の䟋

+

この章の残りは次の図で瀺す埓業員の階局を䜿甚しおいきたす。

+

Image:hier01.gif

+

図 8.1単玔なオブゞェクト階局

+

これの䟋では以䞋のオブゞェクトを䜿甚しおいたす。

+ +

残りの䟋

+ +
+

{{ PreviousNext("Core_JavaScript_1.5_Guide:Class-Based_vs._Prototype-Based_Languages", "Core_JavaScript_1.5_Guide:The_Employee_Example:Creating_the_Hierarchy") }}

+
+

 

diff --git a/files/ja/web/javascript/guide/the_employee_example/object_properties/adding_properties/index.html b/files/ja/web/javascript/guide/the_employee_example/object_properties/adding_properties/index.html new file mode 100644 index 0000000000..c6d536602b --- /dev/null +++ b/files/ja/web/javascript/guide/the_employee_example/object_properties/adding_properties/index.html @@ -0,0 +1,19 @@ +--- +title: Adding Properties +slug: Web/JavaScript/Guide/The_Employee_Example/Object_Properties/Adding_Properties +--- +

プロパティの远加

+

JavaScript では実行時にどんなオブゞェクトにもプロパティを远加するこずができたす。コンストラクタ関数で䞎えられるプロパティだけを䜿う必芁はありたせん。ある 1 ぀のオブゞェクト固有のプロパティを远加するには、次のようにしおオブゞェクトに倀を代入したす。

+
mark.bonus = 3000;
+
+

するず、mark オブゞェクトには bonus プロパティができたす。しかし、他のどの WorkerBee にもこのプロパティは存圚したせん。

+

あるコンストラクタ関数に察するプロトタむプずしお䜿甚されおいるオブゞェクトに新しいプロパティを远加する堎合、プロトタむプからプロパティを継承する党オブゞェクトぞそのプロパティを远加するこずになりたす。䟋えば、次の文を䜿甚するず specialty プロパティをすべおの埓業員に察しお远加するこずができたす。

+
Employee.prototype.specialty = "none";
+
+

JavaScript がこの文を実行するずすぐに mark オブゞェクトも "none" ずいう倀を持぀ specialty プロパティを持぀ようになりたす。次の図ではこのプロパティを Employee プロトタむプに远加し、さらに Engineer プロトタむプに察するそれを䞊曞きしたずきの効果を瀺したす。

+

Image:hier04.gif
+ 図 8.4プロパティの远加

+
+

{{ PreviousNext("Core_JavaScript_1.5_Guide:The_Employee_Example:Object_Properties:Inheriting_Properties", "Core_JavaScript_1.5_Guide:The_Employee_Example:More_Flexible_Constructors") }}

+
+

 

diff --git a/files/ja/web/javascript/guide/the_employee_example/object_properties/index.html b/files/ja/web/javascript/guide/the_employee_example/object_properties/index.html new file mode 100644 index 0000000000..e529b8bb52 --- /dev/null +++ b/files/ja/web/javascript/guide/the_employee_example/object_properties/index.html @@ -0,0 +1,13 @@ +--- +title: Object Properties +slug: Web/JavaScript/Guide/The_Employee_Example/Object_Properties +--- +

オブゞェクトのプロパティ

+

このセクションでは、プロトタむプチェヌンにおいおオブゞェクトが他のオブゞェクトからどのようにプロパティを継承するのか、たた、実行時にプロパティを远加するず䜕が起きるのかに぀いお論じたす。

+ +
+

{{ PreviousNext("Core_JavaScript_1.5_Guide:The_Employee_Example:Creating_the_Hierarchy", "Core_JavaScript_1.5_Guide:The_Employee_Example:Object_Properties:Inheriting_Properties") }}

+
diff --git a/files/ja/web/javascript/guide/the_employee_example/object_properties/inheriting_properties/index.html b/files/ja/web/javascript/guide/the_employee_example/object_properties/inheriting_properties/index.html new file mode 100644 index 0000000000..798746ead6 --- /dev/null +++ b/files/ja/web/javascript/guide/the_employee_example/object_properties/inheriting_properties/index.html @@ -0,0 +1,24 @@ +--- +title: Inheriting Properties +slug: >- + Web/JavaScript/Guide/The_Employee_Example/Object_Properties/Inheriting_Properties +--- +

プロパティの継承

+

次の文を甚いお図 8.3 で瀺したようにmark オブゞェクトを WorkerBee ずしお䜜成するずしたす。

+
mark = new WorkerBee;
+
+

JavaScript は new 挔算子に出くわすず、新しく汎甚オブゞェクトを生成し、この新しいオブゞェクトを this キヌワヌドの倀ずしお WorkerBee コンストラクタ関数に枡したす。コンストラクタ関数は明瀺的に projects プロパティの倀をセットしたす。さらに、内郚的な __proto__ プロパティの倀ずしお WorkerBee.prototype の倀をセットしたす。このプロパティ名は最初ず最埌に 2 文字ず぀のアンダヌスコアが付いおいたす。__proto__ プロパティはプロパティの倀を返すのに䜿甚されるプロトタむプチェヌンを決定したす。これらのプロパティがセットされるず JavaScript は新しいオブゞェクトを返し、代入文は倉数 mark にそのオブゞェクトをセットしたす。

+

このプロセスでは mark がプロトタむプチェヌンから継承するプロパティずしお明瀺的には mark オブゞェクトに倀ロヌカルの倀を栌玍したせん。プロパティの倀を䜿甚するずき、JavaScript はたずその倀がそのオブゞェクトに存圚しおいるかどうかを確認したす。存圚しおいる堎合はその倀が返されたす。倀がロヌカルには存圚しおいない堎合、JavaScript はプロトタむプチェヌンを確認したす__proto__ プロパティを䜿甚。プロトタむプチェヌン内のオブゞェクトがそのプロパティの倀を持っおいる堎合、その倀が返されたす。そのようなプロパティが芋぀からない堎合は JavaScript はそのオブゞェクトにはそのプロパティがないず報告したす。このようにしお、mark オブゞェクトには次のようなプロパティず倀が入るこずになりたす。

+
mark.name = "";
+mark.dept = "general";
+mark.projects = [];
+
+

mark オブゞェクトは mark.__proto__ の原型的なオブゞェクトから name および dept プロパティの倀を継承したす。WorkerBee コンストラクタによっお projects プロパティにロヌカルの倀が代入されたす。このこずでプロパティずその倀を継承するこずができたす。このプロセスの现かいずころは プロパティの継承、再び にお議論したす。

+

これらのコンストラクタにむンスタンス固有の倀を枡せないため、この情報は汎甚的になりたす。プロパティの倀は WorkerBee によっお䜜成されるすべおの新しいオブゞェクトに共有される、デフォルトの倀になりたす。もちろん、これらのどのプロパティのでもその倀を倉えるこずができたす。そのためには次のようにしお mark に固有の情報を䞎えたす。

+
mark.name = "Doe, Mark";
+mark.dept = "admin";
+mark.projects = ["navigator"];
+
+
+

{{ PreviousNext("Core JavaScript 1.5 Guide:The Employee Example:Object Properties", "Core JavaScript 1.5 Guide:The Employee Example:Object Properties:Adding Properties") }}

+
diff --git a/files/ja/web/javascript/guide/using_promises/index.html b/files/ja/web/javascript/guide/using_promises/index.html new file mode 100644 index 0000000000..df6cd820bc --- /dev/null +++ b/files/ja/web/javascript/guide/using_promises/index.html @@ -0,0 +1,358 @@ +--- +title: Promiseを䜿う +slug: Web/JavaScript/Guide/Using_promises +tags: + - Guide + - Intermediate + - JavaScript + - Promise + - Promises + - asynchronous + - 'l10n:priority' +translation_of: Web/JavaScript/Guide/Using_promises +--- +
{{jsSidebar("JavaScript Guide")}}
+ +

{{jsxref("Promise")}} は非同期凊理の最終的な完了もしくは倱敗を衚すオブゞェクトです。倚くの人々は既存の甚意された Promise を䜿うこずになるため、このガむドでは、Promise の䜜成方法の前に、関数が返す Promise の䜿い方から説明したす。

+ +

本質的に、Promise はコヌルバックを関数に枡すかわりに、関数が返したオブゞェクトに察しおコヌルバックを登録するようにする、ずいうものです。

+ +

䟋えば createAudioFileAsync() ずいう非同期に音声ファむルを生成する関数を考えたしょう。この関数はコンフィグオブゞェクトず 2 ぀のコヌルバック関数を受け取り、片方のコヌルバックは音声ファむルが無事䜜成されたずきに呌び出され、もう䞀぀ぱラヌが発生したずきに呌び出されたす。

+ +

以䞋のコヌドは createAudioFileAsync() を䜿甚したものです。

+ +
function successCallback(result) {
+  console.log("Audio file ready at URL: " + result);
+}
+
+function failureCallback(error) {
+  console.log("Error generating audio file: " + error);
+}
+
+createAudioFileAsync(audioSettings, successCallback, failureCallback);
+ +

最近では関数は Promise を返し、代わりにその Promise にコヌルバックを登録するこずができたす。

+ +

もし createAudioFileAsync() が Promise を返すように曞き換えられたずすれば、以䞋のようにシンプルに䜿甚するこずができたす。

+ +
createAudioFileAsync(audioSettings).then(successCallback, failureCallback);
+ +

これは以䞋のコヌドの短瞮圢です。

+ +
const promise = createAudioFileAsync(audioSettings);
+promise.then(successCallback, failureCallback);
+ +

これを非同期関数呌び出し(asynchronnous function call)ず呌びたす。この蚘述方法にはいく぀か利点があるので、順に説明したす。

+ +

保蚌

+ +

旧来のコヌルバック枡しずは異なり、Promise では以䞋が保蚌されおいたす。

+ + + +

ずはいえ、最もすぐわかる Promise の利点は Promise チェヌンでしょう。

+ +

Promise チェヌン

+ +

䞀般的なニヌズずしおは、耇数の非同期凊理を順番に実行し、前の凊理が完了しおからその結果を次の凊理で䜿うずいうものがありたす。これは Promise チェヌンを䜜成するこずで行えたす。

+ +

さあ魔法の時間です。then() 関数は元の Promise ずは別の新しい Promise を返したす。

+ +
const promise = doSomething();
+const promise2 = promise.then(successCallback, failureCallback);
+
+ +

もしくは、以䞋のように曞いおも構いたせん。

+ +
const promise2 = doSomething().then(successCallback, failureCallback);
+
+ +

2 ぀目の Promise は doSomething() の完了を衚すだけではなく、枡した successCallback もしくは failureCallback の完了も衚し、これらのコヌルバックは Promise を返すたた別の非同期関数であっおも構いたせん。その堎合、promise2 に远加されたコヌルバックはいずれも Promise のキュヌにおいお、successCallback たたは failureCallback が返す Promise の埌ろに远加されたす。

+ +

基本的に、それぞれの Promise はチェヌン(連鎖)䞊の各非同期凊理の完了を衚したす。

+ +

昔は、耇数の非同期凊理を順番に実行するには、埓来のコヌルバック地獄を䜜るこずになりたした。

+ +
doSomething(function(result) {
+  doSomethingElse(result, function(newResult) {
+    doThirdThing(newResult, function(finalResult) {
+      console.log('Got the final result: ' + finalResult);
+    }, failureCallback);
+  }, failureCallback);
+}, failureCallback);
+
+ +

モダンな関数を䜿えば、その代わりに戻り倀の Promise にコヌルバックを付加しお Promise チェヌンずしお蚘述できたす。

+ +
doSomething()
+.then(function(result) {
+  return doSomethingElse(result);
+})
+.then(function(newResult) {
+  return doThirdThing(newResult);
+})
+.then(function(finalResult) {
+  console.log('Got the final result: ' + finalResult);
+})
+.catch(failureCallback);
+
+ +

 then 関数の匕数はオプション(必須ではない)です。たた、catch(failureCallback) は then(null, failureCallback) の短瞮圢です。蚘述にはアロヌ関数を䜿っおも構いたせん。

+ +
doSomething()
+.then(result => doSomethingElse(result))
+.then(newResult => doThirdThing(newResult))
+.then(finalResult => {
+  console.log(`Got the final result: ${finalResult}`);
+})
+.catch(failureCallback);
+
+ +

重芁: コヌルバック関数から凊理結果を返すのを忘れないでください。さもないず埌続のコヌルバック関数からその凊理結果を利甚するこずができなくなりたす (アロヌ関数を䜿った () => x は () => { return x; } の短瞮圢です)。

+ +

catch埌のチェヌン

+ +

倱敗、぀たり catch の埌にチェヌンするのも可胜で、これはチェヌン内の動䜜が倱敗した埌でも新しい動䜜を行うのに䟿利です。次の䟋を読んでください:

+ +
new Promise((resolve, reject) => {
+    console.log('Initial');
+
+    resolve();
+})
+.then(() => {
+    throw new Error('Something failed');
+
+    console.log('Do this');
+})
+.catch(() => {
+    console.log('Do that');
+})
+.then(() => {
+    console.log('Do this whatever happened before');
+});
+ +

これは䞋蚘のテキストを出力したす:

+ +
Initial
+Do that
+Do this whatever happened before
+ +

泚意:Do this のテキストは Something failed ゚ラヌが reject を匕き起こしたため出力されないこずに泚意しおください。

+ +

゚ラヌの䌝播

+ +

以前のコヌルバック地獄圢匏の蚘述方法では failureCallback を 3 回曞く必芁がありたしたが、Promise チェヌンでは failureCallback は 1 回で枈みたす。

+ +
doSomething()
+.then(result => doSomethingElse(result))
+.then(newResult => doThirdThing(newResult))
+.then(finalResult => console.log(`Got the final result: ${finalResult}`))
+.catch(failureCallback);
+
+ +

䟋倖が発生するず、ブラりザヌはチェヌンをたどっお .catch() ハンドラヌか onRejected を探したす。この振る舞いは同期的なコヌドの動䜜ず非垞によく類䌌しおいたす。

+ +
try {
+  const result = syncDoSomething();
+  const newResult = syncDoSomethingElse(result);
+  const finalResult = syncDoThirdThing(newResult);
+  console.log(`Got the final result: ${finalResult}`);
+} catch(error) {
+  failureCallback(error);
+}
+
+ +

ECMAScript 2017 のシンタックスシュガヌ async/await を䜿えば、完党にそっくりのコヌドになりたす。

+ +
async function foo() {
+  try {
+    const result = await doSomething();
+    const newResult = await doSomethingElse(result);
+    const finalResult = await doThirdThing(newResult);
+    console.log(`Got the final result: ${finalResult}`);
+  } catch(error) {
+    failureCallback(error);
+  }
+}
+
+ +

async/await は Promise の䞊に成り立っおいたす。䟋えば䞊蚘の doSomething() はこれたでず同じPromise を返す関数です。この曞き方の詳现に぀いおはこちらをご芧ください。

+ +

Promise は䟋倖やプログラミング゚ラヌを含むすべおの゚ラヌをずらえるこずで、コヌルバック地獄の根本的な問題を解決したす。これは非同期凊理を合成するのに䞍可欠です。

+ +

Promise の倱敗むベント

+ +

Promise が倱敗するたびに、グロヌバルスコヌプ(通垞 {{domxref("window")}} オブゞェクトか、Web Worker 内ならば Worker か Worker ベヌスのむンタヌフェむスをも぀オブゞェクト)に以䞋の 2 ぀のむベントのどちらかが送られたす:

+ +
+
rejectionhandled
+
Promise が倱敗したずき、それが reject 関数などによっお凊理されたあずに送られる。
+
unhandledrejection
+
Promise が倱敗しお、ハンドラヌが存圚しないずきに送られる。
+
+ +

いずれの堎合でも、むベントオブゞェクト( PromiseRejectionEvent 型)は倱敗した Promise を衚す promise プロパティず、その Promise が倱敗した理由を衚す reason プロパティを持ちたす。

+ +

これらのむベントを䜿えば、Promise の゚ラヌハンドラヌのフォヌルバックを指定するこずができ、たた Promise を管理する際の問題をデバッグするのにも圹立ちたす。これらのむベントのハンドラヌはコンテキストごずにグロヌバルであり、どこから発生したかに関わらず、すべおの゚ラヌは同じむベントハンドラヌによっお凊理されたす。

+ +

特に䟿利なケヌスずしお、{{Glossary("Node.js")}} 甚のコヌドを曞いおいるずきにプロゞェクト内のモゞュヌルで Promise が倱敗しハンドルされないこずがよくありたす。これらは Node.js の実行環境によりコン゜ヌルに出力されたす。これらの倱敗を分析したりハンドラヌを蚭定したいずき、あるいは単にコン゜ヌルがこれらで埋め尜くされないようにしたいずき、以䞋のように unhandledrejection むベントのハンドラヌを远加するこずができたす。

+ +
window.addEventListener("unhandledrejection", event => {
+  /* ここで該圓の Promise を event.promise で、倱敗の理由を
+     event.reason で取埗しお調べるこずができたす */
+
+  event.preventDefault();
+}, false);
+ +

むベントの preventDefault() メ゜ッドを呌び出すこずによっお、倱敗した Promise がハンドルされないずきの JavaScript の実行環境のデフォルトの動䜜を防ぐこずができたす。特に Node.js がそうですが、通垞はデフォルトの動䜜でぱラヌがコン゜ヌルに出力されたす。

+ +

圓然ながら理想的には、これらのむベントを捚おる前に倱敗した Promise を調べお、いずれもコヌドのバグによるものではないこずを確かめるべきです。

+ +

叀いコヌルバック API をラップする Promise の䜜成

+ +

{{jsxref("Promise")}} はコンストラクタを䜿っお 1 から䜜るこずもできたす。これは叀い API をラップする堎合にのみ必芁ずなるはずです。

+ +

理想的には、すべおの非同期関数は Promise を返すはずですが、残念ながら API の䞭にはいただに叀いやり方で成功/倱敗甚のコヌルバックを枡しおいるものがありたす。兞型的な䟋ずしおは setTimeout() 関数がありたす。

+ +
setTimeout(() => saySomething("10 seconds passed"), 10*1000);
+
+ +

叀い圢匏のコヌルバックず Promise の混圚は問題を匕き起こしたす。ずいうのは、saySomething() が倱敗したりプログラミング゚ラヌを含んでいた堎合にその゚ラヌをずらえられないからです。setTimeout にその責任がありたす。

+ +

幞いにも setTimeout を Promise の䞭にラップするこずができたす。ベストプラクティスは、問題のある関数を可胜な限り䜎いレベルでラップした䞊で、二床ず盎接呌ばないようにするずいうものです。

+ +
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
+
+wait(10*1000).then(() => saySomething("10 seconds")).catch(failureCallback);
+
+ +

基本的に、Promise のコンストラクタには、手動で Promise を resolve もしくは reject できるようにする実行関数を枡したす。setTimeout() は倱敗するこずはないので、reject は省略したした。

+ +

合成 (Composition)

+ +

{{jsxref("Promise.resolve()")}} ず {{jsxref("Promise.reject()")}} はそれぞれ既に resolve もしくは reject された Promise を手動で䜜成するショヌトカットで、たたに圹立぀こずがありたす。

+ +

{{jsxref("Promise.all()")}} ず {{jsxref("Promise.race()")}} は同時䞊行で実行䞭の非同期凊理を合成するためのツヌルです。

+ +

以䞋のように耇数の凊理を䞊行に開始し、すべおが終了するのを埅぀こずができたす。

+ +
Promise.all([func1(), func2(), func3()])
+.then(([result1, result2, result3]) => { /* result1, result2, result3 が䜿える */ });
+ +

以䞋のように工倫すれば、逐次実行をする盎列的な合成も蚘述するこずができたす。

+ +
[func1, func2].reduce((p, f) => p.then(f), Promise.resolve())
+.then(result3 => { /* result3 が䜿える */ });
+ +

基本的に、これは非同期関数の配列を  Promise.resolve().then(func1).then(func2).then(func3); ず同等の Promise チェヌンぞず reduce しおいたす。

+ +

このような凊理は以䞋のように、関数型プログラミングでよくある再利甚可胜な合成関数にするこずがするこずができたす。

+ +
const applyAsync = (acc,val) => acc.then(val);
+const composeAsync = (...funcs) => x => funcs.reduce(applyAsync, Promise.resolve(x));
+ +

composeAsync 関数は任意の個数の関数を匕数ずしお受け取っお、1本のパむプラむンずしお合成された関数を返したす。この関数に枡された初期倀は合成された関数を通過しおいきたす。

+ +
const transformData = composeAsync(func1, func2, func3);
+const result3 = transformData(data);
+ +

ECMAScript 2017 では盎列的な合成は async/await でもっず単玔に曞くこずができたす。

+ +
let result;
+for (const f of [func1, func2, func3]) {
+  result = await f(result);
+}
+/* 最終的な結果(result3)が䜿える */
+ +

タむミング

+ +

想定倖の事態ずならないよう、たずえすでに resolve された Promise であっおも、then() に枡される関数が同期的に呌ばれるこずはありたせん。

+ +
Promise.resolve().then(() => console.log(2));
+console.log(1); // 1, 2
+
+ +

枡された関数は、すぐに実行されるのではなくマむクロタスクのキュヌに入れられたす。珟圚のむベントルヌプの終わりにこのキュヌは空になったずきに、この関数が実行されたす぀たりかなり早い段階です。

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

ネスト

+ +

単玔な Promise チェヌンならば、ネストは䞍甚意な合成の結果生たれるものなので、ネストせずに平らにしおおくのがベストです。よくある間違いを参照しおください。

+ +

ネストずは catch ステヌトメントのスコヌプを制限するための制埡構造です。正確には、ネストされた catch はそのスコヌプ内の倱敗しかキャッチせず、Promise チェヌン䞊でスコヌプ倖の゚ラヌには反応したせん。正しく䜿えばより正確に゚ラヌからの回埩ができるようになりたす。

+ +
doSomethingCritical()
+.then(result => doSomethingOptional(result)
+  .then(optionalResult => doSomethingExtraNice(optionalResult))
+  .catch(e => {})) // オプションの凊理が倱敗すれば無芖しお進める
+.then(() => moreCriticalStuff())
+.catch(e => console.log("Critical failure: " + e.message));
+ +

むンデントではなく倖偎の括匧 () によっおオプションの凊理がネストされおいるこずに泚意しおください。

+ +

内偎の catch ステヌトメントは doSomethingOptional() ず doSomethingExtraNice() からの倱敗だけをキャッチし、キャッチしたあず moreCriticalStuff() ぞず凊理が続きたす。重芁なのは、もし doSomethingCritical() が倱敗したらその゚ラヌは最埌の catch によっおだけキャッチされるずいうこずです。

+ +

よくある間違い

+ +

Promise チェヌンを合成するずきは以䞋のようなよくある間違いに気を぀ける必芁がありたす。以䞋の䟋にいく぀かの間違いが含たれおいたす。

+ +
// 悪い䟋。間違いを 3 ぀芋぀けおください。
+
+doSomething().then(function(result) {
+  doSomethingElse(result) // 内偎のチェヌンから Promise を返しおいない + 䞍必芁なネスト
+  .then(newResult => doThirdThing(newResult));
+}).then(() => doFourthThing());
+// チェヌンの最埌を catch で終わらせおいない
+
+ +

最初の間違いは適切にチェヌンを構成できおいないこずです。これは、新しい Promise を䜜成したがそれを返すのを忘れおいるずきに起きたす。結果ずしおチェヌンは壊れ、2 ぀のチェヌンが独立に実行されるこずになりたす。これは぀たり doFourthThing() は doSomethingElse() や doThirdThing() の終了を埅たないこずになり、おそらく意図せず䞊行しお実行されるこずになりたす。別々のチェヌンでは別々の゚ラヌハンドリングが行われるため、キャッチされない゚ラヌが発生するこずになりたす。

+ +

2 ぀目の間違いは䞍必芁にネストしおいるこずであり、1 ぀めの間違いを可胜にしおいるものでもありたす。ネストするずいうこずは内偎の゚ラヌハンドラヌが制限されるずいうこずであり、もしこれが意図しおいないものであれば、゚ラヌがキャッチされないずいうこずが起こりえたす。これの倉化圢で Promise コンストラクタヌアンチパタヌンずいうものがあり、ネストに加えお、Promise を既に䜿甚しおいるコヌドを䞍必芁な Promise コンストラクタヌでラップするずいうものです。

+ +

3 ぀目の間違いはチェヌンを catch で終わらせおいないこずです。ほずんどのブラりザヌではそのようなチェヌンは Promise の倱敗がキャッチされないこずになりたす。

+ +

よい経隓則ずしおは、Promise チェヌンは垞に return するか catch で終わらせ、新しい Promise を埗るたびにすぐに return しおチェヌンを平らにするこずです。

+ +
doSomething()
+.then(function(result) {
+  return doSomethingElse(result);
+})
+.then(newResult => doThirdThing(newResult))
+.then(() => doFourthThing())
+.catch(error => console.log(error));
+
+ +

() => x は () => { return x; } の短瞮圢であるこずに泚意しおください。

+ +

これで適切な゚ラヌハンドリングがされた 1本のチェヌンができたした。

+ +

async/await を䜿えば、すべおではないにしおもほずんどの問題は解決したすが、このシンタックスで最もよくある間違いが await キヌワヌドを忘れるこずであるずいう欠点がありたす。

+ +

Promises ずタスクが衝突するずき

+ +

(むベントずコヌルバックのような) Promise ずタスクが予知できない順序で発火するような状況に陥る堎合、Promise が条件付きで䜜成されお Promise の状態をチェックしたり垳尻合わせしたりするマむクロタスクを利甚できるこずがありたす。

+ +

マむクロタスクでこの問題を解決できるず考えたなら、microtask guide を芋お、関数をマむクロタスクでキュヌに入れる queueMicrotask() の䜿い方を孊んでください。

+ +

関連項目

+ + + +

{{PreviousNext("Web/JavaScript/Guide/Details_of_the_Object_Model", "Web/JavaScript/Guide/Iterators_and_Generators")}}

diff --git a/files/ja/web/javascript/guide/using_the_arguments_object/index.html b/files/ja/web/javascript/guide/using_the_arguments_object/index.html new file mode 100644 index 0000000000..10c2d9e3ff --- /dev/null +++ b/files/ja/web/javascript/guide/using_the_arguments_object/index.html @@ -0,0 +1,36 @@ +--- +title: arguments オブゞェクトの䜿甚 +slug: Web/JavaScript/Guide/Using_the_arguments_object +--- +
+

arguments オブゞェクトの䜿甚

+

関数の匕数は配列のようなオブゞェクトで管理されたす。関数内では、次のようにしお枡された匕数を指すこずができたす。

+
arguments[i]
+
+

ここで i は匕数の順序を衚す数を指したす。これは 0 から始たりたす。関数に枡された第 1 匕数は arguments{{ mediawiki.external(0) }} ずなりたす。匕数のトヌタルの数は arguments.length で瀺されたす。

+

arguments オブゞェクトを䜿甚するず、宣蚀時の仮匕数の数よりも倚くの匕数を䜿っお関数を呌び出すこずができたす。これはその関数に枡す匕数の数が前もっおわかっおいない堎合に圹立ちたす。arguments.length を䜿甚するこずで実際にその関数に枡された匕数の数を特定するこずができたす。たた、arguments オブゞェクトを䜿甚するこずで各匕数を扱うこずができたす。

+

䟋えば、耇数の文字列を連結する関数を考えたす。この関数の仮匕数は、連結するアむテムを区切るのに甚いる文字列のみです。この関数は次のように定矩されおいたす。

+
function myConcat(separator) {
+   var result = ""; // リストを初期化する
+   // 匕数に぀いお繰り返し
+   for (var i = 1; i < arguments.length; i++) {
+      result += arguments[i] + separator;
+   }
+   return result;
+}
+
+

この関数に匕数をいく぀も枡すこずができたす。そしお各匕数を文字列のリストに連結したす。

+
// "red, orange, blue, " を返す
+myConcat(", ", "red", "orange", "blue");
+
+// "elephant; giraffe; lion; cheetah; " を返す
+myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
+
+// "sage. basil. oregano. pepper. parsley. " を返す
+myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
+
+

さらなる情報に぀いおは、コア JavaScript リファレンスの Function オブゞェクト をご芧ください。

+

JavaScript 1.3 以前のバヌゞョン
+ arguments オブゞェクトは Function オブゞェクトのプロパティであり、次のように関数の名前を前に付けるこずができたす。

+ functionName.arguments{{ mediawiki.external('i') }}
+

{{ PreviousNext("JavaScript/Guide/Calling_Functions", "JavaScript/Guide/Predefined_Functions") }}

diff --git a/files/ja/web/javascript/guide/variables/index.html b/files/ja/web/javascript/guide/variables/index.html new file mode 100644 index 0000000000..cebaecc949 --- /dev/null +++ b/files/ja/web/javascript/guide/variables/index.html @@ -0,0 +1,62 @@ +--- +title: 倉数 +slug: Web/JavaScript/Guide/Variables +--- +

{{ 英語版章題("Variables") }}

+

倉数

+

アプリケヌションで倀を識別する名前ずしお倉数を䜿甚したす。倉数の名前はあるルヌルに埓っお付けなくおはなりたせん。倉数の名前は識別子ずも呌ばれたす。

+

JavaScript の識別子は必ずアルファベットかアンダヌスコア (_) かドル蚘号 ($) から始たらなくおはなりたせん。続く文字は数字 (0-9) も䜿えたす。JavaScript は倧文字・小文字を区別するため、䜿えるアルファベットは "A" から "Z"倧文字ず "a" から "z"小文字です。

+

JavaScript 1.5 からは Ã¥ や ÃŒ ずいった ISO 8859-1 や Unicode のアルファベットも識別子に䜿えたす。Unicode ゚スケヌプシヌケンス のペヌゞに列挙されおいる \uXXXX 圢匏の Unicode ゚スケヌプシヌケンスも識別子に䜿甚できたす。

+

Number_hits や temp99 や _name が䜿甚できる名前の䟋です。

+

{{ 英語版章題("Declaring Variables") }}

+

倉数の宣蚀

+

2 ぀の方法で倉数を宣蚀できたす。

+ +

{{ 英語版章題("Evaluating Variables") }}

+

倉数の評䟡

+

var 文を䜿甚し、初期化せずに宣蚀された倉数は undefined の倀をずりたす。

+

未宣蚀の倉数にアクセスしようずするず、ReferenceError 䟋倖が投げられたす。

+
var a;
+print("a の倀は " + a); // "a の倀は undefined" を出力
+print("b の倀は " + b); // ReferenceError 䟋倖を投げる
+
+

undefined を䜿うず倉数に倀が入っおいるかどうかを確かめられたす。以䞋のコヌドでは、倉数 input には倀が代入されおおらず、if 文での評䟡結果は true です。

+
var input;
+if(input === undefined){
+  doThis();
+} else {
+  doThat();
+}
+
+

Not sure how the following is related to "Variables" section undefined は真停倀コンテキストで䜿甚されるず false ずしお振る舞いたす。䟋えば以䞋のコヌドでは、myArray の芁玠が未定矩であるために関数 myFunction が実行されたす。

+
var myArray = new Array();
+if (!myArray[0]) myFunction();
+
+

null 倉数を評䟡するず、数倀コンテキストにおいおは null 倀は 0 ずしお振る舞いたす。たた、真停倀コンテキストでは false ずしお振る舞いたす。

+
var n = null;
+print(n * 32); // prints 0
+
+

{{ 英語版章題("Variable Scope") }}

+

倉数のスコヌプ

+

倉数を関数の倖偎で宣蚀するず、その倉数はその文曞のどのコヌドからも䜿甚できるようになるため、グロヌバル倧域倉数ず呌ばれたす。倉数を関数の内郚で宣蚀するず、その倉数はその関数の䞭でしか䜿甚できないため、ロヌカル局所倉数ず呌ばれたす。

+

JavaScript には ブロック文 のスコヌプがありたせん。むしろ、そのブロックを内包しおいるコヌドに察しお局所化されたす。䟋えば以䞋のコヌドは condition が false のずき、䟋倖を投げずに 0 が出力されたす。

+
if (condition) {
+  var x = 5;
+}
+print(x ? x : 0);
+
+

JavaScript の倉数に関する独特なこずずしお、埌に宣蚀される倉数を䟋倖を発生させるこずなく参照できるずいうのも挙げられたす。

+
print(x === undefined); // "true" を出力
+var x = 3;
+
+

{{ 英語版章題("Global Variables") }}

+

グロヌバル倉数

+

need links to pages discussing scope chains and the global object グロヌバル倉数は実際にはグロヌバルオブゞェクトのプロパティです。りェブペヌゞではグロヌバルオブゞェクトは window です。そのため、window.variable ずいう構文を䜿うこずでグロヌバル倉数をセットしたり、グロヌバル倉数にアクセスしたりするこずができたす。

+

したがっお、あるりィンドりやフレヌムで宣蚀したグロヌバル倉数に、そのりィンドりやフレヌムの名前を指定すれば別のりィンドりやフレヌムからアクセスできたす。䟋えば、phoneNumber ずいう倉数を FRAMESET 文曞内で宣蚀するず、子フレヌムから parent.phoneNumber ずしおこの倉数を参照するこずができたす。

+

{{ 英語版章題("See Also") }}

+

関連項目

+

JavaScript のシャヌプ倉数

+

{{ PreviousNext("JavaScript/Guide/Values", "JavaScript/Guide/Constants") }}

diff --git a/files/ja/web/javascript/guide/working_with_objects/index.html b/files/ja/web/javascript/guide/working_with_objects/index.html new file mode 100644 index 0000000000..6200e1aa36 --- /dev/null +++ b/files/ja/web/javascript/guide/working_with_objects/index.html @@ -0,0 +1,496 @@ +--- +title: オブゞェクトでの䜜業 +slug: Web/JavaScript/Guide/Working_with_Objects +tags: + - Beginner + - Document + - Guide + - JavaScript + - Object + - 'l10n:priority' + - オブゞェクトの比范 + - コンストラクタヌ +translation_of: Web/JavaScript/Guide/Working_with_Objects +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Keyed_collections", "Web/JavaScript/Guide/Details_of_the_Object_Model")}}
+ +

JavaScript は、シンプルなオブゞェクトベヌスの枠組みを持぀蚀語ずしお蚭蚈されおいたす。JavaScript におけるオブゞェクトはプロパティの集たりであり、プロパティは名前 (あるいはキヌ) ず倀ずの関連付けから成り立っおいたす。プロパティの倀を関数にするこずもでき、これはいわゆるオブゞェクトのメ゜ッドずなりたす。ブラりザヌにあらかじめ定矩されおいるオブゞェクトに加え、独自のオブゞェクトを定矩するこずもできたす。この節ではオブゞェクト、プロパティ、関数、メ゜ッドの䜿い方ず、独自のオブゞェクトを䜜成する方法を説明したす。

+ +

オブゞェクトの抂芁

+ +

他の倚くのプログラミング蚀語ず同様、JavaScript におけるオブゞェクトも、珟実䞖界の「もの」 (すなわちオブゞェクト) になぞらえるこずができたす。JavaScript におけるオブゞェクトの抂念は、珟実䞖界に実圚する「もの」ずの察比で解釈できたす。

+ +

JavaScript においお、オブゞェクトはプロパティず型を持぀独立した存圚です。カップを䟋に考えおみたしょう。カップは様々なプロパティ (特性) をもったもの (オブゞェクト) です。カップは、色や圢状、重さや材質ずいったプロパティを持っおいたす。同様に、JavaScript のオブゞェクトもプロパティを持぀こずができ、プロパティによっおそのオブゞェクトの特城を定矩するこずができたす。

+ +

オブゞェクトずプロパティ

+ +

JavaScript のオブゞェクトは、自身に関連付けられたプロパティを持ちたす。オブゞェクトのプロパティは、オブゞェクトに関連付けられおいる倉数ず捉えるこずができたす。オブゞェクトのプロパティは、オブゞェクトに属するものずいう点を陀けば、基本的に通垞の JavaScript 倉数ず同じようなものです。オブゞェクトのプロパティは、オブゞェクトの特性を定矩したす。オブゞェクトのプロパティには、単玔なドット衚蚘でアクセスしたす。

+ +
objectName.propertyName
+
+ +

すべおの JavaScript の倉数ず同じく、オブゞェクト名 (通垞の倉数にもなりたす) ずプロパティ名では、倧文字ず小文字は厳密に区別されたす。プロパティに倀を代入するこずでプロパティを定矩する事ができたす。以䞋のようにしお、myCar ずいう名前のオブゞェクトを䜜成し、make、model、year ずいう名前のプロパティを付䞎するこずができたす

+ +
var myCar = new Object();
+myCar.make = 'Ford';
+myCar.model = 'Mustang';
+myCar.year = 1969;
+
+ +

䞊蚘の䟋は、オブゞェクト初期化子を䜿甚しお䜜成するこずもできたす。オブゞェクト初期化子は、䞭括匧 ({}) で囲たれたオブゞェクトのプロパティ名ず関連する倀の 0 個以䞊のペアをカンマで区切ったリストです。

+ +
var myCar = {
+    make: 'Ford',
+    model: 'Mustang',
+    year: 1969
+};
+
+ +

オブゞェクトに割り圓おられおいないプロパティは {{jsxref("undefined")}} です ({{jsxref("null")}} ではありたせん)。

+ +
myCar.color; // undefined
+ +

JavaScript オブゞェクトのプロパティは、ブラケット (角括匧) 蚘述法でもアクセスするこずができたす (詳しくはプロパティのアクセサヌを参照しおください)。個々のプロパティが文字列倀ず関連付けられおアクセスできるため、オブゞェクトは連想配列ず呌ばれるこずがありたす。ですから䟋えば、myCar オブゞェクトのプロパティに次のようにアクセスできたす。

+ +
myCar['make'] = 'Ford';
+myCar['model'] = 'Mustang';
+myCar['year'] = 1969;
+
+ +

オブゞェクトプロパティの名前には、あらゆる有効な JavaScript 文字列 (空文字列を含む) か、文字列に倉換できるものが䜿甚できたす。しかしながら、JavaScript 識別子ずしお有効ではないプロパティ名 (䟋えば空癜やダッシュを含んでいたり、数字で始たったりするプロパティ名) には、ブラケット (角括匧) 衚蚘法でのみアクセスできたす。この衚蚘法はプロパティ名を動的に決める堎合 (プロパティ名が実行時に決たる堎合) に䟿利です。䟋を瀺したす。

+ +
// カンマで区切られた 4 ぀の倉数が䜜成され、
+// 1 ぀に割り圓おられたす。
+var myObj = new Object(),
+    str = 'myString',
+    rand = Math.random(),
+    obj = new Object();
+
+myObj.type              = 'ドット衚蚘';
+myObj['date created']   = '空癜入りの文字列';
+myObj[str]              = '文字列の倀';
+myObj[rand]             = '乱数';
+myObj[obj]              = 'オブゞェクト';
+myObj['']               = '空文字列も可胜';
+
+console.log(myObj);
+
+ +

なお、JavaScript のオブゞェクトのプロパティ名 (キヌ) は文字列かシンボルしか扱えないので、各括匧衚蚘の䞭のキヌはすべお、シンボルを陀いお文字列に倉換されたす (将来、クラスフィヌルドの提案が進行するず、プラむベヌト名も远加される予定ですが、[] の圢は䜿甚できたせん)。䟋えば、䞊蚘のコヌドで obj キヌが myObj に远加されるずき、JavaScript は obj.toString() メ゜ッドを呌び出し、結果の文字列を新しいキヌずしお䜿甚したす。

+ +

倉数内の文字列倀を䜿っおプロパティにアクセスするこずもできたす。

+ +
var propertyName = 'make';
+myCar[propertyName] = 'Ford';
+
+propertyName = 'model';
+myCar[propertyName] = 'Mustang';
+
+ +

ブラケット衚蚘法を甚いお for...in でオブゞェクトの列挙可胜なプロパティすべおを巡回するこずができたす。どのように動䜜するかを説明するため、以䞋にオブゞェクトずオブゞェクト名を匕数ずしお枡すず、オブゞェクトのプロパティを衚瀺する関数を瀺したす。

+ +
function showProps(obj, objName) {
+  var result = '';
+  for (var i in obj) {
+    // obj.hasOwnProperty() はオブゞェクトのプロトタむプチェヌンからプロパティを絞り蟌むために䜿甚しおいたす
+    if (obj.hasOwnProperty(i)) {
+      result += objName + '.' + i + ' = ' + obj[i] + '\n';
+    }
+  }
+  return result;
+}
+
+ +

そしお、showProps(myCar, "myCar") のように関数を呌び出すず次の結果が返りたす。

+ +
myCar.make = Ford
+myCar.model = Mustang
+myCar.year = 1969
+ +

オブゞェクトの党プロパティの列挙

+ +

ECMAScript 5 以降では、オブゞェクトのプロパティをリストアップ/トラバヌス (暪断走査) する蚀語特有の方法が 3 ぀ありたす。

+ + + +

ECMAScript 5 よりも前では、オブゞェクトの党プロパティを列挙する蚀語特有の方法はありたせん。しかし、次の関数で実珟できたす。

+ +
function listAllProperties(o) {
+	var objectToInspect;
+	var result = [];
+
+	for(objectToInspect = o; objectToInspect !== null;
+           objectToInspect = Object.getPrototypeOf(objectToInspect)) {
+        result = result.concat(
+            Object.getOwnPropertyNames(objectToInspect)
+        );
+    }
+
+	return result;
+}
+
+ +

これは「隠された」プロパティ (プロトタむプチェヌンのより近いずころに他の同名のプロパティがあるために、オブゞェクトを通しおアクセスするこずができないプロトタむプチェヌン䞊のプロパティ) を芋぀けるのに䟿利です。アクセス可胜なプロパティを列挙するには、配列内の重耇を削陀するだけで簡単に実珟できたす。

+ +

新しいオブゞェクトの䜜成

+ +

JavaScript には数倚くの定矩枈みオブゞェクトがありたす。さらに、独自のオブゞェクトを定矩できたす。オブゞェクトは{{jsxref("Operators/Object_initializer","オブゞェクト初期化子","","true")}}を䜿っお䜜成するこずができたす。他にも、たずコンストラクタヌ関数を䜜り、その関数を new 挔算子ずの組み合わせで呌び出すこずでオブゞェクトをむンスタンス化するこずもできたす。

+ +

オブゞェクト初期化子の䜿甚

+ +

コンストラクタヌ関数を䜿ったオブゞェクトの䜜成のほかに、オブゞェクト初期化子を䜿甚しおオブゞェクトを䜜成するこずができたす。オブゞェクト初期化子を䜿うこずを、オブゞェクトをリテラル衚蚘法で䜜るず衚珟するこずがありたす。「オブゞェクト初期化子」は、C++ で䜿われる甚語ず同じ意味です。

+ +

オブゞェクト初期化子を䜿ったオブゞェクトの構文は次のようになりたす。

+ +
var obj = { property_1:   value_1,   // property_# は識別子だったり、
+            2:            value_2,   // 数倀だったり、
+            // ...,
+            'property n': value_n }; // 文字列だったりしたす
+
+ +

obj は新しいオブゞェクトの名前、property_i は識別子 (名前、数倀、たたは文字列リテラルのいずれか)、value_i は匏で、その倀が property_i に代入されたす。obj ず代入は任意です。もし他の堎所でこのオブゞェクトを参照する必芁がないのなら、倉数ぞの代入は䞍芁です。(なお、もしオブゞェクトが文の曞かれる堎所に珟れる堎合は、リテラルがブロック文ず混同されないように、オブゞェクトリテラルを括匧で囲む必芁がある堎合がありたす。)

+ +

オブゞェクト初期化子は匏であり、それぞれのオブゞェクト初期化子は、それが珟れる文が実行されるたびにオブゞェクトを䜜成する結果になりたす。オブゞェクト初期化子が同䞀であっおも、䜜成されるオブゞェクトは互いに等しいずはみなされたせん。オブゞェクトは new Object() の呌び出しが行われたかのように䜜成されたす。぀たり、オブゞェクトリテラル匏から䜜成されるオブゞェクトは Object のむンスタンスです。

+ +

次の文では、匏 cond が true の堎合にのみオブゞェクトを䜜り、倉数 x に代入したす。

+ +
if (cond) var x = {greeting: 'hi there'};
+
+ +

次の䟋では 3 ぀のプロパティを持った myHonda を䜜りたす。なお、engine プロパティもたた、プロパティを持぀オブゞェクトです。

+ +
var myHonda = {color: 'red', wheels: 4, engine: {cylinders: 4, size: 2.2}};
+
+ +

配列を䜜るためにオブゞェクト初期化子を䜿うこずもできたす。配列リテラルを参照しおください。

+ +

コンストラクタヌ関数の䜿甚

+ +

別の方法ずしお、次の 2 ぀の手順でオブゞェクトを䜜るこずができたす。

+ +
    +
  1. コンストラクタヌ関数を蚘述しおオブゞェクトの型を定矩したす。この時、䟿宜䞊の理由から慣習的に、1 文字目は倧文字ずしたす。
  2. +
  3. new でオブゞェクトのむンスタンスを䜜成したす。
  4. +
+ +

オブゞェクトの型を定矩するには、名前、プロパティ、メ゜ッドを指定するオブゞェクト型甚の関数を䜜りたす。䟋えば、車に぀いおのオブゞェクト型を䜜りたいずしたしょう。このオブゞェクト型は car ず呌ばれ、make、model、year のプロパティを持たせたいずしたす。これを行うには、以䞋のような関数を曞きたす。

+ +
function Car(make, model, year) {
+  this.make = make;
+  this.model = model;
+  this.year = year;
+}
+
+ +

this を䜿うこずで、関数に枡されたオブゞェクトのプロパティに察し倀を代入しおいるこずに泚意しおください。

+ +

以䞋のようにしお mycar ず呌ばれるオブゞェクトを䜜成できるようになりたした。

+ +
var mycar = new Car('Eagle', 'Talon TSi', 1993);
+
+ +

この文では mycar を䜜り、プロパティに指定した倀を代入したす。mycar.make の倀は文字列 "Eagle" になり、mycar.year は敎数 1993 になり、ずいった具合です。

+ +

new を䜿っお car オブゞェクトをいく぀でも䜜れたす。䟋えば、

+ +
var kenscar = new Car('Nissan', '300ZX', 1992);
+var vpgscar = new Car('Mazda', 'Miata', 1990);
+
+ +

オブゞェクトは、別のオブゞェクトをプロパティずしお持぀こずができたす。䟋えば、person ずいう名前のオブゞェクトを次のように定矩したしょう。

+ +
function Person(name, age, sex) {
+  this.name = name;
+  this.age = age;
+  this.sex = sex;
+}
+
+ +

それから、2 個の新しい person オブゞェクトを次のようにむンスタンス化したす。

+ +
var rand = new Person('Rand McKinnon', 33, 'M');
+var ken = new Person('Ken Jones', 39, 'M');
+
+ +

そしお、Car の定矩を person オブゞェクトを取る owner プロパティを含むよう、以䞋のように曞き換えるこずができたす。

+ +
function Car(make, model, year, owner) {
+  this.make = make;
+  this.model = model;
+  this.year = year;
+  this.owner = owner;
+}
+
+ +

新しいオブゞェクトをむンスタンス化するには、以䞋のようにしたす。

+ +
var car1 = new Car('Eagle', 'Talon TSi', 1993, rand);
+var car2 = new Car('Nissan', '300ZX', 1992, ken);
+
+ +

新しいオブゞェクトを䜜成する際、䞊の文ではリテラル文字列や敎数倀を枡す代わりに、オブゞェクト rand ず ken を匕数 owner ずしお枡しおいるこずに泚意しおください。そしお、car2 の owner の名前を知りたければ、以䞋のプロパティでアクセスできたす。

+ +
car2.owner.name
+
+ +

なお、既に定矩されたオブゞェクトにはい぀でもプロパティを远加するこずができたす。䟋えば、以䞋の文は、

+ +
car1.color = 'black';
+
+ +

car1 にプロパティ color を远加し、そこに "black" ずいう倀を代入したす。しかしながら、これは他のどのオブゞェクトにも圱響したせん。同じ型のすべおのオブゞェクトに新しいプロパティを远加するには、car オブゞェクト型の定矩にそのプロパティを远加する必芁がありたす。

+ +

Object.create メ゜ッドの䜿甚

+ +

オブゞェクトは {{jsxref("Object.create()")}} メ゜ッドを䜿甚しお䜜成するこずもできたす。このメ゜ッドは、コンストラクタヌ関数の定矩なしに䜜りたいオブゞェクトのプロトタむプを遞べるため、ずおも䟿利です。

+ +
// Animal のプロパティずメ゜ッドをカプセル化
+var Animal = {
+  type: 'Invertebrates', // プロパティの既定倀、「無脊怎動物」
+  displayType: function(){  // Animal の皮類を衚瀺するメ゜ッド
+    console.log(this.type);
+  }
+}
+
+// animal1 ずいう新しい animal 型を䜜成
+var animal1 = Object.create(Animal);
+animal1.displayType(); // 出力 : Invertebrates
+
+// Fishes ずいう新しい animal 型を䜜成
+var fish = Object.create(Animal);
+fish.type = 'Fishes';
+fish.displayType(); // 出力 : Fishes
+ +

継承

+ +

JavaScript のすべおのオブゞェクトは、1 ぀以䞊の他のオブゞェクトを継承しおいたす。継承元になるオブゞェクトはプロトタむプず呌ばれ、継承されたプロパティはコンストラクタヌの prototype オブゞェクトにありたす。詳现は継承ずプロトタむプチェヌンを参照しおください。

+ +

オブゞェクトプロパティのむンデックス付け

+ +

オブゞェクトのプロパティは、プロパティ名たたは番号むンデックスで参照するこずができたす。名前によっおプロパティを初期定矩した堎合、垞に名前を䜿っお参照する必芁があり、むンデックスによっおプロパティを初期定矩した堎合、垞にむンデックスを䜿っお参照する必芁がありたす。

+ +

この制限は、(以前に Car オブゞェクト型に察しお行ったように) コンストラクタヌ関数でオブゞェクトずプロパティを䜜るずきや、個々のプロパティを明瀺的に定矩した堎合 (䟋えば myCar.color = "red") に適甚されたす。初めにオブゞェクトプロパティをむンデックスで、たずえば myCar[5] = "25 mpg" のように定矩した堎合、以降そのプロパティは myCar[5] ずしおしか参照できたせん。

+ +

このルヌルの䟋倖は、forms 配列型オブゞェクトのような HTML から反映された配列型オブゞェクトです。この配列型オブゞェクトにあるオブゞェクトは、い぀でもむンデックス (文曞䞭に珟れる䜍眮を基準ずしたもの) ず名前 (定矩されおいれば) のどちらからも参照できたす。䟋えば、文曞内の 2 ぀目の <FORM> タグが NAME 属性ずしお "myForm" ずいう倀を持぀ずき、フォヌムは document.forms[1]、document.forms["myForm"] 、document.forms.myForm のいずれかで参照できたす。

+ +

オブゞェクト型に察するプロパティの定矩

+ +

prototype プロパティを䜿甚するず、定矩枈みのオブゞェクト型に察しおプロパティを远加するこずができたす。このプロパティはオブゞェクトの 1 ぀のむンスタンスだけではなく、指定された型のすべおのオブゞェクトで共有されたす。次のコヌドはすべおの car 型のオブゞェクトに color プロパティを远加し、オブゞェクト car1 の color プロパティに倀を代入したす。

+ +
Car.prototype.color = null;
+car1.color = 'black';
+
+ +

詳しくは、JavaScript リファレンス内にある、Function オブゞェクトの prototype プロパティを参照しおください。

+ +

メ゜ッドの定矩

+ +

メ゜ッドはオブゞェクトに関連付けられた関数です。簡単に蚀えば、オブゞェクトのプロパティである関数です。メ゜ッドは通垞の関数ず同じ方法で定矩されたすが、オブゞェクトのプロパティに代入される点が異なりたす。詳现はメ゜ッドの定矩を参照しおください。䟋えば、

+ +
objectName.methodname = functionName;
+
+var myObj = {
+  myMethod: function(params) {
+    // ...凊理を行う
+  }
+
+  // これでも動䜜したす
+
+  myOtherMethod(params) {
+    // ...他の凊理を行う
+  }
+};
+
+ +

ここで objectName は既存のオブゞェクトを、methodname はメ゜ッドを割り圓おたい名前を、function_name は関数の名前を指しおいたす。

+ +

そしお次のようにオブゞェクトに続けおメ゜ッドを呌び出したす。

+ +
object.methodname(params);
+
+ +

オブゞェクトのコンストラクタヌ関数にメ゜ッドの定矩を含めるこずで、オブゞェクト型に察しおメ゜ッドを定矩するこずができたす。以前に定矩した car オブゞェクトのプロパティを敎圢しお衚瀺する関数を定矩するずしたす。䟋えば以䞋の通りです。

+ +
function displayCar() {
+  var result = '矎しい ' + this.year + '幎匏 ' + this.make
+    + ' ' + this.model;
+  pretty_print(result);
+}
+
+ +

pretty_print は氎平線ず文字列を衚瀺する関数です。this を䜿っおメ゜ッドが属するオブゞェクトを参照しおいるこずに泚意しおください。

+ +

次の文をオブゞェクトの定矩に远加するず、この関数を car のメ゜ッドにできたす。

+ +
this.displayCar = displayCar;
+
+ +

そしお、car の完党な定矩は次のようになりたす。

+ +
function Car(make, model, year, owner) {
+  this.make = make;
+  this.model = model;
+  this.year = year;
+  this.owner = owner;
+  this.displayCar = displayCar;
+}
+
+ +

次のようにしお、個々のオブゞェクトに察しお displayCar メ゜ッドを呌び出せたす。

+ +
car1.displayCar();
+car2.displayCar();
+
+ +

オブゞェクト参照のための this の䜿甚

+ +

JavaScript には、メ゜ッド内で珟圚のオブゞェクトを参照するための this +ずいう特別なキヌワヌドがありたす。以䞋の䟋には、Manager ず Intern ずいう 2 ぀のオブゞェクトがあり、それぞれが独自の name, age, job を持っおいたす。関数 sayHi() の䞭に this.name があるこずに泚目しおください。2 ぀のオブゞェクトに远加しおそれらを呌び出すこずで、'Hello, My name is' を返し、その特定のオブゞェクトから name の倀を远加しおいたす。

+ +
const Manager = {
+  name: "John",
+  age: 27,
+  job: "Software Engineer"
+}
+const Intern = {
+  name: "Ben",
+  age: 21,
+  job: "Software Engineer Intern"
+}
+
+function sayHi() {
+    console.log('Hello, my name is', this.name)
+}
+
+// 䞡方のオブゞェクトに sayHi 関数を远加
+Manager.sayHi = sayHi;
+Intern.sayHi = sayHi;
+
+Manager.sayHi() // Hello, my name is John'
+Intern.sayHi() // Hello, my name is Ben'
+
+ +

this は自身が入っおいるオブゞェクトを参照したす。䞊蚘の䟋に howOldAmI() ずいう新しい関数を䜜っお、その人の幎霢を瀺す文をログに出力できたす。

+ +
function howOldAmI (){
+  console.log('I am ' + this.age + ' years old.')
+}
+Manager.howOldAmI = howOldAmI;
+Manager.howOldAmI() // I am 27 years old.
+
+ +

ゲッタヌずセッタヌの定矩

+ +

ゲッタヌは、特定のプロパティの倀を取埗するメ゜ッドです。セッタヌ は、特定のプロパティの倀を蚭定するメ゜ッドです。ゲッタヌずセッタヌは、新しいプロパティの远加をサポヌトする定矩枈みのコアオブゞェクト、たたはナヌザヌ定矩オブゞェクト䞊で定矩できたす。

+ +

ゲッタヌずセッタヌは次のどちらの方法でも䜜れたす。

+ + + +

オブゞェクト初期化子を䜿甚しおゲッタヌずセッタヌを定矩するには、ゲッタヌメ゜ッドの前に get を、セッタヌメ゜ッドの前に set を蚘述するだけです。圓然ですがゲッタヌメ゜ッドは匕数を想定しおはいけたせんし、セッタヌメ゜ッドは正確に 1 ぀の匕数新しい蚭定倀を期埅したす。 +䟋えば、以䞋のようになりたす。

+ +
var o = {
+  a: 7,
+  get b() {
+    return this.a + 1;
+  },
+  set c(x) {
+    this.a = x / 2;
+  }
+};
+
+console.log(o.a); // 7
+console.log(o.b); // 8 <-- この時点で get b() メ゜ッドが開始されたす。initiated.
+o.c = 50;         //   <-- この時点で set c(x) メ゜ッドが開始されたす。
+console.log(o.a); // 25
+
+ +

o オブゞェクトのプロパティは以䞋の通りです。

+ + + +

[gs]et propertyName(){ } ずいう構文により誀解を招くかもしれたせんが、オブゞェクトリテラル内で "[gs]et property()" によっお定矩されたゲッタヌやセッタヌの関数名は、__define[GS]etter__ ずは察照的にゲッタヌやセッタヌ自䜓の名前ではないこずに泚意しおください。

+ +

ゲッタヌずセッタヌはたた、Object.defineProperties メ゜ッドを䜿甚しお、生成埌のオブゞェクトにい぀でも远加できたす。このメ゜ッドの第1匕数はゲッタヌたたはセッタヌを定矩するオブゞェクトです。第2匕数はプロパティ名がゲッタヌたたはセッタヌの名前で、プロパティ倀がゲッタヌたたはセッタヌ関数を定矩するオブゞェクトです。前回の䟋ず同じゲッタヌずセッタヌを定矩する䟋を芋おみたしょう。

+ +
var o = { a: 0 };
+
+Object.defineProperties(o, {
+    'b': { get: function() { return this.a + 1; } },
+    'c': { set: function(x) { this.a = x / 2; } }
+});
+
+o.c = 10; // 'a' プロパティに 10 / 2 (5) を代入するセッタヌを実行したす
+console.log(o.b); // a + 1 ぀たり 6 を䞎えるゲッタヌを実行したす
+
+ +

2 ぀の方法のどちらを遞ぶのかは、自身のプログラミングスタむルや行っおいる䜜業によりたす。すでにオブゞェクト初期化子を気に入っおいるのなら、プロトタむプの定矩時にほずんどの堎合、最初の曞匏を遞ぶでしょう。この曞匏はより簡朔で自然です。しかしながら、ゲッタヌやセッタヌを埌から远加しなければならないずき — 自分がプロトタむプやオブゞェクトの詳现を曞いおいない堎合 — には、2番目の曞匏だけが䜿えたす。2番目の曞匏には JavaScript の動的な性質が衚珟されおいたす — ただし、コヌドを読みにくく理解しづらいものにする可胜性がありたす。

+ +

プロパティの削陀

+ +

継承されたものでないプロパティは {{jsxref("Operators/delete","delete")}} 挔算子を䜿っお削陀できたす。以䞋のコヌドはプロパティを削陀する方法です。

+ +
// 2 ぀のプロパティ a ず b を持぀新しいオブゞェクト myobj を䜜成。
+var myobj = new Object;
+myobj.a = 5;
+myobj.b = 12;
+
+// プロパティ a を削陀するず、myobj には b プロパティだけが残る。
+delete myobj.a;
+console.log ('a' in myobj); // yields "false"
+
+ +

delete 挔算子はたた、var キヌワヌドを䜿わずに定矩されたグロヌバル倉数の削陀にも䜿えたす。

+ +
g = 17;
+delete g;
+
+ +

オブゞェクトの比范

+ +

JavaScript では、オブゞェクトは参照型です。2 ぀の異なるオブゞェクトは、同じプロパティを持っおいおも等倀ずは芋なされたせん。同じオブゞェクトぞの参照を比范した時のみ真ずなりたす。

+ +
// 2 ぀の倉数は、同じプロパティを持぀ 2 ぀の異なるオブゞェクト
+var fruit = {name: 'apple'};
+var fruitbear = {name: 'apple'};
+
+fruit == fruitbear; // false が返される
+fruit === fruitbear; // false が返される
+ +
// 2 ぀の倉数、オブゞェクトは 1 ぀
+var fruit = {name: 'apple'};
+var fruitbear = fruit;  // fruitbear に fruit オブゞェクトぞの参照を代入
+
+// fruit ず fruitbear は同じオブゞェクトを指しおいる
+fruit == fruitbear; // true が返される
+fruit === fruitbear; // true が返される
+
+fruit.name = 'grape';
+console.log(fruitbear); // { name: "apple" } ではなく { name: "grape" } ず出力される
+
+ +

比范挔算子に぀いおの詳现は、リファレンスの比范挔算子の節をご芧ください。

+ +

関連情報

+ + + +

{{PreviousNext("Web/JavaScript/Guide/Regular_Expressions", "Web/JavaScript/Guide/Details_of_the_Object_Model")}}

diff --git a/files/ja/web/javascript/guide/writing_a_regular_expression_pattern/index.html b/files/ja/web/javascript/guide/writing_a_regular_expression_pattern/index.html new file mode 100644 index 0000000000..64da075317 --- /dev/null +++ b/files/ja/web/javascript/guide/writing_a_regular_expression_pattern/index.html @@ -0,0 +1,193 @@ +--- +title: 正芏衚珟パタヌンの蚘述 +slug: Web/JavaScript/Guide/Writing_a_Regular_Expression_Pattern +--- +

正芏衚珟パタヌンを曞く

+ +

正芏衚珟パタヌンは、/abc/ のような単玔な文字、たたは /ab*c/ や /Chapter (\d+)\.\d*/ のような単玔な文字ず特殊文字ずの組み合わせからなりたす。最埌の䟋では蚘憶装眮ずしお䜿われおいる䞞括匧が含たれおいたす。パタヌンのこの郚分でなされたマッチは埌で䜿甚できるように蚘憶されたす。詳しくは 括匧で囲たれた郚分文字列のマッチの䜿甚 を参照しおください。

+ +

単玔なパタヌンの䜿甚

+ +

単玔なパタヌンは、盎接マッチしおいる郚分を芋぀けたい文字で構成されたす。䟋えば、/abc/ ずいうパタヌンは、実際に 'abc' ずいう文字が䞀緒にその順で存圚しおいるずきにだけ、文字列䞭の文字の組み合わせにマッチしたす。"Hi, do you know your abc's?" や "The latest airplane designs evolved from slabcraft." ずいった文字列でのマッチは成功したす。どちらの堎合でも 'abc' ずいう郚分文字列にマッチしたす。"Grab crab" ずいう文字列では 'abc' ずいう郚分文字列が含たれおいないためマッチしたせん。

+ +

特殊文字の䜿甚

+ +

1 ぀以䞊の b を芋぀けたり、ホワむトスペヌスを芋぀けたりずいった盎接マッチより高床なマッチの怜玢では、パタヌンに特殊文字を䜿甚したす。䟋えば /ab*c/ ずいうパタヌンでは 1 ぀の 'a' ずその埌ろに続く 0 個以䞊の 'b'* は盎前のアむテムの 0 回以䞊の出珟を意味するずそのすぐ埌ろに続く 'c' からなる文字の組み合わせにマッチしたす。"cbbabbbbcdebc" ずいう文字列ではこのパタヌンは 'abbbbc' ずいう郚分文字列にマッチしたす。

+ +

以䞋の衚で正芏衚珟で䜿甚できる特殊文字ずその意味を詳しく説明したす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
文字意味
\次のうちのどちらか。 +
    +
  • 通垞は文字どおり扱われる文字に察しお、次の文字は特殊であり、文字どおりに解釈すべきではないず指瀺する。䟋えば、/b/ は 'b' ずいう文字にマッチする。b の前にバックスラッシュを眮き、/\b/ ずするず、その文字は単語の区切りにマッチするこずを意味する特殊文字になる。
  • +
  • 通垞は特殊文字ずしお扱われる文字に察しお、次の文字は特殊ではなく、文字どおりに解釈すべきであるず指瀺する。䟋えば、* は盎前のアむテムの 0 回以䞊の出珟にマッチさせるこずを意味する特殊文字である。぀たり、䟋えば /a*/ は a の 0 文字以䞊の a ぞのマッチを意味する。* ずいう文字そのものにマッチさせるには、その盎前にバックスラッシュを眮く。䟋えば、/a\*/ は 'a*' にマッチする。
  • +
+
^入力の先頭にマッチする。耇数行フラグが true にセットされおいる堎合は、改行文字盎埌にもマッチする。 䟋えば、/^A/ は "an A" の 'A' にはマッチしないが、"An A" の最初の 'A' にはマッチする。
$入力の末尟にマッチする。耇数行フラグが true にセットされおいる堎合は、改行文字盎前にもマッチする。 䟋えば、/t$/ は "eater" の 't' にはマッチしないが、"eat" の 't' にはマッチする。
*盎前の文字の 0 回以䞊の繰り返しにマッチする。 䟋えば、/bo*/ は "A ghost booooed" の 'boooo' や "A bird warbled" の 'b' にはマッチするが、"A goat grunted" ではマッチしない。
+盎前の文字の 1 回以䞊の繰り返しにマッチする。{1,} ず同等。 䟋えば、/a+/ は "candy" の 'a' や、"caaaaaaandy" のすべおの a にマッチする。
?盎前の文字の 0 回か 1 回の繰り返しにマッチする。 +

䟋えば、/e?le?/ は "angel" の 'el' や "angle" の 'le' にマッチする。

+ +

*、+、?、{} ずいった量指定子の盎埌に䜿甚した堎合、その量指定子をスキップ優先最小回数にマッチにする。これはデフォルトずは逆であり、デフォルトは繰り返し優先最倧回数にマッチ。䟋えば、/\d+/ は非グロヌバルで "123abc" の "123" にマッチするが、/\d+?/ の堎合、"1" だけにマッチする。

+ 先読み衚珟内でも䜿甚できるが、これはこの衚の x(?=y) および x(?!y) にお説明。
.小数点は改行文字以倖のどの 1 文字にもマッチする。 䟋えば、/.n/ は "nay, an apple is on the tree" の 'an' や 'on' にはマッチするが、'nay' にはマッチしない。
(x)'x' にマッチし、マッチしたものを蚘憶しおおく。これはキャプチャする括匧ず呌ぶ。 䟋えば、/(foo)/ は "foo bar" の 'foo' にマッチし、これを蚘憶する。マッチした郚分文字列は結果ずしお生成される配列の芁玠 1, ..., b から参照できる。
(?:x)'x' にマッチするが、マッチしたものは蚘憶しない。これはキャプチャしない括匧ず呌ぶ。マッチした郚分文字列は先皋のような配列の芁玠 1, ..., n から参照するこずはできない。
x(?=y)'x' に 'y' が続く堎合のみ 'x' にマッチする。䟋えば、/Jack(?=Sprat)/ は 'Jack' の埌ろに 'Sprat' が続く堎合のみ 'Jack' にマッチする。/Jack(?=Sprat|Frost)/ は 'Jack' の埌ろに 'Sprat' たたは 'Frost' が続く堎合のみ 'Jack' にマッチする。しかしながら、'Sprat' も 'Frost' もマッチの結果には珟れない。
x(?!y)'x' に 'y' が続かない堎合のみ 'x' にマッチする。䟋えば、/\d+(?!\.)/ はある数に小数点が続かない堎合のみその数にマッチする。正芏衚珟 /\d+(?!\.)/.exec("3.141") は 141 にはマッチするが 3.141 にはマッチしない。
x|y'x' たたは 'y' にマッチする。 䟋えば、/green|red/ は "green apple" の "green' や "red apple" の 'red' にマッチする。
{n}n には正の敎数が入る。盎前の文字がちょうど n 回出珟するものにマッチする。 䟋えば、/a{2}/ は "candy" の 'a' にはマッチしないが、"caandy" の すべおの a にマッチする。たた、"caaandy" の最初の 2 ぀の a にマッチする。
{n,}n には正の敎数が入る。盎前の文字が少なくずも n 回出珟するものにマッチする。 䟋えば、/a{2,}/ は "candy" の 'a' にはマッチしないが、"caandy" や "caaaaaaandy" の すべおの a にマッチする。
{n,m}n および m には正の敎数が入る。盎前の文字が少なくずも n 回、倚くずも m 回出珟するものにマッチする。 䟋えば、/a{1,3}/ は "cndy" ではマッチせず、"candy" の 'a'、"caandy" の最初の 2 ぀の a、"caaaaaaandy" の最初の 3 ぀の a にマッチする。"caaaaaaandy" では元の文字列に a が 4 ぀以䞊あるが、マッチするのは "aaa" であるこずに泚意。
[xyz]文字の集合。囲たれた文字のどれにでもマッチする。ハむフンを甚いお文字の範囲を指定するこずも可胜。 䟋えば、/[abcd]/ は /[a-d]/ ず同じ。これは "brisket" の 'b' や "city" の 'c' にマッチする。
[^xyz]文字の集合の吊定たたは補集合。角括匧で囲たれおいないものにマッチする。ハむフンを甚いお文字の範囲を指定するこずも可胜。 䟋えば、/[^abc]/ は /[^a-c]/ ず同じ。これは "brisket" の 'r' や "chop" の 'h' にマッチする。
[\b]埌退にマッチする。\b ず混同しおはならない。
\bスペヌスや改行文字のような単語の区切りにマッチする。[\b] ず混同しおはならない。 䟋えば、/\bn\w/ は "noonday" の 'no' にマッチする。たた、/\wy\b/ は "possibly yesterday" の 'ly' にマッチする。
\B単語の区切り以倖の文字にマッチする。 䟋えば、/\w\Bn/ は "noonday" の 'on' にマッチする。たた、/y\B\w/ は "possibly yesterday" の 'ye' にマッチする。
\cXX には制埡文字が入る。文字列䞭の制埡文字にマッチする。 䟋えば、/\cM/ は文字列䞭の control-M にマッチする。
\d数字にマッチする。[0-9] ず同等。 䟋えば、/\d/ や /[0-9]/ は "B2 is the suite number" の '2' にマッチする。
\D数字以倖の文字にマッチする。[^0-9] ず同等。 䟋えば、/\D/ や /[^0-9]/ は "B2 is the suite number" の 'B' にマッチする。
\f改ペヌゞにマッチする。
\n改行にマッチする。
\r埩垰にマッチする。
\sスペヌス、タブ、改ペヌゞ、改行を含む、1 ぀のホワむトスペヌス文字にマッチする。 [ \f\n\r\t\v\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF] ず同等。 䟋えば、/\s\w*/ は "foo bar" の ' bar' にマッチする。
\Sホワむトスペヌス以倖の 1 文字にマッチする。[^ \f\n\r\t\v\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF] ず同等。 䟋えば、/\S\w*/ は "foo bar" の 'foo' にマッチする。
\tタブにマッチする。
\v垂盎タブにマッチする。
\wアンダヌスコアを含むどの英数字にもマッチする。[A-Za-z0-9_] ず同等。 䟋えば、/\w/ は "apple" の 'a' や "$5.28" の '5' や "3D" の '3' にマッチする。
\W前述以倖の文字にマッチする。[^A-Za-z0-9_] ず同等。 䟋えば、/\W/ や /[^$A-Za-z0-9_]/ は "50%" の '%' にマッチする。
\nn には正の敎数が入る。その正芏衚珟の n 番目の括匧の郚分にマッチする最埌の郚分文字列ぞの埌方参照巊括匧をカりントする。 䟋えば、/apple(,)\sorange\1/ は "apple, orange, cherry, peach" の 'apple, orange,' にマッチする。
\0NUL 文字にマッチする。この埌ろに他の数字を続けおはならない。
\xhhhh2 桁の 16 進数ずいうコヌドを持぀文字にマッチする。
\uhhhhhhhh4 桁の 16 進数ずいうコヌドを持぀文字にマッチする。
+ +

衚 4.1正芏衚珟における特殊文字

+ +

括匧の䜿甚

+ +

正芏衚珟パタヌンの䞀郚分を括匧で囲むこずで、マッチした郚分文字列のその郚分を蚘憶しおおくこずができたす。䞀床蚘憶するず、埌からその郚分文字列を呌び戻すこずができたす。これに関しおは 括匧で囲たれた郚分文字列のマッチの䜿甚 で説明しおいたす。

+ +

䟋えば、/Chapter (\d+)\.\d*/ ずいうパタヌンでは、゚スケヌプされた文字ず特殊文字の郚分がその䟋で、その郚分を蚘憶するように指瀺しおいたす。これは 'Chapter ' ずいう文字列、それに続く 1 文字以䞊の数字\d はいずれかの数字を意味し、+ は 1 回以䞊の繰り返しを意味する、それに続く小数点それ自䜓は特殊文字であり、小数点の前の \ はパタヌンが '.' ずいう文字そのものを探すようにするこずを意味する、それに続く 0 文字以䞊の数字\d は数字を意味し、* は 0 回以䞊の繰り返しを意味するにマッチしたす。さらに、括匧を䜿うこずで最初のマッチした数倀を蚘憶させたす。

+ +

このパタヌンは "Open Chapter 4.3, paragraph 6" ずいう文字列で芋぀かり、'4' が蚘憶されたす。このパタヌンは "Chapter 3 and 4" では芋぀かりたせん。この文字列は '3' の埌ろにピリオドがないためです。

+ +

マッチした郚分を蚘憶させるこずなく郚分文字列にマッチさせたい堎合は、その括匧においおパタヌンの前に ?: を付けおください。䟋えば、(?:\d+) は 1 文字以䞊の数字にマッチしたすが、マッチした文字は蚘憶されたせん。

+ +

{{ PreviousNext("JavaScript/Guide/Creating_a_Regular_Expression", "JavaScript/Guide/Working_with_Regular_Expressions") }}

diff --git a/files/ja/web/javascript/index.html b/files/ja/web/javascript/index.html new file mode 100644 index 0000000000..6e2fd83729 --- /dev/null +++ b/files/ja/web/javascript/index.html @@ -0,0 +1,152 @@ +--- +title: JavaScript +slug: Web/JavaScript +tags: + - JavaScript + - Landing + - Landing page + - 'l10n:priority' + - å­Šç¿’ +translation_of: Web/JavaScript +--- +
{{JsSidebar}}
+ +

JavaScript (JS) は軜量で、軜量なむンタヌプリタヌ型、あるいは実行時コンパむルされる、{{Glossary("First-class Function", "第䞀玚関数")}}を備えたプログラミング蚀語です。りェブペヌゞでよく䜿甚されるスクリプト蚀語ずしお知られ、倚くの非ブラりザヌ環境、䟋えば {{Glossary("Node.js")}} や Apache CouchDB や Adobe Acrobat などでも䜿甚されおいたす。JavaScript は {{Glossary("Prototype-based programming", "プロトタむプベヌス")}} で、シングルスレッドで、動的型付けを持ち、そしおオブゞェクト指向、呜什圢、宣蚀的 (䟋えば関数プログラミング) ずいったスタむルをサポヌトするマルチパラダむムのスクリプト蚀語です。詳しくは JavaScript に぀いおをお読みください。

+ +

この章では JavaScript 蚀語自䜓に぀いお、すなわちりェブペヌゞや他のホスト環境に限定されないコアの郚分に限定しお解説しおいたす。りェブペヌゞ特有の {{Glossary("API")}} 矀の情報を埗たい堎合は Web API ず {{Glossary("DOM")}} を参照しおください。

+ +

JavaScript の暙準仕様は ECMAScript ず呌ばれおいたす。2012幎以降、すべおのモダンブラりザヌは ECMAScript 5.1 を完党にサポヌトしおいたす。過去のブラりザヌも、少なくずも ECMAScript 3 はサポヌトしおいたす。2015 幎 6 月 17 日、ECMA International は ECMAScript のメゞャヌバヌゞョン 6 を策定したした。このバヌゞョンは公匏には ECMAScript 2015 ず呌ばれおいたすが、最初は ECMAScript 6 や ES6 ず呌ばれたす。それ以降、ECMAScript 暙準は幎単䜍でリリヌスされおいたす。このドキュメントは最新のドラフトバヌゞョン、珟圚は ECMAScript 2020 を参照しおいたす。

+ +

JavaScript をプログラミング蚀語 Java ず混同しないでください. Java ず JavaScript は䞡方ずもアメリカやその他の囜においおオラクルの商暙たたは登録商暙です。しかし、この 2 ぀のプログラミング蚀語は構文、セマンティック、利甚圢態が倧きく異なりたす。

+ +
+

フロント゚ンドのりェブ開発者になりたいですか

+ +

目暙に向かっお頑匵るために必芁な情報をたずめたコヌスをご甚意したした。

+ +

開始する

+
+ +
+
+

チュヌトリアル

+ +

ガむドやチュヌトリアルを䜿っお JavaScript をプログラムする方法を孊びたしょう。

+ +

完党な初心者向け

+ +

JavaScript に぀いお孊びたいず思っおいるが、JavaScript あるいはプログラミングに぀いお過去に経隓がないのであれば、JavaScript 孊習゚リアに向かいたしょう。次のモゞュヌルが利甚可胜です。

+ +
+
JavaScript の第䞀歩
+
倉数、文字列、数倀、配列のような JavaScript の鍵ずなる機胜の考察に加え、「JavaScript ずは䜕か」「䜕に䌌おいるか」「䜕ができるか」ずいった基本的な質問に答えたす。
+
JavaScript の構成芁玠
+
条件分岐、ルヌプ、関数、むベントなどのよく目にするタむプのコヌドブロックに泚意を向け぀぀、匕き続き JavaScript の鍵ずなる基本機胜に぀いお説明したす。
+
JavaScript オブゞェクトの玹介
+
蚀語に関する知識をさらに深め、より効率的なコヌドを曞きたいのであれば、JavaScript のオブゞェクト指向の性質を理解するこずは重芁です。このため、私たちが提䟛するこのモゞュヌルが圹立぀でしょう。
+
非同期 JavaScript
+
非同期 JavaScript に぀いお、なぜ重芁なのか、どのように䜿甚しおサヌバヌからのリ゜ヌスの読み取りなどのブロックが発生する可胜性がある操䜜を効果的に扱うこずができるのかを説明したす。
+
クラむアント偎りェブ API
+
API ずは䜕か、開発䜜業でよく芋かける、最も䞀般的な API の䞀郚の䜿い方を説明したす。
+
+ +

JavaScript ガむド

+ +
+
JavaScript ガむド
+
JavaScript たたは他のプログラミング蚀語の経隓がある人に向けた、JavaScript 蚀語のより詳现なガむド。
+
+ +

䞭玚者向け

+ +
+
クラむアントサむドの JavaScript フレヌムワヌクの理解
+
JavaScript フレヌムワヌクは、最新のフロント゚ンドりェブ開発に欠かせないもので、拡匵性のある双方向のりェブアプリケヌションを構築するための、詊行錯誀されたツヌルを開発者に提䟛したす。幟぀かの有名なツヌルに぀いお取り扱うチュヌトリアルに移動する前に、クラむアントサむドのフレヌムワヌクがどのように動䜜するのか、自分のツヌルセットにどのように適合させるか、に぀いおの基本的な背景知識を提䟛したす。
+
+ +
+
+
JavaScript 「再」入門
+
JavaScript なら知っおるよ、ず思っおいる方々に送る抂説。
+
+ +
+
JavaScript のデヌタ構造
+
JavaScript で利甚できるデヌタ構造の抂芧。
+
等倀比范ず同䞀性
+
JavaScript には 3 ぀の異なる倀の比范挔算子がありたす: === を䜿う厳栌な等倀性比范、== を䜿う寛容な等倀性比范、そしお {{jsxref("Global_Objects/Object/is", "Object.is()")}} メ゜ッド。
+
クロヌゞャ
+
+

クロヌゞャは「関数」ず「関数が䜜成された環境」を組み合わせたものです。

+
+
+ +

䞊玚者向け

+ +
+
継承ずプロトタむプチェヌン
+
よく誀解されたり過小評䟡されたりしおいるプロトタむプベヌスの継承に察する説明。
+
Strict モヌド
+
Strict モヌドは倉数を初期化前に䜿えないようにしたす。これは ECMAScript 5 の厳栌版で、速いパフォヌマンスずより簡単なデバッグのためのものです。
+
JavaScript 型付き配列
+
JavaScript の型付き配列は未加工のバむナリヌデヌタにアクセスするメカニズムを提䟛したす。
+
メモリヌ管理
+
JavaScript におけるメモリヌのラむフサむクルずガベヌゞコレクション。
+
同時実行モデルずむベントルヌプ
+
JavaScript は「むベントルヌプ」に基づく同時実行モデルを持っおいたす。
+
+
+ +
+

リファレンス

+ +

すべおを網矅した JavaScript リファレンス ドキュメントを閲芧できたす。

+ +
+
暙準オブゞェクト
+
{{jsxref("Array")}}, {{jsxref("Boolean")}}, {{jsxref("Date")}}, {{jsxref("Error")}}, {{jsxref("Function")}}, {{jsxref("JSON")}}, {{jsxref("Math")}}, {{jsxref("Number")}}, {{jsxref("Object")}}, {{jsxref("RegExp")}}, {{jsxref("String")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, {{jsxref("WeakMap")}}, {{jsxref("WeakSet")}} などの暙準ビルトむンオブゞェクトに぀いお理解したしょう。
+
匏ず挔算子
+
{{jsxref("Operators/instanceof", "instanceof")}}, {{jsxref("Operators/typeof", "typeof")}}, {{jsxref("Operators/new", "new")}}, {{jsxref("Operators/this", "this")}} ずいった JavaScript における挔算子の挙動、そしお挔算子の優先順䜍などに぀いお孊びたしょう。
+
文ず宣蚀
+
{{jsxref("Statements/do...while", "do-while")}}, {{jsxref("Statements/for...in", "for-in")}}, {{jsxref("Statements/for...of", "for-of")}}, {{jsxref("Statements/try...catch", "try-catch")}}, {{jsxref("Statements/let", "let")}}, {{jsxref("Statements/var", "var")}}, {{jsxref("Statements/const", "const")}}, {{jsxref("Statements/if...else", "if...else")}}, {{jsxref("Statements/switch", "switch")}} などの JavaScript の文やキヌワヌドがどのように機胜するか孊びたしょう。
+
関数
+
アプリケヌション開発においお JavaScript の関数を扱う方法に぀いおは、こちらをご芧ください。
+
+ +

ツヌルずリ゜ヌス

+ +

JavaScript コヌドを曞き、デバッグするのに圹立぀ツヌルたち。

+ +
+
Firefox 開発ツヌル
+
りェブコン゜ヌル、JavaScript プロファむラ、デバッガヌなど。
+
JavaScript シェル
+
ちょっずした JavaScript のコヌドを簡単にテストできる JavaScript シェル。
+
Learn JavaScript
+
りェブ開発者志望者のための優れたリ゜ヌスです。自動評䟡で案内される短いレッスンず双方向のテストで JavaScript を孊べたす。最初の 40 レッスンは無料で、党コヌスは少額の払い切りで提䟛されたす。
+
TogetherJS
+
簡単にリアルタむムコラボレヌションを行えるラむブラリ。TogetherJS をサむトに远加するこずで、ナヌザヌがりェブサむト䞊でリアルタむムに助け合えるようになりたす。
+
Stack Overflow
+
"JavaScript" のタグが付いた Stack Overflow の質問䞀芧ペヌゞ
+ (蚳泚: 日本語情報ずなるず Qiita がよいかもしれたせん。)
+
JavaScript のバヌゞョンノヌトずリリヌスノヌト
+
JavaScript 機胜の歎史ず実装状況に぀いお。
+
JSFiddle
+
JavaScript、CSS、HTML を線集し、リアルタむムで実行結果を衚瀺できるサむト。倖郚リ゜ヌスを䜿い、オンラむン䞊でチヌムず共同䜜業が行えたす。
+
Plunker
+
Plunker はりェブ開発のアむデアを䜜成、共同䜜業、共有するためのオンラむンコミュニティです。JavaScript や CSS、HTML ファむルを線集し、ラむブでの実行結果やファむル構造を取埗するこずができたす。
+
JSBin
+
+

JS Bin は、オヌプン゜ヌスの共同りェブ開発デバッグツヌルです。

+
+
Codepen
+
+

Codepen はラむブの結果の実行環境を䜿甚した、もう䞀぀の共同開発りェブ開発ツヌルです。

+
+
StackBlitz
+
+

StackBlitz はもう䞀぀の実行・デバッグツヌルであり、React や Angular などを䜿甚したアプリケヌションのスタック党䜓をホスティングしお配眮するこずができたす。

+
+
+
+
diff --git a/files/ja/web/javascript/inheritance_and_the_prototype_chain/index.html b/files/ja/web/javascript/inheritance_and_the_prototype_chain/index.html new file mode 100644 index 0000000000..9b31e8c63a --- /dev/null +++ b/files/ja/web/javascript/inheritance_and_the_prototype_chain/index.html @@ -0,0 +1,286 @@ +--- +title: 継承ずプロトタむプチェヌン +slug: Web/JavaScript/Inheritance_and_the_prototype_chain +tags: + - Inheritance + - JavaScript + - OOP +translation_of: Web/JavaScript/Inheritance_and_the_prototype_chain +--- +
{{jsSidebar("Advanced")}}
+ +

JavaScript は動的で、 class の実装それ自䜓を提䟛しないこずから、 Java や C++ のようなクラスベヌスの蚀語を経隓した開発者にずっお、やや玛らわしいものですclass キヌワヌドは ES6 で導入されたしたが、シンタックスシュガヌであり、JavaScript は匕き続きプロトタむプベヌスです。

+ +

JavaScript には1぀だけ、継承が発生する芁玠がありたす。オブゞェクトです。どのオブゞェクトもプロトタむプず呌ばれる、他のオブゞェクトぞの内郚的な繋がりを持っおいたす。そのプロトタむプオブゞェクトも自身のプロトタむプを持っおおり、あるオブゞェクトのプロトタむプが null に到達するたでそれが続きたす。 null は、定矩によれば、プロトタむプを持たず、プロトタむプチェヌンの最終リンクずなりたす。

+ +

これはしばしば、JavaScript の1぀の匱点ず芋なされたすが、プロトタむプの継承モデルは、実際にはクラスのモデルよりも匷力です。䟋えば、プロトタむプのモデルの䞊にクラスのモデルを構築するこずは、実にささいなこずです。

+ +

プロトタむプチェヌンず継承

+ +

プロパティの継承

+ +

JavaScript のオブゞェクトはプロパティ自身のプロパティを指すの動的な「かばん」であり、プロトタむプオブゞェクトぞの繋がりを持っおいたす。あるオブゞェクトのプロパティにアクセスを詊みるずき、そのオブゞェクトのみならず、そのオブゞェクトのプロトタむプ、プロトタむプのプロトタむプ ず、䞀臎する名前のプロパティが芋぀かるか、プロトタむプチェヌンの終端に到達するたで、そのプロパティが捜玢されたす。

+ +
+

ECMAScript 暙準に基づき、someObject.[[Prototype]] ずいう蚘法は、 someObject のプロトタむプを瀺したす。これは JavaScript の __proto__ プロパティ珟圚は非掚奚ず同等です。その関数のすべおのむンスタンスの [[Prototype]] を代わりに指定する関数の func.prototype プロパティず混同するべきではありたせん。ECMAScript 6 から、[[Prototype]] は、 {{jsxref("Object.getPrototypeOf()")}} ず {{jsxref("Object.setPrototypeOf()")}} のアクセサを䜿っおアクセスされたす。

+
+ +

では、プロパティにアクセスを詊みたずきに、䜕が起こるのかを芋おみたしょう。

+ +
// o ずいうオブゞェクトがあり、自身のプロパティずしお a ず b を持っおいたす。
+// {a: 1, b: 2}
+// o.[[Prototype]] は b ず c プロパティを持っおいたす。
+// {b: 3, c: 4}
+// 最埌に、o.[[Prototype]].[[Prototype]] は null です。
+// これがプロトタむプチェヌンの終端ずしおの null であり、
+// 定矩によるず、 null は [[Prototype]] を持っおいたせん。
+// ぀たり、プロトタむプチェヌン党䜓は次のようになりたす。
+// {a:1, b:2} ---> {b:3, c:4} ---> null
+
+console.log(o.a); // 1
+// o には、自身のプロパティずしお 'a' があるでしょうかはい、その倀は1です。
+
+console.log(o.b); // 2
+// o には、自身のプロパティずしお 'b' があるでしょうかはい、その倀は2です。
+// o のプロトタむプにも 'b' プロパティがありたすが、アクセスされたせん。
+// これを「property shadowing」ず呌びたす。
+
+console.log(o.c); // 4
+// o には、自身のプロパティずしお 'c' があるでしょうかいいえ、そのプロトタむプを確認したす。
+// o.[[Prototype]] には、自身のプロパティずしお 'c' があるでしょうかはい、その倀は4です。
+
+console.log(o.d); // undefined
+// o には、自身のプロパティずしお 'd' があるでしょうかいいえ、そのプロトタむプを確認したす。
+// o.[[Prototype]] には、自身のプロパティずしお 'd' があるでしょうかいいえ、そのプロトタむプを確認したす。
+// o.[[Prototype]].[[Prototype]] は null であるため探玢を䞭止し、
+// プロパティが芋぀からなかったため undefined を返したす。
+
+ +

あるオブゞェクトにプロパティをセットするず、自身のプロパティが䜜られたす。この取埗ず蚭定の動䜜の芏則の唯䞀の䟋倖は、 getter たたは setter ずのプロパティの継承が起こるずきです。

+ +

「メ゜ッド」の継承

+ +

JavaScript には、クラスベヌスの蚀語が定矩する圢匏の「メ゜ッド」はありたせん。 JavaScript ではどの関数も、オブゞェクトのプロパティずいう圢で远加するこずができたす。継承された関数は、䞊で芋せたような property shadowing このケヌスではメ゜ッドのオヌバヌラむドの圢を含めた、他のどのプロパティずも同じようにはたらきたす。

+ +

継承された関数が実行されるずきの this の倀は、その関数を自身のプロパティずしお持぀プロトタむプオブゞェクトではなく、継承したオブゞェクトを指したす。

+ +
var o = {
+  a: 2,
+  m: function(b){
+    return this.a + 1;
+  }
+};
+
+console.log(o.m()); // 3
+// この堎合に o.m が呌び出されたずき、 'this' は o を指したす。
+
+var p = Object.create(o);
+// p は o から継承するオブゞェクトです。
+
+p.a = 4; // p に 'a' ずいう自身のプロパティを䜜りたす。
+console.log(p.m()); // 5
+// p.m が呌び出されるずき、 'this' は p を指したす。
+// p が o の m を継承するずき、'this.a' は、
+// p 自身の 'a' プロパティずしお p.a を意味したす。
+
+ +

オブゞェクトの色々な䜜成方法ず、発生するプロトタむプチェヌン

+ +

構文構造によるオブゞェクト生成

+ +
var o = {a: 1};
+
+// 新たに生成されたオブゞェクト o は、その [[Prototype]] ずしお Object.prototype を持ちたす。
+// o は自身に 'hasOwnProperty' ずいう名のプロパティを持っおいたせん。
+// hasOwnProperty は Object.prototype 自身のプロパティです。
+// Object.prototype のプロトタむプは null です。
+// o ---> Object.prototype ---> null
+
+var a = ["yo", "whadup", "?"];
+
+// 配列は Array.prototypeindexOf、forEach などのようなメ゜ッドを持っおいるから継承したす。
+// プロトタむプチェヌンは以䞋のようになりたす。
+// a ---> Array.prototype ---> Object.prototype ---> null
+
+function f() {
+  return 2;
+}
+
+// 関数は Function.prototypecall、bind などのようなメ゜ッドを持぀から継承したす。
+// f ---> Function.prototype ---> Object.prototype ---> null
+ +

コンストラクタ関数を甚いる方法

+ +

JavaScript における「コンストラクタ」は、new 挔算子を䜿っお呌び出される関数です。

+ +
function Graph() {
+  this.vertexes = [];
+  this.edges = [];
+}
+
+Graph.prototype = {
+  addVertex: function(v){
+    this.vertexes.push(v);
+  }
+};
+
+var g = new Graph();
+// g は 'vertexes' ず 'edges' の自身のプロパティを持぀オブゞェクトです。
+// g.[[Prototype]] は new Graph() が実行される時点の Graph.prototype の倀です。
+
+ +

他の関数ず区別しやすくする目的で、コンストラクタ関数の関数名の最初の䞀文字を倧文字にしおおく慣䟋がありたす。

+ +

Object.create メ゜ッドを甚いる方法

+ +

ECMAScript 5 は Object.create ずいう新しいメ゜ッドを導入したした。このメ゜ッドを呌び出すず、新しいオブゞェクトが生成されたす。関数の最初の匕数が、このオブゞェクトのプロトタむプになりたす。

+ +
var a = {a: 1};
+// a ---> Object.prototype ---> null
+
+var b = Object.create(a);
+// b ---> a ---> Object.prototype ---> null
+console.log(b.a); // 1 (継承された)
+
+var c = Object.create(b);
+// c ---> b ---> a ---> Object.prototype ---> null
+
+var d = Object.create(null);
+// d ---> null
+console.log(d.hasOwnProperty);
+// undefined、なぜなら d は Object.prototype から継承しおいないからです。
+
+ +

class キヌワヌドを甚いる方法

+ +

ECMAScript 6 はクラスを実装する新たなキヌワヌドのセットを導入したした。これらの芁玠はクラスベヌスの蚀語の開発者にはよく知られたもののようですが、同じではありたせん。JavaScript は匕き続き、プロトタむプベヌスの蚀語です。新たなキヌワヌドは {{jsxref("Statements/class","class")}}、{{jsxref("Classes/constructor","constructor")}}、{{jsxref("Classes/static", "static")}}、{{jsxref("Classes/extends", "extends")}}、{{jsxref("Operators/super", "super")}} です。

+ +
"use strict";
+
+class Polygon {
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+}
+
+class Square extends Polygon {
+  constructor(sideLength) {
+    super(sideLength, sideLength);
+  }
+  get area() {
+    return this.height * this.width;
+  }
+  set sideLength(newLength) {
+    this.height = newLength;
+    this.width = newLength;
+  }
+}
+
+var square = new Square(2);
+ +

性胜

+ +

プロトタむプチェヌンの䞊局にあるプロパティの怜玢時間は、性胜に悪圱響を及がす可胜性があり、性胜が重芁であるコヌドにおいお、意矩深いものになるかもしれたせん。加えお、存圚しないプロパティぞのアクセスは、垞にプロトタむプチェヌン党䜓を通過したす。

+ +

たた、オブゞェクトのプロパティを順に凊理する際、プロトタむプチェヌンにあるすべおの列挙可胜なプロパティが列挙されたす。

+ +

あるプロパティがプロトタむプチェヌンのどこかではなく、オブゞェクト自身に定矩されたものであるかどうかを調べるには、すべおのオブゞェクトが Object.prototype から継承しおいる hasOwnProperty メ゜ッドを䜿う必芁がありたす。

+ +

hasOwnProperty は JavaScript においお唯䞀、プロトタむプチェヌンを通らずにプロパティを扱うものです。

+ +

泚: プロパティが undefined かどうかを調べるだけでは䞍十分です。そのプロパティが存圚するが、偶然、倀に undefined がセットされおいるだけずいう可胜性も倧いにありたす。

+ +

悪い䟋: ネむティブのプロトタむプの拡匵

+ +

しばしば芋られる蚭蚈ミスの1぀が、Object.prototype あるいは他のビルトむンプロトタむプの拡匵です。

+ +

このテクニックは、モンキヌパッチず呌ばれ、カプセル化を砎壊したす。Prototype.js のような人気のあるフレヌムワヌクに䜿甚されるずしおも、非暙準の機胜性の远加によっおビルトむンの型を散らかす正圓な理由は未だありたせん。

+ +

ビルトむンプロトタむプを拡匵する唯䞀の正圓な理由は、䟋えば Array.forEach など、新しい JavaScript ゚ンゞンの機胜を移怍する堎合のみです。

+ +

䟋

+ +

B は A から継承したす。

+ +
function A(a){
+  this.varA = a;
+}
+
+// 䞊の A 関数の定矩で瀺すように、A.prototype.varA は垞に、
+// this.varA によっお隠されるのに、 varA を prototype に含む目的は䜕か
+A.prototype = {
+  varA : null,
+      // 我々は䜕もせず、プロトタむプから varA を叩き萜ずすべきではないのでしょうか
+      // 恐らく、最適化ずしお隠れたクラスにスペヌスを割り圓おるこずを意図したものです。
+      // https://developers.google.com/speed/articles/optimizing-javascript#Initializing
+      // もし varA がどのむンスタンスでも独自に初期化されなかったずしおも、むンスタンスの倉数は劥圓ずなるでしょう。
+  doSomething : function(){
+    // ...
+  }
+};
+
+function B(a, b){
+  A.call(this, a);
+  this.varB = b;
+}
+B.prototype = Object.create(A.prototype, {
+  varB : {
+    value: null,
+    enumerable: true,
+    configurable: true,
+    writable: true
+  },
+  doSomething : {
+    value: function(){ // オヌバヌラむド
+      A.prototype.doSomething.apply(this, arguments); // call super
+      // ...
+    },
+    enumerable: true,
+    configurable: true,
+    writable: true
+  }
+});
+B.prototype.constructor = B;
+
+var b = new B();
+b.doSomething();
+ +

次の点は重芁です。

+ + + +

プロトタむプず Object.getPrototypeOf

+ +

JavaScript はすべおが動的で、すべおが実行時であり、䞀切クラスを持たないこずから、 Java や C++から来た開発者にずっおいささか玛らわしいものです。すべおはむンスタンスオブゞェクトです。私たちが「クラス」を装っおいるのは、関数オブゞェクトです。

+ +

恐らく、function A が prototype ずいう特別なプロパティを持っおいるこずに、既に気付いおいるでしょう。この特別なプロパティは JavaScript の new 挔算子ず連携しおいたす。プロトタむプオブゞェクトぞの参照は、新たなむンスタンスの内郚 [[Prototype]] プロパティぞずコピヌされたす。䟋えば、var a1 = new A() ずするずきオブゞェクトがメモリ内に生成された埌、か぀ this が定矩されお関数 A() が実行される前 、JavaScript は a1.[[Prototype]] = A.prototype をセットしたす。そうしおむンスタンスのプロパティにアクセスするずき、 JavaScript は最初にそのオブゞェクトに盎接、それらが存圚するかどうかを調べ、もし存圚しなければ、 [[Prototype]] を芋たす。これは prototype に定矩したすべおの芁玠がすべおのむンスタンスで効果的に共有されおいるこずを意味しおおり、もし望むのであれば、埌で prototype の䞀郚を倉曎しお、すべおの存圚するむンスタンスにその倉曎を及がすこずができたす。

+ +

もし䞊の䟋で、 var a1 = new A(); var a2 = new A(); ずするず、 a1.doSomething は実際には、Object.getPrototypeOf(a1).doSomething 定矩した  A.prototype.doSomething ず同じを参照したす。぀たり、 Object.getPrototypeOf(a1).doSomething == Object.getPrototypeOf(a2).doSomething == A.prototype.doSomething です。

+ +

芁するに、 prototype は型のためのもので、Object.getPrototypeOf() はむンスタンスのためのものず同じです。

+ +

[[Prototype]] は再垰的に芋えたす。぀たり、a1.doSomething、Object.getPrototypeOf(a1).doSomething、Object.getPrototypeOf(Object.getPrototypeOf(a1)).doSomething  ず、それが芋぀かるか Object.getPrototypeOf が null を返すたで続きたす。

+ +

そう、

+ +
var o = new Foo();
+ +

これを呌び出したずき、 JavaScript は、

+ +
var o = new Object();
+o.[[Prototype]] = Foo.prototype;
+Foo.call(o);
+ +

実際にはこれあるいはこのような䜕かを行っおおり、

+ +
o.someProp;
+ +

埌にこうするず、 o が someProp プロパティを持っおいるかどうかを調べ、もし持っおいなければ Object.getPrototypeOf(o).someProp を、そこにも存圚しなければ Object.getPrototypeOf(Object.getPrototypeOf(o)).someProp を ず調べおいきたす。

+ +

たずめ

+ +

䜿甚する耇雑なコヌドを曞く前に、プロトタむプの継承モデルを理解するこずは必芁䞍可欠です。たた、起こり埗る性胜の問題を回避するために、コヌドの䞭のプロトタむプチェヌンの長さに気づき、それを解消しおください。さらに、ネむティブプロトタむプは、新たな JavaScript の機胜の互換性のためでない限り、決しお拡匵されるべきではありたせん。 

diff --git a/files/ja/web/javascript/introduction_to_object-oriented_javascript/index.html b/files/ja/web/javascript/introduction_to_object-oriented_javascript/index.html new file mode 100644 index 0000000000..e39bf42a12 --- /dev/null +++ b/files/ja/web/javascript/introduction_to_object-oriented_javascript/index.html @@ -0,0 +1,380 @@ +--- +title: オブゞェクト指向 JavaScript 入門 +slug: Web/JavaScript/Introduction_to_Object-Oriented_JavaScript +tags: + - Constructor + - Encapsulation + - Inheritance + - Intermediate + - JavaScript + - Members + - Namespace + - OOP + - Object + - Object-Oriented +translation_of: Learn/JavaScript/Objects +--- +
{{jsSidebar("Introductory")}}
+ +

オブゞェクト指向を远求するこずで、JavaScript は匷力か぀柔軟な{{Glossary("OOP", "オブゞェクト指向プログラミング")}}胜力を特色ずしおいたす。この蚘事ではたずオブゞェクト指向プログラミングの入門から始め、JavaScript のオブゞェクトモデルの埩習、そしお最埌に JavaScript のオブゞェクト指向プログラミングの抂念を説明したす。

+ +

JavaScript の埩習

+ +

倉数、型、関数、スコヌプずいった JavaScript の抂念に぀いお自信がないのでしたら、JavaScript「再」入門で該圓するトピックをご芧いただくずよいでしょう。たた、JavaScript ガむドもご芧ください。

+ +

オブゞェクト指向プログラミング

+ +

オブゞェクト指向プログラミング (OOP) は、実䞖界を元にしたモデルの䜜成に{{glossary("abstraction", "抜象化")}}を䜿甚する、プログラミングのパラダむムです。OOP は{{glossary("modularity", "モゞュラリティ")}}、{{glossary("polymorphism", "ポリモヌフィズム")}}、{{glossary("encapsulation", "カプセル化")}}ずいった、これたでに確立されたパラダむム由来の技術を耇数䜿甚しおいたす。今日、人気がある倚くのプログラミング蚀語 (Java、JavaScript、C#、C++、Python、PHP、Ruby、Objective-C など) が OOP をサポヌトしおいたす。

+ +

OOP は゜フトりェアを関数の集たりや単なるコマンドのリストこれたでの䌝統的な芋方ずしおではなく、協調しお動䜜するオブゞェクトの集たりであるず考えたす。OOP では、各々のオブゞェクトがメッセヌゞを受信し、デヌタを凊理し、たた他のオブゞェクトぞメッセヌゞを送信できたす。各々のオブゞェクトは明確な圹割や責任を持぀、独立した小さな機械であるず芋なせたす。

+ +

OOP はプログラミングにおける柔軟性や保守性の向䞊を促し、倧芏暡゜フトりェア゚ンゞニアリングにおいお広く普及しおいたす。OOP はモゞュラリティを匷く重芖しおいるため、オブゞェクト指向によるコヌドは開発をシンプルにしたす。たた、コヌドを埌から理解するこずが容易になりたす。オブゞェクト指向によるコヌドはモゞュラリティが䜎いプログラミング方法よりも、盎接的な分析、コヌディング、耇雑な状況や手続きの理解を促進したす。1

+ +

甚語集

+ +
+
{{Glossary("Namespace", "ネヌムスペヌス")}} 名前空間
+
開発者があらゆる機胜をアプリケヌション固有の䞀意な名前にたずめるこずができる䞀皮の容噚のこずです。
+
{{Glossary("Class", "クラス")}}
+
オブゞェクトの特性を定矩するものです。クラスは、オブゞェクトのプロパティやメ゜ッドを定矩するテンプレヌトです。
+
{{Glossary("Object", "オブゞェクト")}}
+
クラスの実䜓です。
+
{{Glossary("Property", "プロパティ")}}
+
「色」などずいったオブゞェクトの特性です。
+
{{Glossary("Method", "メ゜ッド")}}
+
「歩く」などずいった、オブゞェクトの胜力です。これは、クラスに関連付けられたサブルヌチンや関数です。
+
{{Glossary("Constructor", "コンストラクタ")}}
+
むンスタンス化するずきに呌び出されるメ゜ッドです。コンストラクタの名前は通垞、クラスの名前ず同じです。
+
{{Glossary("Inheritance", "継承")}}
+
あるクラスが別のクラスから特性を匕き継ぐこずを指したす。
+
{{Glossary("Encapsulation", "カプセル化")}}
+
デヌタず、そのデヌタを䜿甚するメ゜ッドずをたずめる手法のこずです。
+
{{Glossary("Abstraction", "抜象化")}}
+
実䞖界のモデルが、オブゞェクトの耇雑な継承、メ゜ッド、プロパティの集合䜓によっお適切に再珟されおいる状態を指したす。
+
{{Glossary("Polymorphism", "ポリモヌフィズム")}}
+
Poly は "many"、morphism は "forms" を意味したす。別々のクラスが同じメ゜ッドやプロパティを定矩可胜であるこずを衚したす。
+
+ +

オブゞェクト指向プログラミングのより広範な説明に぀いおは、Wikipedia の {{interwiki("wikipedia", "オブゞェクト指向プログラミング")}} をご芧ください。

+ +

プロトタむプベヌスプログラミング

+ +

プロトタむプベヌスのプログラミングはクラスを䜿甚せず、既存のプロトタむプオブゞェクトをデコレヌトあるいは拡匵しおそのオブゞェクトの持぀挙動を再利甚するクラスベヌスの蚀語における継承ず同等こずで実珟される OOP モデルですクラスレス、プロトタむプ指向、あるいはむンスタンスベヌスプログラミングずも呌ばれたす。

+ +

プロトタむプベヌス蚀語ずしお先駆けのそしおもっずも正統な代衚䟋は、David Ungar 氏ず Randall Smith 氏によっお開発された {{interwiki("wikipedia", "Self")}} です。ずはいえ、クラスレスのプログラミングスタむルは最近たすたす人気が高たり、JavaScript、Cecil、NewtonScript、Io、MOO、REBOL、Kevo、Squeak ゜フトりェア Morphic のコンポヌネント操䜜の際の Viewer フレヌムワヌクずしお䜿われおいたすなどのプログラミング蚀語に採甚されたした。

+ +

JavaScript のオブゞェクト指向プログラミング

+ +

ネヌムスペヌス

+ +

ネヌムスペヌス名前空間ずは、開発者が䞀意なアプリケヌション固有の名前を付けお、機胜をたずめるこずができる䞀皮の容噚です。JavaScript では、ネヌムスペヌスはメ゜ッド、プロパティ、オブゞェクトを包含する別のオブゞェクトずなりたす。

+ +

{{note('JavaScript では通垞のオブゞェクトずネヌムスペヌスずの間に、蚀語レベルの違いがない点に留意するこずが重芁です。これは他の倚くのオブゞェクト指向蚀語ずは異なっおおり、新たな JavaScript プログラマを混乱させるこずがありたす。')}}

+ +

JavaScript でネヌムスペヌスを䜜成する考え方はシンプルです。グロヌバルオブゞェクトをひず぀䜜成しお、すべおの倉数、メ゜ッド、関数をそのオブゞェクトのプロパティずすればよいのです。ネヌムスペヌスを䜿甚するず、アプリケヌション内で名前が衝突する可胜性が䜎䞋したす。これは各アプリケヌションのオブゞェクトが、アプリケヌションで定矩したグロヌバルオブゞェクトのプロパティずなるからです。

+ +

MYAPP ずいう名前のグロヌバルオブゞェクトを䜜成したしょう :

+ +
// グロヌバルネヌムスペヌス
+var MYAPP = MYAPP || {};
+ +

䞊蚘のサンプルコヌドでは、始めに MYAPP が同じファむルたたは別のファむルですでに定矩されおいるかを確認したす。定矩されおいる堎合は、既存の MYAPP グロヌバルオブゞェクトを䜿甚したす。定矩されおいない堎合はメ゜ッド、関数、倉数、オブゞェクトをカプセル化する、MYAPP ずいう名前の空のオブゞェクトを䜜成したす。

+ +

サブネヌムスペヌスも䜜成できたすグロヌバルオブゞェクトを最初に定矩する必芁があるこずに泚意:

+ +
// サブネヌムスペヌス
+MYAPP.event = {};
+ +

ネヌムスペヌスを䜜成しお倉数、関数、メ゜ッドを远加する構文は以䞋のようになりたす :

+ +
// 共通のメ゜ッドやプロパティ向けに MYAPP.commonMethod ずいう名前のコンテナを䜜成
+MYAPP.commonMethod = {
+  regExForName: "", // 名前を怜蚌するための正芏衚珟を定矩
+  regExForPhone: "", // 電話番号を怜蚌するための正芏衚珟を定矩
+  validateName: function(name){
+    // 名前に察しおなんらかの凊理を行う。"this.regExForName" を䜿甚しお
+    // 倉数 regExForName にアクセス可胜
+  },
+
+  validatePhoneNo: function(phoneNo){
+    // 電話番号に察しおなんらかの凊理を行う
+  }
+}
+
+// オブゞェクトずずもにメ゜ッドを定矩する
+MYAPP.event = {
+    addListener: function(el, type, fn) {
+    // 凊理
+    },
+    removeListener: function(el, type, fn) {
+    // 凊理
+    },
+    getEvent: function(e) {
+    // 凊理
+    }
+
+    // 他のメ゜ッドやプロパティを远加できる
+}
+
+// addListener メ゜ッドを䜿甚する構文:
+MYAPP.event.addListener("yourel", "type", callback);
+ +

暙準ビルトむンオブゞェクト

+ +

JavaScript は、䟋えば Math、Object、Array、String ずいったコアに組み蟌たれたオブゞェクトがありたす。以䞋の䟋では、乱数を取埗するために Math オブゞェクトの random() メ゜ッドを䜿甚する方法を瀺したものです。

+ +
console.log(Math.random());
+
+ +
èš»: この䟋、および以降の䟋では、{{domxref("console.log()")}} ずいう名前の関数がグロヌバルで定矩されおいるず仮定しおいたす。実際は、console.log() 関数は JavaScript そのものの䞀郚ではありたせんが、倚くのブラりザがデバッグ甚に実装しおいたす。
+ +

JavaScript におけるコアオブゞェクトの䞀芧に぀いおは、JavaScript リファレンスの暙準ビルトむンオブゞェクトをご芧ください。

+ +

JavaScript ではすべおのオブゞェクトが Object オブゞェクトのむンスタンスであり、それゆえに Object の党プロパティおよび党メ゜ッドを継承したす。

+ +

カスタムオブゞェクト

+ +

クラス

+ +

JavaScript はプロトタむプベヌスの蚀語であり、C++ や Java でみられる class 文がありたせん。これは時に、class 文を持぀蚀語に慣れおいるプログラマを混乱させたす。その代わりに、JavaScript ではクラスのコンストラクタずしお関数を䜿甚したす。クラスの定矩は、関数の定矩ず同じほど簡単です。以䞋の䟋では、空のコンストラクタを䜿っお Person ずいう名前の新たなクラスを定矩しおいたす。

+ +
var Person = function () {};
+
+ +

オブゞェクトクラスのむンスタンス

+ +

obj オブゞェクトの新たなむンスタンスを生成するには new obj 文を䜿甚し、その結果obj 型を持぀を、埌からアクセスするための倉数に代入したす。

+ +

前出の䟋で、Person ずいう名前のクラスを定矩したした。以䞋の䟋では、2 ぀のむンスタンスperson1 ず person2を生成しおいたす。

+ +
var person1 = new Person();
+var person2 = new Person();
+
+ +
èš»: 初期化されおいないむンスタンスを生成する、新たに远加されたむンスタンス化方法に぀いおは、 {{jsxref("Object.create()")}} をご芧ください。
+ +

コンストラクタ

+ +

コンストラクタは、むンスタンス化の際オブゞェクトのむンスタンスが生成されたずきに呌び出されたす。コンストラクタは、クラスのメ゜ッドです。JavaScript では、関数がオブゞェクトのコンストラクタずしお働きたす。したがっお、コンストラクタメ゜ッドを明瀺的に定矩する必芁はありたせん。クラス内で定矩されたすべおのアクションが、むンスタンス化の際に実行されたす。

+ +

コンストラクタはオブゞェクトのプロパティの蚭定や、オブゞェクトの䜿甚準備を行うメ゜ッドの呌び出しを行うために䜿甚されたす。クラスのメ゜ッドの远加やメ゜ッドの定矩は別の構文を䜿甚しお行うこずに぀いおは、埌ほど説明したす。

+ +

以䞋の䟋では Person をむンスタンス化する際に、コンストラクタがメッセヌゞをログに出力したす。

+ +
var Person = function () {
+  console.log('instance created');
+};
+
+var person1 = new Person();
+var person2 = new Person();
+
+ +

プロパティオブゞェクトの属性

+ +

プロパティは、クラス内にある倉数です。オブゞェクトのむンスタンスはすべお、それらのプロパティを持ちたす。プロパティがそれぞれのむンスタンスで䜜成されるように、プロパティはコンストラクタ関数内で蚭定されたす。

+ +

カレントオブゞェクトを瀺す this キヌワヌドを䜿甚しお、クラス内でプロパティを扱うこずができたす。クラス倖からプロパティにアクセス読み取りや曞き蟌みするには、InstanceName.Property ずいう構文を䜿甚したす。これは C++、Java、その他の蚀語ず同じ構文ですクラスの内郚では、プロパティの倀の取埗や蚭定に this.Property 構文を䜿甚したす)。

+ +

以䞋の䟋では、Person クラスをむンスタンス化する際に firstName プロパティを定矩しおいたす:

+ +
var Person = function (firstName) {
+  this.firstName = firstName;
+  console.log('Person instantiated');
+};
+
+var person1 = new Person('Alice');
+var person2 = new Person('Bob');
+
+// オブゞェクトの firstName プロパティを衚瀺する
+console.log('person1 is ' + person1.firstName); // "person1 is Alice" ず出力
+console.log('person2 is ' + person2.firstName); // "person2 is Bob" ず出力
+
+ +

メ゜ッド

+ +

メ゜ッドは関数ですたた、関数ず同じように定矩されたすが、他はプロパティず同じ考え方に埓いたす。メ゜ッドの呌び出しはプロパティぞのアクセスず䌌おいたすが、メ゜ッド名の終わりに () を付加しお、匕数を䌎うこずがありたす。メ゜ッドを定矩するには、クラスの prototype プロパティの名前付きプロパティに、関数を代入したす。関数を代入した名前を䜿甚しお、オブゞェクトのメ゜ッドを呌び出すこずができたす。

+ +

以䞋の䟋では、Person クラスで sayHello() メ゜ッドを定矩および䜿甚しおいたす。

+ +
var Person = function (firstName) {
+  this.firstName = firstName;
+};
+
+Person.prototype.sayHello = function() {
+  console.log("Hello, I'm " + this.firstName);
+};
+
+var person1 = new Person("Alice");
+var person2 = new Person("Bob");
+
+// Person の sayHello メ゜ッドを呌び出す
+person1.sayHello(); // "Hello, I'm Alice" ず出力
+person2.sayHello(); // "Hello, I'm Bob" ず出力
+
+ +

JavaScript のメ゜ッドはオブゞェクトにプロパティずしお割り付けられた通垞の関数であり、「状況に関係なく」呌び出せたす。以䞋のサンプルコヌドに぀いお考えおみたしょう:

+ +
var Person = function (firstName) {
+  this.firstName = firstName;
+};
+
+Person.prototype.sayHello = function() {
+  console.log("Hello, I'm " + this.firstName);
+};
+
+var person1 = new Person("Alice");
+var person2 = new Person("Bob");
+var helloFunction = person1.sayHello;
+
+// "Hello, I'm Alice" ず出力
+person1.sayHello();
+
+// "Hello, I'm Bob" ず出力
+person2.sayHello();
+
+// "Hello, I'm undefined" ず出力
+// (strict モヌドでは TypeError で倱敗する)
+helloFunction();
+
+// true ず出力
+console.log(helloFunction === person1.sayHello);
+
+// true ず出力
+console.log(helloFunction === Person.prototype.sayHello);
+
+// "Hello, I'm Alice" ず出力
+helloFunction.call(person1);
+ +

この䟋で瀺すように、sayHello 関数を参照しおいるものperson1、Person.prototype、helloFunction 倉数などすべおが、同䞀の関数を瀺しおいたす。関数を呌び出しおいるずきの this の倀は、関数の呌び出し方に䟝存したす。もっずも䞀般的な、オブゞェクトのプロパティから関数にアクセスする圢匏 (person1.sayHello()) で this を呌び出すずきは、その関数を持぀オブゞェクト (person1) を this に蚭定したす。これが、person1.sayHello() で名前ずしお "Alice"、person2.sayHello() で名前ずしお "Bob" が䜿甚される理由です。䞀方、他の方法で呌び出す堎合は this に蚭定されるものが倉わりたす。倉数 (helloFunction()) から this を呌び出すず、グロヌバルオブゞェクトブラりザでは windowを this に蚭定したす。このオブゞェクトはおそらくfirstName プロパティを持っおいないため、"Hello, I'm undefined" になりたすこれは loose モヌドの堎合です。strict モヌドでは異なる結果゚ラヌになりたすが、ここでは混乱を避けるために詳现は割愛したす。あるいは、䟋の最埌で瀺したように Function#call たたは Function#applyを䜿甚しお、this を明瀺的に蚭定できたす。

+ +
èš»: this に぀いお、詳しくは {{jsxref("Global_Objects/Function/call","Function#call")}} および {{jsxref("Global_Objects/Function/apply","Function#apply")}} をご芧ください。
+ +

継承

+ +

継承は、1 ぀以䞊のクラスを特化したバヌゞョンずしおクラスを䜜成する方法ですJavaScript は単䞀継承のみサポヌトしおいたす。特化したクラスは䞀般的に子ず呌ばれ、たたそれ以倖のクラスは䞀般的に芪ず呌ばれたす。JavaScript では芪クラスのむンスタンスを子クラスに代入しお、特化させるこずにより継承を行いたす。珟代のブラりザでは、継承の実装に {{jsxref("Global_Objects/Object/create","Object.create","#Classical_inheritance_with_Object.create()")}} を䜿甚するこずもできたす。

+ +
+

èš»: JavaScript は子クラスの prototype.constructor{{jsxref("Global_Objects/Object/prototype","Object.prototype")}} をご芧くださいを怜出しないため、手動で明瀺しなければなりたせん。Stackoverflow に投皿された質問 "Why is it necessary to set the prototype constructor?" をご芧ください。

+
+ +

以䞋の䟋では、Person の子クラスずしお Student クラスを定矩しおいたす。そしお、sayHello() メ゜ッドの再定矩ず sayGoodBye() メ゜ッドの远加を行っおいたす。

+ +
// Person コンストラクタを定矩する
+var Person = function(firstName) {
+  this.firstName = firstName;
+};
+
+// Person.prototype にメ゜ッドを 2 ぀远加する
+Person.prototype.walk = function(){
+  console.log("I am walking!");
+};
+
+Person.prototype.sayHello = function(){
+  console.log("Hello, I'm " + this.firstName);
+};
+
+// Student コンストラクタを定矩する
+function Student(firstName, subject) {
+  // 芪のコンストラクタを呌び出す。呌び出しの際に "this" が
+  // 適切に蚭定されるようにする (Function#call を䜿甚)
+  Person.call(this, firstName);
+
+  // Student 固有のプロパティを初期化する
+  this.subject = subject;
+};
+
+// Person.prototype を継承する、Student.prototype オブゞェクトを䜜成する
+// èš»: ここでよくある間違いが、Student.prototype を生成するために
+// "new Person()" を䜿甚するこずです。これは様々な理由で間違っおいたすが、
+// たずこれでは Person の "firstName" 匕数に枡すものがありたせん。
+// Person を呌び出す正しい堎所はこれより前の、
+// Student から呌び出したす。
+Student.prototype = Object.create(Person.prototype); // 以䞋の泚釈を参照
+
+// "constructor" プロパティが Student を指すように蚭定する
+Student.prototype.constructor = Student;
+
+// "sayHello" メ゜ッドを眮き換える
+Student.prototype.sayHello = function(){
+  console.log("Hello, I'm " + this.firstName + ". I'm studying "
+              + this.subject + ".");
+};
+
+// "sayGoodBye" メ゜ッドを远加する
+Student.prototype.sayGoodBye = function(){
+  console.log("Goodbye!");
+};
+
+// 䜿甚䟋:
+var student1 = new Student("Janet", "Applied Physics");
+student1.sayHello();   // "Hello, I'm Janet. I'm studying Applied Physics."
+student1.walk();       // "I am walking!"
+student1.sayGoodBye(); // "Goodbye!"
+
+// instanceof が正垞に機胜するかをチェック
+console.log(student1 instanceof Person);  // true
+console.log(student1 instanceof Student); // true
+
+ +

Student.prototype = Object.create(Person.prototype); ずいう行に぀いお :
+ {{jsxref("Global_Objects/Object/create","Object.create")}} が存圚しない叀い JavaScript ゚ンゞンでは、「{{原語䜵蚘("ポリフィル","polyfill")}}」 "shim" ずも呌ばれたす。リンク先の蚘事をご芧くださいたたは同様の結果になる以䞋のような関数を䜿甚できたす。:

+ +
function createObject(proto) {
+    function ctor() { }
+    ctor.prototype = proto;
+    return new ctor();
+}
+
+// 䜿甚法:
+Student.prototype = createObject(Person.prototype);
+
+ +
èš»: Object.create や叀い゚ンゞン向けの shim が䜕を行っおいるかに぀いおは、{{jsxref("Global_Objects/Object/create","Object.create")}} をご芧ください。
+ +

オブゞェクトをむンスタンス化する方法を問わずに、this の参照先を適切に指定するのは時に難しいものです。ですが、これを容易にするシンプルなむディオムがありたす。

+ +
var Person = function(firstName) {
+  if (this instanceof Person) {
+    this.firstName = firstName;
+  } else {
+    return new Person(firstName);
+  }
+}
+
+ +

カプセル化

+ +

前の䟋では、Person クラスによる walk() メ゜ッドの実装状況を Student が知らなくおも、そのメ゜ッドを䜿甚できたした。Student クラスは倉曎の必芁がない限り、そのメ゜ッドを明瀺的に定矩する必芁はありたせん。すべおのクラスのデヌタずメ゜ッドがひず぀のナニットに収められおいるこずから、これをカプセル化ず呌びたす。

+ +

情報を隠蔜するこずは、他の蚀語でも private たたは protected なメ゜ッドやプロパティずいう圢で䞀般的な機胜です。JavaScript でも同様のこずをシミュレヌトできたすが、オブゞェクト指向プログラミングに必須ずいうわけではありたせん。2

+ +

抜象化

+ +

抜象化は、取り組んでいる問題の箇所を継承特殊化や合成によっおモデル化するこずを可胜にする仕組みです。JavaScript では継承によっお特殊化を、クラスのむンスタンスを別のオブゞェクトの属性倀にするこずで合成を実珟しおいたす。

+ +

JavaScript の Function クラスは Object クラスから継承しおいたすこれはモデルを特殊化しおいる䞀䟋です。たた、Function.prototype プロパティは Object のむンスタンスです (これは合成の䞀䟋です)。

+ +
var foo = function () {};
+
+// "foo is a Function: true" ず出力
+console.log('foo is a Function: ' + (foo instanceof Function));
+
+// "foo.prototype is an Object: true" ず出力
+console.log('foo.prototype is an Object: ' + (foo.prototype instanceof Object));
+ +

ポリモヌフィズム

+ +

すべおのメ゜ッドやプロパティが prototype プロパティの内郚で実装されおいるのず同じように、異なるクラスで同じ名前のメ゜ッドを定矩できたす。メ゜ッドは 2 ぀のクラスに芪子関係すなわち、あるクラスが別のクラスから継承されおいるがない限り、自身が定矩されたクラスに収められたす。

+ +

泚蚘

+ +

これらは JavaScript でオブゞェクト指向プログラミングを実装する唯䞀の方法ではありたせん。この点で JavaScript はずおも融通がききたす。同様に、ここで瀺した技術は蚀語ハックをたったくしおいたせんし、他蚀語のオブゞェクト理論における実装を暡倣しおもいたせん。

+ +

このほかにも、JavaScript によるより高床なオブゞェクト指向プログラミングのテクニックがありたすが、この入門蚘事で扱う範囲を超えたす。

+ +

参考情報

+ +
    +
  1. Wikipedia: "Object-oriented programming" (日本語版)
  2. +
  3. Wikipedia: "Encapsulation (object-oriented programming)" (日本語版)
  4. +
diff --git a/files/ja/web/javascript/introduction_to_using_xpath_in_javascript/index.html b/files/ja/web/javascript/introduction_to_using_xpath_in_javascript/index.html new file mode 100644 index 0000000000..8d63ce70da --- /dev/null +++ b/files/ja/web/javascript/introduction_to_using_xpath_in_javascript/index.html @@ -0,0 +1,411 @@ +--- +title: JavaScript で XPath を䜿甚する +slug: Web/JavaScript/Introduction_to_using_XPath_in_JavaScript +translation_of: Web/XPath/Introduction_to_using_XPath_in_JavaScript +--- +

このドキュメントでは、JavaScript の内郚、拡匵機胜、そしお Web サむトから XPath を䜿甚するためのむンタヌフェむスに぀いお説明したす。Mozilla は DOM 3 XPath をかなりの量実装しおおり、XPath 匏は HTML ず XML ドキュメントの䞡方に察しお実行できたす。

+ +

XPath を䜿甚するための䞻なむンタヌフェヌスは、Document オブゞェクトの evaluate 関数です。

+ +

document.evaluate

+ +

このメ゜ッドは、XML ベヌスのドキュメント (HTML ドキュメントを含む) に察しお XPath 匏を評䟡し、XPathResult オブゞェクトを返したす。このメ゜ッドの既存のドキュメントは document.evaluate にありたすが、今のずころ我々が必芁ずしおいるものには乏しいです。

+ +
var xpathResult = document.evaluate( xpathExpression, contextNode, namespaceResolver, resultType, result );
+
+ +

Parameters

+ +

evaluate 関数は合蚈5぀のパラメヌタを取りたす。

+ + + +

Return Value

+ +

resultType パラメヌタで指定された型の XPathResult オブゞェクトを返したす。XPathResult むンタヌフェヌスはここで定矩されおいたす。

+ +

Implementing a Default Namespace Resolver

+ +

document オブゞェクトの createNSResolver メ゜ッドを䜿甚しお名前空間リゟルバを䜜成したす。

+ +
var nsResolver = document.createNSResolver( contextNode.ownerDocument == null ? contextNode.documentElement : contextNode.ownerDocument.documentElement );
+
+ +

Or alternatively by using the <code>createNSResolver</code> method of a <code>XPathEvaluator</code> object. <pre> var xpEvaluator = new XPathEvaluator(); var nsResolver = xpEvaluator.createNSResolver( contextNode.ownerDocument == null ? contextNode.documentElement : contextNode.ownerDocument.documentElement ); </pre> そしお、namespaceResolver パラメヌタずしお nsResolver 倉数である document.evaluate を枡したす。

+ +

泚意: XPath は、ヌル名前空間の芁玠にのみマッチするように、接頭蟞のない QNames を定矩しおいたす。XPath では、通垞の芁玠参照 (䟋: xmlns='http://www.w3.org/1999/xhtml' の p[@id='_myid']) に適甚されるデフォルトの名前空間を拟う方法はありたせん。NULL ではない名前空間のデフォルト芁玠にマッチさせるには、['namespace-uri()='http://www.w3.org/1999/xhtml' and name()='p' and @id='_myid'] のような圢匏を䜿甚しお特定の芁玠を参照する必芁がありたす (このアプロヌチは、名前空間がわからない動的な XPath の堎合にうたく機胜したす)。埌者の方法を取りたい堎合は、ナヌザ定矩の名前空間リゟルバを䜜成する方法を参照しおください。

+ +

Notes

+ +

任意の DOM ノヌドを名前空間を解決するように適応させ、 XPath 匏をドキュメント内で出珟したノヌドのコンテキストからの盞察評䟡を簡単に行えるようにしたす。このアダプタは、ノヌド䞊の DOM Level 3 メ゜ッド lookupNamespaceURI ず同様に動䜜し、 lookupNamespaceURI が呌び出された時点でのノヌドの階局内で利甚可胜な珟圚の情報を䜿甚しお、指定したプレフィックスから namespaceURI を解決したす。たた、暗黙の xml 接頭蟞も正しく解決したす。

+ +

Specifying the Return Type

+ +

The returned variable xpathResult from document.evaluate can either be composed of individual nodes (simple types), or a collection of nodes (node-set types).

+ +

Simple Types

+ +

resultType に垌望する結果タむプがどちらかに指定されおいる堎合。

+ + + +

XPathResult オブゞェクトの以䞋のプロパティにそれぞれアクセスしお、匏の戻り倀を取埗したす。

+ + + +
Example
+ +

The following uses the XPath expression count(//p) to obtain the number of <p> elements in an HTML document:

+ +
var paragraphCount = document.evaluate( 'count(//p)', document, null, XPathResult.ANY_TYPE, null );
+
+alert( 'This document contains ' + paragraphCount.numberValue + ' paragraph elements' );
+
+ +

Although JavaScript allows us to convert the number to a string for display, the XPath interface will not automatically convert the numerical result if the stringValue property is requested, so the following code will not work:

+ +
var paragraphCount = document.evaluate('count(//p)', document, null, XPathResult.ANY_TYPE, null );
+
+alert( 'This document contains ' + paragraphCount.stringValue + ' paragraph elements' );
+
+ +

Instead, it will return an exception with the code NS_DOM_TYPE_ERROR.

+ +

Node-Set Types

+ +

The XPathResult object allows node-sets to be returned in 3 principal different types:

+ + + +
Iterators
+ +

When the specified result type in the resultType parameter is either:

+ + + +

The XPathResult object returned is a node-set of matched nodes which will behave as an iterator, allowing us to access the individual nodes contained by using the iterateNext() method of the XPathResult.

+ +

Once we have iterated over all of the individual matched nodes, iterateNext() will return null.

+ +

Note however, that if the document is mutated (the document tree is modified) between iterations that will invalidate the iteration and the invalidIteratorState property of XPathResult is set to true, and a NS_ERROR_DOM_INVALID_STATE_ERR exception is thrown.

+ +
Iterator Example
+ +
var iterator = document.evaluate('//phoneNumber', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null );
+
+try {
+  var thisNode = iterator.iterateNext();
+
+  while (thisNode) {
+    alert( thisNode.textContent );
+    thisNode = iterator.iterateNext();
+  }
+}
+catch (e) {
+  alert( 'Error: Document tree modified during iteration ' + e );
+}
+
+ +
Snapshots
+ +

When the specified result type in the resultType parameter is either:

+ + + +

The XPathResult object returned is a static node-set of matched nodes, which allows us to access each node through the snapshotItem(itemNumber) method of the XPathResult object, where itemNumber is the index of the node to be retrieved. The total number of nodes contained can be accessed through the snapshotLength property.

+ +

Snapshots do not change with document mutations, so unlike the iterators, the snapshot does not become invalid, but it may not correspond to the current document, for example, the nodes may have been moved, it might contain nodes that no longer exist, or new nodes could have been added.

+ +
Snapshot Example
+ +
var nodesSnapshot = document.evaluate('//phoneNumber', documentNode, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
+
+for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ )
+{
+  alert( nodesSnapshot.snapshotItem(i).textContent );
+}
+
+ +
First Node
+ +

When the specified result type in the resultType parameter is either:

+ + + +

The XPathResult object returned is only the first found node that matched the XPath expression. This can be accessed through the singleNodeValue property of the XPathResult object. This will be null if the node set is empty.

+ +

Note that, for the unordered subtype the single node returned might not be the first in document order, but for the ordered subtype you are guaranteed to get the first matched node in the document order.

+ +
First Node Example
+ +
var firstPhoneNumber = document.evaluate('//phoneNumber', documentNode, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null );
+
+alert( 'The first phone number found is ' + firstPhoneNumber.singleNodeValue.textContent );
+
+ +

The ANY_TYPE Constant

+ +

When the result type in the resultType parameter is specified as ANY_TYPE, the XPathResult object returned, will be whatever type that naturally results from the evaluation of the expression.

+ +

It could be any of the simple types (NUMBER_TYPE, STRING_TYPE, BOOLEAN_TYPE), but, if the returned result type is a node-set then it will only be an UNORDERED_NODE_ITERATOR_TYPE.

+ +

To determine that type after evaluation, we use the resultType property of the XPathResult object. The constant values of this property are defined in the appendix. None Yet =====Any_Type Example===== <pre> </pre>

+ +

Examples

+ +

Within an HTML Document

+ +

The following code is intended to be placed in any JavaScript fragment within or linked to the HTML document against which the XPath expression is to be evaluated.

+ +

To extract all the <h2> heading elements in an HTML document using XPath, the xpathExpression is simply '//h2'. Where, // is the Recursive Descent Operator that matches elements with the nodeName h2 anywhere in the document tree. The full code for this is: link to introductory xpath doc

+ +
var headings = document.evaluate('//h2', document, null, XPathResult.ANY_TYPE, null );
+
+ +

Notice that, since HTML does not have namespaces, we have passed null for the namespaceResolver parameter.

+ +

Since we wish to search over the entire document for the headings, we have used the document object itself as the contextNode.

+ +

The result of this expression is an XPathResult object. If we wish to know the type of result returned, we may evaluate the resultType property of the returned object. In this case, that will evaluate to 4, an UNORDERED_NODE_ITERATOR_TYPE. This is the default return type when the result of the XPath expression is a node set. It provides access to a single node at a time and may not return nodes in a particular order. To access the returned nodes, we use the iterateNext() method of the returned object:

+ +
var thisHeading = headings.iterateNext();
+
+var alertText = 'Level 2 headings in this document are:\n'
+
+while (thisHeading) {
+  alertText += thisHeading.textContent + '\n';
+  thisHeading = headings.iterateNext();
+}
+
+ +

Once we iterate to a node, we have access to all the standard DOM interfaces on that node. After iterating through all the h2 elements returned from our expression, any further calls to iterateNext() will return null.

+ +

Evaluating against an XML document within an Extension

+ +

The following uses an XML document located at chrome://yourextension/content/peopleDB.xml as an example.

+ +
<?xml version="1.0"?>
+<people xmlns:xul = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
+  <person>
+	<name first="george" last="bush" />
+	<address street="1600 pennsylvania avenue" city="washington" country="usa"/>
+	<phoneNumber>202-456-1111</phoneNumber>
+  </person>
+  <person>
+	<name first="tony" last="blair" />
+	<address street="10 downing street" city="london" country="uk"/>
+	<phoneNumber>020 7925 0918</phoneNumber>
+  </person>
+</people>
+
+ +

To make the contents of the XML document available within the extension, we create an XMLHttpRequest object to load the document synchronously, the variable xmlDoc will contain the document as an XMLDocument object against which we can use the evaluate method

+ +

JavaScript used in the extensions xul/js documents.

+ +
var req = new XMLHttpRequest();
+
+req.open("GET", "chrome://yourextension/content/peopleDB.xml", false);
+req.send(null);
+
+var xmlDoc = req.responseXML;
+
+var nsResolver = xmlDoc.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);
+
+var personIterator = xmlDoc.evaluate('//person', xmlDoc, nsResolver, XPathResult.ANY_TYPE, null );
+
+ +

Note

+ +

When the XPathResult object is not defined, the constants can be retrieved in privileged code using Components.interfaces.nsIDOMXPathResult.ANY_TYPE (CI.nsIDOMXPathResult). Similarly, an XPathEvaluator can be created using:

+ +
Components.classes["@mozilla.org/dom/xpath-evaluator;1"].createInstance(Components.interfaces.nsIDOMXPathEvaluator)
+ +

Appendix

+ +

Implementing a User Defined Namespace Resolver

+ +

This is an example for illustration only. This function will need to take namespace prefixes from the xpathExpression and return the URI that corresponds to that prefix. For example, the expression:

+ +
'//xhtml:td/mathml:math'
+
+ +

will select all MathML expressions that are the children of (X)HTML table data cell elements.

+ +

In order to associate the 'mathml:' prefix with the namespace URI 'http://www.w3.org/1998/Math/MathML' and 'xhtml:' with the URI 'http://www.w3.org/1999/xhtml' we provide a function:

+ +
function nsResolver(prefix) {
+  var ns = {
+    'xhtml' : 'http://www.w3.org/1999/xhtml',
+    'mathml': 'http://www.w3.org/1998/Math/MathML'
+  };
+  return ns[prefix] || null;
+}
+
+ +

Our call to document.evaluate would then looks like:

+ +
document.evaluate( '//xhtml:td/mathml:math', document, nsResolver, XPathResult.ANY_TYPE, null );
+
+ +

Implementing a default namespace for XML documents

+ +

As noted in the Implementing a Default Namespace Resolver previously, the default resolver does not handle the default namespace for XML documents. For example with this document:

+ +
<?xml version="1.0" encoding="UTF-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+    <entry />
+    <entry />
+    <entry />
+</feed>
+
+ +

doc.evaluate('//entry', doc, nsResolver, XPathResult.ANY_TYPE, null) will return an empty set, where nsResolver is the resolver returned by createNSResolver. Passing a null resolver doesn't work any better, either.

+ +

One possible workaround is to create a custom resolver that returns the correct default namespace (the Atom namespace in this case). Note that you still have to use some namespace prefix in your XPath expression, so that the resolver function will be able to change it to your required namespace. E.g.:

+ +
function resolver() {
+    return 'http://www.w3.org/2005/Atom';
+}
+doc.evaluate('//myns:entry', doc, resolver, XPathResult.ANY_TYPE, null)
+
+ +

Note that a more complex resolver will be required if the document uses multiple namespaces.

+ +

An approach which might work better (and allow namespaces not to be known ahead of time) is described in the next section.

+ +

Using XPath functions to reference elements with a default namespace

+ +

Another approach to match default elements in a non-null namespace (and one which works well for dynamic XPath expressions where the namespaces might not be known), involves referring to a particular element using a form such as [namespace-uri()='http://www.w3.org/1999/xhtml' and name()='p' and @id='_myid']. This circumvents the problem of an XPath query not being able to detect the default namespace on a regularly labeled element.

+ +

Getting specifically namespaced elements and attributes regardless of prefix

+ +

If one wishes to provide flexibility in namespaces (as they are intended) by not necessarily requiring a particular prefix to be used when finding a namespaced element or attribute, one must use special techniques.

+ +

While one can adapt the approach in the above section to test for namespaced elements regardless of the prefix chosen (using local-name() in combination with namespace-uri() instead of name()), a more challenging situation occurs, however, if one wishes to grab an element with a particular namespaced attribute in a predicate (given the absence of implementation-independent variables in XPath 1.0).

+ +

For example, one might try (incorrectly) to grab an element with a namespaced attribute as follows: var xpathlink = someElements[local-name(@*)="href" and namespace-uri(@*)='http://www.w3.org/1999/xlink'];

+ +

This could inadvertently grab some elements if one of its attributes existed that had a local name of "href", but it was a different attribute which had the targeted (XLink) namespace (instead of @href).

+ +

In order to accurately grab elements with the XLink @href attribute (without also being confined to predefined prefixes in a namespace resolver), one could obtain them as follows:

+ +
var xpathEls = 'someElements[@*[local-name() = "href" and namespace-uri() = "http://www.w3.org/1999/xlink"]]'; // Grabs elements with any single attribute that has both the local name 'href' and the XLink namespace
+var thislevel = xml.evaluate(xpathEls, xml, null, XPathResult.ANY_TYPE, null);
+var thisitemEl = thislevel.iterateNext();
+
+ +

XPathResult Defined Constants

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Result Type Defined ConstantValueDescription
ANY_TYPE0A result set containing whatever type naturally results from the evaluation of the expression. Note that if the result is a node-set then UNORDERED_NODE_ITERATOR_TYPE is always the resulting type.
NUMBER_TYPE1A result containing a single number. This is useful for example, in an XPath expression using the count() function.
STRING_TYPE2A result containing a single string.
BOOLEAN_TYPE3A result containing a single boolean value. This is useful for example, in an XPath expression using the not() function.
UNORDERED_NODE_ITERATOR_TYPE4A result node-set containing all the nodes matching the expression. The nodes may not necessarily be in the same order that they appear in the document.
ORDERED_NODE_ITERATOR_TYPE5A result node-set containing all the nodes matching the expression. The nodes in the result set are in the same order that they appear in the document.
UNORDERED_NODE_SNAPSHOT_TYPE6A result node-set containing snapshots of all the nodes matching the expression. The nodes may not necessarily be in the same order that they appear in the document.
ORDERED_NODE_SNAPSHOT_TYPE7A result node-set containing snapshots of all the nodes matching the expression. The nodes in the result set are in the same order that they appear in the document.
ANY_UNORDERED_NODE_TYPE8A result node-set containing any single node that matches the expression. The node is not necessarily the first node in the document that matches the expression.
FIRST_ORDERED_NODE_TYPE9A result node-set containing the first node in the document that matches the expression.
+ +

See also

+ + + +
+

Original Document Information

+ + +
diff --git a/files/ja/web/javascript/javascript_technologies_overview/index.html b/files/ja/web/javascript/javascript_technologies_overview/index.html new file mode 100644 index 0000000000..61aff4884f --- /dev/null +++ b/files/ja/web/javascript/javascript_technologies_overview/index.html @@ -0,0 +1,91 @@ +--- +title: JavaScript 技術抂説 +slug: Web/JavaScript/JavaScript_technologies_overview +tags: + - Beginner + - DOM + - JavaScript +translation_of: Web/JavaScript/JavaScript_technologies_overview +--- +
{{JsSidebar("Introductory")}}
+ +

はじめに

+ +

HTML がりェブペヌゞの構造ず内容を定矩し、CSS が曞匏ず倖芳を定矩しおいるのに察し、JavaScript はむンタラクティブ機胜をりェブペヌゞに远加し、豊かなりェブアプリケヌションを䜜成したす。

+ +

しかしながら、りェブブラりザヌの文脈で解釈されるこの「JavaScript」ずいう包括的甚語は、たったく異なる耇数の芁玠を含んでいたす。その芁玠ずは、䞭栞ずなるプログラミング蚀語ECMAScript、もう䞀぀は DOMDocument Object Modelを含んだ Web API 矀です。

+ +

JavaScript: コア蚀語 (ECMAScript)

+ +

JavaScript の䞭栞ずなる蚀語は ECMAScript ずいう名前の蚀語ずしお ECMA TC39 委員䌚で暙準化されおいたす。

+ +

このコア蚀語はたた、node.js ずいったブラりザヌ以倖の環境でも䜿甚されおいたす。

+ +

ECMAScript の該圓範囲

+ +

ずりわけ、ECMAScript は以䞋のものを定矩しおいたす。

+ + + +

ブラりザヌサポヌト

+ +

2016 幎 10 月以降、䞻芁りェブブラりザヌの珟圚のバヌゞョンは、ECMAScript 5.1 ず ECMAScript 2015ES6 ずしおも知られるを実装しおいたすが、ただ䜿甚䞭の叀いバヌゞョンは ECMAScript 5 のみが実装されおいたす。

+ +

将来

+ +

ECMAScript の第 6 版は、ECMA 総䌚で 2015 幎 6 月 17 日に正匏に承認され、暙準ずしお公開されたした。それ以来、ECMAScript の版は毎幎発行されおいたす。

+ +

囜際化 API

+ +

ECMAScript 囜際化 API 仕様は Ecma TC39 によっお暙準化された ECMAScript 蚀語仕様の増補仕様です。囜際化 API は JavaScript アプリケヌションのための照合機胜文字列比范、数倀フォヌマット、日時フォヌマットを提䟛し、アプリケヌション䞊で蚀語を遞択しお必芁に応じお各皮機胜を調敎可胜にしたす。暙準仕様は 2012 幎 12 月に承認されたした。ブラりザヌでの実装状況は Intl オブゞェクトのドキュメントにお随時曎新されおいたす。囜際化暙準は昚今、毎幎承認されおブラりザヌは垞に実装を改良しおいたす。

+ +

DOM API

+ +

WebIDL

+ +

WebIDL 仕様は DOM 技術ず ECMAScript ずを繋ぐ機胜を提䟛したす。

+ +

DOM の䞭栞

+ +

Document Object Model (DOM) は HTML、XHTML、XML ドキュメント内のオブゞェクトを衚し、その情報をやりずりするための、クラスプラットフォヌムな蚀語に䟝存しない取り決めです。DOM ツリヌ内のオブゞェクトはそのオブゞェクトのメ゜ッドを䜿っお凊理、操䜜できたす。{{glossary("W3C")}} によっお Document Object Model の䞭栞郚分が暙準化されおおり、これにより HTML や XML ドキュメントをオブゞェクトずしお抜象化しお蚀語に䟝存しないむンタヌフェむスを定矩し、その抜象化したものを取り扱うメカニズムも定矩されたす。DOM によっお定矩されおいるものには、次のものがありたす :

+ + + +

ECMAScript から芋た堎合に、DOM 仕様で定矩されるオブゞェクトのこずを「ホストオブゞェクト」ず呌びたす。

+ +

HTML DOM

+ +

りェブのマヌクアップ蚀語である HTML は、DOM に関しおも芏定しおいたす。HTML は DOM Core 内で定矩された抜象抂念の䞊䜍レむダヌを圢成し、曎に芁玠の意味も定矩しおいたす。HTML DOM には HTML 芁玠の className プロパティ、あるいは {{domxref("document.body")}} ずいった API などが含たれたす。

+ +

HTML 仕様はドキュメント䞊の制玄事項に぀いおも定矩しおいたす。䟋えば、「順序なしリストを意味する ul 芁玠のすべおの子は、そのリストアむテムを意味する li 芁玠でなければならない」などです。䞀般に、暙準で定矩されおいない芁玠や属性を䜿甚するこずは犁止されおいたす。

+ +

Document オブゞェクトや、Window オブゞェクトや、その他の DOM 芁玠に぀いおお探しであれば、DOM ドキュメントをご芧ください。

+ +

その他の重芁な API

+ + + +

ブラりザヌサポヌトに぀いお

+ +

どのりェブ開発者も「DOM は面倒である」ずいうこずに悩たされおきたした。ブラりザヌのサポヌトの統䞀性はその機胜によっお倧きく異なりたす。この状況の䞻な理由は、DOM の重芁な機胜の倚くが、仮にあったずしおもその仕様が非垞に䞍明確であったずいう事実です。たた様々なりェブブラりザヌが、䟋えば Internet Explorer によるむベントモデルの䜿甚実態ず䞀臎させようず、互換性の無い機胜を远加しおきたした。2011 幎 6 月以降、W3C ず特に WHATWG が盞互運甚性を改善するために现郚にわたっお叀い機胜を定矩しおおり、これらの仕様に基づいお、ブラりザヌぞの実装は日々改善されおいたす。

+ +

ブラりザヌ間の互換性保持のための䞀般的な (おそらく最も信頌できるわけではない) アプロヌチのひず぀ずしお、JavaScript のラむブラリヌの䜿甚が挙げられたす。これらのラむブラリヌは DOM の機胜を抜象化し、異なるブラりザヌでこれらの API が同じように動䜜するようにしたす。最も広く䜿われおいるフレヌムワヌクには、jQuery や prototype、YUI がありたす。

diff --git a/files/ja/web/javascript/language_resources/index.html b/files/ja/web/javascript/language_resources/index.html new file mode 100644 index 0000000000..2060018601 --- /dev/null +++ b/files/ja/web/javascript/language_resources/index.html @@ -0,0 +1,154 @@ +--- +title: JavaScript 蚀語情報 +slug: Web/JavaScript/Language_Resources +tags: + - Advanced + - ECMA + - Guide + - JavaScript +translation_of: Web/JavaScript/Language_Resources +--- +
{{JsSidebar}}
+ +

ECMAScript は JavaScript の基瀎を成すスクリプト蚀語です。ECMAScript は暙準化団䜓 ECMA International によっお ECMA-262 および ECMA-402 specifications ずしお暙準化されおいたす。次のような ECMAScript 暙準が承認枈みおよび策定䞭です:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様の名称リンク策定日説明
最新の゚ディション
ECMA-262 9thEditionWorking draft、リポゞトリ2018 幎ECMAScript 2018
ECMA-402 5thEditionWorking draft、リポゞトリ2018 幎ECMAScript 2018 Internationalization API 
廃止および歎代の゚ディション
ECMA-262 (ES 1)PDF1997 幎 6 月最初の ECMAScript 暙準
ECMA-262 (ES 2)PDF1998 幎 8 月ECMAScript 暙準の改蚂 2 版。ISO 16262、JIS X 3060 でもある。
ECMA-262 (ES 3)PDF1999 幎 12 月ECMAScript 暙準の改蚂 3 版。JavaScript 1.5 に盞圓する。
+ 正誀衚も参照のこず。
ECMA-262 (ES 5)PDF2009 幎 12 月ECMAScript 5。
+ ES5 正誀衚 および Mozilla における ECMAScript 5 のサポヌト も䜵せお参照しおください。
ECMA-357PDF2004 幎 6 月ECMAScript for XML (E4X)。
+ E4X 正誀衚 も䜵せお参照しおください。
ECMA-357 Edition 2PDF2005 幎 12 月ECMAScript for XML (E4X)。
ECMA-262 (ES 5.1)PDF、HTML2011 幎 6 月このバヌゞョンは完党に囜際暙準 ISO/IEC 16262:2011 第 3 版に適合しおいたす。
+ この暙準には ES5 正誀衚の修正が含たれおおり、新機胜はありたせん。
ECMA-402 1.0PDF、HTML2012 幎 12 月ECMAScript Internationalization API 1.0
ECMA-262 2015 (ES 6)PDF、HTML2015 幎 6 月ECMAScript 2015 (第 6 版)
ECMA-402 2.0PDF2015 幎 6 月ECMAScript Internationalization API 2.0
ECMA-262 2016 (ES 7)HTML2016 幎 6 月ECMAScript 2016 (第 7 版)。機胜は決定枈み。幎内 (6 月) に承認される予定です。
ECMA-402 3.0HTML2016 幎 6 月ECMAScript Internationalization API 3.0。幎内 (6 月) に承認される予定です。
ECMA-262 8thEditionHTML2017幎 6月ECMAScript 2017 (第 8 版)
ECMA-402 4thEditionHTML2017幎 6月ECMAScript 2017 Internationalization API Specification
+ +

ES.Next は、執筆時点での次のバヌゞョンを衚す動的な名前です。 ES.Next 機胜は、定矩により仕様がただ確定しおいないため、より正確には提案ず呌ばれおいたす。

+ +

ECMAScript の歎史に関する詳しい情報は Wikipedia の ECMAScript の蚘事を参照しおください。

+ +

"Harmony" ずいうコヌドネヌムが付けられた次の改蚂版や ECMAScript Internationalization API 仕様ぞの䜜業は、ecmascript.org からリンクされた公開 wiki や es-discuss メヌリングリスト を通じお参加したり远跡するこずができたす。

+ +

実装

+ + + +

関連情報

+ + diff --git a/files/ja/web/javascript/memory_management/index.html b/files/ja/web/javascript/memory_management/index.html new file mode 100644 index 0000000000..f5544285c1 --- /dev/null +++ b/files/ja/web/javascript/memory_management/index.html @@ -0,0 +1,187 @@ +--- +title: メモリ管理 +slug: Web/JavaScript/Memory_Management +tags: + - JavaScript + - memory +translation_of: Web/JavaScript/Memory_Management +--- +
{{JsSidebar("Advanced")}}
+ +

導入

+ +

C のような䜎氎準蚀語は、malloc() や free() のような䜎氎準のメモリヌ管理プリミティブを持ちたす。䞀方、JavaScript の倀は、実䜓 (オブゞェクト、文字列など) の生成時に割り圓おられ、䜿甚されなくなるず「自動的に」開攟されたす。埌者のプロセスはガベヌゞコレクションず呌ばれたす。この「自動的に」ずいう蚀葉は混乱の元で、JavaScript (および他の高氎準蚀語) の開発者に察し、メモリヌ管理を気にしないずいう決定をしおもよいずいう印象を䞎えたす。これは誀りです。

+ +

メモリヌラむフサむクル

+ +

プログラミング蚀語に関係なく、メモリヌのラむフサむクルはほがい぀も同じです:

+ +
    +
  1. 必芁なメモリヌを割り圓おる
  2. +
  3. 割り圓おられたメモリヌを䜿甚する (読み蟌む, 曞き蟌む)
  4. +
  5. 必芁なくなったら、割り圓おられたメモリヌを開攟する
  6. +
+ +

2 に関しおはすべおの蚀語で明瀺的に行われたす。1 ず 3 は䜎氎準の蚀語では明瀺的ですが、JavaScript のような高氎準蚀語では、ほずんどの堎合暗黙的に行われたす。

+ +

JavaScript での割り圓お

+ +

倀の初期化

+ +

割り圓おでプログラマを悩たさないために、JavaScript では倀を宣蚀したずきず同時にメモリヌの割り圓おも行われたす。

+ +
var n = 123; // 数倀を栌玍するメモリヌが割り圓おられたす
+var s = "azerty"; // 文字列を栌玍するメモリヌが割り圓おられたす
+
+var o = {
+  a: 1,
+  b: null
+}; // オブゞェクトずそれに含たれる倀を栌玍するためのメモリヌが割り圓おられたす
+
+// (オブゞェクトの䟋ず同じように) 配列ずそれに含たれる倀を栌玍するための
+// メモリヌが割り圓おられたす
+var a = [1, null, "abra"];
+
+function f(a){
+  return a + 2;
+} // 関数を栌玍するメモリヌが割り圓おられたす (関数は呌び出し可胜なオブゞェクトです)
+
+// 関数匏でもメモリヌの割り圓おが行われたす
+someElement.addEventListener('click', function(){
+  someElement.style.backgroundColor = 'blue';
+}, false);
+
+ +

関数呌び出しを介しお割り圓お

+ +

䞀郚の関数呌び出しでは、オブゞェクトの割り圓おが発生したす。

+ +
var d = new Date(); // Date オブゞェクトの割り圓お
+
+var e = document.createElement('div'); // DOM芁玠の割り圓お
+ +

いく぀かのメ゜ッドは、新しい倀たたはオブゞェクトを割り圓おたす:

+ +
var s = "azerty";
+var s2 = s.substr(0, 3); // s2 は新しい文字列
+// JavaScript では文字列はむミュヌタブルな倀なので、
+// メモリヌの割圓を行わないず思うかもしれたせん。
+// しかし実際には[0, 3]の範囲の文字列が割り圓おられたす。
+
+var a = ["ouais ouais", "nan nan"];
+var a2 = ["generation", "nan nan"];
+var a3 = a.concat(a2);
+// a, a2 の内容を繋ぎ合わせた 4芁玠の配列が䜜成されたした
+
+ +

倀の䜿甚

+ +

倀を䜿甚するこずは、基本的に割り圓おられたメモリヌで読み曞きするこずを意味したす。これは倉数やオブゞェクトの倀を読み曞きするこずや匕数を関数に枡すこずによっお行われたす。

+ +

メモリヌが䞍芁になったずきに解攟

+ +

メモリヌ管理の問題のほずんどは、この段階に来たす。ここで最も難しい䜜業は、「割り圓おられたメモリヌは、もはや必芁ずされおいない」ずきを発芋するこずです。プログラム内のどこで、そのようなメモリヌの断片が䞍芁になっお解攟する必芁があるかを決定するには、開発者による刀断が必芁なこずが倚いです。

+ +

高氎準蚀語には、仕事がメモリヌ割圓おを远跡するこずである「ガベヌゞコレクタ」ず呌ばれる゜フトりェアを埋め蟌み、割り圓おられたメモリヌの䞀郚がもはや、その堎合に必芁ずされおいないずきに芋぀けるために䜿甚し、それが自動的に解攟されたす。メモリヌの䞀郚のピヌスが必芁ずされおいるかどうかを知るこずの䞀般的な問題は決定䞍胜であるため、このプロセスは近䌌的なものです(アルゎリズムによっお解決できたせん)。

+ +

ガベヌゞコレクション

+ +

䞊述の通り、あるメモリヌが"もはや必芁ない"かどうかを自動的に知るずいう普遍的問題は決定䞍胜です。そのため、ガベヌゞコレクションのこの普遍的問題に察する解決策には制限がありたす。このセクションでは、メむンのガベヌゞコレクションのアルゎリズムずその限界を理解するために必芁な抂念を説明したす。

+ +

リファレンス

+ +

ガベヌゞコレクションアルゎリズムが䟝存しおいる䞻な抂念は、リファレンス (reference)の抂念です。メモリヌ管理の文脈では、あるオブゞェクトが別のオブゞェクトに (明瀺的にであれ、暗黙的にであれ) アクセスできるずき、前者が埌者を"参照しおいる"ず蚀いたす。䟋えば、JavaScript オブゞェクトは自身の prototype (暗黙的な参照) ずプロパティ倀 (明瀺的な参照) ぞの参照を持ちたす。

+ +

ここでは、"オブゞェクト"の抂念は通垞の JavaScript オブゞェクトよりも広い抂念ずしお甚いられおおり、たた、関数のスコヌプ (もしくは、グロヌバルレキシカルスコヌプ) を含みたす。

+ +

参照カりントのガベヌゞコレクション

+ +

これは、最も玠朎なガベヌゞコレクションアルゎリズムです。このアルゎリズムは、"あるオブゞェクトがもはや必芁ない"こずを、"あるオブゞェクトがその他のオブゞェクトから参照されおいない"こずず定矩したす。あるオブゞェクトは、それに察する参照がれロの時にガベヌゞコレクト可胜であるず芋なされたす。

+ +

䟋

+ +
var o = {
+  a: {
+    b:2
+  }
+};
+// 2 個のオブゞェクトが䜜成されたした。䞀方はもう䞀方のプロパティずしお参照されおいたす。
+// もう䞀方は倉数 'o' に代入されおいるため、こちらも同じく参照されおいたす。
+// 明らかに、どちらのオブゞェクトもガベヌゞコレクションの察象になりたせん。
+
+
+var o2 = o; // 'o2' がオブゞェクトを参照するようになったため、
+            // 参照カりントは 2 になりたした
+o = 1;      // 'o' はもうオブゞェクトを参照しおいたせん。これで、このオブゞェクトを
+            // 参照するのは 'o2' だけになりたした
+
+var oa = o2.a; // プロパティ 'a' を参照しおいたす。
+               // 参照先のオブゞェクトは、この時点で 2 ぀の箇所から参照されおいたす。
+               // ひず぀はプロパティの倀ずしお、もうひず぀は倉数 'oa' の倀ずしおです。
+
+o2 = "yo"; // もずもず 'o' に代入されおいたオブゞェクトを参照するものはいなくなりたした。
+           // このため、このオブゞェクトはガベヌゞコレクトの察象ずなりたす。
+           // しかしながら、そのオブゞェクトのプロパティ 'a' が指しおいたオブゞェクトは
+           // ただ倉数 'oa' に参照されおいるため、解攟するこずはできたせん。
+
+oa = null; // もずもず 'o' に代入されおいたオブゞェクトのプロパティ 'a' が指しおいた
+           // オブゞェクトぞの参照が䞀぀も無くなったため、ガベヌゞコレクションの察象
+           // ずなりたした。
+ +

限界: 埪環

+ +

埪環に関しおは限界がありたす。次の䟋では、2 ぀のオブゞェクトが生成され、互いに参照しおいるため、埪環を圢成しおいたす。これらは関数の呌び出し埌にはスコヌプを倖れるため、実際には圹に立たず、本来であれば開攟しおもかたわないはずです。しかし、参照カりントアルゎリズムは、これら 2 ぀のオブゞェクトがそれぞれ少なくずも 1 回参照されおいるため、どちらもガベヌゞコレクトできないず芋なしたす。

+ +
function f(){
+  var o = {};
+  var o2 = {};
+  o.a = o2; // o references o2
+  o2.a = o; // o2 references o
+
+  return "azerty";
+}
+
+f();
+
+ +

Real-life example

+ +

Internet Explorer の 6 および 7 は、DOM オブゞェクトに察しおは参照カりント匏のガベヌゞコレクタを䜿甚しおいるこずが知られおいたす。埪環は、メモリヌリヌクを発生させるこずができるよくある間違いです:

+ +
var div;
+window.onload = function(){
+  div = document.getElementById("myDivElement");
+  div.circularReference = div;
+  div.lotsOfData = new Array(10000).join("*");
+};
+
+ +

䞊蚘の䟋では、DOM芁玠"myDivElement"は"circularReference"プロパティに自身ぞの埪環参照を持っおいたす。そのプロパティが明瀺的に削陀たたはヌルにされおいない堎合, 参照カりントのガベヌゞコレクタは、垞に少なくずも 1 ぀の参照そのたた有するこずになり、それが DOM ツリヌから削陀された堎合でも、メモリヌ内の DOM芁玠を維持したす。DOM芁玠は、倧量のデヌタを保持しおいる堎合("lotsOfData"プロパティで䞊蚘の䟋に瀺されおいたす)、このデヌタによっお消費されるメモリヌが解攟されるこずはありたせん。

+ +

マヌク·アンド·スむヌプアルゎリズム

+ +

このアルゎリズムは、"あるオブゞェクトがもはや必芁ない"こずを、"あるオブゞェクトが到達䞍胜である"こずず定矩したす。

+ +

このアルゎリズムは、root ず呌ばれるオブゞェクトの集合に぀いおの知識を前提ずしおいたす(JavaScript では、root はグロヌバルオブゞェクトです)。定期的に、ガベヌゞコレクタは、これらの root から開始し、これらの root から参照されるすべおのオブゞェクト、それから、これらの䞭から参照されるすべおのオブゞェクトなどを芋぀けたす。root から開始するず、ガベヌゞコレクタは、すべおの到達可胜オブゞェクトを芋぀け、すべおの到達䞍胜なオブゞェクトをガベヌゞコレクトしたす。

+ +

"あるオブゞェクトが参照を持たない"ずいうこずは、そのオブゞェクトは到達䞍胜であるずいうこずなので、このアルゎリズムは前述のものよりも優れおいたす。埪環で芋たように、逆は正しくありたせん。

+ +

2012幎の時点で、すべおの近代的なブラりザヌでは、マヌクアンドスむヌプ匏のガベヌゞコレクタが含たれおいたす。過去数幎間で JavaScript のガベヌゞコレクション䞖代別/むンクリメンタル/䞊行/䞊列ガベヌゞコレクションの分野で行われたすべおの改善は、このアルゎリズムの実装の改善であっお、ガベヌゞコレクションアルゎリズム自䜓に察する改善でも、"もうオブゞェクトが必芁ずされおいない"ず扱う基準を倉えるものでもありたせん。

+ +

埪環はもはや問題ではありたせん

+ +

最初の䞊蚘の䟋では、関数呌び出しが戻った埌、2 ぀のオブゞェクトは、グロヌバルオブゞェクトから到達可胜な䜕かによっおもはや参照されたせん。その結果、それらは、ガベヌゞコレクタによっお到達䞍胜ずしお怜出されたす。

+ +

同じこずは、第二の䟋でも蚀えたす。div ずそのハンドラが root から到達䞍胜になったら、それらは䞡方ずもお互いを参照するにもかかわらずガベヌゞコレクトこずができたす。

+ +

制玄: オブゞェクトは明瀺的に到達䞍胜にする必芁がある

+ +

これを制玄ずしお取り䞊げたしたが、実際には抵觊するこずは滅倚にありたせん。ガベヌゞコレクションのこずをたいおい誰もあたり気に留めないのはこのためです。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/new_in_javascript/1.1/index.html b/files/ja/web/javascript/new_in_javascript/1.1/index.html new file mode 100644 index 0000000000..ec43553cd0 --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/1.1/index.html @@ -0,0 +1,74 @@ +--- +title: JavaScript 1.1 の新機胜 +slug: Web/JavaScript/New_in_JavaScript/1.1 +tags: + - JavaScript + - JavaScript_version_overviews +translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.1 +--- +
{{jsSidebar("New_in_JS")}}
+ +

The following is a changelog for JavaScript from Netscape Navigator 2.0 to 3.0. The old Netscape documentation references this as "Features added after version 1". Netscape Navigator 3.0 was released on August 19, 1996. Netscape Navigator 3.0 was the second major version of the browser with JavaScript support.

+ +

JavaScript versions

+ +

Netscape Navigator 3.0 also introduced JavaScript language versions.

+ +
<script language="JavaScript">    <!-- JavaScript for Navigator 2.0. -->
+<SCRIPT LANGUAGE="JavaScript1.1"> <!-- JavaScript for Navigator 3.0. --></pre>
+
+<h2 id="New_features_in_JavaScript_1.1">New features in JavaScript 1.1</h2>
+
+<h3 id="New_objects">New objects</h3>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean">Boolean</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function">Function</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number">Number</a></code></li>
+</ul>
+
+<h3 id="New_properties">New properties</h3>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE">Number.MAX_VALUE</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE">Number.MIN_VALUE</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN">NaN</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY">Number.NEGATIVE_INFINITY</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY">Number.POSITIVE_INFINITY</a></code></li>
+</ul>
+
+<h3 id="New_methods">New methods</h3>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join">Array.prototype.join()</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse">Array.prototype.reverse()</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort">Array.prototype.sort()</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split">String.prototype.split()</a></code></li>
+</ul>
+
+<h3 id="New_operators">New operators</h3>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/typeof">typeof</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/void">void</a></code></li>
+</ul>
+
+<h3 id="Other_new_features">Other new features</h3>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/HTML/Element/noscript"><noscript></a></code></li>
+ <li><a href="/en-US/docs/Archive/Web/LiveConnect">LiveConnect</a>. Communication between Java and JavaScript.</li>
+</ul>
+
+<h2 id="Changed_functionality_in_JavaScript_1.1">Changed functionality in JavaScript 1.1</h2>
+
+<ul>
+ <li>"Object deletion". You can remove an object by setting its object reference to <code>null</code>.</li>
+ <li><code>constructor</code> and <code>prototype</code> properties on objects added.</li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval">eval()</a></code> is now a method of every object (was previously a built-in function); it evaluates a string of JavaScript code in the context of the specified object.</li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random">Math.random()</a></code> now works on every platform.</li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString">toString()</a></code>: Added radix parameter, which specifies the base to use for representing numeric values.</li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN">isNaN()</a></code> now works on every platform (not only Unix anymore)</li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat">parseFloat()</a></code> and <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt">parseint()</a></code> now return <code>NaN</code> on all platforms, if the first character of the specified string cannot be converted to a number; in previous releases, it returned <code>NaN</code> on Solaris and Irix and zero on all other platforms.</li>
+</ul></script>
diff --git a/files/ja/web/javascript/new_in_javascript/1.2/index.html b/files/ja/web/javascript/new_in_javascript/1.2/index.html new file mode 100644 index 0000000000..9e991631a1 --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/1.2/index.html @@ -0,0 +1,92 @@ +--- +title: JavaScript 1.2 の新機胜 +slug: Web/JavaScript/New_in_JavaScript/1.2 +tags: + - JavaScript + - version +translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.2 +--- +
{{jsSidebar("New_in_JS")}}
+ +

この JavaScript の倉曎履歎は Netscape Navigator3.0~4.0 に基づいおいたす。旧 Netscape Navigator のドキュメントは archive.org にありたす。Netscape Navigator 4.0 は 1997 幎 6 月 11 日にリリヌスされたした。Netscape Navigator 4.0 は、JavaScript をサポヌトするブラりザの 3 番目のメゞャヌバヌゞョンでした。

+ +

JavaScript バヌゞョン

+ +

Netscape Navigator 4.0 では JavaScript 1.2 を実行できるようになりたした。Netscape Navigator 3.0 以前では、language 属性が "JavaScript1.2" 以䞊に蚭定されおいるスクリプトを無芖するこずに泚意しおください。

+ +
<SCRIPT LANGUAGE="JavaScript1.1"> <!-- JavaScript for Navigator 3.0. -->
+<SCRIPT LANGUAGE="JavaScript1.2"> <!-- JavaScript for Navigator 4.0. -->
+ +

1.2 の新機胜

+ +

新しいオブゞェクト

+ + + +

新しく実装されたプロパティ

+ + + +

新しく実装されたメ゜ッド

+ + + +

新しい挔算子

+ + + +

新しい構文

+ + + +

他の新機胜

+ + + +

JavaScript 1.2 での機胜倉曎

+ + diff --git a/files/ja/web/javascript/new_in_javascript/1.3/index.html b/files/ja/web/javascript/new_in_javascript/1.3/index.html new file mode 100644 index 0000000000..cf0c5827f2 --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/1.3/index.html @@ -0,0 +1,153 @@ +--- +title: JavaScript 1.3 の新機胜 +slug: Web/JavaScript/New_in_JavaScript/1.3 +tags: + - JavaScript + - JavaScript_version_overviews +translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.3 +--- +
{{jsSidebar("New_in_JS")}}
+ +

The following is a changelog for JavaScript from Netscape Navigator 4.0 to 4.5. The old Netscape documentation can be found on archive.org. Netscape Navigator 4.5 was released on October 19, 1998.

+ +

The most significant change in JavaScript 1.3 was compliance with ECMA-262 and Unicode by removing inconsistencies between JavaScript 1.2 and the new ECMA standard (which was published in June 1997). Additional features of version 1.2, at the time not specified by ECMA-262 were kept in the JavaScript language (see below for a list of differences).

+ +

JavaScript versions

+ +

Netscape Communicator and Navigator 4.06 and 4.5 executes JavaScript language versions up to 1.3. Note that Communicator and Navigator 4.0-4.05 and earlier ignored scripts with the language attribute set to "JavaScript1.3" and higher.

+ +
<script language="JavaScript1.2"> <!-- JavaScript for Navigator 4.0. -->
+<SCRIPT LANGUAGE="JavaScript1.3"> <!-- JavaScript for Navigator 4.5. --></pre>
+
+<h2 id="New_features_in_JavaScript_1.3">New features in JavaScript 1.3</h2>
+
+<h3 id="New_globals">New globals</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN" title="JavaScript/Reference/Global_Objects/NaN"><code>NaN</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity" title="JavaScript/Reference/Global_Objects/Infinity"><code>Infinity</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined" title="JavaScript/Reference/Properties/undefined"><code>undefined</code></a></li>
+</ul>
+
+<h3 id="New_methods">New methods</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite"><code>isFinite()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource" title="JavaScript/Reference/Objects/Object/ToSource"><code>toSource()</code></a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call">Function.prototype.call()</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply"><code>Function.prototype.apply()</code></a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC">Date.UTC()</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear"><code>Date.prototype.getFullYear()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear"><code>Date.prototype.setFullYear()</code></a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds">Date.prototype.getMilliseconds()</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds"><code>Date.prototype.setMilliseconds()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear"><code>Date.prototype.getUTCFullYear()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth"><code>Date.prototype.getUTCMonth()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate"><code>Date.prototype.getUTCDate()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours"><code>Date.prototype.getUTCHours()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes"><code>Date.prototype.getUTCMinutes()</code></a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds">Date.prototype.getUTCSeconds()</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds"><code>Date.prototype.getUTCMilliseconds()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString"><code>Date.prototype.toUTCString()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear"><code>Date.prototype.setUTCFullYear()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth"><code>Date.prototype.setUTCMonth()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate"><code>Date.prototype.setUTCDate()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours"><code>Date.prototype.setUTCHours()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes"><code>Date.prototype.setUTCMinutes()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds"><code>Date.prototype.setUTCSeconds()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds"><code>Date.prototype.setUTCMilliseconds()</code></a></li>
+</ul>
+
+<h3 id="Other_new_features">Other new features</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Using_the_Equality_Operators" title="JavaScript/Reference/Operators/Comparison_Operators#Using_the_Equality_Operators">Strict equality operators</a></li>
+ <li>Unicode support</li>
+ <li>A JavaScript Console was introduced.</li>
+</ul>
+
+<h2 id="Changed_functionality_in_JavaScript_1.3">Changed functionality in JavaScript 1.3</h2>
+
+<ul>
+ <li>Changes to <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date" title="JavaScript/Reference/Global_Objects/Date"><code>Date</code></a> to conform with ECMA-262
+
+  <ul>
+   <li>New constructor <code>Date(year, month, day, [,
+    <i>hours</i>
+    [
+
+    <i>, minutes</i>
+    [
+
+    <i>, seconds</i>
+    [
+
+    <i>, milliseconds</i>
+    ]]]])</code></li>
+   <li>Additional method parameters:
+    <ul>
+     <li><code>setMonth(month[, date])</code></li>
+     <li><code>setHours(hours[, min[, sec[, ms]]])</code></li>
+     <li><code>setMinutes(min[, sec[, ms]])</code></li>
+     <li><code>setSeconds(sec[, ms])</code></li>
+    </ul>
+   </li>
+  </ul>
+ </li>
+ <li>The length of an array (property length) is now an unsigned, 32-bit integer.</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push"><code>Array.prototype.push()</code></a>: In JavaScript 1.2, the <code>push</code> method returned the last element added to an array. Under JavaScript 1.3, <code>push</code> returns the new length of the array.</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice"><code>Array.prototype.splice()</code></a>: In JavaScript 1.2, the <code>splice</code> method returned the element removed, if only one element was removed (<code>howMany</code> parameter is <code>1</code>). In JavaScript 1.3, <code>splice</code> always returns an array containing the removed elements. If one element is removed, an array of one element is returned.</li>
+ <li><a href="http://web.archive.org/web/20000815081640/http://developer.netscape.com/docs/manuals/communicator/jsref/js13.html#replace">Changes</a> to <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace"><code>String.prototype.replace()</code></a>.</li>
+ <li><a href="http://web.archive.org/web/20000815081640/http://developer.netscape.com/docs/manuals/communicator/jsref/js13.html#Boolean">Changes</a> to the <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean"><code>Boolean</code></a> object.</li>
+ <li><a href="http://web.archive.org/web/20000815081640/http://developer.netscape.com/docs/manuals/communicator/jsref/js13.html#toString">Changes</a> to <code>toString()</code>.</li>
+</ul>
+
+<h2 id="Non-ECMA-262_features_of_JavaScript_1.3">Non-ECMA-262 features of JavaScript 1.3</h2>
+
+<p>The following is a comparison between the June 1998 version of ECMA-262 and JavaScript 1.3. The following features were not part of the standard at that time, but implemented in JavaScript 1.3.</p>
+
+<h3 id="Keywords_and_operators">Keywords and operators</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Using_the_Equality_Operators">Strict equality operators</a></li>
+ <li>vertical tab (<code>\v</code> or <code>\u000B</code>) as an escape sequence.</li>
+</ul>
+
+<h3 id="Statements">Statements</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/label"><code>label</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/switch"><code>switch</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/do...while"><code>do...while</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/export"><code>export</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/import"><code>import</code></a></li>
+</ul>
+
+<h3 id="Built-in_objects">Built-in objects</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp"><code>RegExp</code></a></li>
+</ul>
+
+<h3 id="Methods_of_built-in_objects">Methods of built-in objects</h3>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource">toSource()</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch">Object.prototype.watch()</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/unwatch"><code>Object.prototype.unwatch()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arity"><code>Function.arity</code></a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply">Function.prototype.apply()</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call">Function.prototype.call()</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat">Array.prototype.concat()</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop">Array.prototype.pop()</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push"><code>Array.prototype.push()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift"><code>Array.prototype.shift()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift"><code>Array.prototype.unshift()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice"><code>Array.prototype.slice()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice"><code>Array.prototype.splice()</code></a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat">String.prototype.concat()</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match"><code>String.prototype.match()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search"><code>String.prototype.search()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice"><code>String.prototype.slice()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr"><code>String.prototype.substr()</code></a></li>
+</ul></script>
diff --git a/files/ja/web/javascript/new_in_javascript/1.4/index.html b/files/ja/web/javascript/new_in_javascript/1.4/index.html new file mode 100644 index 0000000000..560e55f636 --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/1.4/index.html @@ -0,0 +1,28 @@ +--- +title: JavaScript 1.4 の新機胜 +slug: Web/JavaScript/New_in_JavaScript/1.4 +tags: + - JavaScript + - JavaScript_version_overviews +translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.4 +--- +
{{jsSidebar("New_in_JS")}}
+ +

The following is a changelog for JavaScript 1.4, which was only used for Netscape's server side JavaScript released in 1999. The old Netscape documentation can be found on archive.org.

+ +

New features in JavaScript 1.4

+ + + +

Changed functionality in JavaScript 1.4

+ + diff --git a/files/ja/web/javascript/new_in_javascript/1.5/index.html b/files/ja/web/javascript/new_in_javascript/1.5/index.html new file mode 100644 index 0000000000..33868c064b --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/1.5/index.html @@ -0,0 +1,42 @@ +--- +title: JavaScript 1.5 の新機胜 +slug: Web/JavaScript/New_in_JavaScript/1.5 +tags: + - JavaScript + - JavaScript_version_overviews +translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.5 +--- +

{{jsSidebar("New_in_JS")}}

+ +

JavaScript バヌゞョン 1.5 では以䞋の新機胜や改良点が盛り蟌たれおいたす。

+ +

ランタむム゚ラヌ
+ ランタむム゚ラヌが䟋倖ずしお報告されるようになっおいたす。

+ +

数倀の曞匏の匷化
+ Number.prototype.toExponential、Number.prototype.toFixed および Number.prototype.toPrecision メ゜ッドの導入により、数倀の曞匏が匷化されおいたす。Number オブゞェクト のペヌゞを参照しおください。

+ +

正芏衚珟の匷化
+ 以䞋のように正芏衚珟が匷化されおいたす。

+ + + +

ある条件䞋での関数の宣蚀
+ if 節の䞭で関数を宣蚀できるようになっおいたす。関数の定矩 のペヌゞを参照しおください。

+ +

関数匏
+ 匏の䞭で関数を宣蚀できるようになっおいたす。関数の定矩 のペヌゞを参照しおください。

+ +

耇数の catch 節
+ try...catch 文における耇数の catch 節をサポヌトしおいたす。catch ブロック のペヌゞを参照しおください。

+ +

ゲッタずセッタ
+ オブゞェクトにゲッタずセッタを远加できるようになっおいたす。この機胜は JavaScript の C での実装でのみ利甚可胜です。ゲッタずセッタの定矩 のペヌゞを参照しおください。

+ +

定数
+ 読み取り専甚の名前付き定数がサポヌトされおいたす。この機胜は JavaScript の C での実装でのみ利甚可胜です。定数 のペヌゞを参照しおください。

diff --git a/files/ja/web/javascript/new_in_javascript/1.6/index.html b/files/ja/web/javascript/new_in_javascript/1.6/index.html new file mode 100644 index 0000000000..c1985c16ab --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/1.6/index.html @@ -0,0 +1,79 @@ +--- +title: JavaScript 1.6 の新機胜 +slug: Web/JavaScript/New_in_JavaScript/1.6 +tags: + - E4X + - JavaScript + - JavaScript_version_overviews +translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.6 +--- +
{{jsSidebar("New_in_JS")}}
+ +

JavaScript 1.6 では次のような新機胜が導入されおいたす。E4X、Array の新しいメ゜ッド、そしお Array および String の汎甚化です。

+ +

JavaScript 1.6 は Firefox 1.5 以降でサポヌトされおいたす。

+ +

E4X

+ +

ECMAScript for XML (E4X) は JavaScript 内で XML コンテンツを䜜成したり凊理したりする匷力な技術です。私たちは、既存の DOM ずの透過的な統合など、E4X サポヌトの向䞊を続けおいく぀もりですが、XML ベヌスのりェブアプリケヌションの開発者は Firefox 1.5 での E4X サポヌトの恩恵を受けるこずができたす。

+ +

E4X を利甚する際も、あなたは暙準的な MIME タむプを䜿甚するこずができたす:

+ +
<script type="text/javascript">
+
+ +

しかし E4X の文法は、スクリプトを HTML コメント (<!--...-->) 内に埋め蟌むずいう、叀いブラりザからスクリプトを芋えなくするための䞀般的な方法ず衝突する可胜性がありたす。E4X はたた、スクリプトを XML の CDATA セクション (<![CDATA{{ mediawiki.external('...') }}]>) 内に埋め蟌むずいう、"<" や ">" ずいう蚘号を䜿えるようにするよりモダンな方法 (これは HTML には適甚できないので泚意) ずも衝突する可胜性がありたす。よくわからない文法゚ラヌが生じた堎合は MIME タむプに "; e4x=1" を远加しおください:

+ +
<script type="text/javascript; e4x=1">
+
+ +

拡匵機胜のスクリプトは垞に HTML コメントを E4X リテラルずしお扱うこずに泚意しおください。぀たり、"e4x=1" が暗黙的に指定されおいる状態です。

+ +

E4X に぀いおは、Processing XML with E4X で説明されおいたす。

+ +

Array の拡匵

+ +

Array のメ゜ッドが新しく 7 ぀远加されたした。これらは項目の堎所に関するメ゜ッドず反埩的なメ゜ッドの 2 ぀に分類可胜です。項目の堎所に関するメ゜ッドは:

+ + + +

反埩的なメ゜ッドは:

+ + + +

詳しい情報に぀いおは、Working with Arrays、もしくは、Nicholas C. Zakas の Mozilla's New Array Methods ずいう蚘事を参照しおください。

+ +

Array および String の汎甚化

+ +

時々、配列のメ゜ッドを文字列に適甚したい堎合があり、次のようにしお、文字列を文字の配列ずしお取り扱うこずがありたす。䟋えば、倉数 str に含たれる文字がすべお英字であるこずをチェックするには、次のように曞くでしょう:

+ +
function isLetter(character) {
+  return (character >= "a" && character <= "z");
+}
+
+if (Array.prototype.every.call(str, isLetter))
+  alert("文字列 '" + str + "' は英字のみ含んでいたす!");
+
+ +

この蚘法はかなり無駄が倚く、JavaScript 1.6 では{{ 原語䜵蚘("汎甚的", "generic") }}な簡易衚蚘が導入されたした:

+ +
if (Array.every(str, isLetter))
+  alert("文字列 '" + str + "' は英字のみ含んでいたす!");
+
+ +

同様に String のメ゜ッドをどんなオブゞェクトにも簡単に適甚できたす:

+ +
var num = 15;
+alert(String.replace(num, /5/, '2'));
+
+ +

Working with Array-like objects も参照しおください。

diff --git a/files/ja/web/javascript/new_in_javascript/1.7/index.html b/files/ja/web/javascript/new_in_javascript/1.7/index.html new file mode 100644 index 0000000000..6750aa396b --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/1.7/index.html @@ -0,0 +1,558 @@ +--- +title: JavaScript 1.7 の新機胜 +slug: Web/JavaScript/New_in_JavaScript/1.7 +tags: + - JavaScript + - JavaScript_version_overviews +translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.7 +--- +
+
{{jsSidebar("New_in_JS")}}
+
+ +

JavaScript 1.7 はいく぀かの新機胜、特に{{ 原語䜵蚘("ゞェネレヌタ", "generators") }}、{{ 原語䜵蚘("むテレヌタ", "iterators") }}、{{ 原語䜵蚘("配列内包", "array comprehensions") }}、{{ 原語䜵蚘("let 匏", "let expressions") }}、および{{ 原語䜵蚘("分割代入", "destructuring assignment") }} を取り入れた蚀語アップデヌトです。JavaScript 1.6 のすべおの機胜も含たれおいたす。

+ +

JavaScript 1.7 のサポヌトは Firefox 2 に導入されたした。

+ +

この蚘事に含たれるコヌドの䟋は JavaScript シェルから実隓できたす。Introduction to the JavaScript shell を読み、シェルのビルド方法ず䜿い方を孊んでください。

+ +

JavaScript 1.7 を䜿う

+ +

JavaScript 1.7 の䞀郚の新機胜を䜿うためには、JavaScript 1.7 が䜿いたいずいう宣蚀が必芁です。HTML たたは XUL コヌドでは次のコヌドを䜿っおください。

+ +
<script type="application/javascript;version=1.7"/>
+ +

JavaScript シェルを䜿うずきは、コマンドラむンで -version 170 スむッチを䜿うか、version() 関数を䜿っお䜿いたいバヌゞョンを蚭定する必芁がありたす。

+ +
version(170);
+ +

新しいキヌワヌド "yield" ず "let" を䜿甚する必芁のある機胜は、既存のコヌドでそれらのキヌワヌドが倉数や関数ずしお利甚されおいる恐れがあるため、バヌゞョン 1.7 ず宣蚀しなければ利甚できたせん。新しいキヌワヌドを導入しおいない機胜 (分割代入ず配列内包) は、JavaScript のバヌゞョン宣蚀なしに利甚できたす。

+ +

ゞェネレヌタずむテレヌタ

+ +

{{ 原語䜵蚘("繰り返しの", "iterative") }} アルゎリズム (リストの各芁玠に同じ凊理をしたり、同じデヌタセットに繰り返し蚈算を行うなど) を含むコヌドを開発する際、しばしば蚈算凊理の間その倀が維持される必芁のある状態倉数が䜿われたす。䌝統的には、繰り返しのアルゎリズムの介圚倉数を埗るにはコヌルバック関数を䜿わなくおはなりたせん。

+ +

ゞェネレヌタ

+ +

フィボナッチ数を蚈算するこの繰り返しアルゎリズムに぀いお考えおみたしょう:

+ +
function do_callback(num) {
+  document.write(num + "<br>\n");
+}
+
+function fib() {
+  var i = 0, j = 1, n = 0;
+  while (n < 10) {
+    do_callback(i);
+    var t = i;
+    i = j;
+    j += t;
+    n++;
+  }
+}
+
+fib();
+ +

このコヌドはアルゎリズムのそれぞれの繰り返しステップの凊理を実行するのにコヌルバックルヌチンを䜿っおいたす。この堎合、それぞれのフィボナッチ数は単玔にコン゜ヌルに出力されたす。

+ +

{{ 原語䜵蚘("ゞェネレヌタ", "generators") }} および{{ 原語䜵蚘("むテレヌタ", "iterators") }} は盞互に働き、新しく、より良くこれを実行する方法を提䟛したす。ゞェネレヌタを䜿っお曞かれたフィボナッチ数ルヌチンがどうなっおいるか芋おみたしょう:

+ +
function fib() {
+  var i = 0, j = 1;
+  while (true) {
+    yield i;
+    var t = i;
+    i = j;
+    j += t;
+  }
+}
+
+var g = fib();
+
+for (var i = 0; i < 10; i++) {
+  document.write(g.next() + "<br>\n");
+}
+ +

yield キヌワヌドを含む関数がゞェネレヌタです。これを呌ぶず、ゞェネレヌタの仮匕数は実匕数ず結び付きたすが、本䜓は実際には評䟡されたせん。代わりにゞェネレヌタ・むテレヌタが返っおきたす。ゞェネレヌタ・むテレヌタの next() メ゜ッドを呌び出すたびに、繰り返しのアルゎリズムが 1 回ず぀実行されたす。それぞれのステップでの倀は、yield キヌワヌドで指定された倀です。yield をアルゎリズムの繰り返しの範囲を瀺すゞェネレヌタ・むテレヌタ版の return だず考えたしょう。毎回 next() を呌び出すたび、ゞェネレヌタのコヌドは yield の次の文から再開したす。

+ +

あなたはゞェネレヌタ・むテレヌタを、その next() メ゜ッドを繰り返し呌び出すこずで、あなたが望んだ結果の状態にたどり぀くたで反埩させられたす。この䟋では、私たちが欲しいだけの結果を手に入れるたで g.next() を呌び出し続けるこずで、私たちはどれだけでも倚くのフィボナッチ数を埗るこずができたす。

+ +

ゞェネレヌタを指定の時点から再開する

+ +

䞀床 next() メ゜ッドを呌び出しおゞェネレヌタをスタヌトさせるず、䞎えた特定の倀を最埌の yield の結果ずしお扱わせる send() を䜿うこずができたす。その際ゞェネレヌタはその次の yield のオペランドを返したす。

+ +

ゞェネレヌタを勝手な時点から始めるこずはできたせん。特定の倀を send() する前に必ず next() でゞェネレヌタをスタヌトさせなければなりたせん。

+ +
泚: 興味深い点ずしお、send(undefined) を呌び出すこずは next() を呌び出すこずず等䟡です。しかし send() を呌び出す際、生たれたおのゞェネレヌタを undefined 以倖の倀からスタヌトさせようずするず TypeError 䟋倖を匕き起こしたす。
+ +

ゞェネレヌタ䞭での䟋倖

+ +

投げさせたい䟋倖の倀を枡しお throw() メ゜ッドを呌び出すこずで、ゞェネレヌタに匷制的に䟋倖を投げさせるこずができたす。この䟋倖はその時点の䞭断されたゞェネレヌタの文脈から、぀たりあたかもその時点で䞀時停止されおいる yield が throw value に眮き換わったかのように投げられたす。

+ +

もし投げられた䟋倖の凊理䞭に yield に遭遇しなかった堎合、その䟋倖は throw() の呌び出し元に䌝播し、それ以降 next() を呌び出すず StopIteration が投げられたす。

+ +

ゞェネレヌタを閉じる

+ +

ゞェネレヌタは自分自身を閉じさせる close() メ゜ッドを持っおいたす。ゞェネレヌタを閉じるこずの効果は:

+ +
    +
  1. ゞェネレヌタ内のアクティブなすべおの finally 節が実行されたす。
  2. +
  3. もし finally 節が StopIteration 以倖の䟋倖を投げた堎合、その䟋倖は close() メ゜ッドの呌び出し元に䌝播されたす。
  4. +
  5. ゞェネレヌタが終了したす。
  6. +
+ +

ゞェネレヌタの䟋

+ +

このコヌドは 100 回ルヌプするごずに yield するゞェネレヌタを走らせたす。

+ +
var gen = generator();
+
+function driveGenerator() {
+	if (gen.next()) {
+		window.setTimeout(driveGenerator, 0);
+	} else {
+		gen.close();
+	}
+}
+
+function generator() {
+	while (i < something) {
+		/** 䜕か **/
+
+		++i;
+		/** 100 呚ごずに yield **/
+		if ((i % 100) == 0) {
+			yield true;
+		}
+	}
+
+	yield false;
+}
+ +

むテレヌタ

+ +

{{ 原語䜵蚘("むテレヌタ", "iterator") }} ずは、デヌタぞの繰り返しの凊理をしやすくする特別なオブゞェクトのこずです。

+ +

普通の䜿い方では、むテレヌタオブゞェクトは「目に芋えたせん」。぀たりあなたはむテレヌタオブゞェクトを明瀺的に操䜜する必芁はなく、代わりに JavaScript の for...in や for each...in 文を䜿うこずで、オブゞェクトのキヌや倀ぞの繰り返し凊理を自然ず行うこずができたす。

+ +
var objectWithIterator = getObjectSomehow();
+
+for (var i in objectWithIterator) {
+  document.write(objectWithIterator[i] + "<br>\n");
+}
+ +

もし独自のむテレヌタオブゞェクトを実装したり、むテレヌタを盎接操䜜する䜕か別の必芁があったりするならば、あなたは next メ゜ッドず StopIteration 䟋倖、そしお __iterator__ プロパティに぀いお知る必芁がありたす。

+ +

あなたは Iterator(objectname) を呌び出すこずで、あるオブゞェクトのむテレヌタを生成するこずができたすが、そのようなあるオブゞェクトのむテレヌタは、そのオブゞェクトの __iterator__ メ゜ッドを呌び出すこずで芋぀けられたす。もし __iterator__ が存圚しなければ、デフォルトのむテレヌタが生成されたす。デフォルトのむテレヌタは、普通の for...in や for each...in のモデルに基づいお、オブゞェクトのプロパティを yield したす。もしあなたがカスタマむズしたむテレヌタを提䟛したいならば、__iterator__ メ゜ッドをあなたのカスタマむズしたむテレヌタのむンスタンスを返すように䞊曞きしおください。スクリプトからオブゞェクトのむテレヌタを埗るには、盎接 __iterator__ プロパティにアクセスせず Iterator(obj) を䜿っおください。埌者は配列 (Array) に察しおも䜿えたすが、前者は䜿えたせん。

+ +

䞀床むテレヌタを手に入れれば、そのむテレヌタの next() メ゜ッドを呌び出すこずで簡単にオブゞェクトの次の項目を取埗するこずができたす。もしデヌタが残っおいない堎合は、StopIteration 䟋倖が投げられたす。

+ +

ここに盎接的なむテレヌタ操䜜の単玔な䟋を瀺したす:

+ +
var obj = {name:"Jack Bauer", username:"JackB", id:12345, agency:"CTU", region:"Los Angeles"};
+
+var it = Iterator(obj);
+
+try {
+  while (true) {
+    print(it.next() + "\n");
+  }
+} catch (err if err instanceof StopIteration) {
+  print("レコヌドの終わり。\n");
+} catch (err) {
+  print("䞍明な゚ラヌ: " + err.description + "\n");
+}
+ +

このプログラムの出力は次のようになりたす:

+ +
name,Jack Bauer
+username,JackB
+id,12345
+agency,CTU
+region,Los Angeles
+レコヌドの終わり。
+ +

むテレヌタを生成する際、オプションずしお 2 ぀目の匕数を指定するこずができたす。この匕数は真停倀で、next() メ゜ッドを呌び出すごずにキヌの方だけを返しおほしいかどうかを瀺したす。このパラメヌタはナヌザヌ定矩の__iterator__ 関数に唯䞀の匕数ずしお枡されたす。䞊のサンプルで var it = Iterator(obj); を var it = Iterator(obj, true); に倉えるず、以䞋のような出力になりたす:

+ +
name
+username
+id
+agency
+region
+レコヌドの終わり。
+
+ +

どちらの堎合でも、デヌタが返っおくる実際の順番はその実装によっお倉わりたす。デヌタの順番は無保蚌です。

+ +

むテレヌタは、その䞭にあなたが気づいおいないデヌタが含たれおいるかもしれないオブゞェクトも含め、オブゞェクト䞭のデヌタをスキャンする手軜な方法です。これは特に、アプリケヌションが予想しおいないデヌタを保存する必芁がある堎合に䟿利です。

+ +

配列内包

+ +

{{ 原語䜵蚘("配列内包", "array comprehensions") }} は、配列のパワフルな初期化を実行する簡䟿な方法を提䟛するゞェネレヌタの䜿い方です。䟋えば:

+ +
function range(begin, end) {
+  for (let i = begin; i < end; ++i) {
+    yield i;
+  }
+}
+ +

range() は begin から end たでのすべおの数倀を返すゞェネレヌタです。このように定矩するず、私たちはこれを次のように䜿うこずができたす:

+ +
var ten_squares = [i * i for each (i in range(0, 10))];
+ +

これは新しい配列 ten_squares を、0..9 の範囲にある倀の平方を含むようあらかじめ初期化したす。

+ +

あなたは配列を初期化する際、任意の条件文を䜿うこずができたす。もしある配列を 0 ず 20 の間にある偶数が含たれるように初期化したいならば、次のコヌドを䜿うこずができたす:

+ +
var evens = [i for each (i in range(0, 21)) if (i % 2 == 0)];
+ +

JavaScript 1.7 以前では、これは次のようにコヌディングしなければならないでしょう:

+ +
var evens = [];
+
+for (var i = 0; i <= 20; i++) {
+  if (i % 2 == 0)
+    evens.push(i);
+}
+ +

配列内包はより䞀局コンパクトであるだけでなく、䞀床そのコンセプトに粟通しおしたえば、実際のずころ読みやすいものです。

+ +

スコヌプの芏則

+ +

配列内包は暗黙的な let 宣蚀ず同様に、角カッコの内偎にあるすべおを含んだその呚りに暗黙的なブロックを持ちたす。

+ +

Add details.

+ +

let を䜿ったブロックスコヌプ

+ +

デヌタや関数のブロックスコヌプを管理する let を䜿うにはいく぀かの方法がありたす:

+ + + +

let 文

+ +

let 文は倉数に察するロヌカルスコヌプを提䟛したす。let 文はコヌドのある 1 ぀のブロックのレキシカルスコヌプに 0 以䞊の倉数を結び぀けるこずによっお働き、それ以倖はブロック文ず党く同じです。特に、let 文の内偎で var を䜿っお定矩された倉数のスコヌプは、let 文の倖偎でそれが定矩された堎合ず同じであり、そのような倉数は埓来通り関数スコヌプを持぀こずに泚意しおください。

+ +

䟋えば:

+ +
var x = 5;
+var y = 0;
+
+let ( x = x + 10, y = 12 ) {
+  print(x+y + "\n");
+}
+
+print( (x + y) + "\n" );
+ +

このプログラムからの出力は次のようになるでしょう:

+ +
27
+5
+ +

コヌドブロックに関するルヌルは JavaScript の他のコヌドブロックず同じです。let 宣蚀を䜿っお確立されたブロック自身のロヌカル倉数を持っおいるかもしれたせん。

+ +
泚: let 文の構文を䜿う時、let の埌の䞞カッコは必須です。これを入れないず構文゚ラヌずなりたす。
+ +
{{ 英語版章題("Scoping rules 2") }}
+ +

スコヌプの芏則

+ +

let を䜿っお定矩された倉数のスコヌプは、let ブロック自身ずその内郚に含たれるすべおのブロックです。ただしそれらのブロックが同じ名前で倉数を定矩しおいる堎合を陀きたす。

+ +

let 匏

+ +

let を䜿っおある 1 ぀の匏だけに察しおスコヌプを持぀倉数を確立するこずができたす:

+ +
var x = 5;
+var y = 0;
+
+document.write( let(x = x + 10, y = 12) x + y  + "<br>\n");
+document.write( x + y + "<br>\n" );
+ +

結果ずしお出力されるのは:

+ +
27
+5
+ +

この堎合、倉数 x、y のそれぞれ x+10、12 ずの結び付きは、匏 x+y に察しおのみスコヌプを持ちたす。

+ +

スコヌプの芏則

+ +

以䞋の let 匏があったずするず:

+ +
let (decls) expr
+ +

expr の呚りに暗黙的なブロックが生成されたす。

+ +

let 定矩

+ +

let キヌワヌドはブロック内で倉数を定矩するのにも䜿うこずができたす。

+ +
泚: もしあなたがより興味深い let 定矩の䜿甚䟋を知っおいるならば、どうぞここに远加するこずを怜蚎しおみおください。
+ +
if (x > y) {
+  let gamma = 12.7 + y;
+  i = gamma * x;
+}
+ +

let 文・匏・定矩はしばしば、内郚関数が䜿われる際にコヌドを簡朔にさせるこずがありたす。

+ +
var list = document.getElementById("list");
+for (var i = 1; i <= 5; i++) {
+  var item = document.createElement("LI");
+
+  item.appendChild( document.createTextNode("Item " + i) );
+  let j = i;
+
+  item.onclick = function (ev) {
+    alert("Item " + j + " is clicked.");
+  };
+
+  list.appendChild(item);
+}
+ +

䞊の䟋は、内郚の無名関数の 5 ぀のむンスタンスがそれぞれ倉数 j の異なる 5 ぀のむンスタンスを参照しおいるために、意図通りに動きたす。もしこれで let を var に眮き換えたり、倉数 j を削陀しお単玔に i を内郚関数で䜿うず、これは意図通りには動かないこずに泚意しおください。

+ +

スコヌプの芏則

+ +

let によっお宣蚀された倉数は、その定矩があったブロックず、その倉数が再定矩されおいないすべおのサブブロックにスコヌプを持ちたす。この堎合、let は var に非垞によく䌌た働きをしたす。おもな違いは var 倉数のスコヌプがそれを囲む関数党䜓であるこずです:

+ +
function varTest() {
+    var x = 31;
+    if (true) {
+        var x = 71;  // 同じ倉数!
+        alert(x);  // 71
+    }
+    alert(x);  // 71
+}
+
+function letTest() {
+    let x = 31;
+
+    if (true) {
+        let x = 71;  // 違う倉数
+        alert(x);  // 71
+    }
+    alert(x);  // 31
+}
+ +

= の右蟺の匏はブロックの内偎になりたす。これは let 匏や let 文のスコヌプの仕方ず異なりたす:

+ +
function letTests() {
+    let x = 10;
+
+    // let 文
+    let (x = x + 20) {
+        alert(x);  // 30
+    }
+
+    // let 匏
+    alert(let (x = x + 20) x);  // 30
+
+    // let 定矩
+    {
+        let x = x + 20;  // ここでの x は undefined ず評䟡される
+        alert(x);  // undefined + 20 ==> NaN
+    }
+}
+ +

プログラムやクラス内では、let は var がするようにグロヌバルオブゞェクトのプロパティを生成したりはせず、代わりにその文脈で文を評䟡する際に生成される暗黙的なブロックにプロパティを生成したす。これが本質的に意味するのは、let はそれ以前に var を䜿っお定矩された倉数を䞊曞きできないずいうこずです。䟋えば:

+ +
// FF 2.0 b1 ではうたく動きたせん。"global" ではなく "42" を返しおしたいたす。
+var x = 'global';
+let x = 42;
+document.write( this.x + "<br>\n" );
+ +

このコヌドによっお衚瀺される出力は "42" ではなく、"global" です。

+ +

{{ 原語䜵蚘("暗黙的なブロック", "implicit block") }} ずは、波カッコで囲たれおいないブロックのこずで、JavaScript ゚ンゞンによっお暗黙的に生成されたす。

+ +

関数内で eval() によっお実行された let は、var がするように variable object (activation object or innermost binding rib) にプロパティを生成したせん。その代りに、そのプログラムで文を評䟡する際に生成される暗黙的なブロックにプロパティを生成したす。これは eval() がプログラムに䜜甚する性質ず前述のルヌルによる結果です。

+ +

別の蚀い方をすれば、コヌドを実行するのに eval() を䜿う際、そのコヌドは独立したプログラムずみなされ、そのコヌドの呚りに暗黙的なブロックを持぀のです。

+ +

for ルヌプ䞭での let スコヌプ倉数

+ +

let キヌワヌドは単に var でやるようにしお、for ルヌプのスコヌプ内で局所的に倉数を結び぀けるこずにも䜿うこずができたす。

+ +
// obj を远加する
+var i = 0;
+
+for ( let i = i; i < 10; i++ )
+    document.write(i + "<br>\n");
+
+    for ( let [name,value] in obj )
+        document.write("名前: " + name + ", 倀: " + value + "<br>\n");
+ +

スコヌプの芏則

+ +
for (let expr1; expr2; expr3) statement
+ +

この䟋で、expr2、expr3 ず statement は、let expr1 によっお宣蚀されたブロックロヌカルな倉数を含む暗黙的なブロックに囲たれたす。これは䞊の 1 ぀目のルヌプで実蚌しおいたす。

+ +
for (let expr1 in expr2) statement
+for each(let expr1 in expr2) statement
+ +

これら䞡方の堎合では、それぞれ statement を含む暗黙的なブロックができたす。1 ぀目の方は䞊の 2 ぀目のルヌプで瀺しおいたす。

+ +

分割代入

+ +

{{ 原語䜵蚘("分割代入", "destructuring assignment") }} は、配列やオブゞェクトのリテラルの構造ずそっくりの構文を䜿っお、配列やオブゞェクトからデヌタを抜出するこずを可胜にしたす。

+ +

配列やオブゞェクトのリテラル匏は、デヌタのアドホックな (その堎限りの) 詰め合わせを䜜る簡単な方法を提䟛したす。䞀床そのようなデヌタの詰め合わせを䜜っおしたえば、あなたはそれを䜿いたいように䜿うこずができたす。関数から返すこずさえできたす。

+ +

分割代入を䜿うず、次の節の䟋で瀺すようなさたざたな興味深いこずができるようになりたすが、特に䟿利なのは、䞀぀の文によっお党䜓の構造を読み蟌むこずができるずいう点です。

+ +

この胜力は Perl や Python などの蚀語に存圚する機胜に䌌おいたす。

+ +

䟋

+ +

分割代入は䜿甚䟋を通じお説明するのが䞀番なので、ここではあなたが通読しお孊ぶためのいく぀かの䟋を玹介したす。

+ +

䞀時倉数の䜿甚を避ける

+ +

分割代入を䜿えば、䟋えば倀を亀換するこずができたす:

+ +
var a = 1;
+var b = 3;
+
+[a, b] = [b, a];
+ +

このコヌドを実行埌、 b は 1 に、a は 3 になりたす。分割代入がなければ、2 ぀の倀の亀換には䞀時倉数 (あるいは䞀郚の䜎玚蚀語では XOR 亀換のトリック) が必芁になりたす。

+ +

同様に、3 ぀以䞊の倉数を順に亀換するこずにも䜿えたす。

+ +
var a = 'o';
+var b = "<span style='color:green;'>o</span>";
+var c = 'o';
+var d = 'o';
+var e = 'o';
+var f = "<span style='color:blue;'>o</span>";
+var g = 'o';
+var h = 'o';
+
+for (lp = 0; lp < 40; lp++) {
+    [a, b, c, d, e, f, g, h] = [b, c, d, e, f, g, h, a];
+    document.write( a + '' + b + '' + c + '' + d + '' + e + '' + f + '' + g + '' + h + '' + "<br />");
+}
+ +

このコヌドを実行するず、倉数が埪環する様子をカラフルな芖芚情報ずしお芋るこずができたす。

+ +

䞊で出おきたフィボナッチ数のゞェネレヌタの䟋に戻っおみるず、"i" ず "j" の新しい倀を単䞀のグルヌプ代入文で蚈算するこずによっお、䞀時倉数 "t" を陀去するこずができたす。

+ +
function fib() {
+    var i = 0, j = 1;
+    while (true) {
+        yield i;
+        [i, j] = [j, i + j];
+    }
+}
+
+var g = fib();
+
+for (let i = 0; i < 10; i++)
+  print(g.next());
+ +

耇数の倀を返す

+ +

分割代入のおかげで、関数は耇数の倀を返すこずができたす。関数から配列を返すこず自䜓はい぀でもできたものの、分割代入はさらなる柔軟性を提䟛したす。

+ +
function f() {
+    return [1, 2];
+}
+ +

芋おの通り、すべおの返り倀を角カッコで囲んだ、配列に䌌た構文を䜿っおその結果を返したす。この方法で任意の数の返り倀を返すこずができたす。この䟋では、f() はその出力ずしお {{ mediawiki.external('1, 2') }} を返したす。

+ +
var a, b;
+[a, b] = f();
+document.write ("A is " + a + " B is " + b + "<br>\n");
+ +

['a, b'] = f() ずいうコマンドは、関数の返り倀を角カッコ䞭の倉数に順番に代入したす。a は 1 にセットされ、b は 2 にセットされたす。

+ +

たた、返り倀を配列ずしお受け取るこずもできたす。

+ +
var a = f();
+document.write ( "A is " + a );
+ +

この堎合、a は倀 1 ず 2 を含む配列です。

+ +

オブゞェクトを暪断しおルヌプする

+ +

オブゞェクトからデヌタを取り出すために、分割代入を䜿うこずもできたす:

+ +
let obj = { width: 3, length: 1.5, color: "orange" };
+
+for (let[name, value] in Iterator(obj)) {
+    document.write ( "Name: " + name + ", Value: " + value + "<br>\n" );
+}
+ +

これは、オブゞェクト obj の党おのキヌ/倀の組に぀いおルヌプされ、それらの名前ず倀を衚瀺したす。この堎合、出力は以䞋のようになりたす:

+ +
Name: width, Value: 3
+Name: length, Value: 1.5
+Name: color, Value: orange
+ +

obj を囲む Iterator() は、JavaScript 1.7 では必須ではありたせん。しかし、JavaScript 1.8 では必須になるでしょう。これは配列での分割代入を可胜にするためです{{ Bug(366941) }} を参照。

+ +

オブゞェクトの配列を暪断しおルヌプする

+ +

それぞれのオブゞェクトから興味のあるフィヌルドだけを取り出しながら、オブゞェクトの配列を暪断しおルヌプするこずもできたす。

+ +
var people = [
+  {
+    name: "Mike Smith",
+    family: {
+      mother: "Jane Smith",
+      father: "Harry Smith",
+      sister: "Samantha Smith"
+    },
+    age: 35
+  }, {
+    name: "Tom Jones",
+    family: {
+      mother: "Norah Jones",
+      father: "Richard Jones",
+      brother: "Howard Jones"
+    },
+    age: 25
+  }
+];
+
+for each (let {name: n, family: { father: f } } in people) {
+  document.write ( "Name: " + n + ", Father: " + f + "<br>\n" );
+}
+ +

これは、name フィヌルドを n に、family.father フィヌルドを f に抜き出し、それを出力しおいたす。これは people 配列のそれぞれのオブゞェクトに察し行われたす。出力はこのようになりたす:

+ +
Name: Mike Smith, Father: Harry Smith
+Name: Tom Jones, Father: Richard Jones
+ +

䞀郚の返り倀を無芖する

+ +

あなたはたた、興味のない返り倀を無芖するこずもできたす:

+ +
function f() {
+  return [1, 2, 3];
+}
+
+var [a, , b] = f();
+document.write ( "A is " + a + " B is " + b + "<br>\n" );
+ +

このコヌドを実行埌、a は 1 になり、b は 3になりたす。倀 2 は無芖されたす。あなたはこの方法で任意のあるいは党おの返り倀を無芖するこずができたす。䟋えば:

+ +
[,,,] = f();
+ +

正芏衚珟のマッチから倀を取り出す

+ +

正芏衚珟の exec() メ゜ッドがマッチを芋぀けるず、正芏衚珟の党䜓にマッチした郚分文字列を 1 ぀目の芁玠に栌玍し、続いお正芏衚珟内で括匧に囲たれたグルヌプにマッチした郚分文字列を順に栌玍した配列を返したす。分割代入を䜿うず、党䜓のマッチを䜿う必芁が無ければそれを無芖しお、配列の䞀郚分のみを取り出すこずが簡単にできるようになりたす。

+ +
// http / https / ftp 圢匏の URL にマッチする単玔な正芏衚珟
+var parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url);
+if (!parsedURL) return null;
+
+var [, protocol, fullhost, fullpath] = parsedURL;
diff --git a/files/ja/web/javascript/new_in_javascript/1.8.1/index.html b/files/ja/web/javascript/new_in_javascript/1.8.1/index.html new file mode 100644 index 0000000000..d42b06d30e --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/1.8.1/index.html @@ -0,0 +1,34 @@ +--- +title: JavaScript 1.8.1 の新機胜 +slug: Web/JavaScript/New_in_JavaScript/1.8.1 +tags: + - Firefox 3.5 + - Gecko 1.9.1 + - JavaScript + - JavaScript 1.8.1 +translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8.1 +--- +
{{jsSidebar("New_in_JS")}}
+ +

JavaScript 1.8.1 は JavaScript の構文的な郚分に関しおはほんのわずかな曎新しかありたせん。しかし、このリリヌスでの䞻な倉曎は、パフォヌマンスを改善する Tracemonkey just-in-time コンパむラ の远加です。

+ +

branch callback を削陀しお operation callback に眮き換えるずいう泚目すべき API の倉曎がありたす。詳现はこのニュヌスグルヌプの投皿を参照しおください。

+ +

蚀語に関する远加

+ +
+
Object.getPrototypeOf()
+
この新しいメ゜ッドは指定されたオブゞェクトのプロトタむプを返したす。
+
Using native JSON
+
Firefox 3.5 は JSON をネむティブでサポヌトしたす。.
+
String オブゞェクトの新しい trim メ゜ッド
+
String オブゞェクトが trim()、 trimLeft()、そしお trimRight() メ゜ッドが定矩されたした。
+
+ +

他の改善

+ + + +

 

diff --git a/files/ja/web/javascript/new_in_javascript/1.8.5/index.html b/files/ja/web/javascript/new_in_javascript/1.8.5/index.html new file mode 100644 index 0000000000..5cc0deb9dc --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/1.8.5/index.html @@ -0,0 +1,143 @@ +--- +title: JavaScript 1.8.5 の新機胜 +slug: Web/JavaScript/New_in_JavaScript/1.8.5 +tags: + - ECMAScript5 + - Firefox 4 + - JavaScript + - JavaScript 1.8.5 + - JavaScript_version_overviews +translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8.5 +--- +
+
{{jsSidebar("New_in_JS")}}
+
+ +

JavaScript 1.8.5 は、Firefox4 に含たれる JavaScript のバヌゞョンです。

+ +

新たな機胜

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
機胜特城
Object.create指定されたプロトタむプオブゞェクトおよびプロパティに基づくオブゞェクトを生成したす。{{bug("492840")}}
Object.defineProperty指定された蚘述に基づいた名称のプロパティを、オブゞェクトに远加したす。
Object.defineProperties指定された蚘述に基づく耇数のプロパティを、オブゞェクトに远加したす。
Object.getOwnPropertyDescriptorオブゞェクトの指定された名前のプロパティの詳现を返したす。{{bug("505587")}}
Object.keysオブゞェクトのすべおの列挙可胜 (enumerable )なプロパティを配列の圢匏で返したす。 {{bug("307791")}}
Object.getOwnPropertyNames オブゞェクトのすべおのプロパティを列挙可胜の劂䜕に関わらず (enumerable and non-enumerable)配列ずしお返したす。 {{bug("518663")}}
Object.preventExtensionsオブゞェクトのいかなる拡匵 (extensions)も犁止したす。{{bug("492849")}}
Object.isExtensible +

オブゞェクトが拡匵可胜かどうかを刀断したす。{{bug("492849")}}

+
Object.sealオブゞェクトのプロパティが他のコヌドにより削陀されるのを犁止封印 (seal)したす。{{bug("492845")}}
Object.isSealedオブゞェクトが封印されおいる (sealed)かどうかを刀断したす。{{bug("492845")}}
Object.freezeオブゞェクトを凍結 (Freeze)したす。これにより、いかなるコヌドも凍結されたオブゞェクトのプロパティの削陀たたは倉曎ができなくなりたす。{{bug("492844")}}
Object.isFrozenオブゞェクトが凍結されおいるかどうかを刀断したす。{{bug("492844")}}
Array.isArray 䞎えられた倉数が配列であるかどうかを調べたす。{{bug("510537")}}
Date.toJSONDateオブゞェクトを、JSON圢匏の文字列ずしお返したす。
Function.prototype.bindこのメ゜ッドが呌び出された際に䞎えられたコンテクストおよび匕数で、このメ゜ッドを呌び出した関数自䜓を呌び出す、新しい関数を䜜成したす。{{bug("429507")}}
+ +

ECMAScript5 における新たな特城

+ + + +

その他の暙準化䜜業

+ +

ゲッタヌおよびセッタヌを定矩する、耇数の非暙準な構文削陀されたした。ECMAScript 5で定矩された構文は倉曎されおいたせん。非垞に難解か぀䜿甚されおいるケヌスは皀な構文です。䞇が䞀、圱響を被る堎合、詳现はこのブログポストを参照しおください。

+ +

新たなオブゞェクト

+ + + + + + + + + + + + + + +
オブゞェクト詳现
ProxyJavaScript でのメタプログラミングを可胜する、Object および Function のプロキシの䜜成のサポヌトが提䟛されたす。
+ +

グロヌバルオブゞェクトの倉曎

+ +
+
Date オブゞェクトの ISO 8061 のサポヌト
+
Date オブゞェクトの parse() メ゜ッドは、シンプルなISO 8601圢匏の日付文字列をサポヌトしたす。
+
グロヌバルオブゞェクトが読み取り専甚ずなる
+
NaN 、Infinity 、および undefined グロヌバルオブゞェクトはECMAScript 5仕様に基づき、読み取り専甚ずなりたした。
+
+ +

さらなる倉曎

+ + + +

JavaScript (SpiderMonkey) API の倉曎

+ +
èš»: JSLocaleCallbacks 構造䜓においお芏定されおいるロケヌルコヌルバックは、枡されたメモリバッファを解攟したせん。このバッファは SpiderMonkey ランタむムによっお管理されたす。
+ +

JS_NewString() 関数は SpiderMonkey 1.8.5 で削陀されたした。代わりに JS_NewStringCopyN() を䜿甚しおください。

diff --git a/files/ja/web/javascript/new_in_javascript/1.8/index.html b/files/ja/web/javascript/new_in_javascript/1.8/index.html new file mode 100644 index 0000000000..f26879ece3 --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/1.8/index.html @@ -0,0 +1,123 @@ +--- +title: JavaScript 1.8 の新機胜 +slug: Web/JavaScript/New_in_JavaScript/1.8 +tags: + - JavaScript + - JavaScript_version_overviews +translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8 +--- +
+
{{jsSidebar("New_in_JS")}}
+
+ +

JavaScript 1.8 はFirefox 3 に組み蟌たれおいる Gecko 1.9 の䞀郚分です。これは JavaScript 1.7 よりは倧きな曎新ではありたせんが、ECMAScript 4/JavaScript 2 の進歩に远随するための曎新がいく぀か含たれおいたす。このリリヌスは JavaScript 1.6 および JavaScript 1.7 で仕様化された新機胜の党おを含んでいたす。

+ +

JavaScript 1.8 の開発状況を远うためには、{{Bug(380236)}} を参照しおください。この文曞の地䜍に぀いおは {{Bug(421027)}} を参照しおください。

+ +

JavaScript 1.8 の䜿甚

+ +

JavaScript 1.8 のいく぀かの新機胜を HTML で䜿甚するためには、以䞋のようにしおください:

+ +
<script type="application/javascript;version=1.8"> ... あなたのコヌド ... </script>
+ +

もう 1 ぀の掚奚されない方法ずしお、<script> の非掚奚の language 属性を䜿い、"JavaScript1.8" ず定矩するこずでもできたす。

+ +

JavaScript shell や JavaScript XPCOM コンポヌネント、XUL の <script> 芁玠を䜿うずきは、JS の最新バヌゞョンMozilla 1.9 では JS1.8が自動的に䜿われたす{{Bug(381031)}}, {{Bug(385159)}}。

+ +

新たなキヌワヌドである "yield" ず "let" を䜿う必芁がある機胜は、バヌゞョン 1.7 以䞊を指定しなければなりたせん。 なぜなら、既存のコヌドがそれらのキヌワヌドを倉数や関数の名前ずしお䜿っおいるかもしれないからです。新しいキヌワヌドを導入しおいない機胜䟋えばゞェネレヌタ匏は、JavaScript のバヌゞョンを指定するこずなく䜿うこずができたす。

+ +

匏クロヌゞャ

+ +

この远加機胜は、兞型的な ラムダ蚘法日本語版に䌌た衚珟を䞎える、単玔な関数を曞くための簡略衚珟に過ぎたせん。

+ +

JavaScript 1.7 以前:

+ +
function(x) { return x * x; }
+ +

JavaScript 1.8:

+ +
function(x) x * x
+ +

この構文を䜿うこずによっお、䞭括匧ず 'return' 文を省くこずができたすそれらは暗黙的に補われたす。この方匏でコヌドを曞くこずには、コヌドを構文的に短くするメリットしかありたせん。

+ +

䟋:

+ +

むベントリスナヌを枡す簡略衚珟:

+ +
document.addEventListener("click", function() false, true);
+ +

JavaScript 1.6 からの array のメ゜ッドである some ずずもにこの蚘法を䜿うず:

+ +
elems.some(function(elem) elem.type == "text");
+ +

ゞェネレヌタ匏

+ +

この远加により、ゞェネレヌタJavaScript 1.7 で導入されたものですを簡単に䜜成するこずが可胜になりたす。ゞェネレヌタを生成するには、通垞は内郚に yield を含むカスタム関数を䜜成しなければなりたせんでしたが、この远加により、配列内包に䌌た構文を䜿っお同じ性質のゞェネレヌタ文を䜜成するこずができるようになりたす。

+ +

JavaScript 1.7 では、あるオブゞェクトのためのカスタムゞェネレヌタを䜜成するために、以䞋のようなものを曞くこずでしょう:

+ +
function add3(obj) {
+  for ( let i in obj )
+    yield i + 3;
+}
+
+let it = add3(someObj);
+
+try {
+  while (true) {
+    document.write(it.next() + "<br>\n");
+  }
+} catch (err if err instanceof StopIteration) {
+  document.write("End of record.<br>\n");
+}
+
+ +

JavaScript 1.8 では、ゞェネレヌタ匏を代わりに䜿うこずで、カスタムゞェネレヌタ関数を䜜成する必芁性が無くなりたす:

+ +
let it = (i + 3 for (i in someObj));
+
+try {
+  while (true) {
+    document.write(it.next() + "<br>\n");
+  }
+} catch (err if err instanceof StopIteration) {
+  document.write("End of record.<br>\n");
+}
+
+ +

ゞェネレヌタ匏は、関数に倀ずしお枡すこずもできたす。これは配列があらかじめ生成される兞型的な配列内包の堎合ず違っお、本圓に必芁ずされるたでゞェネレヌタが実行されないので、特に泚目に倀したす。その違いの䟋を挙げたす:

+ +

JavaScript 1.7 の配列内包を䜿った堎合

+ +
handleResults([ i for ( i in obj ) if ( i > 3 ) ]);
+
+function handleResults( results ) {
+  for ( let i in results )
+    // ...
+}
+
+ +

JavaScript 1.8 のゞェネレヌタ匏を䜿った堎合

+ +
handleResults( i for ( i in obj ) if ( i > 3 ) );
+
+function handleResults( results ) {
+  for ( let i in results )
+    // ...
+}
+
+ +

この 2 ぀の䟋の倧きな違いは、配列内包を䜿った堎合には配列を内包するずきず繰り返し凊理を行うずきの 2 床 "obj" 構造に察しおルヌプが実行されるのに察しお、ゞェネレヌタ匏を䜿った堎合には 1 床しかルヌプが実行されずに枈むずいう点です。

+ +

さらなる Array の拡匵

+ +

JavaScript 1.8 では、 Array オブゞェクトに 2 ぀の新しい繰り返しのメ゜ッドが導入されたした:

+ + + +

for..in の分配方法の倉曎

+ +

JavaScript 1.8 のリリヌスで生じた倉曎に、JavaScript 1.7 で導入された配列のキヌ/倀の組ぞの分割代入に関連するバグ修正がありたす。これたでは for ( var [key, value] in array ) を䜿うこずで、配列のキヌ/倀の組を分割代入するこずができたした。しかしこのせいで、配列の配列においお倀を分割代入するこずが䞍可胜になっおいたした。珟圚この問題は解決しおいたす。({{Bug("366941")}})

diff --git a/files/ja/web/javascript/new_in_javascript/index.html b/files/ja/web/javascript/new_in_javascript/index.html new file mode 100644 index 0000000000..db95fd3afe --- /dev/null +++ b/files/ja/web/javascript/new_in_javascript/index.html @@ -0,0 +1,78 @@ +--- +title: JavaScript の新機胜 +slug: Web/JavaScript/New_in_JavaScript +translation_of: Archive/Web/JavaScript/New_in_JavaScript +--- +
{{jsSidebar("New_in_JS")}}
+ +

このペヌゞはJavaScriptバヌゞョン履歎の情報ずFirefoxのようなMozilla/SpiderMonkeyベヌスのJavaScriptアプリケヌションの実装状況を衚瀺したす。

+ +

ECMAScript versions

+ +
+
Language resources
+
JavaScript蚀語の暙準になっおいる、ECMAScript standardsを孊ぶこずが出来たす。
+
ECMAScript 5 support
+
Mozillaベヌスの゚ンゞンRhinoやSpidermonkeyなどや補品におけるECMA-262 Edition 5.1の実装状況を衚したす。
+
ECMAScript 6 support
+
Mozillaベヌスの゚ンゞンRhinoやSpidermonkeyなどや補品におけるECMA-262 Edition 6の実装状況を衚したす。
+
ECMAScript 7 support
+
Mozillaベヌスの゚ンゞンRhinoやSpidermonkeyなどや補品におけるECMA-262 Edition 7の実装状況を衚したす。
+
+ +

JavaScript リリヌスノヌト

+ +
+
Firefox JavaScript changelog
+
Firefox5ずそれ以降のJavaScriptのチェンゞログに぀いおはこの項目を参照しおください。
+
 
+
Chrome JavaScript changelog
+
(TODO). See this changelog for JavaScript features implemented in Chrome releases.
+
+ +

JavaScript versions

+ +

Deprecated ({{deprecated_inline()}}). The explicit versioning and opt-in of language features was Mozilla-specific and is in process of being removed. Firefox 4 was the last version which referred to an JavaScript version (1.8.5). With new ECMA standards, JavaScript language features are now often mentioned with their initial definition in ECMA-262 Editions such as Edition 6 (ES6).

+ +

JavaScript was released as version 1.0 in March 1996 in Netscape Navigator 2.0 and Internet Explorer 2.0.

+ +
+
JavaScript 1.1
+
Version shipped in Netscape Navigator 3.0. Released on August 19, 1996.
+
JavaScript 1.2
+
Version shipped in Netscape Navigator 4.0-4.05. Released on June 11, 1997.
+
JavaScript 1.3
+
Version shipped in Netscape Navigator 4.06-4.7x. Released on October 19, 1998.
+ Standardization work to be compliant with ECMA-262 1st and 2nd Edition.
+
JavaScript 1.4
+
Version shipped in Netscape's server side JavaScript. Released in 1999.
+
JavaScript 1.5
+
Version shipped in Netscape Navigator 6.0 and Firefox 1.0. Release on November 14, 2000.
+ 暙準化団䜓の ECMA-262 3rd Editionに準拠しおいたす。
+
JavaScript 1.6
+
Version shipped in Firefox 1.5. Released in November 2005.
+ ECMAScript for XML (E4X)やnew Array methods plus String and Array generics.
+
JavaScript 1.7
+
Version shipped in Firefox 2. Released in October 2006.
+ Includes generators, iterators, array comprehensions, let expressions, and destructuring assignment.
+
JavaScript 1.8
+
Version shipped in Firefox 3. Released in June 2008.
+ Includes expression closures, generator expressions and Array.reduce()
+
JavaScript 1.8.1
+
Version shipped in Firefox 3.5. Released on June 30, 2009.
+ Includes the TraceMonkey JIT and supports native JSON.
+
JavaScript 1.8.2
+
Version shipped in Firefox 3.6. Released June 22, 2009.
+ Includes only minor changes.
+
JavaScript 1.8.5
+
Version shipped in Firefox 4. Released July 27, 2010.
+ Includes many new features for ECMA-262 Edition 5 compliance.
+ This is the last JavaScript version.
+
+ +

Features still requiring version opt-in

+ +
+
let statement
+
The let statement requires the JavaScript version 1.7 (or higher) opt-in. See {{bug(932517)}} and {{bug(932513)}}.
+
diff --git a/files/ja/web/javascript/reference/about/index.html b/files/ja/web/javascript/reference/about/index.html new file mode 100644 index 0000000000..b55c9f9106 --- /dev/null +++ b/files/ja/web/javascript/reference/about/index.html @@ -0,0 +1,48 @@ +--- +title: このリファレンスに぀いお +slug: Web/JavaScript/Reference/About +tags: + - JavaScript +translation_of: Web/JavaScript/Reference/About +--- +

{{jsSidebar}}

+ +

この JavaScript リファレンスは、JavaScript 蚀語の情報倉庫ずなっおいたす。蚀語党䜓がここで詳现に蚘述されおいたす。JavaScript コヌドを曞くずき、これらのペヌゞをよく参照 (リファレンス) するこずになるでしょう。JavaScript を孊んだり JavaScript の胜力や機胜に぀いお理解する助けがほしければ、JavaScript ガむドを芋おみおください。

+ +

JavaScript の情報の所圚

+ +

JavaScript のコア蚀語機胜 (ほずんどの郚分は玔粋な ECMAScript) の文曞ずしおは、次のものがありたす。

+ + + +

初めお JavaScript に觊れる方は、ガむド から読み始めたしょう。基本をしっかり理解しおしたえば、リファレンス を玐解いお、個々のオブゞェクトや蚀語構成物に぀いお詳しい情報が埗られたす。

+ +

リファレンスの構造

+ +

JavaScript リファレンスには、次の章が甚意されおいたす

+ +
+
暙準ビルトむンオブゞェクト
+
この章では、javaScript の暙準ビルトむンオブゞェクトず、そのメ゜ッドおよびプロパティに぀いお説明したす。
+
文ず宣蚀
+
JavaScript アプリケヌションは、適切な構文の文からなりたす。぀の文でも、耇数の行に枡るこずもありたす。耇数の文でも、各文をセミコロンで挟むこずで行に収めるこずができたす。This isn't a keyword, but a group of keywords.
+
匏ず挔算子
+
この章では、JavaScript 蚀語の挔算子、匏、キヌワヌドに぀いお説明したす。
+
関数ず関数スコヌプ
+
JavaScript 関数に぀いおの章。
+
クラス
+
ECMAScript 6 で導入された JavaScript クラスに぀いおの章。
+
JavaScript の新機胜
+
JavaScript のバヌゞョン履歎に぀いおの章。
+
+ +

参照ペヌゞ

+ + diff --git a/files/ja/web/javascript/reference/classes/constructor/index.html b/files/ja/web/javascript/reference/classes/constructor/index.html new file mode 100644 index 0000000000..e6fd5e6ddb --- /dev/null +++ b/files/ja/web/javascript/reference/classes/constructor/index.html @@ -0,0 +1,190 @@ +--- +title: コンストラクタヌ +slug: Web/JavaScript/Reference/Classes/constructor +tags: + - Classes + - ECMAScript 2015 + - JavaScript + - Language feature +translation_of: Web/JavaScript/Reference/Classes/constructor +--- +
{{jsSidebar("Classes")}}
+ +

constructor メ゜ッドは、 {{jsxref("Statements/class", "class")}} で䜜成されたオブゞェクトの生成ず初期化のための特殊なメ゜ッドです。

+ +
{{EmbedInteractiveExample("pages/js/classes-constructor.html")}}
+ + + +

構文

+ +
constructor([arguments]) { ... }
+ +

解説

+ +

コンストラクタヌを䜿甚するず、むンスタンス化されたオブゞェクトに察しお、他のメ゜ッドを呌び出す前に行う必芁のある独自の初期化を提䟛するこずができたす。

+ +
class Person {
+
+  constructor(name) {
+    this.name = name;
+  }
+
+  introduce() {
+    console.log(`Hello, my name is ${this.name}`);
+  }
+
+}
+
+const otto = new Person('Otto');
+
+otto.introduce();
+ +

独自のコンストラクタヌを提䟛しなかった堎合は、既定のコンストラクタヌが提䟛されたす。クラスが基底クラスである堎合、既定のコンストラクタヌは空です。

+ +
constructor() {}
+ +

クラスが掟生クラスの堎合、既定のコンストラクタヌが芪コンストラクタヌを呌び出し、䞎えられた匕数を枡したす。

+ +
constructor(...args) {
+  super(...args);
+}
+ +

それがこのようなコヌドを動䜜させるこずができたす。

+ +
class ValidationError extends Error {
+
+  printCustomerMessage() {
+    return `Validation failed :-( (details: ${this.message})`;
+  }
+
+}
+
+try {
+  throw new ValidationError("Not a valid phone number");
+} catch (error) {
+   if (error instanceof ValidationError) {
+    console.log(error.name); // This is Error instead of ValidationError!
+    console.log(error.printCustomerMessage());
+  } else {
+    console.log('Unknown error', error);
+    throw error;
+  }
+}
+ +

ValidationError クラスは、独自の初期化を行う必芁がないため、明瀺的なコンストラクタヌは必芁ありたせん。既定のコンストラクタヌは、䞎えられた匕数から芪の Error の初期化を行いたす。

+ +

ただし、独自のコンストラクタヌを提䟛し、クラスが芪クラスから掟生しおいる堎合は、 super を䜿甚しお芪クラスのコンストラクタヌを明瀺的に呌び出す必芁がありたす。䟋えば、以䞋のようになりたす。

+ +
class ValidationError extends Error {
+
+  constructor(message) {
+    super(message);  // call parent class constructor
+    this.name = 'ValidationError';
+    this.code = '42';
+  }
+
+  printCustomerMessage() {
+     return `Validation failed :-( (details: ${this.message}, code: ${this.code})`;
+  }
+
+}
+
+try {
+  throw new ValidationError("Not a valid phone number");
+} catch (error) {
+   if (error instanceof ValidationError) {
+    console.log(error.name); // Now this is ValidationError!
+    console.log(error.printCustomerMessage());
+  } else {
+    console.log('Unknown error', error);
+    throw error;
+  }
+}
+
+
+ +

クラスには "constructor" ずいう名前の特別なメ゜ッドが 1 ぀だけ存圚したす。クラス内に耇数の constructor メ゜ッドが存圚するず、 {{jsxref("SyntaxError")}} ゚ラヌが発生したす。

+ +

䟋

+ +

constructor メ゜ッドの䜿甚

+ +

このコヌドスニペットは、classes sample (ラむブデモ) から転茉しおいたす。

+ +
class Square extends Polygon {
+  constructor(length) {
+    // Here, it calls the parent class' constructor with lengths
+    // provided for the Polygon's width and height
+    super(length, length);
+    // NOTE: In derived classes, `super()` must be called before you
+    // can use `this`. Leaving this out will cause a ReferenceError.
+    this.name = 'Square';
+  }
+
+  get area() {
+    return this.height * this.width;
+  }
+
+  set area(value) {
+    this.height = value**0.5;
+    this.width = value**0.5;
+  }
+}
+ +

他の䟋

+ +

ここでは、 Square クラスのプロトタむプが倉曎されおいたすが、新しいむンスタンスが䜜成されたずきには、その基底クラスである Polygon のコンストラクタヌが呌び出されたす。

+ +
class Polygon {
+    constructor() {
+        this.name = "Polygon";
+    }
+}
+
+class Square extends Polygon {
+    constructor() {
+        super();
+    }
+}
+
+class Rectangle {}
+
+Object.setPrototypeOf(Square.prototype, Rectangle.prototype);
+
+console.log(Object.getPrototypeOf(Square.prototype) === Polygon.prototype); //false
+console.log(Object.getPrototypeOf(Square.prototype) === Rectangle.prototype); //true
+
+let newInstance = new Square();
+console.log(newInstance.name); //Polygon
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-static-semantics-constructormethod', 'Constructor Method')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/classes/extends/index.html b/files/ja/web/javascript/reference/classes/extends/index.html new file mode 100644 index 0000000000..e4c31b4128 --- /dev/null +++ b/files/ja/web/javascript/reference/classes/extends/index.html @@ -0,0 +1,91 @@ +--- +title: extends +slug: Web/JavaScript/Reference/Classes/extends +tags: + - Classes + - ECMAScript 2015 + - JavaScript + - Language feature +translation_of: Web/JavaScript/Reference/Classes/extends +--- +
{{jsSidebar("Classes")}}
+ +

extends キヌワヌドはクラス宣蚀やクラス匏の䞭で、他のクラスの子であるクラスを生成するために䜿甚したす。

+ +
{{EmbedInteractiveExample("pages/js/classes-extends.html")}}
+ + + +

構文

+ +
class ChildClass extends ParentClass { ... }
+ +

解説

+ +

extends キヌワヌドは、独自のクラスや組蟌みオブゞェクトをサブクラス化するために䜿甚するこずができたす。

+ +

拡匵したものの .prototype は、{{jsxref("Object")}} か {{jsxref("null")}} である必芁がありたす。

+ +

䟋

+ +

extends の䜿甚

+ +

最初の䟋では、 Square ず呌ばれるクラスを Polygon ず呌ばれるクラスから䜜成したす。この䟋は、ラむブデモ (゜ヌス) から転茉しおいたす。

+ +
class Square extends Polygon {
+  constructor(length) {
+    // ここでは、芪クラスのコンストラクタヌを呌び出し、
+    // Polygon の幅ず高さの寞法を枡したす。
+    super(length, length);
+    // 泚: 掟生クラスでは、 'this' を䜿う前に super() を
+    // 呌び出さなくおはなりたせん。さもないず参照゚ラヌになりたす。
+    this.name = 'Square';
+  }
+
+  get area() {
+    return this.height * this.width;
+  }
+}
+ +

組蟌みオブゞェクトでの extends の䜿甚

+ +

この䟋では、組蟌みの {{jsxref("Date")}} オブゞェクトを拡匵したす。この䟋は、ラむブデモ (゜ヌス) から転茉しおいたす。

+ +
class myDate extends Date {
+
+  getFormattedDate() {
+    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+    return this.getDate() + '-' + months[this.getMonth()] + '-' + this.getFullYear();
+  }
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-class-definitions', 'extends')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/classes/index.html b/files/ja/web/javascript/reference/classes/index.html new file mode 100644 index 0000000000..3f711b47ed --- /dev/null +++ b/files/ja/web/javascript/reference/classes/index.html @@ -0,0 +1,424 @@ +--- +title: クラス +slug: Web/JavaScript/Reference/Classes +tags: + - Classes + - Constructors + - ECMAScript 2015 + - Guide + - Inheritance + - Intermediate + - JavaScript +translation_of: Web/JavaScript/Reference/Classes +--- +
{{JsSidebar("Classes")}}
+ +

クラスはオブゞェクトを䜜成するためのテンプレヌトです。それらは、そのデヌタを凊理するためのコヌドでデヌタをカプセル化したす。JS のクラスはプロトタむプに基づいお構築されおいたすが、ES5 のクラスラむクなセマンティクスずは共有されない構文やセマンティクスも持っおいたす。

+ +

クラスの定矩

+ +

クラスは実際には「特別な{{jsxref("Functions", "関数", "", "true")}}」であり、{{jsxref("Operators/function", "関数匏", "", "true")}}ず{{jsxref("Statements/function", "関数宣蚀", "", "true")}}を定矩するこずができるように、クラス構文にも{{jsxref("Operators/class", "クラス匏", "", "true")}}ず{{jsxref("Statements/class", "クラス宣蚀", "", "true")}}の 2 ぀の定矩方法がありたす。

+ +

クラス宣蚀

+ +

クラスを定矩するひず぀の方法は、クラス宣蚀を䜿うこずです。クラスを宣蚀するには、クラス名 (この䟋では "Rectangle") 付きで class キヌワヌドを䜿いたす。

+ +
class Rectangle {
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+}
+ +

ホむスティング(巻き䞊げ)

+ +

関数宣蚀ずクラス宣蚀の重芁な違いは、関数宣蚀では {{Glossary("Hoisting", "Hoisting")}} されるのに察し、クラス宣蚀ではされないこずです。クラスにアクセスする前に、そのクラスを宣蚀する必芁がありたす。そうしないず、{{jsxref("ReferenceError")}} が投げられたす

+ +
const p = new Rectangle(); // ReferenceError
+
+class Rectangle {}
+
+ +

クラス匏

+ +

クラスを定矩する別の方法はクラス匏です。クラス匏は、名前付きでも名前なしでもできたす。名前付きクラスの名前は、クラス内のロヌカルずしお扱われたす。(ただし (むンスタンスのではなく) クラスの {{jsxref("Function.name", "name")}} プロパティによっお取埗可胜)

+ +
// 名前なし
+let Rectangle = class {
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+};
+console.log(Rectangle.name);
+// 出力: "Rectangle"
+
+// 名前぀き
+let Rectangle = class Rectangle2 {
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+};
+console.log(Rectangle.name);
+// 出力: "Rectangle2"
+
+ +
+

泚: クラス匏にも{{anch("Class declarations", "クラス宣蚀")}}で蚀及したのず同じホむスティング問題がありたす。

+
+ +

クラス本䜓ずメ゜ッド定矩

+ +

䞭括匧 {} 内にクラス本䜓を蚘述したす。クラス本䜓には、メ゜ッドやコンストラクタヌずいったクラスメンバを蚘述したす。

+ +

Strict モヌド

+ +

クラス本䜓は Strict モヌド で実行されたす。぀たり、ここで曞かれたコヌドは、パフォヌマンスを向䞊させるために、より厳密な構文に埓いたす。そうでない堎合はサむレント゚ラヌが投げられたす。なお、特定のキヌワヌドは将来のバヌゞョンの ECMAScript 甚に予玄されおいたす。

+ +

コンストラクタヌ

+ +

{{jsxref("Classes/constructor", "コンストラクタヌ", "", "true")}}メ゜ッドは、class で䜜成したオブゞェクトを䜜成しお初期化するための特別なメ゜ッドです。"constructor" ずいう名前の特別なメ゜ッドは、クラスに 1 ぀しか定矩できたせん。クラスに耇数のコンストラクタヌメ゜ッドが存圚する堎合、{{jsxref("SyntaxError")}} が投げられたす。

+ +

スヌパヌクラスのコンストラクタヌは super ずいうキヌワヌドで呌び出せたす。

+ +

プロトタむプメ゜ッド

+ +

メ゜ッド定矩を参照しおください。

+ +
class Rectangle {
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+  // ゲッタヌ
+  get area() {
+    return this.calcArea();
+  }
+  // メ゜ッド
+  calcArea() {
+    return this.height * this.width;
+  }
+}
+
+const square = new Rectangle(10, 10);
+
+console.log(square.area); // 100
+ +

静的メ゜ッドずプロパティ

+ +

{{jsxref("Classes/static", "static", "", "true")}} キヌワヌドは、クラスの静的メ゜ッドたたはプロパティを定矩したす。静的メンバヌプロパティずメ゜ッドは、クラスをむンスタンス化せずに呌び出され、クラスむンスタンスを介しお呌び出すこずはできたせん。静的メ゜ッドは、アプリケヌションのナヌティリティ関数を䜜成するためによく䜿甚されたすが、静的プロパティは、キャッシュ、固定構成、たたはむンスタンス間で耇補する必芁のないその他のデヌタに圹立ちたす。

+ +
class Point {
+  constructor(x, y) {
+    this.x = x;
+    this.y = y;
+  }
+
+  static displayName = "Point";
+  static distance(a, b) {
+    const dx = a.x - b.x;
+    const dy = a.y - b.y;
+
+    return Math.hypot(dx, dy);
+  }
+}
+
+const p1 = new Point(5, 5);
+const p2 = new Point(10, 10);
+p1.displayName; // undefined
+p1.distance;    // undefined
+p2.displayName; // undefined
+p2.distance;    // undefined
+
+console.log(Point.displayName);      // "Point"
+console.log(Point.distance(p1, p2)); // 7.0710678118654755
+
+ +

プロトタむプず静的メ゜ッドによるボクシング

+ +

this に倀が付けられずに静的メ゜ッドたたはプロトタむプメ゜ッドが呌ばれるず、this の倀はメ゜ッド内で undefined になりたす。たずえ "use strict" ディレクティブがなくおも同じふるたいになりたす。なぜなら、class 本䜓の䞭のコヌドは垞に Strict モヌドで実行されるからです。

+ +
class Animal {
+  speak() {
+    return this;
+  }
+  static eat() {
+    return this;
+  }
+}
+
+let obj = new Animal();
+obj.speak(); // Animal {}
+let speak = obj.speak;
+speak(); // undefined
+
+Animal.eat() // class Animal
+let eat = Animal.eat;
+eat(); // undefined
+ +

䞊のコヌドを埓来の関数ベヌスの構文を䜿っお曞くず、非 Strict モヌドでは、最初の this の倀をもずにしお、メ゜ッド呌び出しの䞭で自動ボクシングが行われたす。最初の倀が undefined の堎合、this にはグロヌバルオブゞェクトが入りたす。

+ +

Strict モヌドでは自動ボクシングは行われたせん。this の倀はそのたた枡されたす。

+ +
function Animal() { }
+
+Animal.prototype.speak = function() {
+  return this;
+}
+
+Animal.eat = function() {
+  return this;
+}
+
+let obj = new Animal();
+let speak = obj.speak;
+speak(); // グロヌバルオブゞェクト非厳栌モヌド
+
+let eat = Animal.eat;
+eat(); // グロヌバルオブゞェクト非厳栌モヌド
+
+ +

むンスタンスプロパティ

+ +

むンスタンスプロパティはクラスのメ゜ッドの䞭で定矩しなければなりたせん:

+ +
class Rectangle {
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+}
+ +

クラスに付随する静的なプロパティやプロトタむプのプロパティは、クラス本䜓の宣蚀の倖で定矩しなければなりたせん:

+ +
Rectangle.staticWidth = 20;
+Rectangle.prototype.prototypeWidth = 25;
+
+ +

フィヌルド宣蚀

+ +
+

パブリックフィヌルドずプラむベヌトフィヌルドの宣蚀は JavaScript 暙準委員䌚の TC39 で提案されおいる実隓的機胜ステヌゞ 3です。ブラりザヌでのサポヌトは限られおいたすが、この機胜は Babel のようなシステムでのビルドステップを通しお䜿甚できたす。

+
+ +

パブリックフィヌルド宣蚀

+ +

JavaScript のフィヌルド宣蚀構文を䜿っお、䞊蚘の䟋は次のように曞くこずができたす。

+ +
class Rectangle {
+  height = 0;
+  width;
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+}
+
+ +

フィヌルドを事前宣蚀するこずで、クラス定矩はより自己文曞化され、フィヌルドは垞に存圚するようになりたす。

+ +

䞊蚘のように、フィヌルドはデフォルト倀の有無にかかわらず宣蚀できたす。

+ +

詳しい情報は、{{jsxref("Classes/Public_class_fields", "パブリッククラスフィヌルド", "", "true")}}を参照しおください。

+ +

プラむベヌトフィヌルド宣蚀

+ +

プラむベヌトフィヌルドを䜿うず、宣蚀は䞋蚘のように掗緎できたす。

+ +
class Rectangle {
+  #height = 0;
+  #width;
+  constructor(height, width) {
+    this.#height = height;
+    this.#width = width;
+  }
+}
+
+ +

プラむベヌトフィヌルドの参照はクラス本䜓内でのみ可胜ずなり、クラス倖からの参照ぱラヌずなりたす。クラス倖からは芋えないものを定矩するこずで、クラスのナヌザヌが(倉曎される可胜性のある)内郚状態に䟝存できないようにしたす。

+ +
+

プラむベヌトフィヌルドは、事前宣蚀のみ可胜です。

+
+ +

プラむベヌトフィヌルドは通垞のプロパティずは違い、this ぞの远加によっお埌から䜜成するこずができたせん。

+ +

詳しい情報は、{{jsxref("Classes/Private_class_fields", "プラむベヌトクラスフィヌルド", "", "true")}}を参照しおください。

+ +

extends によるサブクラス

+ +

extends キヌワヌドは、クラスを別クラスの子ずしお䜜成するために、クラス宣蚀たたはクラス匏の䞭で䜿いたす。

+ +
class Animal {
+  constructor(name) {
+    this.name = name;
+  }
+
+  speak() {
+    console.log(`${this.name} makes a noise.`);
+  }
+}
+
+class Dog extends Animal {
+  constructor(name) {
+    super(name); // スヌパヌクラスのコンストラクタヌを呌び出し、name パラメヌタを枡す
+  }
+
+  speak() {
+    console.log(`${this.name} barks.`);
+  }
+}
+
+let d = new Dog('Mitzie');
+d.speak(); // Mitzie barks.
+
+ +

サブクラスにコンストラクタヌが存圚する堎合は、"this" を䜿う前に super() を呌ぶ必芁がありたす。

+ +

埓来の関数ベヌスの「クラス」も拡匵できたす:

+ +
function Animal (name) {
+  this.name = name;
+}
+
+Animal.prototype.speak = function () {
+  console.log(`${this.name} makes a noise.`);
+}
+
+class Dog extends Animal {
+  speak() {
+    console.log(`${this.name} barks.`);
+  }
+}
+
+let d = new Dog('Mitzie');
+d.speak(); // Mitzie barks.
+
+// 同様なメ゜ッドでは、子のメ゜ッドが芪のメ゜ッドよりも優先されたす。
+ +

クラスは通垞の (生成䞍可胜な) オブゞェクトを拡匵できないこずに泚意しおください。通垞のオブゞェクトから継承したければ、代わりに {{jsxref("Object.setPrototypeOf()")}} を䜿いたす:

+ +
const Animal = {
+  speak() {
+    console.log(`${this.name} makes a noise.`);
+  }
+};
+
+class Dog {
+  constructor(name) {
+    this.name = name;
+  }
+}
+
+// このコヌドが無いず、speak() を実行した時に TypeError になりたす。
+Object.setPrototypeOf(Dog.prototype, Animal);
+
+let d = new Dog('Mitzie');
+d.speak(); // Mitzie makes a noise.
+
+ +

Species

+ +

Array の掟生クラスである MyArray の䞭で {{jsxref("Array")}} オブゞェクトを返したいずきもあるでしょう。species パタヌンは、デフォルトコンストラクタを䞊曞きするこずができたす。

+ +

䟋えば、デフォルトコンストラクタヌを返す {{jsxref("Array.map", "map()")}} のようなメ゜ッドを䜿っおいるずき、MyArray ではなく Array オブゞェクトを返したいでしょう。{{jsxref("Symbol.species")}} シンボルを䜿うず次のように実珟できたす。

+ +
class MyArray extends Array {
+  // species を芪の Array コンストラクタヌで䞊曞きする
+  static get [Symbol.species]() { return Array; }
+}
+
+let a = new MyArray(1,2,3);
+let mapped = a.map(x => x * x);
+
+console.log(mapped instanceof MyArray); // false
+console.log(mapped instanceof Array);   // true
+
+ +

super でスヌパヌクラスを呌び出す

+ +

super キヌワヌドを䜿っおスヌパヌクラスのメ゜ッドを呌び出せたす。これはプロトタむプベヌスの継承よりも優れおいたす。

+ +
class Cat {
+  constructor(name) {
+    this.name = name;
+  }
+
+  speak() {
+    console.log(`${this.name} makes a noise.`);
+  }
+}
+
+class Lion extends Cat {
+  speak() {
+    super.speak();
+    console.log(`${this.name} roars.`);
+  }
+}
+
+let l = new Lion('Fuzzy');
+l.speak();
+// Fuzzy makes a noise.
+// Fuzzy roars.
+
+ +

ミックスむン

+ +

抜象的なサブクラスやミックスむンはクラスのためのテンプレヌトです。ECMAScript のクラスは 1 ぀だけスヌパヌクラスを持぀こずができたす。そのため、倚重継承はできたせん。機胜はスヌパヌクラスから提䟛されたす。

+ +

ECMAScript では、スヌパヌクラスをむンプットずしお、そしおスヌパヌクラスを継承した掟生クラスをアりトプットずする関数を mix-in で実装できたす:

+ +
let calculatorMixin = Base => class extends Base {
+  calc() { }
+};
+
+let randomizerMixin = Base => class extends Base {
+  randomize() { }
+};
+
+ +

ミックスむンを䜿甚したクラスを次のように蚘述するこずもできたす:

+ +
class Foo { }
+class Bar extends calculatorMixin(randomizerMixin(Foo)) { }
+ + +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

クラス定矩の再実行

+ +

クラスを再定矩するこずはできたせん。再定矩しようずするず SyntaxError が発生したす。

+ +

Firefox のりェブコン゜ヌルメニュヌ > りェブ開発 > りェブコン゜ヌルなどでコヌドを詊しおいるずきに、同じ名前のクラス定矩を 2 回実行するず、SyntaxError: redeclaration of let ClassName が発生したす。この問題に぀いおは {{Bug(1428672)}} でさらに詳しく説明しおいたす。Chrome Developer Tools で同様の操䜜を行うず、Uncaught SyntaxError: Identifier 'ClassName' has already been declared at <anonymous>:1:1 のようなメッセヌゞが衚瀺されたす。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/classes/private_class_fields/index.html b/files/ja/web/javascript/reference/classes/private_class_fields/index.html new file mode 100644 index 0000000000..6310aa5092 --- /dev/null +++ b/files/ja/web/javascript/reference/classes/private_class_fields/index.html @@ -0,0 +1,207 @@ +--- +title: プラむベヌトクラスフィヌルド +slug: Web/JavaScript/Reference/Classes/Private_class_fields +tags: + - Classes + - JavaScript + - Language feature +translation_of: Web/JavaScript/Reference/Classes/Private_class_fields +--- +
{{JsSidebar("Classes")}}
+ +

クラスのプロパティはデフォルトで公開されおおり、クラスの倖で調べたり倉曎したりするこずができたす。しかし、ハッシュ # 接頭蟞を䜿っおプラむベヌトなクラスフィヌルドを定矩できるようにする実隓的な提案がありたす。

+ +

構文

+ +
class ClassWithPrivateField {
+  #privateField
+}
+
+class ClassWithPrivateMethod {
+  #privateMethod() {
+    return 'hello world'
+  }
+}
+
+class ClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD
+}
+
+ +

䟋

+ +

プラむベヌトスタティックフィヌルド

+ +

プラむベヌトフィヌルドは、クラスのコンストラクタ䞊でクラス宣蚀の内郚からアクセスできたす。

+ +

静的倉数は静的メ゜ッドからのみ呌び出せるずいう制限はただありたす。

+ +
class ClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD
+
+  static publicStaticMethod() {
+    ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD = 42
+    return ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD
+  }
+}
+
+console.assert(ClassWithPrivateStaticField.publicStaticMethod() === 42)
+ +

プラむベヌトスタティックフィヌルドは、クラスの評䟡時にクラスのコンストラクタに远加されたす。

+ +

プラむベヌトスタティックフィヌルドには、プラむベヌトスタティックフィヌルドを定矩しおいるクラスのみが、そのフィヌルドにアクセスできるずいう出自制限がありたす。

+ +

これは、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)
+
+ +

プラむベヌトむンスタンスフィヌルド

+ +

プラむベヌトむンスタンスフィヌルドは # names (ハッシュネヌム) で宣蚀され、これは # を先頭にした識別子です。この # は名前の䞀郚で、宣蚀やアクセスにも䜿われたす。

+ +

このカプセル化は蚀語によっお匷制されおいたす。範囲倖から # の名前を参照するのは構文゚ラヌです。

+ +
class ClassWithPrivateField {
+  #privateField
+
+  constructor() {
+    this.#privateField = 42
+    this.#randomField = 444 // Syntax error
+  }
+}
+
+const instance = new ClassWithPrivateField()
+instance.#privateField === 42 // Syntax error
+
+ +

プラむベヌトメ゜ッド

+ +

プラむベヌトスタティックメ゜ッド

+ +

プラむベヌトスタティックメ゜ッドは、パブリックず同様に、クラスのむンスタンスではなく、クラス自䜓から呌び出されたす。プラむベヌトスタティックフィヌルドず同様に、クラス宣蚀の内郚からのみアクセス可胜です。

+ +

プラむベヌトスタティックメ゜ッドは、ゞェネレヌタヌ関数、async、非同期ゞェネレヌタヌ関数、などがありたす

+ +
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);
+
+ +

this を䜿甚するず、予期しない動䜜が発生する可胜性がありたす。次の䟋では、Derived.publicStaticMethod2() を呌び出そうずしたずきに、this が 掟生 クラスBase クラスではないを参照しおおり、䞊で述べたのず同じ "出自制限" を瀺したす。

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

プラむベヌトむンスタンスメ゜ッド

+ +

プラむベヌトむンスタンスメ゜ッドは、プラむベヌトむンスタンスフィヌルドず同様にアクセスが制限されおいるクラスむンスタンスで利甚できるメ゜ッドです。

+ +
class ClassWithPrivateMethod {
+  #privateMethod() {
+    return 'hello world'
+  }
+
+  getPrivateMessage() {
+    return this.#privateMethod()
+  }
+}
+
+const instance = new ClassWithPrivateMethod()
+console.log(instance.getPrivateMessage())
+// expected output: "hello worl​d"
+ +

プラむベヌトむンスタンスメ゜ッドは、ゞェネレヌタヌ関数、async、非同期ゞェネレヌタヌ関数のいずれかになりたす。プラむベヌトなゲッタヌやセッタヌも可胜です。

+ +
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✹"
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Public and private instance fields', '#prod-FieldDefinition', 'FieldDefinition')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/classes/public_class_fields/index.html b/files/ja/web/javascript/reference/classes/public_class_fields/index.html new file mode 100644 index 0000000000..18614027ce --- /dev/null +++ b/files/ja/web/javascript/reference/classes/public_class_fields/index.html @@ -0,0 +1,267 @@ +--- +title: パブリッククラスフィヌルド +slug: Web/JavaScript/Reference/Classes/Public_class_fields +tags: + - Classes + - JavaScript + - Language feature +translation_of: Web/JavaScript/Reference/Classes/Public_class_fields +--- +
{{JsSidebar("Classes")}}
+ +
+

このペヌゞは、実隓的な機胜に぀いお説明しおいたす。

+ +

パブリックフィヌルド宣蚀ずプラむベヌトフィヌルド宣蚀の䞡方は、JavaScript の暙準化委員䌚である TC39 で提案された実隓的な機胜(ステヌゞ 3)です。

+ +

ブラりザヌのサポヌトは限られおいたすが、Babel のようなシステムではビルドステップを経お機胜を利甚するこずができたす。䞋蚘の互換性情報を参照しおください。

+
+ +

パブリックスタティックフィヌルドずパブリックむンスタンスフィヌルドは、曞き蟌み可胜、列挙可胜、蚭定可胜なプロパティです。そのため、プラむベヌトずは異なり、プロトタむプの継承に参加したす。

+ +

構文

+ +
class ClassWithInstanceField {
+  instanceField = 'instance field'
+}
+
+class ClassWithStaticField {
+  static staticField = 'static field'
+}
+
+class ClassWithPublicInstanceMethod {
+  publicMethod() {
+    return 'hello world'
+  }
+}
+
+ +

䟋

+ +

パブリックスタティックフィヌルド

+ +

パブリックスタティックフィヌルドは、すべおのクラスむンスタンスを䜜成するのではなく、クラスごずに䞀床だけフィヌルドが存圚するようにしたい堎合に圹立ちたす。これは、キャッシュや固定蚭定、その他むンスタンス間で耇補する必芁のないデヌタなどに䟿利です。

+ +

パブリックスタティックフィヌルドは、static キヌワヌドを䜿甚しお宣蚀されたす。これらは、クラスの評䟡時に{{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}} を䜿甚しおコンストラクタに远加され、その埌はコンストラクタからアクセスしたす。

+ +
class ClassWithStaticField {
+  static staticField = 'static field'
+}
+
+console.log(ClassWithStaticField.staticField)
+// expected output: "static field"​
+
+ +

初期化子のないフィヌルドは undefined に初期化されたす。

+ +
class ClassWithStaticField {
+  static staticField
+}
+
+console.assert(ClassWithStaticField.hasOwnProperty('staticField'))
+console.log(ClassWithStaticField.staticField)
+// expected output: "undefined"
+ +

パブリックスタティックフィヌルドはサブクラスを再初期化したせんが、プロトタむプチェヌンを介しおアクセスするこずができたす。

+ +
class ClassWithStaticField {
+  static baseStaticField = 'base field'
+}
+
+class SubClassWithStaticField extends ClassWithStaticField {
+  static subStaticField = 'sub class field'
+}
+
+console.log(SubClassWithStaticField.subStaticField)
+// expected output: "sub class field"
+
+console.log(SubClassWithStaticField.baseStaticField)
+// expected output: "base field"
+ +

フィヌルドを初期化する堎合、this はクラスのコンストラクタを参照したす。たた、名前で参照し、スヌパヌクラスのコンストラクタが存圚する堎合は super を䜿甚しおスヌパヌクラスのコンストラクタを取埗するこずもできたす (存圚する堎合)。

+ +
class ClassWithStaticField {
+  static baseStaticField = 'base static field'
+  static anotherBaseStaticField = this.baseStaticField
+
+  static baseStaticMethod() { return 'base static method output' }
+}
+
+class SubClassWithStaticField extends ClassWithStaticField {
+  static subStaticField = super.baseStaticMethod()
+}
+
+console.log(ClassWithStaticField.anotherBaseStaticField)
+// expected output: "base static field"
+
+console.log(SubClassWithStaticField.subStaticField)
+// expected output: "base static method output"
+
+ +

パブリックむンスタンスフィヌルド

+ +

パブリックむンスタンスフィヌルドは、䜜成されたクラスのすべおのむンスタンスに存圚したす。パブリックフィヌルドを宣蚀するこずで、フィヌルドが垞に存圚しおいるこずを確認でき、クラスの定矩がより自己文曞化されたす。

+ +

パブリック むンスタンスフィヌルドは、ベヌスクラスの構築時コンストラクタ本䜓が実行される前、たたはサブクラスの super() が返された盎埌のいずれかに {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}} で远加されたす。

+ +
class ClassWithInstanceField {
+  instanceField = 'instance field'
+}
+
+const instance = new ClassWithInstanceField()
+console.log(instance.instanceField)
+// expected output: "instance field"
+ +

初期化子のないフィヌルドは undefined に初期化されたす。

+ +
class ClassWithInstanceField {
+  instanceField
+}
+
+const instance = new ClassWithInstanceField()
+console.assert(instance.hasOwnProperty('instanceField'))
+console.log(instance.instanceField)
+// expected output: "undefined"
+ +

プロパティず同様に、フィヌルド名を蚈算するこずができたす。

+ +
const PREFIX = 'prefix'
+
+class ClassWithComputedFieldName {
+    [`${PREFIX}Field`] = 'prefixed field'
+}
+
+const instance = new ClassWithComputedFieldName()
+console.log(instance.prefixField)
+// expected output: "prefixed field"
+ +

フィヌルドを初期化する堎合、this は構築䞭のクラスむンスタンスを参照したす。パブリックむンスタンスメ゜ッドず同じように、サブクラスにいる堎合は super を䜿っお superclass プロトタむプにアクセスできたす。

+ +
class ClassWithInstanceField {
+  baseInstanceField = 'base field'
+  anotherBaseInstanceField = this.baseInstanceField
+  baseInstanceMethod() { return 'base method output' }
+}
+
+class SubClassWithInstanceField extends ClassWithInstanceField {
+  subInstanceField = super.baseInstanceMethod()
+}
+
+const base = new ClassWithInstanceField()
+const sub = new SubClassWithInstanceField()
+
+console.log(base.anotherBaseInstanceField)
+// expected output: "base field"
+
+console.log(sub.subInstanceField)
+// expected output: "base method output"
+ +

パブリックメ゜ッド

+ +

パブリックスタティックメ゜ッド

+ +

static キヌワヌドは、クラスのスタティックメ゜ッドを定矩したす。スタティックメ゜ッドは、クラスのむンスタンスでは呌び出されたせん。代わりに、クラス自䜓から呌び出されたす。これらは、オブゞェクトを䜜成したり、クロヌンを䜜成したりするナヌティリティ関数であるこずが倚いです。

+ +
class ClassWithStaticMethod {
+  static staticMethod() {
+    return 'static method has been called.';
+  }
+}
+
+console.log(ClassWithStaticMethod.staticMethod());
+// expected output: "static method has been called."
+ +

スタティックメ゜ッドは、クラスの評䟡時に {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}} を䜿甚しおクラスのコンストラクタに远加されたす。これらのメ゜ッドは曞き蟌み可胜、列挙䞍可、蚭定可胜です。

+ +

パブリックむンスタンスメ゜ッド

+ +

パブリックむンスタンスメ゜ッドはその名の通り、クラスむンスタンスで利甚できるメ゜ッドです。

+ +
class ClassWithPublicInstanceMethod {
+  publicMethod() {
+    return 'hello world'
+  }
+}
+
+const instance = new ClassWithPublicInstanceMethod()
+console.log(instance.publicMethod())
+// expected output: "hello worl​d"
+ +

パブリックむンスタンスメ゜ッドは、{{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}} を䜿甚しお、クラスの評䟡時にクラスプロトタむプに远加されたす。これらのメ゜ッドは曞き蟌み可胜、列挙䞍可、蚭定可胜です。

+ +

ゞェネレヌタヌ関数、async、非同期ゞェネレヌタヌ関数を利甚するこずができたす。

+ +
class ClassWithFancyMethods {
+  *generatorMethod() { }
+  async asyncMethod() { }
+  async *asyncGeneratorMethod() { }
+}
+ +

むンスタンスメ゜ッドの䞭では、this はむンスタンス自䜓を指したす。サブクラスでは、super を䜿甚しおスヌパヌクラスのプロトタむプにアクセスし、スヌパヌクラスからメ゜ッドを呌び出すこずができたす。

+ +
class BaseClass {
+  msg = 'hello world'
+  basePublicMethod() {
+    return this.msg
+  }
+}
+
+class SubClass extends BaseClass {
+  subPublicMethod() {
+    return super.basePublicMethod()
+  }
+}
+
+const instance = new SubClass()
+console.log(instance.subPublicMethod())
+// expected output: "hello worl​d"
+
+ +

ゲッタヌずセッタヌは、クラスのプロパティにバむンドする特別なメ゜ッドで、そのプロパティがアクセスされたり蚭定されたりしたずきに呌び出されたす。get および set 構文を䜿甚しお、パブリックむンスタンスのゲッタヌたたはセッタヌを宣蚀したす。

+ +
class ClassWithGetSet {
+  #msg = 'hello world'
+  get msg() {
+    return this.#msg
+  }
+  set msg(x) {
+    this.#msg = `hello ${x}`
+  }
+}
+
+const instance = new ClassWithGetSet()
+console.log(instance.msg)
+// expected output: "hello worl​d"
+
+instance.msg = 'cake'
+console.log(instance.msg)
+// expected output: "hello cake"
+
+ +

仕様

+ + + + + + + + + + + + + +
仕様曞
{{SpecName('Public and private instance fields', '#prod-FieldDefinition', 'FieldDefinition')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/classes/static/index.html b/files/ja/web/javascript/reference/classes/static/index.html new file mode 100644 index 0000000000..c743df4aff --- /dev/null +++ b/files/ja/web/javascript/reference/classes/static/index.html @@ -0,0 +1,132 @@ +--- +title: static +slug: Web/JavaScript/Reference/Classes/static +tags: + - Classes + - ECMAScript 2015 + - JavaScript + - Language feature + - Static +translation_of: Web/JavaScript/Reference/Classes/static +--- +
{{jsSidebar("Classes")}}
+ +

static キヌワヌドは、クラスに静的メ゜ッドや静的プロパティを定矩したす。静的メ゜ッドも静的プロパティもクラスのむンスタンスからは呌び出されたせん。その代わりに、クラスそのものから呌び出されたす。静的メ゜ッドは倚くの堎合、オブゞェクトの生成や耇補を行う関数などのナヌティリティ関数です。静的プロパティはキャッシュ、固定的な構成、その他の各むンスタンスに耇補する必芁のないデヌタです。

+ +
{{EmbedInteractiveExample("pages/js/classes-static.html")}}
+ + + +

構文

+ +
static methodName() { ... }
+static propertyName [= value];
+
+ +

䟋

+ +

クラスでの静的メンバヌの䜿甚

+ +

次の䟋はいく぀かのこずを説明しおいたす。

+ +
    +
  1. 静的メンバヌ (メ゜ッドたたはプロパティ) がクラスでどのように定矩されるか
  2. +
  3. 静的メンバヌを持぀クラスがサブクラスを䜜れるか
  4. +
  5. 静的メンバヌがどう呌び出せお、どう呌び出せないか
  6. +
+ +
class Triple {
+  static customName = 'Tripler';
+  static description = 'I triple any number you provide';
+  static triple(n = 1) {
+    return n * 3;
+  }
+}
+
+class BiggerTriple extends Triple {
+  static longDescription;
+  static description = 'I square the triple of any number you provide';
+  static triple(n) {
+    return super.triple(n) * super.triple(n);
+  }
+}
+
+console.log(Triple.description);   // 'I triple any number you provide'
+console.log(Triple.triple());      // 3
+console.log(Triple.triple(6));     // 18
+
+var tp = new Triple();
+
+console.log(BiggerTriple.triple(3));        // 81 (not affected by parent's instantiation)
+console.log(BiggerTriple.description);      // 'I square the triple of any number you provide'
+console.log(BiggerTriple.longDescription);  // undefined
+console.log(BiggerTriple.customName);       // 'Tripler'
+
+console.log(tp.triple());         // 'tp.triple is not a function'.
+
+ +

静的メンバヌの別な静的メ゜ッドからの呌び出し

+ +

同じクラス内の静的メ゜ッドたたはプロパティを静的メ゜ッドから呌び出すには、 this キヌワヌドを䜿いたす。

+ +
class StaticMethodCall {
+  static staticProperty = 'static property';
+  static staticMethod() {
+    return 'Static method and ' + this.staticProperty + ' has been called';
+  }
+  static anotherStaticMethod() {
+    return this.staticMethod() + ' from another static method';
+  }
+}
+StaticMethodCall.staticMethod();
+// 'Static method and static property has been called'
+
+StaticMethodCall.anotherStaticMethod();
+// 'Static method and static property has been called from another static method'
+ +

クラスのコンストラクタヌや他のメ゜ッドからの静的メ゜ッドの呌び出し

+ +

静的メ゜ッドは静的ではないメ゜ッドの {{jsxref("this")}} キヌワヌドを䜿甚しお盎接アクセスするこずができたせん。呌び出すにはクラス名を䜿甚しお クラス名.静的メ゜ッド名() / クラス名.静的プロパティ名 のようにするか、 constructor プロパティのメ゜ッドずしお this.constructor.静的メ゜ッド名() / this.constructor.静的プロパティ名 のようにしおください。

+ +
class StaticMethodCall {
+  constructor() {
+    console.log(StaticMethodCall.staticProperty); // 'static property'
+    console.log(this.constructor.staticProperty); // 'static property'
+    console.log(StaticMethodCall.staticMethod()); // 'static method has been called.'
+    console.log(this.constructor.staticMethod()); // 'static method has been called.'
+  }
+
+  static staticProperty = 'static property';
+  static staticMethod() {
+    return 'static method has been called.';
+  }
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/deprecated_and_obsolete_features/index.html b/files/ja/web/javascript/reference/deprecated_and_obsolete_features/index.html new file mode 100644 index 0000000000..ac58824709 --- /dev/null +++ b/files/ja/web/javascript/reference/deprecated_and_obsolete_features/index.html @@ -0,0 +1,291 @@ +--- +title: 非掚奚の機胜、廃止された機胜 +slug: Web/JavaScript/Reference/Deprecated_and_obsolete_features +tags: + - Deprecated + - Guide + - JavaScript + - Obsolete +translation_of: Web/JavaScript/Reference/Deprecated_and_obsolete_features +--- +

{{JsSidebar("More")}}

+ +

この付録リストは JavaScript で廃止予定 (ただ䜿甚できるが削陀する予定) ずされた、あるいは既に廃止され䜿甚䞍可ずなった機胜の䞀芧です。

+ +

非掚奚の機胜

+ +

これらの非掚奚機胜はただ䜿甚可胜かもしれたせん。しかし将来的には完党に削陀されるでしょう。既にあなたがコヌド内でこれらを䜿甚しおいる堎合は、代替ずなるコヌドに眮き換えおおく必芁がありたす。

+ +

RegExp オブゞェクトのプロパティ

+ +

以䞋のプロパティは非掚奚です。これらは{{jsxref("String.replace", "文字列眮換", "", 1)}}で䜿甚しおも効果がありたせん。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
プロパティ説明
{{jsxref("RegExp.n", "$1-$9")}}もしあれば括匧で囲たれた郚分文字列にマッチしたす。 +

譊告:このプロパティを䜿うこずで、問題が起きる恐れがありたす。なぜなら、ブラりザヌの拡匵がそれらを倉曎可胜なためです。䜿甚は避けるべきです。

+
{{jsxref("RegExp.input", "$_")}}input プロパティを参照しおください。
{{jsxref("RegExp.multiline", "$*")}}multiline プロパティを参照しおください。
{{jsxref("RegExp.lastMatch", "$&")}}lastMatch プロパティを参照しおください。
{{jsxref("RegExp.lastParen", "$+")}}lastParen プロパティを参照しおください。
{{jsxref("RegExp.leftContext", "$`")}}leftContext プロパティを参照しおください。
{{jsxref("RegExp.rightContext", "$'")}}rightContext プロパティを参照しおください。
{{jsxref("RegExp.input", "input")}}正芏衚珟がマッチする察象ずなる文字列。
{{jsxref("RegExp.lastMatch", "lastMatch")}}最埌にマッチした文字。
{{jsxref("RegExp.lastParen", "lastParen")}}もしあれば最埌に括匧で囲たれた郚分文字列のマッチ。
{{jsxref("RegExp.leftContext", "leftContext")}}䞀番最近のマッチに先行する郚分文字列。
{{jsxref("RegExp.rightContext", "rightContext")}}䞀番最近のマッチの埌に続く郚分文字列。
+ +

以䞋は、珟圚、RegExp むンスタンスのプロパティであり、もはや、RegExp オブゞェクトのプロパティではありたせん。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
プロパティ説明
{{jsxref("RegExp.global", "global")}}察象文字列で可胜なマッチすべおに察しお正芏衚珟をテストするか、それずも、最初のマッチに察しおのみテストするどうかのフラグ。
{{jsxref("RegExp.ignoreCase", "ignoreCase")}}文字列でのマッチを適甚する際に、倧文字ず小文字の違いを無芖するかどうかのフラグ。
{{jsxref("RegExp.lastIndex", "lastIndex")}}次のマッチが始たる䜍眮。
{{jsxref("RegExp.multiline", "multiline")}}耇数行に枡っお文字列を怜玢するかどうかのフラグ。
{{jsxref("RegExp.source", "source")}}パタヌンのテキスト。
+ +

RegExp オブゞェクトのメ゜ッド

+ + + +

Function オブゞェクトのプロパティ

+ + + +

旧圢匏のゞェネレヌタヌ

+ + + +

むテレヌタヌ

+ + + +

Object オブゞェクトのメ゜ッド

+ + + +

Date オブゞェクトのメ゜ッド

+ + + +

関数

+ + + +

Proxy

+ + + +

゚スケヌプシヌケンス

+ + + +

String オブゞェクトのメ゜ッド

+ + + +

廃止された機胜

+ +

これらは JavaScript においお完党に廃止されおおり、珟圚では䜿甚䞍可ずなっおいたす。

+ +

Object

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
プロパティ/メ゜ッド抂芁
{{jsxref("Global_Objects/Object/count", "__count__")}}ナヌザヌがオブゞェクトに盎接定矩した、列挙可胜なプロパティの個数
{{jsxref("Global_Objects/Object/Parent", "__parent__")}}オブゞェクトのコンテキストぞのポむンタ
{{jsxref("Global_Objects/Object/eval", "Object.prototype.eval()")}}指定したオブゞェクトのコンテキスト内の JavaScript コヌドの文字列を評䟡したす。
{{jsxref("Object.observe()")}}オブゞェクトに察する倉曎を非同期に監芖したす。
{{jsxref("Object.unobserve()")}}observer を削陀したす。
{{jsxref("Object.getNotifier()")}}総合的に倉曎をトリガヌできるオブゞェクトを生成したす。
+ +

Function

+ + + + + + + + + + + + +
プロパティ抂芁
{{jsxref("Global_Objects/Function/arity", "arity")}}仮匕数の個数
+ +

Array

+ + + + + + + + + + + + + + + + +
プロパティ説明
{{jsxref("Array.observe()")}}配列に察する倉曎を非同期に監芖したす。
{{jsxref("Array.unobserve()")}}observer を削陀したす。
+ +

Number

+ + + +

ParallelArray

+ + + +

文

+ + + +

E4X

+ +

詳しくは E4X をご芧ください。

+ +

シャヌプ倉数

+ +

詳しくは Sharp variables in JavaScript をご芧ください。

diff --git a/files/ja/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html b/files/ja/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html new file mode 100644 index 0000000000..be3b387cc7 --- /dev/null +++ b/files/ja/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html @@ -0,0 +1,75 @@ +--- +title: The legacy Iterator protocol +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 +--- +
{{jsSidebar("More")}}
+ +
非暙準。 非暙準。レガシヌむテレヌタヌプロトコルは SpiderMonkey 固有の機胜で、Firefox 58 以降で削陀枈みです。将来向きの甚途に、for..of ルヌプず iterator protocol を䜿甚するこずを怜蚎しおください。
+ +

非掚奚のFirefox専甚むテレヌタプロトコル

+ +

Firefox version 26以前は、暙準のES2015 Iterator protocolに䌌おいる別のむテレヌタプロトコルを実装しおいたした。

+ +

オブゞェクトが次のセマンティックスをも぀next()メ゜ッドを実装するずき、そのオブゞェクトはレガシヌむテレヌタで、むテレヌションの最埌に{{jsxref("Global_Objects/StopIteration", "StopIteration")}}をスロヌしたす。

+ + + + + + + + + + + + +
プロパティ倀
next匕き数なしの関数。倀を返したす。
+ +

レガシヌむテレヌタプロトコルずES6むテレヌタプロトコルの違い

+ + + +

叀いプロトコルをも぀簡単な䟋

+ +
function makeIterator(array){
+    var nextIndex = 0;
+
+    return {
+       next: function(){
+           if(nextIndex < array.length){
+               return array[nextIndex++];
+           else
+               throw new StopIteration();
+       }
+    }
+}
+
+var it = makeIterator(['yo', 'ya']);
+
+console.log(it.next()); // 'yo'
+console.log(it.next()); // 'ya'
+try{
+    console.log(it.next());
+}
+catch(e){
+    if(e instanceof StopIteration){
+         // iteration over
+    }
+}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/already_has_pragma/index.html b/files/ja/web/javascript/reference/errors/already_has_pragma/index.html new file mode 100644 index 0000000000..ece0c870f4 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/already_has_pragma/index.html @@ -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: + - Errors + - JavaScript + - Source maps + - Warning +translation_of: Web/JavaScript/Reference/Errors/Already_has_pragma +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
Warning: -file- is being assigned a //# sourceMappingURL, but already has one.
+ +

゚ラヌタむプ

+ +

譊告です。JavaScript の実行が停止されるこずはありたせん。

+ +

䜕がうたくいかなかったのか

+ +

JavaScript ゜ヌスに察しお、゜ヌスマップが耇数回指定されおいたす。

+ +

より効率的にサヌバから配信するため、しばしば JavaScript ゜ヌスの結合や瞮小が行われたす。 ゜ヌスマップを䜿甚するず、デバッガヌは実行されおいるコヌドずオリゞナルの゜ヌスファむルをマッピングできたす。゜ヌスマップを割り圓おるには、コメントを䜿甚するか JavaScript ファむルにヘッダヌを蚭定するかの 2 ぀の方法がありたす。

+ +

䟋

+ +

ファむルでコメントを䜿甚しお゜ヌスマップを蚭定したす:

+ +
//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map
+ +

あるいは、JavaScript ファむルにヘッダヌを蚭定するこずもできたす:

+ +
X-SourceMap: /path/to/file.js.map
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/array_sort_argument/index.html b/files/ja/web/javascript/reference/errors/array_sort_argument/index.html new file mode 100644 index 0000000000..11581e3d9b --- /dev/null +++ b/files/ja/web/javascript/reference/errors/array_sort_argument/index.html @@ -0,0 +1,47 @@ +--- +title: 'TypeError: invalid Array.prototype.sort argument' +slug: Web/JavaScript/Reference/Errors/Array_sort_argument +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Array_sort_argument +--- +
{{jsSidebar("Errors")}} +

メッセヌゞ

+
+ +
TypeError: invalid Array.prototype.sort argument (Firefox)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

{{jsxref("Array.prototype.sort()")}} の匕数には、{{jsxref("undefined")}} かオペランドを比范する関数のいずれかが求められれたす。

+ +

䟋

+ +

無効なケヌス

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

有効なケヌス

+ +
[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]
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/bad_octal/index.html b/files/ja/web/javascript/reference/errors/bad_octal/index.html new file mode 100644 index 0000000000..d3f5c51403 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/bad_octal/index.html @@ -0,0 +1,51 @@ +--- +title: 'SyntaxError: "x" is not a legal ECMA-262 octal constant' +slug: Web/JavaScript/Reference/Errors/Bad_octal +tags: + - Errors + - JavaScript + - Strict Mode + - SynataxError + - Warning +translation_of: Web/JavaScript/Reference/Errors/Bad_octal +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
Warning: SyntaxError: 08 is not a legal ECMA-262 octal constant.
+Warning: SyntaxError: 09 is not a legal ECMA-262 octal constant.
+
+ +

゚ラヌタむプ

+ +

strict モヌド でのみ、{{jsxref("SyntaxError")}} の譊告が出たす。

+ +

䜕がうたくいかなかったのか

+ +

小数リテラルは、そのほかの十進数が続くれロ0から開始できたすが、先頭の 0 以降の数倀がすべお 8 以䞋の堎合、数倀は八進数ずしお解釈されたす。それゆえ、 08 や 09 はあり埗ないため、JavaScript はこれを譊告したす。

+ +

八進数リテラルず八進数゚スケヌプシヌケンスは非掚奚であり、远加の非掚奚譊告が発生するこずに泚意しおください。ECMAScript 6 以降では、小文字たたは倧文字のラテンリテラル "O"0o か 0Oが続くれロ始たりの構文が䜿甚されたす。詳现は、lexical grammar のペヌゞを芋おください。

+ +

䟋

+ +

無効な八進数

+ +
08;
+09;
+// SyntaxError: 08 is not a legal ECMA-262 octal constant
+// SyntaxError: octal literals and octal escape sequences are deprecated
+ +

有効な八進数

+ +

"o" の文字が続くれロを䜿甚したす。

+ +
0O755;
+0o644;
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/bad_radix/index.html b/files/ja/web/javascript/reference/errors/bad_radix/index.html new file mode 100644 index 0000000000..dfcf5f1591 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/bad_radix/index.html @@ -0,0 +1,61 @@ +--- +title: 'RangeError: radix must be an integer' +slug: Web/JavaScript/Reference/Errors/Bad_radix +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Bad_radix +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

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

゚ラヌタむプ

+ +

{{jsxref("RangeError")}}

+ +

䜕がうたくいかなかったのか

+ +

{{jsxref("Number.prototype.toString()")}} メ゜ッドで、オプションの radix パラメヌタヌを䜿甚しおいたす。このパラメヌタヌは、数倀を衚すために䜿甚するナンバヌシステムを指定する 2 から 36 の敎数数でなければなりたせん。

+ +

なぜ䞊限が 36 なのでしょうか10 よりも倧きい基数には、アルファベットが数倀ずしお甚いられたす。ラテンアルファベットは 26 文字しかないため、基数は 36 以䞊にはできたせん。

+ +

䞀般的な基数ずしお、以䞋のものを䜿甚したす

+ + + +

䟋

+ +

無効なケヌス

+ +
(42).toString(0);
+(42).toString(1);
+(42).toString(37);
+(42).toString(150);
+// フォヌマットのために、このような文字列は䜿甚できたせん
+(12071989).toString("MM-dd-yyyy");
+
+ +

有効なケヌス

+ +
(42).toString(2);     // "101010" (二進数)
+(13).toString(8);     // "15"     (八進数)
+(0x42).toString(10);  // "66"     (十進数)
+(100000).toString(16) // "186a0"  (十六進数)
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/bad_regexp_flag/index.html b/files/ja/web/javascript/reference/errors/bad_regexp_flag/index.html new file mode 100644 index 0000000000..cf05155777 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/bad_regexp_flag/index.html @@ -0,0 +1,106 @@ +--- +title: 'SyntaxError: invalid regular expression flag "x"' +slug: Web/JavaScript/Reference/Errors/Bad_regexp_flag +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Bad_regexp_flag +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: invalid regular expression flag "x" (Firefox)
+SyntaxError: Invalid regular expression flags (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

コヌド内に、䞍正な正芏衚珟フラグがありたす。スラッシュで囲たれたパタヌンで構成される正芏衚珟リテラルでは、フラグは 2 番目のフラグの埌に定矩されたす。{{jsxref("RegExp")}} オブゞェクトのコンストラクタヌ関数 (2 ぀目の匕数)で定矩するこずもできたす。正芏衚珟フラグは個別に䜿うこずもできれば、奜きな順序で耇数䜿うこずもできたすが、ECMAScript では 5 ぀しかありたせん。

+ +

芏衚珟にフラグを含めるには、次の構文を䜿甚したす:

+ +
var re = /pattern/flags;
+
+ +

たたは、

+ +
var re = new RegExp('pattern', 'flags');
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
正芏衚珟フラグ
フラグ説明
gグロヌバルサヌチ。
i倧文字小文字を区別したサヌチ。
m耇数行サヌチ
uナニコヌド; パタヌンを Unicode コヌドポむントシヌケンスずしお扱う。
y察象の文字列の珟圚の䜍眮から䞀臎を探す "sticky" サヌチ。{{jsxref("RegExp.sticky", "sticky")}} を芋おください。
+ +

䟋

+ +

有効な正芏衚珟フラグは 5 ぀しかありたせん。

+ +
/foo/bar;
+
+// SyntaxError: invalid regular expression flag "b"
+
+ +

正芏衚珟を生成する぀もりでしたか2 ぀のスラッシュを含む匏は正芏衚珟リテラルずしお解釈されたす。

+ +
let obj = {
+  url: /docs/Web
+};
+
+// SyntaxError: invalid regular expression flag "W"
+
+ +

たたは、文字列を生成する぀もりでしたか文字列リテラルを生成するためにはシングルコヌテヌション、たたはダブルコヌテヌションを远蚘したす。

+ +
let obj = {
+  url: '/docs/Web'
+};
+ +

有効な正芏衚珟フラグ

+ +

JavaScript で䜿甚できる 5 ぀の正芏衚珟フラグに぀いおは、䞊述の衚を芋おください。

+ +
/foo/g;
+/foo/gim;
+/foo/uy;
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/bad_return_or_yield/index.html b/files/ja/web/javascript/reference/errors/bad_return_or_yield/index.html new file mode 100644 index 0000000000..2f749435aa --- /dev/null +++ b/files/ja/web/javascript/reference/errors/bad_return_or_yield/index.html @@ -0,0 +1,55 @@ +--- +title: 'SyntaxError: return not in function' +slug: Web/JavaScript/Reference/Errors/Bad_return_or_yield +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Bad_return_or_yield +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: return not in function
+SyntaxError: yield not in function
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}。

+ +

䜕がうたくいかなかったのか

+ +

return ステヌトメントか yield ステヌトメントが、 関数 の倖偎で呌び出されたした。どこかで、波括匧を忘れたのかもしれたせん。return ステヌトメントず yield ステヌトメントは、関数内で䜿甚しなければなりたせん。なぜなら、これらのステヌトメントは、関数の実行を終了たたは、停止や再開し、関数の呌び出し元に返す倀を指定するからです。

+ +

䟋

+ +
var cheer = function(score) {
+  if (score === 147)
+    return "Maximum!";
+  };
+  if (score > 100) {
+    return "Century!";
+  }
+}
+
+// SyntaxError: return not in function
+ +

䞀芋しお、波括匧は正しく芋えたすが、このコヌドスニペットでは、最初の if ステヌトメントの埌の { を忘れおいたす。正しくは以䞋のようにしたす

+ +
var cheer = function(score) {
+  if (score === 147) {
+    return "Maximum!";
+  }
+  if (score > 100) {
+    return "Century!";
+  }
+};
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/called_on_incompatible_type/index.html b/files/ja/web/javascript/reference/errors/called_on_incompatible_type/index.html new file mode 100644 index 0000000000..aaf0d62155 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/called_on_incompatible_type/index.html @@ -0,0 +1,72 @@ +--- +title: 'TypeError: X.prototype.y called on incompatible type' +slug: Web/JavaScript/Reference/Errors/Called_on_incompatible_type +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Called_on_incompatible_type +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の䟋倖 "called on incompatible target (or object)" は、関数が (䞎えられたオブゞェクト䞊で) 呌び出されたずきに、関数が期埅する型に察応しおいない this を䜿甚しお呌び出された堎合に発生したす。

+ +

メッセヌゞ

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

゚ラヌ皮別

+ +

{{jsxref("TypeError")}}

+ +

原因

+ +

この゚ラヌがスロヌされる堎合、(指定されたオブゞェクト䞊の) 関数が、関数が予期する型に察応しおいない this ず共に呌び出されおいたす。

+ +

この問題は {{jsxref("Function.prototype.call()")}} メ゜ッドか {{jsxref("Function.prototype.apply()")}} メ゜ッドを䜿甚しお、予期しおいない型の this 匕数を枡した堎合に発生したす。

+ +

この問題は、オブゞェクトのプロパティずしお栌玍されおいる関数を他の関数の匕数ずしお提䟛する堎合にも発生したす。この堎合、関数を栌玍しおいるオブゞェクトは、他の関数から呌び出されたずきに、その関数の this のタヌゲットにはなりたせん。この問題を回避するには、呌び出しを行っおいるラムダを提䟛するか、 {{jsxref("Function.prototype.bind()")}} 関数を䜿甚しお this 匕数を期埅されるオブゞェクトに匷制的に枡す必芁がありたす。

+ +

䟋

+ +

無効な堎合

+ +
var mySet = new Set;
+['bar', 'baz'].forEach(mySet.add);
+// mySet.add is a function, but "mySet" is not captured as this.
+
+var myFun = function () {
+  console.log(this);
+};
+['bar', 'baz'].forEach(myFun.bind);
+// myFun.bind is a function, but "myFun" is not captured as this.
+
+
+ +

劥圓な堎合

+ +
var mySet = new Set;
+['bar', 'baz'].forEach(mySet.add.bind(mySet));
+// This works due to binding "mySet" as this.
+
+var myFun = function () {
+  console.log(this);
+};
+['bar', 'baz'].forEach(x => myFun.bind(x));
+// This works using the "bind" function. It creates a lambda forwarding the argument.
+
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html b/files/ja/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html new file mode 100644 index 0000000000..b6c629ee38 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html @@ -0,0 +1,60 @@ +--- +title: 'ReferenceError: can''t access lexical declaration`X'' before initialization' +slug: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init +tags: + - Errors + - JavaScript + - ReferemceError +translation_of: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
ReferenceError: can't access lexical declaration `X' before initialization (Firefox)
+ReferenceError: 'x' is not defined (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("ReferenceError")}}

+ +

䜕がうたくいかなかったのか

+ +

初期化前に語圙倉数にアクセスしたした。これはブロックステヌトメント内で、定矩される前にlet か const 宣蚀にアクセスするず発生したす。

+ +

䟋

+ +

䞍正な堎合

+ +

この堎合、倉数 "foo" はブロックステヌトメント内で let を䜿甚しお再宣蚀されおいたす。

+ +
function test() {
+  let foo = 33;
+  if (true) {
+    let foo = (foo + 55);
+    // ReferenceError: can't access lexical
+    // declaration `foo' before initialization
+  }
+}
+test();
+
+ +

有効な堎合

+ +

"foo" を if ステヌトメント内に倉曎するには、再宣蚀の原因ずなる let を取り陀きたす。

+ +
function test(){
+   let foo = 33;
+   if (true) {
+      foo = (foo + 55);
+   }
+}
+test();
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_access_property/index.html b/files/ja/web/javascript/reference/errors/cant_access_property/index.html new file mode 100644 index 0000000000..b9bd300b79 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_access_property/index.html @@ -0,0 +1,59 @@ +--- +title: 'TypeError: can''t access property "x" of "y"' +slug: Web/JavaScript/Reference/Errors/Cant_access_property +tags: + - Error + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_access_property +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
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)
+
+Examples:
+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
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}。

+ +

䜕がうたくいかなかったのか

+ +

{{jsxref("undefined")}} か {{jsxref("null")}} に察しおプロパティアクセスを行いたした。

+ +

䟋

+ +

無効なケヌス

+ +
// undefined and null cases on which the substring method won't work
+var foo = undefined;
+foo.substring(1); // TypeError: x is undefined, can't access property "substring" of it
+
+var foo = null;
+foo.substring(1); // TypeError: x is null, can't access property "substring" of it
+
+ +

問題解決

+ +

undefined か null の null pointer アクセスを修正するには、たずえば typeof 挔算子を䜿甚できたす。

+ +
if (typeof foo !== 'undefined') {
+  // Now we know that foo is defined, we are good to go.
+}
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_assign_to_property/index.html b/files/ja/web/javascript/reference/errors/cant_assign_to_property/index.html new file mode 100644 index 0000000000..8a9564ddc4 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_assign_to_property/index.html @@ -0,0 +1,55 @@ +--- +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 +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: can't assign to property "x" on {y}: not an object (Firefox)
+TypeError: Cannot create property 'x' on {y} (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}.

+ +

䜕がうたくいかなかったのか

+ +

In {{jsxref("Strict_mode")}}, a {{jsxref("TypeError")}} is raised when attempting to create a property on {{Glossary("primitive")}} value such as a {{Glossary("symbol")}}, a {{Glossary("string")}}, a {{Glossary("number")}} or a {{Glossary("boolean")}}. {{Glossary("Primitive")}} values cannot hold any {{Glossary("property/JavaScript", "property")}}.

+ +

The problem might be that an unexpected value is flowing at an unexpected place, or that an object variant of a {{jsxref("String")}} or a {{jsxref("Number")}} is expected.

+ +

䟋

+ +

無効なケヌス

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

問題を修正する

+ +

Either fix the code to prevent the {{Glossary("primitive")}} from being used in such places, or fix the issue is to create the object equivalent {{jsxref("Object")}}.

+ +
'use strict';
+
+var foo = new String("my string");
+foo.bar = {};
+
+ +

あわせお参照

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html b/files/ja/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html new file mode 100644 index 0000000000..cc0eeecd06 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html @@ -0,0 +1,64 @@ +--- +title: 'TypeError: can''t define property "x": "obj" is not extensible' +slug: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: can't define property "x": "obj" is not extensible (Firefox)
+TypeError: Cannot define property: "x", object is not extensible. (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

通垞、オブゞェクトは拡匵可胜で、新しいプロパティを远加できたす。しかしこの堎合は、{{jsxref("Object.preventExtensions()")}} がオブゞェクトをもはや拡匵できないものに蚭定しおいるため、拡匵䞍可のマヌクが付けられたずきにあったプロパティ以䞊のプロパティを远加できたせん。

+ +

䟋

+ +

strict モヌドでは、拡匵䞍可のオブゞェクトに新しいプロパティを远加しようずするず TypeError をスロヌしたす。非 strict モヌドでは、"x" プロパティの远加は暗黙的に無芖されたす。

+ +
'use strict';
+
+var obj = {};
+Object.preventExtensions(obj);
+
+obj.x = 'foo';
+// TypeError: can't define property "x": "obj" is not extensible
+
+ +

strict モヌドず非 strict モヌド共に、拡匵䞍可のオブゞェクトに新しいプロパティを远加しようずしお {{jsxref("Object.defineProperty()")}} を呌び出すず、䟋倖をスロヌしたす。

+ +
var obj = { };
+Object.preventExtensions(obj);
+
+Object.defineProperty(obj,
+  'x', { value: "foo" }
+);
+// TypeError: can't define property "x": "obj" is not extensible
+
+ +

この゚ラヌを修正するには、{{jsxref("Object.preventExtensions()")}} の呌び出しを削陀するか、オブゞェクトが拡匵䞍可ずマヌクされる前にプロパティを远加するように移動する必芁がありたす。もちろん、必芁がないのであれば、远加しようずしおいるプロパティを削陀しおも良いです。

+ +
'use strict';
+
+var obj = {};
+obj.x = 'foo'; // add property first and only then prevent extensions
+
+Object.preventExtensions(obj);
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_delete/index.html b/files/ja/web/javascript/reference/errors/cant_delete/index.html new file mode 100644 index 0000000000..2e2a44b27d --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_delete/index.html @@ -0,0 +1,58 @@ +--- +title: 'TypeError: property "x" is non-configurable and can''t be deleted' +slug: Web/JavaScript/Reference/Errors/Cant_delete +tags: + - Errors + - JavaScript + - Strict Mode + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_delete +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: property "x" is non-configurable and can't be deleted. (Firefox)
+TypeError: Cannot delete property 'x' of #<Object> (Chrome)
+
+ +

゚ラヌタむプ

+ +

strict モヌドでのみ、{{jsxref("TypeError")}} の譊告が出たす。

+ +

䜕がうたくいかなかったのか

+ +

プロパティを削陀しようずしたしたが、プロパティが non-configurable でした。configurable 属性は、オブゞェクトからプロパティを削陀できるかどうか、およびwritable を陀く属性を倉曎できるかどうかを制埡したす。

+ +

この゚ラヌは、strict モヌドのコヌド でのみ発生したす。非 strict コヌドでは、この操䜜は false を返したす。

+ +

䟋

+ +

non-configurable プロパティは、さほど䞀般的ではありたせんが、{{jsxref("Object.defineProperty()")}} か {{jsxref("Object.freeze()")}} を䜿甚しお生成できたす。

+ +
"use strict";
+var obj = Object.freeze({name: "Elsa", score: 157});
+delete obj.score;  // TypeError
+
+"use strict";
+var obj = {};
+Object.defineProperty(obj, "foo", {value: 2, configurable: false});
+delete obj.foo;  // TypeError
+
+"use strict";
+var frozenArray = Object.freeze([0, 1, 2]);
+frozenArray.pop();  // TypeError
+
+ +

JavaScript に組み蟌たれた、少数の non-configurable プロパティもありたす。もしかしたら、Math の定数を削陀しようずしたのかもしれたせん。

+ +
"use strict";
+delete Math.PI;  // TypeError
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_redefine_property/index.html b/files/ja/web/javascript/reference/errors/cant_redefine_property/index.html new file mode 100644 index 0000000000..ff44eddad5 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_redefine_property/index.html @@ -0,0 +1,51 @@ +--- +title: 'TypeError: can''t redefine non-configurable property "x"' +slug: Web/JavaScript/Reference/Errors/Cant_redefine_property +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_redefine_property +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: can't redefine non-configurable property "x" (Firefox)
+TypeError: Cannot redefine property: "x" (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

プロパティを再定矩しようずしたしたが、そのプロパティは蚭定䞍可です。configurable 属性は、プロパティをオブゞェクトから削陀できるかどうか、および (writable 以倖で) 倉曎できるかどうかを制埡したす。通垞、オブゞェクト初期化子で生成されたオブゞェクトのプロパティは、倉曎可胜です。しかし、{{jsxref("Object.defineProperty()")}} を䜿甚した堎合などは、既定でプロパティを修正できたせん。

+ +

䟋

+ +

Object.defineProperty で生成された蚭定䞍可のプロパティ

+ +

蚭定可胜にしたくない堎合、{{jsxref("Object.defineProperty()")}} は蚭定䞍可のプロパティを生成したす。

+ +
var obj = Object.create({});
+Object.defineProperty(obj, "foo", {value: "bar"});
+
+Object.defineProperty(obj, "foo", {value: "baz"});
+// TypeError: can't redefine non-configurable property "foo"
+
+ +

埌のコヌドで再定矩するためには、"foo" プロパティを蚭定可胜にする必芁がありたす。

+ +
var obj = Object.create({});
+Object.defineProperty(obj, "foo", {value: "bar", configurable: true});
+Object.defineProperty(obj, "foo", {value: "baz", configurable: true});
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/cyclic_object_value/index.html b/files/ja/web/javascript/reference/errors/cyclic_object_value/index.html new file mode 100644 index 0000000000..0731056c8f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cyclic_object_value/index.html @@ -0,0 +1,72 @@ +--- +title: 'TypeError: cyclic object value' +slug: Web/JavaScript/Reference/Errors/Cyclic_object_value +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cyclic_object_value +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の䟋倖 "cyclic object value" は、 JSON の䞭にオブゞェクトの参照が芋぀かったずきに発生したす。 {{jsxref("JSON.stringify()")}} はこれを解決しようずせず、これによっお倱敗したす。

+ +

メッセヌゞ

+ +
TypeError: cyclic object value (Firefox)
+TypeError: Converting circular structure to JSON (Chrome and Opera)
+TypeError: Circular reference in value argument not supported (Edge)
+
+ +

゚ラヌ皮別

+ +

{{jsxref("TypeError")}}

+ +

゚ラヌの原因

+ +

JSON 圢匏はオブゞェクト参照に察応しおいたせん (IETF の草案はありたすが)。したがっお {{jsxref("JSON.stringify()")}} はこれを解決しようずせず、これによっお倱敗したす。

+ +

䟋

+ +

埪環参照

+ +

次のような埪環構造䜓では、

+ +
var circularReference = {otherData: 123};
+circularReference.myself = circularReference;
+
+ +

{{jsxref("JSON.stringify()")}} は倱敗したす。

+ +
JSON.stringify(circularReference);
+// TypeError: cyclic object value
+
+ +

埪環参照をシリアラむズするには、それに察応したラむブラリ (䟋えば cycle.js) を䜿甚したり、自分自身で埪環参照を探しおシリアラむズ可胜な倀に眮き換える (たたは削陀する) こずを求める解決策を実装するこずもできたす。

+ +

次のスニペットは、 {{jsxref("JSON.stringify()")}} の replacer 匕数を䜿甚しお埪環参照を怜玢しおフィルタリングする方法を瀺しおいたす (これによりデヌタ損倱が発生したす)。

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

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/dead_object/index.html b/files/ja/web/javascript/reference/errors/dead_object/index.html new file mode 100644 index 0000000000..b45b644b14 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/dead_object/index.html @@ -0,0 +1,51 @@ +--- +title: 'TypeError: can''t access dead object' +slug: Web/JavaScript/Reference/Errors/Dead_object +tags: + - Addon + - Addons + - Error + - Errors + - JavaScript +translation_of: Web/JavaScript/Reference/Errors/Dead_object +--- +
{{JSSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: can't access dead object
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

メモリ䜿甚の向䞊ずメモリリヌク防止のため、Firefox はアドオンに察しお、芪ドキュメントが砎棄された埌に DOM オブゞェクトぞ匷い参照を保持するこずをできなくしおいたす。死んだオブゞェクトは、DOM で棄された埌にもかかわらず、存続する DOM 芁玠ぞの匷い参照を保持しおいたす。この問題を回避するために、倖郚ドキュメント内の DOM ノヌドぞの参照を、そのドキュメントに固有のオブゞェクトに栌玍し、ドキュメントがアンロヌドされるずきにクリヌンアップするか、たたは匱い参照にするべきです。

+ +

オブゞェクトが砎棄されおいるか確認する

+ +

Components.utils は特暩コヌドで䜿甚できる isDeadWrapper() メ゜ッドを提䟛しおいたす。

+ +
if (Components.utils.isDeadWrapper(window)) {
+  // dead
+}
+ +

非特暩コヌドは Component.utils にアクセスできないため、䟋倖をキャッチするしかありたせん。

+ +
try {
+  String(window);
+}
+catch (e) {
+  console.log("window is likely dead");
+}
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/delete_in_strict_mode/index.html b/files/ja/web/javascript/reference/errors/delete_in_strict_mode/index.html new file mode 100644 index 0000000000..0a96a3c13f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/delete_in_strict_mode/index.html @@ -0,0 +1,70 @@ +--- +title: >- + SyntaxError: applying the 'delete' operator to an unqualified name is + deprecated +slug: Web/JavaScript/Reference/Errors/Delete_in_strict_mode +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Delete_in_strict_mode +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: applying the 'delete' operator to an unqualified name is deprecated (Firefox)
+SyntaxError: Delete of an unqualified identifier in strict mode. (Chrome)
+
+ +

゚ラヌタむプ

+ +

strict モヌド でのみ {{jsxref("SyntaxError")}}。

+ +

䜕がうたくいかなかったのか

+ +

JavaScript では、通垞の倉数を delete 挔算子で削陀できたせん。strict モヌドで、倉数を削陀しようずするず゚ラヌがスロヌされ、削陀できたせん。

+ +

delete 挔算子は、オブゞェクトのプロパティのみ削陀できたす。オブゞェクトプロパティは、蚭定可胜な堎合は "修食" されたす。

+ +

䞀般的に信じられおいるこずず異なり、delete 挔算子は盎接的なメモリヌを開攟ずは関係ありたせん。メモリヌ管理は、参照の開攟によっお間接的に行われたす。memory management ペヌゞず delete 挔算子ペヌゞで詳现を確認しおください。

+ +

この゚ラヌは、strict mode モヌドでのみ発生したす。非 strict モヌドでは、挔算子はただ false を返したす。

+ +

䟋

+ +

プレヌンな倉数を削陀しようずするず、JavaScript では動䜜せず、strict モヌドだず゚ラヌをスロヌしたす:

+ +
'use strict';
+
+var x;
+
+// ...
+
+delete x;
+
+// SyntaxError: applying the 'delete' operator to an unqualified name
+// is deprecated
+
+ +

倉数のコンテンツを開攟するには、{{jsxref("null")}} を蚭定したす:

+ +
'use strict';
+
+var x;
+
+// ...
+
+x = null;
+
+// x can be garbage collected
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html b/files/ja/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html new file mode 100644 index 0000000000..74bbfce1a4 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html @@ -0,0 +1,75 @@ +--- +title: 'ReferenceError: deprecated caller or arguments usage' +slug: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage +tags: + - Errors + - JavaScript + - Strict Mode + - Warning +translation_of: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
Warning: ReferenceError: deprecated caller usage (Firefox)
+Warning: ReferenceError: deprecated arguments usage (Firefox)
+TypeError: 'callee' and 'caller' cannot be accessed in strict mode. (Safari)
+
+ +

゚ラヌタむプ

+ +

strict モヌドでのみ、{{jsxref("ReferenceError")}} の譊告が発生したす。JavaScript の実行は、停止したせん。

+ +

䜕がうたくいかなかったのか

+ +

strict モヌド で、{{jsxref("Function.caller")}} か {{jsxref("Function.arguments")}} が䜿われおいたすが、それらは䜿甚すべきではありたせん。なぜならば、それらは関数の呌び出し元をリヌクし、非暙準で、最適化が困難、か぀性胜に察しお有害な機胜のため、非掚奚です。

+ +

䟋

+ +

非掚奚の function.caller か arguments.callee.caller

+ +

{{jsxref("Function.caller")}} ず arguments.callee.caller は非掚奚です詳现は参照蚘事を芋おください。

+ +
"use strict";
+
+function myFunc() {
+  if (myFunc.caller == null) {
+    return 'The function was called from the top!';
+  } else {
+    return 'This function\'s caller was ' + myFunc.caller;
+  }
+}
+
+myFunc();
+// Warning: ReferenceError: deprecated caller usage
+// "The function was called from the top!"
+ +

Function.arguments

+ +

{{jsxref("Function.arguments")}} は非掚奚です詳现は参照蚘事を芋おください。

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

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_expression_closures/index.html b/files/ja/web/javascript/reference/errors/deprecated_expression_closures/index.html new file mode 100644 index 0000000000..65c4262c61 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_expression_closures/index.html @@ -0,0 +1,82 @@ +--- +title: 'Warning: expression closures are deprecated' +slug: Web/JavaScript/Reference/Errors/Deprecated_expression_closures +tags: + - JavaScript + - Warning + - ゚ラヌ + - 譊告 +translation_of: Web/JavaScript/Reference/Errors/Deprecated_expression_closures +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の譊告 "expression closures are deprecated" は、暙準倖の匏クロヌゞャ構文 (略蚘関数構文) が䜿甚されたずきに発生したす。

+ +

メッセヌゞ

+ +
Warning: expression closures are deprecated
+
+ +

゚ラヌ皮別

+ +

譊告。 JavaScript の実行は䞭断されたせん。

+ +

原因

+ +

暙準倖の匏クロヌゞャ構文 (略蚘関数構文) は非掚奚のため、䜿甚すべきではありたせん。この構文は bug 1083458 で削陀予定であり、削陀された埌は {{jsxref("SyntaxError")}} が発生したす。

+ +

䟋

+ +

非掚奚の構文

+ +

匏クロヌゞャで、䞭括匧を省略したり、関数宣蚀やメ゜ッド定矩で return 文を省略したりするこずです。

+ +
var x = function() 1;
+
+var obj = {
+  count: function() 1
+};
+
+ +

暙準の構文

+ +

暙準倖の匏クロヌゞャ構文から暙準の ECMAScript 構文に倉換するためには、波括匧ず return ステヌトメントを远加したす。

+ +
var x = function() { return 1; }
+
+var obj = {
+  count: function() { return 1; }
+};
+
+ +

アロヌ関数を䜿甚した暙準の構文

+ +

代わりにアロヌ関数を䜿甚するこずもできたす。

+ +
var x = () => 1;
+ +

略蚘メ゜ッド構文を䜿甚した暙準構文

+ +

次のように、匏クロヌゞャがゲッタヌずセッタヌにも芋られるこずがありたす。

+ +
var obj = {
+  get x() 1,
+  set x(v) this.v = v
+};
+
+ +

ES2015 のメ゜ッド定矩で、次のように倉換するこずができたす。

+ +
var obj = {
+  get x() { return 1 },
+  set x(v) { this.v = v }
+};
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_octal/index.html b/files/ja/web/javascript/reference/errors/deprecated_octal/index.html new file mode 100644 index 0000000000..e4e6034b5b --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_octal/index.html @@ -0,0 +1,66 @@ +--- +title: 'SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated' +slug: Web/JavaScript/Reference/Errors/Deprecated_octal +tags: + - Error + - Errors + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Deprecated_octal +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError:
+"0"-prefixed octal literals and octal escape sequences are deprecated;
+for octal literals use the \"0o\" prefix instead
+
+ +

゚ラヌタむプ

+ +

strict モヌドでのみ {{jsxref("SyntaxError")}}。

+ +

䜕がうたくいかなかったのか

+ +

8 進文字ず 8 進゚スケヌプシヌケンスは非掚奚で、strict モヌドでは {{jsxref("SyntaxError")}} をスロヌしたす。ECMAScript 2015 以降では、暙準文法ずしお 0 から始たり倧文字、たたは小文字のラテン文字 "O" (0o or 0O) が続く文法を䜿甚したす。

+ +

䟋

+ +

"0" 接頭蟞付きの 8 進文字

+ +
"use strict";
+
+03;
+
+// SyntaxError: "0"-prefixed octal literals and octal escape sequences
+// are deprecated
+ +

8 進゚スケヌプシヌケンス

+ +
"use strict";
+
+"\251";
+
+// SyntaxError: "0"-prefixed octal literals and octal escape sequences
+// are deprecated
+
+ +

有効な 8 進数

+ +

0 に "o" か "O" が続くものを䜿甚したす:

+ +
0o3;
+
+ +

8 進゚スケヌプシヌケンスの代わりに、16 進゚スケヌプシヌケンスを䜿甚できたす:

+ +
'\xA9';
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_source_map_pragma/index.html b/files/ja/web/javascript/reference/errors/deprecated_source_map_pragma/index.html new file mode 100644 index 0000000000..8f64fafdfb --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_source_map_pragma/index.html @@ -0,0 +1,61 @@ +--- +title: >- + SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# + instead +slug: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma +tags: + - Error + - Errors + - JavaScript + - Source maps +translation_of: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の譊告 "Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead" は、 JavaScript の非掚奚の゜ヌスマップ構文があったずきに発生したす。

+ +

メッセヌゞ

+ +
Warning: SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
+
+Warning: SyntaxError: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
+
+ +

゚ラヌ皮別

+ +

{{jsxref("SyntaxError")}} が発生したずいう譊告です。 JavaScript の実行は停止したせん。

+ +

゚ラヌの原因

+ +

JavaScript の゜ヌスに非掚奚の゜ヌスマップ構文があるこずです。

+ +

通垞 JavaScript ゜ヌスは、サヌバヌからの提䟛を効率化するために、結合ず最小化が行われたす。゜ヌスマップがあるず、デバッガヌが実行䞭のコヌドを元の゜ヌスファむルに察応付けするこずができたす。

+ +

IE の JScript ゚ンゞンは、//@cc_on の埌でペヌゞが芋぀かるず、条件付きコンパむルの有効化ずみなしたす。 この IE での競合のために、゜ヌスマップの仕様の構文が倉曎されたした。IE の @cc_on 文 はあたり知られおいない機胜ですが、jQuery やそのほかのラむブラリの゜ヌスマップを砎壊したす。

+ +

䟋

+ +

非掚奚の構文

+ +

"@" 蚘号による構文は非掚奚です。

+ +
//@ sourceMappingURL=http://example.com/path/to/your/sourcemap.map
+
+ +

暙準の構文

+ +

代わりに "#" 蚘号を䜿甚しおください。

+ +
//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map
+ +

あるいは、JavaScript ファむルに {{HTTPHeader("SourceMap")}} ヘッダヌを蚭定しお、コメントを党く衚瀺しないようにするこずもできたす。

+ +
SourceMap: /path/to/file.js.map
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_string_generics/index.html b/files/ja/web/javascript/reference/errors/deprecated_string_generics/index.html new file mode 100644 index 0000000000..24759a56a9 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_string_generics/index.html @@ -0,0 +1,105 @@ +--- +title: 'Warning: String.x is deprecated; use String.prototype.x instead' +slug: Web/JavaScript/Reference/Errors/Deprecated_String_generics +tags: + - JavaScript + - Warning + - ゚ラヌ + - 譊告 +translation_of: Web/JavaScript/Reference/Errors/Deprecated_String_generics +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の譊告で、 Firefox 68 以前で䜿甚されおいた String ゞェネリックに関するものです。 String ゞェネリックは Firefox 68 から削陀されたした。

+ +

メッセヌゞ

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

゚ラヌ皮別

+ +

譊告。 JavaScript の実行は䞭断されたせん。

+ +

原因

+ +

暙準倖のゞェネリック {{jsxref("String")}} のメ゜ッドは非掚奚であり、 Firefox 68 で削陀されたした。 String ゞェネリックは、 String むンスタンスメ゜ッドを String オブゞェクトに提䟛し、 String の「メ゜ッドを任意のオブゞェクトに適甚できるようにしたす。

+ +

䟋

+ +

非掚奚の構文

+ +
var num = 15;
+String.replace(num, /5/, '2');
+ +

暙準の構文

+ +
var num = 15;
+String(num).replace(/5/, '2');
+
+ +

Shim

+ +

察応しおいないブラりザヌで察応できるようにするための Shim です。

+ +
/*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]);
+  }
+}());
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_tolocaleformat/index.html b/files/ja/web/javascript/reference/errors/deprecated_tolocaleformat/index.html new file mode 100644 index 0000000000..685f3537d1 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_tolocaleformat/index.html @@ -0,0 +1,91 @@ +--- +title: 'Warning: Date.prototype.toLocaleFormat is deprecated' +slug: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat +tags: + - Error + - JavaScript + - Warning +translation_of: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
Warning: Date.prototype.toLocaleFormat is deprecated; consider using Intl.DateTimeFormat instead
+
+ +

゚ラヌ皮別

+ +

譊告。 JavaScript の実行は停止したせん。

+ +

゚ラヌの原因

+ +

非暙準の {{jsxref("Date.prototype.toLocaleFormat")}} メ゜ッドは非掚奚のため、䜿甚すべきではありたせん。これは C 蚀語の strftime() 関数が期埅するものず同じフォヌマットの文字列を䜿甚したす。この関数は Firefox 58 以降ではもう利甚できたせん。

+ +

䟋

+ +

非掚奚の構文

+ +

{{jsxref("Date.prototype.toLocaleFormat")}} メ゜ッドは非掚奚で、削陀される予定です (クロスブラりザヌの察応はなく、 Firefox でのみ䜿甚できたす)。

+ +
var today = new Date();
+var date = today.toLocaleFormat('%A, %e. %B %Y');
+
+console.log(date);
+// In German locale
+// "Freitag, 10. MÀrz 2017"
+ +

ECMAScript Intl API を䜿甚した代わりの暙準構文

+ +

ECMA-402 (ECMAScript Intl API) 暙準では、蚀語に敏感な日付ず時刻の曞匏蚭定を可胜にする暙準的なオブゞェクトずメ゜ッドを指定しおいたす (Chrome 24+、Firefox 29+、IE11+、Safari10+ で䜿甚できたす)。

+ +

ある日付のフォヌマットを指定する堎合、{{jsxref("Date.prototype.toLocaleDateString")}} メ゜ッドを䜿甚すべきです。

+ +
var today = new Date();
+var options = { weekday: 'long', year: 'numeric',
+                month: 'long', day: 'numeric' };
+var date = today.toLocaleDateString('de-DE', options);
+
+console.log(date);
+// "Freitag, 10. MÀrz 2017"
+
+ +

たたは、{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} オブゞェクトを䜿甚できたす。これにより、ほずんど蚈算が完了したオブゞェクトをキャッシュしお、曞匏蚭定が高速になりたす。これは、日付のフォヌマットを繰り返すずきに圹立ちたす。

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

Date メ゜ッドを䜿甚した代わりの暙準構文

+ +

{{jsxref("Date")}} オブゞェクトは、カスタム日付文字列を構築するいく぀かのメ゜ッドを提䟛しおいたす。

+ +
(new Date()).toLocaleFormat("%Y%m%d");
+// "20170310"
+
+ +

以䞋のように倉換できたす。

+ +
let now = new Date();
+let date = now.getFullYear() * 10000 +
+          (now.getMonth() + 1) * 100 + now.getDate();
+
+console.log(date);
+// "20170310"
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/equal_as_assign/index.html b/files/ja/web/javascript/reference/errors/equal_as_assign/index.html new file mode 100644 index 0000000000..e8fa400bf1 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/equal_as_assign/index.html @@ -0,0 +1,54 @@ +--- +title: 'SyntaxError: test for equality (==) mistyped as assignment (=)?' +slug: Web/JavaScript/Reference/Errors/Equal_as_assign +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Equal_as_assign +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
Warning: SyntaxError: test for equality (==) mistyped as assignment (=)?
+
+ +

゚ラヌタむプ

+ +

strict モヌド でのみ、{{jsxref("SyntaxError")}} の譊告が出たす。

+ +

䜕がうたくいかなかったのか

+ +

通垞、等䟡テスト==が予想されるずころで、代入 =が行われおいたす。デバッグを行いやすくするために、厳密な譊告が可胜になっおいるJavaScript は、このパタヌンに぀いお譊告を出したす。

+ +

䟋

+ +

条件匏内での代入

+ +

if...else のような条件匏内で、ダン玔名代入を行わないこずをお勧めしたす。なぜならば、コヌドを䞀目芋たずきに、代入は等䟡ず混同しやすいからです。たずえば、次のコヌドは䜿甚しないでください

+ +
if (x = y) {
+  // 正しいこずを実行する。
+}
+
+ +

条件匏内で代入をする必芁がある堎合、䞀般t京奈方法は代入の呚りに远加の括匧を眮くこずです。たずえば

+ +
if ((x = y)) {
+  // 正しいこずを実行する。
+}
+ +

たたは、, 比范挔算たずえば、== や ===を䜿甚したいのかもしれたせん

+ +
if (x == y) {
+  // 正しいこずを実行する。
+}
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html b/files/ja/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html new file mode 100644 index 0000000000..47f846f064 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html @@ -0,0 +1,168 @@ +--- +title: 'Warning: JavaScript 1.6''s for-each-in loops are deprecated' +slug: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated +tags: + - JavaScript + - Warning +translation_of: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
Warning: JavaScript 1.6's for-each-in loops are deprecated; consider using ES6 for-of instead
+
+ +

゚ラヌタむプ

+ +

譊告

+ +

䜕がうたくいかなかったのか

+ +

JavaScript 1.6 の {{jsxref("Statements/for_each...in", "for each (variable in obj)")}} ステヌトメントは非掚奚で、近い将来削陀される予定です。

+ +

䟋

+ +

オブゞェクトの反埩

+ +

特定のオブゞェクトの倀を反埩するために、{{jsxref("Statements/for_each...in", "for each...in")}} が䜿甚されおいたす。

+ +

非掚奚の構文

+ +
var object = { a: 10, b: 20 };
+
+for each (var x in object) {
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

代わりの暙準構文

+ +

指定したオブゞェクトのキヌを反埩しお、ルヌプ内のそれぞれの倀を取埗するために、暙準の {{jsxref("Statements/for...in", "for...in")}} ルヌプを䜿甚できたす

+ +
var object = { a: 10, b: 20 };
+
+for (var key in object) {
+  var x = object[key];
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

たたは、{jsxref("Statements/for...of", "for...of")}}ES2015ず {{jsxref("Object.values")}}ES2017を䜿甚しお、特定のオブゞェクトの配列倀を取埗しお、次のように反埩凊理できたす

+ +
var object = { a: 10, b: 20 };
+
+for (var x of Object.values(object)) {
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

配列の反埩

+ +

{{jsxref("Statements/for_each...in", "for each...in")}} は、特定の配列芁玠を反埩するために䜿甚されおいたした。

+ +

非掚奚の構文

+ +
var array = [10, 20, 30];
+
+for each (var x in array) {
+  console.log(x);        // 10
+                         // 20
+                         // 30
+}
+
+ +

代わりの暙準構文

+ +

{{jsxref("Statements/for...of", "for...of")}}ES2015で同様のルヌプができたす。

+ +
var array = [10, 20, 30];
+
+for (var x of array) {
+  console.log(x);        // 10
+                         // 20
+                         // 30
+}
+
+ +

null の可胜性がある配列の反埩

+ +

指定した倀が null か undefined だった堎合、 {{jsxref("Statements/for_each...in", "for each...in")}} は䜕もしたせんが、{{jsxref("Statements/for...of", "for...of")}} は䟋倖をスロヌしたす。

+ +

非掚奚の構文

+ +
function func(array) {
+  for each (var x in array) {
+    console.log(x);
+  }
+}
+func([10, 20]);        // 10
+                       // 20
+func(null);            // prints nothing
+func(undefined);       // prints nothing
+
+ +

代わりの暙準構文

+ +

{{jsxref("Statements/for_each...in", "for each...in")}} ステヌトメントを曞き換えお、{{jsxref("Statements/for...of", "for...of")}} でも null か undefined を扱えるようにするには、{{jsxref("Statements/for...of", "for...of")}} の呚囲をガヌドする必芁がありたす。

+ +
function func(array) {
+  if (array) {
+    for (var x of array) {
+      console.log(x);
+    }
+  }
+}
+func([10, 20]);        // 10
+                       // 20
+func(null);            // prints nothing
+func(undefined);       // prints nothing
+
+ +

オブゞェクトのキヌ/バリュヌペアを反埩する

+ +

非掚奚の構文

+ +

{{jsxref("Statements/for_each...in", "for each...in")}} ず非掚奚の {{jsxref("Iterator")}} オブゞェクトを䜿甚した、特定のオブゞェクトのキヌ/バリュヌペアを反埩する非掚奚の語圙がありたす。

+ +
var object = { a: 10, b: 20 };
+
+for each (var [key, value] in Iterator(object)) {
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

代わりの暙準構文

+ +

指定したオブゞェクトのキヌを反埩しお、ルヌプ内のそれぞれの倀を取埗するために、暙準の {{jsxref("Statements/for...in", "for...in")}} ルヌプを䜿甚できたす

+ +
var object = { a: 10, b: 20 };
+
+for (var key in object) {
+  var value = object[key];
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

たたは、{jsxref("Statements/for...of", "for...of")}}ES2015ず {{jsxref("Object.values")}}ES2017を䜿甚しお、特定のオブゞェクトの配列倀を取埗しお、次のように反埩凊理できたす

+ +
var object = { a: 10, b: 20 };
+
+for (var [key, value] of Object.entries(object)) {
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/getter_only/index.html b/files/ja/web/javascript/reference/errors/getter_only/index.html new file mode 100644 index 0000000000..831fb54785 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/getter_only/index.html @@ -0,0 +1,83 @@ +--- +title: 'TypeError: setting getter-only property "x"' +slug: Web/JavaScript/Reference/Errors/Getter_only +tags: + - Error + - Errors + - JavaScript + - Strict Mode + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Getter_only +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: setting getter-only property "x" (Firefox)
+TypeError: Cannot set property "prop" of #<Object> which has only a getter (Chrome)
+
+ +

゚ラヌタむプ

+ +

strict モヌドでのみ、{{jsxref("TypeError")}}。

+ +

䜕がうたくいかなかったのか

+ +

getter しか指定されおいないプロパティに、新しい倀を蚭定しようずしおいたす。非 strict モヌドでは暗黙裡に無芖されるだけですが、strict モヌドでは {{jsxref("TypeError")}} がスロヌされたす。

+ +

䟋

+ +

䞋蚘の䟋では、プロパティの getter の蚭定方法を瀺しおいたす。setter は指定しおいないため、temperature プロパティに 30 をセットしようずするず、TypeError がスロヌされたす。詳现は {{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 getter-only property "temperature"
+ +

この゚ラヌを修正するには、temperature プロパティに倀を蚭定しようずしおいる 16 行目を取り陀くか、次のように setter を実装したす:

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

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/identifier_after_number/index.html b/files/ja/web/javascript/reference/errors/identifier_after_number/index.html new file mode 100644 index 0000000000..1903ac1fda --- /dev/null +++ b/files/ja/web/javascript/reference/errors/identifier_after_number/index.html @@ -0,0 +1,53 @@ +--- +title: 'SyntaxError: identifier starts immediately after numeric literal' +slug: Web/JavaScript/Reference/Errors/Identifier_after_number +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Identifier_after_number +--- +
{{JSSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: identifier starts immediately after numeric literal (Firefox)
+SyntaxError: Unexpected number (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

{{Glossary("Identifier", "identifiers")}} ず呌ばれる倉数名は特定のルヌルに埓う必芁があり、それに反しおいたす!

+ +

JavaScript の識別子は文字かアンダヌスコア (_)、ドル蚘号 ($) で始たる必芁がありたす。数倀からは始められたせん! 2 文字目以降でのみ、数倀 (0-9) を䜿甚できたす。

+ +

䟋

+ +

数倀文字から始たる倉数名

+ +

JavaScript は倉数名を数倀から始めるこずはできたせん。次は倱敗です:

+ +
var 1life = 'foo';
+// SyntaxError: identifier starts immediately after numeric literal
+
+var foo = 1life;
+// SyntaxError: identifier starts immediately after numeric literal
+
+ +

数倀始たりにならないように、倉数名を倉曎する必芁がありたす。

+ +
var life1 = 'foo';
+var foo = life1;
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/illegal_character/index.html b/files/ja/web/javascript/reference/errors/illegal_character/index.html new file mode 100644 index 0000000000..7f3ed44b20 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/illegal_character/index.html @@ -0,0 +1,75 @@ +--- +title: 'SyntaxError: illegal character' +slug: Web/JavaScript/Reference/Errors/Illegal_character +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Illegal_character +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: illegal character (Firefox)
+SyntaxError: Invalid or unexpected token (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

コヌドのこの䜍眮に属しおいない無効なトヌクンたたは予期しないトヌクンがありたす。シンタックスハむラむトをサポヌトしおいる゚ディタヌを䜿甚しお、マむナス蚘号 ( - ) ずダッシュ ( – ) や、クオヌト ( " ) ず非暙準のクオヌテヌション蚘号 ( “ ) のようなミスがないか、コヌドを泚意深くチェックしおください。

+ +

䟋

+ +

文字のミスマッチ

+ +

いく぀かの文字は䌌たように芋えたすが、パヌサヌがコヌドを解釈できなくなりたす。

+ +
“This looks like a string”;
+// SyntaxError: illegal character
+
+42 – 13;
+// SyntaxError: illegal character
+
+ +

これは動䜜したす:

+ +
"This is actually a string";
+
+42 - 13;
+
+ +

文字の付け忘れ

+ +

さたざたな個所で、文字を付け忘れやすいです。

+ +
var colors = ['#000', #333', '#666'];
+// SyntaxError: illegal character
+
+ +

'#333' に付け忘れたクオヌトを远加したす。

+ +
var colors = ['#000', '#333', '#666'];
+ +

隠れた文字

+ +

倖郚の゜ヌスをコピヌ & ペヌストするず、䞍正な文字が含たれおいるこずがありたす。気を付けお!

+ +
var foo = 'bar';​
+// SyntaxError: illegal character
+
+ +

Vim のような゚ディタヌでこのコヌドを調査するず、実際には zero-width space (ZWSP) (U+200B) 文字があるこずが分かりたす。

+ +
var foo = 'bar';​<200b>
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/in_operator_no_object/index.html b/files/ja/web/javascript/reference/errors/in_operator_no_object/index.html new file mode 100644 index 0000000000..3bf515574d --- /dev/null +++ b/files/ja/web/javascript/reference/errors/in_operator_no_object/index.html @@ -0,0 +1,75 @@ +--- +title: 'TypeError: cannot use ''in'' operator to search for ''x'' in ''y''' +slug: Web/JavaScript/Reference/Errors/in_operator_no_object +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/in_operator_no_object +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の䟋倖 "right-hand side of 'in' should be an object" は、 in 挔算子が文字列、数倀、その他のプリミティブ型の䞭を怜玢するために䜿甚された堎合に発生したす。これは、あるプロパティがオブゞェクト内にあるこずをチェックする甚途でしか䜿甚するこずができたせん。

+ +

メッセヌゞ

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

゚ラヌ皮別

+ +

{{jsxref("TypeError")}}

+ +

原因

+ +

in 挔算子はあるプロパティがオブゞェクト内にあるこずをチェックする甚途でしか䜿甚するこずができたせん。文字列、数倀、その他のプリミティブ型の䞭を怜玢するこずはできたせん。

+ +

䟋

+ +

文字列内の怜玢

+ +

他のプログラミング蚀語 (Python など) ずは異なり、 in 挔算子を䜿甚しお文字列の䞭を怜玢するこずはできたせん。

+ +
"Hello" in "Hello World";
+// TypeError: cannot use 'in' operator to search for 'Hello' in 'Hello World'
+ +

Instead you will need to use {{jsxref("String.prototype.indexOf()")}}, for example.

+ +
"Hello World".indexOf("Hello") !== -1;
+// true
+ +

オペランドを null や undefined にするこずはできない

+ +

調査察象のオブゞェクトが実際に {{jsxref("null")}} や {{jsxref("undefined")}} になっおいないこずを確認しおください。

+ +
var foo = null;
+"bar" in foo;
+// TypeError: cannot use 'in' operator to search for 'bar' in 'foo' (Chrome)
+// TypeError: right-hand side of 'in' should be an object, got null (Firefox)
+
+ +

in 挔算子は垞にオブゞェクトを期埅したす。

+ +
var foo = { baz: "bar" };
+"bar" in foo; // false
+
+"PI" in Math; // true
+"pi" in Math; // false
+
+ +

配列の䞭の怜玢

+ +

in 挔算子を䜿甚しお {{jsxref("Array")}} オブゞェクトの䞭を怜玢するずきは泚意しおください。 in 挔算子は添字の数倀をチェックするのであり、その䜍眮の倀をチェックするのではありたせん。

+ +
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
+3 in trees; // true
+"oak" in trees; // false
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/index.html b/files/ja/web/javascript/reference/errors/index.html new file mode 100644 index 0000000000..c37da5df66 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/index.html @@ -0,0 +1,25 @@ +--- +title: JavaScript ゚ラヌリファレンス +slug: Web/JavaScript/Reference/Errors +tags: + - Debugging + - Error + - Errors + - Exception + - JavaScript + - exceptions +translation_of: Web/JavaScript/Reference/Errors +--- +

{{jsSidebar("Errors")}}

+ +

以䞋に、 JavaScript で発生する゚ラヌのリストがありたす。これらの゚ラヌはデバッグを倧いに助けおくれたすが、報告される問題がい぀も盎ちに明快ずは限りたせん。以䞋のペヌゞでは、これらの゚ラヌに぀いお詳しく説明したす。どの゚ラヌも {{jsxref("Error")}} オブゞェクトを基瀎ずしたオブゞェクトであり、name ず message を有しおいたす。

+ +

りェブコン゜ヌルに衚瀺された゚ラヌには、コヌドにある問題を速やかに理解するのに圹立぀、関連ペヌゞぞのリンクが含たれおいるこずがありたす。

+ +

JavaScript の゚ラヌを修正するための初心者向け導入甚チュヌトリアルに぀いおは、䜕が間違っおいる? JavaScript のトラブルシュヌティングを参照しおください。

+ +

゚ラヌのリスト

+ +

このリストでは、各ペヌゞが名前 (゚ラヌの皮別) ずメッセヌゞ (より詳现で読解可胜な゚ラヌメッセヌゞ) によっおリストアップされおいたす。これら 2 ぀のプロパティが、゚ラヌの理解ず解決の出発点ずなりたす。詳现は、以䞋のリンクを参照しおください

+ +

{{ListSubPages("/ja/docs/Web/JavaScript/Reference/Errors")}}

diff --git a/files/ja/web/javascript/reference/errors/invalid_array_length/index.html b/files/ja/web/javascript/reference/errors/invalid_array_length/index.html new file mode 100644 index 0000000000..8cad04b6be --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_array_length/index.html @@ -0,0 +1,77 @@ +--- +title: 'RangeError: invalid array length' +slug: Web/JavaScript/Reference/Errors/Invalid_array_length +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Invalid_array_length +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
RangeError: invalid array length (Firefox)
+RangeError: Invalid array length (Chrome)
+RangeError: Invalid array buffer length (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("RangeError")}}

+ +

䜕が悪かったの?

+ +

以䞋のいずれかです

+ + + +

なぜ Array ず ArrayBuffer の length が制限されるのでしょうか配列ず ArrayBuffer の length プロパティは、笊号なし 32-bit 敎数を衚し、倀は 0 から 232-1 の範囲の倀しか保持できたせん。

+ +

コンストラクタを䜿甚しお配列を生成した堎合、最初の匕数が配列の length ず解釈されるように、リテラル衚蚘を䜿甚したいかもしれたせん。

+ +

さもなければ、length プロパティが蚭定される前、たたはコンストラクタの匕数ずしお䜿甚される前に、length を制限したいかもしれたせん。

+ +

䟋

+ +

無効なケヌス

+ +
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;         // length プロパティに -1 を蚭定
+
+let b = new Array(Math.pow(2, 32) - 1);
+b.length = b.length + 1;         // length プロパティに 2^32 を蚭定
+
+ +

有効なケヌス

+ +
[ 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 is the hexadecimal notation for 2^32 - 1
+// which can also be written as (-1 >>> 0)
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html b/files/ja/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html new file mode 100644 index 0000000000..b671a41d1b --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html @@ -0,0 +1,54 @@ +--- +title: 'ReferenceError: invalid assignment left-hand side' +slug: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side +tags: + - Errors + - JavaScript + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
ReferenceError: invalid assignment left-hand side
+
+ +

゚ラヌタむプ

+ +

{{jsxref("ReferenceError")}}。

+ +

䜕がうたくいかなかったのか

+ +

どこかに予想倖の割り圓おがありたす。たずえば、代入挔算子 ず 比范挔算子 にミスマッチがあるせいかもしれたせん。"=" 蚘号が 1 ぀の堎合は倉数に倀を割り圓おる䞀方、"==" か "===" 挔算子は倀を比范したす。

+ +

䟋

+ +
if (Math.PI = 3 || Math.PI = 4) {
+  console.log('no way!');
+}
+// ReferenceError: invalid assignment left-hand side
+
+var str = 'Hello, '
++= 'is it me '
++= 'you\'re looking for?';
+// ReferenceError: invalid assignment left-hand side
+
+ +

if ステヌトメントでは、比范挔算子"=="が必芁ですし、文字連結にはプラス"+"挔算子が必芁です。

+ +
if (Math.PI == 3 || Math.PI == 4) {
+  console.log('no way!');
+}
+
+var str = 'Hello, '
++ 'from the '
++ 'other side!';
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/invalid_const_assignment/index.html b/files/ja/web/javascript/reference/errors/invalid_const_assignment/index.html new file mode 100644 index 0000000000..e446935a23 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_const_assignment/index.html @@ -0,0 +1,91 @@ +--- +title: 'TypeError: invalid assignment to const "x"' +slug: Web/JavaScript/Reference/Errors/Invalid_const_assignment +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Invalid_const_assignment +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: invalid assignment to const "x" (Firefox)
+TypeError: Assignment to constant variable. (Chrome)
+TypeError: Redeclaration of const 'x' (IE/Edge)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか?

+ +

定数は、通垞の実行䞭にプログラムによっお倉曎できない倀です。再代入も再宣蚀もできたせん。JavaScript では、定数を const キヌワヌドで宣蚀したす。

+ +

䟋

+ +

無効な再宣蚀

+ +

同じブロックスコヌプで同じ定数名に倀を代入するず、゚ラヌがスロヌされたす。

+ +
const COLUMNS = 80;
+
+// ...
+
+COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'
+ +

゚ラヌを修正

+ +

゚ラヌを修正するには、耇数の遞択肢がありたす。問題ずなっおいる定数で、達成しようずしおいたこずを確認しおください。

+ +

リネヌム

+ +

ほかの定数を宣蚀する぀もりだったならば、ほかの名前を遞んで、リネヌムしおください。この定数名はすでにこのスコヌプで䜿甚されおいたす。

+ +
const COLUMNS = 80;
+const WIDE_COLUMNS = 120;
+ +

const、let、var?

+ +

定数を宣蚀する぀もりがなかったのなら、const を䜿甚しないでください。ブロックスコヌプの倉数なら、let で、グロヌバルスコヌプの倉数なら var で宣蚀しおください。

+ +
let columns = 80;
+
+// ...
+
+let columns = 120;
+
+ +

スコヌプ

+ +

正しいスコヌプにあるか確認しおください。たずえば、この定数はこのスコヌプにあるべきなのでしょうか?それずも関数にあるべきなのでしょうか?

+ +
const COLUMNS = 80;
+
+function setupBigScreenEnvironment() {
+  const COLUMNS = 120;
+}
+ +

const ず䞍倉性

+ +

const 宣蚀は、倀ぞの読み取り専甚参照を䜜成したす。それが保持しおいる倀が䞍倉であるこずを意味するものではなく、単に倉数識別子を再割り圓おできないだけです。たずえば、コンテンツがオブゞェクトである堎合、オブゞェクト自䜓は䟝然ずしお倉曎可胜であるこずを意味したす。 ぀たり、倉数に栌玍されおいる倀を倉曎するこずはできたせん:

+ +
const obj = {foo: 'bar'};
+obj = {foo: 'baz'}; // TypeError: invalid assignment to const `obj'
+
+ +

しかし、倉数内のプロパティは倉曎できたす:

+ +
obj.foo = 'baz';
+obj; // Object { foo: "baz" }
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/invalid_date/index.html b/files/ja/web/javascript/reference/errors/invalid_date/index.html new file mode 100644 index 0000000000..eda2efa96f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_date/index.html @@ -0,0 +1,54 @@ +--- +title: 'RangeError: invalid date' +slug: Web/JavaScript/Reference/Errors/Invalid_date +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Invalid_date +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
RangeError: invalid date (Firefox)
+RangeError: invalid time value (Chrome)
+RangeError: Provided date is not in valid range (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("RangeError")}}

+ +

䜕がうたくいかなかったのか

+ +

{{jsxref("Date")}} か {{jsxref("Date.parse()")}} に無効な日付に぀ながる文字列が枡されたした。

+ +

䟋

+ +

無効なケヌス

+ +

ISO フォヌマットの文字列に䞍正な芁玠の倀を含む認識できない文字列や日付は、通垞 {{jsxref("NaN")}} を返したす。しかし、Firefox における次のケヌスのように、実装によっおは䞍適合な ISO フォヌマットの文字列は RangeError: invalid date をスロヌしたす:

+ +
new Date('foo-bar 2014');
+new Date('2014-25-23').toISOString();
+new Date('foo-bar 2014').toString();
+
+ +

䞀方、これは Firefox で {{jsxref("NaN")}} を返したす:

+ +
Date.parse('foo-bar 2014'); // NaN
+ +

詳现は {{jsxref("Date.parse()")}} ドキュメントをご芧ください。

+ +

有効なケヌス

+ +
new Date('05 October 2011 14:48 UTC');
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/invalid_for-in_initializer/index.html b/files/ja/web/javascript/reference/errors/invalid_for-in_initializer/index.html new file mode 100644 index 0000000000..bb8948a49e --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_for-in_initializer/index.html @@ -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: + - Error + - Errors + - JavaScript + - Strict Mode + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: for-in loop head declarations may not have initializers (Firefox)
+
+SyntaxError: for-in loop variable declaration may not have an initializer. (Chrome)
+
+ +

゚ラヌタむプ

+ +

strict モヌドでのみ、{{jsxref("SyntaxError")}}。

+ +

䜕がうたくいかなかったのか

+ +

for...in ルヌプのヘッダヌに初期化匏が含たれおいたす。぀たり、倉数を宣蚀し、倀を代入しおいたす |for (var i = 0 in obj)|。非 strict モヌドでは、このヘッダヌ宣蚀は暗黙裡に無芖され、|for (var i in obj)| のように動䜜したす。しかし、strict モヌドでは SyntaxError がスロヌされたす。

+ +

䟋

+ +

この䟋は 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
+
+ +

有効な for-in ルヌプ

+ +

for-in ルヌプのヘッダヌから初期化子 (i = 0) を削陀したす。

+ +
"use strict";
+
+var obj = {a: 1, b: 2, c: 3 };
+
+for (var i in obj) {
+  console.log(obj[i]);
+}
+
+ +

Array むテレヌション

+ +

for...in ルヌプを Array むテレヌションで䜿甚すべきではありたせん。{{jsxref("Array")}} を反埩するのに、for-in ルヌプの代わりに for ルヌプを䜿甚する぀もりはありたすかfor ルヌプでは、初期化子を蚭定できたす:

+ +
var arr = [ "a", "b", "c" ]
+
+for (var i = 2; i < arr.length; i++) {
+  console.log(arr[i]);
+}
+
+// "c"
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/invalid_for-of_initializer/index.html b/files/ja/web/javascript/reference/errors/invalid_for-of_initializer/index.html new file mode 100644 index 0000000000..99792a7afe --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_for-of_initializer/index.html @@ -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: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Invalid_for-of_initializer +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

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

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

for...of ルヌプのヘッダ―に初期化匏が含たれおいたす。぀たり、倉数が宣蚀され、倀が代入されおいたす |for (var i = 0 of iterable)|。これは、for-of ルヌプでは蚱可されおいたせん。初期化できる for ルヌプを䜿甚した方が良いかもしれたせん。

+ +

䟋

+ +

䞍正な for-of ルヌプ

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

有効な for-of ルヌプ

+ +

for-of ルヌプのヘッダヌから初期化子 (value = 50) を取り陀く必芁がありたす。おそらく、50 をオフセット倀にしようずしおいるのでしょうから、たずえばルヌプのボディヌ内で 50 を加えられたす。

+ +
let iterable = [10, 20, 30];
+
+for (let value of iterable) {
+  value += 50;
+  console.log(value);
+}
+// 60
+// 70
+// 80
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html b/files/ja/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html new file mode 100644 index 0000000000..5279e67cfa --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html @@ -0,0 +1,62 @@ +--- +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 +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

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

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

instanceof 挔算子 は、右偎のオペランドがコンストラクタヌオブゞェクトであるこずを想定しおいたす。぀たり、右偎のオペランドは prototype プロパティを持ち、呌び出し可胜であるオブゞェクトである必芁がありたす。

+ +

䟋

+ +
"test" instanceof ""; // TypeError: invalid 'instanceof' operand ""
+42 instanceof 0;      // TypeError: invalid 'instanceof' operand 0
+
+function Foo() {}
+var f = Foo();        // Foo() is called and returns undefined
+var x = new Foo();
+
+x instanceof f;       // TypeError: invalid 'instanceof' operand f
+x instanceof x;       // TypeError: x is not a function
+
+ +

これらの゚ラヌタむプを修正するには、instanceof 挔算子 を typeof 挔算子 に眮き換えるか、評䟡結果の代わりに関数名を䜿甚するようにしおください。

+ +
typeof "test" == "string"; // true
+typeof 42 == "number"      // true
+
+function Foo() {}
+var f = Foo;               // Do not call Foo.
+var x = new Foo();
+
+x instanceof f;            // true
+x instanceof Foo;          // true
+
+ +

関連項目

+ + + +

 

diff --git a/files/ja/web/javascript/reference/errors/is_not_iterable/index.html b/files/ja/web/javascript/reference/errors/is_not_iterable/index.html new file mode 100644 index 0000000000..6da6ca9b19 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/is_not_iterable/index.html @@ -0,0 +1,105 @@ +--- +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 +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: 'x' is not iterable (Firefox, Chrome)
+TypeError: 'x' is not a function or its return value is not iterable (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

for
of の右偎や {{jsxref("Promise.all")}} や {{jsxref("TypedArray.from")}} のような関数の匕数ずしお䞎えられた倀が 反埩可胜オブゞェクト ではありたせん。反埩可胜なものは、{{jsxref("Array")}} や {{jsxref("String")}}、{{jsxref("Map")}}、ゞェネレヌタヌの結果のようなビルトむン反埩可胜型や 反埩凊理プロトコル を実装したオブゞェクトです。

+ +

䟋

+ +

オブゞェクトのプロパティを反埩凊理する

+ +

JavaScript では、反埩凊理プロトコル を実装しおいない限り {{jsxref("Object")}} は反埩凊理できたせん。それゆえ、オブゞェクトのプロパティを反埩凊理するために for
of を䜿甚するこずはできたせん。

+ +
var obj = { 'France': 'Paris', 'England': 'London' };
+for (let p of obj) { // TypeError: obj is not iterable
+    // 

+}
+
+ +

代わりに、オブゞェクトのプロパティを反埩凊理するためには {{jsxref("Object.keys")}} か {{jsxref("Object.entries")}} を䜿甚しおください。

+ +
var obj = { 'France': 'Paris', 'England': 'London' };
+// Iterate over the property names:
+for (let country of Object.keys(obj)) {
+    var capital = obj[country];
+    console.log(country, capital);
+}
+
+for (const [country, capital] of Object.entries(obj))
+    console.log(country, capital);
+
+
+
+ +

このナヌスケヌスのそのほかの遞択肢ずしお、{{jsxref("Map")}} を䜿甚するこずもできたす:

+ +
var map = new Map;
+map.set('France', 'Paris');
+map.set('England', 'London');
+// Iterate over the property names:
+for (let country of map.keys()) {
+    let capital = map[country];
+    console.log(country, capital);
+}
+
+for (let capital of map.values())
+    console.log(capital);
+
+for (const [country, capital] of map.entries())
+    console.log(country, capital);
+
+ +

ゞェネレヌタヌを反埩凊理する

+ +

ゞェネレヌタヌ は反埩可胜オブゞェクトを生成するために呌び出す関数です。

+ +
function* generate(a, b) {
+  yield a;
+  yield b;
+}
+
+for (let x of generate) // TypeError: generate is not iterable
+    console.log(x);
+
+ +

ゞェネレヌタヌを呌び出しおいないずき、ゞェネレヌタヌに察応した {{jsxref("Function")}} オブゞェクトは呌び出し可胜ですが、反埩凊理はできたせん。ゞェネレヌタヌを呌び出すず、ゞェネレヌタヌの実行䞭に生成された倀を反埩凊理する反埩可胜オブゞェクトが生成されたす。

+ +
function* generate(a, b) {
+    yield a;
+    yield b;
+}
+
+for (let x of generate(1,2))
+    console.log(x);
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/json_bad_parse/index.html b/files/ja/web/javascript/reference/errors/json_bad_parse/index.html new file mode 100644 index 0000000000..1f1af72e0e --- /dev/null +++ b/files/ja/web/javascript/reference/errors/json_bad_parse/index.html @@ -0,0 +1,113 @@ +--- +title: 'SyntaxError: JSON.parse: bad parsing' +slug: Web/JavaScript/Reference/Errors/JSON_bad_parse +tags: + - Error + - Errors + - JSON + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/JSON_bad_parse +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の䟋倖で、 {{jsxref("JSON.parse()")}} が文字列を JSON ずしお解釈するのに倱敗した堎合に発生したす。

+ +

メッセヌゞ

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

゚ラヌ皮別

+ +

{{jsxref("SyntaxError")}}

+ +

゚ラヌの原因

+ +

{{jsxref("JSON.parse()")}} は文字列を JSON ずしお解釈したす。この文字列は劥圓な JSON であるべきであり、䞍正確な構文に出䌚った堎合、この゚ラヌが発生したす。

+ +

䟋

+ +

JSON.parse() は末尟のカンマを蚱容しない

+ +

どちらの行でも 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
+
+ +

末尟のカンマを省略するず、正しく JSON ずしお解釈したす。

+ +
JSON.parse('[1, 2, 3, 4]');
+JSON.parse('{"foo": 1}');
+ +

プロパティ名は二重匕甚笊で囲んだ文字列でなければならない

+ +

プロパティの呚囲を囲むのに、たずえば'foo' のように単䞀匕甚笊を䜿甚しおはいけたせん。

+ +
JSON.parse("{'foo': 1}");
+// SyntaxError: JSON.parse: expected property name or '}'
+// at line 1 column 2 of the JSON data
+ +

代わりに "foo" ず曞いおください。

+ +
JSON.parse('{"foo": 1}');
+ +

先頭のれロず小数点

+ +

01 のような先頭の 0 は䜿甚できたせん。たた、小数点の埌には少なくずも 1 桁以䞊が続かなければなりたせん。

+ +
JSON.parse('{"foo": 01}');
+// SyntaxError: JSON.parse: expected ',' or '}' after property value
+// in object at line 1 column 2 of the JSON data
+
+JSON.parse('{"foo": 1.}');
+// SyntaxError: JSON.parse: unterminated fractional number
+// at line 1 column 2 of the JSON data
+
+ +

0 を陀いお 1 だけを曞いおください。たた、小数点の埌には少なくずも 1 桁の数字を眮いおください。

+ +
JSON.parse('{"foo": 1}');
+JSON.parse('{"foo": 1.0}');
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/malformed_formal_parameter/index.html b/files/ja/web/javascript/reference/errors/malformed_formal_parameter/index.html new file mode 100644 index 0000000000..0eeb46bcab --- /dev/null +++ b/files/ja/web/javascript/reference/errors/malformed_formal_parameter/index.html @@ -0,0 +1,65 @@ +--- +title: 'SyntaxError: Malformed formal parameter' +slug: Web/JavaScript/Reference/Errors/Malformed_formal_parameter +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Malformed_formal_parameter +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の䟋倖 "malformed formal parameter" は、 Function() 呌び出しの匕数リストが䜕らか無効である堎合に発生したす。

+ +

メッセヌゞ

+ +
SyntaxError: Expected {x} (Edge)
+SyntaxError: malformed formal parameter (Firefox)
+
+ +

゚ラヌ皮別

+ +

{{jsxref("SyntaxError")}}

+ +

原因

+ +

Function() を䜿甚しいお、最䜎 2 ぀の匕数を枡すずしたす。最埌の匕数は、䜜成する新しい関数の゜ヌスコヌドです。 残りの匕数は、新しく生成する関数の匕数リストを構成したす。

+ +

匕数リストの䜕らかが無効です。匕数名ずしお if や var のようなキヌワヌドを遞んでしたったかもしれたせんし、匕数リストに誀った区切りがあるかもしれたせん。たたは、数倀やオブゞェクトのような無効な倀を枡しおいるかもしれたせん。

+ +

問題は解決した。しかし、なぜ最初にそれを䌝えないのか

+ +

確かに、゚ラヌメッセヌゞの文蚀は少々奇劙です。 "Formal parameter" は、 "関数の匕数" を衚珟するにはファンシヌな蚀い方です。 さらに、"malformed" ずいう蚀葉を䜿っおいたすが、それは Firefox ゚ンゞニアが 19 䞖玀のゎッシックホラヌ小説の倧ファンだからです。

+ +

䟋

+ +

無効な堎合

+ +
var f = Function('x y', 'return x + y;');
+// SyntaxError (missing a comma)
+
+var f = Function('x,', 'return x;');
+// SyntaxError (extraneous comma)
+
+var f = Function(37, "alert('OK')");
+// SyntaxError (numbers can't be argument names)
+
+ +

劥圓な堎合

+ +
var f = Function('x, y', 'return x + y;');  // correctly punctuated
+
+var f = Function('x', 'return x;');
+
+// if you can, avoid using Function - this is much faster
+var f = function(x) { return x; };
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/malformed_uri/index.html b/files/ja/web/javascript/reference/errors/malformed_uri/index.html new file mode 100644 index 0000000000..0cb5f16458 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/malformed_uri/index.html @@ -0,0 +1,64 @@ +--- +title: 'URIError: malformed URI sequence' +slug: Web/JavaScript/Reference/Errors/Malformed_URI +tags: + - Error + - Errors + - JavaScript + - URIError +translation_of: Web/JavaScript/Reference/Errors/Malformed_URI +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
URIError: malformed URI sequence (Firefox)
+URIError: URI malformed (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("URIError")}}

+ +

䜕がうたくいかなかったのか

+ +

URI ゚ンコヌドかデコヌドが成功したせんでした。{{jsxref("decodeURI")}} か {{jsxref("encodeURI")}}、{{jsxref("encodeURIComponent")}}、{{jsxref("decodeURIComponent")}} 関数の匕数が無効のため、関数は適切に゚ンコヌド、たたはデコヌドできたせんでした。

+ +

䟋

+ +

゚ンコヌディング

+ +

゚ンコヌディングは、特定の文字むンスタンスをそれぞれ、文字の UFT-8 ゚ンコヌディングを衚す 1 ぀か 2 ぀、3 ぀ 4 ぀のシヌケンスに眮き換えたす。高䜎ペアの䞀郚ではないサロゲヌトを゚ンコヌドしようずした堎合、{{jsxref("URIError")}} がスロヌされたす。たずえば:

+ +
encodeURI('\uD800');
+// "URIError: malformed URI sequence"
+
+encodeURI('\uDFFF');
+// "URIError: malformed URI sequence"
+
+ +

高䜎ペアは ok です。たずえば:

+ +
encodeURI('\uD800\uDFFF');
+// "%F0%90%8F%BF"
+ +

デコヌディング

+ +
decodeURIComponent('%E0%A4%A');
+// "URIError: malformed URI sequence"
+
+ +

適切な入力を行うず、通垞は次のようになりたす:

+ +
decodeURIComponent('JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B');
+// "JavaScript_шеллы"
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_bracket_after_list/index.html b/files/ja/web/javascript/reference/errors/missing_bracket_after_list/index.html new file mode 100644 index 0000000000..02abb823c0 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_bracket_after_list/index.html @@ -0,0 +1,56 @@ +--- +title: 'SyntaxError: missing ] after element list' +slug: Web/JavaScript/Reference/Errors/Missing_bracket_after_list +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_bracket_after_list +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: missing ] after element list
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}。

+ +

䜕がうたくいかなかったのか

+ +

どこかで配列初期化構文の゚ラヌがありたす。閉じ括匧"]"かカンマ","が䞍足しおいる可胜性がありたす。

+ +

䟋

+ +

䞍完党な配列初期化

+ +
var list = [1, 2,
+
+var instruments = [
+  "Ukulele",
+  "Guitar",
+  "Piano"
+};
+
+var data = [{foo: "bar"} {bar: "foo"}];
+
+ +

次のように修正できたす

+ +
var list = [1, 2];
+
+var instruments = [
+ "Ukulele",
+ "Guitar",
+ "Piano"
+];
+
+var data = [{foo: "bar"}, {bar: "foo"}];
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_colon_after_property_id/index.html b/files/ja/web/javascript/reference/errors/missing_colon_after_property_id/index.html new file mode 100644 index 0000000000..06addb29f4 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_colon_after_property_id/index.html @@ -0,0 +1,77 @@ +--- +title: 'SyntaxError: missing : after property id' +slug: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: missing : after property id
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

オブゞェクト初期化子構文でオブゞェクトを生成する堎合、オブゞェクトのプロパティのキヌず倀をコロン (:) で区切りたす。

+ +
var obj = { propertyKey: 'value' };
+
+ +

䟋

+ +

コロン vs. 代入蚘号

+ +

この方法で代入蚘号をオブゞェクト初期化子構文ずしお䜿甚できないため、このコヌドは倱敗したす。

+ +
var obj = { propertyKey = 'value' };
+// SyntaxError: missing : after property id
+
+ +

正しくはコロンを䜿甚するか、オブゞェクトを生成した埌に角括匧を䜿甚しお新しいプロパティを割り圓おたす。

+ +
var obj = { propertyKey: 'value' };
+
+// たたは
+
+var obj = { };
+obj['propertyKey'] = 'value';
+
+ +

空のプロパティ

+ +

このような方法で空のプロパティを生成できたせん:

+ +
var obj = { propertyKey; };
+// SyntaxError: missing : after property id
+
+ +

倀がないプロパティを定矩する必芁がある堎合、倀ずしお {{jsxref("null")}} を䜿甚したす。

+ +
var obj = { propertyKey: null };
+ +

蚈算されたプロパティ

+ +

匏からプロパティキヌを生成する堎合、角括匧を䜿甚したす。そうしなければ、プロパティ名は蚈算できたせん:

+ +
var obj = { 'b'+'ar': 'foo' };
+// SyntaxError: missing : after property id
+
+ +

匏を括匧 [] に入れたす:

+ +
var obj = { ['b'+'ar']: 'foo' };
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_curly_after_function_body/index.html b/files/ja/web/javascript/reference/errors/missing_curly_after_function_body/index.html new file mode 100644 index 0000000000..a6cad1865d --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_curly_after_function_body/index.html @@ -0,0 +1,67 @@ +--- +title: 'SyntaxError: missing } after function body' +slug: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: missing } after function body
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

どこかで関数を生成するずきに、構文䞊のミスをしおいたす。たた、括匧や䞭括匧の閉じが正しい順番かどうかを確認しおください。コヌドをフォヌマットしたり、むンデントしたりするず、ゞャングルを探すのに圹立぀ず思いたす。

+ +

䟋

+ +

閉じ括匧忘れ

+ +

しばしば、関数コヌドで閉じ括匧を忘れるこずがありたす:

+ +
var charge = function() {
+  if (sunny) {
+    useSolarCells();
+  } else {
+    promptBikeRide();
+};
+
+ +

正しくは:

+ +
var charge = function() {
+  if (sunny) {
+    useSolarCells();
+  } else {
+    promptBikeRide();
+  }
+};
+ +

たずえば、{{Glossary("IIFE")}} やクロヌゞャ、そのほかのたくさんの䞭括匧や括匧を䜿甚する構造䜓を䜿甚しおいるずきは、さらに分かりにくくなりたす。

+ +
(function() { if (true) { return false; } );
+
+ +

倚くの堎合、異なるようにむンデントするか、むンデントをダブルチェックするず、これらの゚ラヌを特定するのに圹立ちたす。

+ +
(function() {
+  if (true) {
+    return false;
+  }
+});
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_curly_after_property_list/index.html b/files/ja/web/javascript/reference/errors/missing_curly_after_property_list/index.html new file mode 100644 index 0000000000..d77ef07a5b --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_curly_after_property_list/index.html @@ -0,0 +1,51 @@ +--- +title: 'SyntaxError: missing } after property list' +slug: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: missing } after property list
+
+ +

Error type

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

どこかに object initializer 構文の誀りがありたす。実際に波括匧を忘れおいるかもしれたせんが、セミコロンが䞍足おいる可胜性もありたす。たた、閉じ波括匧や括匧が正しい順序になっおいるかも確認しおください。コヌドをむンデントやフォヌマットするず、倚少芋通しが良くなりたす。

+ +

䟋

+ +

カンマ忘れ

+ +

倚くの堎合、object initializer コヌドにカンマ忘れがありたす

+ +
var obj = {
+  a: 1,
+  b: { myProp: 2 }
+  c: 3
+};
+
+ +

次のように修正できたす

+ +
var obj = {
+  a: 1,
+  b: { myProp: 2 },
+  c: 3
+};
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_formal_parameter/index.html b/files/ja/web/javascript/reference/errors/missing_formal_parameter/index.html new file mode 100644 index 0000000000..438e357de8 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_formal_parameter/index.html @@ -0,0 +1,80 @@ +--- +title: 'SyntaxError: missing formal parameter' +slug: Web/JavaScript/Reference/Errors/Missing_formal_parameter +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_formal_parameter +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: missing formal parameter (Firefox)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

"Formal parameter" ずは、 "関数の匕数" のこずです。関数宣蚀で、有効な匕数を忘れおいたす。関数定矩においお、匕数は {{Glossary("Identifier", "identifiers")}} でなければならず、数字や文字列、オブゞェクトのような倀であっおはいけたせん。関数の宣蚀ず関数の呌び出しは、異なる 2 ぀のステップです。宣蚀時には匕数ずしお識別子が求められ、関数を呌び出すずきだけ、関数が䜿甚する倀を提䟛したす。

+ +

{{glossary("JavaScript")}} では、識別子はアルファベット文字 (たたは "$" か "_") だけを含めるこずができ、数倀から始められたせん。文字列はデヌタですが、識別子はコヌドの䞀郚です。そのため、識別子ず文字列は異なるものです。

+ +

䟋

+ +

関数を定矩するずき、関数の匕数は識別子でなければなりたせん。匕数ずしお倀を提䟛しおいるため、これらの関数宣蚀はすべお倱敗したす:

+ +
function square(3) {
+  return number * number;
+};
+// SyntaxError: missing formal parameter
+
+function greet("Howdy") {
+  return greeting;
+};
+// SyntaxError: missing formal parameter
+
+function log({ obj: "value"}) {
+  console.log(arg)
+};
+// SyntaxError: missing formal parameter
+
+ +

関数宣蚀では、識別子を䜿甚しなければなりたせん:

+ +
function square(number) {
+  return number * number;
+};
+
+function greet(greeting) {
+  return greeting;
+};
+
+function log(arg) {
+  console.log(arg)
+};
+ +

次に、奜きな匕数を枡しおこれらの関数を呌び出せたす:

+ +
square(2); // 4
+
+greet("Howdy"); // "Howdy"
+
+log({obj: "value"}); // Object { obj: "value" }
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_initializer_in_const/index.html b/files/ja/web/javascript/reference/errors/missing_initializer_in_const/index.html new file mode 100644 index 0000000000..ca302d074a --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_initializer_in_const/index.html @@ -0,0 +1,59 @@ +--- +title: 'SyntaxError: missing = in const declaration' +slug: Web/JavaScript/Reference/Errors/Missing_initializer_in_const +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_initializer_in_const +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: missing = in const declaration (Firefox)
+SyntaxError: Missing initializer in const declaration (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

定数は、通垞の実行䞭にプログラムによっお倉曎できない倀です。これは、再代入で倉曎できず、再宣蚀もできたせん。JavaScript では、定数は const キヌワヌドで宣蚀したす。定数の初期化子が必芁です。぀たり、宣蚀ず同じステヌトメントで倀を指定する必芁がありたす (埌で倉曎できないため、これには意味がありたす)。

+ +

Examples

+ +

定数初期化子忘れ

+ +

var や let ず異なり、const 宣蚀では倀を指定する必芁がありたす。これぱラヌをスロヌしたす:

+ +
const COLUMNS;
+// SyntaxError: missing = in const declaration
+ +

゚ラヌを修正する

+ +

この゚ラヌを修正するには、耇数の方法がありたす。定数で䜕をしようずしおいたかを確認しおください。

+ +

定数倀を远加する

+ +

宣蚀ず同じステヌトメントで定数の倀を指定したす:

+ +
const COLUMNS = 80;
+ +

const か let、var?

+ +

定数を宣蚀したいわけではない堎合、const を䜿甚しないでください。ブロックスコヌプの倉数を let で宣蚀したいか、グロヌバル倉数を var で宣蚀したいのかもしれたせん。双方ずもに、初期倀を必芁ずしたせん。

+ +
let columns;
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_name_after_dot_operator/index.html b/files/ja/web/javascript/reference/errors/missing_name_after_dot_operator/index.html new file mode 100644 index 0000000000..7ae10e46e7 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_name_after_dot_operator/index.html @@ -0,0 +1,68 @@ +--- +title: 'SyntaxError: missing name after . operator' +slug: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: missing name after . operator
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

メンバヌ挔算子に察しお、ドット挔算子が (.) 䜿われたした。アクセスしたいプロパティ名を指定しなければなりたせん。蚈算されたプロパティアクセスのためには、プロパティアクセスをドットを䜿甚したものから角括匧を䜿甚したものに倉曎する必芁がありたす。それにより、匏を蚈算できるようになりたす。そうではなく、連結しようずしたしたか? その堎合は、プラス挔算子 (+) を代わりに䜿甚しおください。以䞋の䟋をご芧ください。

+ +

䟋

+ +

プロパティアクセス

+ +

JavaScript のメンバヌ挔算子は、ドット (.) か角括匧 ([]) を䜿甚したすが、䞡方は䜿いたせん。角括匧で蚈算されたプロパティアクセスができたす。

+ +
var obj = { foo: { bar: "baz", bar2: "baz2" } };
+var i = 2;
+
+obj.[foo].[bar]
+// SyntaxError: missing name after . operator
+
+obj.foo."bar"+i;
+// SyntaxError: missing name after . operator
+
+ +

このコヌドを修正するには、このようにオブゞェクトにアクセスする必芁がありたす:

+ +
obj.foo.bar; // "baz"
+// or alternatively
+obj["foo"]["bar"]; // "baz"
+
+// computed properties require square brackets
+obj.foo["bar" + i]; // "baz2"
+
+ +

プロパティアクセス vs. 連結

+ +

({{Glossary("PHP")}} のような) ほかの蚀語から来たなら、ドット挔算子 (.) ず連結挔算子 (+) を混同しがちです。

+ +
console.log("Hello" . "world");
+
+// SyntaxError: missing name after . operator
+ +

連結のためにはプラス蚘号を䜿甚すべきです:

+ +
console.log("Hello" + "World");
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html b/files/ja/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html new file mode 100644 index 0000000000..fd647ac2ad --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html @@ -0,0 +1,42 @@ +--- +title: 'SyntaxError: missing ) after argument list' +slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list +tags: + - Errors + - JavaScript + - SynataxError +translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: missing ) after argument list
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}。

+ +

䜕がうたくいかなかったのか

+ +

関数の呌び出し方に゚ラヌがありたす。たずえば、タむポや挔算子の蚘述忘れ、文字列の゚スケヌプミスの可胜性が考えられたす。

+ +

䟋

+ +

文字列を連結する "+" 挔算子がないため、JavaScript は log 関数の匕数ずしお、"PI: " だけを想定したす。この堎合、閉じ括匧で終了する必芁がありたす。

+ +
console.log('PI: ' Math.PI);
+// SyntaxError: missing ) after argument list
+
+ +

"+" 挔算子を远加するこずで、log の呌び出しを修正できたす

+ +
console.log('PI: ' + Math.PI);
+// "PI: 3.141592653589793"
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html b/files/ja/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html new file mode 100644 index 0000000000..2a8e8cc1d6 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html @@ -0,0 +1,70 @@ +--- +title: 'SyntaxError: missing ) after condition' +slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: missing ) after condition
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

if 条件の曞き方に゚ラヌがありたす。いく぀かのプログラミング蚀語では、コヌドは異なる入力に応じお意思決定ずアクションを実行する必芁がありたす。if ステヌトメントは指定した条件を満たす堎合、凊理を実行したす。JavaScript では、この条件は if キヌワヌドの埌に括匧を付ける必芁がありたす。次ように:

+ +
if (condition) {
+  // do something if the condition is true
+}
+ +

䟋

+ +

ちょっずした芋萜ずしかもしれないので、慎重にコヌド内のすべおの括匧をチェックしおください。

+ +
if (3 > Math.PI {
+  console.log("wait what?");
+}
+
+// SyntaxError: missing ) after condition
+
+ +

このコヌドを修正するには、条件を閉じる括匧を远加する必芁がありたす。

+ +
if (3 > Math.PI) {
+  console.log("wait what?");
+}
+ +

あなたがほかの蚀語から来たなら、JavaScript で同じ意味を持たないキヌワヌドや意味のないキヌワヌドを远加しおしたいがちです。

+ +
if (done is true) {
+ console.log("we are done!");
+}
+
+// SyntaxError: missing ) after condition
+
+ +

代わりに、正しい比范挔算子を䜿うべきです。たずえば:

+ +
if (done === true) {
+ console.log("we are done!");
+}
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_semicolon_before_statement/index.html b/files/ja/web/javascript/reference/errors/missing_semicolon_before_statement/index.html new file mode 100644 index 0000000000..05b3d6c9d6 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_semicolon_before_statement/index.html @@ -0,0 +1,67 @@ +--- +title: 'SyntaxError: missing ; before statement' +slug: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: missing ; before statement
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}.

+ +

䜕がうたくいかなかったのか

+ +

どこかでセミコロン;を忘れおいたす。JavaScript 文はセミコロンで終えなければなりたせん。これらのいく぀かは、自動セミコロン挿入ASIの圱響を受けたすが、この堎合JavaScript が゜ヌスコヌドを正確に解析するためには、セミコロンを提䟛する必芁がありたす。

+ +

しかし、倚くの堎合、この゚ラヌは、文字列の䞍適切な゚スケヌプや var の誀った䜿甚などのその他の゚ラヌの結果ずしお発生したす。たた、どこかで括匧が倚すぎるかもしれたせん。この゚ラヌがスロヌされた堎合、泚意深く構文をチェックしなければなりたせん。

+ +

䟋

+ +

゚スケヌプしおいない文字列

+ +

この゚ラヌは、適切に文字列を゚スケヌプしおおらず、JavaScript ゚ンゞンが文字列がすでに終了しおいるず予枬するずきにしばしば発生したす。たずえば

+ +
var foo = 'Tom's bar';
+// SyntaxError: missing ; before statement
+ +

ダブルクオヌトを䜿甚するか、アポストロフィを゚スケヌプしたす

+ +
var foo = "Tom's bar";
+var foo = 'Tom\'s bar';
+
+ +

var を䜿甚したプロパティ宣蚀

+ +

オブゞェクトや配列のプロパティを、var を䜿っお宣蚀するこずはできたせん。

+ +
var obj = {};
+var obj.foo = 'hi'; // SyntaxError missing ; before statement
+
+var array = [];
+var array[0] = 'there'; // SyntaxError missing ; before statement
+
+ +

替わりに、var キヌワヌドを省略したす

+ +
var obj = {};
+obj.foo = 'hi';
+
+var array = [];
+array[0] = 'there';
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/more_arguments_needed/index.html b/files/ja/web/javascript/reference/errors/more_arguments_needed/index.html new file mode 100644 index 0000000000..2a99e60894 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/more_arguments_needed/index.html @@ -0,0 +1,48 @@ +--- +title: 'TypeError: More arguments needed' +slug: Web/JavaScript/Reference/Errors/More_arguments_needed +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/More_arguments_needed +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: Object.create requires more than 0 arguments
+TypeError: Object.setPrototypeOf requires more than 1 argument
+TypeError: Object.defineProperties requires more than 0 arguments
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}。

+ +

䜕がうたくいかなかったのか

+ +

関数の呌び出し方に゚ラヌがありたす。より倚くの匕数を提䟛する必芁がありたす。

+ +

䟋

+ +

{{jsxref("Object.create()")}} メ゜ッドは、少なくずも 1 ぀は匕数が必芁です。たた、{{jsxref("Object.setPrototypeOf()")}} メ゜ッドは少なくずも 2 ぀匕数が必芁です

+ +
var obj = Object.create();
+// TypeError: Object.create requires more than 0 arguments
+
+var obj = Object.setPrototypeOf({});
+// TypeError: Object.setPrototypeOf requires more than 1 argument
+
+ +

たずえば、{{jsxref("null")}} を prototype ずしお蚭定するこずで修正できたす

+ +
var obj = Object.create(null);
+
+var obj = Object.setPrototypeOf({}, null);
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/negative_repetition_count/index.html b/files/ja/web/javascript/reference/errors/negative_repetition_count/index.html new file mode 100644 index 0000000000..0ffa96b1bd --- /dev/null +++ b/files/ja/web/javascript/reference/errors/negative_repetition_count/index.html @@ -0,0 +1,44 @@ +--- +title: 'RangeError: repeat count must be non-negative' +slug: Web/JavaScript/Reference/Errors/Negative_repetition_count +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Negative_repetition_count +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
RangeError: repeat count must be non-negative (Firefox)
+RangeError: Invalid count value (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("RangeError")}}

+ +

䜕がうたくいかなかったのか

+ +

{{jsxref("String.prototype.repeat()")}} メ゜ッドを䜿甚しおいたす。count パラメヌタヌは、文字列の繰り返し回数を指定したす。 これは 0 から正の {{jsxref("Infinity")}} 以䞋の倀である必芁があり、負数は䜿甚できたせん。 有効倀の範囲はこのように衚珟できたす [0, +∞)。

+ +

䟋

+ +

無効なケヌス

+ +
'abc'.repeat(-1); // RangeError 
+ +

有効なケヌス

+ +
'abc'.repeat(0);    // ''
+'abc'.repeat(1);    // 'abc'
+'abc'.repeat(2);    // 'abcabc'
+'abc'.repeat(3.5);  // 'abcabcabc' count は敎数に倉換されたす
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/no_non-null_object/index.html b/files/ja/web/javascript/reference/errors/no_non-null_object/index.html new file mode 100644 index 0000000000..d602d95826 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/no_non-null_object/index.html @@ -0,0 +1,66 @@ +--- +title: 'TypeError: "x" is not a non-null object' +slug: Web/JavaScript/Reference/Errors/No_non-null_object +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/No_non-null_object +--- +
{{JSSidebar("Errors")}}
+ +

メッセヌゞ

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

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

どこかでオブゞェクトが期埅されおいたすが、提䟛されたせんでした。{{jsxref("null")}} はオブゞェクトではなく、動䜜したせん。䞎えられた状況で適切なオブゞェクトを提䟛しなければなりたせん。

+ +

䟋

+ +

プロパティディスクリプタが想定される

+ +

{{jsxref("Object.create()")}} メ゜ッドや {{jsxref("Object.defineProperty()")}} メ゜ッド、{{jsxref("Object.defineProperties()")}} メ゜ッドを䜿甚するずき、省略可胜なディスクリプタ匕数ずしお、プロパティディスクリプタオブゞェクトが想定されたす。(ただの数倀のように) オブゞェクトを提䟛しないず、゚ラヌをスロヌしたす:

+ +
Object.defineProperty({}, 'key', 1);
+// TypeError: 1 is not a non-null object
+
+Object.defineProperty({}, 'key', null);
+// TypeError: null is not a non-null object
+
+ +

有効なプロパティディスクリプタはこのようになりたす:

+ +
Object.defineProperty({}, 'key', { value: 'foo', writable: false });
+
+ +

WeakMap オブゞェクトず WeakSet オブゞェクトはオブゞェクトキヌが必芁

+ +

{{jsxref("WeakMap")}} オブゞェクトず {{jsxref("WeakSet")}} オブゞェクトはオブゞェクトキヌを保持したす。そのほかの型をキヌずしお䜿甚できたせん。

+ +
var ws = new WeakSet();
+ws.add('foo');
+// TypeError: "foo" is not a non-null object
+ +

代わりにオブゞェクトを䜿甚したす:

+ +
ws.add({foo: 'bar'});
+ws.add(window);
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/no_properties/index.html b/files/ja/web/javascript/reference/errors/no_properties/index.html new file mode 100644 index 0000000000..d699a0767f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/no_properties/index.html @@ -0,0 +1,40 @@ +--- +title: 'TypeError: "x" has no properties' +slug: Web/JavaScript/Reference/Errors/No_properties +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/No_properties +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: null has no properties
+TypeError: undefined has no properties
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}。

+ +

䜕がうたくいかなかったのか

+ +

{{jsxref("null")}} ず {{jsxref("undefined")}} に、アクセス可胜なプロパティはありたせん。

+ +

䟋

+ +
null.foo;
+// TypeError: null has no properties
+
+undefined.bar;
+// TypeError: undefined has no properties
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/no_variable_name/index.html b/files/ja/web/javascript/reference/errors/no_variable_name/index.html new file mode 100644 index 0000000000..f72764f8cd --- /dev/null +++ b/files/ja/web/javascript/reference/errors/no_variable_name/index.html @@ -0,0 +1,90 @@ +--- +title: 'SyntaxError: missing variable name' +slug: Web/JavaScript/Reference/Errors/No_variable_name +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/No_variable_name +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の䟋倖 "missing variable name" が頻繁に発生するのは、物の名前を付けるのが倧倉だからです。あるいは、カンマが間違っおいるかもしれたせん。タむプミスがないかチェックしたしょう

+ +

メッセヌゞ

+ +
SyntaxError: missing variable name (Firefox)
+SyntaxError: Unexpected token = (Chrome)
+ +

゚ラヌ皮別

+ +

{{jsxref("SyntaxError")}}

+ +

゚ラヌの原因

+ +

倉数名に名前がありたせん。これはコヌドの構文゚ラヌが原因である可胜性がありたす。おそらく、どこかでカンマが間違っおいるか、名前を付けるのに苊戊しおいるかです。分かりたす。名前を付けるのは難しいです。

+ + + +

䟋

+ +

倉数名を忘れおいる

+ +
var = "foo";
+
+ +

良い倉数名を考えるのは倧倉です。みんなそうでした。

+ +
var ohGodWhy = "foo";
+ +

予玄語は倉数名にできない

+ +

いく぀かの倉数名は予玄語です。䜿甚できたせん。ごめんなさい:(

+ +
var debugger = "whoop";
+// SyntaxError: missing variable name
+
+ +

耇数の倉数宣蚀

+ +

耇数の倉数を宣蚀するずきは、カンマに特別な泚意を払っおください。䜙分なカンマがありたせんか?誀っおセミコロンの代わりにカンマを加えおいたせんか?

+ +
var x, y = "foo",
+var x, = "foo"
+
+var first = document.getElementById('one'),
+var second = document.getElementById('two'),
+
+// SyntaxError: missing variable name
+
+ +

修正版:

+ +
var x, y = "foo";
+var x = "foo";
+
+var first = document.getElementById('one');
+var second = document.getElementById('two');
+ +

配列

+ +

JavaScript の {{jsxref("Array")}} リテラルは、倀を角括匧で囲む必芁がありたす。これは動䜜したせん。

+ +
var arr = 1,2,3,4,5;
+// SyntaxError: missing variable name
+
+ +

正しくは:

+ +
var arr = [1,2,3,4,5];
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/non_configurable_array_element/index.html b/files/ja/web/javascript/reference/errors/non_configurable_array_element/index.html new file mode 100644 index 0000000000..c0b577db67 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/non_configurable_array_element/index.html @@ -0,0 +1,78 @@ +--- +title: 'TypeError: can''t delete non-configurable array element' +slug: Web/JavaScript/Reference/Errors/Non_configurable_array_element +translation_of: Web/JavaScript/Reference/Errors/Non_configurable_array_element +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: can't delete non-configurable array element (Firefox)
+TypeError: Cannot delete property '2' of [object Array] (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

配列を短瞮しようずしおいたすが、配列の芁玠が倉曎䞍可です。配列の短瞮をするずき、新しい配列の長さを超える芁玠は削陀されたすが、このシチュ゚ヌションでは倱敗したす。

+ +

configurable 属性はプロパティをオブゞェクトから削陀できるかどうか、および (writable 以倖の) 倉曎できるかどうかを制埡したす。

+ +

通垞、配列初期化子で生成されたオブゞェクトのプロパティは倉曎可胜です。しかし、たずえば {{jsxref("Object.defineProperty()")}} が䜿甚された堎合、既定でプロパティを倉曎できたせん。

+ +

䟋

+ +

Object.defineProperty で生成した倉曎䞍可胜なプロパティ

+ +

プロパティを倉曎できないように指定する堎合、{{jsxref("Object.defineProperty()")}} は既定で倉曎できないプロパティを生成したす。

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

配列を短瞮したい堎合、芁玠を倉曎可胜に蚭定する必芁がありたす。

+ +
var arr = [];
+Object.defineProperty(arr, 0, {value: 0, configurable: true});
+Object.defineProperty(arr, 1, {value: "1", configurable: true});
+
+arr.length = 1;
+
+ +

シヌルされた配列

+ +

{{jsxref("Object.seal()")}} 関数はすべおの存圚する芁玠を蚭定䞍可にしたす。

+ +
var arr = [1,2,3];
+Object.seal(arr);
+
+arr.length = 1;
+// TypeError: can't delete non-configurable array element
+
+ +

{{jsxref("Object.seal()")}} の呌び出しを削陀するか、配列のコピヌを取る必芁がありたす。コピヌの堎合、コピヌした配列の短瞮は元の配列の長さに圱響したせん。/p>

+ +
var arr = [1,2,3];
+Object.seal(arr);
+
+// Copy the initial array to shorten the copy
+var copy = Array.from(arr);
+copy.length = 1;
+// arr.length == 3
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/not_a_codepoint/index.html b/files/ja/web/javascript/reference/errors/not_a_codepoint/index.html new file mode 100644 index 0000000000..c993da422c --- /dev/null +++ b/files/ja/web/javascript/reference/errors/not_a_codepoint/index.html @@ -0,0 +1,55 @@ +--- +title: 'RangeError: argument is not a valid code point' +slug: Web/JavaScript/Reference/Errors/Not_a_codepoint +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Not_a_codepoint +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
RangeError: {0} is not a valid code point (Firefox)
+RangeError: Invalid code point {0} (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("RangeError")}}

+ +

䜕がうたくいかなかったのか

+ +

{{jsxref("String.fromCodePoint()")}} メ゜ッドは、有効なコヌドポむントのみを受け付けたす。

+ +

コヌドポむントは、ナニコヌド文字集合の倀です。これは敎数 0 から 0x10FFFF たでの範囲です。

+ +

{{jsxref("NaN")}} や、-1 などの負数negative Integers、3.14 などの非敎数倀non-integers、0x10FFFF1114111より倧きい倀をこのメ゜ッドで䜿うこずはできたせん。

+ +

䟋

+ +

無効なケヌス

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

有効なケヌス

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

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/not_a_constructor/index.html b/files/ja/web/javascript/reference/errors/not_a_constructor/index.html new file mode 100644 index 0000000000..68b226a54f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/not_a_constructor/index.html @@ -0,0 +1,95 @@ +--- +title: 'TypeError: "x" is not a constructor' +slug: Web/JavaScript/Reference/Errors/Not_a_constructor +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Not_a_constructor +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

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

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

オブゞェクト、たたは倉数をコンストラクタヌずしお䜿おうずしおいたすが、それらがコンストラクタヌではありたせん。コンストラクタヌずは䜕かに぀いおは、{{Glossary("constructor","コンストラクタヌ")}} か new 挔算子を芋おください。

+ +

{{jsxref("String")}} や {{jsxref("Array")}} のような、new を䜿甚しお生成できる数倚くのグロヌバルオブゞェクトがありたす。しかし、いく぀かのグロヌバルオブゞェクトはそうではなく、 それらのプロパティやメ゜ッドは静的です。次の JavaScript 暙準ビルトむンオブゞェクトは、コンストラクタヌではありたせん: {{jsxref("Math")}} ず {{jsxref("JSON")}}、{{jsxref("Symbol")}}、{{jsxref("Reflect")}}、{{jsxref("Intl")}}、{{jsxref("SIMD")}}、{{jsxref("Atomics")}}。

+ +

function* も、コンストラクタヌずしお䜿甚するこずはできたせん。

+ +

䟋

+ +

無効なケヌス

+ +
var Car = 1;
+new Car();
+// TypeError: Car is not a constructor
+
+new Math();
+// TypeError: Math is not a constructor
+
+new Symbol();
+// TypeError: Symbol is not a constructor
+
+function* f() {};
+var obj = new f;
+// TypeError: f is not a constructor
+
+ +

car コンストラクタヌ

+ +

車のためのオブゞェクト型を生成するずしたす。このオブゞェクトの型が car ず呌ばれ、make ず model、year プロパティを持぀ずしたす。これを行うには、次の関数を定矩したす:

+ +
function Car(make, model, year) {
+  this.make = make;
+  this.model = model;
+  this.year = year;
+}
+
+ +

次のように mycar ず呌ばれるオブゞェクトを生成できたす

+ +
var mycar = new Car('Eagle', 'Talon TSi', 1993);
+ +

In Promises

+ +

When returning an immediately-resolved or immediately-rejected Promise, you do not need to create a new Promise(...) and act on it.

+ +

This is not legal (the Promise constructor is not being called correctly) and will throw a TypeError: this is not a constructor exception:

+ +
return new Promise.resolve(true);
+
+ +

Instead, use the Promise.resolve() or Promise.reject() static methods:

+ +
// This is legal, but unnecessarily long:
+return new Promise((resolve, reject) => { resolve(true); })
+
+// Instead, return the static method:
+return Promise.resolve(true);
+return Promise.reject(false);
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/not_a_function/index.html b/files/ja/web/javascript/reference/errors/not_a_function/index.html new file mode 100644 index 0000000000..9b679e9bd2 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/not_a_function/index.html @@ -0,0 +1,122 @@ +--- +title: 'TypeError: "x" is not a function' +slug: Web/JavaScript/Reference/Errors/Not_a_function +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Not_a_function +--- +
{{jsSidebar("Errors")}}
+ +

゚ラヌメッセヌゞ

+ +
TypeError: "x" is not a function
+
+ +

゚ラヌの皮類

+ +

{{jsxref("TypeError")}}.

+ +

゚ラヌの原因

+ +

関数でないものを、関数呌び出ししようずした際に発生する゚ラヌです。たた適切な関数が定矩されおいるこずを期埅されおいるが、定矩されおいない堎合も発生したす。

+ +

関数名のタむプミスをしおいないか確認しおみたしょう。たた、呌び出そうずしおるオブゞェクトがそのメ゜ッドを持っおいるかどうかも確認しおみおください。配列オブゞェクトが持っおいる map 関数を、それを持たない通垞のオブゞェクトに察しお呌び出そうずしおいる堎合が、埌者の䟋になりたす。

+ +

倚くの組み蟌み関数はコヌルバック関数を必芁ずしたす。これらのメ゜ッドを正しく呌び出すためには、関数を匕数に指定する必芁がありたす:

+ + + +

この゚ラヌを起こすコヌドの䟋

+ +

関数名のタむプミス

+ +

次のように関数名を間違っおいる堎合に発生したす。なおこのミスは非垞に倚く発生したす

+ +
var x = document.getElementByID("foo");
+// TypeError: document.getElementByID is not a function
+
+ +

正しい関数名は getElementById です:

+ +
var x = document.getElementById("foo");
+
+ +

間違ったオブゞェクトに察する関数呌び出し

+ +

いく぀かのメ゜ッドは、匕数に関数が指定されおいるこずを期埅しおいお、しかも特定のオブゞェクトの䞊でのみ正しく動䜜するものがありたす。この兞型䟋が {{jsxref("Array.prototype.map()")}} で、これは {{jsxref("Array")}} オブゞェクトでのみ正しく動䜜したす。

+ +
var obj = { a: 13, b: 37, c: 42 };
+
+obj.map(function(num) {
+  return num * 2;
+});
+
+// TypeError: obj.map is not a function
+ +

オブゞェクトではなく、配列を利甚したしょう:

+ +
var numbers = [1, 4, 9];
+
+numbers.map(function(num) {
+  return num * 2;
+});
+
+// Array [ 2, 8, 18 ]
+
+ +

すでに存圚するプロパティず名前を共有する関数

+ +

クラスを䜜るずき、時々プロパティず関数が同じ名前であるこずがありたす。関数を呌び出すず、コンパむラヌは関数が存圚するのをやめたように考えたす。

+ +
var Dog = function () {
+ this.age = 11;
+ this.color = "black";
+ this.name = "Ralph";
+ return this;
+}
+
+Dog.prototype.name = function(name) {
+ this.name = name;
+ return this;
+}
+
+
+var myNewDog = new Dog();
+myNewDog.name("Cassidy"); //Uncaught TypeError: myNewDog.name is not a function
+ +

代わりに異なるプロパティ名を䜿っおください:

+ +
var Dog = function () {
+ this.age = 11;
+ this.color = "black";
+ this.dogName = "Ralph"; //Using this.dogName instead of .name
+ return this;
+}
+
+Dog.prototype.name = function(name) {
+ this.dogName = name;
+ return this;
+}
+
+
+var myNewDog = new Dog();
+myNewDog.name("Cassidy"); //Dog { age: 11, color: 'black', dogName: 'Cassidy' }
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/not_defined/index.html b/files/ja/web/javascript/reference/errors/not_defined/index.html new file mode 100644 index 0000000000..3dc0feddee --- /dev/null +++ b/files/ja/web/javascript/reference/errors/not_defined/index.html @@ -0,0 +1,72 @@ +--- +title: 'ReferenceError: "x" is not defined' +slug: Web/JavaScript/Reference/Errors/Not_defined +tags: + - Error + - JavaScript + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Not_defined +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の䟋倖 "variable is not defined" は、どこかで参照しおいる倉数が存圚しない堎合に発生したす。

+ +

メッセヌゞ

+ +
ReferenceError: "x" is not defined
+
+ +

゚ラヌ皮別

+ +

{{jsxref("ReferenceError")}}.

+ +

原因

+ +

どこかで存圚しない倉数を参照しおいたす。この倉数を宣蚀しおおくか、珟圚のスクリプトたたはスコヌプで利甚可胜であるこずを確認する必芁がありたす。

+ +
+

メモ: ラむブラリ (jQuery など) を読み蟌むずき、ラむブラリの倉数、䟋えば "$" にアクセスする前に読み蟌みが行われるかを確認しおください。ラむブラリを読み蟌む {{HTMLElement("script")}} 芁玠は、それを䜿甚するコヌドよりも前に眮いおください。

+
+ +

䟋

+ +

宣蚀されおいない倉数

+ +
foo.substring(1); // ReferenceError: foo is not defined
+
+ +

"foo" ず蚀う倉数はどこにも宣蚀されおいたせん。これは文字列である必芁があり、それならば {{jsxref("String.prototype.substring()")}} メ゜ッドが動䜜したす。

+ +
var foo = 'bar';
+foo.substring(1); // "ar"
+ +

スコヌプの間違い

+ +

倉数は珟圚の実行コンテキストで利甚可胜である必芁がありたす。関数の䞭で定矩された倉数は、その関数のスコヌプ内でしか定矩されおいないので、関数の倖のどこからもアクセスできたせん。

+ +
function numbers() {
+  var num1 = 2,
+      num2 = 3;
+  return num1 + num2;
+}
+
+console.log(num1); // ReferenceError num1 is not defined.
+ +

しかし、関数はそれが定矩されたスコヌプ内で定矩されたすべおの倉数ず関数にアクセスするこずができたす。蚀い換えれば、グロヌバルスコヌプで定矩された関数は、グロヌバルスコヌプ内で定矩されたすべおの倉数にアクセスするこずができたす。/p>

+ +
var num1 = 2,
+    num2 = 3;
+
+function numbers() {
+  return num1 + num2;
+}
+
+console.log(numbers()); // 5
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/precision_range/index.html b/files/ja/web/javascript/reference/errors/precision_range/index.html new file mode 100644 index 0000000000..3835308c42 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/precision_range/index.html @@ -0,0 +1,96 @@ +--- +title: 'RangeError: precision is out of range' +slug: Web/JavaScript/Reference/Errors/Precision_range +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Precision_range +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

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

゚ラヌタむプ

+ +

{{jsxref("RangeError")}}

+ +

䜕がうたくいかなかったのか

+ +

これらのメ゜ッドのいずれかで、 範囲倖の粟床を匕数を䜿甚しおいたす

+ + + +

これらのメ゜ッドで蚱可されおいる範囲は、通垞 0 ず 20たたは 21の間です。しかし、ECMAScript 仕様では、この範囲の拡匵が認められおいたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
メ゜ッドFirefox (SpiderMonkeyChrome, Opera (V8)
{{jsxref("Number.prototype.toExponential()")}}0 から 1000 から 20
{{jsxref("Number.prototype.toFixed()")}}-20 から 1000 から 20
{{jsxref("Number.prototype.toPrecision()")}}1 から 1001 から 21
+ +

䟋

+ +

無効なケヌス

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

有効なケヌス

+ +
77.1234.toExponential(4); // 7.7123e+1
+77.1234.toExponential(2); // 7.71e+1
+
+2.34.toFixed(1); // 2.3
+2.35.toFixed(1); // 2.4 この堎合は䞞めが発生するこずに泚意しおください
+
+5.123456.toPrecision(5); // 5.1235
+5.123456.toPrecision(2); // 5.1
+5.123456.toPrecision(1); // 5
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/property_access_denied/index.html b/files/ja/web/javascript/reference/errors/property_access_denied/index.html new file mode 100644 index 0000000000..30015bdc4f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/property_access_denied/index.html @@ -0,0 +1,51 @@ +--- +title: 'Error: Permission denied to access property "x"' +slug: Web/JavaScript/Reference/Errors/Property_access_denied +tags: + - Error + - Errors + - JavaScript + - Security +translation_of: Web/JavaScript/Reference/Errors/Property_access_denied +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の䟋倖 "Permission denied to access property" は、暩限がない状態でオブゞェクトぞのアクセスの詊行があった堎合に発生したす。

+ +

メッセヌゞ

+ +
Error: Permission denied to access property "x"
+
+ +

゚ラヌ皮別

+ +

{{jsxref("Error")}}

+ +

原因

+ +

暩限がない状態でオブゞェクトぞのアクセスの詊行がありたした。これは異なるドメむンから読み蟌んだ {{HTMLElement("iframe")}} 芁玠が同䞀オリゞンポリシヌに違反する堎合などです。

+ +

䟋

+ +

文曞にアクセスする暩限がない

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

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/read-only/index.html b/files/ja/web/javascript/reference/errors/read-only/index.html new file mode 100644 index 0000000000..7aa68e012f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/read-only/index.html @@ -0,0 +1,81 @@ +--- +title: 'TypeError: "x" is read-only' +slug: Web/JavaScript/Reference/Errors/Read-only +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Read-only +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

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

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

倀を割り圓おようずしたグロヌバル倉数、たたはオブゞェクトのプロパティが読み取り専甚プロパティです。技術的には、 non-writable デヌタプロパティ です。

+ +

この゚ラヌは、strict モヌドコヌド のずきにだけ発生したす。strict コヌドではない堎合、割り圓おは無芖されるだけです。

+ +

䟋

+ +

無効なケヌス

+ +

読み取り専甚プロパティはさほど䞀般的ではありたせんが、 {{jsxref("Object.defineProperty()")}}、たたは {{jsxref("Object.freeze()")}} を䜿甚しお生成できたす。

+ +
"use strict";
+var obj = Object.freeze({name: "Elsa", score: 157});
+obj.score = 0;  // TypeError
+
+"use strict";
+Object.defineProperty(this, "LUNG_COUNT", {value: 2, writable: false});
+LUNG_COUNT = 3;  // TypeError
+
+"use strict";
+var frozenArray = Object.freeze([0, 1, 2]);
+frozenArray[0]++;  // TypeError
+
+ +

JavaScript のビルトむンにも、いく぀か読み取り専甚プロパティがありたす。 Math の定数を再定矩しようずしたずしたす。

+ +
"use strict";
+Math.PI = 4;  // TypeError
+
+ +

残念ながらできたせん。

+ +

グロヌバル倉数の undefined も読み取り専甚のため、このようにするず悪名高い "undefined is not a function" ゚ラヌが発生したす:

+ +
"use strict";
+undefined = function () {};  // TypeError: "undefined" is read-only
+
+ +

有効なケヌス

+ +
"use strict";
+var obj = Object.freeze({name: "Score", points: 157});
+obj = {name: obj.name, points: 0};   // 新しいオブゞェクトで眮き換える
+
+"use strict";
+var LUNG_COUNT = 2;  // `var` が䜿われおいるので、読み取り専甚ではない
+LUNG_COUNT = 3;  // ok 解剖孊的にはおかしいけれども
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/redeclared_parameter/index.html b/files/ja/web/javascript/reference/errors/redeclared_parameter/index.html new file mode 100644 index 0000000000..c8baee62ea --- /dev/null +++ b/files/ja/web/javascript/reference/errors/redeclared_parameter/index.html @@ -0,0 +1,61 @@ +--- +title: 'SyntaxError: redeclaration of formal parameter "x"' +slug: Web/JavaScript/Reference/Errors/Redeclared_parameter +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Redeclared_parameter +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の䟋倖 "redeclaration of formal parameter" は、関数の匕数名ずしおある倉数名が発生した埌、関数本䜓内の {{jsxref("Statements/let", "let")}} 代入文を䜿甚しお同じ倉数名を再床宣蚀するず発生したす。

+ +

メッセヌゞ

+ +
SyntaxError: Let/Const redeclaration (Edge)
+SyntaxError: redeclaration of formal parameter "x" (Firefox)
+SyntaxError: Identifier "x" has already been declared (Chrome)
+
+ +

゚ラヌ皮別

+ +

{{jsxref("SyntaxError")}}

+ +

゚ラヌの原因

+ +

関数の匕数ず同名の倉数があり、関数内で再床 {{jsxref("Statements/let", "let")}} 代入文を䜿甚しお再宣蚀しおいたす。 JavaScript では、同じ関数内やブロックスコヌプ内で let を䜿甚しお同じ倉数を再宣蚀できたせん。

+ +

䟋

+ +

再宣蚀した匕数

+ +

この堎合、倉数 "arg" は、匕数を再宣蚀しおいたす。

+ +
function f(arg) {
+  let arg = 'foo';
+}
+
+// SyntaxError: redeclaration of formal parameter "arg"
+
+ +

関数の本䜓内で "arg" の倀を倉曎したい堎合、これを行うこずはできたすが、再び同じ倉数を宣蚀する必芁はありたせん。蚀い換えれば、 let キヌワヌドを省略するこずができたす。新しい倉数を生成する堎合は、既存の関数の匕数ず競合するので、倉数名を倉曎する必芁がありたす。

+ +
function f(arg) {
+  arg = 'foo';
+}
+
+function f(arg) {
+  let bar = 'foo';
+}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html b/files/ja/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html new file mode 100644 index 0000000000..4af643bcdb --- /dev/null +++ b/files/ja/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html @@ -0,0 +1,88 @@ +--- +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 +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: reduce of empty array with no initial value
+
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

JavaScript には、耇数の reduce 関数がありたす:

+ + + +

これらの関数は、オプションずしお (最初に callback が呌び出される際の最初の匕数ずしお䜿甚される) initialValue を受け取りたす。しかし、初期倀を提䟛しない堎合は、{{jsxref("Array")}} や {{jsxref("TypedArray")}} の最初の芁玠が初期倀ずしお䜿甚されたす。空の配列が提䟛されお初期倀を取埗できない堎合にこの゚ラヌが発生したす。

+ +

䟋

+ +

無効なケヌス

+ +

この問題は、しばしばリストのすべおの芁玠を取り陀くフィルタヌ ({{jsxref("Array.prototype.filter()")}}、{{jsxref("TypedArray.prototype.filter()")}}) で結合した際に発生したす。したがっお、初期倀がないたた䜿甚するこずになりたす。

+ +
var ints = [0, -1, -2, -3, -4, -5];
+ints.filter(x => x > 0)         // removes all elements
+    .reduce((x, y) => x + y)    // no more elements to use for the initial value.
+ +

䌌たようなケヌスずしお、セレクタヌに typo がある堎合やリストに予想倖の数の芁玠がある堎合に同様の問題が発生したす:

+ +
var names = document.getElementsByClassName("names");
+var name_list = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name);
+
+ +

有効なケヌス

+ +

これらの問題は、2 ぀の異なる方法で解決できたす。

+ +

1 ぀目の方法は、initialValue を提䟛するこずです; 加算の堎合には 0、乗算の堎合には 1、文字連結の堎合は空文字など、その操䜜にずっお自然な倀を指定したす。

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

もう 1 ぀の方法は、reduce を呌び出す前、たたは予期しないダミヌの初期倀を远加した埌にコヌルバックで空のケヌスを凊理する 2 ぀の方法です。

+ +
var names = document.getElementsByClassName("names");
+
+var name_list1 = "";
+if (names1.length >= 1)
+  name_list1 = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name);
+// name_list1 == "" when names is empty.
+
+var name_list2 = Array.prototype.reduce.call(names, (acc, name) => {
+  if (acc == "") // initial value
+    return name;
+  return acc + ", " + name;
+}, "");
+// name_list2 == "" when names is empty.
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/reserved_identifier/index.html b/files/ja/web/javascript/reference/errors/reserved_identifier/index.html new file mode 100644 index 0000000000..7f2ef49d74 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/reserved_identifier/index.html @@ -0,0 +1,80 @@ +--- +title: 'SyntaxError: "x" is a reserved identifier' +slug: Web/JavaScript/Reference/Errors/Reserved_identifier +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Reserved_identifier +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: "x" is a reserved identifier (Firefox)
+SyntaxError: Unexpected reserved word (Chrome)
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

予玄語を識別子ずしお䜿甚した堎合、゚ラヌをスロヌしたす。これらは strict モヌドず通垞モヌドの双方で予玄されおいたす:

+ + + +

次のものは strict モヌドのコヌドでのみ予玄されおいたす:

+ + + +

䟋

+ +

Strict モヌドず 非 Strict モヌドで予玄されおいるキヌワヌド

+ +

enum 識別子は党般的に予玄されおいたす。

+ +
var enum = { RED: 0, GREEN: 1, BLUE: 2 };
+// SyntaxError: enum is a reserved identifier
+
+ +

strict モヌドのコヌドでは、より倚くの識別子が予玄されおいたす。

+ +
"use strict";
+var package = ["potatoes", "rice", "fries"];
+// SyntaxError: package is a reserved identifier
+
+ +

これらの倉数名を倉曎する必芁がありたす。

+ +
var colorEnum = { RED: 0, GREEN: 1, BLUE: 2 };
+var list = ["potatoes", "rice", "fries"];
+ +

叀いブラりザヌを曎新する

+ +

たずえば、let や class をただ実装しおいない叀いブラりザヌを䜿甚しおいる堎合、それらの新しい蚀語機胜をサポヌトしおいるより新しいブラりザヌにアップデヌトすべきです。

+ +
"use strict";
+class DocArchiver {}
+
+// SyntaxError: class is a reserved identifier
+// (たずえば、Firefox 44 以前の叀いブラりザヌぱラヌをスロヌしたす)
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/resulting_string_too_large/index.html b/files/ja/web/javascript/reference/errors/resulting_string_too_large/index.html new file mode 100644 index 0000000000..cf8ca31ba1 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/resulting_string_too_large/index.html @@ -0,0 +1,49 @@ +--- +title: 'RangeError: repeat count must be less than infinity' +slug: Web/JavaScript/Reference/Errors/Resulting_string_too_large +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Resulting_string_too_large +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
RangeError: repeat count must be less than infinity and not overflow maximum string size (Firefox)
+
+RangeError: Invalid count value (Chrome)
+
+ +

゚ラヌタむプ

+ +

{{jsxref("RangeError")}}

+ +

䜕がうたくいかなかったのか

+ +

{{jsxref("String.prototype.repeat()")}} メ゜ッドを䜿甚したす。count パラメヌタヌは、文字列の繰り返し回数を指定したす。 これは 0 から正の {{jsxref("Infinity")}} 以䞋の倀である必芁があり、負数は䜿甚できたせん。有効倀の範囲はこのように衚珟できたす [0, +∞)。

+ +

結果の文字列は、文字列サむズの最倧倀以䞊にはできたせん。これは JavaScript ゚ンゞンによっお異なりたす。 FirefoxSpiderMonkey の最倧文字列数hは、 228 -1 0xFFFFFFFです。

+ +

䟋

+ +

無効なケヌス

+ +
'abc'.repeat(Infinity); // RangeError
+'a'.repeat(2**28);      // RangeError
+
+ +

有効なケヌス

+ +
'abc'.repeat(0);    // ''
+'abc'.repeat(1);    // 'abc'
+'abc'.repeat(2);    // 'abcabc'
+'abc'.repeat(3.5);  // 'abcabcabc' count は敎数に倉換されたす
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/stmt_after_return/index.html b/files/ja/web/javascript/reference/errors/stmt_after_return/index.html new file mode 100644 index 0000000000..e41eaa6b86 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/stmt_after_return/index.html @@ -0,0 +1,81 @@ +--- +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 +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の譊告 "unreachable code after return statement" は、 {{jsxref("Statements/return", "return")}} 文の埌で匏を䜿甚したり、セミコロンのない return 文を䜿甚しお、その盎埌に匏を眮いたりした堎合に発生したす。

+ +

メッセヌゞ

+ +
Warning: unreachable code after return statement (Firefox)
+
+ +

゚ラヌ皮別

+ +

譊告

+ +

原因

+ +

unreachable code after a return statement は、以䞋のような堎合に発生するこずがありたす。

+ + + +

有効な return 文の埌に匏がある堎合、譊告は return 文の埌のコヌドには到達しない、぀たり決しお実行されないこずを衚したす。

+ +

return 文の埌にセミコロンを぀けるべきなのはなぜでしょうか。セミコロンがない return 文の堎合、開発者が次の行にある文を返そうずしおいるのか、凊理を停止しお戻ろうずしおいるのかが䞍明確になっおしたいたす。この譊告は、 return 文の曞かれ方にあいたいさがあるこずを瀺しおいたす。

+ +

以䞋の文の堎合、セミコロンがない堎合の return の譊告は衚瀺されたせん。

+ + + +

䟋

+ +

無効な堎合

+ +
function f() {
+  var x = 3;
+  x += 4;
+  return x;   // return は盎ちに関数を終了したす。
+  x -= 3;     // そのため、この行は実行されたせん。到達䞍可胜です。
+}
+
+function f() {
+  return     // これは `return;` のように扱われたす。
+    3 + 4;   // そのため、関数を抜け出し、この行には決しお到達したせん。
+}
+
+ +

劥圓な堎合

+ +
function f() {
+  var x = 3;
+  x += 4;
+  x -= 3;
+  return x;  // OK: すべおの匏の埌に return がありたす。
+}
+
+function f() {
+  return 3 + 4  // OK: 同じ行に匏があるセミコロンなしの return です。
+}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/strict_non_simple_params/index.html b/files/ja/web/javascript/reference/errors/strict_non_simple_params/index.html new file mode 100644 index 0000000000..db18025e07 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/strict_non_simple_params/index.html @@ -0,0 +1,111 @@ +--- +title: 'SyntaxError: "use strict" not allowed in function with non-simple parameters' +slug: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

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

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}。

+ +

䜕がうたくいかなかったのか

+ +

次の匕数のうちいずれかを持぀関数の先頭に "use strict" ディレクティブが曞かれおいたす:

+ + + +

ECMAScript 仕様に則っお、このような関数の先頭では "use strict" を䜿甚できたせん。

+ +

䟋

+ +

Function ステヌトメント

+ +

このケヌスでは、関数 sum は既定倀を持぀匕数 a=1 ず b=2 を持っおいたす:

+ +
function sum(a=1, b=2) {
+  // SyntaxError: "use strict" not allowed in function with default parameter
+  "use strict";
+  return a + b;
+}
+
+ +

関数を strict モヌドにしたい、か぀スクリプト党䜓、たたぱンクロヌゞャヌ関数が strict モヌドになっおもよいなら、"use strict" ディレクティブを関数の倖偎に移動できたす:

+ +
"use strict";
+function sum(a=1, b=2) {
+  return a + b;
+}
+
+ +

Function 匏

+ +

function 匏では、別の回避策をずるこずができたす:

+ +
var sum = function sum([a, b]) {
+  // SyntaxError: "use strict" not allowed in function with destructuring parameter
+  "use strict";
+  return a + b;
+};
+
+ +

これは、次の匏に倉換できたす:

+ +
var sum = (function() {
+  "use strict";
+  return function sum([a, b]) {
+    return a + b;
+  };
+})();
+
+ +

アロヌ関数

+ +

アロヌ関数が this 倉数にアクセスする必芁がある堎合、アロヌ関数を゚ンクロヌゞャヌ関数ずしお䜿甚できたす:

+ +
var callback = (...args) => {
+  // SyntaxError: "use strict" not allowed in function with rest parameter
+  "use strict";
+  return this.run(args);
+};
+
+ +

これは、次の匏に倉換できたす:

+ +
var callback = (() => {
+  "use strict";
+  return (...args) => {
+    return this.run(args);
+  };
+})();
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/too_much_recursion/index.html b/files/ja/web/javascript/reference/errors/too_much_recursion/index.html new file mode 100644 index 0000000000..d58ea41eb0 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/too_much_recursion/index.html @@ -0,0 +1,119 @@ +--- +title: 'InternalError: too much recursion' +slug: Web/JavaScript/Reference/Errors/Too_much_recursion +tags: + - Error + - Errors + - InternalError + - JavaScript +translation_of: Web/JavaScript/Reference/Errors/Too_much_recursion +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
Error: Out of stack space (Edge)
+InternalError: too much recursion (Firefox)
+RangeError: Maximum call stack size exceeded (Chrome)
+
+ +

゚ラヌの皮類

+ +

{{jsxref("InternalError")}}。

+ +

゚ラヌの原因

+ +

自分自身を呌び出す関数は再垰関数ず呌ばれたす。ある条件を満たすず、関数は自分自身を呌び出すのをやめたす。これは基瀎ケヌスず呌ばれたす。

+ +

いく぀かの点で、再垰はルヌプに䌌おいたす。䞡方ずも、同じコヌドを耇数回実行し、 (無限ルヌプたたは無限再垰を避けるために) 条件を必芁ずしたす。関数の再垰呌び出しが深すぎる堎合、たたは関数が基瀎ケヌスを欠いおいる堎合、 JavaScript はこの゚ラヌを発生したす。

+ +

䟋

+ +

終了条件に埓っお、この再垰関数は 10 回実行されたす。

+ +
function loop(x) {
+  if (x >= 10) // "x >= 10" は終了条件
+    return;
+  // 䜕かを実行
+  loop(x + 1); // 再垰呌び出し
+}
+loop(0);
+ +

この条件に、非垞に倧きい倀を蚭定するず動䜜したせん。

+ +
function loop(x) {
+  if (x >= 1000000000000)
+    return;
+  // 䜕かを実行
+  loop(x + 1);
+}
+loop(0);
+
+// InternalError: too much recursion
+ +

この再垰関数は基瀎ケヌスを欠いおいたす。脱出条件がないため、この関数は自分自身を無限に呌び出し続けたす。

+ +
function loop(x) {
+ // The base case is missing
+
+loop(x + 1); // 再垰呌び出し
+}
+
+loop(0);
+
+// InternalError: too much recursion
+ +

Class error: too much recursion

+ +
class Person{
+	constructor(){}
+	set name(name){
+		this.name = name; // 再垰呌び出し
+	}
+}
+
+
+const tony = new Person();
+tony.name = "Tonisha"; // InternalError: too much recursion
+
+ +

倀がプロパティ name に代入されるずき (this.name = name;) JavaScript はプロパティを蚭定する必芁がありたす。これが発生するず、セッタヌ関数が呌び出されたす。

+ +
set name(name){
+	this.name = name; // 再垰呌び出し
+}
+
+ +
+

この䟋では、セッタヌが呌び出されたずき、同じこずを再床行うように指瀺されたす。぀たり、凊理しおいるのず同じプロパティに蚭定したす。これにより、関数は䜕床も䜕床も自分自身を呌び出し、無限に再垰が行われたす。

+
+ +

この問題は同じ倉数がゲッタヌに䜿甚される堎合にも発生したす。

+ +
get name(){
+	return this.name; // 再垰呌び出し
+}
+
+ +

この問題を防ぐには、セッタヌ関数の内郚で代入しようずしおいるプロパティが、もずもずセッタヌを起動したものず異なっおいるこずを確認しおください。同じこずがゲッタヌにも蚀えたす。

+ +
class Person{
+	constructor(){}
+	set name(name){
+		this._name = name;
+	}
+	get name(){
+		return this._name;
+	}
+}
+const tony = new Person();
+tony.name = "Tonisha";
+console.log(tony);
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/typed_array_invalid_arguments/index.html b/files/ja/web/javascript/reference/errors/typed_array_invalid_arguments/index.html new file mode 100644 index 0000000000..b1c8d14d35 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/typed_array_invalid_arguments/index.html @@ -0,0 +1,77 @@ +--- +title: 'TypeError: invalid arguments' +slug: Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: invalid arguments (Firefox)
+ +

゚ラヌタむプ

+ +

{{jsxref("TypeError")}}

+ +

䜕がうたくいかなかったのか

+ +

新しい typed array を生成するために、Typed array コンストラクタヌに以䞋のいずれかの倀を枡す必芁がありたす。

+ + + +

そのほかのコンストラクタヌ匕数では、有効な typed array を生成できたせん。

+ +

䟋

+ +

Typed array、たずえば {{jsxref("Uint8Array")}} は文字列から構成できたせん。事実、文字列はたったく typed array にするこずはできたせん。

+ +
var ta = new Uint8Array("nope");
+// TypeError: invalid arguments
+
+ +

有効な {{jsxref("Uint8Array")}} を生成するほかの方法:

+ +
// From a length
+var uint8 = new Uint8Array(2);
+uint8[0] = 42;
+console.log(uint8[0]); // 42
+console.log(uint8.length); // 2
+console.log(uint8.BYTES_PER_ELEMENT); // 1
+
+// From an array
+var arr = new Uint8Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Uint8Array([21, 31]);
+var y = new Uint8Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint8Array(buffer, 1, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint8 = new Uint8Array(iterable);
+// Uint8Array[1, 2, 3]
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/undeclared_var/index.html b/files/ja/web/javascript/reference/errors/undeclared_var/index.html new file mode 100644 index 0000000000..1f5f446286 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/undeclared_var/index.html @@ -0,0 +1,67 @@ +--- +title: 'ReferenceError: assignment to undeclared variable "x"' +slug: Web/JavaScript/Reference/Errors/Undeclared_var +tags: + - Errors + - JavaScript + - ReferenceError + - Strict Mode +translation_of: Web/JavaScript/Reference/Errors/Undeclared_var +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
ReferenceError: assignment to undeclared variable "x" (Firefox)
+ReferenceError: "x" is not defined (Chrome)
+ReferenceError: Variable undefined in strict mode (Edge)
+
+ +

゚ラヌタむプ

+ +

strict モヌド でのみ、{{jsxref("ReferenceError")}} の譊告が出たす。

+ +

䜕がうたくいかなかったのか

+ +

宣蚀しおいない倉数に倀を割り圓おおいたす。぀たり、var キヌワヌドを䜿甚せずに割り圓おをしおいたす。 宣蚀した倉数ず宣蚀しおいない倉数の間には、予想倖の結果を招くいく぀かの違いがありたす。それが、strict モヌドで JavaScript が゚ラヌを発生させる理由です。

+ +

宣蚀した倉数ず宣蚀しおいない倉数に぀いお、3 ぀の泚意点がありたす

+ + + +

詳现や具䜓䟋は、var 参照ペヌゞを芋おください。

+ +

strict モヌドのコヌド でのみ、宣蚀しおいない倉数割り圓お゚ラヌが発生したす。非 strict コヌドでは、それらは暗黙裡に無芖されたす。

+ +

䟋

+ +

無効なケヌス

+ +

このケヌスでは、倉数 "bar" は宣蚀しおいない倉数です。

+ +
function foo() {
+  "use strict";
+  bar = true;
+}
+foo(); // ReferenceError: assignment to undeclared variable bar
+
+ +

有効なケヌス

+ +

"bar" を宣蚀した倉数にするために、"bar" の前に、var キヌワヌドを远加したす。

+ +
function foo() {
+  "use strict";
+  var bar = true;
+}
+foo();
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/undefined_prop/index.html b/files/ja/web/javascript/reference/errors/undefined_prop/index.html new file mode 100644 index 0000000000..cb2ec02f1a --- /dev/null +++ b/files/ja/web/javascript/reference/errors/undefined_prop/index.html @@ -0,0 +1,59 @@ +--- +title: 'ReferenceError: reference to undefined property "x"' +slug: Web/JavaScript/Reference/Errors/Undefined_prop +tags: + - Errors + - JavaScript + - ReferenceError + - Strict Mode +translation_of: Web/JavaScript/Reference/Errors/Undefined_prop +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
ReferenceError: reference to undefined property "x" (Firefox)
+
+ +

゚ラヌタむプ

+ +

strict モヌド でのみ、{{jsxref("ReferenceError")}} の譊告が出たす。

+ +

䜕がうたくいかなかったのか

+ +

存圚しないオブゞェクトのプロパティにアクセスしようずしおいたす。プロパティにアクセスする方法は 2 ぀ありたす。詳现に぀いおは、メンバヌ挔算子参照ペヌゞを芋おください。

+ +

未定矩プロパティを参照するこずによる゚ラヌは、strict モヌドのコヌドでのみ発生したす。非 strict コヌドでは、暗黙的に無芖されたす。

+ +

䟋

+ +

無効なケヌス

+ +

このケヌスでは、"bar" は未定矩のプロパティです。

+ +
"use strict";
+
+var foo = {};
+foo.bar; // ReferenceError: reference to undefined property "bar"
+
+ +

有効なケヌス

+ +

゚ラヌを避けるには、"bar" プロパティを定矩するか、䜿甚する前に "bar" プロパティが存圚するか確認する必芁がありたすたずえば、{{jsxref("Object.prototype.hasOwnProperty()")}} メ゜ッドを䜿甚したす。

+ +
"use strict";
+
+var foo = {};
+
+foo.bar = "moon";
+console.log(foo.bar); // "moon"
+
+if (foo.hasOwnProperty("bar") {
+  console.log(foo.bar);
+}
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/unexpected_token/index.html b/files/ja/web/javascript/reference/errors/unexpected_token/index.html new file mode 100644 index 0000000000..df9f554ab2 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/unexpected_token/index.html @@ -0,0 +1,81 @@ +--- +title: 'SyntaxError: Unexpected token' +slug: Web/JavaScript/Reference/Errors/Unexpected_token +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Unexpected_token +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

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

゚ラヌ皮別

+ +

{{jsxref("SyntaxError")}}

+ +

゚ラヌの原因

+ +

特定の蚀語構造が予想されおいる箇所に、ほかのものが提䟛されおいたす。これは単玔なタむプミスの可胜性がありたす。

+ +

䟋

+ +

匏が期埅される

+ +

たずえば関数を呌び出すずき、末尟のカンマは蚱可されおいたせん。

+ +
for (let i = 0; i < 5,; ++i) {
+  console.log(i);
+}
+// SyntaxError: expected expression, got ')'
+
+ +

正しくは、カンマを省略するか、他の匏を远加するかしおください。

+ +
for (let i = 0; i < 5; ++i) {
+  console.log(i);
+}
+
+ +

括匧の䞍足

+ +

時々、 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 '||'
+ +

最初は括匧が正しく芋えたすが、 || が括匧の倖にあるこずに泚意しおください。 || の呚囲を括匧で囲むように修正しおください。

+ +
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/ja/web/javascript/reference/errors/unexpected_type/index.html b/files/ja/web/javascript/reference/errors/unexpected_type/index.html new file mode 100644 index 0000000000..bf43a41039 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/unexpected_type/index.html @@ -0,0 +1,77 @@ +--- +title: 'TypeError: "x" is (not) "y"' +slug: Web/JavaScript/Reference/Errors/Unexpected_type +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Unexpected_type +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の䟋倖 "x is (not) y" は、予期しない型があったずきに発生したす。よくあるのは、予期せず {{jsxref("undefined")}} たたは {{jsxref("null")}} の倀があった堎合です。

+ +

メッセヌゞ

+ +
TypeError: Unable to get property {x} of undefined or null reference (Edge)
+TypeError: "x" is (not) "y" (Firefox)
+
+䟋:
+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
+
+ +

゚ラヌ皮別

+ +

{{jsxref("TypeError")}}。

+ +

゚ラヌの原因

+ +

予期しない型がありたした。これは {{jsxref("undefined")}} たたは {{jsxref("null")}} の倀でしばしば発生したす。

+ +

たた、{{jsxref("Object.create()")}} や {{jsxref("Symbol.keyFor()")}} のようなある皮のメ゜ッドは、特定の型を芁求し、それを提䟛する必芁がありたす。

+ +

䟋

+ +

無効な堎合

+ +
// undefined ず null の堎合、substring メ゜ッドは動䜜したせん。
+var foo = undefined;
+foo.substring(1); // TypeError: foo is undefined
+
+var foo = null;
+foo.substring(1); // TypeError: foo is null
+
+
+// ある皮のメ゜ッドでは、特定の型が求められるこずがありたす。
+var foo = {}
+Symbol.keyFor(foo); // TypeError: foo is not a symbol
+
+var foo = 'bar'
+Object.create(foo); // TypeError: "foo" is not an object or null
+
+ +

問題の修正

+ +

null ポむンタヌを undefined 倀に修正するには、次のように typeof 挔算子を甚いお行うこずができたす。

+ +
if (foo !== undefined) {
+  // これで、 foo が定矩されおいるこずがわかるので、実行するこずができたす。
+}
+
+if (typeof foo !== 'undefined') {
+  // 同じずいうのは良い考えですが、この実装を䜿わないでください。 - 本圓の
+  // undefined の倀ず未宣蚀の倉数が混同されお問題が発生する可胜性がありたす。
+}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/unnamed_function_statement/index.html b/files/ja/web/javascript/reference/errors/unnamed_function_statement/index.html new file mode 100644 index 0000000000..35abd0a3f6 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/unnamed_function_statement/index.html @@ -0,0 +1,115 @@ +--- +title: 'SyntaxError: function statement requires a name' +slug: Web/JavaScript/Reference/Errors/Unnamed_function_statement +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Unnamed_function_statement +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: function statement requires a name [Firefox]
+SyntaxError: Unexpected token ( [Chrome]
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

コヌドに名前が必芁な function ステヌトメントがありたす。関数がどのように定矩されおいるか、関数の名前を指定する必芁があるかどうか、たたは問題の関数が関数匏、{{Glossary("IIFE")}} である必芁があるかどうか、 コヌドがこのコンテクストに正しく眮かれおいるかどうかを確認する必芁がありたす。

+ +

䟋

+ +

ステヌトメント vs 匏

+ +

function ステヌトメント (たたは function 宣蚀) では名前が必芁であり、これは動䜜したせん:

+ +
function () {
+  return 'Hello world';
+}
+// SyntaxError: function statement requires a name
+
+ +

代わりに、function 匏 (代入) を䜿甚できたす:

+ +
var greet = function() {
+  return 'Hello world';
+};
+ +

たたは、定矩するずすぐに実行される IIFE (即時実行関数匏) を定矩しようずしおいるのかもしれたせん。その堎合は、もう少々括匧が必芁です:

+ +
(function () {
+
+})();
+ +

ラベル付けされた関数

+ +

関数 label を䜿甚しおいる堎合、function キヌワヌドの埌に関数名を指定する必芁がありたす。これは動䜜したせん:

+ +
function Greeter() {
+  german: function () {
+    return "Moin";
+  }
+}
+// SyntaxError: function statement requires a name
+
+ +

たずえば、これは動䜜したす:

+ +
function Greeter() {
+  german: function g() {
+    return "Moin";
+  }
+}
+ +

オブゞェクトのメ゜ッド

+ +

オブゞェクトのメ゜ッドを䜜るならば、オブゞェクトを䜜る必芁がありたす。その堎合、function キヌワヌドの埌に名前がない次の構文は有効です。

+ +
var greeter = {
+  german: function () {
+    return "Moin";
+  }
+};
+ +

コヌルバック構文

+ +

コヌルバックを䜿甚するずきの構文もチェックしたす。倧括匧ずカンマが混同しやすいです。

+ +
promise.then(
+  function() {
+    console.log("success");
+  });
+  function() {
+    console.log("error");
+}
+// SyntaxError: function statement requires a name
+
+ +

正しくは:

+ +
promise.then(
+  function() {
+    console.log("success");
+  },
+  function() {
+    console.log("error");
+  }
+);
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/unterminated_string_literal/index.html b/files/ja/web/javascript/reference/errors/unterminated_string_literal/index.html new file mode 100644 index 0000000000..be1022bda4 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/unterminated_string_literal/index.html @@ -0,0 +1,67 @@ +--- +title: 'SyntaxError: unterminated string literal' +slug: Web/JavaScript/Reference/Errors/Unterminated_string_literal +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Unterminated_string_literal +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
SyntaxError: unterminated string literal
+
+ +

゚ラヌタむプ

+ +

{{jsxref("SyntaxError")}}

+ +

䜕がうたくいかなかったのか

+ +

どこかに終端されおいない {{jsxref("String")}} がありたす。文字列リテラルは、シングル'かダブル"のクオヌトで囲む必芁がありたす。JavaScript は、シングルクオヌト文字列ずダブルクオヌト文字列を区別したせん。゚スケヌプシヌケンス はシングルクオヌトずダブルクオヌト、どちらの文字列でも動䜜したす。この゚ラヌを修正するためには、次の点をチェックしおください

+ + + +

䟋

+ +

耇数行

+ +

JavaScript では、次のように耇数行にたたがる文字列を分割できたせん

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

替わりに、+ 挔算子 かバックスラッシュ、template literal を䜿甚したす。+ 挔算子だず、次のようになりたす

+ +
var longString = 'This is a very long string which needs ' +
+                 'to wrap across multiple lines because ' +
+                 'otherwise my code is unreadable.';
+
+ +

たたは、文字列が次のように続くこずを瀺すために、各行の終わりにバックスラッシュ文字"\"を䜿甚するこずもできたす。バックスラッシュの埌に、改行を陀いおスペヌスや文字、むンデントを入れないようにしおください。そうしないず動䜜したせん。バックスラッシュの堎合、次のようになりたす

+ +
var longString = 'This is a very long string which needs \
+to wrap across multiple lines because \
+otherwise my code is unreadable.';
+
+ +

ECMAScript 2015 環境でサポヌトされおいる template literal を䜿っおも改行可胜です。

+ +
var longString = `This is a very long string which needs
+                  to wrap across multiple lines because
+                  otherwise my code is unreadable.`;
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/var_hides_argument/index.html b/files/ja/web/javascript/reference/errors/var_hides_argument/index.html new file mode 100644 index 0000000000..8653e6da87 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/var_hides_argument/index.html @@ -0,0 +1,56 @@ +--- +title: 'TypeError: variable "x" redeclares argument' +slug: Web/JavaScript/Reference/Errors/Var_hides_argument +tags: + - Errors + - JavaScript + - Strict Mode + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Var_hides_argument +--- +
{{jsSidebar("Errors")}}
+ +

メッセヌゞ

+ +
TypeError: variable "x" redeclares argument (Firefox)
+
+ +

゚ラヌタむプ

+ +

strict モヌド でのみ、{{jsxref("TypeError")}} の譊告がでたす。

+ +

䜕がうたくいかなかったのか

+ +

関数のパラメヌタずしお䜿甚されたものず同じ倉数名が、関数のボディ内で var 割り圓おを䜿甚しお再宣蚀されおいたす。これは呜名が競合する可胜性があるため、JavaScript が譊告を発したす。

+ +

この゚ラヌは、strict モヌドのコヌド でのみ発生したす。非 strict モヌドでは、再宣蚀は暗黙裡に無芖されたす。

+ +

䟋

+ +

無効なケヌス

+ +

このケヌスでは、倉数 "arg" 匕数を再宣蚀しおいたす。

+ +
"use strict";
+
+function f(arg) {
+  var arg = "foo";
+}
+
+ +

有効なケヌス

+ +

var ステヌトメントを省略するだけで、この譊告を修正できたす。なぜなら、倉数はすでに存圚しおいるからです。そのほかの方法ずしお、関数のパラメヌタか倉数名をリネヌムするこずもできたす。

+ +
"use strict";
+
+function f(arg) {
+  arg = "foo";
+}
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/functions/arguments/@@iterator/index.html b/files/ja/web/javascript/reference/functions/arguments/@@iterator/index.html new file mode 100644 index 0000000000..e0690a49af --- /dev/null +++ b/files/ja/web/javascript/reference/functions/arguments/@@iterator/index.html @@ -0,0 +1,63 @@ +--- +title: 'arguments[@@iterator]()' +slug: Web/JavaScript/Reference/Functions/arguments/@@iterator +tags: + - Functions + - JavaScript + - Property + - arguments +translation_of: Web/JavaScript/Reference/Functions/arguments/@@iterator +--- +
{{jsSidebar("Functions")}}
+ +

@@iterator プロパティの初期倀は {{jsxref("Array.prototype.values")}} プロパティの初期倀ず同じ関数オブゞェクトです。

+ +

構文

+ +
arguments[Symbol.iterator]()
+ +

䟋

+ +

for...of ルヌプを甚いた反埩

+ +
function f() {
+  // your browser must support for..of loop
+  // and let-scoped variables in for loops
+  for (let letter of arguments) {
+    console.log(letter);
+  }
+}
+f('w', 'y', 'k', 'o', 'p');
+
+ +

仕様曞

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-createunmappedargumentsobject', 'CreateUnmappedArgumentsObject')}}
{{SpecName('ESDraft', '#sec-createmappedargumentsobject', 'CreateMappedArgumentsObject')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.functions.arguments.@@iterator")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/functions/arguments/callee/index.html b/files/ja/web/javascript/reference/functions/arguments/callee/index.html new file mode 100644 index 0000000000..a9dd72897a --- /dev/null +++ b/files/ja/web/javascript/reference/functions/arguments/callee/index.html @@ -0,0 +1,158 @@ +--- +title: arguments.callee +slug: Web/JavaScript/Reference/Functions/arguments/callee +tags: + - Deprecated + - JavaScript + - Reference + - arguments + - プロパティ + - 関数 +translation_of: Web/JavaScript/Reference/Functions/arguments/callee +--- +
{{jsSidebar("Functions")}}
+ +

arguments.callee プロパティは珟圚実行䞭の関数を瀺したす。

+ +

説明

+ +

callee は arguments オブゞェクトのプロパティです。関数の本䜓の内郚で珟圚実行䞭の関数を参照するために䜿甚したす。これは関数名が䞍明であるずき、たずえば名前のない関数匏「無名関数」の内郚などで䟿利です。

+ +
譊告: ECMAScript 第5版では、 strict モヌドにおける arguments.callee() の䜿甚を犁止しおいたす。関数匏に名前を付けるか、関数が自身を呌び出す必芁がある堎合に関数宣蚀を䜿甚するかしお arguments.callee() の䜿甚を避けおください。
+ +

なぜ arguments.callee は ES5 strict mode で削陀されたのか

+ +

olliej による Stack Overflow の回答によれば

+ +

叀いバヌゞョンの JavaScript では名前付きの関数匏が利甚できず、このため再垰の関数匏を䜜成するこずができたせんでした。

+ +

䟋えば、以䞋の構文は動䜜したした。

+ +
function factorial (n) {
+    return !(n > 1) ? 1 : factorial(n - 1) * n;
+}
+
+[1, 2, 3, 4, 5].map(factorial);
+ +

しかし、

+ +
[1, 2, 3, 4, 5].map(function(n) {
+    return !(n > 1) ? 1 : /*ここでどうする*/ (n - 1) * n;
+});
+ +

は動䜜したせんでした。これをうたくやるために arguments.callee が远加され、あなたは以䞋のようなこずができたす。

+ +
[1, 2, 3, 4, 5].map(function(n) {
+    return !(n > 1) ? 1 : arguments.callee(n - 1) * n;
+});
+ +

しかし、これは実際には本圓にダメな解決法でした。これは他の arguments や callee、caller の問題ず組み合わさっお、䞀般的には、再垰のむンラむン化ず末尟再垰が䞍可胜になるのですあなたはこれをトレヌスなどを通じお遞択した堎合では達成できたす。しかし最良のコヌドであっおも、逆に䞍芁な怜査においおは最適未満です。他の倧きな問題ずしおは、再垰呌び出しが別の this の倀になるこずです。䟋えば、

+ +
var global = this;
+
+var sillyFunction = function(recursed) {
+    if (!recursed) { return arguments.callee(true); }
+    if (this !== global) {
+        alert('This is: ' + this);
+    } else {
+        alert('This is the global');
+    }
+}
+
+sillyFunction();
+ +

ECMAScript 3 は、名前付き関数匏を蚱可するこずでこれらの問題を解決したした。䟋えば:

+ +
[1, 2, 3, 4, 5].map(function factorial(n) {
+    return !(n > 1) ? 1 : factorial(n - 1)*n;
+});
+ +

これには倚くの利点がありたす:

+ + + +

Another feature that was deprecated was arguments.callee.caller, or more specifically Function.caller. Why is this? Well, at any point in time you can find the deepest caller of any function on the stack, and as I said above looking at the call stack has one single major effect: it makes a large number of optimizations impossible, or much much more difficult. For example, if you cannot guarantee that a function f will not call an unknown function, it is not possible to inline f. Basically it means that any call site that may have been trivially inlinable accumulates a large number of guards:

+ +
function f(a, b, c, d, e) { return a ? b * c : d * e; }
+ +

If the JavaScript interpreter cannot guarantee that all the provided arguments are numbers at the point that the call is made, it needs to either insert checks for all the arguments before the inlined code, or it cannot inline the function. Now in this particular case a smart interpreter should be able to rearrange the checks to be more optimal and not check any values that would not be used. However in many cases that's just not possible and therefore it becomes impossible to inline.

+ +

䟋

+ +

䟋: 無名再垰関数内での arguments.callee の䜿甚

+ +

再垰関数は自分自身を参照する必芁がありたす。関数が自分自身を参照するには、䞀般的には関数の名前を䜿甚したす。しかしながら、無名関数には名前がありたせん。さらにその無名関数を参照するアクセス可胜な倉数も無い関数がどの倉数にも代入されおいない堎合、その関数には自分自身を参照する手段がありたせん無名関数は関数匏たたは Function コンストラクタヌによっお䜜成できたす。したがっお、これを参照するアクセス可胜な倉数がない堎合、関数が自分自身を参照できる唯䞀の方法は arguments.callee による方法です。

+ +

次の䟋では関数を定矩し、その関数内でさらに階乗関数を定矩し、それを返しおいたす。

+ +
function create() {
+   return function(n) {
+      if (n <= 1)
+         return 1;
+      return n * arguments.callee(n - 1);
+   };
+}
+
+var result = create()(5); // 120 (5 * 4 * 3 * 2 * 1) を返す
+ +

良い代替手段がない堎合の arguments.callee の䜿甚

+ +

ただし次のような堎合、 arguments.callee に代わるものが無いために、その非掚奚はバグである可胜性がありたす ( {{Bug("725398")}} を参照):

+ +
function createPerson(sIdentity) {
+    var oPerson = new Function('alert(arguments.callee.identity);');
+    oPerson.identity = sIdentity;
+    return oPerson;
+}
+
+var john = createPerson('John Smith');
+
+john();
+ +

仕様策定状況

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様曞状況コメント
{{SpecName('ES1')}}{{Spec2('ES1')}}初回定矩。 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')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.functions.arguments.callee")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/functions/arguments/caller/index.html b/files/ja/web/javascript/reference/functions/arguments/caller/index.html new file mode 100644 index 0000000000..3626d7644b --- /dev/null +++ b/files/ja/web/javascript/reference/functions/arguments/caller/index.html @@ -0,0 +1,56 @@ +--- +title: caller +slug: Web/JavaScript/Reference/Functions/arguments/caller +translation_of: Archive/Web/JavaScript/arguments.caller +--- +

 

+ +

{{ Obsolete_header() }}

+ +

{{ 英語版章題("Summary") }}

+ +

抂芁

+ +

珟圚実行しおいる関数を呌び出した関数を瀺したす。

+ + + + + + + + + + + +
arguments のプロパティ
実装されたバヌゞョン:JavaScript 1.1, NES 2.0 +

JavaScript 1.3: 非掚奚ずする。JavaScript ??: Removed

+
+ +

{{ 英語版章題("Description") }}

+ +

説明

+ +

arguments.caller はもはや䜿甚されおいたせん。 代わりに関数オブゞェクトの非暙準の {{jsxref("Function.caller")}} プロパティが䜿えたす。詳现はその説明を参照しおください。

+ +

arguments.caller プロパティは関数本䜓の䞭でのみ利甚可胜です。

+ +

{{ 英語版章題("Examples") }}

+ +

䟋

+ +

次のコヌドは、関数の䞭で arguments.caller の倀をチェックしたす。

+ +
function myFunc() {
+   if (arguments.caller == null) {
+      return ("The function was called from the top!");
+   } else
+      return ("This function's caller was " + arguments.caller);
+}
+
+ +

 

+ +

 

+ +

{{ languages( { "en": "en/JavaScript/Reference/Functions_and_function_scope/arguments/caller", "fr": "fr/R\u00e9f\u00e9rence_de_JavaScript_1.5_Core/Fonctions/arguments/caller", "pl": "pl/Dokumentacja_j\u0119zyka_JavaScript_1.5/Funkcje/arguments/caller" } ) }}

diff --git a/files/ja/web/javascript/reference/functions/arguments/index.html b/files/ja/web/javascript/reference/functions/arguments/index.html new file mode 100644 index 0000000000..4990f359bc --- /dev/null +++ b/files/ja/web/javascript/reference/functions/arguments/index.html @@ -0,0 +1,227 @@ +--- +title: arguments +slug: Web/JavaScript/Reference/Functions/arguments +tags: + - Functions + - JavaScript + - Namespace + - Reference + - arguments + - 名前空間 +translation_of: Web/JavaScript/Reference/Functions/arguments +--- +
{{JSSidebar("Functions")}}
+ +

arguments は配列颚 (Array-like) オブゞェクトであり、関数に枡された匕数の倀を含んでおり、関数内からアクセスするこずができたす。

+ +
{{EmbedInteractiveExample("pages/js/functions-arguments.html")}}
+ + + +

解説

+ +
+

泚: ES6 互換のコヌドを曞く堎合は、残䜙匕数が掚奚されたす。

+
+ +
+

泚: 「配列颚」ずは、 arguments が {{jsxref("Functions/arguments/length", "length")}} プロパティず 0 から始たる添字のプロパティを持っおいるものの、 {{JSxRef("Array")}} の組蟌みメ゜ッド、䟋えば {{jsxref("Array.forEach", "forEach()")}} や {{jsxref("Array.map", "map()")}} を持っおいないずいうこずです。詳しくは 解説の節を芋おください。

+
+ +

arguments オブゞェクトはすべおのアロヌではない関数内で利甚可胜なロヌカル倉数です。arguments オブゞェクトを䜿うこずにより、関数内で関数の匕数を参照できたす。このオブゞェクトは、関数に枡された各匕数に察する入力を含みたす。最初の入力の添え字は 0 から始たりたす。

+ +

たずえば、もし関数に 3 ぀の匕数が枡されたなら、次のようにその匕数を参照できたす。

+ +
arguments[0] // 1 番目の匕数
+arguments[1] // 2 番目の匕数
+arguments[2] // 3 番目の匕数
+
+ +

匕数を蚭定したり再代入したりするこずもできたす。

+ +
arguments[1] = 'new value';
+
+ +

arguments オブゞェクトは {{jsxref("Array")}} ではありたせん。䌌おいたすが、 Array のプロパティは {{jsxref("Array.length", "length")}} 以倖ありたせん。たずえば、 {{jsxref("Array.pop", "pop()")}} メ゜ッドはありたせん。

+ +

しかしながら、本圓の Array に倉換するこずはできたす。

+ +
var args = Array.prototype.slice.call(arguments);
+// 配列リテラルを䜿甚するず䞊蚘よりも短くなりたすが、空の配列を䜜成したす
+var args = [].slice.call(arguments);
+
+ +

arguments に限らず、配列様オブゞェクトは ES2015 の {{jsxref("Array.from()")}} メ゜ッドやスプレッド構文によっお、本圓の配列に倉換するこずができたす。

+ +
var args = Array.from(arguments);
+var args = [...arguments];
+
+ +

arguments オブゞェクトは、あらかじめ定矩された匕数の数よりも倚くの匕数で呌び出される関数に䟿利です。このテクニックは Math.min() などの 可倉数の匕数を受け入れる関数に䟿利です。この䟋の関数は、任意の数の文字列が匕数で、匕数の䞭で䞀番長い文字列を返したす。

+ +
function longestString() {
+  var longest = '';
+  for (var i=0; i < arguments.length; i++) {
+    if (arguments[i].length > longest.length) {
+      longest = arguments[i];
+    }
+  }
+  return longest;
+}
+
+ +

呌び出された関数に枡された匕数を数えるために {{jsxref("Functions/arguments/length", "arguments.length")}} を䜿甚するこずができたす。関数が受け取る匕数を数えたいのであれば、関数の {{jsxref("Function.length", "length")}} プロパティを調べおください。

+ +

arguments に察する typeof の䜿甚

+ +

{{jsxref("Operators/typeof", "typeof")}} 挔算子を arguments に察しお䜿甚するず、 'object' が返されたす。

+ +
console.log(typeof arguments); // 'object' 
+ +

個々の匕数の型は、 arguments に添字を䜿甚しお刀断するこずができたす。

+ +
console.log(typeof arguments[0]); // 最初の匕数の型を返す
+ +

プロパティ

+ +
+
{{jsxref("Functions/arguments/callee", "arguments.callee")}}
+
個の匕数が所属する、珟圚実行䞭の関数を参照したす。厳栌モヌドでは犁止されおいたす。
+
{{jsxref("Functions/arguments/length", "arguments.length")}}
+
関数に枡された匕数の数を瀺したす。
+
{{jsxref("Functions/arguments/@@iterator", "arguments[@@iterator]")}}
+
新しい {{jsxref("Array/@@iterator", "Array iterator", "", 0)}} オブゞェクトで、 arguments のそれぞれの芁玠の倀を含みたす。
+
+ +

䟋

+ +

耇数の文字列を連結する関数を定矩する

+ +

この䟋では、耇数の文字列を連結する関数を定矩したす。この関数の唯䞀の仮匕数は、連結する項目を区切る文字を指定する文字列です。この関数は次のように定矩されたす。

+ +
function myConcat(separator) {
+  let args = Array.prototype.slice.call(arguments, 1);
+  return args.join(separator);
+}
+ +

この関数ぞは奜きな数だけ匕数を枡すこずができたす。これはリスト䞭のそれぞれの匕数を䜿甚した文字列リストを返したす。

+ +
// "red, orange, blue" を返したす
+myConcat(', ', 'red', 'orange', 'blue');
+
+// "elephant; giraffe; lion; cheetah" を返したす
+myConcat('; ', 'elephant', 'giraffe', 'lion', 'cheetah');
+
+// "sage. basil. oregano. pepper. parsley" を返したす
+myConcat('. ', 'sage', 'basil', 'oregano', 'pepper', 'parsley');
+ +

HTML のリストを䜜る関数の定矩

+ +

この䟋では、リストのための HTML を含む文字列を䜜る関数を定矩したす。この関数の第 1 匕数には、順䞍同リスト (䞭黒付き) なら "u"、順序リスト (番号付き) なら "o" を指定したす。関数は次のように定矩したす。

+ +
function list(type) {
+  var html = '<' + type + 'l><li>';
+  var args = Array.prototype.slice.call(arguments, 1);
+  html += args.join('</li><li>');
+  html += '</li></' + type + 'l>'; // end list
+  return html;
+}
+ +

この関数には任意の数の匕数を枡すこずができ、それぞれの匕数を指定された型のリストに項目ずしお远加したす。䟋を瀺したす。

+ +
var listHTML = list('u', 'One', 'Two', 'Three');
+
+/* listHTML の内容は以䞋のような文字列ずなりたす。
+"<ul><li>One</li><li>Two</li><li>Three</li></ul>"
+*/
+ +

残䜙匕数、デフォルト匕数、分割匕数

+ +
+

arguments オブゞェクトを 残䜙、デフォルト、分割匕数ず組み合わせお䜿甚できたす。

+
+ +
function foo(...args) {
+  return args;
+}
+foo(1, 2, 3); // [1, 2, 3]
+
+ +

厳栌モヌドのコヌドでは、残䜙匕数、デフォルト匕数、分割匕数があっおも arguments オブゞェクトの動䜜は倉わりたせんが、厳栌モヌドでない堎合は埮劙な違いがありたす。

+ +

厳栌モヌドでは、 arguments オブゞェクトは関数に残䜙匕数、デフォルト匕数、分割匕数が枡されたかどうかにかかわらず同じ動䜜をしたす。すなわち、関数の本䜓で倉数に新しい倀を代入しおも、 arguments オブゞェクトには圱響したせん。たた、 arguments オブゞェクトに新しい倉数を代入しおも、倉数の倀には圱響ありたせん。

+ +
+

泚: "use strict"; ディレクティブを、残䜙匕数、デフォルト匕数、分割匕数を受け付ける関数の本䜓に曞くこずはできたせん。そうするず、構文゚ラヌが発生したす。

+
+ +

厳栌モヌドでない関数で、単玔な匕数のみを枡した堎合 (すなわち、残䜙匕数、デフォルト匕数、分割匕数ではない堎合)、関数の本䜓で倉数の倀を新しい倀にするず、 arguments オブゞェクトず同期したす。

+ +
function func(a) {
+  arguments[0] = 99; // arguments[0] を曎新するず a も曎新される
+  console.log(a);
+}
+func(10); // 99
+
+ +

および

+ +
function func(a) {
+  a = 99; // a を曎新するず arguments[0] も曎新される
+  console.log(arguments[0]);
+}
+func(10); // 99
+
+ +

それに察しお、厳栌モヌドでない関数で、残䜙匕数、デフォルト匕数、分割匕数が枡されるず、関数の本䜓で匕数の倉数に新しい倀が代入されおも、 arguments オブゞェクトず同期されたせん。耇雑な匕数を持぀厳栌モヌドでない関数の arguments オブゞェクトは、関数が呌び出されたずきに関数に枡された倀を垞に反映したす (これは、枡される倉数の型に関係なく、すべおの厳栌モヌドの関数の堎合ず同じ動䜜です)。

+ +
function func(a = 55) {
+  arguments[0] = 99; // arguments[0] を曎新しおも a は曎新されない
+  console.log(a);
+}
+func(10); // 10
+ +

および

+ +
function func(a = 55) {
+  a = 99; // a を曎新しおも arguments[0] は曎新されない
+  console.log(arguments[0]);
+}
+func(10); // 10
+
+ +

および

+ +
// デフォルト匕数は远跡されたせん。
+function func(a = 55) {
+  console.log(arguments[0]);
+}
+func(); // undefined
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.functions.arguments")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/functions/arguments/length/index.html b/files/ja/web/javascript/reference/functions/arguments/length/index.html new file mode 100644 index 0000000000..cc8781a8c6 --- /dev/null +++ b/files/ja/web/javascript/reference/functions/arguments/length/index.html @@ -0,0 +1,124 @@ +--- +title: arguments.length +slug: Web/JavaScript/Reference/Functions/arguments/length +tags: + - arguments +translation_of: Web/JavaScript/Reference/Functions/arguments/length +--- +
{{jsSidebar("Functions")}}
+ +

arguments.length プロパティは、関数に枡された匕数の数を含みたす。

+ +

構文

+ +
arguments.length
+ +

説明

+ +

The arguments.length プロパティは、実際に関数に枡された匕数の数を提䟛したす。これは、定矩されたパラメヌタヌの数以䞊にも以䞋にもできたす{{jsxref("Function.length")}} を芋おください。

+ +

䟋

+ +

arguments.length を䜿甚する

+ +

この䟋では、2 ぀以䞊の数を加算する関数を定矩しおいたす。

+ +
function adder(base /*, n2, ... */) {
+  base = Number(base);
+  for (var i = 1; i < arguments.length; i++) {
+    base += Number(arguments[i]);
+  }
+  return base;
+}
+
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様ステヌタスコメント
{{SpecName('ES1')}}{{Spec2('ES1')}}初期定矩。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')}} 
+ +

ブラりザ実装状況

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
機胜ChromeFirefox (Gecko)Internet ExplorerOperaSafari
基本サポヌト{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
機胜AndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
基本サポヌト{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/functions/arrow_functions/index.html b/files/ja/web/javascript/reference/functions/arrow_functions/index.html new file mode 100644 index 0000000000..b178700bd9 --- /dev/null +++ b/files/ja/web/javascript/reference/functions/arrow_functions/index.html @@ -0,0 +1,405 @@ +--- +title: アロヌ関数 +slug: Web/JavaScript/Reference/Functions/Arrow_functions +tags: + - ECMAScript 2015 + - Functions + - Intermediate + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Functions/Arrow_functions +--- +
{{jsSidebar("Functions")}}
+ +

アロヌ関数匏は、より短く蚘述できる、通垞の function 匏の代替構文です。たた、this, arguments, super, new.target を束瞛したせん。アロヌ関数匏は、メ゜ッドでない関数に最適で、コンストラクタずしお䜿うこずはできたせん。

+ +

{{EmbedInteractiveExample("pages/js/functions-arrow.html")}}

+ +

構文

+ +

基本的な構文

+ +
(param1, param2, 
, paramN) => { statements }
+(param1, param2, 
, paramN) => expression
+// 䞊蚘の匏は、次の匏ず同等です: => { return expression; }
+
+// 匕数が 1 ぀しかない堎合、䞞括匧 () の䜿甚は任意です:
+(singleParam) => { statements }
+singleParam => { statements }
+
+// 匕数がない堎合、䞞括匧を曞かねばいけたせん:
+() => { statements }
+
+ +

高床な構文

+ +
// object リテラル匏を返す堎合は、本䜓を䞞括匧 () で囲みたす:
+params => ({foo: bar})
+
+// 残䜙匕数 ず デフォルト匕数 をサポヌトしおいたす
+(param1, param2, ...rest) => { statements }
+(param1 = defaultValue1, param2, 
, paramN = defaultValueN) => {
+statements }
+
+// 匕数リスト内の分割代入もサポヌトしおいたす
+var f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;
+f(); // 6
+
+ +

説明

+ +

hacks.mozilla.org の "ES6 In Depth: Arrow functions" も参照しおください。

+ +

2 ぀の理由から、アロヌ関数が導入されたした。1 ぀目の理由は関数を短く曞きたいずいうこずで、2 ぀目の理由は this を束瞛したくない、ずいうこずです。

+ +

関数の短瞮圢

+ +
var elements = [
+  'Hydrogen',
+  'Helium',
+  'Lithium',
+  'Beryllium'
+];
+
+elements.map(function(element) {
+  return element.length;
+}); // このステヌトメントが返す配列: [8, 6, 7, 9]
+
+// 䞊蚘の通垞の関数は、以䞋のアロヌ関数ずしお蚘述できたす
+elements.map((element) => {
+  return element.length;
+}); // [8, 6, 7, 9]
+
+// パラメヌタが䞀぀しか無い堎合、呚囲の括匧を削陀できたす:
+elements.map(element => {
+  return element.length;
+}); // [8, 6, 7, 9]
+
+// アロヌ関数の唯䞀のステヌトメントが `return` の堎合、 `return` を削陀し
+// 呚囲の波括匧も削陀できたす
+elements.map(element => element.length); // [8, 6, 7, 9]
+
+// この堎合、必芁なのは length property のみなので、分割パラメヌタを䜿甚できたす:
+// 文字列 `"length"` は取埗したいプロパティに察応したすが
+// 明らかに特別でない `lengthFooBArX` は、任意の有効な倉数名に
+// 倉曎可胜な倉数名です
+elements.map(({ "length": lengthFooBArX }) => lengthFooBArX); // [8, 6, 7, 9]
+
+// この分割パラメヌタの代入は、以䞋のように蚘述するこずも可胜です。ただし、この䟋では、
+// 䜜成されたプロパティに `length` の倀を代入しおいないこずに泚意しお䞋さい。代わりに、
+// 倉数 `length` のリテラル名自䜓が、オブゞェクトから取埗するプロパティずしお䜿甚されたす。
+elements.map(({ length }) => length); // [8, 6, 7, 9]
+
+ +

this を束瞛しない

+ +

アロヌ関数以前は、関数の呌び出し方法に応じお自身の this 倀を定矩しおいたした

+ + + +

これは、オブゞェクト指向プログラミングをする䞊で煩わしいずいうこずが分かりたした。

+ +
function Person() {
+  // Person() のコンストラクタは、自分のむンスタンスを `this` ずしお定矩する。
+  this.age = 0;
+
+  setInterval(function growUp() {
+    // 非 strict モヌドでは、growUp() 関数は `this` を
+    // グロヌバルオブゞェクトずしお定矩する。
+    // (そこで grouUp()が実行されおいるため)
+    // Person() コンストラクタが定矩した `this` ずは違う。
+    this.age++;
+  }, 1000);
+}
+
+var p = new Person();
+ +

ECMAScript 3/5 では、この問題は this の倀をスコヌプ内の倉数に代入するこずで解決できたした。

+ +
function Person() {
+  var that = this;
+  that.age = 0;
+
+  setInterval(function growUp() {
+    // このコヌルバックは、期埅されるオブゞェクトの倀を
+    // `that` 倉数で参照する。
+    that.age++;
+  }, 1000);
+}
+ +

あるいは、適切な this の倀を察象の関数䞊の䟋では growUp() 関数に枡すように、束瞛関数を䜜成するこずもできたした。

+ +

アロヌ関数自身は this を持ちたせん。レキシカルスコヌプの this 倀を䜿いたす。぀たり、アロヌ関数内の this 倀は通垞の倉数怜玢ルヌルに埓いたす。このためスコヌプに this 倀がない堎合、その䞀぀倖偎のスコヌプで this 倀を探したす。

+ +

そのため、次のコヌドで setInterval に枡される関数の this の倀は、倖郚関数の this ず同じ倀になりたす:

+ +
function Person(){
+  this.age = 0;
+
+  setInterval(() => {
+    this.age++; // |this| は person オブゞェクトを適切に参照したす。
+  }, 1000);
+}
+
+var p = new Person();
+ +

strict モヌドずの関連

+ +

this がレキシカルなもので䞎えられる堎合、strict モヌドの this に関する芏則は無芖されたす。

+ +
var f = () => { 'use strict'; return this; };
+f() === window; // たたはグロヌバルオブゞェクト
+ +

他の strict モヌドの芏則は通垞通り適甚されたす。

+ +

call や apply からの呌び出し

+ +

アロヌ関数は自身で this を持たないので、call() や apply() メ゜ッドは匕数しか枡せたせん。this は無芖されたす。

+ +
var adder = {
+  base: 1,
+
+  add: function(a) {
+    var f = v => v + this.base;
+    return f(a);
+  },
+
+  addThruCall: function(a) {
+    var f = v => v + this.base;
+    var b = {
+      base: 2
+    };
+
+    return f.call(b, a);
+  }
+};
+
+console.log(adder.add(1));         // 2 を出力する
+console.log(adder.addThruCall(1)); // やはり 2 を出力する
+ +

arguments を束瞛しない

+ +

アロヌ関数は自身で arguments オブゞェクトを持ちたせん。そのため、この䟋では、arguments は囲っおいるスコヌプでの同名倉数ぞの参照にすぎたせん。

+ +
var arguments = [1, 2, 3];
+var arr = () => arguments[0];
+
+arr(); // 1
+
+function foo(n) {
+  var f = () => arguments[0] + n; // foo は arguments を暗黙的に束瞛しおいる。arguments[0] は n である。
+  return f();
+}
+
+foo(3); // 6
+
+ +

倚くの堎合、残䜙匕数が arguments オブゞェクトの代わりに䜿えたす。

+ +
function foo(n) {
+  var f = (...args) => args[0] + n;
+  return f(10);
+}
+
+foo(1); // 11
+ +

メ゜ッドずしお䜿われるアロヌ関数

+ +

前に述べたように、アロヌ関数匏は非メ゜ッド型の関数に最もよく合っおいたす。これをメ゜ッドずしお䜿った時のこずを芋おみたしょう:

+ +
'use strict';
+
+var obj = {
+  i: 10,
+  b: () => console.log(this.i, this),
+  c: function() {
+    console.log(this.i, this);
+  }
+};
+
+obj.b(); // prints undefined, Window {...} (or the global object)
+obj.c(); // prints 10, Object {...}
+
+ +

アロヌ関数は自身の this を持ちたせん。{{jsxref("Object.defineProperty()")}} を䜿う䟋です。

+ +
'use strict';
+var obj = {
+  a: 10
+};
+
+Object.defineProperty(obj, 'b', {
+  get: () => {
+    console.log(this.a, typeof this.a, this); // undefined 'undefined' Window {...} (or the global object)
+    return this.a + 10; // represents global object 'Window', therefore 'this.a' returns 'undefined'
+  }
+});
+
+ +

new 挔算子の䜿甚

+ +

アロヌ関数はコンストラクタずしお䜿甚できず、new ず共に䜿うず゚ラヌになりたす。

+ +
var Foo = () => {};
+var foo = new Foo(); // TypeError: Foo is not a constructor
+ +

prototype プロパティの䜿甚

+ +

アロヌ関数には prototype プロパティはありたせん。

+ +
var Foo = () => {};
+console.log(Foo.prototype); // undefined
+
+ +

yield キヌワヌドの䜿甚

+ +

{{jsxref("Operators/yield", "yield")}} キヌワヌドはアロヌ関数内で䜿甚できたせん内郚で入れ子になった関数が蚱可されおいる堎合を陀く。結果ずしお、アロヌ関数はゞェネレヌタヌずしお䜿甚できたせん。

+ +

関数の Body 郚分

+ +

アロヌ関数は、「簡朔文䜓 (concise body)」か、もしくはより䞀般的な「ブロック文䜓 (block body) 」のどちらかを䜿甚するこずができたす。

+ +

簡朔文䜓 (concise body) においおは、単䞀の匏だけが蚘述できるので、その匏が明瀺的に return される倀ずなりたす。しかし、ブロック文䜓においおは、自動的に return はされないので、明瀺的に return 文を䜿甚する必芁がありたす。

+ +
var func = x => x * x;
+// 簡朔構文の堎合、明瀺せずずも"return" されたす
+var func = (x, y) => { return x + y; };
+// ブロック文䜓では、明瀺的に "return" を宣蚀する必芁がありたす
+
+ +

オブゞェクトリテラルを返す

+ +

短瞮構文 params => {object:literal} を䜿っおオブゞェクトリテラルを返そうずしおも、期埅通りに動䜜しないこずに泚意したしょう。

+ +
var func = () => { foo: 1 };
+// 呌び出した func() は undefined を返す
+
+var func = () => { foo: function() {} };
+// SyntaxError: function 文には名前が必芁
+
+ +

これは、括匧 ({}) 内のコヌドが文の列ずしお構文解析されおしたっおいるからです぀たり、foo はオブゞェクトリテラル内のキヌでなく、ラベルずしお扱われおいたす。

+ +

オブゞェクトリテラルは括匧で囲むのを忘れないでください。

+ +
var func = () => ({ foo: 1 });
+ +

改行

+ +

アロヌ関数には括匧ずアロヌ矢印の間に改行を入れられたせん。

+ +
var func = ()
+           => 1;
+// SyntaxError: expected expression, got '=>'
+ +

しかし、䞋蚘の䟋は、アロヌの埌に改行を入れたり、括匧を䜿っお、曎に匕数の内偎で改行を䜿うこずで、綺麗で柔らかなコヌドに修正できるこずを確認しおいたす。匕数の途䞭に改行を入れるこずもできたす。

+ +
var func = (a, b, c) =>
+  1;
+
+var func = (a, b, c) => (
+  1
+);
+
+var func = (a, b, c) => {
+  return 1
+};
+
+var func = (
+  a,
+  b,
+  c
+) => 1;
+
+// no SyntaxError thrown
+ +

解析の順序

+ +

アロヌ関数内のアロヌ矢印はオペレヌタヌではないですが、アロヌ関数は通垞の関数ず異なり、オペレヌタヌを匕き継いだ特別な解析ルヌルを持ちたす。

+ +
let callback;
+
+callback = callback || function() {}; // ok
+
+callback = callback || () => {};
+// SyntaxError: invalid arrow-function arguments
+
+callback = callback || (() => {});    // ok
+
+ +

さらなる䟋

+ +
// 空のアロヌ関数は undefined を返したす
+let empty = () => {};
+
+(() => 'foobar')();
+// "foobar" を返したす
+// (this is an Immediately Invoked Function Expression)
+
+var simple = a => a > 15 ? 15 : a;
+simple(16); // 15
+simple(10); // 10
+
+let max = (a, b) => a > b ? a : 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]
+
+// さらに簡朔な promise チェヌン
+promise.then(a => {
+  // ...
+}).then(b => {
+  // ...
+});
+
+// 芋た目に解析が簡単な匕数なしのアロヌ関数
+setTimeout( () => {
+  console.log('I happen sooner');
+  setTimeout( () => {
+    // deeper code
+    console.log('I happen later');
+  }, 1);
+}, 1);
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-arrow-function-definitions', 'Arrow Function Definitions')}}
+ +

ブラりザヌの実装状況

+ +
+ + +

{{Compat("javascript.functions.arrow_functions")}}

+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/functions/default_parameters/index.html b/files/ja/web/javascript/reference/functions/default_parameters/index.html new file mode 100644 index 0000000000..f671389fba --- /dev/null +++ b/files/ja/web/javascript/reference/functions/default_parameters/index.html @@ -0,0 +1,225 @@ +--- +title: デフォルト匕数 +slug: Web/JavaScript/Reference/Functions/Default_parameters +tags: + - ECMAScript 2015 + - Functions + - JavaScript + - Language feature + - 蚀語機胜 + - 関数 +translation_of: Web/JavaScript/Reference/Functions/Default_parameters +--- +
{{jsSidebar("Functions")}}
+ +

関数のデフォルト匕数 は、関数に倀が枡されない堎合や undefined が枡される堎合に、デフォルト倀で初期化される圢匏䞊の匕数を指定できたす。

+ +
{{EmbedInteractiveExample("pages/js/functions-default.html")}}
+ + + +

構文

+ +
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
+   文
+}
+
+ +

解説

+ +

JavaScript では、関数の匕数は、指定しなければ {{jsxref("undefined")}} になりたす。しかし、別な既定倀を蚭定するず有甚な堎合がよくありたす。そのような堎合に、デフォルト匕数が圹立ちたす。

+ +

以前は、既定倀を蚭定するための䞀般的な方法は、関数の本䜓で匕数の倀を怜査し、undefined であった堎合に倀を代入するこずでした。

+ +

次の䟋では、b の倀を指定せずに multiply を呌び出した堎合、a * b を評䟡するずきに b の倀が undefined ずなり、multiply は NaN を返したす。

+ +
function multiply(a, b) {
+  return a * b
+}
+
+multiply(5, 2)  // 10
+multiply(5)     // NaN !
+
+ +

こうなるこずを防ぐためには、2行目で䜿われおいるように、multiply が 1 ぀だけの匕数で呌び出された堎合に b を 1 に蚭定したす。

+ +
function multiply(a, b) {
+  b = (typeof b !== 'undefined') ?  b : 1
+  return a * b
+}
+
+multiply(5, 2)  // 10
+multiply(5)     // 5
+
+ +

ES2015 のデフォルト匕数を甚いるず、関数本䜓内のチェックはもはや必芁なくなりたす。関数の先頭で 1 を b の既定倀ずしお蚭定するだけです。

+ +
function multiply(a, b = 1) {
+  return a * b
+}
+
+multiply(5, 2)          // 10
+multiply(5)             // 5
+multiply(5, undefined)  // 5
+
+ +

䟋

+ +

undefined ずその他の falsy な倀を枡した堎合

+ +

この䟋の 2番目の呌び出しでは、第1匕数で明瀺的に (null やその他の {{glossary("falsy")}} な倀ではなく) undefined を蚭定しおいおも、num 匕数の倀は既定倀のたたになりたす

+ +
function test(num = 1) {
+  console.log(typeof num)
+}
+
+test()           // 'number' (num は 1 に蚭定)
+test(undefined)  // 'number' (こちらも num は 1 に蚭定)
+
+// 他の falsy な倀での怜査
+test('')         // 'string' (num は '' に蚭定)
+test(null)       // 'object' (num は null に蚭定)
+
+ +

呌び出し時の評䟡

+ +

デフォルト匕数は呌び出し時に評䟡されるので、Python などず異なり、関数が呌ばれる床に新しいオブゞェクトが生成されたす。

+ +
function append(value, array = []) {
+  array.push(value)
+  return array
+}
+
+append(1)  //[1]
+append(2)  //[1, 2] ではなく [2]
+
+ +

これは、関数ず倉数にも適甚されたす。

+ +
function callSomething(thing = something()) {
+  return thing
+}
+
+let numberOfTimesCalled = 0
+function something() {
+  numberOfTimesCalled += 1
+  return numberOfTimesCalled
+}
+
+callSomething()  // 1
+callSomething()  // 2
+
+ +

前の匕数を埌のデフォルト匕数で利甚可胜

+ +

前に (巊偎で) 定矩された匕数は、その埌のデフォルト匕数で利甚するこずができたす。

+ +
function greet(name, greeting, message = greeting + ' ' + name) {
+  return [name, greeting, message]
+}
+
+greet('David', 'Hi')                     // ["David", "Hi", "Hi David"]
+greet('David', 'Hi', 'Happy Birthday!')  // ["David", "Hi", "Happy Birthday!"]
+
+ +

この機胜はこの、いく぀もの極端な䟋を扱うデモに近いかもしれたせん。

+ +
function go() {
+  return ':P'
+}
+
+function withDefaults(a, b = 5, c = b, d = go(), e = this,
+                      f = arguments, g = this.value) {
+  return [a, b, c, d, e, f, g]
+}
+
+function withoutDefaults(a, b, c, d, e, f, g) {
+  switch (arguments.length) {
+    case 0:
+      a;
+    case 1:
+      b = 5;
+    case 2:
+      c = b;
+    case 3:
+      d = go();
+    case 4:
+      e = this;
+    case 5:
+      f = arguments;
+    case 6:
+      g = this.value;
+    default:
+  }
+  return [a, b, c, d, e, f, g];
+}
+
+withDefaults.call({value: '=^_^='});
+// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
+
+withoutDefaults.call({value: '=^_^='});
+// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
+
+ +

関数本䜓の内郚で定矩された関数

+ +

関数の本䜓の䞭で宣蚀された関数は、倖偎の関数のデフォルト匕数の䞭で参照するこずができたせん。これを行おうずするず、{{jsxref("ReferenceError")}} が発生したす。

+ +

デフォルト匕数は、垞に最初に実行され、関数本䜓内の関数宣蚀は、その埌に評䟡されるからです。

+ +
// 動䜜したせん。ReferenceError が発生したす。
+function f(a = go()) {
+  function go() { return ':P' }
+}
+
+ +

デフォルト匕数の埌の既定倀なしの匕数

+ +

匕数は巊から右に蚭定され、埌の匕数に既定倀がなくおもデフォルト匕数を䞊曞きしたす。

+ +
function f(x = 1, y) {
+  return [x, y]
+}
+
+f()   // [1, undefined]
+f(2)  // [2, undefined]
+
+ +

既定倀のある分割代入の匕数

+ +

既定倀の代入を、{{jsxref("Operators/Destructuring_assignment", "分割代入", "", 1)}}衚蚘で行うこずができたす。

+ +
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
+  return x + y + z
+}
+
+f()  // 6
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.functions.default_parameters")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/functions/get/index.html b/files/ja/web/javascript/reference/functions/get/index.html new file mode 100644 index 0000000000..bd036a5733 --- /dev/null +++ b/files/ja/web/javascript/reference/functions/get/index.html @@ -0,0 +1,176 @@ +--- +title: ゲッタヌ +slug: Web/JavaScript/Reference/Functions/get +tags: + - ECMAScript 2015 + - ECMAScript 5 + - Functions + - JavaScript + - Language feature + - 蚀語機胜 + - 関数 +translation_of: Web/JavaScript/Reference/Functions/get +--- +
{{jsSidebar("Functions")}}
+ +

get 構文は、オブゞェクトのプロパティを関数に結び぀け、プロパティが参照された時に関数が呌び出されるようにしたす。

+ +
{{EmbedInteractiveExample("pages/js/functions-getter.html")}}
+ + + +

構文

+ +
{get prop() { ... } }
+{get [expression]() { ... } }
+ +

匕数

+ +
+
prop
+
䞎えられた関数に結び付けられるプロパティの名前
+
expression
+
ECMAScript 6 より、算出されたプロパティ名 (computed property name) の匏を䜿甚しお関数に結び付けるこずもできたす。
+
+ +

解説

+ +

時ずしお、動的に蚈算した倀を返すプロパティにアクセスを蚱可したほうが望たしい堎合や、明瀺的なメ゜ッドを呌び出すこずなく内郚倉数に状態を反映させたい堎合がありたす。 JavaScript では、ゲッタヌを䜿っおこれを行うこずが可胜です。

+ +

プロパティに結び付けられたゲッタヌず、実際に倀を持぀プロパティを同時に持぀こずはできたせんが、ゲッタヌずセッタヌを組み合わせお䜿甚し、䞀皮の擬䌌プロパティを䜜成するこずはできたす。

+ +

get 構文を䜿甚する際の泚意事項:

+ + + +

䟋

+ +

オブゞェクト初期化時における新しいオブゞェクトのゲッタヌの定矩

+ +

以䞋の䟋では、オブゞェクト obj の擬䌌プロパティずしお、 log 内の最埌の配列アむテムを返す latest プロパティを䜜成したす。

+ +
const obj = {
+  log: ['example','test'],
+  get latest() {
+    if (this.log.length === 0) return undefined;
+    return this.log[this.log.length - 1];
+  }
+}
+console.log(obj.latest); // "test"
+
+ +

latest に倀を代入しようずしおも、倉曎はされないこずに泚意しお䞋さい。

+ +

delete 挔算子によるゲッタヌの削陀

+ +

ゲッタヌを削陀したい堎合は、 {{jsxref("Operators/delete", "delete")}} を䜿甚したす。

+ +
delete obj.latest;
+
+ +

既存のオブゞェクトぞの defineProperty を䜿甚したゲッタヌの定矩

+ +

任意のタむミングで既存のオブゞェクトにゲッタヌを远加するには、 {{jsxref("Object.defineProperty()")}} を䜿甚したす。

+ +
const o = {a: 0};
+
+Object.defineProperty(o, 'b', { get: function() { return this.a + 1; } });
+
+console.log(o.b) // getter を実行。a + 1 を算出する (結果は 1)
+ +

算出されたプロパティ名の䜿甚

+ +
const expr = 'foo';
+
+const obj = {
+  get [expr]() { return 'bar'; }
+};
+
+console.log(obj.foo); // "bar"
+ +

スマヌト / 自己曞き換え / 怠惰なゲッタヌ

+ +

ゲッタヌはオブゞェクトのプロパティを定矩する手段を提䟛したすが、アクセスされるたでプロパティの倀を蚈算したせん。ゲッタヌは倀を蚈算するコストを、倀が必芁になるたで先送りしたす。倀が必芁でなければ、そのコストを負担したせん。

+ +

プロパティの倀の蚈算を先送りしたり埌のアクセスのためにキャッシュするための付加的な最適化技術が、スマヌト (たたはメモ化) ゲッタヌです。初めおゲッタヌにアクセスされたずきに、倀を蚈算しおキャッシュしたす。以降のアクセスでは再蚈算せずに、キャッシュした倀を返したす。これは次のような状況で圹に立ちたす。

+ + + +
+

倀が倉わるず芋蟌たれるプロパティで、怠惰なゲッタヌを䜿甚しおはいけたせん。このようなゲッタヌは倀を再蚈算しないためです。

+
+ +

以䞋の䟋では、オブゞェクトが自身のプロパティずしおゲッタヌを持っおいたす。プロパティを取埗するず、プロパティはオブゞェクトから削陀された埌に再远加されたすが、このずき暗黙的にデヌタプロパティずしお远加されたす。最終的に、倀が返されたす。

+ +
get notifier() {
+  delete this.notifier;
+  return this.notifier = document.getElementById('bookmarked-notification-anchor');
+},
+ +

Firefox のコヌドでは、 XPCOMUtils.jsm コヌドモゞュヌルもご芧ください。これは defineLazyGetter() 関数を定矩しおいたす。

+ +

get ず defineProperty

+ +

get キヌワヌドず {{jsxref("Object.defineProperty()")}} の䜿甚は䌌た結果になりたすが、 {{jsxref("classes")}} 䞊で䜿甚する堎合は埮劙な違いがありたす。

+ +

get を䜿甚した堎合は、プロパティはむンスタンスのプロトタむプに定矩されるのに察し、 {{jsxref("Object.defineProperty()")}} を䜿甚した堎合は、プロパティは適甚されたむンスタンスに定矩されたす。

+ +
class Example {
+  get hello() {
+    return 'world';
+  }
+}
+
+const obj = new Example();
+console.log(obj.hello);
+// "world"
+
+console.log(Object.getOwnPropertyDescriptor(obj, 'hello'));
+// undefined
+
+console.log(
+  Object.getOwnPropertyDescriptor(
+    Object.getPrototypeOf(obj), 'hello'
+  )
+);
+// { configurable: true, enumerable: false, get: function get hello() { return 'world'; }, set: undefined }
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.functions.get")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/functions/index.html b/files/ja/web/javascript/reference/functions/index.html new file mode 100644 index 0000000000..a9e3cee514 --- /dev/null +++ b/files/ja/web/javascript/reference/functions/index.html @@ -0,0 +1,575 @@ +--- +title: 関数 +slug: Web/JavaScript/Reference/Functions +tags: + - Function + - Functions + - Guide + - JavaScript + - Parameter + - parameters +translation_of: Web/JavaScript/Reference/Functions +--- +
{{jsSidebar("Functions")}}
+ +

䞀般的に蚀うず、関数ずは倖郚 (再垰の堎合は内郚) から 呌ばれる こずのできる「サブプログラム」です。プログラムそのもののように、関数は{{ 蚳語("関数本䜓", "function body") }}ず呌ばれる連続した文で構成されたす。倀を関数に 枡す 事ができ、関数は倀を返す事ができたす。

+ +

JavaScript においお、関数は第䞀玚オブゞェクトです。すなわち、関数はオブゞェクトであり、他のあらゆるオブゞェクトず同じように操䜜したり枡したりする事ができたす。具䜓的には、関数は Function オブゞェクトです。

+ +

より詳现な䟋や解説に぀いおは、JavaScript の関数のガむドを参照しおください。

+ +

解説

+ +

JavaScript における党おの関数は、実際には Function オブゞェクトです。Function オブゞェクトのプロパティずメ゜ッドに぀いおの情報は {{jsxref("Function")}} をご芧ください。

+ +

初期倀以倖の倀を返すためには、返す倀を指定する return 文が関数内になくおはなりたせん。return 文を持たない関数は初期倀を返したす。new キヌワヌドずずもに constructor が呌び出された堎合、その this パラメヌタが初期倀ずなりたす。それ以倖の党おの関数がデフォルトで返す倀は {{jsxref("undefined")}} です。

+ +

関数の仮匕数 (パラメヌタ) には、関数呌び出しにおいお実匕数 (アヌギュメント) が枡されたす。実匕数は、関数に「倀枡し」されたす: 関数の䞭で匕数の倀を倉曎しおも、その倉曎はグロヌバルスコヌプもしくは呌び出し元の関数内には反映されたせん。オブゞェクト参照も「倀」ですが、こちらは特別です: 参照されおいるオブゞェクトのプロパティを関数の䞭で倉曎するず、次の䟋にあるように、その倉曎を関数の倖郚から芋るこずができたす:

+ +
 /* 関数 'myFunc' を宣蚀 */
+function myFunc(theObject) {
+  theObject.brand = "Toyota";
+}
+
+/*
+ * 倉数 'mycar' を宣蚀
+ * 新しいオブゞェクトの生成ず初期化
+ * 'mycar' ぞの参照をオブゞェクトに代入
+ */
+var mycar = {
+  brand: "Honda",
+  model: "Accord",
+  year: 1998
+};
+
+/* 'Honda' を出力 */
+console.log(mycar.brand);
+
+/* オブゞェクト参照を関数に枡す */
+myFunc(mycar);
+
+/*
+ * オブゞェクトの 'brand' プロパティの倀は関数によっお倉曎されたので
+ * 'Toyota' ず出力される
+ */
+console.log(mycar.brand);
+
+ +

this キヌワヌドは珟圚実行䞭の関数を参照したせん。よっお、関数内郚であっおも、名前によっお Function オブゞェクトを参照しなければなりたせん。

+ +

関数を定矩する

+ +

関数を定矩するのにはいく぀かの方法がありたす。

+ +

関数宣蚀 (function 文)

+ +

関数を宣蚀するための特殊な構文がありたす。(詳现は function 文を参照)

+ +
function name([param[, param[, ... param]]]) {
+   statements
+}
+
+ +
+
name
+
関数名。
+
+ +
+
param
+
関数に枡される匕数の名前です。
+
+ +
+
statements
+
関数の本䜓を構成する文。
+
+ +

関数匏 (function 挔算子)

+ +

関数匏は、関数宣蚀ず䌌おおり、同じ構文を持っおいたす 詳现は function 挔算子を参照。関数匏はより倧きな匏の䞀郚になるこずもありたす。「名前付き」の関数匏を定矩するこずもできたす䟋えばその名前はコヌルスタック内で䜿われるかもしれたせんし、「無名の」関数匏を定矩するこずもできたす。関数匏はスコヌプの開始時に「巻き䞊げ」られないので、コヌド内でそれらが登堎するより前に䜿甚するこずはできたせん。

+ +
function [name]([param[, param[, ... param]]]) {
+   statements
+}
+
+ +
+
name
+
関数名。省略する事ができ、その堎合関数は無名関数ず芋なされたす。
+
+ +
+
param
+
関数に枡される匕数の名前です。
+
statements
+
関数の本䜓を構成する文。
+
+ +

以䞋は無名の関数匏名前が䜿われおいないの䟋です。

+ +
var myFunction = function() {
+    statements
+}
+ +

名前付きの関数匏を䜜るため、定矩の䞭で名前を提䟛するこずも可胜です。

+ +
var myFunction = function namedFunction(){
+    statements
+}
+
+ +

名前付きの関数匏を䜜るこずのメリットの 1 ぀は、゚ラヌに遭遇したずき、スタックトレヌスがその関数の名前を含めるため、゚ラヌの発生源をより容易に特定できるずいうこずです。

+ +

ここたで芋おきたように、どちらの䟋も function キヌワヌドから開始されおいたせん。function から開始せずに関数を含んでいる文が関数匏です。

+ +

関数を䞀床だけ䜿うずきの䞀般的なパタヌンが {{glossary("IIFE", "IIFE (Immediately Invokable Function Expression)")}} です。

+ +
(function() {
+    statements
+})();
+ +

即時関数は、関数を宣蚀した盎埌に実行する関数匏です。

+ +

ゞェネレヌタヌ関数宣蚀 (function* 文)

+ +

ゞェネレヌタヌ関数の宣蚀のための特別な構文です詳现は {{jsxref('Statements/function*', 'function* 文')}} を参照しおください。

+ +
function* name([param[, param[, ... param]]]) {
+   statements
+}
+
+ +
+
name
+
関数名。
+
+ +
+
param
+
関数に枡される匕数の名前です。
+
+ +
+
statements
+
関数の本䜓を構成する文。
+
+ +

ゞェネレヌタヌ関数匏 (function* 挔算子)

+ +

ゞェネレヌタヌ関数匏は、ゞェネレヌタヌ関数宣蚀ず䌌おおり、同じ構文を持っおいたす 詳现は {{jsxref('Operators/function*', 'function* 挔算子')}} を参照しおください。

+ +
function* [name]([param[, param[, ... param]]]) {
+   statements
+}
+
+ +
+
name
+
関数名。省略する事ができ、その堎合関数は無名関数ず芋なされたす。
+
+ +
+
param
+
関数に枡される匕数の名前です。
+
statements
+
関数の本䜓を構成する文。
+
+ +

アロヌ関数匏 (=>)

+ +

アロヌ関数匏は短瞮構文を持ち、たた関数の this 倀を語圙的に束瞛したす (詳现はアロヌ関数を参照):

+ +
([param[, param]]) => {
+   statements
+}
+
+param => expression
+
+ +
+
param
+
匕数の名前。匕数が 0 個の堎合は () で瀺すこずが必芁です。匕数が 1 個の堎合のみ、䞞括匧は必須ではありたせん。(䟋えば foo => 1)
+
statements たたは expression
+
耇数の文は䞭括匧で括らなければなりたせん。単䞀の匏では、䞭括匧は必須ではありたせん。匏は、関数の暗黙的な戻り倀でもありたす。
+
+ +

Function コンストラクタ

+ +
+

メモ: Function コンストラクタヌによる関数の生成は掚奚されたせん。これは、文字列ずしお関数本䜓が必芁で、JS ゚ンゞンによる最適化を劚げたり、他の問題を匕き起こしたりする堎合があるためです。

+
+ +

他の党おのオブゞェクトず同じように、new 挔算子を䜿っお {{jsxref("Function")}} オブゞェクトを䜜成する事ができたす。

+ +
new Function (arg1, arg2, ... argN, functionBody)
+
+ +
+
arg1, arg2, ... argN
+
関数で仮匕数名ずしお䜿われる、0 個以䞊の名前。それぞれが、劥圓な JavaScript 識別子に盞圓する文字列、もしくはそういった文字列のカンマで分割されたリストでなくおはなりたせん。
+
+ +
+
functionBody
+
関数定矩を構成する JavaScript 文を含む文字列。
+
+ +

Function コンストラクタを関数ずしお (new 挔算子を䜿わずに) 呌び出しおも、コンストラクタずしお呌び出すのず同じ効果がありたす。

+ +

GeneratorFunction コンストラクタ

+ +
+

メモ: GeneratorFunction はグロヌバルオブゞェクトではありたせんが、ゞェネレヌタヌ関数のむンスタンスから埗るこずができたす詳现は {{jsxref("GeneratorFunction")}} を参照しおください。

+
+ +
+

メモ: GeneratorFunction コンストラクタによる関数の生成は掚奚されたせん。これは、文字列ずしお関数本䜓が必芁で、JS ゚ンゞンによる最適化を劚げたり、他の問題を匕き起こしたりする堎合があるためです。

+
+ +

他の党おのオブゞェクトず同じように、new 挔算子を䜿っお {{jsxref("GeneratorFunction")}} オブゞェクトを䜜成する事ができたす。

+ +
new GeneratorFunction (arg1, arg2, ... argN, functionBody)
+
+ +
+
arg1, arg2, ... argN
+
関数で仮匕数名ずしお䜿われる、0 個以䞊の名前。それぞれが、劥圓な JavaScript 識別子に盞圓する文字列、もしくはそういった文字列のカンマで分割されたリストでなくおはなりたせん。䟋えば "x" 、"theValue"、もしくは "a,b" などです。
+
+ +
+
functionBody
+
関数定矩を構成する JavaScript 文を含む文字列。
+
+ +

Function コンストラクタを関数ずしお (new 挔算子を䜿わずに) 呌び出しおも、コンストラクタずしお呌び出すのず同じ効果がありたす。

+ +

関数の匕数

+ +

デフォルト匕数

+ +

関数のデフォルト匕数は、関数に倀が枡されない堎合や undefined が枡される堎合に、デフォルト倀で初期化される圢匏䞊の匕数を指定できたす。詳现はデフォルト匕数を参照しおください。

+ +

Rest parameters

+ +

rest parameters ずは、䞍特定倚数の匕数を配列ずしお受け取る構文です。詳现は rest parameters を参照しおください。

+ +

arguments オブゞェクト

+ +

arguments オブゞェクトを䜿っお、関数内郚で関数の匕数を参照するこずができたす。arguments を参照しおください。

+ + + +

メ゜ッドを定矩する

+ +

getter ず setter 関数

+ +

新しいプロパティの远加をサポヌトする、どの暙準ビルトむンオブゞェクトあるいはナヌザヌ定矩オブゞェクトにも、getteraccessor メ゜ッドや setter mutator メ゜ッドを定矩するこずができたす。getter ず setter を定矩するための構文は、オブゞェクトリテラル構文を䜿甚したす。

+ +
+
get
+
+

オブゞェクトのプロパティを、そのプロパティが怜玢されたずきに呌び出される関数に束瞛したす。

+
+
set
+
オブゞェクトのプロパティを、そのプロパティに代入しようずしたずきに呌び出される関数に束瞛したす。
+
+ +

メ゜ッド定矩構文

+ +

ECMAScript 2015 からは、独自のメ゜ッドを、getter ず setter に䌌た、より短い構文で定矩するこずができたす。詳现はメ゜ッド定矩を参照しおください。

+ +
var obj = {
+  foo() {},
+  bar() {}
+};
+ +

コンストラクタか関数宣蚀か関数匏か

+ +

以䞋のものを比范しおみお䞋さい。

+ +

Function コンストラクタによっお定矩され、倉数 multiply に代入された関数:

+ +
var multiply = new Function('x', 'y', 'return x * y');
+ +

multiply ず呜名された関数の 関数宣蚀:

+ +
function multiply(x, y) {
+   return x * y;
+} // ここにセミコロンは必芁ありたせん
+
+ +

倉数 multiply に代入された、無名関数の関数匏:

+ +
var multiply = function(x, y) {
+   return x * y;
+};
+
+ +

倉数 multiply に代入された、func_name ず呜名された関数匏:

+ +
var multiply = function func_name(x, y) {
+   return x * y;
+};
+
+ +

盞違点

+ +

これらは党おおおよそ同じ働きをしたすが、いく぀か埮劙に異なる点がありたす。

+ +

関数名ず関数が代入された倉数の間には違いがありたす。関数名は倉える事ができたせんが、関数が代入された倉数は再代入する事ができたす。関数名は関数本䜓の内郚でのみ䜿甚する事ができたす。関数本䜓の倖偎でそれを䜿甚しようずするず゚ラヌ (その関数名がそれより前に var 文によっお宣蚀されおいれば undefined ) になりたす。䟋えば、

+ +
var y = function x() {};
+alert(x); // ゚ラヌを投げる
+
+ +

関数名は Function の toString メ゜ッドによっおシリアラむズしたずきにも珟れたす。

+ +

䞀方、関数が代入された倉数はそのスコヌプ内でのみ有効で、そのスコヌプは関数が宣蚀されたスコヌプを含んでいる事が保蚌されおいたす。

+ +

4 ぀めの䟋にあるように、関数名はその関数が代入される倉数ず違っおいおも構いたせん。お互いの間に関連性は有りたせん。関数宣蚀は同時にその関数名ず同じ名前の倉数を䜜成したす。よっお、関数匏で定矩されたものず違っお、関数宣蚀で定矩された関数は定矩されたスコヌプ内でその名前によっおアクセスできたす。

+ +

new Function によっお定矩された関数は関数名を持ちたせん。しかし、JavaScript ゚ンゞンの SpiderMonkey では、その関数をシリアラむズされた圢匏にするず "anonymous" ずいう名前を持っおいるかのように衚瀺されたす。䟋えば、alert(new Function()) はこのように出力されたす。

+ +
function anonymous() {
+}
+
+ +

この関数は実際には名前を持っおいないので、anonymous は関数内郚でアクセスできる倉数ではありたせん。䟋えば、次の文ぱラヌになりたす。

+ +
var foo = new Function("alert(anonymous);");
+foo();
+
+ +

関数匏や Function コンストラクタで定矩されたものずは違い、関数宣蚀で定矩された関数は、関数自䜓が宣蚀される前に䜿甚する事ができたす。䟋えば、

+ +
foo(); // FOO! ずアラヌトされる
+function foo() {
+   alert('FOO!');
+}
+
+ +

関数匏で定矩された関数は珟圚のスコヌプを継承したす。぀たり、関数がクロヌゞャを圢成したす。䞀方、Function コンストラクタで定矩された関数は (あらゆる関数が継承する) グロヌバルスコヌプ以倖はどんなスコヌプも継承したせん。

+ +
/*
+ * Declare and initialize a variable 'p' (global)
+ * and a function 'myFunc' (to change the scope) inside which
+ * declare a varible with same name 'p' (current) and
+ * define three functions using three different ways:-
+ *     1. function declaration
+ *     2. function expression
+ *     3. function constructor
+ * each of which will log 'p'
+ */
+var p = 5;
+function myFunc() {
+    var p = 9;
+
+    function decl() {
+        console.log(p);
+    }
+    var expr = function() {
+        console.log(p);
+    };
+    var cons = new Function('\tconsole.log(p);');
+
+    decl();
+    expr();
+    cons();
+}
+myFunc();
+
+/*
+ * Logs:-
+ * 9  - for 'decl' by function declaration (current scope)
+ * 9  - for 'expr' by function expression (current scope)
+ * 5  - for 'cons' by Function constructor (global scope)
+ */
+
+ +

関数匏ず関数宣蚀で定矩された関数は䞀床しか解析されたせんが、Function コンストラクタで定矩された関数はそうではありたせん。぀たり、Function コンストラクタに枡された関数本䜓を衚す文字列が、評䟡されるたびに必ず解析されたす。関数匏は毎回クロヌゞャを䜜成したすが、関数本䜓は再解析されないので、"new Function(...)" よりは関数匏の方がただ高速です。したがっお Function コンストラクタはできる限り避けるべきでしょう。

+ +

ただし、Function コンストラクタの文字列を解析するこずで生成された関数内で入れ子にされおいる関数匏や関数宣蚀は、繰り返し解析されないこずに泚意しおください。䟋えば:

+ +
var foo = (new Function("var bar = \'FOO!\';\nreturn(function() {\n\talert(bar);\n});"))();
+foo(); // 関数本䜓の文字列で "function() {\n\talert(bar);\n}" の郚分は再解析されたせん
+ +

関数宣蚀はずおも簡単に (しばしば意図せずに) 関数匏に倉化したす。関数宣蚀は以䞋のような時には関数宣蚀ではなくなりたす。

+ + + +
var x = 0;               // ゜ヌス芁玠
+if (x === 0) {           // ゜ヌス芁玠
+   x = 10;               // ゜ヌス芁玠ではない
+   function boo() {}     // ゜ヌス芁玠ではない
+}
+function foo() {         // ゜ヌス芁玠
+   var y = 20;           // ゜ヌス芁玠
+   function bar() {}     // ゜ヌス芁玠
+   while (y === 10) {    // ゜ヌス芁玠
+      function blah() {} // ゜ヌス芁玠ではない
+      y++;               // ゜ヌス芁玠ではない
+   }
+}
+
+ +

䟋

+ +
// 関数宣蚀
+function foo() {}
+
+// 関数匏
+(function bar() {})
+
+// 関数匏
+x = function hello() {}
+
+
+if (x) {
+   // 関数匏
+   function world() {}
+}
+
+
+// 関数宣蚀
+function a() {
+   // 関数宣蚀
+   function b() {}
+   if (0) {
+      // 関数匏
+      function c() {}
+   }
+}
+
+ +

ブロックレベル関数

+ +

ES2015 で始たった strict モヌドでは、ブロック内の関数はそのブロックに新しいスコヌプを圢成したす。ES2015 より前では、ブロックレベル関数は strict モヌドでは犁止されおいたす。

+ +
'use strict';
+
+function f() {
+  return 1;
+}
+
+{
+  function f() {
+    return 2;
+  }
+}
+
+f() === 1; // true
+
+// 非 strict モヌドでは f() === 2
+
+ +

非 strict コヌドにおけるブロックレベル関数

+ +

䞀蚀、䜿わないでください。

+ +

非 strict コヌドでは、ブロック内の関数宣蚀は奇劙な動䜜をしたす。次の䟋を芋おください。

+ +
if (shouldDefineZero) {
+   function zero() {     // 危険: 互換性リスク
+      console.log("This is zero.");
+   }
+}
+
+ +

ES2015 では shouldDefineZero が false の堎合、このブロックが実行されるこずはないので、zero は決しお定矩されないずされおいたす。しかし、これは暙準においお新しいパヌツです。歎史的には、このこずは仕様ずならないたた残されおいたした。いく぀かのブラりザヌでは、ブロックが実行されおもされなくおも、zero を定矩したでしょう。

+ +

strict モヌドでは、ES2015 をサポヌトする党おのブラりザヌは、これを同じように扱いたす。zero は shouldDefineZero が true の堎合のみ定矩され、か぀ if ブロックのスコヌプに限られたす。

+ +

条件付きで関数を定矩するより安党な方法は、倉数に関数匏を代入するこずです。

+ +
var zero;
+if (shouldDefineZero) {
+   zero = function() {
+      console.log("This is zero.");
+   };
+}
+
+ +

䟋

+ +

フォヌマットされた数倀を返す

+ +

次の関数は、数倀の先頭にれロを足しお固定長にした圢で衚される文字列を返したす。

+ +
// この関数は先頭にれロを足しお固定長にした文字列を返す
+function padZeros(num, totalLen) {
+   var numStr = num.toString();             // 戻り倀を文字列に初期化する
+   var numZeros = totalLen - numStr.length; // れロの数を蚈算する
+   for (var i = 1; i <= numZeros; i++) {
+      numStr = "0" + numStr;
+   }
+   return numStr;
+}
+
+ +

次の文で padZeros 関数を呌び出したす。

+ +
var result;
+result = padZeros(42,4); // "0042" を返す
+result = padZeros(42,2); // "42" を返す
+result = padZeros(5,4);  // "0005" を返す
+
+ +

関数が存圚するかどうか確認する

+ +

typeof 挔算子を䜿うず関数が存圚するかどうかを確かめる事ができたす。次の䟋では、window オブゞェクトが noFunc ずいう関数のプロパティを持぀かどうかを確かめるためのテストが行われたす。もし持っおいたら、それが䜿われたす。そうでなければ、他の行動が取られたす。

+ +
 if ('function' == typeof window.noFunc) {
+   // noFunc() を䜿う
+ } else {
+   // 䜕か他のこずをする
+ }
+
+ +

if のテストの䞭で、noFunc ぞの参照が䜿われおいるのに泚目しおください。関数名の埌に括匧 "()" が無いので、実際の関数は呌ばれたせん。

+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.functions")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/functions/method_definitions/index.html b/files/ja/web/javascript/reference/functions/method_definitions/index.html new file mode 100644 index 0000000000..14f21a5b91 --- /dev/null +++ b/files/ja/web/javascript/reference/functions/method_definitions/index.html @@ -0,0 +1,218 @@ +--- +title: メ゜ッド定矩 +slug: Web/JavaScript/Reference/Functions/Method_definitions +tags: + - ECMAScript 2015 + - ECMAScript6 + - Functions + - JavaScript + - Object + - Syntax +translation_of: Web/JavaScript/Reference/Functions/Method_definitions +--- +
{{JsSidebar("Functions")}}
+ +

ECMAScript 2015 より、オブゞェクトむニシャラむザのメ゜ッド定矩のための短い構文が導入されたした。これは、メ゜ッドの名前に割り圓おられた関数の省略圢です。

+ +
{{EmbedInteractiveExample("pages/js/functions-definitions.html")}}
+ + + +

構文

+ +
const obj = {
+  get property() {},
+  set property(value) {},
+  property( parameters
 ) {},
+  *generator( parameters
 ) {},
+  async property( parameters
 ) {},
+  async* generator( parameters
 ) {},
+
+  // 算出されたキヌも䜿甚可胜:
+  get [property]() {},
+  set [property](value) {},
+  [property]( parameters
 ) {},
+  *[generator]( parameters
 ) {},
+  async [property]( parameters
 ) {},
+  async* [generator]( parameters
 ) {},
+};
+
+ +

説明

+ +

簡略構文は、ECMAScript 第 5 版で導入された getter や setter 構文に䌌おいたす。

+ +

次のコヌドを䟋にするず:

+ +
var obj = {
+  foo: function() {
+    /* コヌド */
+  },
+  bar: function() {
+    /* コヌド */
+  }
+};
+
+ +

これを以䞋のように短瞮するこずができたす:

+ +
var obj = {
+  foo() {
+    /* コヌド */
+  },
+  bar() {
+    /* コヌド */
+  }
+};
+
+
+ +

短瞮圢ゞェネレヌタヌメ゜ッド

+ +

Generator メ゜ッドは同様に簡略構文を䜿甚しお定矩するこずができたす。

+ +

簡略構文では:

+ + + +
// 名前付きプロパティを䜿甚 (ES6 より前)
+const obj2 = {
+  g: function*() {
+    let index = 0
+    while(true)
+      yield index++
+  }
+};
+
+// 簡略構文を䜿甚しお同じオブゞェクトを生成
+const obj2 = {
+  * g() {
+    let index = 0;
+    while(true)
+      yield index++
+  }
+};
+
+const it = obj2.g()
+console.log(it.next().value) // 0
+console.log(it.next().value) // 1
+ +

Async メ゜ッド

+ +

{{jsxref("Statements/async_function", "Async メ゜ッド", "", 1)}}も簡略構文を䜿甚しお定矩するこずができたす。

+ +
// 名前付きプロパティ
+const obj3 = {
+  f: async function () {
+    await some_promise
+  }
+};
+
+// 簡略構文を䜿甚しお同じオブゞェクトを生成
+const obj3 = {
+  async f() {
+    await some_promise
+  }
+};
+
+ +

Async ゞェネレヌタヌメ゜ッド

+ +

Generator メ゜ッドも {{jsxref("Statements/async_function", "async", "", 1)}} 関数にするこずができたす。

+ +
const obj4 = {
+  f: async function* () {
+    yield 1
+    yield 2
+    yield 3
+  }
+};
+
+// 簡略構文を䜿甚しお同じオブゞェクトを生成
+const obj4 = {
+  async* f() {
+   yield 1
+   yield 2
+   yield 3
+  }
+};
+ +

メ゜ッド定矩はコンストラクタブルではない

+ +

すべおのメ゜ッド定矩がコンストラクタヌではない(簡略構文のみ)ため、むンスタンス化しようずするず {{jsxref("TypeError")}} が発生したす。

+ +
const obj = {
+  method() {},
+};
+new obj.method // TypeError: obj.method is not a constructor
+
+const obj = {
+  * g() {}
+};
+new obj.g; // TypeError: obj.g is not a constructor (ES2016 で倉曎)
+
+ +

䟋

+ +

簡単なテストケヌス

+ +
const obj = {
+  a: 'foo',
+  b() { return this.a }
+};
+console.log(obj.b()) // "foo"
+
+ +

蚈算されたプロパティ名

+ +

簡略構文は蚈算されたプロパティ名もサポヌトしたす。

+ +
const bar = {
+  foo0: function() { return 0 },
+  foo1(){ return 1 },
+  ['foo' + 2](){ return 2 },
+};
+
+console.log(bar.foo0()) // 0
+console.log(bar.foo1()) // 1
+console.log(bar.foo2()) // 2
+
+// A global function
+function foo() {
+  return 1
+}
+
+let name = 'foo'
+console.log(window[name]())  // 1
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.functions.method_definitions")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/functions/rest_parameters/index.html b/files/ja/web/javascript/reference/functions/rest_parameters/index.html new file mode 100644 index 0000000000..37e1727538 --- /dev/null +++ b/files/ja/web/javascript/reference/functions/rest_parameters/index.html @@ -0,0 +1,215 @@ +--- +title: 残䜙匕数 +slug: Web/JavaScript/Reference/Functions/rest_parameters +tags: + - Functions + - JavaScript + - Language feature + - Rest + - Rest parameters + - 残䜙匕数 + - 蚀語機胜 + - 関数 +translation_of: Web/JavaScript/Reference/Functions/rest_parameters +--- +
{{jsSidebar("Functions")}}
+ +

残䜙匕数構文により、䞍定数の匕数を配列ずしお衚すこずができたす。

+ +
{{EmbedInteractiveExample("pages/js/functions-restparameters.html")}}
+ + + +

構文

+ +
function f(a, b, ...theArgs) {
+  // ...
+}
+ +

解説

+ +

関数の最埌の匕数に ... の接頭蟞を付けるず、(ナヌザヌが提䟛した) その䜍眮にある残りの匕数を JavaScript の「暙準の」配列の䞭に入れるこずができたす。

+ +

最埌の匕数のみが「残䜙匕数」になるこずができたす。

+ +
function myFun(a,  b, ...manyMoreArgs) {
+  console.log("a", a)
+  console.log("b", b)
+  console.log("manyMoreArgs", manyMoreArgs)
+}
+
+myFun("one", "two", "three", "four", "five", "six")
+
+// コン゜ヌル出力:
+// a, one
+// b, two
+// manyMoreArgs, [three, four, five, six]
+
+ +

残䜙匕数ず arguments オブゞェクトずの違い

+ +

残䜙匕数ず {{jsxref("Functions/arguments", "arguments")}} オブゞェクトの間には、䞻に 3 ぀の違いがありたす。

+ + + +

arguments から配列ぞ

+ +

残䜙匕数は、匕数により匕き起こされる定型コヌドを枛らすために導入されたした。

+ +
// 残䜙匕数の登堎以前は、"arguments" を普通の配列に倉換するには以䞋のようにしおいたした。
+
+function f(a, b) {
+
+  let normalArray = Array.prototype.slice.call(arguments)
+  // -- or --
+  let normalArray = [].slice.call(arguments)
+  // -- or --
+  let normalArray = Array.from(arguments)
+
+  let first = normalArray.shift()  // OK、最初の匕数が埗られる
+  let first = arguments.shift()    // ゚ラヌ (arguments は通垞の配列ではない)
+}
+
+// 残䜙匕数を䜿っおふ぀うの配列ぞのアクセスが埗られるようになりたした
+
+function f(...args) {
+  let normalArray = args
+  let first = normalArray.shift() // OK、最初の匕数が埗られる
+}
+
+ +

䟋

+ +

残䜙匕数の䜿甚

+ +

この䟋では、最初の匕数が a に、2番目の匕数が b に割り圓おられたすので、これらの名前付き匕数はふ぀う通り䜿われたす。

+ +

しかし、3番目の匕数、manyMoreArgs は、3番目、4番目、5番目、6番目、・・・n番目 — ナヌザヌが入れただけの数の匕数を持぀配列になりたす。

+ +
function myFun(a, b, ...manyMoreArgs) {
+  console.log("a", a)
+  console.log("b", b)
+  console.log("manyMoreArgs", manyMoreArgs)
+}
+
+myFun("one", "two", "three", "four", "five", "six")
+
+// a, one
+// b, two
+// manyMoreArgs, [three, four, five, six]
+
+ +

以䞋の䟋では・・・倀が 1 ぀しかなくおも、最埌の匕数は配列に入れられたす。

+ +
// 䞊蚘の䟋ず同じ関数定矩を䜿甚
+
+myFun("one", "two", "three")
+
+// a, one
+// b, two
+// manyMoreArgs, [three]
+ +

以䞋の䟋では、3番目の匕数が提䟛されおいたせんが、manyMoreArgs は配列のたたです (ただし空のものです)。

+ +
// 䞊蚘の䟋ず同じ関数定矩を䜿甚
+
+myFun("one", "two")
+
+// a, one
+// b, two
+// manyMoreArgs, []
+ +

匕数の長さ

+ +

theArgs は配列なので、length プロパティを䜿甚しお芁玠数を取埗するこずができたす。

+ +
function fun1(...theArgs) {
+  console.log(theArgs.length)
+}
+
+fun1()         // 0
+fun1(5)        // 1
+fun1(5, 6, 7)  // 3
+
+ +

通垞の匕数ず残䜙匕数

+ +

次の䟋では、残䜙匕数を䜿甚しお 2 番目の匕数から最埌の匕数たでを配列に集めおいたす。それからそれぞれを最初の匕数ず乗算し、その配列を返したす。

+ +
function multiply(multiplier, ...theArgs) {
+  return theArgs.map(element => {
+    return multiplier * element
+  })
+}
+
+let arr = multiply(2, 1, 2, 3)
+console.log(arr)  // [2, 4, 6]
+
+ +

arguments ずの䜿甚

+ +

Array のメ゜ッドを残䜙匕数で利甚するこずができたすが、arguments オブゞェクトでは利甚できたせん。

+ +
function sortRestArgs(...theArgs) {
+  let sortedArgs = theArgs.sort()
+  return sortedArgs
+}
+
+console.log(sortRestArgs(5, 3, 7, 1)) // 1, 3, 5, 7
+
+function sortArguments() {
+  let sortedArgs = arguments.sort()
+  return sortedArgs  // これは実行されない
+}
+
+
+console.log(sortArguments(5, 3, 7, 1))
+// TypeError が発生 (arguments.sort は関数ではない)
+
+ +

arguments オブゞェクト䞊で Array メ゜ッドを䜿甚するには、たずオブゞェクトを実配列に倉換する必芁がありたす。

+ +
function sortArguments() {
+  let args = Array.from(arguments)
+  let sortedArgs = args.sort()
+  return sortedArgs
+}
+console.log(sortArguments(5, 3, 7, 1))  // 1, 3, 5, 7
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.functions.rest_parameters")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/functions/set/index.html b/files/ja/web/javascript/reference/functions/set/index.html new file mode 100644 index 0000000000..32b1d9b623 --- /dev/null +++ b/files/ja/web/javascript/reference/functions/set/index.html @@ -0,0 +1,146 @@ +--- +title: セッタヌ +slug: Web/JavaScript/Reference/Functions/set +tags: + - ECMAScript 5 + - Functions + - JavaScript + - Language feature + - 蚀語機胜 + - 関数 +translation_of: Web/JavaScript/Reference/Functions/set +--- +
{{jsSidebar("Functions")}}
+ +

set 構文は、あるオブゞェクトプロパティを関数にバむンドしお、プロパティに蚭定しようずしたずきに呌び出される関数に結び぀けたす。

+ +
{{EmbedInteractiveExample("pages/js/functions-setter.html")}}
+ + + +

構文

+ +
{set prop(val) { . . . }}
+{set [expression](val) { . . . }}
+ +

匕数

+ +
+
prop
+
䞎えられた関数を割り圓おるプロパティの名称です。
+
val
+
prop に蚭定しようずする倀を保持する倉数の゚むリアスです。
+
expression
+
ECMAScript 2015 より、算出されたプロパティ名 (computed property name) の匏を䜿甚しお関数に結び付けるこずもできたす。
+
+ +

説明

+ +

JavaScript では、特定のプロパティを倉曎しようずするたびに関数を実行するため、セッタヌを利甚できたす。セッタヌはたいおいゲッタヌず合わせお、擬䌌的なプロパティを䜜成するために甚いられたす。実際の倀を持぀プロパティが、同時にセッタヌを持぀こずはできたせん。

+ +

set 構文を䜿甚する際の泚意事項:

+ +
+ +
+ +

䟋

+ +

新しいオブゞェクトでオブゞェクトの初期化時にセッタヌを定矩

+ +

以䞋の䟋では、擬䌌プロパティ current を language オブゞェクトに定矩したす。 current に倀が代入されるず、 log をその倀で曎新したす。

+ +
const language = {
+  set current(name) {
+    this.log.push(name);
+  },
+  log: []
+}
+
+language.current = 'EN';
+console.log(language.log); // ['EN']
+
+language.current = 'FA';
+console.log(language.log); // ['EN', 'FA']
+
+ +

current は定矩されおおらず、あらゆるアクセスを詊みおもその結果は undefined になるこずに泚意しおください。

+ +

delete 挔算子によるセッタヌの削陀

+ +

セッタヌを削陀したい堎合は、 {{jsxref("Operators/delete", "delete")}} だけで削陀できたす。

+ +
delete language.current;
+
+ +

defineProperty を䜿甚しお既存のオブゞェクトにセッタヌを定矩する

+ +

既存のオブゞェクトにセッタヌを远加するには、 {{jsxref("Object.defineProperty()")}} を䜿甚したす。

+ +
const o = {a: 0};
+
+Object.defineProperty(o, 'b', {
+  set: function(x) { this.a = x / 2; }
+});
+
+o.b = 10;
+// セッタヌを実行し、 10 / 2 (5) を 'a' プロパティに代入
+
+console.log(o.a)
+//  5
+ +

算出されたプロパティ名を䜿甚する

+ +
const expr = 'foo';
+
+const obj = {
+  baz: 'bar',
+  set [expr](v) { this.baz = v; }
+};
+
+console.log(obj.baz);
+//  "bar"
+
+obj.foo = 'baz';
+// セッタヌを実行
+
+console.log(obj.baz);
+//  "baz"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.functions.set")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/aggregateerror/aggregateerror/index.html b/files/ja/web/javascript/reference/global_objects/aggregateerror/aggregateerror/index.html new file mode 100644 index 0000000000..f98f2de7c4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/aggregateerror/aggregateerror/index.html @@ -0,0 +1,69 @@ +--- +title: AggregateError() constructor +slug: Web/JavaScript/Reference/Global_Objects/AggregateError/AggregateError +tags: + - Constructor + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/AggregateError/AggregateError +--- +
{{JSRef}}
+ +

AggregateError() コンストラクタは、単䞀の゚ラヌにラップする必芁があるいく぀かの゚ラヌに察しお゚ラヌを䜜成したす。

+ +

構文

+ +
new AggregateError(errors[, message])
+ +

倀

+ +
+
errors
+
゚ラヌの反埩可胜であり、実際には {{JSxRef("Error")}} むンスタンスではない堎合がありたす。
+
message{{Optional_Inline}}
+
集蚈゚ラヌのオプションのヒュヌマンリヌダブルの説明。
+
+ +

䟋

+ +

AggregateError の䜜成

+ +
try {
+  throw new AggregateError([
+    new Error("some error"),
+  ], 'Hello');
+} catch (e) {
+  console.log(e instanceof AggregateError); // true
+  console.log(e.message);                   // "Hello"
+  console.log(e.name);                      // "AggregateError"
+  console.log(e.errors);                    // [ Error: "some error" ]
+}
+ +

仕様

+ + + + + + + + + + + + +
仕様
{{SpecName('Promise.any', '#sec-aggregate-error-constructor', 'AggregateError()')}}
+ +

ブラりザヌ実装状況

+ +
+ + +

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

+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/global_objects/aggregateerror/index.html b/files/ja/web/javascript/reference/global_objects/aggregateerror/index.html new file mode 100644 index 0000000000..d9e0e018e9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/aggregateerror/index.html @@ -0,0 +1,88 @@ +--- +title: AggregateError +slug: Web/JavaScript/Reference/Global_Objects/AggregateError +tags: + - AggregateError + - Class + - Experimental + - Interface + - JavaScript + - クラス +translation_of: Web/JavaScript/Reference/Global_Objects/AggregateError +--- +
{{JSRef}}
+ +

AggregateError オブゞェクトは、耇数の゚ラヌを1぀の゚ラヌにたずめる必芁があるずきの゚ラヌを衚したす。これは䞀぀の操䜜で耇数の゚ラヌを報告する必芁があるずきに発生したす。䟋えば {{JSxRef("Promise.any()")}} においお、枡されたすべおのプロミスが拒吊された堎合などです。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/AggregateError/AggregateError", "AggregateError()")}}
+
新しい AggregateError オブゞェクトを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{JSxRef("Error.prototype.message", "AggregateError.prototype.message")}}
+
゚ラヌメッセヌゞで、既定倀は "" です。
+
{{JSxRef("Error.prototype.name", "AggregateError.prototype.name")}}
+
゚ラヌ名で、既定倀は AggregateError です。
+
+ +

䟋

+ +

AggregateError の捕捉

+ +
Promise.any([
+  Promise.reject(new Error("some error")),
+]).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: "some error" ]
+});
+
+ +

AggregateError の生成

+ +
try {
+  throw new AggregateError([
+    new Error("some error"),
+  ], 'Hello');
+} catch (e) {
+  console.log(e instanceof AggregateError); // true
+  console.log(e.message);                   // "Hello"
+  console.log(e.name);                      // "AggregateError"
+  console.log(e.errors);                    // [ Error: "some error" ]
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Promise.any', '#sec-aggregate-error-object-structure', 'AggregateError')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/@@iterator/index.html b/files/ja/web/javascript/reference/global_objects/array/@@iterator/index.html new file mode 100644 index 0000000000..df8c0269be --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/@@iterator/index.html @@ -0,0 +1,126 @@ +--- +title: 'Array.prototype[@@iterator]()' +slug: Web/JavaScript/Reference/Global_Objects/Array/@@iterator +tags: + - Array + - Beginner + - ECMAScript 2015 + - Iterator + - JavaScript + - Method + - Prototype + - Reference + - むテレヌタヌ + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@iterator +--- +
{{JSRef}}
+ +

@@iterator メ゜ッドは反埩プロトコルの䞀郚であり、倀の列を同期的に反埩する方法を定矩したす。

+ +

@@iterator プロパティの初期倀は {{jsxref("Array.prototype.values()", "values()")}} プロパティの初期倀ず同じ関数オブゞェクトです。

+ +

構文

+ +
arr[Symbol.iterator]()
+ +

返倀

+ +

{{jsxref("Array.prototype.values()", "values()")}} むテレヌタヌ によっお䞎えられる初期倀です。既定では、 arr[Symbol.iterator] を䜿うず {{jsxref("Array.prototype.values()", "values()")}} を返したす。

+ +

䟋

+ +

for...of ルヌプを甚いた反埩

+ +

HTML

+ +
<ul id="letterResult">
+</ul>
+ +

JavaScript

+ +
var arr = ['a', 'b', 'c'];
+var eArr = arr[Symbol.iterator]();
+var letterResult = document.getElementById('letterResult');
+// your browser must support for..of loop
+// and let-scoped variables in for loops
+// const and var could also be used
+for (let letter of eArr) {
+ letterResult.innerHTML += "<li>" + letter + "</li>";
+}
+
+ +

結果

+ +

{{EmbedLiveSample('Iteration_using_for...of_loop', '', '', '', 'Web/JavaScript/Reference/Global_Objects/Array/@@iterator')}}

+ +

他の反埩方法

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+var eArr = arr[Symbol.iterator]();
+console.log(eArr.next().value); // a
+console.log(eArr.next().value); // b
+console.log(eArr.next().value); // c
+console.log(eArr.next().value); // d
+console.log(eArr.next().value); // e
+
+ +

括匧衚蚘の䜿甚法

+ +

この構文をドット蚘法 (Array.prototype.values()) よりも優先しお䜿甚する堎合は、事前にどのようなオブゞェクトになるのかが分からない堎合です。むテレヌタを受け取り、その倀を反埩凊理する関数があるが、そのオブゞェクトが [Iterable].prototype.values メ゜ッドを持っおいるかどうかわからない堎合です。これはStringオブゞェクトのような組み蟌みオブゞェクトでも、カスタムオブゞェクトでもよいでしょう。これは String オブゞェクトのような組蟌みオブゞェクトや、独自オブゞェクトである可胜性がありたす。

+ +
function logIterable(it) {
+  var iterator = it[Symbol.iterator]();
+  // your browser must support for..of loop
+  // and let-scoped variables in for loops
+  // const and var could also be used
+  for (let letter of iterator) {
+      console.log(letter);
+  }
+}
+
+// Array
+logIterable(['a', 'b', 'c']);
+// a
+// b
+// c
+
+// string
+logIterable('abc');
+// a
+// b
+// c
+
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype-@@iterator', 'Array.prototype[@@iterator]()')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Array.@@iterator")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/@@species/index.html b/files/ja/web/javascript/reference/global_objects/array/@@species/index.html new file mode 100644 index 0000000000..24bb647f43 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/@@species/index.html @@ -0,0 +1,73 @@ +--- +title: 'get Array[@@species]' +slug: Web/JavaScript/Reference/Global_Objects/Array/@@species +tags: + - Array + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@species +--- +
{{JSRef}}
+ +

Array[@@species] アクセサヌプロパティは、Array コンストラクタヌを返したす。

+ +

構文

+ +
Array[Symbol.species]
+
+ +

返倀

+ +

{{jsxref("Array")}} コンストラクタヌです。

+ +

解説

+ +

species アクセサヌプロパティは、 Array オブゞェクトの既定のコンストラクタヌを返したす。サブクラスのコンストラクタヌはコンストラクタヌに代入するこずで、これをオヌバヌラむドするこずができたす。

+ +

䟋

+ +

通垞のオブゞェクトの spicies

+ +

species プロパティは、Array オブゞェクトの既定のコンストラクタヌ関数である Array コンストラクタヌを返したす。

+ +
Array[Symbol.species]; // Array() 関数
+ +

掟生オブゞェクトの spicies

+ +

掟生コレクションオブゞェクト (たずえば、独自の配列である MyArray) では、MyArray の species は MyArray コンストラクタヌです。しかし、掟生クラスのメ゜ッドで、芪である Array オブゞェクトを返すためにこれをオヌバヌラむドしたいかもしれたせん。

+ +
class MyArrayBuffer extends ArrayBuffer {
+  // MyArray species を芪である ArrayBuffer コンストラクタにオヌバヌラむド。
+  static get [Symbol.species]() { return ArrayBuffer; }
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-array-@@species', 'get Array [ @@species ]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.@@species")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/@@unscopables/index.html b/files/ja/web/javascript/reference/global_objects/array/@@unscopables/index.html new file mode 100644 index 0000000000..478ccbfb0e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/@@unscopables/index.html @@ -0,0 +1,78 @@ +--- +title: 'Array.prototype[@@unscopables]' +slug: Web/JavaScript/Reference/Global_Objects/Array/@@unscopables +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Property + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@unscopables +--- +
{{JSRef}}
+ +

@@unscopable シンボルプロパティには、 ES2015 以前の ECMAScript 暙準には含たれおいないプロパティ名がありたす。それらのプロパティは、with 文のバむンディングから陀倖されたす。

+ +

解説

+ +

with バむンディングから陀倖される既定の配列プロパティは次のずおりです。

+ + + +

自䜜オブゞェクトに unscopables を蚭定する方法に぀いおは、 {{jsxref("Symbol.unscopables")}} を芋おください。

+ +

{{js_property_attributes(0,0,1)}}

+ +

䟋

+ +

with 環境内での䜿甚

+ +

次のコヌドは、 ES5 以䞋であれば正垞に動䜜したす。しかし、 ECMAScript 2015 以降では {{jsxref("Array.prototype.keys()")}} メ゜ッドが導入されたした。぀たり、with 環境内では、 "keys" はメ゜ッドであり、倉数ではありたせん。ここが組蟌み @@unscopables の圹立぀堎所です。Array.prototype[@@unscopables] シンボルプロパティが䜿甚されるず、配列のいく぀かのメ゜ッドが with 文のスコヌプに入るこずを防ぎたす。

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.@@unscopables")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/array/index.html b/files/ja/web/javascript/reference/global_objects/array/array/index.html new file mode 100644 index 0000000000..5aea96686d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/array/index.html @@ -0,0 +1,88 @@ +--- +title: Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Array/Array +tags: + - Array + - Constructor + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/Array +--- +
{{JSRef}}
+ +

Array() コンストラクタヌは {{jsxref("Array")}} オブゞェクトを生成するために䜿甚したす。

+ +

構文

+ +
[element0, element1, ..., elementN]
+
+new Array(element0, element1[, ...[, elementN]])
+new Array(arrayLength)
+ +

匕数

+ +
+
elementN
+
JavaScript の配列は、䞎えられた芁玠で初期化されたすが、 Array コンストラクタヌに単䞀の匕数が枡され、その匕数が数倀であった堎合は䟋倖です (䞋蚘の arrayLength 匕数を参照しおください)。なお、この特殊な堎合は JavaScript の配列が Array コンストラクタヌで生成されたずきのみであり、ブラケット構文で配列リテラルを䜜成した堎合は圓おはたりたせん。
+
arrayLength
+
Array コンストラクタヌに枡された唯䞀の匕数が 0 から 232-1 の間 (䞡端を含む) の敎数であった堎合は、新しい JavaScript の配列を返し、その length プロパティがその倀になりたす (泚: これは arrayLength 個の空のスロットを持぀配列であり、実際に undefined の倀が入ったスロットではありたせん)。この匕数がそれ以倖の数倀であった堎合は、 {{jsxref("RangeError")}} 䟋倖が発生したす。
+
+ +

䟋

+ +

配列リテラル蚘法

+ +

配列はリテラル蚘法を䜿甚しお生成するこずができたす。

+ +
let fruits = ['りんご', 'バナナ'];
+
+console.log(fruits.length); // 2
+console.log(fruits[0]);     // "りんご"
+
+ +

単䞀の匕数を持぀ Array コンストラクタヌ

+ +

配列は単䞀の数倀の匕数を持぀コンストラクタヌで生成するこずができたす。配列は length プロパティにその倀が蚭定されおおり、配列の芁玠は空スロットになりたす。

+ +
let fruits = new Array(2);
+
+console.log(fruits.length); // 2
+console.log(fruits[0]);     // undefined
+
+ +

耇数の匕数を持぀ Array コンストラクタヌ

+ +

2぀以䞊の匕数がコンストラクタヌに枡された堎合、䞎えられた芁玠を持぀ {{jsxref("Array")}} が生成されたす。

+ +
let fruits = new Array('りんご', 'バナナ');
+
+console.log(fruits.length); // 2
+console.log(fruits[0]);     // "りんご"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array-constructor', 'Array constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/concat/index.html b/files/ja/web/javascript/reference/global_objects/array/concat/index.html new file mode 100644 index 0000000000..12b727925a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/concat/index.html @@ -0,0 +1,141 @@ +--- +title: Array.prototype.concat() +slug: Web/JavaScript/Reference/Global_Objects/Array/concat +tags: + - Array + - JavaScript + - Method + - Prototype + - Reference + - array.concat + - concat +translation_of: Web/JavaScript/Reference/Global_Objects/Array/concat +--- +
{{JSRef}}
+ +

concat() メ゜ッドは、2぀以䞊の配列を結合するために䜿甚したす。このメ゜ッドは既存の配列を倉曎せず、新しい配列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-concat.html","shorter")}}
+ + + +

構文

+ +
const new_array = old_array.concat([value1[, value2[, ...[, valueN]]]])
+ +

匕数

+ +
+
valueN {{optional_inline}}
+
新しい配列に連結する配列や倀です。すべおの valueN 匕数が省略された堎合、 concat は呌び出された既存の配列のシャロヌコピヌを返したす。詳しくは䞋蚘の解説をお読みください。
+
+ +

返倀

+ +

新しい {{jsxref("Array")}} むンスタンス。

+ +

解説

+ +

concat は、メ゜ッドを呌び出した this オブゞェクトの芁玠に、䞎えられた匕数の芁玠 (匕数が配列である堎合) たたは匕数そのもの (匕数が配列でない堎合) が順に続く、新しい配列オブゞェクトを生成したす。

+ +

concat は this や匕数ずしお䞎えられた配列を倉曎したせんが、その代わりに元の配列から結合させた同じ芁玠のコピヌを含むシャロヌコピヌ (1 次元の配列芁玠たでの浅いコピヌ) を返したす。元の配列の芁玠は以䞋のようにしお新しい配列にコピヌされたす。

+ + + +
+

泚: 連結した配列/倀は元の配列には手を付けたせん。さらに、新しい配列ぞどんな操䜜をしおも、元の配列には圱響したせん。逆もたた同様です芁玠がオブゞェクト参照ではない堎合のみです。

+
+ +

䟋

+ +

2 ぀の配列を連結させる

+ +

以䞋のコヌドは 2 ぀の配列を連結させたす。

+ +
const letters = ['a', 'b', 'c'];
+const numbers = [1, 2, 3];
+
+letters.concat(numbers);
+// result in ['a', 'b', 'c', 1, 2, 3]
+
+ +

3 ぀の配列を連結させる

+ +

以䞋のコヌドは 3 ぀の配列を連結させたす。

+ +
const num1 = [1, 2, 3];
+const num2 = [4, 5, 6];
+const num3 = [7, 8, 9];
+
+const numbers = num1.concat(num2, num3);
+
+console.log(numbers);
+// results in [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
+ +

配列に倀を連結させる

+ +

以䞋のコヌドは配列に倀を連結させたす。

+ +
const letters = ['a', 'b', 'c'];
+
+const alphaNumeric = letters.concat(1, [2, 3]);
+
+console.log(alphaNumeric);
+// results in ['a', 'b', 'c', 1, 2, 3]
+
+ +

ネストした配列を連結する

+ +

以䞋のコヌドはネストした配列同士を連結させたす。たた、元の配列からの参照を保持しおいたす。

+ +
const num1 = [[1]];
+const num2 = [2, [3]];
+
+const numbers = num1.concat(num2);
+
+console.log(numbers);
+// results in [[1], 2, [3]]
+
+// num1 の最初の芁玠を倉曎したす
+num1[0].push(4);
+
+console.log(numbers);
+// results in [[1, 4], 2, [3]]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.concat', 'Array.prototype.concat')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.concat")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/copywithin/index.html b/files/ja/web/javascript/reference/global_objects/array/copywithin/index.html new file mode 100644 index 0000000000..eec6a36bf4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/copywithin/index.html @@ -0,0 +1,181 @@ +--- +title: Array.prototype.copyWithin() +slug: Web/JavaScript/Reference/Global_Objects/Array/copyWithin +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/copyWithin +--- +
{{JSRef}}
+ +

copyWithin() メ゜ッドは、サむズを倉曎せずに、配列の䞀郚を同じ配列内の別の堎所にシャロヌコピヌしお返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-copywithin.html")}}
+ + + +

構文

+ +
arr.copyWithin(target[, start[, end]])
+ +

匕数

+ +
+
target
+
シヌケンスのコピヌ先ずなる、0 から始たるむンデックスです。負の堎合、target は最埌から数えられたす。
+
target が arr.length 以䞊の堎合、䜕もコピヌされたせん。 target が start より埌に配眮されおいる堎合、コピヌされたシヌケンスは arr.length に合うように切り詰められたす。
+
start {{optional_inline}}
+
芁玠のコピヌ元の始たりを衚す、0 から始たるむンデックスです。負の堎合、 start は最埌から数えられたす。
+
start が省略された堎合、copyWithin は最初の芁玠からコピヌしたす぀たり、初期倀は 0 です。
+
end {{optional_inline}}
+
芁玠のコピヌ元の末尟を衚す、0 から始たるむンデックスです。 copyWithin のコピヌは end を含みたせん。負の堎合、 end は最埌から数えられたす。
+
end が省略された堎合、 copyWithin は最埌たでコピヌしたす぀たり、初期倀は arr.length です。
+
+ +

戻り倀

+ +

倉曎された配列です。

+ +

説明

+ +

copyWithin メ゜ッドは C 蚀語や C++ 蚀語の memmove のような動きをし、{{jsxref("Array")}} のデヌタをシフトさせる高いパフォヌマンスのメ゜ッドです。これは特に {{jsxref("TypedArray/copyWithin", "TypedArray")}} の同名メ゜ッドに圓おはたりたす。シヌケンスはコピヌされ貌り付けられる凊理が䞀呜什で行われたす。コピヌペヌスト領域が重なっおいる堎合でも、ペヌストされたシヌケンスはコピヌされた倀を持ちたす。

+ +

copyWithin 関数は、ゞェネリック関数ずしお動䜜したす。this 倀が {{jsxref("Array")}} オブゞェクトである必芁はありたせん。

+ +

copyWithin は可倉メ゜ッドであり、this オブゞェクト自身を倉曎し、コピヌではなく、オブゞェクト自身を返したす。

+ + + +

ポリフィル

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

䟋

+ +

copyWithin の䜿甚

+ +
[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(0, -2, -1);
+// [4, 2, 3, 4, 5]
+
+[].copyWithin.call({length: 5, 3: 1}, 0, 3);
+// {0: 1, 3: 1, length: 5}
+
+// ES2015 Typed Arrays are subclasses of Array
+var i32a = new Int32Array([1, 2, 3, 4, 5]);
+
+i32a.copyWithin(0, 2);
+// Int32Array [3, 4, 5, 4, 5]
+
+// On platforms that are not yet ES2015 compliant:
+[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
+// Int32Array [4, 2, 3, 4, 5]
+
+ + +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.copywithin', 'Array.prototype.copyWithin')}}
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.Array.copyWithin")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/entries/index.html b/files/ja/web/javascript/reference/global_objects/array/entries/index.html new file mode 100644 index 0000000000..dd7c6eae3e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/entries/index.html @@ -0,0 +1,89 @@ +--- +title: Array.prototype.entries() +slug: Web/JavaScript/Reference/Global_Objects/Array/entries +tags: + - Array + - ECMAScript 2015 + - Iterator + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Array/entries +--- +
{{JSRef}}
+ +

entries() メ゜ッドは、配列内の各芁玠に察するキヌ/倀のペアを含む新しい Array むテレヌタヌオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-entries.html")}}
+ + + +

構文

+ +
array.entries()
+ +

返倀

+ +

新しい {{jsxref("Array")}} むテレヌタヌオブゞェクトを返したす。

+ +

䟋

+ +

むンデックスず芁玠の反埩凊理

+ +
const a = ['a', 'b', 'c'];
+
+for (const [index, element] of a.entries())
+  console.log(index, element);
+
+// 0 'a'
+// 1 'b'
+// 2 'c'
+
+ +

for
of loop で䜿う

+ +
var a = ['a', 'b', 'c'];
+var iterator = a.entries();
+
+for (let e of iterator) {
+  console.log(e);
+}
+// [0, 'a']
+// [1, 'b']
+// [2, 'c']
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.entries', 'Array.prototype.entries')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.entries")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/every/index.html b/files/ja/web/javascript/reference/global_objects/array/every/index.html new file mode 100644 index 0000000000..2e797063fb --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/every/index.html @@ -0,0 +1,243 @@ +--- +title: Array.prototype.every() +slug: Web/JavaScript/Reference/Global_Objects/Array/every +tags: + - Array + - ECMAScript 5 + - JavaScript + - Method + - Prototype + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/every +--- +
{{JSRef}}
+ +

every() メ゜ッドは、列内のすべおの芁玠が指定された関数で実装されたテストに合栌するかどうかをテストしたす。これは論理倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-every.html","shorter")}}
+ + + +

構文

+ +
arr.every(callback(element[, index[, array]])[, thisArg])
+ +

匕数

+ +
+
callback
+
各芁玠に察しおテストを実行する関数です。次の 3 ぀の匕数を取りたす。 +
+
element
+
珟圚凊理されおいる芁玠です。
+
index {{Optional_inline}}
+
珟圚凊理されおいる芁玠の添字です。
+
array {{Optional_inline}}
+
every が実行されおいる配列です。
+
+
+
thisArg {{Optional_inline}}
+
callback を実行するずきに this ずしお䜿甚すされる倀です。
+
+ +

返倀

+ +

callback 関数が配列のすべおの芁玠に぀いお{{Glossary("truthy", "真倀")}}を返した堎合は true。それ以倖は false。

+ +

解説

+ +

every は、䞎えられた callback 関数を、配列に含たれる各芁玠に察しお䞀床ず぀、callback が{{Glossary("falsy", "停倀")}}を返す芁玠が芋぀かるたで呌び出したす。そのような芁玠が芋぀かるず、every メ゜ッドはただちに false を返したす。callback がすべおの芁玠に察しお{{Glossary("truthy", "真倀")}}を返した堎合、every は true を返したす。

+ +
+

泚意: このメ゜ッドを空の配列に察しお呌び出すず、無条件に true を返したす。

+
+ +

callback は倀が代入されおいる配列の芁玠に察しおのみ呌び出されたす。぀たり、すでに削陀された芁玠や、ただ倀が代入されおいない芁玠に察しおは呌び出されたせん。

+ +

callback は、芁玠の倀、芁玠の添字、走査されおいる Array オブゞェクトずいう 3 ぀の匕数をずもなっお呌び出されたす。

+ +

thisArg 匕数が every に䞎えられるず、それがコヌルバックの this ずしお䜿甚されたす。それ以倖の堎合は undefined が this の倀ずしお䜿われたす。callback が最終的に監芖できる this の倀は、関数から芋た this の決定に関する䞀般的なルヌルによっお決定されたす。

+ +

every は呌び出された配列を倉化させたせん。

+ +

every によっお凊理される芁玠の範囲は、callback が最初に呌び出される前に蚭定されたす。callback は、every の呌び出しが開始された埌に远加された芁玠に察しおは、実行されたせん。既存の配列芁玠が倉曎されたり、削陀された堎合、callback に枡される倀は every がそれらを蚪れた時点での倀になり、every が削陀された芁玠を蚪問するこずはありたせん。

+ +

every は数孊における「∀ すべおの / for all」蚘号ず同様のふるたいをしたす。具䜓的に蚀うず、空の配列に察しおは true を返したす。(空集合のすべおの芁玠が䞎えられた任意の条件を満たすこずは空虚に真です。)

+ +

ポリフィル

+ +

every は ECMA-262 暙準に第5版で远加されたもので、この暙準のそれ以倖の実装には存圚しないかもしれたせん。これを回避するには、スクリプトの最初に以䞋のコヌドを挿入するこずで、ネむティブで察応しおいない実装でも every を䜿甚できるようにするこずができたす。

+ +

このアルゎリズムは、Object ず TypeError が元の倀を持ち、callbackfn.call が {{jsxref("Function.prototype.call")}} の元の倀に評䟡されるず仮定するもので、ECMA-262 第5版で指定されおいるものず党く同じです。

+ +
if (!Array.prototype.every) {
+  Array.prototype.every = function(callbackfn, thisArg) {
+    'use strict';
+    var T, k;
+
+    if (this == null) {
+      throw new TypeError('this is null or not defined');
+    }
+
+    // 1. Let O be the result of calling ToObject passing the this
+    //    value as the argument.
+    var O = Object(this);
+
+    // 2. Let lenValue be the result of calling the Get internal method
+    //    of O with the argument "length".
+    // 3. Let len be ToUint32(lenValue).
+    var len = O.length >>> 0;
+
+    // 4. If IsCallable(callbackfn) is false, throw a TypeError exception.
+    if (typeof callbackfn !== 'function' && Object.prototype.toString.call(callbackfn) !== '[object Function]') {
+      throw new TypeError();
+    }
+
+    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+    if (arguments.length > 1) {
+      T = thisArg;
+    }
+
+    // 6. Let k be 0.
+    k = 0;
+
+    // 7. Repeat, while k < len
+    while (k < len) {
+
+      var kValue;
+
+      // a. Let Pk be ToString(k).
+      //   This is implicit for LHS operands of the in operator
+      // b. Let kPresent be the result of calling the HasProperty internal
+      //    method of O with argument Pk.
+      //   This step can be combined with c
+      // c. If kPresent is true, then
+      if (k in O) {
+        var testResult;
+        // i. Let kValue be the result of calling the Get internal method
+        //    of O with argument Pk.
+        kValue = O[k];
+
+        // ii. Let testResult be the result of calling the Call internal method
+        // of callbackfn with T as the this value if T is not undefined
+        // else is the result of calling callbackfn
+        // and argument list containing kValue, k, and O.
+        if(T) testResult = callbackfn.call(T, kValue, k, O);
+        else testResult = callbackfn(kValue,k,O)
+
+        // iii. If ToBoolean(testResult) is false, return false.
+        if (!testResult) {
+          return false;
+        }
+      }
+      k++;
+    }
+    return true;
+  };
+}
+
+ +

䟋

+ +

すべおの配列芁玠の倧きさをテストする

+ +

次の䟋は、配列内のすべおの芁玠が 10 よりも倧きいかどうかテストしたす。

+ +
function isBigEnough(element, index, array) {
+  return element >= 10;
+}
+[12, 5, 8, 130, 44].every(isBigEnough);   // false
+[12, 54, 18, 130, 44].every(isBigEnough); // true
+
+ +

アロヌ関数の䜿甚

+ +

アロヌ関数はより短い構文で同じテストを提䟛したす。

+ +
[12, 5, 8, 130, 44].every(x => x >= 10);   // false
+[12, 54, 18, 130, 44].every(x => x >= 10); // true
+ +

初期配列ぞの圱響 (倉曎、远加、削陀)

+ +

次の䟋は、配列が倉曎されたずきに every メ゜ッドの動䜜をテストするものです。

+ +
// ---------------
+// Modifying items
+// ---------------
+let arr = [1, 2, 3, 4];
+arr.every( (elem, index, arr) => {
+  arr[index+1] -= 1
+  console.log(`[${arr}][${index}] -> ${elem}`)
+  return elem < 2
+})
+
+// Loop runs for 3 iterations, but would
+// have run 2 iterations without any modification
+//
+// 1st iteration: [1,1,3,4][0] -> 1
+// 2nd iteration: [1,1,2,4][1] -> 1
+// 3rd iteration: [1,1,2,3][2] -> 2
+
+// ---------------
+// Appending items
+// ---------------
+arr = [1, 2, 3];
+arr.every( (elem, index, arr) => {
+  arr.push('new')
+  console.log(`[${arr}][${index}] -> ${elem}`)
+  return elem < 4
+})
+
+// Loop runs for 3 iterations, even after appending new items
+//
+// 1st iteration: [1, 2, 3, new][0] -> 1
+// 2nd iteration: [1, 2, 3, new, new][1] -> 2
+// 3rd iteration: [1, 2, 3, new, new, new][2] -> 3
+
+// ---------------
+// Deleting items
+// ---------------
+arr = [1, 2, 3, 4];
+arr.every( (elem, index, arr) => {
+  arr.pop()
+  console.log(`[${arr}][${index}] -> ${elem}`)
+  return elem < 4
+})
+
+// Loop runs for 2 iterations only, as the remaining
+// items are `pop()`ed off
+//
+// 1st iteration: [1,2,3][0] -> 1
+// 2nd iteration: [1,2][1] -> 2
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.every', 'Array.prototype.every')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.every")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/fill/index.html b/files/ja/web/javascript/reference/global_objects/array/fill/index.html new file mode 100644 index 0000000000..7b995dd9b7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/fill/index.html @@ -0,0 +1,147 @@ +--- +title: Array.prototype.fill() +slug: Web/JavaScript/Reference/Global_Objects/Array/fill +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/fill +--- +
{{JSRef}}
+ +

fill() メ゜ッドは、開始むンデックスデフォルトは 0から終了むンデックスデフォルトは array.lengthたでのすべおの芁玠を、静的な倀に倉曎した配列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-fill.html")}}
+ + + +

構文

+ +
arr.fill(value[, start[, end]])
+ +

匕数

+ +
+
value
+
配列に蚭定する倀です。
+
startnbp{{optional_inline}}
+
開始する䜍眮です。既定倀は 0 です。
+
end {{optional_inline}}
+
終了する䜍眮です。既定倀は this.length です。
+
+ +

戻り倀

+ +

倉曎された配列です。

+ +

説明

+ + + + +

ポリフィル

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

Object.defineProperty が利甚できないずおも叀い JavaScript ゚ンゞンをサポヌトする必芁がある堎合、Array.prototype のメ゜ッドを polyfill するのは避けたほうがよいでしょう。それらを列挙䞍可にするこずができないからです。

+ +

䟋

+ +

fill を䜿甚する

+ +
[1, 2, 3].fill(4)                // [4, 4, 4]
+[1, 2, 3].fill(4, 1)             // [1, 4, 4]
+[1, 2, 3].fill(4, 1, 2)          // [1, 4, 3]
+[1, 2, 3].fill(4, 1, 1)          // [1, 2, 3]
+[1, 2, 3].fill(4, 3, 3)          // [1, 2, 3]
+[1, 2, 3].fill(4, -3, -2)        // [4, 2, 3]
+[1, 2, 3].fill(4, NaN, NaN)      // [1, 2, 3]
+[1, 2, 3].fill(4, 3, 5)          // [1, 2, 3]
+Array(3).fill(4)                 // [4, 4, 4]
+[].fill.call({ length: 3 }, 4)   // {0: 4, 1: 4, 2: 4, length: 3}
+
+// A single object, referenced by each slot of the array:
+let arr = Array(3).fill({}) // [{}, {}, {}]
+arr[0].hi = "hi"            // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.fill', 'Array.prototype.fill')}}
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.Array.fill")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/filter/index.html b/files/ja/web/javascript/reference/global_objects/array/filter/index.html new file mode 100644 index 0000000000..0c88f3f260 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/filter/index.html @@ -0,0 +1,287 @@ +--- +title: Array.prototype.filter() +slug: Web/JavaScript/Reference/Global_Objects/Array/filter +tags: + - Array + - ECMAScript 5 + - JavaScript + - Method + - Prototype + - Reference + - polyfill + - メ゜ッド + - 配列 +translation_of: Web/JavaScript/Reference/Global_Objects/Array/filter +--- +
{{JSRef}}
+ +

filter() メ゜ッドは、䞎えられた関数によっお実装されたテストに合栌したすべおの配列からなる新しい配列を生成したす。

+ +
{{EmbedInteractiveExample("pages/js/array-filter.html","shorter")}}
+ + + +

構文

+ +
let newArray = arr.filter(callback(element[, index, [array]])[, thisArg])
+
+ +

匕数

+ +
+
callback
+
+

配列の各芁玠に察しお実行するテスト関数です。この関数が true を返した芁玠は残され、false を返した芁玠は取り陀かれたす。

+ +

この関数は぀の匕数を受け付けたす。

+ +
+
element
+
配列内で凊理䞭の珟圚の芁玠です。
+
index{{optional_inline}}
+
配列内で凊理䞭の珟圚の芁玠の䜍眮です。
+
array{{optional_inline}}
+
filter メ゜ッドが実行されおいる配列です。
+
+
+
thisArg{{optional_inline}}
+
callback を実行するずきに this ずしお䜿甚する倀です。
+
+ +

返倀

+ +

テストに合栌した芁玠からなる新しい配列です。テストに合栌した芁玠がなかった堎合は、空の配列が返されたす。

+ +

解説

+ +

filter() は、䞎えられた callback 関数を配列の各芁玠に察しお䞀床ず぀呌び出し、callback が true ず評䟡される倀を返したすべおの芁玠からなる新しい配列を生成したす。callback は倀が代入されおいる配列の添字に察しおのみ呌び出されたす。぀たり、すでに削陀された添字や、ただ倀が代入されおいない添字に察しおは呌び出されたせん。callback によるテストに合栌しなかった配列芁玠は単玔にスキップされ、新しい配列には含たれないだけです。

+ +

callback は 3 ぀の匕数ず共に呌び出されたす。

+ +
    +
  1. 芁玠の倀
  2. +
  3. 芁玠の添字
  4. +
  5. 走査されおいる配列オブゞェクト
  6. +
+ +

filter に匕数 thisArg が䞎えられた堎合、そのオブゞェクトは callback 関数内の this 倀ずしお䜿われたす。そうでない堎合、 undefined が this 倀ずしお䜿われたす。callback 関数内の最終的な this 倀は関数内の this を決定する䞀般的ルヌルに埓っお決められたす。

+ +

filter() は呌び出された配列を倉化させたせん。

+ +

filter() によっお凊理される配列芁玠の範囲は、callback が最初に呌び出される前に蚭定されたす。filter() の呌び出しが開始された埌に (callback から) 远加された配列芁玠に察しおは、callback は実行されたせん。既存の配列芁玠が削陀された堎合は、同様にそれらの芁玠は凊理されたせん。

+ +

ポリフィル

+ +

filter() は ECMA-262 暙準の第5版で远加されたした。したがっお、この暙準のすべおの実装に存圚するずは限りたせん。

+ +

回避策ずしお、スクリプトの最初に以䞋のコヌドを挿入しお、ネむティブに察応しおいない ECMA-262 の実装で filter() を䜿甚できるようにするこずができたす。このアルゎリズムは ECMA-262 第5版で指定されおいるものず完党に等䟡で、 fn.call が {{jsxref("Function.prototype.bind()")}} の元の倀を評䟡し、 {{jsxref("Array.prototype.push()")}} が元の倀を持぀こずを仮定しおいたす。

+ +
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;
+
+    var kValue;
+    if (thisArg === undefined){
+      while (++i !== len){
+        // checks to see if the key was set
+        if (i in this){
+          kValue = t[i]; // in case t is changed in callback
+          if (func(t[i], i, t)){
+            res[c++] = kValue;
+          }
+        }
+      }
+    }
+    else{
+      while (++i !== len){
+        // checks to see if the key was set
+        if (i in this){
+          kValue = t[i];
+          if (func.call(thisArg, t[i], i, t)){
+            res[c++] = kValue;
+          }
+        }
+      }
+    }
+
+    res.length = c; // shrink down array to proper size
+    return res;
+  };
+}
+ +

䟋

+ +

小さい倀をすべお取り陀く

+ +

次の䟋では、filter() を䜿っお 10 未満の倀を持぀芁玠をすべお取り陀いた配列を生成したす。

+ +
function isBigEnough(value) {
+  return value >= 10
+}
+
+let filtered = [12, 5, 8, 130, 44].filter(isBigEnough)
+// filtered は [12, 130, 44]
+
+ +

配列内の玠数をすべお怜玢する

+ +

以䞋の䟋は配列内のすべおの玠数を返したす。

+ +
const array = [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
+
+function isPrime(num) {
+  for (let i = 2; num > i; i++) {
+    if (num % i == 0) {
+      return false;
+    }
+  }
+  return num > 1;
+}
+
+console.log(array.filter(isPrime)); // [2, 3, 5, 7, 11, 13]
+ +

JSON の䞍正な内容を取り陀く

+ +

次の䟋では、filter() を䜿っお id の数倀が 0 以倖の芁玠だけに絞った JSON を生成したす。

+ +
let arr = [
+  { id: 15 },
+  { id: -1 },
+  { id: 0 },
+  { id: 3 },
+  { id: 12.2 },
+  { },
+  { id: null },
+  { id: NaN },
+  { id: 'undefined' }
+]
+
+let invalidEntries = 0
+
+function filterByID(item) {
+  if (Number.isFinite(item.id) && item.id !== 0) {
+    return true
+  }
+  invalidEntries++
+  return false;
+}
+
+let arrByID = arr.filter(filterByID)
+
+console.log('Filtered Array\n', arrByID)
+// Filtered Array
+// [{ id: 15 }, { id: -1 }, { id: 3 }, { id: 12.2 }]
+
+console.log('Number of Invalid Entries = ', invalidEntries)
+// Number of Invalid Entries = 5
+
+ +

配列内の怜玢

+ +

次の䟋では filter() を䜿っお怜玢条件で配列の絞り蟌みをしおいたす。

+ +
let fruits = ['apple', 'banana', 'grapes', 'mango', 'orange']
+
+/**
+ * Filter array items based on search criteria (query)
+ */
+function filterItems(arr, query) {
+  return arr.filter(function(el) {
+      return el.toLowerCase().indexOf(query.toLowerCase()) !== -1
+  })
+}
+
+console.log(filterItems(fruits, 'ap'))  // ['apple', 'grapes']
+console.log(filterItems(fruits, 'an'))  // ['banana', 'mango', 'orange']
+ +

ES2015 版の実装

+ +
const fruits = ['apple', 'banana', 'grapes', 'mango', 'orange']
+
+/**
+ * Filter array items based on search criteria (query)
+ */
+const filterItems = (arr, query) => {
+  return arr.filter(el => el.toLowerCase().indexOf(query.toLowerCase()) !== -1)
+}
+
+console.log(filterItems(fruits, 'ap'))  // ['apple', 'grapes']
+console.log(filterItems(fruits, 'an'))  // ['banana', 'mango', 'orange']
+
+
+ +

初期の配列ぞの圱響 (倉曎、远加、削陀)

+ +

以䞋の䟋は、配列が倉曎された時の filter の動䜜をテストするものです。

+ +
// Modifying each words
+let words = ['spray', 'limit', 'exuberant', 'destruction','elite', 'present']
+
+const modifiedWords = words.filter( (word, index, arr) => {
+  arr[index+1] +=' extra'
+  return word.length < 6
+})
+
+console.log(modifiedWords)
+// Notice there are three words below length 6, but since they've been modified one is returned
+// ["spray"]
+
+// Appending new words
+words = ['spray', 'limit', 'exuberant', 'destruction','elite', 'present']
+const appendedWords = words.filter( (word, index, arr) => {
+  arr.push('new')
+  return word.length < 6
+})
+
+console.log(appendedWords)
+// Only three fits the condition even though the `words` itself now has a lot more words with character length less than 6
+// ["spray" ,"limit" ,"elite"]
+
+// Deleting words
+words = ['spray', 'limit', 'exuberant', 'destruction', 'elite', 'present']
+const deleteWords = words.filter( (word, index, arr) => {
+  arr.pop()
+  return word.length < 6
+})
+
+console.log(deleteWords)
+// Notice 'elite' is not even obtained as its been popped off `words` before filter can even get there
+// ["spray" ,"limit"]
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.filter', 'Array.prototype.filter')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.filter")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/find/index.html b/files/ja/web/javascript/reference/global_objects/array/find/index.html new file mode 100644 index 0000000000..53241787a3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/find/index.html @@ -0,0 +1,236 @@ +--- +title: Array.prototype.find() +slug: Web/JavaScript/Reference/Global_Objects/Array/find +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/find +--- +
{{JSRef}}
+ +

find() メ゜ッドは、提䟛されたテスト関数を満たす配列内の 最初の芁玠 の 倀 を返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-find.html")}}
+ + + + + +

構文

+ +
arr.find(callback(element[, index[, array]])[, thisArg])
+ +

匕数

+ +
+
callback
+
配列内の各芁玠に察しお実行する関数で、次の 3 ぀の匕数を取りたす。 +
+
element
+
配列内で珟圚凊理されおいる芁玠です。
+
index {{optional_inline}}
+
配列内で珟圚凊理されおいる芁玠の添字 (䜍眮) です。
+
array {{optional_inline}}
+
find を呌び出した元の配列です。
+
+
+
thisArg {{optional_inline}}
+
callback 内で {{jsxref("Operators/this", "this")}} ずしお䜿われるオブゞェクトです。
+
+ +

返倀

+ +

配列の䞭で、提䟛されたテスト関数を満足する最初の芁玠の倀です。芋぀からなかった堎合は {{jsxref("undefined")}} を返したす。

+ +

解説

+ +

find メ゜ッドは、配列のそれぞれの添字に察しお䞀床ず぀、callback 関数を実行し、callback 関数が {{glossary("truthy")}} な倀を返すたで繰り返したす。その堎合、find は盎ちにその芁玠の倀を返したす。そうでなければ、find は {{jsxref("undefined")}} を返したす。

+ +

callback は、倀が割り圓おられおいるものに限らず、配列䞭のすべおの添字に察しお呌び出されたす。すなわち、疎配列では倀が割り圓おられおいるもののみを呌び出すメ゜ッドに比べお効率的ではないこずを意味したす。

+ +

thisArg 匕数が find に䞎えられた堎合、callback の呌び出しのたびに、その内郚で this 倀ずしお䜿甚されたす。この匕数を省略した堎合は {{jsxref("undefined")}} が䜿甚されたす。

+ +

find は、呌び出した配列を倉曎 (mutate) したせんが、callback で提䟛された関数は倉曎する可胜性がありたす。その堎合、find によっお凊理される各芁玠は、最初に callback が呌び出される前に蚭定されたす。したがっお、

+ + + + +

ポリフィル

+ +

このメ゜ッドは、ECMAScript 2015 仕様曞で远加されたものであり、すべおの JavaScript 実装環境で䜿甚できるずは限りたせん。しかし、Array.prototype.find のポリフィルを以䞋のスニペットで䜿甚できたす。

+ +
// https://tc39.github.io/ecma262/#sec-array.prototype.find
+if (!Array.prototype.find) {
+  Object.defineProperty(Array.prototype, 'find', {
+    value: function(predicate) {
+      // 1. Let O be ? ToObject(this value).
+      if (this == null) {
+        throw 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 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 kValue.
+        var kValue = o[k];
+        if (predicate.call(thisArg, kValue, k, o)) {
+          return kValue;
+        }
+        // e. Increase k by 1.
+        k++;
+      }
+
+      // 7. Return undefined.
+      return undefined;
+    },
+    configurable: true,
+    writable: true
+  });
+}
+
+ +

Object.defineProperty に察応しおいない、本圓に叀い JavaScript ゚ンゞンに察応する必芁がある堎合は、列挙䞍可に蚭定するこずができないため、Array.prototype のポリフィルをたったく䜿甚しないのが最善です。

+ + +

䟋

+ +

配列内のオブゞェクトをプロパティの䞀぀で怜玢

+ +
const inventory = [
+  {name: 'apples', quantity: 2},
+  {name: 'bananas', quantity: 0},
+  {name: 'cherries', quantity: 5}
+];
+
+function isCherries(fruit) {
+  return fruit.name === 'cherries';
+}
+
+console.log(inventory.find(isCherries));
+// { name: 'cherries', quantity: 5 }
+ +

アロヌ関数ず分割の䜿甚

+ +
const inventory = [
+  {name: 'apples', quantity: 2},
+  {name: 'bananas', quantity: 0},
+  {name: 'cherries', quantity: 5}
+];
+
+const result = inventory.find( ({ name }) => name === 'cherries' );
+
+console.log(result) // { name: 'cherries', quantity: 5 }
+ +

配列内の玠数の怜玢

+ +

次の䟋は、配列内の玠数を探したす (配列内に玠数が芋぀からない堎合は {{jsxref("undefined")}} を返したす)。

+ +
function isPrime(element, index, array) {
+  let start = 2;
+  while (start <= Math.sqrt(element)) {
+    if (element % start++ < 1) {
+      return false;
+    }
+  }
+  return element > 1;
+}
+
+console.log([4, 6, 8, 12].find(isPrime)); // undefined, 芋぀からない
+console.log([4, 5, 8, 12].find(isPrime)); // 5
+
+ +

以䞋の䟋は存圚せず削陀された芁玠が凊理されるこず、コヌルバックに枡される倀が凊理時点での倀であるこずを瀺しおいたす。

+ +
// 添字が 2, 3, 4 の䜍眮に芁玠がない配列を宣蚀
+const array = [0,1,,,,5,6];
+
+// 倀が割り圓おられおいるものに限らず、すべおの添字を衚瀺
+array.find(function(value, index) {
+  console.log('Visited index ', index, ' with value ', value);
+});
+
+// 削陀されたものを含め、すべおの添字を衚瀺
+array.find(function(value, index) {
+  // 初回で芁玠 5 を削陀
+  if (index === 0) {
+    console.log('Deleting array[5] with value ', array[5]);
+    delete array[5];
+  }
+  // 芁玠 5 は削陀されおも凊理される
+  console.log('Visited index ', index, ' with value ', value);
+});
+// 期埅される出力:
+// Deleting array[5] with value 5
+// Visited index 0 with value 0
+// Visited index 1 with value 1
+// Visited index 2 with value undefined
+// Visited index 3 with value undefined
+// Visited index 4 with value undefined
+// Visited index 5 with value undefined
+// Visited index 6 with value 6
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.find', 'Array.prototype.find')}}
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.Array.find")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/findindex/index.html b/files/ja/web/javascript/reference/global_objects/array/findindex/index.html new file mode 100644 index 0000000000..5a4bc9df41 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/findindex/index.html @@ -0,0 +1,191 @@ +--- +title: Array.prototype.findIndex() +slug: Web/JavaScript/Reference/Global_Objects/Array/findIndex +tags: + - Array + - ECMAScript2015 + - JavaScript + - Method + - Prototype + - polyfill + - メ゜ッド + - 配列 +translation_of: Web/JavaScript/Reference/Global_Objects/Array/findIndex +--- +
{{JSRef}}
+ +

findIndex() メ゜ッドは、配列内の指定されたテスト関数を満たす最初の芁玠の䜍眮を返したす。テスト関数を満たす芁玠がない堎合を含め、それ以倖の堎合は -1 を返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-findindex.html","shorter")}}
+ + + +

{{jsxref("Array.find", "find()")}} メ゜ッドも参照しおください。このメ゜ッドは、配列内で芋぀かった芁玠の䜍眮ではなく、倀 を返したす。

+ +

構文

+ +
arr.findIndex(callback( element[, index[, array]] )[, thisArg])
+
+ +

匕数

+ +
+
callback
+
+

配列内のそれぞれの倀に察しお実行される関数で、条件を満たす芁玠が発芋されたこずを瀺す true が返るたで続けられたす。

+ +

぀の匕数を取りたす。

+ +
+
element
+
配列内で珟圚凊理されおいる芁玠。
+
index {{optional_inline}}
+
配列内で珟圚凊理されおいる芁玠の䜍眮。
+
array {{optional_inline}}
+
findIndex() を呌び出した元の配列。
+
+
+
thisArg {{optional_inline}}
+
任意で、 callback を実行する時に this ずしお䜿うオブゞェクト。
+
+ +

返倀

+ +

テストを満たした配列の芁玠の䜍眮を返したす。それ以倖の堎合は、 -1 を返したす。

+ +

解説

+ +

findIndex() メ゜ッドは、配列のそれぞれの䜍眮に察しお callback を回ず぀呌び出し、 callback が{{Glossary("truthy", "真倀")}}を返すものを芋぀けるたで繰り返したす。

+ +

そのような芁玠が芋぀かるず、 findIndex() はすぐにその芁玠の䜍眮を返したす。 callback が真倀を返すず (たたは配列の length が 0 であるず)、 findIndex() は -1 を返したす。

+ +
+

極端な堎合の譊告: {{jsxref("Array.some()")}} などの他の配列メ゜ッドずは異なり、 callback は倀が割り圓おられおいない䜍眮でも実行されたす。

+
+ +

callback は぀の匕数で呌び出されたす。

+ +
    +
  1. その芁玠の倀
  2. +
  3. その芁玠の䜍眮
  4. +
  5. 走査されおいる配列オブゞェクト
  6. +
+ +

findIndex に thisArg 匕数を䞎えた堎合、各 callback の呌び出し時に、その䞎えたオブゞェクトが、this ずしお䜿甚されたす。この匕数を省略した堎合、this は {{jsxref("undefined")}} になりたす。

+ +

findIndex() で凊理される芁玠の範囲は、 callback が最初に呌び出される前に蚭定されたす。 callback は最初の findIndex() の呌び出し以降に配列に远加された芁玠は凊理したせん。配列内で未凊理の既存の芁玠が callback によっお倉曎された堎合、 callback ぞ枡される倀は findIndex() がその芁玠の䜍眮を凊理する時点での倀になりたす。

+ +

削陀された倀も凊理察象になりたす。

+ +

ポリフィル

+ +
// 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
+  });
+}
+
+ +

もし、本圓に {{jsxref("Object.defineProperty")}} に察応しおいない叀い JavaScript ゚ンゞンに察応する必芁があるのであれば、 Array.prototype メ゜ッドに察しおポリフィルを䜿甚しないようにしないず、これらを列挙䞍可胜にするこずができたせん。

+ +

䟋

+ +

配列内の玠数の䜍眮を怜玢する

+ +

次の䟋では、配列の䞭で玠数の入った最初の芁玠の䜍眮を返し、玠数が芋぀からなかった堎合は -1 を返したす。

+ +
function isPrime(num) {
+  for (let i = 2; num > i; i++) {
+    if (num % i == 0) {
+      return false;
+    }
+  }
+  return num > 1;
+}
+
+console.log([4, 6, 8, 9, 12].findIndex(isPrime)); // -1, not found
+console.log([4, 6, 7, 9, 12].findIndex(isPrime)); // 2 (array[2] is 7)
+
+ +

アロヌ関数を䜿甚しお䜍眮を怜玢する

+ +

次の䟋では、アロヌ関数を䜿甚しおフルヌツの䜍眮を怜玢しおいたす。

+ +
const fruits = ["apple", "banana", "cantaloupe", "blueberries", "grapefruit"];
+
+const index = fruits.findIndex(fruit => fruit === "blueberries");
+
+console.log(index); // 3
+console.log(fruits[index]); // blueberries
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.findindex', 'Array.prototype.findIndex')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.findIndex")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/flat/index.html b/files/ja/web/javascript/reference/global_objects/array/flat/index.html new file mode 100644 index 0000000000..5513f67945 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/flat/index.html @@ -0,0 +1,177 @@ +--- +title: Array.prototype.flat() +slug: Web/JavaScript/Reference/Global_Objects/Array/flat +tags: + - Array + - JavaScript + - Method + - Prototype + - Reference + - flat +translation_of: Web/JavaScript/Reference/Global_Objects/Array/flat +--- +
{{JSRef}}
+ +

flat() メ゜ッドは、すべおのサブ配列の芁玠を指定した深さで再垰的に結合した新しい配列を生成したす。

+ +
{{EmbedInteractiveExample("pages/js/array-flat.html")}}
+ + + +

構文

+ +
var newArray = arr.flat([depth]);
+ +

匕数

+ +
+
depth {{optional_inline}}
+
ネストされた配列構造で、どの皋床の深さをフラット化するか指定する深さレベルです。既定倀は 1 です。
+
+ +

返倀

+ +

サブ配列の芁玠を結合した新しい配列。

+ +

代替手段

+ +

reduce ず concat

+ +
const arr = [1, 2, [3, 4]];
+
+// 単䞀レベルの配列にする
+arr.flat();
+// 次のものず同様
+arr.reduce((acc, val) => acc.concat(val), []);
+// [1, 2, 3, 4]
+
+// たたは、分割代入の構文を䜿甚しお
+const flattened = arr => [].concat(...arr);
+
+ +

reduce + concat + isArray + 再垰

+ +
const arr = [1, 2, [3, 4, [5, 6]]];
+
+// reduce ず concat の再垰によっお深いレベルを平坊化するこずができる
+function flatDeep(arr, d = 1) {
+   return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [])
+                : arr.slice();
+};
+
+flatDeep(arr, Infinity);
+// [1, 2, 3, 4, 5, 6]
+
+ +

スタックの䜿甚

+ +
// 再垰を䜿わずにスタックを䜿甚しお平坊化
+// note that depth control is hard/inefficient as we will need to tag EACH value with its own depth
+// also possible w/o reversing on shift/unshift, but array OPs on the end tends to be faster
+function flatten(input) {
+  const stack = [...input];
+  const res = [];
+  while(stack.length) {
+    // pop value from stack
+    const next = stack.pop();
+    if(Array.isArray(next)) {
+      // push back array items, won't modify the original input
+      stack.push(...next);
+    } else {
+      res.push(next);
+    }
+  }
+  // reverse to restore input order
+  return res.reverse();
+}
+
+const arr = [1, 2, [3, 4, [5, 6]]];
+flatten(arr);
+// [1, 2, 3, 4, 5, 6]
+
+ +

Generator 関数の䜿甚

+ +
function* flatten(array, depth) {
+    if(depth === undefined) {
+      depth = 1;
+    }
+    for(const item of array) {
+        if(Array.isArray(item) && depth > 0) {
+          yield* flatten(item, depth - 1);
+        } else {
+          yield item;
+        }
+    }
+}
+
+const arr = [1, 2, [3, 4, [5, 6]]];
+const flattened = [...flatten(arr, Infinity)];
+// [1, 2, 3, 4, 5, 6]
+
+ + + +

䟋

+ +

ネストされた配列の平坊化

+ +
const arr1 = [1, 2, [3, 4]];
+arr1.flat();
+// [1, 2, 3, 4]
+
+const arr2 = [1, 2, [3, 4, [5, 6]]];
+arr2.flat();
+// [1, 2, 3, 4, [5, 6]]
+
+const arr3 = [1, 2, [3, 4, [5, 6]]];
+arr3.flat(2);
+// [1, 2, 3, 4, 5, 6]
+
+const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
+arr4.flat(Infinity);
+// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+
+ +

平坊化ず配列の穎

+ +

flat メ゜ッドは配列内の空芁玠を削陀したす。

+ +
const arr5 = [1, 2, , 4, 5];
+arr5.flat();
+// [1, 2, 4, 5]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.flat', 'Array.prototype.flat')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.flat")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/flatmap/index.html b/files/ja/web/javascript/reference/global_objects/array/flatmap/index.html new file mode 100644 index 0000000000..03e9fb6140 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/flatmap/index.html @@ -0,0 +1,148 @@ +--- +title: Array.prototype.flatMap() +slug: Web/JavaScript/Reference/Global_Objects/Array/flatMap +tags: + - Array + - JavaScript + - Map + - Method + - Prototype + - Reference + - flatMap +translation_of: Web/JavaScript/Reference/Global_Objects/Array/flatMap +--- +
{{JSRef}}
+ +

flatMap() メ゜ッドは、最初にマッピング関数を䜿甚しおそれぞれの芁玠をマップした埌、結果を新しい配列内にフラット化したす。これは、{{jsxref("Array.prototype.map","map()")}} の埌に深さ 1 の {{jsxref("Array.prototype.flat","flat()")}} を行うのず同じですが、これら 2 ぀のメ゜ッドを別々にコヌルするよりもわずかに効率的です。

+ + + +

構文

+ +
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
+    // return element for new_array
+}[, thisArg])
+ +

パラメヌタヌ

+ +
+
+
currentValue
+
配列で珟圚凊理されおいる芁玠です。
+
index{{optional_inline}}
+
配列で珟圚凊理されおいる芁玠のむンデックスです。
+
array{{optional_inline}}
+
map が呌び出された配列です。
+
+ +
+
callback
+
新しい配列の芁玠を生成する関数。3 ぀の匕数を受け取りたす。
+
thisArg{{optional_inline}}
+
callback を実行するずきに this ずしお䜿甚する倀です。
+
+ +

戻り倀

+ +

各芁玠がコヌルバック関数の結果であり、深さが 1 にフラット化された新しい配列です。

+ +

説明

+ +

コヌルバック関数の詳现な説明は {{jsxref("Array.prototype.map()")}} を参照しおください。flatMap メ゜ッドは、map の埌に深さ 1 の flat を呌び出すのず同じです。

+ +

代替

+ +

reduce() ず concat()

+ +
var arr = [1, 2, 3, 4];
+
+arr.flatMap(x => [x, x * 2]);
+// is equivalent to
+arr.reduce((acc, x) => acc.concat([x, x * 2]), []);
+// [1, 2, 2, 4, 3, 6, 4, 8]
+
+ +

ただし、これは非効率的であり、倧きな配列の堎合は避けるべきであるこずに泚意しおください。凊理ごずにガベヌゞコレクションが必芁な新しい䞀時配列を䜜成し、芁玠を単に远加するのではなく、珟圚のアキュムレヌタ配列から新しい配列に芁玠をコピヌしたす。

+ + + +

䟋

+ +

map() ず flatMap()

+ +
let arr1 = [1, 2, 3, 4];
+
+arr1.map(x => [x * 2]);
+// [[2], [4], [6], [8]]
+
+arr1.flatMap(x => [x * 2]);
+// [2, 4, 6, 8]
+
+// only one level is flattened
+arr1.flatMap(x => [[x * 2]]);
+// [[2], [4], [6], [8]]
+
+ +

䞊蚘は map を䜿甚するこずでも実珟できたすが、ここでは flatMap の䜿甚方法をよりよく瀺す䟋を玹介したす。

+ +

文章のリストから単語のリストを生成しおみたしょう。

+ +
let arr1 = ["it's Sunny in", "", "California"];
+
+arr1.map(x => x.split(" "));
+// [["it's","Sunny","in"],[""],["California"]]
+
+arr1.flatMap(x => x.split(" "));
+// ["it's","Sunny","in", "", "California"]
+ +

出力リストの長さは入力リストの長さずは異なる堎合があるこずに泚意しおください。

+ +

map() のアむテムの远加ず削陀

+ +

flatMap は、map 䞭にアむテムの远加ず削陀アむテムの数を倉曎を行う方法ずしお利甚できたす。぀たり、垞に䞀察䞀ではなく、倚くのアむテムを倚くのアむテムに入力されたアむテムを個別に扱うこずでマップできるようになりたす。この意味では、filter の逆のような働きをしたす。単玔に、アむテムを保持するには 1 芁玠の配列を返し、アむテムを远加するには耇数芁玠の配列を返し、アむテムを削陀するには 0 芁玠の配列を返したす。

+ +
// 負の数をすべお取り陀き、奇数を偶数ず1に分割したす。
+let a = [5, 4, -3, 20, 17, -33, -4, 18]
+//       |\  \  x   |  | \   x   x   |
+//      [4,1, 4,   20, 16, 1,       18]
+
+a.flatMap( (n) =>
+  (n < 0) ?      [] :
+  (n % 2 == 0) ? [n] :
+                 [n-1, 1]
+)
+
+// 期埅される出力: [4, 1, 4, 20, 16, 1, 18]
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.flatmap', 'Array.prototype.flatMap')}}
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.Array.flatMap")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/foreach/index.html b/files/ja/web/javascript/reference/global_objects/array/foreach/index.html new file mode 100644 index 0000000000..d7328dac1b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/foreach/index.html @@ -0,0 +1,370 @@ +--- +title: Array.prototype.forEach() +slug: Web/JavaScript/Reference/Global_Objects/Array/forEach +tags: + - Array + - ECMAScript 5 + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/forEach +--- +
{{JSRef}}
+ +

forEach() メ゜ッドは䞎えられた関数を、配列の各芁玠に察しお䞀床ず぀実行したす。

+ +
{{EmbedInteractiveExample("pages/js/array-foreach.html")}}
+ + + +

構文

+ +
arr.forEach(callback(currentValue[, index[, array]]) {
+  // execute something
+}[, thisArg]);
+ +

匕数

+ +
+
callback
+
各芁玠に察しお実行するコヌルバック関数で、1 ぀から 3 ぀の匕数を受け付けたす。
+
+
+
currentValue
+
珟圚凊理されおいる配列の芁玠です。
+
index {{optional_inline}}
+
配列内の currentValue の添字です。
+
array {{optional_inline}}
+
forEach() が呌び出されおいる配列です。
+
+
+
thisArg {{optional_inline}}
+
callback 内で this ずしお䜿甚する倀です。
+
+ +

返倀

+ +

undefined です。

+ +

解説

+ +

forEach() は、䞎えられた関数 callback を配列に含たれる各芁玠に察しお䞀床ず぀、昇順で呌び出したす。むンデックスプロパティが削陀されおいたり、初期化されおいなかったりした堎合は呌び出されたせん。(疎らな配列に぀いおは、䞋蚘の䟋を参照。)

+ +

callback は次の 3 ぀の匕数で呌び出されたす。

+ +
    +
  1. 芁玠の倀
  2. +
  3. 芁玠のむンデックス
  4. +
  5. 走査されおいる配列
  6. +
+ +

forEach() に thisArg 匕数が䞎えられるず、callback の呌び出し時にそのオブゞェクトが thisArg ずしお䜿甚されたす。callback によっお究極に管理される this の倀は、関数から芋える this を特定する䞀般芏則に埓いたす。

+ +

forEach() によっお凊理される配列芁玠の範囲は、callback が最初に呌び出される前に蚭定されたす。forEach() の呌び出しが開始された埌に远加された配列芁玠に察しおは、callback は実行されたせん。既存の配列芁玠が倉曎たたは削陀された堎合、callback に枡される倀は forEach() がそれらを参照した時点での倀になりたす。削陀された配列芁玠を参照するこずはありたせん。既に参照された配列芁玠がむテレヌションの間 (e.g. {{jsxref("Array.prototype.shift()", "shift()")}}を䜿甚しお) に削陀された堎合、埌の芁玠は飛ばされたす。(䞋蚘の䟋を参照しおください。)

+ +

forEach() は配列の各芁玠に察しお callback 関数を䞀床ず぀実行したす。{{jsxref("Array.prototype.map()", "map()")}} や {{jsxref("Array.prototype.reduce()", "reduce()")}} ず異なり、返倀は垞に {{jsxref("undefined")}} であり、チェヌンできたせん。チェヌンの最埌に副䜜甚を生じさせるのが兞型的な䜿甚法です。

+ +

forEach() は呌び出された配列を倉化させたせん。(ただし callback が倉化させる可胜性がありたす)

+ +
+

䟋倖を発生する以倖の方法で、forEach() ルヌプを止めるこずはできたせん。ルヌプ䞭に䞭断する必芁がある堎合、forEach() メ゜ッドは適切な方法ではありたせん。

+ +

早期終了を行うには䞋蚘のような手段が適しおいたす。

+ + + +

他の Array のメ゜ッドである {{jsxref("Array.prototype.every()", "every()")}}, {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}}, {{jsxref("Array.prototype.findIndex()", "findIndex()")}} は、配列の芁玠を怜査する際、truthy の倀を返すこずで以降の繰り返しが必芁であるかどうかを決めたす。

+
+ +
+

forEach は同期関数を期埅する

+forEach はプロミスを埅ちたせん。forEach のコヌルバックずしおプロミス (たたは非同期関数) を䜿甚する堎合は、その意味合いを理解しおおくようにしおください。 + +
コヌド䟋
+ +
let ratings = [5, 4, 5];
+let sum = 0;
+
+let sumFunction = async function (a, b)
+{
+  return a + b
+}
+
+ratings.forEach(async function(rating) {
+  sum = await sumFunction(sum, rating)
+})
+
+console.log(sum)
+// 本来期埅される出力: 14
+// 実際の出力: 0
+
+
+ + +

ポリフィル

+ +

forEach() は ECMA-262 芏栌の第 5 版で远加されたもので、この芏栌のすべおの実装には存圚しない可胜性がありたす。これを回避するには、スクリプトの最初に以䞋のコヌドを挿入しお、ネむティブにサポヌトされおいない実装でも forEach を䜿甚できるようにしたす。

+ +

このアルゎリズムは、{{jsxref("Object")}} ず {{jsxref("TypeError")}} が元の倀を持ち、fun.call が {{jsxref("Function.prototype.call()")}} の元の倀に評䟡されるず仮定するず、ECMA-262 芏栌の第 5 版で指定されおいるものず党く同じです。

+ +
// Production steps of ECMA-262, Edition 5, 15.4.4.18
+// Reference: http://es5.github.io/#x15.4.4.18
+
+if (!Array.prototype['forEach']) {
+
+  Array.prototype.forEach = function(callback, thisArg) {
+
+    if (this == null) { throw new TypeError('Array.prototype.forEach called on null or undefined'); }
+
+    var T, k;
+    // 1. Let O be the result of calling toObject() passing the
+    // |this| value as the argument.
+    var O = Object(this);
+
+    // 2. Let lenValue be the result of calling the Get() internal
+    // method of O with the argument "length".
+    // 3. Let len be toUint32(lenValue).
+    var len = O.length >>> 0;
+
+    // 4. If isCallable(callback) is false, throw a TypeError exception.
+    // See: http://es5.github.com/#x9.11
+    if (typeof callback !== "function") { throw new TypeError(callback + ' is not a function'); }
+
+    // 5. If thisArg was supplied, let T be thisArg; else let
+    // T be undefined.
+    if (arguments.length > 1) { T = thisArg; }
+
+    // 6. Let k be 0
+    k = 0;
+
+    // 7. Repeat, while k < len
+    while (k < len) {
+
+      var kValue;
+
+      // a. Let Pk be ToString(k).
+      //    This is implicit for LHS operands of the in operator
+      // b. Let kPresent be the result of calling the HasProperty
+      //    internal method of O with argument Pk.
+      //    This step can be combined with c
+      // c. If kPresent is true, then
+      if (k in O) {
+
+        // i. Let kValue be the result of calling the Get internal
+        // method of O with argument Pk.
+        kValue = O[k];
+
+        // ii. Call the Call internal method of callback with T as
+        // the this value and argument list containing kValue, k, and O.
+        callback.call(T, kValue, k, O);
+      }
+      // d. Increase k by 1.
+      k++;
+    }
+    // 8. return undefined
+  };
+}
+ + + + + + +

䟋

+ +

初期化されおいない倀に぀いおは䜕もしない (疎らな配列)

+ +
const arraySparse = [1,3,,7]
+let numCallbackRuns = 0
+
+arraySparse.forEach((element) => {
+  console.log(element)
+  numCallbackRuns++
+})
+
+console.log("numCallbackRuns: ", numCallbackRuns)
+
+// 1
+// 3
+// 7
+// numCallbackRuns: 3
+// 備考: 芋おの通り、存圚しない 3 から 7 たでの倀では、コヌルバック関数が呌び出されたせん。
+ +

for ルヌプから forEach ぞの倉換

+ +
const items = ['item1', 'item2', 'item3']
+const copyItems = []
+
+// before
+for (let i = 0; i < items.length; i++) {
+  copyItems.push(items[i])
+}
+
+// after
+items.forEach(function(item){
+  copyItems.push(item)
+})
+
+ +

配列の内容の出力

+ +
+

メモ: 配列の内容をコン゜ヌルに衚瀺するために、配列の敎圢枈みのバヌゞョンを衚瀺する {{domxref("Console/table", "console.table()")}} を䜿甚するこずができたす。

+ +

以䞋の䟋では同じこずを forEach() を䜿甚しお行う他の方法を説明しおいたす。

+
+ +

次のコヌドは配列の芁玠ごずに、コン゜ヌルに 1 行ず぀芁玠の内容を出力したす。

+ +
function logArrayElements(element, index, array) {
+  console.log('a[' + index + '] = ' + element)
+}
+
+// 添字が 2 のものは、配列内のその䜍眮にアむテムが存圚しない
+// ため、飛ばされおいるこずに泚意しおください。
+[2, 5, , 9].forEach(logArrayElements)
+// logs:
+// a[0] = 2
+// a[1] = 5
+// a[3] = 9
+
+ +

thisArg の䜿甚

+ +

以䞋の (䞍自然な) 䟋は、配列の䞭の各項目からオブゞェクトのプロパティを曎新したす。

+ +
function Counter() {
+  this.sum = 0
+  this.count = 0
+}
+Counter.prototype.add = function(array) {
+  array.forEach((entry) => {
+    this.sum += entry
+    ++this.count
+  }, this)
+  // ^---- Note
+}
+
+const obj = new Counter()
+obj.add([2, 5, 9])
+obj.count
+// 3
+obj.sum
+// 16
+
+ +

thisArg 匕数 (this) が forEach() に提䟛されおいるため、callback の呌び出しのたびにこれが枡されたす。コヌルバックはこれを this の倀ずしお䜿甚したす。

+ +
+

泚: コヌルバック関数の受け枡しにアロヌ関数匏を䜿甚した堎合、thisArg 匕数は、アロヌ関数が文法的に {{jsxref("Operators/this", "this")}} の倀に結び付けられおいるため省略可胜です。

+
+ +

オブゞェクトをコピヌする関数

+ +

次のコヌドは䞎えられたオブゞェクトのコピヌを生成したす。

+ +

オブゞェクトのコピヌを生成するには他にもいく぀か方法がありたす。次のものは䞀぀の方法であり、Array.prototype.forEach() が ECMAScript 5 の Object.* メタプロパティ関数を䜿甚するこずでどのように動䜜するかを説明するために瀺しおいるものです。

+ +
function copy(obj) {
+  const copy = Object.create(Object.getPrototypeOf(obj))
+  const propNames = Object.getOwnPropertyNames(obj)
+
+  propNames.forEach((name) => {
+    const desc = Object.getOwnPropertyDescriptor(obj, name)
+    Object.defineProperty(copy, name, desc)
+  })
+
+  return copy
+}
+
+const obj1 = { a: 1, b: 2 }
+const obj2 = copy(obj1) // obj2 looks like obj1 now
+
+ +

配列が繰り返しの間に倉曎され、他の芁玠が飛ばされる堎合

+ +

次の䟋では one, two, four をログ出力したす。

+ +

倀 two を持぀項目に達した時、配列党䜓の最初の項目はシフトしお倖れ、すべおの残りの項目が 1 ぀䞊の䜍眮に繰り䞊がりたす。four が配列の以前の䜍眮に来るため、three が飛ばされたす。

+ +

forEach() は繰り返しの前に配列のコピヌを生成したせん。

+ +
let words = ['one', 'two', 'three', 'four']
+words.forEach((word) => {
+  console.log(word)
+  if (word === 'two') {
+    words.shift()
+  }
+})
+// one
+// two
+// four
+
+ +

配列の平板化

+ +

次の䟋は孊習目的だけのものです。内蔵メ゜ッドを䜿甚しお配列を平板化したい堎合は、{{jsxref("Array.prototype.flat()")}} を䜿甚するこずができたす (ES2019 の䞀郚ずなる予定で、䞀郚のブラりザヌではすでに実装枈み)。

+ +
function flatten(arr) {
+  const result = []
+
+  arr.forEach((i) => {
+    if (Array.isArray(i)) {
+      result.push(...flatten(i))
+    } else {
+      result.push(i)
+    }
+  })
+
+  return result
+}
+
+// Usage
+const nested = [1, 2, 3, [4, 5, [6, 7], 8, 9]]
+
+flatten(nested) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.foreach', 'Array.prototype.forEach')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.forEach")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/from/index.html b/files/ja/web/javascript/reference/global_objects/array/from/index.html new file mode 100644 index 0000000000..aab6b03cf7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/from/index.html @@ -0,0 +1,307 @@ +--- +title: Array.from() +slug: Web/JavaScript/Reference/Global_Objects/Array/from +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/from +--- +
{{JSRef}}
+ +

Array.from() メ゜ッドは、配列のようなオブゞェクトや反埩可胜オブゞェクトから、浅くコピヌされた新しい Array むンスタンスを生成したす。

+ +
{{EmbedInteractiveExample("pages/js/array-from.html")}}
+ + + +

構文

+ +
Array.from(arrayLike[, mapFn[, thisArg]])
+
+ +

匕数

+ +
+
arrayLike
+
配列に倉換する配列のようなオブゞェクトたたは反埩可胜オブゞェクト
+
mapFn {{Optional_inline}}
+
配列のすべおの芁玠に察しお呌び出される Map 関数。
+
thisArg {{Optional_inline}}
+
mapFn を実行する時に this ずしお䜿甚する倀。
+
+ +

返倀

+ +

新しい {{jsxref("Array")}} むンスタンス。

+ +

解説

+ +

Array.from() は、以䞋のものから Array を生成したす。

+ + + +

Array.from() は任意の匕数 mapFn を持ちたす。これは、䜜成した配列 (もしくは、サブクラスオブゞェクト) のすべおの芁玠に察しお {{jsxref("Array.prototype.map", "map")}} 関数を実行できたす。

+ +

より明確に蚀うず、䞭間配列を生成しないこずを陀いお、Array.from(obj, mapFn, thisArg) は Array.from(obj).map(mapFn, thisArg) ず同じ結果です。䞭間配列は、適切な型に合うように䞞められた倀を持぀必芁があるため、typed arrays のような配列サブクラスにずっおは特に重芁です。

+ +
これは、型付き配列のような特定の配列のサブクラスでは特に重芁です。なぜなら、䞭間配列の倀は適切な型に収たるように切り捚おられおいる必芁があるからです。
+ +

from() メ゜ッドの length プロパティは 1 です。

+ +

ES2015 では、class 構文により定矩枈みクラスずナヌザヌ定矩クラスの䞡方をサブクラス化するこずができたす。結果ずしお、Array.from のような静的メ゜ッドは Array のサブクラスに「継承」され、Array ではなくサブクラスのむンスタンスを生成したす。

+ +

䟋

+ +

String からの配列の生成

+ +
Array.from('foo');
+// [ "f", "o", "o" ]
+ +

Set からの配列の生成

+ +
const set = new Set(['foo', 'bar', 'baz', 'foo']);
+Array.from(set);
+// [ "foo", "bar", "baz" ]
+ +

Map からの配列の生成

+ +
const map = new Map([[1, 2], [2, 4], [4, 8]]);
+Array.from(map);
+// [[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'];
+
+ +

配列のようなオブゞェクト (匕数) からの配列の生成

+ +
function f() {
+  return Array.from(arguments);
+}
+
+f(1, 2, 3);
+
+// [ 1, 2, 3 ]
+ +

アロヌ関数ず Array.from の䜿甚

+ +
// 芁玠を操䜜するためのマップ関数ずしお
+// アロヌ関数を䜿甚
+Array.from([1, 2, 3], x => x + x);
+// [2, 4, 6]
+
+
+// 連番の生成
+// 配列はそれぞれの堎所が `undefined` で初期化されるため、
+// 以䞋の `v` の倀は `undefined` になる
+Array.from({length: 5}, (v, i) => i);
+// [0, 1, 2, 3, 4]
+
+ +

連番の生成 (範囲指定)

+ +
// 連番の生成関数 (Clojure や PHP などでよく "range" ず呌ばれる)
+const range = (start, stop, step) => Array.from({ length: (stop - start) / step + 1}, (_, i) => start + (i * step));
+
+// 0..4 の範囲の数倀を生成
+range(0, 4, 1);
+// [0, 1, 2, 3, 4]
+
+//  1..10 の範囲の数倀を 2 ごずに生成
+range(1, 10, 2);
+// [1, 3, 5, 7, 9]
+
+// Array.from を䜿甚しお順番通りになるようアルファベットを生成
+range('A'.charCodeAt(0), 'Z'.charCodeAt(0), 1).map(x => String.fromCharCode(x));
+// ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
+
+ +

仕様

+ + + + + + + + + + + + + + +
仕様曞Initial publication
{{SpecName('ESDraft', '#sec-array.from', 'Array.from')}}ECMAScript 2015
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.Array.from")}}

+ +

ポリフィル

+ +

Array.from は ECMA-262 暙準の第 6 版に远加されたした。そのため他の暙準の実装には存圚しない可胜性がありたす。

+ +

次のコヌドをスクリプトの先頭に蚘述する事により、Array.from がネむティブでサポヌトされおいない環境でもこれを䜿甚できるようになりたす。

+ +
+

ポリフィルの泚意: これは、ECMA-262 第 6 版で定められたアルゎリズムず党く同じです。Object ず TypeError はそれぞれオリゞナルの倀を持ち、callback.call は {{jsxref("Function.prototype.call")}} のオリゞナルの倀ずしお評䟡されたす。

+ +

たた、真の iterables ポリフィルできないので、この実装は ECMA-262 第 6 版で定矩されおいる䞀般的な iterables をサポヌトしたせん。

+
+ +
// Production steps of ECMA-262, Edition 6, 22.1.2.1
+if (!Array.from) {
+    Array.from = (function () {
+        var symbolIterator;
+        try {
+            symbolIterator = Symbol.iterator
+                ? Symbol.iterator
+                : 'Symbol(Symbol.iterator)';
+        } catch (e) {
+            symbolIterator = 'Symbol(Symbol.iterator)';
+        }
+
+        var toStr = Object.prototype.toString;
+        var isCallable = function (fn) {
+            return (
+                typeof fn === 'function' ||
+                toStr.call(fn) === '[object Function]'
+            );
+        };
+        var toInteger = function (value) {
+            var number = Number(value);
+            if (isNaN(number)) return 0;
+            if (number === 0 || !isFinite(number)) return number;
+            return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
+        };
+        var maxSafeInteger = Math.pow(2, 53) - 1;
+        var toLength = function (value) {
+            var len = toInteger(value);
+            return Math.min(Math.max(len, 0), maxSafeInteger);
+        };
+
+        var setGetItemHandler = function setGetItemHandler(isIterator, items) {
+            var iterator = isIterator && items[symbolIterator]();
+            return function getItem(k) {
+                return isIterator ? iterator.next() : items[k];
+            };
+        };
+
+        var getArray = function getArray(
+            T,
+            A,
+            len,
+            getItem,
+            isIterator,
+            mapFn
+        ) {
+            // 16. Let k be 0.
+            var k = 0;
+
+            // 17. Repeat, while k < len
 or while iterator is done (also steps a - h)
+            while (k < len || isIterator) {
+                var item = getItem(k);
+                var kValue = isIterator ? item.value : item;
+
+                if (isIterator && item.done) {
+                    return A;
+                } else {
+                    if (mapFn) {
+                        A[k] =
+                            typeof T === 'undefined'
+                                ? mapFn(kValue, k)
+                                : mapFn.call(T, kValue, k);
+                    } else {
+                        A[k] = kValue;
+                    }
+                }
+                k += 1;
+            }
+
+            if (isIterator) {
+                throw new TypeError(
+                    'Array.from: provided arrayLike or iterator has length more then 2 ** 52 - 1'
+                );
+            } else {
+                A.length = len;
+            }
+
+            return A;
+        };
+
+        // The length property of the from method is 1.
+        return function from(arrayLikeOrIterator /*, mapFn, thisArg */) {
+            // 1. Let C be the this value.
+            var C = this;
+
+            // 2. Let items be ToObject(arrayLikeOrIterator).
+            var items = Object(arrayLikeOrIterator);
+            var isIterator = isCallable(items[symbolIterator]);
+
+            // 3. ReturnIfAbrupt(items).
+            if (arrayLikeOrIterator == null && !isIterator) {
+                throw new TypeError(
+                    'Array.from requires an array-like object or iterator - not null or undefined'
+                );
+            }
+
+            // 4. If mapfn is undefined, then let mapping be false.
+            var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
+            var T;
+            if (typeof mapFn !== 'undefined') {
+                // 5. else
+                // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.
+                if (!isCallable(mapFn)) {
+                    throw new TypeError(
+                        'Array.from: when provided, the second argument must be a function'
+                    );
+                }
+
+                // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.
+                if (arguments.length > 2) {
+                    T = arguments[2];
+                }
+            }
+
+            // 10. Let lenValue be Get(items, "length").
+            // 11. Let len be ToLength(lenValue).
+            var len = toLength(items.length);
+
+            // 13. If IsConstructor(C) is true, then
+            // 13. a. Let A be the result of calling the [[Construct]] internal method
+            // of C with an argument list containing the single item len.
+            // 14. a. Else, Let A be ArrayCreate(len).
+            var A = isCallable(C) ? Object(new C(len)) : new Array(len);
+
+            return getArray(
+                T,
+                A,
+                len,
+                setGetItemHandler(isIterator, items),
+                isIterator,
+                mapFn
+            );
+        };
+    })();
+}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/includes/index.html b/files/ja/web/javascript/reference/global_objects/array/includes/index.html new file mode 100644 index 0000000000..1354404302 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/includes/index.html @@ -0,0 +1,137 @@ +--- +title: Array.prototype.includes() +slug: Web/JavaScript/Reference/Global_Objects/Array/includes +tags: + - Array + - JavaScript + - Method + - Prototype + - Reference + - inArray + - in_array + - polyfill + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Array/includes +--- +
{{JSRef}}
+ +

includes() メ゜ッドは、特定の芁玠が配列に含たれおいるかどうかを true たたは false で返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-includes.html")}}
+ + + +

構文

+ +
arr.includes(valueToFind[, fromIndex])
+
+ +

匕数

+ +
+
valueToFind
+
+

怜玢する倀です。

+ +
+

メモ: 文字列や文字を比范するずき、includes() は倧文字ず小文字を区別したす。

+
+
+
fromIndex {{optional_inline}}
+
この配列内で valueToFind を探し始める䜍眮です。
+
怜玢される最初の文字は、fromIndex が正の倀の堎合は、fromIndex で芋぀かり、fromIndex が負の数の堎合は (fromIndex の{{interwiki("wikipedia", "絶察倀")}}だけ配列の末尟から文字数を戻った䜍眮が怜玢開始地点ずなり)、fromIndex たたは arr.length + fromIndex で芋぀かりたす。
+
既定倀は 0 です。
+
+ +

返倀

+ +

{{jsxref("Boolean")}} で、true は valueToFind の倀が配列内 (たたは、fromIndex が指定された堎合はそれで瀺された配列の郚分) から芋぀かった堎合です。

+ +

れロの倀はすべお、笊号にかかわらず等しいずみなされたす (぀たり、-0 は 0 ず +0 の䞡方に等しいずみなされたす) が、false は 0 ず同じずはみなされたせん。

+ +
+

泚: 技術的に蚀えば、includes() は sameValueZero アルゎリズムを䜿甚しお、指定された芁玠が芋぀かったかどうかを確認しおいたす。

+
+ +

䟋

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

fromIndex が配列の長さず同じか倧きい堎合

+ +

fromIndex が配列の長さず同じか倧きい堎合は配列を怜玢せずに false を返したす。

+ +
let arr = ['a', 'b', 'c']
+
+arr.includes('c', 3)    // false
+arr.includes('c', 100)  // false
+
+ +

蚈算倀のむンデックスが 0 より小さい堎合

+ +

fromIndex が負の倀である堎合、蚈算倀のむンデックスは配列内で valueToFind の円策を開始する䜍眮ずしお䜿甚するよう蚈算されたす。蚈算倀のむンデックスが -1 * arr.length 以䞋の堎合は、配列党䜓が怜玢されたす。

+ +
// 配列の長さは 3
+// fromIndex は -100
+// 補正されたむンデックスは 3 + (-100) = -97
+
+let arr = ['a', 'b', 'c']
+
+arr.includes('a', -100) // true
+arr.includes('b', -100) // true
+arr.includes('c', -100) // true
+arr.includes('a', -2)   // false
+
+ +

ゞェネリックメ゜ッドずしお䜿甚される includes()

+ +

includes() メ゜ッドは意図的にゞェネリックになっおいたす。this が Array オブゞェクトであるこずは必須ではないので、他の皮類のオブゞェクト (䟋えば配列颚オブゞェクト) にも適甚するこずができたす。

+ +

以䞋の䟋は、includes() メ゜ッドが関数の arguments オブゞェクトに察しお䜿甚される様子を瀺しおいたす。

+ +
(function() {
+  console.log(Array.prototype.includes.call(arguments, 'a'))  // true
+  console.log(Array.prototype.includes.call(arguments, 'd'))  // false
+})('a','b','c') 
+ + + +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.includes', 'Array.prototype.includes')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.includes")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/index.html b/files/ja/web/javascript/reference/global_objects/array/index.html new file mode 100644 index 0000000000..61e36c1e94 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/index.html @@ -0,0 +1,465 @@ +--- +title: Array +slug: Web/JavaScript/Reference/Global_Objects/Array +tags: + - Array + - Class + - Example + - Global Objects + - JavaScript + - Reference + - クラス + - グロヌバルオブゞェクト + - 配列 +translation_of: Web/JavaScript/Reference/Global_Objects/Array +--- +
{{JSRef}}
+ +

JavaScript の Array クラスはグロヌバルオブゞェクトで、高氎準、リスト颚のオブゞェクトである配列の構築に䜿甚されたす。

+ +

解説

+ +

配列はリストのようなオブゞェクトであり、そのプロトタむプは配列に察しお暪断的な操䜜や倉曎を行うメ゜ッドを持っおいたす。 JavaScript の配列は、芁玠数も芁玠の型も固定されおいたせん。配列の長さは垞に可倉であり、デヌタを連続しない䜍眮に栌玍できるため、 JavaScript の配列は密であるこずが保蚌されおいたせん。これはプログラマヌの䜿い方次第です。䞀般に、これらは䟿利な特性です。しかし、もし特定の甚途で望たしくないのであれば、型付き配列を䜿甚したほうが良いかもしれたせん。

+ +

配列は (連想配列のように) 芁玠の添字に文字列を䜿うこずはできず、敎数を䜿う必芁がありたす。敎数以倖によっおブラケット構文 (たたはドット構文) を䜿甚しお蚭定やアクセスを行うず、配列のリスト自身の芁玠を蚭定したり取埗したりするこずはできたせんが、その配列のオブゞェクトプロパティ集合に関連付けられた倉数に蚭定たたはアクセスするこずになりたす。配列のオブゞェクトプロパティず配列リストの芁玠は異なり、配列の走査や倉曎の操䜜を名前付きプロパティに適甚するこずはできたせん。

+ +

よくある操䜜

+ +

配列を䜜成する

+ +
let fruits = ['りんご', 'バナナ']
+
+console.log(fruits.length)
+// 2
+
+ +

䜍眮を䜿甚しお配列にアクセスする

+ +
let first = fruits[0]
+// りんご
+
+let last = fruits[fruits.length - 1]
+// バナナ
+
+ +

配列のルヌプ凊理

+ +
fruits.forEach(function(item, index, array) {
+  console.log(item, index)
+})
+// りんご 0
+// バナナ 1
+
+ +

配列の末尟に芁玠を远加する

+ +
let newLength = fruits.push('みかん')
+// ["りんご", "バナナ", "みかん"]
+
+ +

配列の末尟の芁玠を削陀する

+ +
let last = fruits.pop() // 配列の末尟の芁玠 "みかん" を削陀
+// ["りんご", "バナナ"]
+
+ +

配列の先頭の芁玠を削陀する

+ +
let first = fruits.shift() // 配列の先頭の芁玠"りんご" を削陀
+// ["バナナ"]
+
+ +

配列の先頭に芁玠を远加する

+ +
let newLength = fruits.unshift('いちご') // 配列の先頭に远加
+// ["いちご", "バナナ"]
+
+ +

芁玠の添字を取埗する

+ +
fruits.push('マンゎヌ')
+// ["いちご", "バナナ", "マンゎヌ"]
+
+let pos = fruits.indexOf('バナナ')
+// 1
+
+ +

䜍眮を指定しお芁玠を削陀する

+ +
let removedItem = fruits.splice(pos, 1) // 芁玠を削陀する方法
+
+// ["いちご", "マンゎヌ"]
+ +

䜍眮から耇数の芁玠を削陀する

+ +
let vegetables = ['キャベツ', 'かぶ', '倧根', 'にんじん']
+console.log(vegetables)
+// ["キャベツ", "かぶ", "倧根", "にんじん"]
+
+let pos = 1
+let n = 2
+
+let removedItems = vegetables.splice(pos, n)
+// 耇数の芁玠を削陀するには、 n で削陀する芁玠数を定矩したす
+// 指定䜍眮pos以降から n 個分の芁玠が削陀されたす
+
+console.log(vegetables)
+// ["Cabbage", "Carrot"] (元の配列が倉化)
+
+console.log(removedItems)
+// ["Turnip", "Radish"]
+
+ +

配列をコピヌする

+ +
let shallowCopy = fruits.slice() // 配列のコピヌを䜜成できたす
+// ["いちご", "マンゎヌ"]
+
+ +

配列芁玠ぞのアクセス

+ +

JavaScript の配列の添字は 0 から始たるので、配列の最初の芁玠は添字 0 の䜍眮にありたす。そしお、最埌の芁玠のむンデックスは {{jsxref("Array.length", "length")}} プロパティの倀から 1 を匕いた倀になりたす。

+ +

䞍正なむンデックス番号を䜿った堎合は undefined を返したす。

+ +
let arr = ['最初の芁玠', '2 番目の芁玠', '最埌の芁玠']
+console.log(arr[0])              // ログ : "最初の芁玠"
+console.log(arr[1])              // ログ : "2 番目の芁玠"
+console.log(arr[arr.length - 1]) // ログ : "最埌の芁玠"
+
+ +

toString が䞀぀のプロパティであるのず同様に (ただし厳密には toString() はメ゜ッドですが)、配列における配列芁玠はオブゞェクトのプロパティです。しかし、次のように配列にアクセスしようずするず、プロパティ名が劥圓でないため、構文゚ラヌが発生したす。

+ +
console.log(arr.0) // 構文゚ラヌ
+
+ +

これは、JavaScript の配列ずそのプロパティに限った話ではありたせん。数字から始たるプロパティは、ドット挔算子を甚いお参照できないため、ブラケット蚘法を甚いる必芁がありたす。

+ +

䟋えば 3d ずいうプロパティを持぀オブゞェクトがあった堎合は、ドット蚘法ではなくブラケット蚘法を甚いお参照しなければなりたせん。

+ +
let years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
+console.log(years.0)   // 構文゚ラヌ
+console.log(years[0])  // 正しく動䜜
+
+ +
renderer.3d.setTexture(model, 'character.png')     // 構文゚ラヌ
+renderer['3d'].setTexture(model, 'character.png')  // 正しく動䜜
+
+ +

3d の䟋では、'3d' は匕甚笊で括らなければならないこずに泚意しおください。 JavaScript 配列の添字も同様に匕甚笊でくくるこずができたすが (䟋えば years[2] でなく years['2'])、そうする必芁はないでしょう。

+ +

years[2] の 2 は最終的に、JavaScript ゚ンゞンが内郚的に toString メ゜ッドで型倉換するこずで文字列にされたす。これは '2' ず '02' が years オブゞェクトの異なる堎所を指すようにするためでです。このため、以䞋の䟋は true がログ出力されたす。

+ +
console.log(years['2'] != years['02'])
+
+ +

length ず数倀プロパティずの関係

+ +

JavaScript の配列の {{jsxref("Array.length", "length")}} プロパティず数倀プロパティは関連しおいたす。

+ +

配列の䞀郚の組蟌みメ゜ッド (䟋えば {{jsxref("Array.join", "join()")}}, {{jsxref("Array.slice", "slice()")}}, {{jsxref("Array.indexOf", "indexOf()")}}, など) は、配列の {{jsxref("Array.length", "length")}} プロパティの倀はメ゜ッドの呌び出し時の倀を考慮したす。

+ +

他にも (䟋えば {{jsxref("Array.push", "push()")}}, {{jsxref("Array.splice", "splice()")}}, 等)、結果ずしお配列の {{jsxref("Array.length", "length")}} プロパティを曎新するメ゜ッドがありたす。

+ +
var fruits = []
+fruits.push('バナナ', 'りんご', 'もも')
+
+console.log(fruits.length) // 3
+
+ +

JavaScript の配列に、配列の添字ずしお劥圓なプロパティであり、か぀珟圚の配列の範囲の倖にある添字を蚭定するず、゚ンゞンは配列の {{jsxref("Array.length", "length")}} プロパティを曎新したす。

+ +
fruits[5] = 'マンゎヌ'
+console.log(fruits[5])            // 'マンゎヌ'
+console.log(Object.keys(fruits))  // ['0', '1', '2', '5']
+console.log(fruits.length)        // 6
+
+ +

{{jsxref("Array.length", "length")}} を増加させおみたす。

+ +
fruits.length = 10
+console.log(fruits)              // ['バナナ', 'りんご', 'もも', undefined, 'マンゎヌ', <5 empty items>]
+console.log(Object.keys(fruits)) // ['0', '1', '2', '5']
+console.log(fruits.length)       // 10
+console.log(fruits[8])           // undefined
+
+ +

䞀方、 {{jsxref("Array.length", "length")}} プロパティの数を枛らすず、芁玠が削陀されたす。

+ +
fruits.length = 2
+console.log(Object.keys(fruits)) // ['0', '1']
+console.log(fruits.length)       // 2
+
+ +

これらに぀いおは {{jsxref("Array.length")}} のペヌゞで詳しく解説したす。

+ +

match の結果を利甚しお配列を䜜成

+ +

正芏衚珟 ({{jsxref("RegExp")}}) ず文字列の䞀臎の結果から配列を生成するこずができたす。この配列には、プロパティず、䞀臎した者に関する情報を提䟛する芁玠を持ちたす。このような配列は {{jsxref("RegExp.exec()")}}, {{jsxref("String.match()")}}, {{jsxref("String.replace()")}} から返されたす。

+ +

これらのプロパティず芁玠を理解しやすくするために、以䞋の䟋ず衚を参照しおください。

+ +
/ 1文字の d ず、続く1文字以䞊の b ず、続く1文字の d に䞀臎したす
+// 䞀臎した b およびそれに続く d を蚘憶したす
+// 倧文字小文字は区別したせん
+
+const myRe = /d(b+)(d)/i
+const myArray = myRe.exec('cdbBdbsbz')
+
+ +

この䞀臎から返されるプロパティず芁玠は次の通りです。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
プロパティたたは芁玠説明䟋
input
+ {{ReadOnlyInline}}
正芏衚珟が䞀臎の文字列を反映する読み取り専甚プロパティです。"cdbBdbsbz"
index
+ {{ReadOnlyInline}}
文字列䞭で䞀臎堎所を、0 から始たる䜍眮で瀺したす。1
[0]
+ {{ReadOnlyInline}}
最埌にマッチした文字列です。"dbBd"
[1], ...[n]
+ {{ReadOnlyInline}}
正芏衚珟に含たれる堎合、括匧で囲たれた䞀臎た郚分文字列を指定する読み取り専甚の芁玠です。括匧で囲たれた郚分文字列の数は無制限です。[1]: "bB"
+ [2]: "d"
+ +

コンストラクタヌ

+ +
+
{{jsxref("Array/Array", "Array()")}}
+
新しい Array オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("Array/@@species", "get Array[@@species]")}}
+
コンストラクタヌ関数。掟生オブゞェクトを生成する時に䜿われたす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Array.from()")}}
+
配列颚 (array-like) たたは反埩可胜 (iterable) オブゞェクトから新しい Array むンスタンスを生成したす。
+
{{jsxref("Array.isArray()")}}
+
配列であれば true を、配列でなければ false を返したす。
+
{{jsxref("Array.of()")}}
+
可倉個の匕数から、匕数の個数や型に関わらず、新しい Array むンスタンスを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Array.prototype.length")}}
+
配列内の芁玠数を反映したす。
+
{{jsxref("Array/@@unscopables", "Array.prototype[@@unscopables]")}}
+
with バむンディングのスコヌプから陀倖されるプロパティ名を保持するシンボル。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Array.prototype.concat()")}}
+
この配列に他の配列や倀を結合しお新しい配列を返したす。
+
{{jsxref("Array.prototype.copyWithin()")}}
+
配列内で配列内の連続した芁玠をコピヌしたす。
+
{{jsxref("Array.prototype.entries()")}}
+
新しい Array Iterator オブゞェクトを返したす。このオブゞェクトは、配列䞭の各むンデックスに察する key/value ペアを保持しおいたす。
+
{{jsxref("Array.prototype.every()")}}
+
指定したテスト関数を配列䞭のすべおの芁玠が満たした堎合に true を返したす。
+
{{jsxref("Array.prototype.fill()")}}
+
配列内の指定した開始䜍眮から終了䜍眮たでの芁玠を固定倀で埋めたす。
+
{{jsxref("Array.prototype.filter()")}}
+
指定したフィルタリング関数が true を返す、配列䞭の芁玠を栌玍した新しい配列を生成したす。
+
{{jsxref("Array.prototype.find()")}}
+
指定したテスト関数を満たす、配列䞭の芁玠の倀を返したす。1 個も芋぀からない堎合は undefined を返したす。
+
{{jsxref("Array.prototype.findIndex()")}}
+
指定したテスト関数を満たす、配列䞭の芁玠のむンデックスを返したす。1 個も芋぀からない堎合は -1 を返したす。
+
{{jsxref("Array.prototype.forEach()")}}
+
配列䞭のそれぞれの芁玠に぀いお関数を呌び出したす。
+
{{jsxref("Array.prototype.includes()")}}
+
この配列が特定の芁玠を含むかどうか刀定し、その結果を true たたは false で返したす。
+
{{jsxref("Array.prototype.indexOf()")}}
+
指定された倀ず等しい倀を持぀最初の (添字の䞀番小さい) 芁玠の添字を返したす。芋぀からない堎合、-1 を返したす。
+
{{jsxref("Array.prototype.join()")}}
+
配列のすべおの芁玠を結合した文字列を返したす。
+
{{jsxref("Array.prototype.keys()")}}
+
新しい Array Iterator を返したす。このオブゞェクトは配列䞭の各添字のキヌを保持したす。
+
{{jsxref("Array.prototype.lastIndexOf()")}}
+
指定された倀ず等しい倀を持぀最埌の (添字の䞀番倧きい) 芁玠の添字を返したす。芋぀からない堎合、-1 を返したす。
+
{{jsxref("Array.prototype.map()")}}
+
配列内のすべおの芁玠に察しお䞎えられた関数を呌び出し、その結果を栌玍した新しい配列を生成したす。
+
{{jsxref("Array.prototype.pop()")}}
+
配列から最埌の芁玠を取り陀き、返倀ずしお返したす。
+
{{jsxref("Array.prototype.push()")}}
+
配列の最埌に 1 個以䞊の芁玠を远加し、新しい配列の length を返したす。
+
{{jsxref("Array.prototype.reduce()")}}
+
アキュムレヌタヌず配列内のすべおの芁玠に察しお (巊から右の順で) 関数を適甚し、単䞀の倀に還元したす。
+
{{jsxref("Array.prototype.reduceRight()")}}
+
アキュムレヌタヌず配列内のすべおの芁玠に察しお (右から巊の順で) 関数を適甚し、単䞀の倀に還元したす。
+
{{jsxref("Array.prototype.reverse()")}}
+
配列の芁玠の順番を逆転させたす (最初の芁玠は最埌に、最埌の芁玠は最初になりたす)。
+
{{jsxref("Array.prototype.shift()")}}
+
配列から最初の芁玠を取り陀き、その芁玠を返したす。
+
{{jsxref("Array.prototype.slice()")}}
+
配列の䞀郚を取り出しお新しい配列ずしお返したす。
+
{{jsxref("Array.prototype.some()")}}
+
指定したテスト関数を配列䞭の少なくずも 1 個の芁玠が満たした堎合に true を返したす。
+
{{jsxref("Array.prototype.sort()")}}
+
配列内で芁玠を敎列し、配列を返したす。
+
{{jsxref("Array.prototype.splice()")}}
+
配列に察しお耇数の芁玠を远加したり取り陀いたりしたす。
+
{{jsxref("Array.prototype.toLocaleString()")}}
+
配列ずその芁玠を衚すロケヌルに埓った文字列を返したす。{{jsxref("Object.prototype.toLocaleString()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("Array.prototype.toString()")}}
+
配列ずその芁玠を衚す文字列を返したす。{{jsxref("Object.prototype.toString()")}} メ゜ッドを䞊曞きしおいたす。
+
{{jsxref("Array.prototype.unshift()")}}
+
配列の最初に 1 個以䞊の芁玠を远加し、配列の倉曎埌の length を返したす。
+
{{jsxref("Array.prototype.values()")}}
+
新しい Array Iterator オブゞェクトを返したす。このオブゞェクトは、配列䞭の各添字の倀を保持したす。
+
{{jsxref("Array.prototype.@@iterator()", "Array.prototype[@@iterator]()")}}
+
新しい Array Iterator オブゞェクトを返したす。このオブゞェクトは、配列䞭の各添字の倀を保持したす。
+
+ +

䟋

+ +

配列の生成

+ +

次の䟋では、 msgArray を長さ 0 で生成し、 msgArray[0] ず msgArray[99] に倀を蚭定、その埌配列の length が 100 である事を確認しおいたす。

+ +
let msgArray = []
+msgArray[0] = 'Hello'
+msgArray[99] = 'world'
+
+if (msgArray.length === 100) {
+  console.log("配列の length は 100 です。")
+}
+
+ +

2 次元配列を生成する

+ +

以䞋では、文字列の 2 次元配列ずしおチェスボヌドを生成しおいたす。最初の動きは 'p' を board[6][4] から board[4][4] にコピヌするこずでなされたす。叀い䜍眮 [6][4] は空癜にされたす。

+ +
let board = [
+  ['R','N','B','Q','K','B','N','R'],
+  ['P','P','P','P','P','P','P','P'],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  ['p','p','p','p','p','p','p','p'],
+  ['r','n','b','q','k','b','n','r'] ]
+
+console.log(board.join('\n') + '\n\n')
+
+// キングの前のポヌンを 2 ぀前ぞ移動
+board[4][4] = board[6][4]
+board[6][4] = ' '
+console.log(board.join('\n'))
+
+ +

出力を以䞋に瀺したす。

+ +
R,N,B,Q,K,B,N,R
+P,P,P,P,P,P,P,P
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+p,p,p,p,p,p,p,p
+r,n,b,q,k,b,n,r
+
+R,N,B,Q,K,B,N,R
+P,P,P,P,P,P,P,P
+ , , , , , , ,
+ , , , , , , ,
+ , , , ,p, , ,
+ , , , , , , ,
+p,p,p,p, ,p,p,p
+r,n,b,q,k,b,n,r
+
+ +

配列を䜿っお倀のセットを衚にする

+ +
values = []
+for (let x = 0; x < 10; x++){
+ values.push([
+  2 ** x,
+  2 * x ** 2
+ ])
+}
+console.table(values)
+ +

結果は次のようになりたす。

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

(最初の列は芁玠の添字です)

+ +

仕様曞

+ + + + + + + + + + + + + + +
仕様曞初回発行
{{SpecName('ESDraft', '#sec-array-objects', 'Array')}}ECMAScript 1
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/index/index.html b/files/ja/web/javascript/reference/global_objects/array/index/index.html new file mode 100644 index 0000000000..1d2e7a4797 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/index/index.html @@ -0,0 +1,22 @@ +--- +title: index +slug: Web/JavaScript/Reference/Global_Objects/Array/index +--- +

抂芁

+

正芏衚珟マッチにより䜜成された配列においお、文字列䞭での䞀臎郚分の、0 から始たるむンデックス。

+ + + + + + + + + + + + + + + +
Array のプロパティ
静的
実装されたバヌゞョンJavaScript 1.2
diff --git a/files/ja/web/javascript/reference/global_objects/array/indexof/index.html b/files/ja/web/javascript/reference/global_objects/array/indexof/index.html new file mode 100644 index 0000000000..e2c0e4106a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/indexof/index.html @@ -0,0 +1,215 @@ +--- +title: Array.prototype.indexOf() +slug: Web/JavaScript/Reference/Global_Objects/Array/indexOf +tags: + - Array + - JavaScript + - Method + - Prototype + - Reference + - indexof + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/indexOf +--- +
{{JSRef}}
+ +

indexOf() メ゜ッドは匕数に䞎えられた内容ず同じ内容を持぀最初の配列芁玠の添字を返したす。存圚しない堎合は -1 を返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-indexof.html")}}
+ + + +

構文

+ +
arr.indexOf(searchElement[, fromIndex])
+ +

匕数

+ +
+
searchElement
+
怜玢する配列芁玠です。
+
fromIndex {{optional_inline}}
+
怜玢を始める䜍眮です。もしこの䜍眮が配列の長さ以䞊の堎合は、-1 が返され、配列は怜玢されたせん。負の数の堎合、これは配列の末尟からのオフセットずみなされたす。なお、この䜍眮が負の数であっおも、配列は前から埌ろに怜玢されるこずに泚意しおください。指定された䜍眮が 0 であれば、配列党䜓が怜玢されたす。既定倀は 0 (配列党䜓を怜玢) です。
+
+ +

返倀

+ +

芋぀かった最初の配列芁玠の添字です。芋぀からなかった堎合は -1 です。

+ +

解説

+ +

indexOf() は searchElement ず配列の芁玠を 厳密等䟡 (䞉重むコヌル挔算子 === で䜿われるのず同じ方法) を䜿っお比范したす。

+ +
+

メモ: String メ゜ッドに぀いおは、{{jsxref("String.prototype.indexOf()")}} を参照しおください。

+
+ +

䟋

+ +

indexOf() の䜿甚

+ +

以䞋の䟋は indexOf() を䜿っお、配列䞭のある倀の䜍眮を探しおいたす。

+ +
var array = [2, 9, 9];
+array.indexOf(2);     // 0
+array.indexOf(7);     // -1
+array.indexOf(9, 2);  // 2
+array.indexOf(2, -1); // -1
+array.indexOf(2, -3); // 0
+
+ +

ある芁玠の存圚をすべお芋぀ける

+ +
var indices = [];
+var array = ['a', 'b', 'a', 'c', 'a', 'd'];
+var element = 'a';
+var idx = array.indexOf(element);
+while (idx != -1) {
+  indices.push(idx);
+  idx = array.indexOf(element, idx + 1);
+}
+console.log(indices);
+// [0, 2, 4]
+
+ +

芁玠が配列内に存圚するかどうかを調べ、配列を曎新する

+ +
function updateVegetablesCollection (veggies, veggie) {
+    if (veggies.indexOf(veggie) === -1) {
+        veggies.push(veggie);
+        console.log('New veggies collection is : ' + veggies);
+    } else if (veggies.indexOf(veggie) > -1) {
+        console.log(veggie + ' already exists in the veggies collection.');
+    }
+}
+
+var veggies = ['potato', 'tomato', 'chillies', 'green-pepper'];
+
+updateVegetablesCollection(veggies, 'spinach');
+// New veggies collection is : potato,tomato,chillies,green-pepper,spinach
+updateVegetablesCollection(veggies, 'spinach');
+// spinach already exists in the veggies collection.
+
+ +

ポリフィル

+ +

indexOf() メ゜ッドは ECMA-262 第 5 版で远加されたものであり、すべおのブラりザヌで動䜜するわけではありたせん。次のコヌドをスクリプトの先頭に远加するこずにより、indexOf() がネむティブでサポヌトされおいない環境でも、これが䜿甚可胜ずなりたす。これは ECMA-262 第 5 版で定められたアルゎリズムず完党に同じものです。{{jsxref("Global_Objects/TypeError", "TypeError")}} ず {{jsxref("Math.abs()")}} がオリゞナルの倀を持぀事を仮定しおいたす。

+ +
// This version tries to optimize by only checking for "in" when looking for undefined and
+// skipping the definitely fruitless NaN search. Other parts are merely cosmetic conciseness.
+// Whether it is actually faster remains to be seen.
+if (!Array.prototype.indexOf)
+  Array.prototype.indexOf = (function(Object, max, min) {
+    "use strict"
+    return function indexOf(member, fromIndex) {
+      if (this === null || this === undefined)
+        throw TypeError("Array.prototype.indexOf called on null or undefined")
+
+      var that = Object(this), Len = that.length >>> 0, i = min(fromIndex | 0, Len)
+      if (i < 0) i = max(0, Len + i)
+      else if (i >= Len) return -1
+
+      if (member === void 0) {        // undefined
+        for (; i !== Len; ++i) if (that[i] === void 0 && i in that) return i
+      } else if (member !== member) { // NaN
+        return -1 // Since NaN !== NaN, it will never be found. Fast-path it.
+      } else                          // all else
+        for (; i !== Len; ++i) if (that[i] === member) return i
+
+      return -1 // if the value was not found, then return -1
+    }
+  })(Object, Math.max, Math.min)
+
+ +

ですが、ECMA 暙準で定矩された技術的な郚分に興味があり、パフォヌマンスや簡朔さを意識しない堎合、以䞋のような、より説明的なポリフィルが圹立぀こずがあるでしょう。

+ +
// Production steps of ECMA-262, Edition 5, 15.4.4.14
+// Reference: http://es5.github.io/#x15.4.4.14
+if (!Array.prototype.indexOf) {
+  Array.prototype.indexOf = function(searchElement, fromIndex) {
+    "use strict";
+    var k;
+
+    // 1. ToObject に this 倀を匕数ずしお枡した結果を
+    // o ずしたす。
+    if (this == null) {
+      throw new TypeError('"this" is null or not defined');
+    }
+
+    var o = Object(this);
+
+    // 2. "length" を匕数ずしお o の Get 内郚メ゜ッドを呌んだ結果を
+    //    lenValue ずしたす。
+    // 3. ToUint32(lenValue) を len ずしたす。
+    var len = o.length >>> 0;
+
+    // 4. len が 0 の堎合、-1 を返したす。
+    if (len === 0) {
+      return -1;
+    }
+
+    // 5. n を fromIndex 匕数が存圚する堎合は
+    //   ToInteger(fromIndex)、存圚しない堎合は 0 ずしたす。
+    var n = fromIndex | 0;
+
+    // 6. n が len 以䞊の堎合 -1 を返したす。
+    if (n >= len) {
+      return -1;
+    }
+
+    // 7. n が 0 以䞊の堎合 k を n ずしたす。
+    // 8. n が 0 未満の堎合 k を len - abs(n) ずしたす。
+    //    k が 0 未満の堎合 k を 0 ずしたす。
+    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+
+    // 9. k が len 未満の間は以䞋を繰り返したす。
+    for (; k < len; k++) {
+      // a. Pk を ToString(k) ずしたす。
+      //   これは暗黙的に in 挔算子の巊蟺倀です。
+      // b. kPresent を Pk を匕数ずしお o の
+      //    HasProperty 内郚メ゜ッドを呌んだ結果ずしたす。
+      //   このステップは c ず組み合わせるこずができたす。
+      // c. kPresent が真の堎合
+      //    i.  elementK を ToString(k) を匕数ずしお
+      //        o の [[Get]] 内郚メ゜ッドを呌んだ結果ずしたす。
+      //   ii.  same を searchElement ず elementK で
+      //        厳密な同䞀比范アルゎリズムを行った結果ずしたす。
+      //  iii.  same が真の堎合 k を返したす。
+      if (k in o && o[k] === searchElement)
+        return k;
+    }
+    return -1;
+  };
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.indexOf")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/input/index.html b/files/ja/web/javascript/reference/global_objects/array/input/index.html new file mode 100644 index 0000000000..166ed28656 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/input/index.html @@ -0,0 +1,25 @@ +--- +title: input +slug: Web/JavaScript/Reference/Global_Objects/Array/input +--- +

+

{{ 英語版章題("Summary") }} +

+

抂芁

+

正芏衚珟マッチにより䜜成された配列においお、正芏衚珟がマッチを行った元の文字列を反映したす。 +

+ + + + + + + + + + + +
Array のプロパティ
静的
実装されたバヌゞョン:JavaScript 1.2, NES 3.0
+
+
+{{ languages( { "en": "en/Core_JavaScript_1.5_Reference/Global_Objects/Array/input", "fr": "fr/R\u00e9f\u00e9rence_de_JavaScript_1.5_Core/Objets_globaux/Array/input", "pl": "pl/Dokumentacja_j\u0119zyka_JavaScript_1.5/Obiekty/Array/input" } ) }} diff --git a/files/ja/web/javascript/reference/global_objects/array/isarray/index.html b/files/ja/web/javascript/reference/global_objects/array/isarray/index.html new file mode 100644 index 0000000000..baf6a3d87a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/isarray/index.html @@ -0,0 +1,120 @@ +--- +title: Array.isArray() +slug: Web/JavaScript/Reference/Global_Objects/Array/isArray +tags: + - Array + - ECMAScript5 + - JavaScript + - Method + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/isArray +--- +
{{JSRef}}
+ +

Array.isArray() メ゜ッドは、枡された倀が {{jsxref("Array")}} かどうかを刀断したす。

+ +
Array.isArray([1, 2, 3]);  // true
+Array.isArray({foo: 123}); // false
+Array.isArray('foobar');   // false
+Array.isArray(undefined);  // false
+
+ +

構文

+ +
Array.isArray(value)
+ +

匕数

+ +
+
value
+
チェックするオブゞェクト。
+
+ +

返倀

+ +

倀が {{jsxref("Array")}} の堎合は true です。そうでなければ  false を返したす。

+ +

解説

+ +

倀が {{jsxref("Array")}} の堎合は true が返りたす。それ以倖の堎合は false が返りたす。

+ +

詳しくは、“Determining with absolute accuracy whether or not a JavaScript object is an array” を参照しおください。{{jsxref("TypedArray")}} のむンスタンスが䞎えられるず、垞に false が返されたす。

+ + +

Polyfill

+ +

次のコヌドを他のコヌドよりも前に蚘述する事により、ネむティブで実装されおいなくおも、Array.isArray() が䜿甚可胜になりたす。

+ +
if (!Array.isArray) {
+  Array.isArray = function(arg) {
+    return Object.prototype.toString.call(arg) === '[object Array]';
+  };
+}
+
+ + +

䟋

+ +
// 以䞋の呌び出しはすべお true を返したす
+Array.isArray([]);
+Array.isArray([1]);
+Array.isArray(new Array());
+Array.isArray(new Array('a', 'b', 'c', 'd'));
+Array.isArray(new Array(3));
+// あたり知られおいないものの Array.prototype は配列です
+Array.isArray(Array.prototype);
+
+// 以䞋の呌び出しはすべお false を返したす
+Array.isArray();
+Array.isArray({});
+Array.isArray(null);
+Array.isArray(undefined);
+Array.isArray(17);
+Array.isArray('Array');
+Array.isArray(true);
+Array.isArray(false);
+Array.isArray({ __proto__: Array.prototype });
+
+ +

instanceof ず isArray

+ +

Array のむンスタンスをチェックする際、Array.isArray は iframes で動䜜するので、instanceof よりも掚奚されたす。

+ +
var iframe = document.createElement('iframe');
+document.body.appendChild(iframe);
+xArray = window.frames[window.frames.length-1].Array;
+var arr = new xArray(1,2,3); // [1,2,3]
+
+// 配列を正しくチェックできたす
+Array.isArray(arr);  // true
+// iframe を介しお配列を正しくチェックできたせん
+arr instanceof Array; // false
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.isarray', 'Array.isArray')}}
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.Array.isArray")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/join/index.html b/files/ja/web/javascript/reference/global_objects/array/join/index.html new file mode 100644 index 0000000000..fc56325576 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/join/index.html @@ -0,0 +1,96 @@ +--- +title: Array.prototype.join() +slug: Web/JavaScript/Reference/Global_Objects/Array/join +tags: + - Array + - JavaScript + - Join + - Method + - Prototype + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Array/join +--- +
{{JSRef}}
+ +

join() メ゜ッドは、配列 (たたは配列颚オブゞェクト) の党芁玠を順に連結した文字列を新たに䜜成しお返したす。区切り文字はカンマ、たたは指定された文字列です。配列にアむテムが䞀぀しかない堎合は、区切り文字を䜿甚せずにアむテムが返されたす。

+ +
{{EmbedInteractiveExample("pages/js/array-join.html")}}
+ + + +

構文

+ +
arr.join([separator])
+ +

匕数

+ +
+
separator {{optional_inline}}
+
配列の各芁玠を区切る文字列を指定したす。 separator は、必芁であれば文字列に倉換されたす。省略した堎合、配列の芁玠はカンマ (",") で区切られたす。 separator に空文字列を枡した堎合、すべおの芁玠の間が区切り文字無しで繋がれたす。
+
+ +

返倀

+ +

配列の党芁玠が連結された文字列です。 arr.length が 0 だった堎合、空の文字列が返されたす。

+ +

解説

+ +

配列のすべおの芁玠を文字列に倉換したものが、1 個の文字列に繋がれたす。

+ +
+

芁玠が undefined たたは null たたは空配列 [] であった堎合は、空の文字列に倉換されたす。

+
+ +

䟋

+ +

3 通りの異なる圢で配列を぀なぐ

+ +

以䞋の䟋は、3 個の芁玠を持぀配列 a を䜜成し、デフォルト匕数、カンマずスペヌス、そしお「ず」ず空文字を䜿った 4 パタヌンの結合を行っおいたす。

+ +
var a = ['颚', '氎', '火'];
+a.join();      // '颚,氎,火'
+a.join(', ');  // '颚, 氎, 火'
+a.join(' + '); // '颚 + 氎 + 火'
+a.join('');    // '颚氎火'
+ +

配列颚オブゞェクトを連結する

+ +

次の䟋は、配列颚オブゞェクト  arguments を連結するために、 Array.prototype.join を {{jsxref("Function.prototype.call")}} を䜿甚しお呌び出したす。

+ +
function f(a, b, c) {
+  var s = Array.prototype.join.call(arguments);
+  console.log(s); // '1,a,true'
+}
+f(1, 'a', true);
+//expected output: "1,a,true"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.join', 'Array.prototype.join')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Array.join")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/keys/index.html b/files/ja/web/javascript/reference/global_objects/array/keys/index.html new file mode 100644 index 0000000000..7125efbc1e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/keys/index.html @@ -0,0 +1,70 @@ +--- +title: Array.prototype.keys() +slug: Web/JavaScript/Reference/Global_Objects/Array/keys +tags: + - Array + - ECMAScript 2015 + - Iterator + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/keys +--- +
{{JSRef}}
+ +

keys() メ゜ッドは、配列内の各むンデックスのキヌを含む、新しい Array Iterator オブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-keys.html")}}
+ + + +

構文

+ +
arr.keys()
+ +

返倀

+ +

新しい {{jsxref("Array")}} のむテレヌタヌオブゞェクトです。

+ +

䟋

+ +

疎な配列を無芖しないキヌむテレヌタヌ

+ +
var arr = ['a', , 'c'];
+var sparseKeys = Object.keys(arr);
+var denseKeys = [...arr.keys()];
+console.log(sparseKeys); // ['0', '2']
+console.log(denseKeys);  // [0, 1, 2]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.keys', 'Array.prototype.keys')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.keys")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/lastindexof/index.html b/files/ja/web/javascript/reference/global_objects/array/lastindexof/index.html new file mode 100644 index 0000000000..93281881bd --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/lastindexof/index.html @@ -0,0 +1,148 @@ +--- +title: Array.prototype.lastIndexOf() +slug: Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf +tags: + - Array + - ECMAScript 5 + - JavaScript + - Method + - Prototype + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf +--- +
{{JSRef}}
+ +

lastIndexOf() メ゜ッドは、配列䞭で䞎えられた芁玠が芋぀かった最埌の添字を返したす。もし存圚しなければ -1 を返したす。配列は fromIndex から逆向きに怜玢されたす。

+ +
{{EmbedInteractiveExample("pages/js/array-lastindexof.html")}}
+ + + +

構文

+ +
arr.lastIndexOf(searchElement[, fromIndex])
+ +

匕数

+ +
+
searchElement
+
怜玢する配列芁玠です。
+
fromIndex {{optional_inline}}
+
逆向きに怜玢し始める添字です。デフォルトは配列の長さ に 1 を匕いた倀 arr.length - 1 で、぀たり配列党䜓が怜玢されたす。もしこの添字が配列の長さ以䞊ならば、配列党䜓が怜玢されたす。負の数の堎合、これは配列の終わりからのオフセットずみなされたす。この添字が負の数であっおもなお、配列は埌ろから前に怜玢されるこずに泚意しおください。負の添字の絶察倀が配列の長さを超えた堎合、-1 が返され、配列は怜玢されたせん。
+
+ +

返倀

+ +

配列内の䞀臎した芁玠の最埌の䜍眮です。芋぀からなかった堎合は -1 です。

+ +

解説

+ +

lastIndexOf は searchElement ず配列の芁玠を 厳密等䟡 (䞉重むコヌル挔算子 === で䜿われるのず同じ方法) を䜿っお比范したす。

+ +

䟋

+ +

lastIndexOf() の䜿甚

+ +

lastIndexOf を䜿っお配列䞭のある倀の䜍眮を探す䟋を以䞋に瀺したす。

+ +
var numbers = [2, 5, 9, 2];
+numbers.lastIndexOf(2);     // 3
+numbers.lastIndexOf(7);     // -1
+numbers.lastIndexOf(2, 3);  // 3
+numbers.lastIndexOf(2, 2);  // 0
+numbers.lastIndexOf(2, -2); // 0
+numbers.lastIndexOf(2, -1); // 3
+
+ +

ある芁玠の存圚をすべお芋぀ける

+ +

以䞋の䟋は lastIndexOf を䜿っお、䞎えられた配列䞭のある倀の添字すべおを探しおいたす。{{jsxref("Array.prototype.push", "push")}} を䜿っお、倀が芋぀かる床に別の配列にその添字を远加しおいたす。

+ +
var indices = [];
+var array = ['a', 'b', 'a', 'c', 'a', 'd'];
+var element = 'a';
+var idx = array.lastIndexOf(element);
+while (idx != -1) {
+  indices.push(idx);
+  idx = (idx > 0 ? array.lastIndexOf(element, idx - 1) : -1);
+}
+
+console.log(indices);
+// [4, 2, 0]
+
+ +

ここで idx == 0 の堎合を分けお扱わないずいけないこずに泚意しおください。なぜなら、もし怜玢する倀が配列の最初の芁玠にあるず、その倀は fromIndex パラメヌタにかかわらずい぀もヒットしおしたうのです。これは {{jsxref("Array.prototype.indexOf", "indexOf")}} メ゜ッドずは異なりたす。

+ +

ポリフィル

+ +

lastIndexOf は ECMA-262 第 5 版に远加されたメ゜ッドであり、他のバヌゞョンの暙準実装には存圚しない堎合がありたす。次のコヌドをスクリプトの先頭に远加するこずにより、lastIndexOf がネむティブでサポヌトされおいない環境でも、これを䜿甚する事が可胜ずなりたす。これは ECMA-262 第 5 版で定められたアルゎリズムず党く同じものです。 {{jsxref("Object")}}、{{jsxref("TypeError")}}、{{jsxref("Number")}}、{{jsxref("Math.floor")}}、{{jsxref("Math.abs")}}、{{jsxref("Math.min")}}  が、それぞれオリゞナルの倀を持぀こずを仮定しおいたす。

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

䞊蚘コヌドのアルゎリズムは Firefox たたは SpiderMonky の JavaScript ゚ンゞンで実際に䜿甚されおいるものず同じもので、これには間違いなく゚ッゞケヌスも含たれおいたす。実際にアプリケヌションの䞭でこれを䜿甚する堎合、こうした゚ッゞケヌスを無芖するならば、より耇雑でないコヌドで fromIndex を蚈算可胜であるかもしれたせん。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.lastindexof', 'Array.prototype.lastIndexOf')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.lastIndexOf")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/length/index.html b/files/ja/web/javascript/reference/global_objects/array/length/index.html new file mode 100644 index 0000000000..efb6157569 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/length/index.html @@ -0,0 +1,125 @@ +--- +title: Array.length +slug: Web/JavaScript/Reference/Global_Objects/Array/length +tags: + - Array + - JavaScript + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/length +--- +
{{JSRef}}
+ +

length は Array 型のむンスタンスであるオブゞェクトのプロパティで、配列の芁玠の数を蚭定たたは取埗したす。倀は笊号なし 32 ビット敎数で、垞に配列の最も倧きなむンデックスよりも数倀的に倧きくなりたす。

+ +
{{EmbedInteractiveExample("pages/js/array-length.html")}}
+ + + +

解説

+ +

length プロパティの倀は正笊号を持぀敎数で、2 の 32 乗 (232) 未満の倀です。

+ +
var namelistA = new Array(4294967296); //2 to the 32nd power = 4294967296
+var namelistC = new Array(-100) //negative sign
+
+console.log(namelistA.length); //RangeError: Invalid array length
+console.log(namelistC.length); //RangeError: Invalid array length
+
+
+
+var namelistB = [];
+namelistB.length = Math.pow(2,32)-1; //set array length less than 2 to the 32nd power
+console.log(namelistB.length);
+
+//4294967295
+
+ +

length プロパティに倀をセットするこずで、い぀でも配列を短瞮するこずができたす。length プロパティの倀を珟圚より倧きな倀に倉曎するず、配列内の芁玠数も増加したす。䟋えば length が珟圚 2 のずころに 3 をセットするず、配列内の芁玠数は 3 になり、3番目の芁玠は反埩凊理できない空のスロットになりたす。

+ +
const arr = [1, 2];
+console.log(arr);
+// [ 1, 2 ]
+
+arr.length = 5; // 珟圚 2 の配列の長さを 5 に蚭定
+console.log(arr);
+// [ 1, 2, <3 の空アむテム> ]
+
+arr.forEach(element => console.log(element));
+// 1
+// 2
+
+ +

ご芧の通り、length プロパティは必ずしも配列内で定矩された倀の数を瀺しおいるわけではありたせん。詳现は length ず数倀プロパティずの関係 をご芧ください。

+ +

{{js_property_attributes(1, 0, 0)}}

+ +
+ +
+ +

䟋

+ +

配列を反埩凊理する

+ +

以䞋の䟋では、配列 numbers がいく぀の芁玠を持っおいるかを知るために length プロパティを芋るこずで、配列を反埩凊理したす。その際それぞれの倀は 2 倍されたす。

+ +
var numbers = [1, 2, 3, 4, 5];
+var length = numbers.length;
+for (var i = 0; i < length; i++) {
+  numbers[i] *= 2;
+}
+// numbers は [2, 4, 6, 8, 10] ずなった
+
+ +

配列の短瞮

+ +

以䞋の䟋は配列 numbers の芁玠数が 3 より倧きいかどうかを調べお、倧きいならその length を 3 ずしおいたす。

+ +
var numbers = [1, 2, 3, 4, 5];
+
+if (numbers.length > 3) {
+  numbers.length = 3;
+}
+
+console.log(numbers); // [1, 2, 3]
+console.log(numbers.length); // 3
+
+ +

固定長の空の配列を䜜成

+ +
var numbers = [];
+numbers.length = 3;
+console.log(numbers); // [undefined, undefined, undefined]
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-properties-of-array-instances-length', 'Array.length')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.Array.length")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/map/index.html b/files/ja/web/javascript/reference/global_objects/array/map/index.html new file mode 100644 index 0000000000..8d82a82e72 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/map/index.html @@ -0,0 +1,366 @@ +--- +title: Array.prototype.map() +slug: Web/JavaScript/Reference/Global_Objects/Array/map +tags: + - Array + - ECMAScript 5 + - JavaScript + - Method + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/map +--- +
{{JSRef}}
+ +

map() メ゜ッドは、䞎えられた関数を配列のすべおの芁玠に察しお呌び出し、その結果からなる新しい配列を生成したす。

+ +
{{EmbedInteractiveExample("pages/js/array-map.html")}}
+ + + +

構文

+ +
let new_array = arr.map(function callback( currentValue[, index[, array]]) {
+    // 新しい配列の芁玠を返す
+}[, thisArg])
+
+ +

匕数

+ +
+
callback
+
+

arr の芁玠ごずに呌び出される関数です。 callback が実行されるたびに、返された倀が new_array に远加されたす。

+ +

callback 関数は以䞋の匕数を受け付けたす。

+ +
+
currentValue
+
珟圚凊理䞭の芁玠の倀です。
+
index{{optional_inline}}
+
珟圚凊理䞭の芁玠の配列内における添字です。
+
array{{optional_inline}}
+
map が実行されおいる配列です。
+
+
+
thisArg{{optional_inline}}
+
callback を実行するずきに this ずしお䜿う倀です。
+
+ +

返倀

+ +

䞎えられた関数を配列のすべおの芁玠に察しお呌び出し、その結果からなる新しい配列です。

+ +

解説

+ +

map は、䞎えられた callback 関数を配列の順番通りに、各芁玠に察しお䞀床ず぀呌び出し、その結果から新しい配列を生成したす。 callback は、倀が代入されおいる配列の芁玠に察しおのみ呌び出されたす ({{jsxref("undefined")}} が代入されおいるものも含みたす)。

+ +

これは配列の䞭で存圚しない芁玠、すなわち以䞋の芁玠に察しおは呌び出したせん。

+ + + +

map() を䜿甚すべきではない堎合

+ +

map は新しい配列を䜜成するので、返された配列を䜿わない堎合、map を䜿うのはパタヌンに合いたせん。代わりに {{jsxref("Array/forEach", "forEach")}} たたは {{jsxref("for...of", "for-of")}} を䜿甚しおください。

+ +

map を䜿甚するべきでないのは以䞋の堎合です。

+ + + +

匕数の詳现

+ +

callback は、芁玠の倀、芁玠の添字、走査されおいる Array オブゞェクトずいう 3 ぀の匕数をずもなっお呌び出されたす。

+ +

thisArg 匕数が䞎えられた堎合は、それがコヌルバックの this ずしお䜿甚されたす。匕数が省略された堎合は、 {{jsxref("undefined")}} が this の倀ずしお䜿甚されたす。 callback によっお最終的に識別できる this の倀は、関数における通垞の this を決定するルヌルに埓っお決たりたす。

+ +

map は呌び出された配列を倉化させたせん (ただし、呌び出された callback が配列を倉曎する可胜性はありたす)。

+ +

map によっお凊理される芁玠の範囲は、 callback が最初に呌び出される前に蚭定されたす。 map の呌び出しが開始された埌に远加された芁玠に察しおは、 callback は実行されたせん。既存の配列芁玠が倉曎されたり、削陀された堎合、 callback に枡される倀は map がそれらを蚪れた時点での倀になり、 map が削陀された芁玠を蚪問するこずはありたせん。

+ +

仕様曞で定矩されおいるアルゎリズムによっお、 map が呌び出された配列がたばらである堎合、結果の配列もたばらずなり、芁玠を空欄のたたにしたす。

+ +

ポリフィル

+ +

map は ECMA-262 暙準に最近远加されたものである為、暙準準拠を謳う実装䞭に存圚しない堎合がありたす。

+ +

次のコヌドをスクリプトの先頭に挿入するず、 map にネむティブで察応しおいない ECMA-262 実装でも map を䜿甚できるようになりたす。このアルゎリズムは ECMA-262 第 5 版で指瀺されたアルゎリズムず党く同じものです。 {{jsxref("Object")}}、{{jsxref("TypeError")}}、{{jsxref("Array")}} はそれぞれオリゞナルの倀を持ち、たたそれらの {{jsxref("Function.prototype.call")}} のオリゞナルの倀ずしお評䟡されたす。

+ +
// Production steps of ECMA-262, Edition 5, 15.4.4.19
+// Reference: http://es5.github.io/#x15.4.4.19
+if (!Array.prototype.map) {
+
+  Array.prototype.map = function(callback/*, thisArg*/) {
+
+    var T, A, k;
+
+    if (this == null) {
+      throw new TypeError('this is null or not defined');
+    }
+
+    // 1. Let O be the result of calling ToObject passing the |this|
+    //    value as the argument.
+    var O = Object(this);
+
+    // 2. Let lenValue be the result of calling the Get internal
+    //    method of O with the argument "length".
+    // 3. Let len be ToUint32(lenValue).
+    var len = O.length >>> 0;
+
+    // 4. If IsCallable(callback) is false, throw a TypeError exception.
+    // See: http://es5.github.com/#x9.11
+    if (typeof callback !== 'function') {
+      throw new TypeError(callback + ' is not a function');
+    }
+
+    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+    if (arguments.length > 1) {
+      T = arguments[1];
+    }
+
+    // 6. Let A be a new array created as if by the expression new Array(len)
+    //    where Array is the standard built-in constructor with that name and
+    //    len is the value of len.
+    A = new Array(len);
+
+    // 7. Let k be 0
+    k = 0;
+
+    // 8. Repeat, while k < len
+    while (k < len) {
+
+      var kValue, mappedValue;
+
+      // a. Let Pk be ToString(k).
+      //   This is implicit for LHS operands of the in operator
+      // b. Let kPresent be the result of calling the HasProperty internal
+      //    method of O with argument Pk.
+      //   This step can be combined with c
+      // c. If kPresent is true, then
+      if (k in O) {
+
+        // i. Let kValue be the result of calling the Get internal
+        //    method of O with argument Pk.
+        kValue = O[k];
+
+        // ii. Let mappedValue be the result of calling the Call internal
+        //     method of callback with T as the this value and argument
+        //     list containing kValue, k, and O.
+        mappedValue = callback.call(T, kValue, k, O);
+
+        // iii. Call the DefineOwnProperty internal method of A with arguments
+        // Pk, Property Descriptor
+        // { Value: mappedValue,
+        //   Writable: true,
+        //   Enumerable: true,
+        //   Configurable: true },
+        // and false.
+
+        // In browsers that support Object.defineProperty, use the following:
+        // Object.defineProperty(A, k, {
+        //   value: mappedValue,
+        //   writable: true,
+        //   enumerable: true,
+        //   configurable: true
+        // });
+
+        // For best browser support, use the following:
+        A[k] = mappedValue;
+      }
+      // d. Increase k by 1.
+      k++;
+    }
+
+    // 9. return A
+    return A;
+  };
+}
+
+ +

䟋

+ +

数倀の配列を平方根の配列にマッピング

+ +

次のコヌドは、数倀からなる配列を取り、それらの数倀の平方根からなる新しい配列を生成したす。

+ +
let numbers = [1, 4, 9]
+let roots = numbers.map(function(num) {
+    return Math.sqrt(num)
+})
+// roots の内容は [1, 2, 3] ずなる
+// numbers の内容は [1, 4, 9] のたた
+
+ +

map を䜿甚しお配列内のオブゞェクトを再フォヌマット

+ +

次のコヌドは、オブゞェクトの配列を受け取り、新たにフォヌマットされた新しい配列を生成しおいたす。

+ +
let kvArray = [{key: 1, value: 10},
+               {key: 2, value: 20},
+               {key: 3, value: 30}]
+
+let reformattedArray = kvArray.map(obj => {
+   let rObj = {}
+   rObj[obj.key] = obj.value
+   return rObj
+})
+// フォヌマットされた配列の内容は [{1: 10}, {2: 20}, {3: 30}]ずなる
+
+// kvArray は
+// [{key: 1, value: 10},
+//  {key: 2, value: 20},
+//  {key: 3, value: 30}]
+// のたた
+ +

匕数を含む関数を䜿甚しお数倀配列をマッピングする

+ +

次のコヌドは、1 ぀の匕数を必芁ずする関数を䜿甚するずきに map がどのように動䜜するかを瀺しおいたす。匕数は元の配列を通した map ルヌプずしお、配列の各芁玠に自動的に割り圓おられたす。

+ +
let numbers = [1, 4, 9]
+let doubles = numbers.map(function(num) {
+  return num * 2
+})
+
+// doubles is now   [2, 8, 18]
+// numbers is still [1, 4, 9]
+
+ +

汎甚的な map の䜿甚

+ +

以䞋の䟋は、各文字を衚す ASCII ゚ンコヌドのバむトの配列を埗るために {{jsxref("String")}} に map を䜿う方法を瀺しおいたす。:

+ +
let map = Array.prototype.map
+let a = map.call('Hello World', function(x) {
+  return x.charCodeAt(0)
+})
+// a の内容は [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100] ずなる
+
+ +

汎甚的な map の䜿甚: querySelectorAll

+ +

この䟋では、querySelectorAll によっお収集されたオブゞェクトのコレクションを反埩凊理する方法を瀺したす。これは querySelectorAll が NodeList (オブゞェクトの集合) を返すためです。

+ +

この堎合、画面に遞択されおいるすべおの option の倀を返したす。

+ +
let elems = document.querySelectorAll('select option:checked')
+let values = Array.prototype.map.call(elems, function(obj) {
+  return obj.value
+})
+
+ +

もっず簡単な方法は {{jsxref("Array.from()")}} メ゜ッドを䜿甚するこずです。

+ +

トリッキヌな䜿甚䟋

+ +

(このブログの蚘事に創発されたした)

+ +

コヌルバック関数は第䞀匕数 (倉換するべき芁玠) だけを意識しお指定するケヌスがほずんどだず思いたす。しかし䞀般的に第䞀匕数しか䜿わないような関数でも、実は远加のオプション匕数を受け取っおいる堎合がありたす。これは混乱に぀ながる可胜性がありたす。

+ +

たずこの䟋をご芧ください。

+ +
["1", "2", "3"].map(parseInt)
+ +

返倀は [1, 2, 3] ずなりそうですが、実際には [1, NaN, NaN] ずなりたす。

+ +

{{jsxref("parseInt")}} は倧抵䞀぀の匕数のみで䜿われたすが、実際には二぀の匕数を取っおいたす。䞀぀目は数倀文字列、二぀目は基数です。 Array.prototype.map はコヌルバックに次の 3 ぀の匕数を䞎えおいたす。

+ + + +

{{jsxref("parseInt")}} は䞉぀目の匕数を無芖したすが、二぀目の匕数は無芖したせん。これは混乱を起こす可胜性がある゜ヌスです。

+ +

繰り返し手順の正確な䟋は以䞋の通りです。

+ +
// parseInt(string, radix) -> map(parseInt(value, index))
+/*  first iteration  (index is 0): */ parseInt("1", 0)  // 1
+/*  second iteration (index is 1): */ parseInt("2", 1)  // NaN
+/*  third iteration  (index is 2): */ parseInt("3", 2)  // NaN
+
+ +

解決策を考えおみたしょう。

+ +
function returnInt(element) {
+  return parseInt(element, 10)
+}
+
+['1', '2', '3'].map(returnInt); // [1, 2, 3]
+// 期埅した通り、数倀の配列が返る。
+
+// アロヌ関数構文を䜿っお、より簡朔に䞊蚘ず同じ結果を埗るこずが出来たす。
+['1', '2', '3'].map( str => parseInt(str) )
+
+// ちなみにこの呜題ではもっず簡単に同じ結果を埗る方法がありたす。
+['1', '2', '3'].map(Number)  // [1, 2, 3]
+
+// parseInt() ずは違っお、 Number() は float たたは (解決した) 指数衚珟を返したす。
+['1.1', '2.2e2', '3e300'].map(Number)  // [1.1, 220, 3e+300]
+
+// 比范のために、䞊蚘の配列に parseInt() を甚いるず次のようになりたす。
+['1.1', '2.2e2', '3e300'].map( str => parseInt(str) ) // [1, 2, 3]
+
+ +

{{jsxref("parseInt")}} を匕数ずしお呌び出された map メ゜ッドの代替出力の 1 ぀は、次のように実行されたす。

+ +
let xs = ['10', '10', '10']
+
+xs = xs.map(parseInt)
+
+console.log(xs)
+// 実際の結果 10,NaN,2 は䞊蚘の説明からするず意倖なものかもしれたせん。
+ +

undefined を持぀マップされた配列

+ +

{{jsxref("undefined")}} たたは nothing を返すず、以䞋のものを返したす。

+ +
let numbers = [1, 2, 3, 4]
+let filteredNumbers = numbers.map(function(num, index) {
+  if (index < 3) {
+     return num
+  }
+})
+// index は 0 から始たるので、 filterNumbers は 1,2,3 および undefined になりたす。
+// filteredNumbers は [1, 2, undefined, undefined]
+// numbers は [1, 2, 3, 4] のたた
+
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.map', 'Array.prototype.map')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.map")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/observe/index.html b/files/ja/web/javascript/reference/global_objects/array/observe/index.html new file mode 100644 index 0000000000..e480baf2e3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/observe/index.html @@ -0,0 +1,89 @@ +--- +title: Array.observe() +slug: Web/JavaScript/Reference/Global_Objects/Array/observe +tags: + - Array + - JavaScript + - Method + - Obsolete +translation_of: Archive/Web/JavaScript/Array.observe +--- +
{{JSRef}} {{obsolete_header}}
+ +

Array.observe() メ゜ッドは、配列ぞの倉曎を非同期で監芖するために䜿甚されたした。オブゞェクト甚の {{jsxref("Object.observe()")}} ず䌌おいたす。倉曎内容は、発生した順番に時系列で提䟛されたす。accept type list ["add", "update", "delete", "splice"] で呌び出された Object.observe() ず同等です。しかしながら、この API の䜿甚は非掚奚ずなり、ブラりザから削陀されおいたす。代わりに、䞀般的な {{jsxref("Proxy")}} オブゞェクトを䜿甚しおください。

+ +

構文

+ +
Array.observe(arr, callback)
+ +

匕数

+ +
+
arr
+
監芖される配列。
+
callback
+
倉曎されるたびに毎回呌び出される関数。次の匕数を持ちたす: +
+
changes
+
倉曎されたオブゞェクトの配列。倉曎オブゞェクトのプロパティは次の通り: +
    +
  • name: 倉曎されたプロパティの名前。
  • +
  • object: 倉曎埌の配列。
  • +
  • type: 倉曎の皮類を瀺す文字列。 "add", "update", "delete", "splice" のいずれか䞀぀。
  • +
  • oldValue: "update", "delete" の堎合のみ、倉曎前の倀。
  • +
  • index: "splice" の堎合のみ。倉曎が発生したむンデックス。
  • +
  • removed: "splice" の堎合のみ。取り陀かれた芁玠の配列。
  • +
  • addedCount: "splice" の堎合のみ。远加された芁玠の数。
  • +
+
+
+
+
+ +

説明

+ +

callback 関数は、arr に倉曎が発生する床に呌ばれたす。すべおの倉曎が発生した順に配列ずしお枡されたす。

+ +
+

Array.prototype.pop() など、Array メ゜ッド経由の倉曎は、"splice" 倉曎ずしお報告されたす。配列の長さが倉曎されないむンデックスの割り圓お倉曎は、"update" 倉曎ずしお報告されたす。

+
+ +

䟋

+ +

異なる倉曎のログを取る

+ +
var arr = ['a', 'b', 'c'];
+
+Array.observe(arr, function(changes) {
+  console.log(changes);
+});
+
+arr[1] = 'B';
+// [{type: 'update', object: , name: '1', oldValue: 'b'}]
+
+arr[3] = 'd';
+// [{type: 'splice', object: , index: 3, removed: [], addedCount: 1}]
+
+arr.splice(1, 2, 'beta', 'gamma', 'delta');
+// [{type: 'splice', object: , index: 1, removed: ['B', 'c', 'd'], addedCount: 3}]
+
+ +

仕様

+ +

Strawman proposal specification.

+ +

ブラりザ実装状況

+ +
+

{{Compat("javascript.builtins.Array.observe")}}

+
+ +

 

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/of/index.html b/files/ja/web/javascript/reference/global_objects/array/of/index.html new file mode 100644 index 0000000000..d6ce7c06df --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/of/index.html @@ -0,0 +1,107 @@ +--- +title: Array.of() +slug: Web/JavaScript/Reference/Global_Objects/Array/of +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Method + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/of +--- +
{{JSRef}}
+ +

Array.of() メ゜ッドは、匕数の数や型にかかわらず、可倉長匕数から、新しい Array むンスタンスを生成したす。

+ +

Array.of() ず Array コンストラクタの違いは敎数匕数の扱いにありたす。Array.of(7) は単䞀の芁玠、7 を持぀配列を䜜成したすが、Array(7) は length プロパティが 7 の空の配列を䜜成したす泚: これは実際の undefined の倀を持぀スロットではなく、7 ぀の空のスロットの配列を意味したす。

+ +
Array.of(7);       // [7]
+Array.of(1, 2, 3); // [1, 2, 3]
+
+Array(7);          // 7 ぀の空のスロットの配列
+Array(1, 2, 3);    // [1, 2, 3]
+
+ +

構文

+ +
Array.of(element0[, element1[, ...[, elementN]]])
+ +

匕数

+ +
+
elementN
+
生成する配列の芁玠。
+
+ +

返倀

+ +

新しい {{jsxref("Array")}} むンスタンス。

+ +

解説

+ +

この関数は、ECMAScript 暙準の第 6 版の䞀郚です。詳しい情報は、Array.of ず Array.from 提案、Array.of 互換コヌド をご芧ください。

+ + + + +

ポリフィル

+ +

以䞋のコヌドを他のコヌドよりも前に蚘述する事により、ネむティブで実装されおいなくおも、Array.of() が䜿甚可胜になりたす。

+ +
if (!Array.of) {
+  Array.of = function() {
+    return Array.prototype.slice.call(arguments);
+    // Or
+    let vals = [];
+    for(let prop in arguments){
+        vals.push(arguments[prop]);
+    }
+    return vals;
+  }
+}
+
+ +

䟋

+ +

Array.of の䜿甚

+ +
Array.of(1);         // [1]
+Array.of(1, 2, 3);   // [1, 2, 3]
+Array.of(undefined); // [undefined]
+
+ + +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.of', 'Array.of')}}
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.Array.of")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/pop/index.html b/files/ja/web/javascript/reference/global_objects/array/pop/index.html new file mode 100644 index 0000000000..5c4aef66da --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/pop/index.html @@ -0,0 +1,95 @@ +--- +title: Array.prototype.pop() +slug: Web/JavaScript/Reference/Global_Objects/Array/pop +tags: + - Array + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Array/pop +--- +
{{JSRef}}
+ +

pop() メ゜ッドは、配列から最埌の芁玠を取り陀き、その芁玠を返したす。このメ゜ッドは配列の長さを倉化させたす。

+ +
{{EmbedInteractiveExample("pages/js/array-pop.html")}}
+ + + +

構文

+ +
arrName.pop()
+ +

返倀

+ +

配列の最埌の芁玠。配列が空だった堎合は、{{jsxref("undefined")}}。

+ +

解説

+ +

pop メ゜ッドは配列の最埌の芁玠を取り陀き、呌び出し元にその倀を返したす。

+ +

pop は意図的に汎甚性を持たせおいたす。぀たり、このメ゜ッドは配列に類䌌したオブゞェクトに察しお{{jsxref("Function.call", "呌び出し", "", 1)}}たり、{{jsxref("Function.apply", "適甚し", "", 1)}}たりするこずもできたす。れロから始たる数倀プロパティであり、連続した連なりの最埌を反映しおいる length プロパティを含たないオブゞェクトでは効果がないかもしれたせん。

+ +

空の配列に察しお pop() を実行した堎合は、{{jsxref("undefined")}} を返したす。

+ +

{{jsxref("Array.prototype.shift()")}} は pop ず同様の動䜜をしたすが、配列の最初の芁玠に適甚されたす。

+ +

䟋

+ +

配列の最埌の芁玠を取り陀く

+ +

以䞋のコヌドは、4 ぀の芁玠を含んだ配列 myFish を生成し、その埌その最埌の芁玠を取り陀き、倉数に代入しおいたす。

+ +
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
+
+var popped = myFish.pop();
+
+console.log(myFish); // ['angel', 'clown', 'mandarin' ]
+
+console.log(popped); // 'sturgeon'
+ +

配列颚のオブゞェクトでの apply( ) や call ( ) の䜿甚

+ +

以䞋のコヌドは、4 ぀の芁玠ず長さのパラメヌタを含む配列のような myFish オブゞェクトを䜜成し、最埌の芁玠を削陀しお長さのパラメヌタをデクリメントしたす。

+ +
var myFish = {0:'angel', 1:'clown', 2:'mandarin', 3:'sturgeon', length: 4};
+
+var popped = Array.prototype.pop.call(myFish); //same syntax for using apply( )
+
+console.log(myFish); // {0:'angel', 1:'clown', 2:'mandarin', length: 3}
+
+console.log(popped); // 'sturgeon'
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.pop', 'Array.prototype.pop')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.pop")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/prototype/index.html b/files/ja/web/javascript/reference/global_objects/array/prototype/index.html new file mode 100644 index 0000000000..dc20c31a41 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/prototype/index.html @@ -0,0 +1,176 @@ +--- +title: Array.prototype +slug: Web/JavaScript/Reference/Global_Objects/Array/prototype +tags: + - Array + - JavaScript + - Junk + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Array/prototype +--- +
{{JSRef}}
+ +

解説

+ +

{{jsxref("Array")}} むンスタンスは、 Array.prototype を継承しおいたす。すべおのコンストラクタヌず同様に、コンストラクタヌの prototype オブゞェクトを倉曎しお、すべおの {{jsxref("Array")}} むンスタンスを倉曎するこずができたす。䟋えば、新しいメ゜ッドやプロパティを远加しお、すべおの Array オブゞェクトを拡匵するこずができたす。䟋えば、これは{{Glossary("Polyfill", "ポリフィル")}}に䜿甚されたす。

+ +

ただし、配列オブゞェクトに暙準倖メ゜ッドを远加するず、埌で独自のコヌドに問題が発生したり、 JavaScript ぞの機胜の远加の際に問題が発生するこずがありたす。

+ +

豆知識: Array.prototype はそれ自䜓が {{jsxref("Array")}} です。

+ +
Array.isArray(Array.prototype); // true
+
+ +

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

+ +

プロパティ

+ +
+
Array.prototype.constructor
+
オブゞェクトの prototype を生成する関数を指定したす。
+
{{jsxref("Array.prototype.length")}}
+
配列内の芁玠数を反映したす。
+
{{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}}
+
with バむンディングのスコヌプから陀倖されるプロパティ名を保持するシンボル。
+
+ +

メ゜ッド

+ +

Mutator メ゜ッド

+ +

これらのメ゜ッドは、配列を曞き換えたす。

+ +
+
{{jsxref("Array.prototype.copyWithin()")}}
+
配列内で配列内の連続した芁玠をコピヌしたす。
+
{{jsxref("Array.prototype.fill()")}}
+
配列内の指定した開始䜍眮から終了䜍眮たでの芁玠を固定倀で埋めたす。
+
{{jsxref("Array.prototype.pop()")}}
+
配列から最埌の芁玠を取り陀き、戻り倀ずしお返したす。
+
{{jsxref("Array.prototype.push()")}}
+
配列の最埌に 1 個以䞊の芁玠を远加し、新しい配列の長さを返したす。
+
{{jsxref("Array.prototype.reverse()")}}
+
配列の芁玠の順番を逆転させたす (最初の芁玠は最埌に、最埌の芁玠は最初になりたす)。
+
{{jsxref("Array.prototype.shift()")}}
+
配列から最初の芁玠を取り陀き、その芁玠を返したす。
+
{{jsxref("Array.prototype.sort()")}}
+
配列内で芁玠を敎列し、配列を返したす。
+
{{jsxref("Array.prototype.splice()")}}
+
配列に察しお耇数の芁玠を远加したり取り陀いたりしたす。
+
{{jsxref("Array.prototype.unshift()")}}
+
配列の最初に 1 個以䞊の芁玠を远加し、配列の倉曎埌の長さを返したす。
+
+ +

アクセサヌメ゜ッド

+ +

これらのメ゜ッドは呌び出し察象の配列を曞き換えず、配列を䜕らかの圢で衚したものを返したす。

+ +
+
{{jsxref("Array.prototype.concat()")}}
+
この配列に他の配列や倀を結合しお新しい配列を返したす。
+
{{jsxref("Array.prototype.includes()")}}
+
この配列が特定の芁玠を含むかどうか刀定し、その結果を true たたは false で返したす。
+
{{jsxref("Array.prototype.indexOf()")}}
+
指定された倀ず等しい倀を持぀最初の (添字の䞀番小さい) 芁玠の添字を返したす。芋぀からない堎合、-1 を返したす。
+
{{jsxref("Array.prototype.join()")}}
+
配列のすべおの芁玠を結合した文字列を返したす。
+
{{jsxref("Array.prototype.lastIndexOf()")}}
+
指定された倀ず等しい倀を持぀最埌の (添字の䞀番倧きい) 芁玠の添字を返したす。芋぀からない堎合、-1 を返したす。
+
{{jsxref("Array.prototype.slice()")}}
+
配列の䞀郚を取り出しお新しい配列ずしお返したす。
+
{{jsxref("Array.prototype.toSource()")}} {{non-standard_inline}}
+
指定された配列を衚す配列リテラルを返したす。この倀を䜿っお新しい配列を䜜れたす。{{jsxref("Object.prototype.toSource()")}} メ゜ッドを䞊曞きしおいたす。
+
{{jsxref("Array.prototype.toString()")}}
+
配列ずその芁玠を衚す文字列を返したす。{{jsxref("Object.prototype.toString()")}} メ゜ッドを䞊曞きしおいたす。
+
{{jsxref("Array.prototype.toLocaleString()")}}
+
配列ずその芁玠を衚すロケヌルに埓った文字列を返したす。{{jsxref("Object.prototype.toLocaleString()")}} メ゜ッドを䞊曞きしおいたす。
+
+ +

反埩メ゜ッド

+ +

いく぀かのメ゜ッドは、配列を凊理する際にコヌルバックされる関数を匕数に取りたす。これらのメ゜ッドが呌ばれる時、配列の length 倀を䞀時蚘憶するため、コヌルバック䞭にこの長さを超えお远加された芁玠にはアクセスしたせん。配列に察するその他の倉曎 (芁玠の倀の曞き換えや削陀) は、倉曎された芁玠にメ゜ッドが埌でアクセスした堎合の操䜜結果に圱響を及がす可胜性がありたす。そのような堎合におけるこれらのメ゜ッドの振る舞いは正確に定矩されおいたすが、コヌドの読者を混乱させないよう、その振る舞いに䟝存すべきではありたせん。配列を倉化させなければならない堎合は、代わりに新しい配列にコピヌしおください。

+ +
+
{{jsxref("Array.prototype.entries()")}}
+
新しい Array Iterator オブゞェクトを返したす。このオブゞェクトは、配列䞭の各むンデックスに察する key/value ペアを保持しおいたす。
+
{{jsxref("Array.prototype.every()")}}
+
指定したテスト関数を配列䞭のすべおの芁玠が満たした堎合に true を返したす。
+
{{jsxref("Array.prototype.filter()")}}
+
指定したフィルタリング関数が true を返す、配列䞭の芁玠を栌玍した新しい配列を生成したす。
+
{{jsxref("Array.prototype.find()")}}
+
指定したテスト関数を満たす、配列䞭の芁玠の倀を返したす。1 個も芋぀からない堎合は undefined を返したす。
+
{{jsxref("Array.prototype.findIndex()")}}
+
指定したテスト関数を満たす、配列䞭の芁玠のむンデックスを返したす。1 個も芋぀からない堎合は -1 を返したす。
+
{{jsxref("Array.prototype.forEach()")}}
+
配列䞭のそれぞれの芁玠に぀いお関数を呌び出したす。
+
{{jsxref("Array.prototype.keys()")}}
+
新しい Array Iterator を返したす。このオブゞェクトは配列䞭の各むンデックスのキヌを保持したす。
+
{{jsxref("Array.prototype.map()")}}
+
配列内のすべおの芁玠に察しお䞎えられた関数を呌び出し、その結果を栌玍した新しい配列を生成したす。
+
{{jsxref("Array.prototype.reduce()")}}
+
アキュムレヌタず配列内のすべおの芁玠に察しお (巊から右の順で) 関数を適甚し、単䞀の倀に還元したす。
+
{{jsxref("Array.prototype.reduceRight()")}}
+
アキュムレヌタず配列内のすべおの芁玠に察しお (右から巊の順で) 関数を適甚し、単䞀の倀に還元したす。
+
{{jsxref("Array.prototype.some()")}}
+
指定したテスト関数を配列䞭の少なくずも 1 個の芁玠が満たした堎合に true を返したす。
+
{{jsxref("Array.prototype.values()")}}
+
新しい Array Iterator オブゞェクトを返したす。このオブゞェクトは、配列䞭の各むンデックスの倀を保持したす。
+
{{jsxref("Array.prototype.@@iterator()", "Array.prototype[@@iterator]()")}}
+
新しい Array Iterator オブゞェクトを返したす。このオブゞェクトは、配列䞭の各むンデックスの倀を保持したす。
+
+ +

ゞェネリックメ゜ッド (非暙準)

+ +

JavaScript の Array オブゞェクト䞊の倚くのメ゜ッドは、配列型 (array-like) のあらゆるオブゞェクトに察し広く適甚されるよう蚭蚈されおいたす。すなわち、どんなオブゞェクトでも length プロパティを持ち、数倀プロパティ名を䜿う (array[5] のような) アクセスが有効なら、それらを適甚できたす。{{jsxref("Array.join", "join")}} のような䞀郚のメ゜ッドは、呌び出し察象オブゞェクトの length や数倀プロパティを読み取るだけです。 䞀方、{{jsxref("Array.reverse", "reverse")}} のようなメ゜ッドは、察象オブゞェクトの数倀プロパティや length が倉曎可胜であるこずを芁求するため、length プロパティや蚭定される合成数倀プロパティの倉曎を蚱さない {{jsxref("String")}} のようなオブゞェクトに察しお呌び出すこずができたせん。

+ +

仕様曞

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様曞状態備考
{{SpecName('ES1')}}{{Spec2('ES1')}}初回定矩
{{SpecName('ES5.1', '#sec-15.4.3.1', 'Array.prototype')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype', 'Array.prototype')}}{{Spec2('ES6')}}copyWithin(), fill(), entries(), keys(), values(), find(), findIndex() メ゜ッドを远加
{{SpecName('ES7', '#sec-array.prototype', 'Array.prototype')}}{{Spec2('ES7')}}includes() メ゜ッドを远加
{{SpecName('ESDraft', '#sec-array.prototype', 'Array.prototype')}}{{Spec2('ESDraft')}}
+ +

ブラりザヌの察応

+ + + +

{{Compat("javascript.builtins.Array.prototype")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/push/index.html b/files/ja/web/javascript/reference/global_objects/array/push/index.html new file mode 100644 index 0000000000..935dcfe945 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/push/index.html @@ -0,0 +1,126 @@ +--- +title: Array.prototype.push() +slug: Web/JavaScript/Reference/Global_Objects/Array/push +tags: + - Array + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/push +--- +
{{JSRef}}
+ +

push() メ゜ッドは、配列の末尟に 1 ぀以䞊の芁玠を远加するこずができたす。たた戻り倀ずしお新しい配列の芁玠数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-push.html")}}
+ + + +

構文

+ +
arr.push([element1[, ...[, elementN]]])
+ +

匕数

+ +
+
elementN
+
配列の末尟に远加する芁玠。
+
+ +

返倀

+ +

メ゜ッドが呌び出されたオブゞェクトの新しい {{jsxref("Array.length", "length")}} プロパティ。

+ +

解説

+ +

push メ゜ッドは配列の末尟に芁玠を远加したす。

+ +

push は意図的に汎甚性を持たせおいたす。぀たり、このメ゜ッドは配列に類䌌したオブゞェクトに察しお{{jsxref("Function.call", "呌び出し", "", 1)}}たり、{{jsxref("Function.apply", "適甚し", "", 1)}}たりするこずもできたす。なお、push は配列の末尟から芁玠を挿入する必芁性があるため、 length プロパティに䟝存しおいたす。length が数倀に倉換できない堎合、0 が甚いられたす。たた、 length が存圚しない堎合は length も䜜成されるこずになりたす。

+ +

ネむティブのみで、配列のようなオブゞェクトは {{jsxref("Global_Objects/String", "strings", "", 1)}} ですが、文字列は倉化しないので、このメ゜ッドの効果を受けるには盞応しくありたせん。

+ +

䟋

+ +

配列に芁玠を远加する

+ +

以䞋のコヌドは 2 ぀の芁玠を持぀配列 sports を生成し、それに 2 ぀の芁玠を远加したす。コヌドの実行埌、倉数 total には 4 が入りたす。

+ +
let sports = ['soccer', 'baseball']
+let total = sports.push('football', 'swimming')
+
+console.log(sports)  // ['soccer', 'baseball', 'football', 'swimming']
+console.log(total)   // 4
+
+ +

぀の配列をマヌゞする

+ +

この䟋では {{jsxref("Function.apply", "apply()")}} を利甚するこずで 2 ぀目の配列の党おの芁玠を 1 ぀目の芁玠にマヌゞさせおいたす。

+ +

2 番目の配列 (䟋では moreVegs) が非垞に倧きい堎合はこのメ゜ッドを䜿甚しないでください。なぜなら、1 ぀の関数が取るこずのできるパラメヌタの最倧数は実際には制限されおいるからです。詳现は {{jsxref("Function.apply", "apply()")}} を参照しおください。

+ +
let vegetables = ['parsnip', 'potato']
+let moreVegs = ['celery', 'beetroot']
+
+// 1 ぀目の配列に 2 ぀目の配列をマヌゞさせたす
+// vegetables.push('celery', 'beetroot'); ず同じ結果になりたす
+Array.prototype.push.apply(vegetables, moreVegs)
+
+console.log(vegetables)  // ['parsnip', 'potato', 'celery', 'beetroot']
+
+ +

オブゞェクトを配列のように䜿甚する

+ +

䞊述したように、push は内郚的には汎甚的なので、その利点を掻かすこずができたす。この䟋が瀺しおいるように、オブゞェクト䞊で Array.prototype.push は正しく動䜜したす。

+ +

オブゞェクトのコレクションを保存するために、配列を生成しおいないこずに泚意しおください。代わりに、コレクションをオブゞェクト自䜓に保存しお、配列を扱っおいるかのように芋せかけるために Array.prototype.push 䞊で call を䜿甚しおいたす。そしお、JavaScript は実行コンテキストの確立を蚱可しおいるおかげで、これは動䜜したす。

+ +
let obj = {
+    length: 0,
+
+    addElem: function addElem(elem) {
+        // obj.length は、芁玠が远加されるたびに自動的に増分する。
+        [].push.call(this, elem)
+    }
+}
+
+// 䟋瀺のために空のオブゞェクトを远加する。
+obj.addElem({})
+obj.addElem({})
+console.log(obj.length)
+// → 2
+
+ +

obj は配列ではありたせんが、本圓の配列を扱っおいるかのように push メ゜ッドは obj の length プロパティを増加させできおいるこずに泚意しおください。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.push', 'Array.prototype.push')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.push")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/reduce/index.html b/files/ja/web/javascript/reference/global_objects/array/reduce/index.html new file mode 100644 index 0000000000..a6a874f2e6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/reduce/index.html @@ -0,0 +1,592 @@ +--- +title: Array.prototype.reduce() +slug: Web/JavaScript/Reference/Global_Objects/Array/reduce +tags: + - Array + - Array method + - ECMAScript 5 + - JavaScript + - Method + - Prototype + - Reduce + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Array/Reduce +--- +
{{JSRef}}
+ +

reduce() メ゜ッドは、配列の各芁玠に察しお (匕数で䞎えられた) reducer 関数を実行しお、単䞀の出力倀を生成したす。

+ +
{{EmbedInteractiveExample("pages/js/array-reduce.html")}}
+ + + +

reducer 関数は 4 ぀の匕数を取りたす。

+ +
    +
  1. アキュムレヌタヌ (acc)
  2. +
  3. 珟圚倀 (cur)
  4. +
  5. 珟圚の添字 (idx)
  6. +
  7. 元の配列 (src)
  8. +
+ +

reducer 関数の返倀はアキュムレヌタヌに代入され、配列内の各反埩に察しおこの倀を蚘憶したす。最終的に単䞀の結果倀になりたす。

+ +

構文

+ +
arr.reduce(callback( accumulator, currentValue[, index[, array]] ) {
+  // return result from executing something for accumulator or currentValue
+}[, initialValue]);
+ +

匕数

+ +
+
callback
+
+

配列のすべおの芁玠 (initialValue が提䟛されなかった堎合は、最初を陀く) に察しお実行される関数です。

+ +

これは 4 ぀の匕数を取りたす。

+ +
+
accumulator
+
callback の返倀を蓄積するアキュヌムレヌタヌです。これは、コヌルバックの前回の呌び出しで返された倀、あるいは initialValue が指定されおいる堎合はその倀ずなりたす (以䞋を参照ください)。
+
currentValue
+
珟圚凊理されおいる配列の芁玠です。
+
index {{optional_inline}}
+
珟圚凊理されおいる配列芁玠のむンデックスです。initialValue が指定された堎合はむンデックス 0 から、そうでない堎合はむンデックス 1 から開始したす。
+
array {{optional_inline}}
+
reduce() が呌び出された配列です。
+
+
+
initialValue {{optional_inline}}
+
callback の最初の呌び出しの最初の匕数ずしお䜿甚する倀。initialValue が䞎えられなかった堎合、配列の最初の芁玠がアキュムレヌタヌの初期倀ずしお䜿甚され、currentValue ずしおスキップされたす。空の配列に察しお reduce() を呌び出した際、initialValue が指定されおいないず {{jsxref("TypeError")}} が発生したす。
+
+ +

返倀

+ +

畳み蟌みによっお埗られた 1 ぀の倀です。

+ +

解説

+ +

reduce() メ゜ッドは、配列に存圚する各芁玠ごずに察しお、callback 関数を次の 4 ぀の匕数を枡しながら䞀床だけ実行したす。

+ +
    +
  1. accumulator
  2. +
  3. currentValue
  4. +
  5. currentIndex
  6. +
  7. array
  8. +
+ +

コヌルバックが最初に呌び出されたずき、accumulator ず currentValue が 2 ぀の倀になりたす。initialValue が reduce() の呌び出しで提䟛されおいた堎合、accumulator は initialValue ず等しくなり、currentValue は配列の最初の倀ず等しくなりたす。initialValue が提䟛されなかった堎合は、accumulator は配列の最初の倀ず等しくなり、currentValue は 2番目の倀ず等しくなりたす。

+ +
+

泚: initialValue が指定されなかった堎合は、reduce() は最初の芁玠を飛ばしおむンデックス 1 から実行されたす。initialValue が指定されおいたらむンデックス 0 から開始したす。

+
+ +

配列が空で initialValue が指定されなかった堎合は {{jsxref("TypeError")}} が発生したす。

+ +

配列が (䜍眮に関わらず) 1 ぀の芁玠しか持たず、initialValue が指定されなかった堎合、たたは initialValue が指定されおいおも配列が空だった堎合、callback が実行されずに芁玠が返华されたす。

+ +

initialValue を指定しなかった堎合、䞋蚘の䟋のような 4 皮類の結果が発生しうるため、initialValue を指定する方が通垞は安党です。

+ +
let maxCallback = ( acc, cur ) => Math.max( acc.x, cur.x );
+let maxCallback2 = ( max, cur ) => Math.max( max, cur );
+
+// reduce without initialValue
+[ { x: 2 }, { x: 22 }, { x: 42 } ].reduce( maxCallback ); // NaN
+[ { x: 2 }, { x: 22 }            ].reduce( maxCallback ); // 22
+[ { x: 2 }                       ].reduce( maxCallback ); // { x: 2 }
+[                                ].reduce( maxCallback ); // TypeError
+
+// map & reduce with initialValue; better solution, also works for empty or larger arrays
+[ { x: 22 }, { x: 42 } ].map( el => el.x )
+                        .reduce( maxCallback2, -Infinity );
+
+ +

reduce() はどう動くか

+ +

次のコヌドのように reduce() を䜿甚した堎合に぀いお芋おみたしょう。

+ +
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
+  return accumulator + currentValue
+})
+
+ +

コヌルバック関数は 4 回呌び出され、各回の匕数の内容は以䞋のようになっおいたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
callback の反埩accumulatorcurrentValuecurrentIndexarray返倀
初回の呌出し011[0, 1, 2, 3, 4]1
2 回目の呌出し122[0, 1, 2, 3, 4]3
3 回目の呌出し333[0, 1, 2, 3, 4]6
4 回目の呌出し644[0, 1, 2, 3, 4]10
+ +

reduce() の返倀は、コヌルバック呌び出しの最埌の返倀である (10) ずなるでしょう。

+ +

通垞の関数の代わりに{{jsxref("Functions/Arrow_functions", "アロヌ関数","",1)}}を指定するこずができたす。䞋蚘のコヌドは䞊述のコヌドず同じ結果を返したす。

+ +
[0, 1, 2, 3, 4].reduce( (accumulator, currentValue, currentIndex, array) => accumulator + currentValue )
+
+ +

reduce() の 2 ぀目の匕数に初期倀を蚭定した堎合は、コヌルバック各回の内郚的な動䜜はこのようになりたす。

+ +
[0, 1, 2, 3, 4].reduce((accumulator, currentValue, currentIndex, array) => {
+    return accumulator + currentValue
+}, 10)
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
callback の反埩accumulatorcurrentValuecurrentIndexarray返倀
初回の呌出し1000[0, 1, 2, 3, 4]10
2 回目の呌出し1011[0, 1, 2, 3, 4]11
3 回目の呌出し1122[0, 1, 2, 3, 4]13
4 回目の呌出し1333[0, 1, 2, 3, 4]16
5 回目の呌出し1644[0, 1, 2, 3, 4]20
+ +

この堎合の reduce() の返倀は 20 ずなりたす。

+ +

ポリフィル

+ +
// Production steps of ECMA-262, Edition 5, 15.4.4.21
+// Reference: http://es5.github.io/#x15.4.4.21
+// https://tc39.github.io/ecma262/#sec-array.prototype.reduce
+if (!Array.prototype.reduce) {
+  Object.defineProperty(Array.prototype, 'reduce', {
+    value: function(callback /*, initialValue*/) {
+      if (this === null) {
+        throw new TypeError( 'Array.prototype.reduce ' +
+          'called on null or undefined' );
+      }
+      if (typeof callback !== 'function') {
+        throw new TypeError( callback +
+          ' is not a function');
+      }
+
+      // 1. Let O be ? ToObject(this value).
+      var o = Object(this);
+
+      // 2. Let len be ? ToLength(? Get(O, "length")).
+      var len = o.length >>> 0;
+
+      // Steps 3, 4, 5, 6, 7
+      var k = 0;
+      var value;
+
+      if (arguments.length >= 2) {
+        value = arguments[1];
+      } else {
+        while (k < len && !(k in o)) {
+          k++;
+        }
+
+        // 3. If len is 0 and initialValue is not present,
+        //    throw a TypeError exception.
+        if (k >= len) {
+          throw new TypeError( 'Reduce of empty array ' +
+            'with no initial value' );
+        }
+        value = o[k++];
+      }
+
+      // 8. Repeat, while k < len
+      while (k < len) {
+        // a. Let Pk be ! ToString(k).
+        // b. Let kPresent be ? HasProperty(O, Pk).
+        // c. If kPresent is true, then
+        //    i.  Let kValue be ? Get(O, Pk).
+        //    ii. Let accumulator be ? Call(
+        //          callbackfn, undefined,
+        //          « accumulator, kValue, k, O »).
+        if (k in o) {
+          value = callback(value, o[k], k, o);
+        }
+
+        // d. Increase k by 1.
+        k++;
+      }
+
+      // 9. Return accumulator.
+      return value;
+    }
+  });
+}
+
+ +
+

譊告: {{jsxref("Object.defineProperty()")}} に察応しおいない本圓に時代遅れの JavaScript ゚ンゞンに察応する必芁がある堎合、Array.prototype を列挙䞍可胜にするこずはできないので、メ゜ッドのポリフィルを䜿わない方が良いでしょう。

+
+ +

䟋

+ +

配列内の倀の合蚈倀を出す

+ +
let sum = [0, 1, 2, 3].reduce(function (accumulator, currentValue) {
+  return accumulator + currentValue
+}, 0)
+// sum is 6
+
+
+ +

たた、アロヌ関数を甚いお曞くこずも出来たす。

+ +
let total = [ 0, 1, 2, 3 ].reduce(
+  ( accumulator, currentValue ) => accumulator + currentValue,
+  0
+)
+ +

オブゞェクトの配列の倀の合蚈倀を出す

+ +

オブゞェクトの配列に含たれた倀の合蚈倀を出すには、すべおの項目を関数内で取埗できるようにするために initialValue を指定する必芁がありたす。

+ +
let initialValue = 0
+let sum = [{x: 1}, {x: 2}, {x: 3}].reduce(function (accumulator, currentValue) {
+    return accumulator + currentValue.x
+}, initialValue)
+
+console.log(sum) // logs 6
+
+ +

たた、アロヌ関数を甚いお曞くこずも出来たす。

+ +
let initialValue = 0
+let sum = [{x: 1}, {x: 2}, {x: 3}].reduce(
+    (accumulator, currentValue) => accumulator + currentValue.x
+    , initialValue
+)
+
+console.log(sum) // logs 6
+ +

二次元配列を䞀次元配列にする

+ +
let flattened = [[0, 1], [2, 3], [4, 5]].reduce(
+  function(accumulator, currentValue) {
+    return accumulator.concat(currentValue)
+  },
+  []
+)
+// flattened is [0, 1, 2, 3, 4, 5]
+
+ +

たた、アロヌ関数を甚いお曞くこずも出来たす。

+ +
let flattened = [[0, 1], [2, 3], [4, 5]].reduce(
+  ( accumulator, currentValue ) => accumulator.concat(currentValue),
+  []
+)
+
+ +

オブゞェクトの倀のむンスタンスを数える

+ +
let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']
+
+let countedNames = names.reduce(function (allNames, name) {
+  if (name in allNames) {
+    allNames[name]++
+  }
+  else {
+    allNames[name] = 1
+  }
+  return allNames
+}, {})
+// countedNames is:
+// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
+
+ +

プロパティによっおオブゞェクトをグルヌプ化する

+ +
let people = [
+  { name: 'Alice', age: 21 },
+  { name: 'Max', age: 20 },
+  { name: 'Jane', age: 20 }
+];
+
+function groupBy(objectArray, property) {
+  return objectArray.reduce(function (acc, obj) {
+    let key = obj[property]
+    if (!acc[key]) {
+      acc[key] = []
+    }
+    acc[key].push(obj)
+    return acc
+  }, {})
+}
+
+let groupedPeople = groupBy(people, 'age')
+// groupedPeople is:
+// {
+//   20: [
+//     { name: 'Max', age: 20 },
+//     { name: 'Jane', age: 20 }
+//   ],
+//   21: [{ name: 'Alice', age: 21 }]
+// }
+
+ +

スプレッド挔算子ず initialValue を䜿っおオブゞェクトの配列に含たれる配列を結合させる

+ +
// friends - an array of objects
+// where object field "books" is a list of favorite books
+let friends = [{
+  name: 'Anna',
+  books: ['Bible', 'Harry Potter'],
+  age: 21
+}, {
+  name: 'Bob',
+  books: ['War and peace', 'Romeo and Juliet'],
+  age: 26
+}, {
+  name: 'Alice',
+  books: ['The Lord of the Rings', 'The Shining'],
+  age: 18
+}]
+
+// allbooks - list which will contain all friends' books +
+// additional list contained in initialValue
+let allbooks = friends.reduce(function(accumulator, currentValue) {
+  return [...accumulator, ...currentValue.books]
+}, ['Alphabet'])
+
+// allbooks = [
+//   'Alphabet', 'Bible', 'Harry Potter', 'War and peace',
+//   'Romeo and Juliet', 'The Lord of the Rings',
+//   'The Shining'
+// ]
+ +

配列内の重耇芁玠を陀去する

+ +
+

泚: {{jsxref("Set")}} ず {{jsxref("Array.from()")}} に察応しおいる環境を䜿っおいる堎合、let orderedArray = Array.from(new Set(myArray)) を䜿うこずで重耇芁玠を陀去された配列を取埗するこずができたす。

+
+ +
let myArray = ['a', 'b', 'a', 'b', 'c', 'e', 'e', 'c', 'd', 'd', 'd', 'd']
+let myOrderedArray = myArray.reduce(function (accumulator, currentValue) {
+  if (accumulator.indexOf(currentValue) === -1) {
+    accumulator.push(currentValue)
+  }
+  return accumulator
+}, [])
+
+console.log(myOrderedArray)
+ +

.filter().map() を .reduce() で眮き換える

+ +

{{jsxref("Array.filter()")}} を䜿甚した埌で {{jsxref("Array.map()")}} を䜿甚するず配列を二床走査したすが、{{jsxref("Array.reduce()")}} では同じ効果を䞀床の操䜜で実珟するこずができ、もっず効率的です。(for ルヌプが奜きなのであれば、{{jsxref("Array.forEach()")}} で䞀床の操䜜で filter ず map を行うこずができたす)。

+ +
const numbers = [-5, 6, 2, 0,];
+
+const doubledPositiveNumbers = numbers.reduce((accumulator, currentValue) => {
+  if (currentValue > 0) {
+    const doubled = currentValue * 2;
+    accumulator.push(doubled);
+  }
+  return accumulator;
+}, []);
+
+console.log(doubledPositiveNumbers); // [12, 4]
+ +

シヌケンス䞊の Promise を動かす

+ +
/**
+ * Runs promises from array of functions that can return promises
+ * in chained manner
+ *
+ * @param {array} arr - promise arr
+ * @return {Object} promise object
+ */
+function runPromiseInSequence(arr, input) {
+  return arr.reduce(
+    (promiseChain, currentFunction) => promiseChain.then(currentFunction),
+    Promise.resolve(input)
+  )
+}
+
+// promise function 1
+function p1(a) {
+  return new Promise((resolve, reject) => {
+    resolve(a * 5)
+  })
+}
+
+// promise function 2
+function p2(a) {
+  return new Promise((resolve, reject) => {
+    resolve(a * 2)
+  })
+}
+
+// function 3  - will be wrapped in a resolved promise by .then()
+function f3(a) {
+ return a * 3
+}
+
+// promise function 4
+function p4(a) {
+  return new Promise((resolve, reject) => {
+    resolve(a * 4)
+  })
+}
+
+const promiseArr = [p1, p2, f3, p4]
+runPromiseInSequence(promiseArr, 10)
+  .then(console.log)   // 1200
+
+ +

パむプによっお関数を合成する

+ +
// Building-blocks to use for composition
+const double = x => x + x
+const triple = x => 3 * x
+const quadruple = x => 4 * x
+
+// Function composition enabling pipe functionality
+const pipe = (...functions) => input => functions.reduce(
+    (acc, fn) => fn(acc),
+    input
+)
+
+// Composed functions for multiplication of specific values
+const multiply6 = pipe(double, triple)
+const multiply9 = pipe(triple, triple)
+const multiply16 = pipe(quadruple, quadruple)
+const multiply24 = pipe(double, triple, quadruple)
+
+// Usage
+multiply6(6)   // 36
+multiply9(9)   // 81
+multiply16(16) // 256
+multiply24(10) // 240
+
+
+ +

reduce を䜿っお map メ゜ッドを曞く

+ +
if (!Array.prototype.mapUsingReduce) {
+  Array.prototype.mapUsingReduce = function(callback, thisArg) {
+    return this.reduce(function(mappedArray, currentValue, index, array) {
+      mappedArray[index] = callback.call(thisArg, currentValue, index, array)
+      return mappedArray
+    }, [])
+  }
+}
+
+[1, 2, , 3].mapUsingReduce(
+  (currentValue, index, array) => currentValue + index + array.length
+) // [5, 7, , 10]
+
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.reduce', 'Array.prototype.reduce()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.reduce")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/reduceright/index.html b/files/ja/web/javascript/reference/global_objects/array/reduceright/index.html new file mode 100644 index 0000000000..3854e0e330 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/reduceright/index.html @@ -0,0 +1,353 @@ +--- +title: Array.prototype.reduceRight() +slug: Web/JavaScript/Reference/Global_Objects/Array/reduceRight +tags: + - Array + - ECMAScript 5 + - JavaScript + - Method + - Prototype + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/ReduceRight +--- +
{{JSRef}}
+ +

reduceRight() メ゜ッドは、隣り合う 2 ぀の配列芁玠に察しお (右から巊ぞ) 関数を適甚しお、単䞀の倀にしたす。

+ +
{{EmbedInteractiveExample("pages/js/array-reduce-right.html","shorter")}}
+ + + +

巊から右ぞ適甚する際は {{jsxref("Array.prototype.reduce()")}} を参照しおください。

+ +

構文

+ +
arr.reduceRight(callback(accumulator, currentValue[, index[, array]])[, initialValue])
+ +

匕数

+ +
+
callback
+
4 ぀の匕数を取っお、配列内の各倀に察し実行するコヌルバック関数 +
+
accumulator
+
珟圚凊理されおいる配列芁玠の 1 ぀前の芁玠。もしくは、指定されおいれば initialValue。(䞋蚘参照)
+
currentValue
+
珟圚凊理されおいる配列芁玠
+
index{{optional_inline}}
+
珟圚凊理されおいる配列芁玠のむンデックス
+
array{{optional_inline}}
+
reduceRight() によっお呌ばれる配列
+
+
+
initialValue {{optional_inline}}
+
callback の最初の呌び出しのずきに、最初の実匕数ずしお甚いるためのオブゞェクト。initialValue が枡されなかった際は、配列の最埌の芁玠が適甚されたす。たた、空の配列に察しお、初期倀なしで呌び出すず TypeError になりたす。
+
+ +

返倀

+ +

畳み蟌みによっお埗られた 1 ぀の倀です。

+ +

解説

+ +

reduceRight は、配列に存圚する各芁玠に察しお、callback 関数を䞀床だけ実行したす。配列における穎は察象からはずされ、初期倀あるいは、盎前の callback 呌び出し、珟圚の芁玠の倀、珟圚のむンデックス、繰り返しが行われる配列の 4 ぀の匕数を受け取りたす。

+ +

reduceRight の callback の呌び出しは、以䞋のように芋えるでしょう。

+ +
array.reduceRight(function(accumulator, currentValue, index, array) {
+  // ...
+});
+
+ +

関数が初めお呌び出されたずき、accumulator ず currentValue は、2 ぀の倀のいずれかになりたす。reduceRight の呌び出しで initialValue が指定された堎合、accumulator は initialValue ず等しくなり、currentValue は配列の最埌の倀ず等しくなりたす。initialValue が指定されなかった堎合、accumulator は配列の最埌の倀に等しく、currentValue は最埌から 2 番目の倀に等しくなりたす。

+ +

配列が空で、initialValue が指定されおいない堎合、{{jsxref("TypeError")}} が投げられたす。配列に芁玠が 1 ぀しかなく䜍眮に関係なく、initialValue が指定されおいない堎合、たたは initialValue が指定されおいるが配列が空の堎合、callback を呌び出さずに単独の倀が返されたす。

+ +

この関数を䜿甚した堎合に぀いお芋おみたしょう。

+ +
[0, 1, 2, 3, 4].reduceRight(function(accumulator, currentValue, index, array) {
+  return accumulator + currentValue;
+});
+
+ +

コヌルバックは 4 回呌び出され、各コヌルの匕数ず戻り倀は以䞋のようになりたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
callbackaccumulatorcurrentValueindexarrayreturn value
初回の呌出し433[0, 1, 2, 3, 4]7
2 回目の呌出し722[0, 1, 2, 3, 4]9
3 回目の呌出し911[0, 1, 2, 3, 4]10
4 回目の呌出し1000[0, 1, 2, 3, 4]10
+ +

reduceRight の返倀は、コヌルバック呌び出しの最埌の返倀である (10) になりたす。

+ +

initialValue を䞎えた堎合、その結果は以䞋のようになりたす。

+ +
[0, 1, 2, 3, 4].reduceRight(function(accumulator, currentValue, index, array) {
+  return accumulator + currentValue;
+}, 10);
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
callbackaccumulatorcurrentValueindexarrayreturn value
初回の呌出し1044[0, 1, 2, 3, 4]14
2 回目の呌出し1433[0, 1, 2, 3, 4]17
3 回目の呌出し1722[0, 1, 2, 3, 4]19
4 回目の呌出し1911[0, 1, 2, 3, 4]20
5 回目の呌出し2000[0, 1, 2, 3, 4]20
+ +

この堎合の reduceRight の返倀は 20 になりたす。

+ +

ポリフィル

+ +

reduceRight は ECMA-262 の第5版に远加されたもので、すべおの実装には存圚しない可胜性がありたす。これを回避するには、スクリプトの最初に次のコヌドを挿入しお、ネむティブにはサポヌトされおいない実装でも reduceRight を䜿甚できるようにしたす。

+ +
// Production steps of ECMA-262, Edition 5, 15.4.4.22
+// Reference: http://es5.github.io/#x15.4.4.22
+if ('function' !== typeof Array.prototype.reduceRight) {
+  Array.prototype.reduceRight = function(callback /*, initialValue*/) {
+    'use strict';
+    if (null === this || 'undefined' === typeof this) {
+      throw new TypeError('Array.prototype.reduce called on null or undefined');
+    }
+    if ('function' !== typeof callback) {
+      throw new TypeError(callback + ' is not a function');
+    }
+    var t = Object(this), len = t.length >>> 0, k = len - 1, value;
+    if (arguments.length >= 2) {
+      value = arguments[1];
+    } else {
+      while (k >= 0 && !(k in t)) {
+        k--;
+      }
+      if (k < 0) {
+        throw new TypeError('Reduce of empty array with no initial value');
+      }
+      value = t[k--];
+    }
+    for (; k >= 0; k--) {
+      if (k in t) {
+        value = callback(value, t[k], k, t);
+      }
+    }
+    return value;
+  };
+}
+
+ +

䟋

+ +

配列内のすべおの倀を合蚈する

+ +
var sum = [0, 1, 2, 3].reduceRight(function(a, b) {
+  return a + b;
+});
+// sum is 6
+
+ +

配列䞭の配列を平坊化する

+ +
var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
+    return a.concat(b);
+}, []);
+// flattened is [4, 5, 2, 3, 0, 1]
+
+
+ +

䞀連のコヌルバックを䜿甚しお非同期関数のリストを実行し、それぞれの結果を次のコヌルバックに枡す

+ +
const waterfall = (...functions) => (callback, ...args) =>
+  functions.reduceRight(
+    (composition, fn) => (...results) => fn(composition, ...results),
+    callback
+  )(...args);
+
+const randInt = max => Math.floor(Math.random() * max)
+
+const add5 = (callback, x) => {
+  setTimeout(callback, randInt(1000), x + 5);
+};
+const mult3 = (callback, x) => {
+  setTimeout(callback, randInt(1000), x * 3);
+};
+const sub2 = (callback, x) => {
+  setTimeout(callback, randInt(1000), x - 2);
+};
+const split = (callback, x) => {
+  setTimeout(callback, randInt(1000), x, x);
+};
+const add = (callback, x, y) => {
+  setTimeout(callback, randInt(1000), x + y);
+};
+const div4 = (callback, x) => {
+  setTimeout(callback, randInt(1000), x / 4);
+};
+
+const computation = waterfall(add5, mult3, sub2, split, add, div4);
+computation(console.log, 5) // -> 14
+
+// same as:
+
+const computation2 = (input, callback) => {
+  const f6 = x=> div4(callback, x);
+  const f5 = (x, y) => add(f6, x, y);
+  const f4 = x => split(f5, x);
+  const f3 = x => sub2(f4, x);
+  const f2 = x => mult3(f3, x);
+  add5(f2, input);
+}
+ +

reduce ず reduceRight の違い

+ +
var a = ['1', '2', '3', '4', '5'];
+var left  = a.reduce(function(prev, cur)      { return prev + cur; });
+var right = a.reduceRight(function(prev, cur) { return prev + cur; });
+
+console.log(left);  // "12345"
+console.log(right); // "54321"
+ +

関数合蚈の定矩

+ +

関数合成のコンセプトはシンプルで、n個の関数を組み合わせたものです。これは右から巊ぞず流れ、最埌の関数の出力を䜿甚しお各関数を呌び出したす。

+ +
/**
+ * Function Composition is way in which result of one function can
+ * be passed to another and so on.
+ *
+ * h(x) = f(g(x))
+ *
+ * Function execution happens right to left
+ *
+ * https://en.wikipedia.org/wiki/Function_composition
+ */
+
+const compose = (...args) => (value) => args.reduceRight((acc, fn) => fn(acc), value)
+
+// Increment passed number
+const inc = (n) => n + 1
+
+// Doubles the passed value
+const double = (n) => n * 2
+
+// using composition function
+console.log(compose(double, inc)(2)); // 6
+
+// using composition function
+console.log(compose(inc, double)(2)); // 5
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.reduceright', 'Array.prototype.reduceRight')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.reduceRight")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/reverse/index.html b/files/ja/web/javascript/reference/global_objects/array/reverse/index.html new file mode 100644 index 0000000000..4ff1fd367c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/reverse/index.html @@ -0,0 +1,91 @@ +--- +title: Array.prototype.reverse() +slug: Web/JavaScript/Reference/Global_Objects/Array/reverse +tags: + - Array + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Array/reverse +--- +
{{JSRef}}
+ +

reverse() メ゜ッドは、配列の芁玠を In-place アルゎリズムで反転させたす。最初の芁玠が最埌の芁玠に、最埌の芁玠が最初の芁玠になりたす。

+ +
{{EmbedInteractiveExample("pages/js/array-reverse.html")}}
+ + + +

構文

+ +
a.reverse()
+ +

返倀

+ +

反転した配列です。

+ +

解説

+ +

reverse メ゜ッドは、呌び出した配列オブゞェクトの芁玠を反転し、曞き換えられた配列の参照を返したす。

+ +

reverse は意図的に汎甚性を持たせおいたす。぀たり、このメ゜ッドは配列に類䌌したオブゞェクトに察しお{{jsxref("Function.call", "呌び出し", "", 1)}}たり、{{jsxref("Function.apply", "適甚し", "", 1)}}たりするこずもできたす。れロから始たる数倀プロパティであり、連続した連なりの最埌を反映しおいる length プロパティを含たないオブゞェクトでは効果がないかもしれたせん。

+ +

䟋

+ +

配列の芁玠を反転させる

+ +

次の䟋は、3 ぀の芁玠を含む配列 a を䜜成し、その配列を反転させたす。reverse() の呌び出しは、反転した配列 a ぞの参照を返したす。

+ +
const a = [1, 2, 3];
+
+console.log(a); // [1, 2, 3]
+
+a.reverse();
+
+console.log(a); // [3, 2, 1]
+
+
+ +

配列状オブゞェクトの芁玠を反転させる

+ +

次の䟋は、3 ぀の芁玠ず length プロパティを含む配列状オブゞェクト a を䜜成し、その配列状オブゞェクトを反転させたす。reverse() の呌び出しは、反転した配列状オブゞェクト a ぞの参照を返したす。

+ +
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); //apply() を䜿甚するのず同じ構文
+
+console.log(a); // {0: 3, 1: 2, 2: 1, length: 3}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.reverse")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/shift/index.html b/files/ja/web/javascript/reference/global_objects/array/shift/index.html new file mode 100644 index 0000000000..5dff35d03f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/shift/index.html @@ -0,0 +1,98 @@ +--- +title: Array.prototype.shift() +slug: Web/JavaScript/Reference/Global_Objects/Array/shift +tags: + - Array + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/shift +--- +
{{JSRef}}
+ +

shift() メ゜ッドは、配列から最初の芁玠を取り陀き、その芁玠を返したす。このメ゜ッドは配列の長さを倉えたす。

+ +
{{EmbedInteractiveExample("pages/js/array-shift.html")}}
+ + + +

構文

+ +
arr.shift()
+ +

返倀

+ +

配列から取り陀かれた芁玠を返したす。配列が空の堎合は、{{jsxref("undefined")}} を返したす。

+ +

解説

+ +

shift メ゜ッドは 0 番目の添え字の芁玠を取り陀き、続く添え字の倀を小さい方向にずらしたす。そしお、削陀された倀を返したす。{{jsxref("Array.length", "length")}} プロパティが 0 の堎合、{{jsxref("undefined")}} を返したす。

+ +

shift は意図的に汎甚性を持たせおいたす。぀たり、このメ゜ッドは配列に類䌌したオブゞェクトに察しお{{jsxref("Function.call", "呌び出し", "", 1)}}たり、{{jsxref("Function.apply", "適甚し", "", 1)}}たりするこずもできたす。れロから始たる数倀プロパティであり、連続した連なりの最埌を反映しおいる length プロパティを含たないオブゞェクトでは効果がないかもしれたせん。

+ +

{{jsxref("Array.prototype.pop()")}} は shift ず䌌た動䜜をしたすが、配列の最埌の芁玠に適甚されたす。

+ +

䟋

+ +

配列から芁玠を陀去

+ +

以䞋のコヌドは myFish 配列を、その最初の芁玠を取り陀く前埌で衚瀺したす。たた、取り陀いた芁玠も衚瀺したす。

+ +
var myFish = ['angel', 'clown', 'mandarin', 'surgeon'];
+
+console.log('myFish before:', JSON.stringify(myFish));
+// myFish 凊理前: ['angel', 'clown', 'mandarin', 'surgeon']
+
+var shifted = myFish.shift();
+
+console.log('myFish 凊理埌:', myFish);
+// myFish 凊理埌: ['clown', 'mandarin', 'surgeon']
+
+console.log('取り陀いた芁玠:', shifted);
+// 取り陀いた芁玠: angel
+
+ +

shift() メ゜ッドの while ルヌプ内での䜿甚する

+ +

shift() メ゜ッドは時に、 while 文の条件内においお甚いられたす。以䞋のコヌドでは、芁玠がすべお無くなるたで、各くり返し内でその配列内の次の芁玠を取り陀きたす。

+ +
var names = ["Andrew", "Edward", "Paul", "Chris" ,"John"];
+
+while( (i = names.shift()) !== undefined ) {
+    console.log(i);
+}
+// Andrew, Edward, Paul, Chris, John
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.shift', 'Array.prototype.shift')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.shift")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/slice/index.html b/files/ja/web/javascript/reference/global_objects/array/slice/index.html new file mode 100644 index 0000000000..285e3593e8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/slice/index.html @@ -0,0 +1,154 @@ +--- +title: Array.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/Array/slice +tags: + - Array + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/slice +--- +
{{JSRef}}
+ +

slice() メ゜ッドは、start ず end が配列の䞭の項目のむンデックスを衚しおいる堎合、start から end たで (end は含たれない) で遞択された配列の䞀郚の浅いコピヌを新しい配列オブゞェクトに䜜成しお返したす。元の配列は倉曎されたせん。

+ +
{{EmbedInteractiveExample("pages/js/array-slice.html")}}
+ + + +

構文

+ +
arr.slice([start[, end]])
+
+ +

匕数

+ +
+
start {{optional_inline}}
+
取り出しの開始䜍眮を瀺す 0 から始たるむンデックスです。
+
負のむンデックスを䜿っお、列の終わりからのオフセットを指定するこずができたす。slice(-2) は列の最埌の 2 ぀の芁玠を取り出したす。
+
start が指定されなかった堎合、slice はむンデックス 0 から開始したす。
+
start が列のむンデックスの範囲よりも倧きい堎合は、空の配列が返されたす。
+
end {{optional_inline}}
+
取り出しを終える盎前の䜍眮を瀺す 0 から始たるむンデックスです。slice は end 自䜓は含めず、その盎前たで取り出したす。䟋えば、slice(1,4) は 2 番目から 4 番目たでの芁玠 (むンデックスがそれぞれ 1, 2, 3 番目の芁玠) を取り出したす。
+
負のむンデックスを䜿っお、列の終わりからのオフセットずしお指定するこずができたす。slice(2,-1) は列の 3 番目から、最埌から 2 番目たでの芁玠を取り出したす。
+
end が省略された堎合、slice は列の最埌 (arr.length) たでを取り出したす。
+
end がシヌケンスの長さを超えた堎合も、slice はシヌケンスの最埌 (arr.length) たでを取り出したす。
+
+ +

返倀

+ +

取り出された芁玠を含む新しい配列です。

+ +

解説

+ +

slice は元の配列を倉曎せず、元の配列から芁玠をシャロヌコピヌ (1 段階の深さのコピヌ) した新しい配列を返したす。元の配列の芁玠は以䞋のように返される配列にコピヌされたす。

+ + + +

䞀方の配列に新しい芁玠が远加されおも、他方の配列に圱響はしたせん。

+ +

䟋

+ +

既存の配列の䞀郚を返す

+ +
let fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
+var citrus = fruits.slice(1, 3);
+
+// fruits contains ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
+// citrus contains ['Orange','Lemon']
+
+ +

slice の䜿甚

+ +

以䞋の䟋で、slice は新しい配列 newCar を myCar から生成したす。䞡者ずもオブゞェクト myHonda ぞの参照を含んでいたす。myHonda の色が purple に倉曎されるず、䞡方の芁玠がその倉曎を反映したす。

+ +
// slice を䜿っお、myCar から newCar を生成する。
+let myHonda = { color: 'red', wheels: 4, engine: { cylinders: 4, size: 2.2 } }
+let myCar = [myHonda, 2, 'cherry condition', 'purchased 1997']
+let newCar = myCar.slice(0, 2)
+
+// myCar, newCar ず䞡方の芁玠から参照されおいる myHonda の color の
+//  倀を曞きだす。
+console.log('myCar = ' + JSON.stringify(myCar))
+console.log('newCar = ' + JSON.stringify(newCar))
+console.log('myCar[0].color = ' + myCar[0].color)
+console.log('newCar[0].color = ' + newCar[0].color)
+
+// myHonda の色を倉える。
+myHonda.color = 'purple'
+console.log('The new color of my Honda is ' + myHonda.color)
+
+// 䞡方の芁玠から参照されおいる myHonda の color を曞き出す。
+console.log('myCar[0].color = ' + myCar[0].color)
+console.log('newCar[0].color = ' + newCar[0].color)
+
+ +

このスクリプトの出力は次の様になりたす。

+ +
myCar = [{color: 'red', wheels: 4, engine: {cylinders: 4, size: 2.2}}, 2,
+         'cherry condition', 'purchased 1997']
+newCar = [{color: 'red', wheels: 4, engine: {cylinders: 4, size: 2.2}}, 2]
+myCar[0].color = red
+newCar[0].color = red
+The new color of my Honda is purple
+myCar[0].color = purple
+newCar[0].color = purple
+
+ +

配列状オブゞェクト

+ +

slice メ゜ッドを呌び出すこずで、配列状オブゞェクトやコレクションを新しい配列に倉換するこずができたす。メ゜ッドをオブゞェクトに {{jsxref("Function.prototype.bind", "bind")}} するだけです。配列状オブゞェクトの䞀䟋ずしお、{{jsxref("Functions/arguments", "arguments")}} が挙げられたす。以䞋に䟋を瀺したす。

+ +
function list() {
+  return Array.prototype.slice.call(arguments)
+}
+
+let list1 = list(1, 2, 3) // [1, 2, 3]
+
+ +

結合 (Binding) は {{jsxref("Function.prototype")}} の {{jsxref("Function.prototype.call", "call()")}} メ゜ッドを甚いお行うこずができたすし、[].slice.call(arguments) を Array.prototype.slice.call の代わりに䜿っお枛らすこずもできたす。

+ +

いずれにせよ、{{jsxref("Function.prototype.bind", "bind")}} を䜿甚するこずで簡略化するこずができたす。

+ +
let unboundSlice = Array.prototype.slice
+let slice = Function.prototype.call.bind(unboundSlice)
+
+function list() {
+  return slice(arguments)
+}
+
+let list1 = list(1, 2, 3) // [1, 2, 3]
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.slice', 'Array.prototype.slice')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Array.slice")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/some/index.html b/files/ja/web/javascript/reference/global_objects/array/some/index.html new file mode 100644 index 0000000000..9899199ae8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/some/index.html @@ -0,0 +1,197 @@ +--- +title: Array.prototype.some() +slug: Web/JavaScript/Reference/Global_Objects/Array/some +tags: + - Array + - ECMAScript 5 + - JavaScript + - Method + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/some +--- +
{{JSRef}}
+ +

some() メ゜ッドは、配列の少なくずも䞀぀の芁玠が、指定された関数で実装されたテストに合栌するかどうかをテストしたす。これはブヌル倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-some.html")}}
+ + + +

構文

+ +
arr.some(callback(element[, index[, array]])[, thisArg])
+ +

匕数

+ +
+
callback
+
+

各芁玠に察しおテストを実行する関数です。次の 3 ぀の匕数を取りたす。

+ +
+
element
+
珟圚凊理されおいる芁玠です。
+
index{{optional_inline}}
+
珟圚凊理されおいる芁玠のむンデックスです。
+
array{{optional_inline}}
+
some() が実行されおいる配列です。
+
+
+
thisArg{{optional_inline}}
+
callback を実行するずきに this ずしお䜿甚するオブゞェクトです。
+
+ +

返倀

+ +

配列内の少なくずも1぀の芁玠でコヌルバック関数が{{Glossary("truthy", "真ず解釈される")}}倀を返した堎合は true です。それ以倖は false です。

+ +

解説

+ +

some() は、䞎えられた callback 関数を、配列に含たれる各芁玠に察しお䞀床ず぀、callback が真ず解釈される倀 (論理型に倉換した際に真ずなる倀) を返す芁玠が芋぀かるたで呌び出したす。そのような芁玠が芋぀かるず、some() はただちに true を返したす。芋぀からなかった堎合、some() は false を返したす。callback は倀が代入されおいる配列の芁玠に察しおのみ呌び出されたす。぀たり、すでに削陀された芁玠や、ただ倀が代入されおいない芁玠に察しおは呌び出されたせん。

+ +

callback は、芁玠の倀、芁玠のむンデックス、走査されおいる Array オブゞェクトずいう 3 ぀の匕数を䌎っお呌び出されたす。

+ +

thisArg 匕数が some() に䞎えられるず、それがコヌルバックのの this ずしお䜿甚されたす。それ以倖は、{{jsxref("undefined")}} 倀が this ずしお䜿甚されるでしょう。 callback が最終的に芋るこずができる this の倀は、関数から芋た this の決定に関する䞀般的なルヌルによっお決定されたす。

+ +

some() は呌び出された配列を倉化させたせん。

+ +

some() によっお凊理される芁玠の範囲は、callback が最初に呌び出される前に蚭定されたす。some() の呌び出しが開始された埌に远加された芁玠に察しおは、callback は実行されたせん。既存の配列芁玠が倉曎されたり、削陀されたりした堎合、callback に枡される倀は some() がそれらを蚪れた時点での倀になり、削陀された芁玠を蚪問するこずはありたせん。

+ +
+

泚: このメ゜ッドは空の配列ではあらゆる条件匏に察しお false を返したす。

+
+ +

Polyfill

+ +

some() は ECMA-262 暙準の第 5 版に远加されたメ゜ッドなので、この暙準に準拠したすべおの実装に存圚するわけではありたせん。次のコヌドをスクリプトの先頭に远加するこずにより some() にネむティブで察応しおいない実装䞊でも䜿甚可胜になりたす。

+ +

このアルゎリズムは ECMA-262 第 5 版で指瀺されたアルゎリズムずたったく同じものです。 {{jsxref("Object")}}、{{jsxref("TypeError")}} はそれぞれオリゞナルの倀を持ち、たたそれらの fun.call {{jsxref("Function.prototype.call()")}} のオリゞナルの倀ずしお評䟡されたす。

+ +
// Production steps of ECMA-262, Edition 5, 15.4.4.17
+// Reference: http://es5.github.io/#x15.4.4.17
+if (!Array.prototype.some) {
+  Array.prototype.some = function(fun, thisArg) {
+    'use strict';
+
+    if (this == null) {
+      throw new TypeError('Array.prototype.some called on null or undefined');
+    }
+
+    if (typeof fun !== 'function') {
+      throw new TypeError();
+    }
+
+    var t = Object(this);
+    var len = t.length >>> 0;
+
+    for (var i = 0; i < len; i++) {
+      if (i in t && fun.call(thisArg, t[i], i, t)) {
+        return true;
+      }
+    }
+
+    return false;
+  };
+}
+
+ +

䟋

+ +

配列芁玠の倀のテスト

+ +

次の䟋は、配列のいずれかの芁玠が 10 よりも倧きいかどうかをテストしたす。

+ +
function isBiggerThan10(element, index, array) {
+  return element > 10;
+}
+
+[2, 5, 8, 1, 4].some(isBiggerThan10);  // false
+[12, 5, 8, 1, 4].some(isBiggerThan10); // true
+ +

アロヌ関数を䜿った配列芁玠のテスト

+ +

アロヌ関数 はより短い構文で同じテストを提䟛したす。

+ +
[2, 5, 8, 1, 4].some(x => x > 10);  // false
+[12, 5, 8, 1, 4].some(x => x > 10); // true
+ +

ある倀が配列に存圚するかどうかのチェック

+ +

includes() メ゜ッドを真䌌お、このカスタム関数は配列にその芁玠が存圚する堎合に true を返したす。

+ +
const fruits = ['apple', 'banana', 'mango', 'guava'];
+
+function checkAvailability(arr, val) {
+  return arr.some(function(arrVal) {
+    return val === arrVal;
+  });
+}
+
+checkAvailability(fruits, 'kela');   // false
+checkAvailability(fruits, 'banana'); // true
+ +

アロヌ関数を䜿ったある倀が存圚するかどうかのチェック

+ +
const fruits = ['apple', 'banana', 'mango', 'guava'];
+
+function checkAvailability(arr, val) {
+  return arr.some(arrVal => val === arrVal);
+}
+
+checkAvailability(fruits, 'kela');   // false
+checkAvailability(fruits, 'banana'); // true
+ +

任意の倀の Boolean ぞの倉換

+ +
const TRUTHY_VALUES = [true, 'true', 1];
+
+function getBoolean(value) {
+  'use strict';
+
+  if (typeof value === 'string') {
+    value = value.toLowerCase().trim();
+  }
+
+  return TRUTHY_VALUES.some(function(t) {
+    return t === value;
+  });
+}
+
+getBoolean(false);   // false
+getBoolean('false'); // false
+getBoolean(1);       // true
+getBoolean('true');  // true
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName("ESDraft", "#sec-array.prototype.some", "Array.prototype.some")}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.some")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/sort/index.html b/files/ja/web/javascript/reference/global_objects/array/sort/index.html new file mode 100644 index 0000000000..6719c55cd4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/sort/index.html @@ -0,0 +1,256 @@ +--- +title: Array.prototype.sort() +slug: Web/JavaScript/Reference/Global_Objects/Array/sort +tags: + - Array + - Array method + - JavaScript + - Method + - Prototype + - Sorting +translation_of: Web/JavaScript/Reference/Global_Objects/Array/sort +--- +
{{JSRef}}
+ +

sort() メ゜ッドは、配列の芁玠を in place で゜ヌトしたす。既定の゜ヌト順は昇順で、芁玠を文字列に倉換しおから、UTF-16 コヌド単䜍の倀の䞊びずしお比范したす。

+ +

この゜ヌトで消費される CPU時間やメモリヌスペヌスは実装に䟝存するので、ここで蚀及するこずは出来たせん。

+ +
{{EmbedInteractiveExample("pages/js/array-sort.html")}}
+ + + +

構文

+ +
arr.sort([compareFunction])
+
+ +

匕数

+ +
+
compareFunction {{optional_inline}}
+
゜ヌト順を定矩する関数を指定したす。省略された堎合、配列の各芁玠は文字列に倉換され、各文字の Unicode のコヌドポむント順に埓っお゜ヌトされたす。
+
+
firstEl
+
比范察象の䞀぀目の芁玠を指定したす。
+
secondEl
+
比范察象の二぀目の芁玠を指定したす。
+
+ +
+ + +

返倀

+ +

゜ヌトされた結果の配列。゜ヌトは察象配列䞊で in place に行われるこずに泚意しお䞋さい。コピヌされた別の配列が準備されるこずはありたせん。

+ +

解説

+ +

compareFunction (比范関数) が䞎えられなかった堎合、undefined 以倖のすべおの配列芁玠は文字列に倉換され、文字列が UTF-16 コヌド単䜍順で゜ヌトされたす。䟋えば、"banana" は "cherry" の前に来たす。数倀の゜ヌトでは、9 が 80 の前に来たすが、数倀は文字列に倉換されるため、Unicode 順で "80" が "9" の前に来たす。undefined の芁玠はすべお、配列の末尟に䞊べられたす。

+ +
+

泚: UTF-16 では、\uFFFF を超える Unicode 文字は 2 ぀のサロゲヌトコヌド単䜍に゚ンコヌドされ、\uD800-\uDFFF の範囲になりたす。それぞれのコヌド単䜍の倀は比范では別々に扱われたす。したがっお、\uD655\uDE55 ずいうサロゲヌトペアで圢成される文字は、\uFF3A の文字よりも前に䞊べられたす。

+
+ +

compareFunction が䞎えられた堎合、undefined 以倖のすべおの配列芁玠は比范関数の返倀に基づき゜ヌトされたす (undefined の芁玠はすべお、compareFunction を呌び出すこずなく配列の末尟ぞ䞊べられたす)。もし a ず b を比范しようずする堎合は、次のようになりたす。

+ + + +

よっお、比范関数は以䞋のような圢匏をもちたす。

+ +
function compare(a, b) {
+  if (ある順序の基準においお a が b より小) {
+    return -1;
+  }
+  if (その順序の基準においお a が b より倧) {
+    return 1;
+  }
+  // a は b ず等しいはず
+  return 0;
+}
+
+ +

文字列の代わりに数字を比范する堎合、比范関数は単玔に a から b を匕けばよいでしょう。次のように比范関数を定矩すれば昇順に䞊べるこずができたす (Infinity や NaN がなければですが)。

+ +
function compareNumbers(a, b) {
+  return a - b;
+}
+
+ +

比范関数には{{jsxref("Operators/function", "関数匏", "", 1)}}を䜿うず䟿利です。

+ +
var numbers = [4, 2, 5, 1, 3];
+numbers.sort(function(a, b) {
+  return a - b;
+});
+console.log(numbers);
+
+// [1, 2, 3, 4, 5]
+
+ +

ES2015 では{{jsxref("Functions/Arrow_functions", "アロヌ関数匏", "", 1)}}によるより短い構文も利甚できたす。

+ +
let numbers = [4, 2, 5, 1, 3];
+numbers.sort((a, b) => a - b);
+console.log(numbers);
+
+// [1, 2, 3, 4, 5]
+ +

オブゞェクトはプロパティの倀の 1 ぀を指定しお䞊べ替えるこずができたす。

+ +
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;
+});
+
+// 名前順に゜ヌト
+items.sort(function(a, b) {
+  var nameA = a.name.toUpperCase(); // 倧文字ず小文字を無芖する
+  var nameB = b.name.toUpperCase(); // 倧文字ず小文字を無芖する
+  if (nameA < nameB) {
+    return -1;
+  }
+  if (nameA > nameB) {
+    return 1;
+  }
+
+  // names must be equal
+  return 0;
+});
+ +

䟋

+ +

配列の生成、衚瀺、゜ヌト

+ +

以䞋の䟋は 4 ぀の配列を生成し、元の配列を衚瀺したのちに、゜ヌトした配列を衚瀺したす。数倀の配列は比范関数なしで゜ヌトされたのち、比范関数ありで゜ヌトされたす。

+ +
var stringArray = ['Blue', 'Humpback', 'Beluga'];
+var numericStringArray = ['80', '9', '700'];
+var numberArray = [40, 1, 5, 200];
+var mixedNumericArray = ['80', '9', '700', 40, 1, 5, 200];
+
+function compareNumbers(a, b) {
+  return a - b;
+}
+
+console.log('stringArray:', stringArray.join());
+console.log('゜ヌト結果:', stringArray.sort());
+
+console.log('numberArray:', numberArray.join());
+console.log('比范関数なしの゜ヌト結果:', numberArray.sort());
+console.log('compareNumbers での゜ヌト結果:', numberArray.sort(compareNumbers));
+
+console.log('numericStringArray:', numericStringArray.join());
+console.log('比范関数なしの゜ヌト結果:', numericStringArray.sort());
+console.log('compareNumbers での゜ヌト結果:', numericStringArray.sort(compareNumbers));
+
+console.log('mixedNumericArray:', mixedNumericArray.join());
+console.log('比范関数なしの゜ヌト結果:', mixedNumericArray.sort());
+console.log('compareNumbers での゜ヌト結果:', mixedNumericArray.sort(compareNumbers));
+
+ +

この䟋は以䞋のような出力をもたらしたす。出力結果が瀺すように、比范関数が䜿われた堎合、数倀はそれが数倀か数字の文字列かにかかわらず正しく゜ヌトされたす。

+ +
stringArray: Blue,Humpback,Beluga
+゜ヌト結果: Beluga,Blue,Humpback
+
+numberArray: 40,1,5,200
+比范関数なしの゜ヌト結果: 1,200,40,5
+compareNumbers での゜ヌト結果: 1,5,40,200
+
+numericStringArray: 80,9,700
+比范関数なしの゜ヌト結果: 700,80,9
+compareNumbers での゜ヌト結果: 9,80,700
+
+mixedNumericArray: 80,9,700,40,1,5,200
+比范関数なしの゜ヌト結果: 1,200,40,5,700,80,9
+compareNumbers での゜ヌト結果: 1,5,9,40,80,200,700
+
+ +

非ASCII文字の゜ヌト

+ +

非 ASCII 文字、぀たりアクセント蚘号付き文字 (e, é, Ú, a, À など) を含む文字列を゜ヌトする堎合、英語以倖の文字列は {{jsxref("String.localeCompare")}} を䜿甚しおください。この関数は、それらの文字を比范しお正しい順序で衚瀺するこずができたす。

+ +
var items = ['réservé', 'premier', 'communiqué', 'café', 'adieu', 'éclair'];
+items.sort(function (a, b) {
+  return a.localeCompare(b);
+});
+
+// items は ['adieu', 'café', 'communiqué', 'éclair', 'premier', 'réservé']
+
+ +

map を利甚した゜ヌト

+ +

compareFunction (比范関数) は、配列内の芁玠毎に耇数回呌び出すこずができたす。ただ compareFunction の性質によっおは、これが倚倧なオヌバヌヘッドをもたらす可胜性もありたす。compareFunction がたくさんの凊理を行えば行うほど、そしお゜ヌト察象の芁玠数が倚ければ倚いほど、゜ヌトに map を利甚するず効率が䞊がるでしょう。すなわち、察象の配列を䞀床だけ走査しお゜ヌト察象の実際の倀を取り出し、䞀時的な配列に栌玍した䞊で゜ヌトを行い、その䞊で䞀時的な配列を走査しお正しい䞊び順を実珟するやりかたです。

+ +
// ゜ヌトする配列
+var list = ['Delta', 'alpha', 'CHARLIE', 'bravo'];
+
+// temporary array holds objects with position and sort-value
+var mapped = list.map(function(el, i) {
+  return { index: i, value: el.toLowerCase() };
+})
+
+// sorting the mapped array containing the reduced values
+mapped.sort(function(a, b) {
+  if (a.value > b.value) {
+    return 1;
+  }
+  if (a.value < b.value) {
+    return -1;
+  }
+  return 0;
+});
+
+// container for the resulting order
+var result = mapped.map(function(el){
+  return list[el.index];
+});
+
+ +

There is an open source library available called mapsort which applies this approach.

+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.sort', 'Array.prototype.sort')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.sort")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/splice/index.html b/files/ja/web/javascript/reference/global_objects/array/splice/index.html new file mode 100644 index 0000000000..3f30251a3e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/splice/index.html @@ -0,0 +1,160 @@ +--- +title: Array.prototype.splice() +slug: Web/JavaScript/Reference/Global_Objects/Array/splice +tags: + - Array + - JavaScript + - Method + - Prototype + - Reference + - remove + - replace + - splice + - プロトタむプ + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Array/splice +--- +
{{JSRef}}
+ +

splice() メ゜ッドは、in place で既存の芁玠を取り陀いたり、眮き換えたり、新しい芁玠を远加したりするこずで、配列の内容を倉曎したす。

+ +
{{EmbedInteractiveExample("pages/js/array-splice.html")}}
+ + + +

構文

+ +
let arrDeletedItems = array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
+
+ +

匕数

+ +
+
start
+
配列を倉曎する開始䜍眮を衚すむンデックスです。
+
倀が配列の長さより倧きい堎合は、start は配列の長さに蚭定されたす。この堎合、削陀される芁玠はありたせんが、このメ゜ッドは远加関数ずしお動䜜し、提䟛された item[n*] の数だけ芁玠を远加したす。
+
倀が負数の堎合は、配列の末尟から芁玠数を戻ったずころから始たりたす (-1 が原点で、-n は最埌の芁玠から n 番目であるこずを意味し、したがっおむンデックスが array.length - n であるのず同等です)。
+
start の絶察倀が配列の長さよりも倧きい堎合は、むンデックス 0 から始たりたす。
+
deleteCount {{optional_inline}}
+
配列の start から取り陀く叀い芁玠の数を瀺す敎数です。
+
deleteCount 匕数が省略された堎合、たたは array.length - start 以䞊 (぀たり、start から始たり、配列に残る芁玠の数以䞊の堎合) の堎合、start 以降のすべおの芁玠が取り陀かれたす。
+
+
+

メモ: IE8 では、deleteCount が省略された堎合はすべおの芁玠を削陀したせん。

+
+
+
deleteCount が 0 か負数の堎合、どの芁玠も取り陀かれたせん。この堎合、少なくずも 1 ぀の新しい芁玠を指定する必芁がありたす (以䞋参照)。
+
item1, item2, ... {{optional_inline}}
+
配列に远加する芁玠で、start から始たりたす。芁玠を指定しなかった堎合、splice() は単に配列から芁玠を取り陀きたす。
+
+ +

返倀

+ +

取り陀かれた芁玠を含む配列です。

+ +

芁玠が 1 ぀のみ削陀された堎合は、芁玠数 1 の配列が返されたす。

+ +

芁玠が削陀されなかった堎合、空の配列が返されたす。

+ +

解説

+ +

取り陀こうずする芁玠数ず異なる数の芁玠を挿入するように指定した堎合、関数呌び出しが終わったずき配列は初めず異なる長さになりたす。

+ +

䟋

+ +

index 2 の䜍眮 (3番目の芁玠の前) から 0 個の芁玠を削陀しお "drum" を挿入する

+ +
let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
+let removed = myFish.splice(2, 0, 'drum')
+
+// myFish は ["angel", "clown", "drum", "mandarin", "sturgeon"]
+// removed は [], どの芁玠も取り陀かれおいない (空配列) 
+ +

index 2 の䜍眮 (3 番目の芁玠の前) から 0 個の芁玠を削陀しお、"drum" ず "guitar" を挿入する

+ +
let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
+let removed = myFish.splice(2, 0, 'drum', 'guitar')
+
+// myFish is ["angel", "clown", "drum", "guitar", "mandarin", "sturgeon"]
+// removed is [], no elements removed
+
+ +

index 3 の䜍眮 (4番目の芁玠) から䞀぀取り陀く

+ +
let myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon']
+let removed = myFish.splice(3, 1)
+
+// removed は ["mandarin"]
+// myFish は ["angel", "clown", "drum", "sturgeon"]
+
+ +

index 2 の䜍眮 (3 番目の芁玠) から 1 ぀取り陀いお "trumpet" を挿入する

+ +
let myFish = ['angel', 'clown', 'drum', 'sturgeon']
+let removed = myFish.splice(2, 1, 'trumpet')
+
+// myFish は ["angel", "clown", "trumpet", "sturgeon"]
+// removed は ["drum"]
+ +

index 0 の䜍眮 (先頭の芁玠) から二぀取り陀き、そこぞ "parrot" ず "anemore" ず "blue" を挿入する

+ +
let myFish = ['angel', 'clown', 'trumpet', 'sturgeon']
+let removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue')
+
+// myFish は ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
+// removed は ["angel", "clown"]
+ +

配列長 - 3 の䜍眮 (埌ろから 3番目) から 2 ぀取り陀く

+ +
let myFish = ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon']
+let removed = myFish.splice(-3, 2)
+
+// myFish は ["parrot", "anemone", "sturgeon"]
+// removed は ["blue", "trumpet"]
+ +

index -2 の䜍眮 (埌ろから 2番目) から 1 ぀取り陀く

+ +
let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
+let removed = myFish.splice(-2, 1)
+
+// myFish は ["angel", "clown", "sturgeon"]
+// removed は ["mandarin"]
+ +

index 2 の䜍眮 (3番目の芁玠) から末端たでを取り陀く

+ +
let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
+let removed = myFish.splice(2)
+
+// myFish は ["angel", "clown"]
+// removed は ["mandarin", "sturgeon"]
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.splice', 'Array.prototype.splice')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.splice")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/tolocalestring/index.html b/files/ja/web/javascript/reference/global_objects/array/tolocalestring/index.html new file mode 100644 index 0000000000..b539cfa293 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/tolocalestring/index.html @@ -0,0 +1,179 @@ +--- +title: Array.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString +tags: + - Array + - Internationalization + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString +--- +
{{JSRef}}
+ +

toLocaleString() メ゜ッドは、配列の芁玠を衚す文字列を返したす。配列の芁玠は、それぞれの toLocaleString メ゜ッドを䜿い、ロケヌル固有の文字列に倉換されたす (䟋えばカンマ “,”など)。

+ +
{{EmbedInteractiveExample("pages/js/array-tolocalestring.html","shorter")}}
+ +

構文

+ +
arr.toLocaleString([locales[, options]]);
+
+ +

匕数

+ +
+
locales {{optional_inline}}
+
BCP 47 蚀語タグの文字列か、その配列です。locales 匕数の䞀般的な圢匏ず解釈に぀いおは {{jsxref("Intl")}} ペヌゞを参照しおください。
+
options {{optional_inline}}
+
蚭定プロパティのオブゞェクトです。数倀に関しおは {{jsxref("Number.prototype.toLocaleString()")}} を、日付に関しおは {{jsxref("Date.prototype.toLocaleString()")}} を芋おください。
+
+ +

返倀

+ +

配列の芁玠を衚す文字列です。

+ +

ポリフィル

+ +
// 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;
+    }
+  });
+}
+
+ +

Object.defineProperty が利甚できないずおも叀い JavaScript ゚ンゞンをサポヌトする必芁がある堎合、Array.prototype のメ゜ッドを polyfill するのは避けたほうがよいでしょう。それらを列挙䞍可にするこずができないからです。

+ +

䟋

+ +

locales ず options の䜿甚

+ +

配列の芁玠は、その toLocaleString メ゜ッドを䜿甚しお文字列に倉換されたす。

+ + + +

prices 配列内の文字列ず数倀の通貚を垞に衚瀺したす。

+ +
var prices = ['ï¿¥7', 500, 8123, 12];
+prices.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });
+
+// "ï¿¥7,ï¿¥500,ï¿¥8,123,ï¿¥12"
+
+ +

さらに倚くの䟋を知りたいなら、 {{jsxref("Intl")}} や {{jsxref("NumberFormat")}}、{{jsxref("DateTimeFormat")}} ペヌゞを芋おください。

+ +

仕様曞

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}
{{SpecName('ES Int Draft', '#sup-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.toLocaleString")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/tosource/index.html b/files/ja/web/javascript/reference/global_objects/array/tosource/index.html new file mode 100644 index 0000000000..d9feb311b9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/tosource/index.html @@ -0,0 +1,69 @@ +--- +title: Array.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Array/toSource +tags: + - Array + - JavaScript + - Method + - Non-standard + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/toSource +--- +
{{JSRef}} {{obsolete_header}}
+ +

toSource() メ゜ッドは、配列の゜ヌスコヌドを衚す文字列を返したす。

+ +

構文

+ +
arr.toSource()
+ +

返り倀

+ +

配列の゜ヌスコヌドを衚す文字列です。

+ +

解説

+ +

toSource メ゜ッドは以䞋の倀を返したす。

+ + + +

このメ゜ッドはたいおい JavaScript によっお内郚的に呌び出され、コヌドで明瀺的に呌び出されるこずはありたせん。デバッグ䞭に toSource を呌び出すこずで、あなたは配列の内容を調べるこずができたす。

+ +

䟋

+ +

配列の゜ヌスコヌドを調べる

+ +

配列の゜ヌスコヌドを調べるには以䞋のようにしたす。

+ +
var alpha = new Array('a', 'b', 'c');
+
+alpha.toSource();
+// ['a', 'b', 'c'] が返る
+
+ +

仕様曞

+ +

あらゆる暙準仕様に組み蟌たれおいたせん。JavaScript 1.3 で実装されたした。

+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.Array.toSource")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/tostring/index.html b/files/ja/web/javascript/reference/global_objects/array/tostring/index.html new file mode 100644 index 0000000000..70dd6b5ece --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/tostring/index.html @@ -0,0 +1,73 @@ +--- +title: Array.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Array/toString +tags: + - Array + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Array/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは、指定された配列ずその芁玠を衚す文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-tostring.html","shorter")}}
+ +

構文

+ +
arr.toString()
+ +

返倀

+ +

配列の芁玠を衚す文字列です。

+ +

解説

+ +

{{jsxref("Array")}} オブゞェクトは {{jsxref("Object")}} の toString メ゜ッドを䞊曞きしおいたす。Array オブゞェクトでは、toString メ゜ッドは配列を぀ないで、配列のそれぞれの芁玠がカンマで区切られた 1 ぀の文字列を返したす。

+ +

配列が文字列倀ずしお衚される必芁がある堎合や、配列が文字列の結合ずしお参照される時、JavaScript は toString メ゜ッドを自動的に呌び出したす。

+ +

ECMAScript 5 でのセマンティック

+ +

JavaScript 1.8.5 Firefox 4以降、および ECMAScript 第 5 版では、toString() メ゜ッドは䞀般化されおおり、すべおのオブゞェクトで䜿甚可胜ずなっおいたす。{{jsxref("Object.prototype.toString()")}} が呌び出され、その結果の倀が返されたす。

+ +

䟋

+ +

toString を䜿甚する

+ +
const array1 = [1, 2, 'a', '1a'];
+
+console.log(array1.toString());
+// expected output: "1,2,a,1a"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.tostring', 'Array.prototype.toString')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.toString")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/unobserve/index.html b/files/ja/web/javascript/reference/global_objects/array/unobserve/index.html new file mode 100644 index 0000000000..1eafff5efa --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/unobserve/index.html @@ -0,0 +1,134 @@ +--- +title: Array.unobserve +slug: Web/JavaScript/Reference/Global_Objects/Array/unobserve +tags: + - Array + - JavaScript + - Method + - Obsolete +translation_of: Archive/Web/JavaScript/Array.unobserve +--- +
{{JSRef}} {{obsolete_header}}
+ +

Array.unobserve()メ゜ッドは、{{jsxref("Array.observe()")}} で蚭定された監芖を削陀するために䜿われおいたしたが、非掚奚ずなりブラりザから削陀されたした。代わりに、䞀般的な {{jsxref("Proxy")}} オブゞェクトを䜿甚しおください。

+ +

構文

+ +
Array.unobserve(arr, callback)
+ +

匕数

+ +
+
arr
+
監芖を停止する配列。
+
callback
+
arr 配列の倉曎時に毎回呌び出されるのを停止するための、オブザヌバぞの参照。
+
+ +

説明

+ +

配列からオブザヌバを削陀するため、Array.unobserve() は {{jsxref("Array.observe()")}} の埌に呌び出される必芁がありたす。

+ +

callback は関数ぞの参照ずすべきであり、匿名関数ではいけたせん。なぜなら、この参照は以前のオブザヌバを解陀するために䜿甚されるからです。callback ずしお匿名関数を䜿った Array.unobserve() の呌び出しは、オブザヌバを削陀できないので無意味です。

+ +

䟋

+ +

配列の監芖を削陀

+ +
var arr = [1, 2, 3];
+
+var observer = function(changes) {
+  console.log(changes);
+}
+
+Array.observe(arr, observer);
+​
+arr.push(4);
+// [{type: "splice", object: <arr>, index: 3, removed:[], addedCount: 1}]
+
+Array.unobserve(arr, observer);
+
+arr.pop();
+// callback は呌び出されなかった。
+ +

匿名関数の䜿甚

+ +
var persons = ['Khalid', 'Ahmed', 'Mohammed'];
+
+Array.observe(persons, function (changes) {
+  console.log(changes);
+});
+
+persons.shift();
+// [{type: "splice", object: <arr>, index: 0, removed: [ "Khalid" ], addedCount: 0 }]
+
+Array.unobserve(persons, function (changes) {
+  console.log(changes);
+});
+
+persons.push('Abdullah');
+// [{type: "splice", object: <arr>, index: 2, removed: [], addedCount: 1 }]
+// callback は垞に呌び出される。
+
+ +

ブラりザ実装状況

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
機胜ChromeFirefox (Gecko)Internet ExplorerOperaSafari
基本サポヌト{{CompatChrome("36")}} [1]{{CompatNo}}{{CompatNo}}{{CompatOpera("23")}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
機胜AndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
基本サポヌト{{CompatNo}}{{CompatChrome("36")}} [1]{{CompatNo}}{{CompatNo}}{{CompatOpera("23")}}{{CompatNo}}
+
+ +

[1] Chrome 49 で非掚奚になりたした。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/unshift/index.html b/files/ja/web/javascript/reference/global_objects/array/unshift/index.html new file mode 100644 index 0000000000..cd4c85714a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/unshift/index.html @@ -0,0 +1,108 @@ +--- +title: Array.prototype.unshift() +slug: Web/JavaScript/Reference/Global_Objects/Array/unshift +tags: + - Array + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/unshift +--- +
{{JSRef}}
+ +

unshift() メ゜ッドは、配列の最初に 1 ぀以䞊の芁玠を远加し、新しい配列の長さを返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-unshift.html")}}
+ +

構文

+ +
arr.unshift(element1[, ...[, elementN]])
+ +

匕数

+ +
+
elementN
+
arr の先頭に远加する芁玠。
+
+ +

返倀

+ +

メ゜ッドを呌び出した埌のオブゞェクトの新しい {{jsxref("Array.length", "length")}} プロパティの倀です。

+ +

解説

+ +

unshift メ゜ッドは、䞎えられた芁玠を配列のようなオブゞェクトの䞀番最初に挿入したす。

+ +

unshift は意図しお汎甚的です。このメ゜ッドは配列に類䌌したオブゞェクトに察しお{{jsxref("Function.call", "呌び出し", "", 1)}}たり{{jsxref("Function.apply", "適甚し", "", 1)}}たりするこずができたす。 length プロパティ、すなわち連続の最埌を瀺すれロベヌスの数倀プロパティ、を反映しおいるため、意味のある振る舞いができない可胜性がありたす。

+ +

耇数の芁玠が匕数ずしお枡された堎合、匕数ずしお枡されたものず党く同じ順番で、オブゞェクトの最初のチャンクに挿入されるこずに泚意しおください。したがっお、 unshift を n 個の匕数で1回呌び出すのず、1個の匕数で n 回 (䟋えばルヌプを䜿っお) 呌び出すのずでは同じ結果にはなりたせん。

+ +

䟋をご芧ください。

+ +
let arr = [4, 5, 6]
+
+arr.unshift(1, 2, 3)
+console.log(arr);
+// [1, 2, 3, 4, 5, 6]
+
+arr = [4, 5, 6] // 配列をリセット
+
+arr.unshift(1)
+arr.unshift(2)
+arr.unshift(3)
+
+console.log(arr)
+// [3, 2, 1, 4, 5, 6]
+
+ +

䟋

+ +

unshift の䜿甚

+ +
let arr = [1, 2]
+
+arr.unshift(0)               // 呌び出しの返倀は 3、新しい配列の長さ
+// arr is [0, 1, 2]
+
+arr.unshift(-2, -1)          // 新しい配列の長さは 5
+// arr is [-2, -1, 0, 1, 2]
+
+arr.unshift([-4, -3])        // 新しい配列の長さは 6
+// arr is [[-4, -3], -2, -1, 0, 1, 2]
+
+arr.unshift([-7, -6], [-5])  // 新しい配列の長さは 8
+// arr is [ [-7, -6], [-5], [-4, -3], -2, -1, 0, 1, 2 ]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.unshift', 'Array.prototype.unshift')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.unshift")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/array/values/index.html b/files/ja/web/javascript/reference/global_objects/array/values/index.html new file mode 100644 index 0000000000..29b90252b6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/array/values/index.html @@ -0,0 +1,122 @@ +--- +title: Array.prototype.values() +slug: Web/JavaScript/Reference/Global_Objects/Array/values +tags: + - Array + - ECMAScript2015 + - Iterator + - JavaScript + - Method + - Prototype + - メ゜ッド + - 反埩子 +translation_of: Web/JavaScript/Reference/Global_Objects/Array/values +--- +
{{JSRef}}
+ +

values() メ゜ッドは、配列の各むンデックスの倀を含む新しい Array Iterator オブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-values.html")}}
+ +

構文

+ +
arr.values()
+ +

返倀

+ +

新しい {{jsxref("Array")}} iterator オブゞェクトです。

+ +

䟋

+ +

for...of ルヌプを甚いた反埩凊理

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+var iterator = arr.values();
+
+for (let letter of iterator) {
+  console.log(letter);
+}  //"a" "b" "c" "d" "e"
+
+ +

Array.prototype.values は Array.prototype[Symbol.iterator] の既定の実装です。

+ +
Array.prototype.values === Array.prototype[Symbol.iterator]      //true
+ +

.next() を䜿甚した反埩凊理

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+var iterator = arr.values();
+iterator.next();               // Object { value: "a", done: false }
+iterator.next().value;         // "b"
+iterator.next()["value"];      // "c"
+iterator.next();               // Object { value: "d", done: false }
+iterator.next();               // Object { value: "e", done: false }
+iterator.next();               // Object { value: undefined, done: true }
+iteraror.next().value;         // undefined 
+ +
+

䞀床だけの䜿甚: 配列の反埩子オブゞェクトは䞀床だけの䜿甚たたはテンポラリオブゞェクトです

+
+ +

䟋:

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+ var iterator = arr.values();
+ for (let letter of iterator) {
+ console.log(letter);
+} //"a" "b" "c" "d" "e"
+for (let letter of iterator) {
+console.log(letter);
+} // undefined
+
+ +

理由: next().done=true たたは currentIndex>length が for..of の終了条件だからです。反埩凊理プロトコルを参照しお䞋さい。

+ +

倀: 配列の反埩子オブゞェクトには倀が栌玍されたせん。その代わりに、その䜜成に䜿甚された配列のアドレスが栌玍されるので、その配列に栌玍されおいる倀に䟝存したす。

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+var iterator = arr.values();
+console.log(iterator);        // Array Iterator {  }
+iterator.next().value;        // "a"
+arr[1]='n';
+iterator.next().value;        //  "n"
+
+ +
+

配列内の倀が倉化した堎合は、配列の反埩子オブゞェクトの倀も倉化したす。

+
+ + + +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.values', 'Array.prototype.values')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.values")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/@@species/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/@@species/index.html new file mode 100644 index 0000000000..1b1043119a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/@@species/index.html @@ -0,0 +1,64 @@ +--- +title: 'get ArrayBuffer[@@species]' +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species +tags: + - ArrayBuffer + - JavaScript + - Method + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species +--- +
{{JSRef}}
+ +

ArrayBuffer[@@species] アクセサヌプロパティは、ArrayBuffer コンストラクタヌを返したす。

+ +

解説

+ +

species アクセサヌプロパティは、既定のコンストラクタヌである ArrayBuffer オブゞェクトを返したす。サブクラスのコンストラクタヌはコンストラクタヌに代入するこずで、これをオヌバヌラむドできたす。

+ +

䟋

+ +

通垞のオブゞェクトの spicies

+ +

species プロパティは、ArrayBuffer オブゞェクトの既定のコンストラクタヌ関数である ArrayBuffer コンストラクタヌを返したす。

+ +
ArrayBuffer[Symbol.species]; // ArrayBuffer() 関数
+ +

掟生オブゞェクトの spicies

+ +

掟生コレクションオブゞェクト (たずえば、独自の配列バッファヌである MyArrayBuffer) では、MyArrayBuffer の species は MyArrayBuffer コンストラクタヌです。しかし、掟生クラスのメ゜ッドで、芪である ArrayBuffer オブゞェクトを返すためにこれをオヌバヌラむドしたいかもしれたせん。

+ +
class MyArrayBuffer extends ArrayBuffer {
+  // MyArrayBuffer species を芪である ArrayBuffer コンストラクタにオヌバヌラむド。
+  static get [Symbol.species]() { return ArrayBuffer; }
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.ArrayBuffer.@@species")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/arraybuffer/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/arraybuffer/index.html new file mode 100644 index 0000000000..2864dc83d3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/arraybuffer/index.html @@ -0,0 +1,82 @@ +--- +title: ArrayBuffer() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/ArrayBuffer +tags: + - ArrayBuffer + - Constructor + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/ArrayBuffer +--- +
{{JSRef}}
+ +

ArrayBuffer() コンストラクタヌは {{jsxref("ArrayBuffer")}} オブゞェクトを生成するために䜿甚されたす。

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-constructor.html","shorter")}}
+ + + +

構文

+ +
new ArrayBuffer(length)
+
+ +

匕数

+ +
+
length
+
䜜成する配列バッファヌのサむズをバむト単䜍で指定したす。
+
+ +

返倀

+ +

指定されたサむズの新しい ArrayBuffer オブゞェクト。その内容は 0 に初期化されたす。

+ +

䟋倖

+ +

{{jsxref("RangeError")}}: length が {{jsxref("Number.MAX_SAFE_INTEGER")}} よりも倧きい (>= 2 ** 53) か、負の倀であった堎合。

+ +

互換性の泚意

+ +

ECMAScript 2015 から、ArrayBuffer のコンストラクタヌは構築に {{jsxref("Operators/new", "new")}} 挔算子が必芁になりたした。 new を指定せずに関数ずしお ArrayBuffer コンストラクタヌを呌び出すず、 {{jsxref("TypeError")}} が発生するようになりたした。

+ +
var dv = ArrayBuffer(10);
+// TypeError: calling a builtin ArrayBuffer constructor
+// without new is forbidden
+ +
var dv = new ArrayBuffer(10);
+ +

䟋

+ +

ArrayBuffer の䜜成

+ +

この䟋では、バッファヌを参照する {{jsxref("Global_Objects/Int32Array", "Int32Array")}} ビュヌを持぀ 8 バむトのバッファヌを䜜成しおいたす。

+ +
var buffer = new ArrayBuffer(8);
+var view   = new Int32Array(buffer);
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html new file mode 100644 index 0000000000..1ae1c0727f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html @@ -0,0 +1,56 @@ +--- +title: ArrayBuffer.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength +tags: + - ArrayBuffer + - JavaScript + - Property + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength +--- +
{{JSRef}}
+ +

byteLength アクセサヌプロパティは、{{jsxref("ArrayBuffer")}} の長さをバむト単䜍で衚したす。

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-bytelength.html")}}
+ + + +

解説

+ +

byteLength プロパティはアクセサヌプロパティで、 set アクセサヌ関数が undefined、぀たりこのプロパティは読み取り専甚です。倀は配列が構築されるずきに蚭定され、倉曎するこずができたせん。この ArrayBuffer が取り倖された堎合、このプロパティは 0 を返したす。

+ +

䟋

+ +

byteLength の䜿甚

+ +
var buffer = new ArrayBuffer(8);
+buffer.byteLength; // 8
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-arraybuffer.prototype.bytelength', 'ArrayBuffer.prototype.byteLength')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.byteLength")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/index.html new file mode 100644 index 0000000000..b54ef2e308 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/index.html @@ -0,0 +1,89 @@ +--- +title: ArrayBuffer +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer +tags: + - ArrayBuffer + - Constructor + - JavaScript + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer +--- +
{{JSRef}}
+ +

ArrayBuffer オブゞェクトは、䞀般的な固定長の生のバむナリデヌタバッファを衚珟するために䜿甚されたす。

+ +

ArrayBuffer はバむトの配列で、他の蚀語では「バむト配列」ず呌ばれるこずが倚いです。ArrayBuffer の内容を盎接操䜜するこずはできたせん。代わりに、型付きの配列オブゞェクトか {{jsxref("DataView")}} オブゞェクトのいずれかを䜜成しお、バッファを特定の圢匏で衚珟し、バッファの内容を読み曞きするためにそれを䜿甚したす。

+ +

ArrayBuffer() コンストラクタは、指定した長さの ArrayBuffer をバむト単䜍で䜜成したす。Base64 文字列やロヌカルファむルなどの既存のデヌタから配列バッファを取埗するこずもできたす。

+ +

コンストラクタ

+ +
+
{{jsxref("ArrayBuffer.ArrayBuffer", "ArrayBuffer()")}}
+
新しい ArrayBuffer オブゞェクトを䜜成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}}
+
掟生オブゞェクトを䜜成する際に䜿甚するコンストラクタ関数です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("ArrayBuffer.isView", "ArrayBuffer.isView(arg)")}}
+
arg が型付き配列オブゞェクトや {{jsxref("DataView")}} のような ArrayBuffer ビュヌのいずれかである堎合に true を返したす。それ以倖の堎合は false を返したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("ArrayBuffer.prototype.byteLength")}}
+
ArrayBuffer の読み取り専甚サむズ (バむト単䜍)。これは配列が構築されたずきに蚭定され、倉曎するこずはできたせん。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("ArrayBuffer.prototype.slice()")}}
+
ArrayBuffer のバむト数のコピヌであり、その内容は、begin (含む) から end (排他的) たでのバむト数である。begin たたは end のどちらかが負の倀の堎合は、配列の先頭からではなく、配列の末尟からのむンデックスを指したす。
+
+ +

䟋

+ +

ArrayBuffer の䜜成

+ +

この䟋では、バッファを参照する {{jsxref("Int32Array")}} ビュヌを持぀ 8 バむトバッファを䜜成したす。

+ +
const buffer = new ArrayBuffer(8);
+const view = new Int32Array(buffer);
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-arraybuffer-objects', 'ArrayBuffer')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

あわせお参照

+ + diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/isview/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/isview/index.html new file mode 100644 index 0000000000..f679275a04 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/isview/index.html @@ -0,0 +1,80 @@ +--- +title: ArrayBuffer.isView() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView +tags: + - ArrayBuffer + - JavaScript + - Method + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView +--- +
{{JSRef}}
+ +

ArrayBuffer.isView() メ゜ッドは、枡された倀が ArrayBuffer のビュヌのうちの䞀぀、䟋えば型付き配列オブゞェクトや {{jsxref("DataView")}} であるかどうかを刀断したす。

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-isview.html","shorter")}}
+ + + +

構文

+ +
ArrayBuffer.isView(value)
+ +

匕数

+ +
+
value
+
チェックする倀です。
+
+ +

返倀

+ +

枡された匕数が {{jsxref("ArrayBuffer")}} のビュヌのうちの䞀぀であれば true を、そうでなければ false を返したす。

+ +

䟋

+ +

isView の䜿甚

+ +
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
+
+const buffer = new ArrayBuffer(2);
+const dv = new DataView(buffer);
+ArrayBuffer.isView(dv); // true
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-arraybuffer.isview', 'ArrayBuffer.isView')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.isView")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/slice/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/slice/index.html new file mode 100644 index 0000000000..ff1be1c5b0 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/slice/index.html @@ -0,0 +1,77 @@ +--- +title: ArrayBuffer.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice +tags: + - ArrayBuffer + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice +--- +
{{JSRef}}
+ +

slice() メ゜ッドは新しい ArrayBuffer を返し、その䞭にこの ArrayBuffer の begin から end の手前たでをコピヌしたす。

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-slice.html")}}
+ + + +

構文

+ +
arraybuffer.slice(begin[, end])
+ +

匕数

+ +
+
begin
+
スラむスの起点を衚すれロ基点のバむトむンデックスです。
+
+ +
+
end {{optional_inline}}
+
スラむスをその前で終了するバむトむンデックスです。 end が指定されなかった堎合は、新しい ArrayBuffer は、この ArrayBuffer の起点から終点たですべおのバむトを含みたす。
+
+ +

返倀

+ +

新しい {{jsxref("ArrayBuffer")}} オブゞェクト。

+ +

解説

+ +

slice() メ゜ッドは、 end 匕数で指定されたバむトの手前たでコピヌを行いたす。 begin たたは end のどちらかが負の数の堎合、開始䜍眮ずは反察に、配列の末尟からのむンデックスを参照したす。

+ +

begin および end 匕数で指定された範囲は、珟圚の配列で劥圓なむンデックスの範囲に䞞められたす。新しい ArrayBuffer の蚈算された長さが負の数であった堎合、れロに䞞められたす。

+ +

䟋

+ +

ArrayBuffer のコピヌ

+ +
const buf1 = new ArrayBuffer(8);
+const buf2 = buf1.slice(0);
+
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.slice")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html new file mode 100644 index 0000000000..2070e902a4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html @@ -0,0 +1,126 @@ +--- +title: ArrayBuffer.transfer() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/transfer +tags: + - ArrayBuffer + - ECMAScript7 + - Experimental + - Expérimental(2) + - JavaScript + - Method + - Reference + - Référence(2) + - TypedArrays +translation_of: Archive/Web/JavaScript/ArrayBuffer.transfer +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

静的な ArrayBuffer.transfer() メ゜ッドは、oldBuffer のデヌタから埗られる内容の新しい ArrayBuffer を返し、newByteLength によっお切断されるかれロ拡匵されたす。newByteLength が undefined なら、oldBuffer の byteLength が䜿われたす。この操䜜により oldBuffer はデタッチ状態のたたになりたす。

+ +

構文

+ +
ArrayBuffer.transfer(oldBuffer [, newByteLength]);
+ +

匕数

+ +
+
oldBuffer
+
転送するための {{jsxref("ArrayBuffer")}} オブゞェクト
+
newByteLength
+
新しい ArrayBuffer オブゞェクトのバむト長
+
+ +

戻り倀

+ +

新しい ArrayBuffer オブゞェクト。

+ +

説明

+ +

ArrayBuffer.transfer() メ゜ッドによっお、ArrayBuffer オブゞェクトを成長し、デタッチできたす。コピヌなしで ArrayBuffer を成長される胜力は倧芏暡バッファに察しおもっず早くなる利点を持っおいたす。ArrayBuffer をデタッチする機胜によっお、基底メモリがリリヌスされるずきを開発者が明瀺的に制埡できたす。これにより、すべおの参照を削陀し、ガベヌゞコレクションを埅たずに枈みたす。

+ +

䟋

+ +
var buf1 = new ArrayBuffer(40);
+new Int32Array(buf1)[0] = 42;
+
+var buf2 = ArrayBuffer.transfer(buf1, 80);
+buf1.byteLength; // 0
+buf2.byteLength; // 80
+new Int32Array(buf2)[0]; // 42
+
+var buf3 = ArrayBuffer.transfer(buf2, 0);
+buf2.byteLength; // 0
+buf3.byteLength; // 0
+
+ +

ポリフィル

+ +

次のコヌドをスクリプトの先頭に挿入するこずで、transfer() の機胜の倧郚分をネむティブにサポヌトしおいない環境でも察凊できるようになりたす。これはこの API ず完党に同じではありたせんが、この関数はある ArrayBuffer からそのほかの ArrayBuffer にデヌタを倉換したす。

+ +
if (!ArrayBuffer.transfer) {
+    ArrayBuffer.transfer = function(source, length) {
+        source = Object(source);
+        var dest = new ArrayBuffer(length);
+        if (!(source instanceof ArrayBuffer) || !(dest instanceof ArrayBuffer)) {
+            throw new TypeError('Source and destination must be ArrayBuffer instances');
+        }
+        if (dest.byteLength >= source.byteLength) {
+            var nextOffset = 0;
+            var leftBytes = source.byteLength;
+            var wordSizes = [8, 4, 2, 1];
+            wordSizes.forEach(function(_wordSize_) {
+                if (leftBytes >= _wordSize_) {
+                    var done = transferWith(_wordSize_, source, dest, nextOffset, leftBytes);
+                    nextOffset = done.nextOffset;
+                    leftBytes = done.leftBytes;
+                }
+            });
+        }
+        return dest;
+        function transferWith(wordSize, source, dest, nextOffset, leftBytes) {
+            var ViewClass = Uint8Array;
+            switch (wordSize) {
+                case 8:
+                    ViewClass = Float64Array;
+                    break;
+                case 4:
+                    ViewClass = Float32Array;
+                    break;
+                case 2:
+                    ViewClass = Uint16Array;
+                    break;
+                case 1:
+                    ViewClass = Uint8Array;
+                    break;
+                default:
+                    ViewClass = Uint8Array;
+                    break;
+            }
+            var view_source = new ViewClass(source, nextOffset, Math.trunc(leftBytes / wordSize));
+            var view_dest = new ViewClass(dest, nextOffset, Math.trunc(leftBytes / wordSize));
+            for (var i = 0; i < view_dest.length; i++) {
+                view_dest[i] = view_source[i];
+            }
+            return {
+                nextOffset : view_source.byteOffset + view_source.byteLength,
+                leftBytes : source.byteLength - (view_source.byteOffset + view_source.byteLength)
+            }
+        }
+    };
+}
+ +

仕様

+ +

いづれの珟行仕様のドラフトにも含たれおいたせんが、ECMA-262 ゚ディションの機胜ずしお提案されたした。

+ +

ブラりザ実装状況

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.transfer")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/asyncfunction/index.html b/files/ja/web/javascript/reference/global_objects/asyncfunction/index.html new file mode 100644 index 0000000000..0b376879c3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/asyncfunction/index.html @@ -0,0 +1,104 @@ +--- +title: AsyncFunction +slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction +tags: + - Constructor + - JavaScript + - Reference + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction +--- +
{{JSRef}}
+ +

AsyncFunction コンストラクタヌは、新しい{{jsxref("Statements/async_function", "非同期関数", "", 1)}}オブゞェクトを生成したす。 JavaScript では、すべおの非同期関数が実際に AsyncFunction オブゞェクトです。

+ +

AsyncFunction はグロヌバルオブゞェクトではないこずに泚意しおください。これは以䞋のようなコヌドで取埗するこずができたす。

+ +
Object.getPrototypeOf(async function(){}).constructor
+
+ +

構文

+ +
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
+ +

匕数

+ +
+
arg1, arg2, ... argN
+
圢匏的な匕数名ずしお関数に䜿甚される名前です。それぞれが有効な JavaScript の識別子であるか、カンマで区切った文字列のリストで、䟋えば "x", "theValue", "a,b" などです。
+
functionBody
+
関数定矩を構成する JavaScript 文を含む文字列。
+
+ +

解説

+ +

AsyncFunction コンストラクタヌで生成された{{jsxref("Statements/async_function", "非同期関数", "", 1)}}オブゞェクトは、関数が生成されたずきにパヌスされたす。これは、非同期関数を{{jsxref("Statements/async_function", "非同期関数匏", "", 1)}}で定矩しおからコヌド内で呌び出す方法ほど効率的ではありたせん。ずいうのも、そのような関数はコヌドの残りの郚分ず共にパヌスされるからです。

+ +

関数に枡されたすべおの匕数は、枡された順に、䜜成される関数内の匕数の識別子の名前ずしお扱われたす。

+ +
+

泚: {{jsxref("Statements/async_function", "非同期関数", "", 1)}}が AsyncFunction コンストラクタヌによっお生成された堎合、生成コンテキストのクロヌゞャは生成されたせん。垞にグロヌバルスコヌプに生成されたす。

+ +

実行するず、ロヌカル倉数ずグロヌバルグロヌバル倉数にのみアクセスでき、 AsyncFunction コンストラクタヌが呌び出されたスコヌプの倉数にはアクセスできたせん。

+ +

これは、非同期関数匏のコヌドで {{jsxref("Global_Objects/eval", "eval")}} を䜿甚した堎合ずは異なりたす。

+
+ +

AsyncFunction コンストラクタヌを (new 挔算子を䜿甚せずに) 関数ずしお呌び出した堎合、コンストラクタヌずしお呌び出したずきず同じ効果がありたす。

+ +

䟋

+ +

AsyncFunction() コンストラクタヌから非同期関数を生成する

+ +
function resolveAfter2Seconds(x) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      resolve(x);
+    }, 2000);
+  });
+}
+
+let AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
+
+let a = new AsyncFunction('a',
+                          'b',
+                          'return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);');
+
+a(10, 20).then(v => {
+  console.log(v); // prints 30 after 4 seconds
+});
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-async-function-objects', 'AsyncFunction object')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/asyncfunction/prototype/index.html b/files/ja/web/javascript/reference/global_objects/asyncfunction/prototype/index.html new file mode 100644 index 0000000000..46bf817819 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/asyncfunction/prototype/index.html @@ -0,0 +1,109 @@ +--- +title: AsyncFunction.prototype +slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction/prototype +tags: + - Experimental + - JavaScript + - Property + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction/prototype +--- +
{{JSRef}}
+ +

AsyncFunction.prototype プロパティは、{{jsxref("AsyncFunction")}} プロトタむプオブゞェクトを衚したす。

+ +

説明

+ +

{{jsxref("AsyncFunction")}} オブゞェクトは、AsyncFunction.prototype を継承したす。AsyncFunction.prototype は修正できたせん。

+ +

プロパティ

+ +
+
AsyncFunction.constructor
+
初期倀は {{jsxref("AsyncFunction")}}。
+
AsyncFunction.prototype[@@toStringTag]
+
"AsyncFunction" を返す。
+
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様ステヌタスコメント
{{SpecName('Async Function', '#async-function-definitions', 'async function')}}{{Spec2('Async Function')}}提案
+ +

ブラりザヌ実装状況

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
機胜ChromeFirefox (Gecko)Internet Explorer EdgeOperaSafari (WebKit)
基本サポヌト{{CompatUnknown}}{{CompatGeckoDesktop("52.0")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
機胜AndroidAndroid WebviewFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
基本サポヌト{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile("52.0")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/add/index.html b/files/ja/web/javascript/reference/global_objects/atomics/add/index.html new file mode 100644 index 0000000000..59b915e470 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/add/index.html @@ -0,0 +1,85 @@ +--- +title: Atomics.add() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/add +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メ゜ッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/add +--- +
{{JSRef}}
+ +

静的な Atomics.add() メ゜ッドは、配列内の指定した䜍眮の倀に加算しお、その堎所の叀い倀を返したす。これは䞍可分操䜜で、修正された倀が曞き戻されるたで、他の曞き蟌みが起こらないこずを保蚌したす。

+ +
{{EmbedInteractiveExample("pages/js/atomics-add.html")}}
+ + + +

構文

+ +
Atomics.add(typedArray, index, value)
+
+ +

匕数

+ +
+
typedArray
+
共有敎数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の䜕れかです。
+
index
+
typedArray で value を加算する䜍眮です。
+
value
+
加算する数倀です。
+
+ +

返倀

+ +

指定された䜍眮にあった叀い倀です (typedArray[index])。

+ +

䟋倖

+ + + +

䟋

+ +

add() の䜿甚

+ +
const sab = new SharedArrayBuffer(1024);
+const ta = new Uint8Array(sab);
+
+Atomics.add(ta, 0, 12); // 叀い倀である 0 を返す。
+Atomics.load(ta, 0); // 12
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-atomics.exchange', 'Atomics.exchange')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Atomics.add")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/and/index.html b/files/ja/web/javascript/reference/global_objects/atomics/and/index.html new file mode 100644 index 0000000000..6a586a73f1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/and/index.html @@ -0,0 +1,131 @@ +--- +title: Atomics.and() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/and +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メ゜ッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/and +--- +
{{JSRef}}
+ +

静的な Atomics.and() メ゜ッドは、配列内の指定した䜍眮の倀に指定した倀でビット単䜍の AND を蚈算し、その䜍眮の叀い倀を返したす。これは䞍可分操䜜で、修正された倀が曞き戻されるたで、他の曞き蟌みが起こらないこずを保蚌したす。

+ +
{{EmbedInteractiveExample("pages/js/atomics-and.html")}}
+ + + +

構文

+ +
Atomics.and(typedArray, index, value)
+
+ +

匕数

+ +
+
typedArray
+
共有敎数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の䜕れかです。
+
index
+
typedArray でビット単䜍の AND を蚈s名する䜍眮です。
+
value
+
ビット単䜍の AND を取る数倀です。
+
+ +

返倀

+ +

指定された䜍眮にあった叀い倀です (typedArray[index])。

+ +

䟋倖

+ + + +

解説

+ +

ビット単䜍の AND 操䜜は、 a ず b の䞡方が 1 であった堎合のみ 1 を生成したす。 AND 操䜜の真理倀衚を瀺したす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba & b
000
010
100
111
+ +

䟋えば、ビット単䜍の AND を 5 & 1 で行うず、結果は 0001 すなわち10進数で1ずなりたす。

+ +
5  0101
+1  0001
+   ----
+1  0001
+ +

䟋

+ +

add() の䜿甚

+ +
const sab = new SharedArrayBuffer(1024);
+const ta = new Uint8Array(sab);
+ta[0] = 5;
+
+Atomics.and(ta, 0, 1); // returns 0, the old value
+Atomics.load(ta, 0);  // 1
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-atomics.and', 'Atomics.and')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Atomics.and")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/compareexchange/index.html b/files/ja/web/javascript/reference/global_objects/atomics/compareexchange/index.html new file mode 100644 index 0000000000..a92017c7ca --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/compareexchange/index.html @@ -0,0 +1,88 @@ +--- +title: Atomics.compareExchange() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/compareExchange +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メ゜ッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/compareExchange +--- +
{{JSRef}}
+ +

静的な Atomics.compareExchange() メ゜ッドは、指定された倀を配列内の指定した䜍眮に栌玍し、その倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/atomics-compareexchange.html")}}
+ + + +

構文

+ +
Atomics.compareExchange(typedArray, index, value)
+
+ +

匕数

+ +
+
typedArray
+
共有敎数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の䜕れかです。
+
index
+
typedArray で value ず亀換する䜍眮です。
+
expectedValue
+
等䟡性をチェックする倀です。
+
replacementValue
+
亀換する数倀です。
+
+ +

返倀

+ +

指定された䜍眮にあった叀い倀です (typedArray[index])。

+ +

䟋倖

+ + + +

䟋

+ +

compareExchange() の䜿甚

+ +
const sab = new SharedArrayBuffer(1024);
+const ta = new Uint8Array(sab);
+ta[0] = 7;
+
+Atomics.compareExchange(ta, 0, 7, 12); // returns 7, the old value
+Atomics.load(ta, 0); // 12
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-atomics.compareexchange', 'Atomics.compareExchange')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Atomics.compareExchange")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/exchange/index.html b/files/ja/web/javascript/reference/global_objects/atomics/exchange/index.html new file mode 100644 index 0000000000..e58cf973cf --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/exchange/index.html @@ -0,0 +1,85 @@ +--- +title: Atomics.exchange() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/exchange +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メ゜ッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/exchange +--- +
{{JSRef}}
+ +

静的な Atomics.exchange() メ゜ッドは、指定された倀を配列内の指定した䜍眮に栌玍し、その倀を返したす。これは䞍可分操䜜で、叀い倀を読み取っおから新しい倀を曞き蟌むたでの間に他の物が曞き蟌たないこずを保蚌したす。

+ +
{{EmbedInteractiveExample("pages/js/atomics-exchange.html")}}
+ + + +

構文

+ +
Atomics.exchange(typedArray, index, value)
+
+ +

匕数

+ +
+
typedArray
+
共有敎数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の䜕れかです。
+
index
+
typedArray で value ず亀換する䜍眮です。
+
value
+
亀換する数倀です。
+
+ +

返倀

+ +

指定された䜍眮にあった叀い倀です (typedArray[index])。

+ +

䟋倖

+ + + +

䟋

+ +

exchange() の䜿甚

+ +
const sab = new SharedArrayBuffer(1024);
+const ta = new Uint8Array(sab);
+
+Atomics.exchange(ta, 0, 12); // returns 0, the old value
+Atomics.load(ta, 0); // 12
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-atomics.exchange', 'Atomics.exchange')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Atomics.exchange")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/index.html b/files/ja/web/javascript/reference/global_objects/atomics/index.html new file mode 100644 index 0000000000..bc6043792f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/index.html @@ -0,0 +1,145 @@ +--- +title: Atomics +slug: Web/JavaScript/Reference/Global_Objects/Atomics +tags: + - JavaScript + - Namespace + - Shared Memory + - Specifications + - 仕様 + - 共有メモリ + - 名前空間 +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics +--- +
{{JSRef}}
+ +

Atomics オブゞェクトは、静的なメ゜ッドずしお䞍可分操䜜を提䟛したす。これらは {{jsxref("SharedArrayBuffer")}} および {{jsxref("ArrayBuffer")}} オブゞェクトで䜿甚されたす。

+ +

解説

+ +

䞍可分操䜜は、 Atomics モゞュヌル䞊に装備されおいたす。他のグロヌバルオブゞェクトず異なり、 Atomics はコンストラクタヌではありたせん。 new 挔算子 を付けお䜿甚したり、 Atomics オブゞェクトを関数ずしお呌び出したりするこずはできたせん。 Atomics のすべおのプロパティずメ゜ッドは静的です (䟋えば、{{jsxref("Math")}} オブゞェクトの堎合ず同様です)。

+ +

䞍可分操䜜

+ +

メモリが共有されおいる堎合、耇数のスレッドがメモリヌ内の同じデヌタを読み曞きできたす。䞍可分操䜜では、予枬される倀の曞き蟌みず読み蟌みを保蚌するため、次の挔算が開始される前に珟圚の挔算が完了し、その挔算が割り蟌たれないようにしたす。

+ +

wait ず notify

+ +

wait() メ゜ッドず notify() メ゜ッドは、 Linux の futex ("fast user-space mutex") を原型ずしおおり、特定の条件が true になるたで埅぀手段を提䟛したす。䞀般的にはブロッキング構造ずしお䜿甚されたす。

+ +

静的メ゜ッド

+ +
+
{{jsxref("Atomics.add()")}}
+
配列の指定した䜍眮にある既存の倀に指定した倀を远加したす。その䜍眮にあった叀い倀を返したす。
+
{{jsxref("Atomics.and()")}}
+
配列の指定した䜍眮の倀ず指定した倀でビット単䜍の論理積 (AND) を蚈算したす。その䜍眮にあった叀い倀を返したす。
+
{{jsxref("Atomics.compareExchange()")}}
+
倀が等しい堎合、配列の指定した䜍眮に倀を栌玍したす。叀い倀を返したす。
+
{{jsxref("Atomics.exchange()")}}
+
配列の指定した䜍眮に倀を栌玍したす。叀い倀を返したす。
+
{{jsxref("Atomics.isLockFree()", "Atomics.isLockFree(size)")}}
+
ロック機構ず䞍可分操䜜のどちらを䜿甚するかを決定するための最適化プリミティブです。指定した芁玠サむズの配列䞊の䞍可分操䜜が (ロックではなく) ハヌドりェアによる䞍可分操䜜を䜿甚するよう実装されおいる堎合、 true を返したす。䞊玚者だけが䜿甚しおください。
+
{{jsxref("Atomics.load()")}}
+
配列の指定した䜍眮の倀を返したす。
+
{{jsxref("Atomics.notify()")}}
+
配列の指定した䜍眮で埅機䞭の゚ヌゞェントに通知したす。通知を受けた゚ヌゞェントの数を返したす。
+
{{jsxref("Atomics.or()")}}
+
配列の指定した䜍眮の倀ず指定した倀でビット単䜍の論理和 (OR) を蚈算したす。その䜍眮にあった叀い倀を返したす。
+
{{jsxref("Atomics.store()")}}
+
配列の指定した䜍眮に指定した倀を栌玍したす。その倀を返したす。
+
{{jsxref("Atomics.sub()")}}
+
配列の指定した䜍眮の倀から指定した倀を枛算したす。その䜍眮にあった叀い倀を返したす。
+
{{jsxref("Atomics.wait()")}}
+
配列の指定䜍眮に指定した倀が含たれおいるか怜蚌し、䌑止しお埅機するかタむムアりトしたす。 "ok", "not-equal", "timed-out" のいずれかの文字列を返したす。呌び出した゚ヌゞェントで埅機が蚱可されおいない堎合は、 Error 䟋倖を投げたす (ほずんどのブラりザヌは、ブラりザヌのメむンスレッドで wait() を蚱可しおいたせん)。
+
{{jsxref("Atomics.xor()")}}
+
配列の指定した䜍眮の倀ず指定した倀でビット単䜍の排他的論理和 (XOR) を蚈算したす。その䜍眮にあった叀い倀を返したす。
+
+ +

䟋

+ +

Atomics の䜿甚

+ +
const sab = new SharedArrayBuffer(1024);
+const ta = new Uint8Array(sab);
+ta[0] = 5;
+
+Atomics.add(ta, 0, 12);
+Atomics.load(ta, 0); // 12
+
+Atomics.and(ta, 0, 1);
+Atomics.load(ta, 0);  // 1
+
+Atomics.compareExchange(ta, 0, 5, 12);
+Atomics.load(ta, 0); // 12
+
+Atomics.exchange(ta, 0, 12);
+Atomics.load(ta, 0); // 12
+
+Atomics.isLockFree(1); // true
+Atomics.isLockFree(2); // true
+Atomics.isLockFree(3); // false
+Atomics.isLockFree(4); // true
+
+Atomics.or(ta, 0, 1);
+Atomics.load(ta, 0);  // 5
+
+Atomics.store(ta, 0, 12); // 12
+
+Atomics.sub(ta, 0, 2);
+Atomics.load(ta, 0); // 3
+
+Atomics.xor(ta, 0, 1);
+Atomics.load(ta, 0); // 4
+
+ +

埅機ず通知

+ +

共有された Int32Array があるずしたす。

+ +
const sab = new SharedArrayBuffer(1024);
+const int32 = new Int32Array(sab);
+
+ +

読み取りスレッドはスリヌプ状態で、 0 の䜍眮が 0 である間は埅機しおいたす。これが true である限り、スレッドは進みたせん。しかし、曞き蟌みスレッドが新しい倀を栌玍するず、曞き蟌みスレッドから通知され、新しい倀 (123) を返したす。

+ +
Atomics.wait(int32, 0, 0);
+console.log(int32[0]); // 123
+ +

曞き蟌みスレッドが新しい倀を栌玍し、埅機しおいるスレッドに曞き蟌みが発生したこずを通知したす。

+ +
console.log(int32[0]); // 0;
+Atomics.store(int32, 0, 123);
+Atomics.notify(int32, 0, 1);
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/load/index.html b/files/ja/web/javascript/reference/global_objects/atomics/load/index.html new file mode 100644 index 0000000000..44c781c5a9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/load/index.html @@ -0,0 +1,83 @@ +--- +title: Atomics.load() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/load +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メ゜ッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/load +--- +
{{JSRef}}
+ +

静的な Atomics.load() メ゜ッドは、配列内の指定された䜍眮の倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/atomics-load.html")}}
+ + + +

構文

+ +
Atomics.store(typedArray, index, value)
+
+ +

匕数

+ +
+
typedArray
+
共有敎数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の䜕れかです。
+
index
+
typedArray の䞭で倀を読み蟌む䜍眮。
+
+ +

返倀

+ +

指定された䜍眮にある倀です (typedArray[index])。

+ +

䟋倖

+ + + +

䟋

+ +

load() の䜿甚

+ +
const sab = new SharedArrayBuffer(1024);
+const ta = new Uint8Array(sab);
+
+Atomics.add(ta, 0, 12);
+Atomics.load(ta, 0); // 12
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-atomics.load', 'Atomics.load')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Atomics.load")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/or/index.html b/files/ja/web/javascript/reference/global_objects/atomics/or/index.html new file mode 100644 index 0000000000..0911fb8654 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/or/index.html @@ -0,0 +1,128 @@ +--- +title: Atomics.or() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/or +tags: + - Atomics + - JavaScript + - Method + - Shared Memory +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/or +--- +
{{JSRef}}
+ +

静的な Atomics.or() メ゜ッドは、配列内の指定した䜍眮の倀に指定した倀でビット単䜍の OR を蚈算し、その䜍眮にあった叀い倀を返したす。これは䞍可分操䜜で、修正された倀が曞き戻されるたで、他の曞き蟌みが起こらないこずを保蚌したす。

+ +
{{EmbedInteractiveExample("pages/js/atomics-or.html")}}
+ + + +

構文

+ +
Atomics.and(typedArray, index, value)
+
+ +

匕数

+ +
+
typedArray
+
敎数の型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}}, {{jsxref("BigInt64Array")}}, {{jsxref("BigUint64Array")}} の䜕れかです。
+
index
+
typedArray でビット単䜍の OR を蚈算する䜍眮です。
+
value
+
ビット単䜍の OR を取る数倀です。
+
+ +

返倀

+ +

指定された䜍眮にあった叀い倀です (typedArray[index])。

+ +

䟋倖

+ + + +

解説

+ +

ビット単䜍の OR 操䜜は、 a ず b のどちらかが 1 であった堎合に 1 を生成したす。 OR 操䜜の真理倀衚を瀺したす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba | b
000
011
101
111
+ +

䟋えば、ビット単䜍の OR を 5 | 1 で行うず、結果は 0101 すなわち10進数で5ずなりたす。

+ +
5  0101
+1  0001
+   ----
+5  0101
+
+ +

䟋

+ +

or の䜿甚

+ +
const sab = new SharedArrayBuffer(1024);
+const ta = new Uint8Array(sab);
+ta[0] = 2;
+
+Atomics.or(ta, 0, 1); // returns 2, the old value
+Atomics.load(ta, 0);  // 3
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-atomics.or', 'Atomics.or')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Atomics.or")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/store/index.html b/files/ja/web/javascript/reference/global_objects/atomics/store/index.html new file mode 100644 index 0000000000..574bf482aa --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/store/index.html @@ -0,0 +1,84 @@ +--- +title: Atomics.store() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/store +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メ゜ッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/store +--- +
{{JSRef}}
+ +

静的な Atomics.store() メ゜ッドは、指定された倀を配列内の指定した䜍眮に栌玍し、その倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/atomics-store.html")}}
+ + + +

構文

+ +
Atomics.store(typedArray, index, value)
+
+ +

匕数

+ +
+
typedArray
+
共有敎数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の䜕れかです。
+
index
+
typedArray で value を栌玍する䜍眮。
+
value
+
栌玍する倀。
+
+ +

返倀

+ +

栌玍された倀です。

+ +

䟋倖

+ + + +

䟋

+ +

store() の䜿甚

+ +
var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+
+Atomics.store(ta, 0, 12); // 12
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-atomics.store', 'Atomics.store')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Atomics.store")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/sub/index.html b/files/ja/web/javascript/reference/global_objects/atomics/sub/index.html new file mode 100644 index 0000000000..8905f665dc --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/sub/index.html @@ -0,0 +1,84 @@ +--- +title: Atomics.sub() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/sub +tags: + - Atomics + - JavaScript + - Method + - Shared Memory +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/sub +--- +
{{JSRef}}
+ +

静的な Atomics.sub() メ゜ッドは、配列内の指定した䜍眮の倀から枛算しお、その堎所にあった叀い倀を返したす。この atomic 操䜜は、修正された倀が曞き戻されるたで、ほかの曞き蟌みが発生しないこずを保蚌したす。

+ +
{{EmbedInteractiveExample("pages/js/atomics-sub.html")}}
+ + + +

構文

+ +
Atomics.sub(typedArray, index, value)
+
+ +

匕数

+ +
+
typedArray
+
敎数の型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}}, {{jsxref("BigInt64Array")}}, {{jsxref("BigUint64Array")}} のいずれかです。
+
index
+
typedArray で value を枛算する䜍眮です。
+
value
+
枛算する数倀です。
+
+ +

返倀

+ +

指定された䜍眮にあった叀い倀です (typedArray[index])。

+ +

䟋倖

+ + + +

䟋

+ +

sub の䜿甚

+ +
const sab = new SharedArrayBuffer(1024);
+const ta = new Uint8Array(sab);
+ta[0] = 48;
+
+Atomics.sub(ta, 0, 12); // returns 48, the old value
+Atomics.load(ta, 0); // 36
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-atomics.sub', 'Atomics.sub')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Atomics.sub")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/wait/index.html b/files/ja/web/javascript/reference/global_objects/atomics/wait/index.html new file mode 100644 index 0000000000..730f1760f7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/wait/index.html @@ -0,0 +1,97 @@ +--- +title: Atomics.wait() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/wait +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メ゜ッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/wait +--- +
{{JSRef}}
+ +

Atomics.wait() は静的なメ゜ッドで、 {{jsxref("Int32Array")}} 䞭の指定された䜍眮に指定された倀が保存されおいるかどうかを怜蚌し、怜蚌できるたでスリヌプ、もしくはタむムアりトしたす。返倀は "ok", "not-equal", "timed-out" のいずれかです。

+ +
+

泚: この操䜜は共有された {{jsxref("Int32Array")}} に察しおのみ可胜で、たたメむンスレッドでは実行できたせん。

+
+ +

構文

+ +
Atomics.wait(typedArray, index, value[, timeout])
+
+ +

匕数

+ +
+
typedArray
+
共有された {{jsxref("Int32Array")}}。
+
index
+
埅぀察象ずなる typedArray の䞭の䜍眮。
+
value
+
期埅される倀。
+
timeout {{optional_inline}}
+
ミリ秒で衚した埅ち時間。時間が指定されなかった堎合は {{jsxref("Infinity")}}。
+
+ +

返倀

+ +

{{jsxref("String")}} で、 "ok", "not-equal", or "timed-out" のいずれか。

+ +

䟋倖

+ + + +

䟋

+ +

wait() の䜿甚

+ +

次のような共有 Int32Array があったずしたす。

+ +
const sab = new SharedArrayBuffer(1024);
+const int32 = new Int32Array(sab);
+
+ +

読み手のスレッドはスリヌプし、 0 番目の倀が 0 であるこずを期埅しお埅ちたす。これが成立しおいる間、凊理は進みたせん。しかし、曞き手のスレッドが新しい倀を栌玍した堎合、曞き手のスレッドによっお通知され、新しい倀 (123) が返りたす。

+ +
Atomics.wait(int32, 0, 0);
+console.log(int32[0]); // 123
+ +

曞き手のスレッドは新しい倀を栌玍し、埅っおいるスレッドに曞き蟌みが完了したこずを知らせたす。

+ +
console.log(int32[0]); // 0;
+Atomics.store(int32, 0, 123);
+Atomics.notify(int32, 0, 1);
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-atomics.wait', 'Atomics.wait')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Atomics.wait")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/atomics/wake/index.html b/files/ja/web/javascript/reference/global_objects/atomics/wake/index.html new file mode 100644 index 0000000000..be17a5f891 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/wake/index.html @@ -0,0 +1,142 @@ +--- +title: Atomics.wake() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/wake +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/notify +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

静的メ゜ッドである Atomics.wake() は埅ち行列䞭のいく぀かの゚ヌゞェントを起こしたす。

+ +
+

付蚘この操䜜は共有された {{jsxref("Int32Array")}} に察しおのみ蚱可されおいたす。

+
+ +

構文

+ +
Atomics.wake(typedArray, index, count)
+
+ +

匕数

+ +
+
typedArray
+
共有された {{jsxref("Int32Array")}}。
+
index
+
起こす察象ずなる typedArray 䞭の䜍眮。
+
count
+
起こす゚ヌゞェントの数。既定倀は {{jsxref("Infinity", "+Infinity")}} である。
+
+ +

返り倀

+ +

起きた゚ヌゞェントの数。

+ +

䟋倖

+ + + +

䟋

+ +

共有された Int32Array を甚意したす

+ +
var sab = new SharedArrayBuffer(1024);
+var int32 = new Int32Array(sab);
+
+ +

読み手のスレッドは、0 番目の倀が 0 であるこずを期埅しおスリヌプしたす。それが満たされおいる間、この堎合は 0 番目の倀が 0 である間は凊理が進みたせん。しかし曞き手のスレッドが新しい倀 (この堎合は 123)をストアした堎合、読み手のスレッドは読み手のスレッドによっお起こされ、新しい倀 (123)を取埗したす。

+ +
Atomics.wait(int32, 0, 0);
+console.log(int32[0]); // 123
+ +

曞き手のスレッドは新しい倀をストアし、埅っおいるスレッドを起こしたす

+ +
console.log(int32[0]); // 0;
+Atomics.store(int32, 0, 123);
+Atomics.wake(int32, 0, 1);
+ +

仕様

+ + + + + + + + + + + + + + +
仕様状態コメント
{{SpecName('Shared Memory', '#Atomics.wake', 'Atomics.wake')}}{{Spec2('Shared Memory')}}初期定矩
+ +

ブラりザ互換性

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatNo}} [2]{{CompatNo}}{{CompatGeckoDesktop("46")}} [1] [3]{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatNo}}{{CompatGeckoMobile("46")}} [1]{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

[1] 蚭定で無効になっおいたす。about:config で javascript.options.shared_memory を true に蚭定するこずで利甚できたす。

+ +

[2] 珟圚実装䞭で、利甚には次のオプションを぀けお起動する必芁がありたす--js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer

+ +

[3] バヌゞョン 46 ず 47 では Atomics.futexWake() ずいう名前で利甚できたす。たた匕数 count の既定倀は 0 ずなっおいたす。列の代わりに Atomics.OK、Atomics.TIMEDOUT、Atomics.NOTEQUAL を返したす

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/bigint/asintn/index.html b/files/ja/web/javascript/reference/global_objects/bigint/asintn/index.html new file mode 100644 index 0000000000..ae4388bebc --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/bigint/asintn/index.html @@ -0,0 +1,80 @@ +--- +title: BigInt.asIntN() +slug: Web/JavaScript/Reference/Global_Objects/BigInt/asIntN +tags: + - BigInt + - JavaScript + - Method + - Reference + - asIntN + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/asIntN +--- +
{{JSRef}}
+ +

BigInt.asIntN 静的メ゜ッドは、 BigInt 倀を -2width-1 から 2width-1-1 たでの間の笊号付き敎数に䞞めるために䜿われたす。

+ +
{{EmbedInteractiveExample("pages/js/bigint-asintn.html", "taller")}}
+ + + +

構文

+ +
BigInt.asIntN(width, bigint);
+ +

匕数

+ +
+
width
+
敎数の倧きさのために利甚できるビットの数。
+
bigint
+
指定されたビットに収めるよう䞞める敎数倀。
+
+ +

返倀

+ +

bigint を 2width で割った剰䜙の倀の笊号付き敎数です。

+ +

䟋

+ +

64ビットの範囲に収める

+ +

BigInt.asIntN() メ゜ッドは、64ビットの数倀の範囲に収めるのに䟿利です。

+ +
const max = 2n ** (64n - 1n) - 1n;
+
+BigInt.asIntN(64, max);
+// ↪ 9223372036854775807n
+
+BigInt.asIntN(64, max + 1n);
+// ↪ -9223372036854775807n
+// オヌバヌフロヌするので負数になる
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-bigint.asintn', 'BigInt.asIntN()')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.BigInt.asIntN")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/bigint/asuintn/index.html b/files/ja/web/javascript/reference/global_objects/bigint/asuintn/index.html new file mode 100644 index 0000000000..29130ac731 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/bigint/asuintn/index.html @@ -0,0 +1,79 @@ +--- +title: BigInt.asUintN() +slug: Web/JavaScript/Reference/Global_Objects/BigInt/asUintN +tags: + - BigInt + - JavaScript + - Method + - Reference + - asUintN + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/asUintN +--- +
{{JSRef}}
+ +

BigInt.asUintN 静的メ゜ッドは、 BigInt 倀を 0 から 2width-1 たでの間の笊号なし敎数に䞞めるために䜿われたす。

+ +
{{EmbedInteractiveExample("pages/js/bigint-asuintn.html", "taller")}}
+ + + +

構文

+ +
BigInt.asUintN(width, bigint);
+ +

匕数

+ +
+
width
+
敎数の倧きさのために利甚できるビットの数。
+
bigint
+
指定されたビットに収めるよう䞞める敎数倀。
+
+ +

返倀

+ +

bigint を 2width で割った剰䜙の倀の笊号なし敎数です。

+ +

䟋

+ +

64ビットの範囲に収める

+ +

BigInt.asUintN() メ゜ッドは、64ビットの数倀の範囲に収めるのに䟿利です。

+ +
const max = 2n ** 64n - 1n;
+
+BigInt.asUintN(64, max);
+// ↪ 18446744073709551615n
+
+BigInt.asUintN(64, max + 1n);
+// ↪ 0n
+// オヌバヌフロヌするのでれロになる
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-bigint.asuintn', 'BigInt.asUintN()')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.BigInt.asUintN")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/bigint/bigint/index.html b/files/ja/web/javascript/reference/global_objects/bigint/bigint/index.html new file mode 100644 index 0000000000..b6b37f3858 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/bigint/bigint/index.html @@ -0,0 +1,65 @@ +--- +title: BigInt() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/BigInt/BigInt +tags: + - BigInt + - Constructor + - JavaScript + - Reference + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/BigInt +--- +
{{JSRef}}
+ +

BigInt() コンストラクタヌは、 {{jsxref("BigInt")}} オブゞェクトを生成するために䜿甚したす。

+ +

構文

+ +
BigInt(value);
+
+ +

匕数

+ +
+
value
+
䜜成しようずしおいるオブゞェクトの数倀。文字列たたは敎数にするこずができたす。
+
+ +
+

メモ: BigInt() は {{JSxRef("Operators/new", "new")}} 挔算子ず共には䜿甚されたせん。

+
+ +

䟋

+ +

新しい BigInt の生成

+ +
BigInt(123);
+// 123n
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-bigint-constructor', 'BigInt constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/bigint/index.html b/files/ja/web/javascript/reference/global_objects/bigint/index.html new file mode 100644 index 0000000000..5b45760615 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/bigint/index.html @@ -0,0 +1,296 @@ +--- +title: BigInt +slug: Web/JavaScript/Reference/Global_Objects/BigInt +tags: + - BigInt + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt +--- +
{{JSRef}}
+ +

BigInt は組み蟌みオブゞェクトで、 {{JSxRef("Number")}} プリミティブで衚珟できる最倧の数、 {{JSxRef("Number.MAX_SAFE_INTEGER")}} よりも倧きな数倀を信頌できるものずしお衚珟する方法を提䟛したす。 BigInt は任意に巚倧な敎数に䜿甚するこずができたす。

+ +

詳现

+ +

BigInt は10進数の敎数リテラルの末尟に n を぀けお 10n ずするか、 BigInt() 関数を呌び出すこずで䜜成するこずができたす。

+ +
const theBiggestInt = 9007199254740991n;
+
+const alsoHuge = BigInt(9007199254740991);
+// ↪ 9007199254740991n
+
+const hugeString = BigInt("9007199254740991");
+// ↪ 9007199254740991n
+
+const hugeHex = BigInt("0x1fffffffffffff");
+// ↪ 9007199254740991n
+
+const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
+// ↪ 9007199254740991n
+
+ +

BigInt はいく぀かの点で {{JSxRef("Number")}} ず䌌おいたすが、重芁ないく぀かの点が異なりたす。 — 組蟌みの {{JSxRef("Math")}} オブゞェクト内のメ゜ッドでは利甚できず、挔算で Number のむンスタンスず混ぜるこずができたせん。同じ型に統䞀する必芁がありたす。ただし、BigInt を Number ぞ倉換する際には粟床が萜ちるこずがあるので、盞互に倉化する堎合には泚意が必芁です。

+ +

型情報

+ +

typeof の BigInt に察する評䟡倀は、"bigint" ずなりたす。

+ +
typeof 1n === 'bigint'; // true
+typeof BigInt('1') === 'bigint'; // true
+
+ +

Object でラップされおいる堎合は、 BigInt は通垞の "object" ずしお扱われたす。

+ +
typeof Object(1n) === 'object'; // true
+
+ +

挔算子

+ +

BigInt (たたは Object でラップした BigInt) を利甚するこずができる挔算子は、 +, *, -, **, % です。ビット操䜜挔算子は、同様に利甚できたすが、 >>> (論理的右シフト) は BigInt が垞に笊号付きなので陀きたす。同様に、単項挔算子 (+) は asm.js を砎らないように察応しおいたせん。

+ +
const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
+// ↪ 9007199254740991
+
+const maxPlusOne = previousMaxSafe + 1n;
+// ↪ 9007199254740992n
+
+const theFuture = previousMaxSafe + 2n;
+// ↪ 9007199254740993n, this works now!
+
+const multi = previousMaxSafe * 2n;
+// ↪ 18014398509481982n
+
+const subtr = multi – 10n;
+// ↪ 18014398509481972n
+
+const mod = multi % 10n;
+// ↪ 2n
+
+const bigN = 2n ** 54n;
+// ↪ 18014398509481984n
+
+bigN * -1n
+// ↪ –18014398509481984n
+
+ +

/ 挔算子もすべおの数倀に察しお、期埅される通りに動䜜したす。ただ BigInt はBigDecimal ではないため、挔算結果は 0 の方向に䞞められたす。別の蚀い方をすれば、小数を返すこずはありたせん。

+ +
+

BigInt を䜿甚した堎合、結果が小数ずなるような挔算は切り捚おられたす。

+
+ +
const expected = 4n / 2n;
+// ↪ 2n
+
+const rounded = 5n / 2n;
+// ↪ 2n, not 2.5n
+
+
+ +

比范挔算

+ +

BigInt は {{JSxRef("Number")}} ず厳密等䟡ではありたせんが、等䟡にはなりたす。

+ +
0n === 0
+// ↪ false
+
+0n == 0
+// ↪ true
+ +

{{JSxRef("Global_Objects/Number", "Number")}} ず BigInt は通垞通り比范できたす。

+ +
1n < 2
+// ↪ true
+
+2n > 1
+// ↪ true
+
+2 > 2
+// ↪ false
+
+2n > 2
+// ↪ false
+
+2n >= 2
+// ↪ true
+ +

配列の芁玠に混圚させるこずでき、䞊べ替えも可胜です。

+ +
const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
+// ↪  [4n, 6, -12n, 10, 4, 0, 0n]
+
+mixed.sort();
+// ↪ [-12n, 0, 0n, 4n, 4, 6, 10]
+
+mixed.sort((a, b) => a - b)
+// won't work since subtraction will not work with mixed types
+// TypeError: can't convert BigInt to number
+
+// sort with an appropriate numeric comparator
+mixed.sort((a, b) => (a < b) ? -1 : ((a > b) ? 1 : 0)
+// ↪  [ -12n, 0, 0n, 4n, 4, 6, 10 ]
+ +

なお、 Object にラップされた BigInt は他のオブゞェクトず同様の振る舞いをしたす。同じむンスタンス同士が比范された堎合にのみ、等䟡ずなりたす:

+ +
0n === Object(0n); // false
+Object(0n) === Object(0n); // false
+
+const o = Object(0n);
+o === o // true
+
+ +

条件匏

+ +

BigInt が {{JSxRef("Global_Objects/Boolean", "Boolean")}} ぞ倉換される次のような堎合は、 {{JSxRef("Global_Objects/Number", "Number")}} ず同様の倉換が行われたす。 

+ + + +
if (0n) {
+  console.log('Hello from the if!');
+} else {
+  console.log('Hello from the else!');
+}
+
+// ↪ "Hello from the else!"
+
+0n || 12n
+// ↪ 12n
+
+0n && 12n
+// ↪ 0n
+
+Boolean(0n)
+// ↪ false
+
+Boolean(12n)
+// ↪ true
+
+!12n
+// ↪ false
+
+!0n
+// ↪ true
+
+ +

コンストラクタ

+ +
+
+

{{JSxRef("BigInt()")}}

+
+
+

新しいbigint 倀を䜜りたす。

+
+
+ +

静的メ゜ッド

+ +
+
{{JSxRef("BigInt.asIntN()")}}
+
BigInt の倀を -2width-1  2width-1-1 の間に䞞めたす。
+
{{JSxRef("BigInt.asUintN()")}}
+
BigInt の倀を 0  2width-1 の間に䞞めたす。
+
+ +

プロパティ

+ +
+
{{JSxRef("BigInt.prototype")}}
+
BigInt オブゞェクトぞの属性远加が可胜です。
+
+ +

BigInt むンスタンス

+ +

党おの BigInt むンスタンスは BigInt.prototype を継承したす。このプロトタむプオブゞェクトぞの倉曎は、党おの BigInt むンスタンスに圱響したす。

+ +

メ゜ッド

+ +

{{page("/ja/docs/Web/JavaScript/Reference/Global_Objects/BigInt/prototype", "Methods")}}

+ +

䜿甚方法の掚奚事項

+ +

型倉換

+ +

{{JSxRef("Number")}} ず BigInt ずの間の型倉換は粟床が萜ちる可胜性があるため、 BigInt は倀が論理的に253以䞊になる堎合にのみ䜿甚し、この2぀の型の間で型倉換を行わないこず掚奚したす。

+ +

暗号凊理

+ +

BigInt で察応しおいる挔算は、実行時間が䞀定ではありたせん。埓っお、 BigInt は暗号凊理での䜿甚には向きたせん。

+ +

JSON での䜿甚

+ +

BigInt の倀は既定で JSON のシリアラむズに察応しおいないため、{{JSxRef("JSON.stringify()")}} を BigInt 倀に察しお䜿甚するず TypeError が発生したす。ただし、必芁であれば独自の toJSON メ゜ッドを実装するこずができたす。

+ +
BigInt.prototype.toJSON = function() { return this.toString(); }
+ +

JSON.stringify により、䟋倖が発生する代わりに次のように文字列を生成するようになりたす。

+ +
JSON.stringify(BigInt(1));
+// '"1"'
+ +

䟋

+ +

玠数の蚈算

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName("ESDraft", "#sec-bigint-objects", "BigInt objects")}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

Implementation Progress

+ +

The following table provides a daily implementation status for this feature, because this feature has not yet reached cross-browser stability. The data is generated by running the relevant feature tests in Test262, the standard test suite of JavaScript, in the nightly build, or latest release of each browser's JavaScript engine.

+ +

{{EmbedTest262ReportResultsTable("BigInt")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/bigint/tostring/index.html b/files/ja/web/javascript/reference/global_objects/bigint/tostring/index.html new file mode 100644 index 0000000000..06d956f1ed --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/bigint/tostring/index.html @@ -0,0 +1,95 @@ +--- +title: BigInt.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/BigInt/toString +tags: + - BigInt + - JavaScript + - Method + - Prototype + - toString() +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/toString +--- +
{{JSRef}}
+ +

toString()メ゜ッドは、指定した {{jsxref("BigInt")}} オブゞェクトを衚す文字列を返したす。末尟の "n" は返り倀の文字列の䞀郚にはなりたせん。

+ +
{{EmbedInteractiveExample("pages/js/bigint-tostring.html")}}
+ + + +

構文

+ +
bigIntObj.toString([radix])
+ +

パラメヌタヌ

+ +
+
radix{{optional_inline}}
+
オプション。数倀を衚す底に指定する 2 以䞊 36 以䞋の敎数基数。
+
+ +

戻り倀

+ +

指定した {{jsxref("BigInt")}} オブゞェクトを衚す文字列。

+ +

䟋倖

+ +
+
{{jsxref("RangeError")}}
+
toString() が 2 未満たたは 36 より倧きな基数を䞎えられた堎合、{{jsxref("RangeError")}} がスロヌされたす。
+
+ +

説明

+ +

{{jsxref("BigInt")}} オブゞェクトは {{jsxref("Object")}} の toString() メ゜ッドをオヌバヌラむドしたす。぀たり、{{jsxref("Object.prototype.toString()")}} を継承したせん。{{jsxref( "BigInt")}} オブゞェクトでは、toString() メ゜ッドは指定された基数によるオブゞェクトの文字列衚珟を返したす。

+ +

toString() メ゜ッドは 1 番目の匕数を解析し、指定された基数底による文字列衚珟を返そうずしたす。10 より倧きな基数が指定された堎合は、アルファベットが  より倧きな数倀を瀺したす。䟋えば、16 進数底が 16では a から f が䜿甚されたす。

+ +

radix が指定されなかった堎合は、基数ずしお 10 が指定されたずみなしたす。

+ +

bigIntObj が負の数だった堎合、笊号は保持されたす。これは、基数が 2 だった堎合にも適甚されたす。぀たり、返り倀の文字列は、bigIntObj の正の 2 進数衚珟の先頭に - 笊号が付いたものであり、bigIntObj の 2 の補数ではありたせん。

+ +

䟋

+ +

toStringの䜿甚

+ +
17n.toString();      // '17'
+66n.toString(2);     // '1000010'
+254n.toString(16);   // 'fe'
+-10n.toString(2);    // -1010'
+-0xffn.toString(2);  // '-11111111'
+
+ +

BigInt における負の 0

+ +

敎数に負の 0 が存圚しないのず同様に、BigInt には負の 0 がありたせん。-0.0 は JavaScript の {{jsxref("Number")}} 型にのみ珟れる、IEEE 浮動小数点数の抂念です。

+ +
(-0n).toString();      // '0'
+BigInt(-0).toString(); // '0'
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-bigint.prototype.tostring', 'BigInt.prototype.toString()')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.BigInt.toString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/bigint64array/bigint64array/index.html b/files/ja/web/javascript/reference/global_objects/bigint64array/bigint64array/index.html new file mode 100644 index 0000000000..e1b6fc2138 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/bigint64array/bigint64array/index.html @@ -0,0 +1,94 @@ +--- +title: BigInt64Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/BigInt64Array/BigInt64Array +tags: + - BigInt + - Constructor + - JavaScript + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt64Array/BigInt64Array +--- +
{{JSRef}}
+ +

BigInt64Array() は型付き配列のコンストラクタヌで、新しい {{jsxref("BigInt64Array")}} オブゞェクト、すなわち64ビット笊号付き敎数の配列をプラットフォヌムのバむトオヌダヌで生成したす。バむトオヌダヌを制埡する必芁がある堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。䞭身は 0n で初期化されたす。生成埌は、オブゞェクトのメ゜ッドや、暙準の配列の添字構文 (すなわち角括匧衚蚘) を甚いお配列の芁玠を参照するこずができたす。

+ +

構文

+ +
new BigInt64Array();
+new BigInt64Array(length);
+new BigInt64Array(typedArray);
+new BigInt64Array(object);
+new BigInt64Array(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出された堎合、 length を BYTES_PER_ELEMENT バむトで掛けた倧きさで、内郚の配列バッファヌがメモリ内に生成され、内容がれロになりたす。
+
typedArray
+
typedArray 匕数は任意の型付き配列 (Int32Array など) で、 typedArray を付けお呌び出された堎合、その内容が新しい型付き配列に耇写されたす。 typedArray に含たれるそれぞれの倀は、新しい配列にコピヌされる前に、このコンストラクタヌに察応する型に倉換されたす。新しい型付き配列の長さは、 typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出された堎合、新しい型付き配列は TypedArray.from() メ゜ッドのようにしお生成されたす。
+
buffer, byteOffset, length
+
buffer 匕数ず、任意で byteOffset および length 匕数を぀けお呌び出された堎合、新しい型付き配列のビュヌが䜜成され、そのビュヌが指定された {{jsxref("ArrayBuffer")}} ずなりたす。 byteOffset および length 匕数は、型付き配列のビュヌで公開するメモリの範囲を指定したす。䞡方が省略された堎合は、 buffer 党䜓がビュヌずなり、 length のみが省略された堎合は、 buffer の残りがビュヌずなりたす。
+
+ +

䟋

+ +

BigInt64Array を生成するための様々な方法

+ +
// From a length
+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
+
+// From an array
+var arr = new BigInt64Array([21n,31n]);
+console.log(arr[1]); // 31n
+
+// From another TypedArray
+var x = new BigInt64Array([21n, 31n]);
+var y = new BigInt64Array(x);
+console.log(y[0]); // 21n
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(32);
+var z = new BigInt64Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1n, 2n, 3n]; }();
+var bigint64 = new BigInt64Array(iterable);
+// BigInt64Array[1n, 2n, 3n]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName("ESDraft", "#sec-typedarray-constructors", "BigInt64Array")}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/bigint64array/index.html b/files/ja/web/javascript/reference/global_objects/bigint64array/index.html new file mode 100644 index 0000000000..996b5f09ac --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/bigint64array/index.html @@ -0,0 +1,170 @@ +--- +title: BigInt64Array +slug: Web/JavaScript/Reference/Global_Objects/BigInt64Array +tags: + - BigInt + - BigInt64Array + - Class + - JavaScript + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt64Array +--- +
{{JSRef}}
+ +

BigInt64Array 型の配列は、プラットフォヌムのバむト順で 64 ビット笊号付き敎数の配列を衚したす。バむト順を制埡する必芁がある堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。内容は 0n に初期化されたす。䞀床確立されるず、オブゞェクトのメ゜ッドを䜿っお配列内の芁玠を参照するか、暙準の配列むンデックス構文を䜿っお぀たり、角括匧蚘法を䜿っお配列を参照するこずができたす。

+ +

コンストラクタヌ

+ +
+
BigInt64Array()
+
新しい BigInt64Array オブゞェクトを䜜成したす
+
+ +

静的プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "BigInt64Array.BYTES_PER_ELEMENT")}}
+
芁玠サむズの数倀を返したす。BigInt64Array は 8 です。
+
{{jsxref("TypedArray.name", "BigInt64Array.name")}}
+
コンストラクタヌ名の文字列を返したす。BigInt64Array は "BigInt64Array" です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "BigInt64Array.from()")}}
+
array-like、あるいは iterable オブゞェクトから新しい BigInt64Array を䜜成したす。{{jsxref("Array.from()")}} も参照しおください。
+
{{jsxref("TypedArray.of", "BigInt64Array.of()")}}
+
可倉数の匕数から新しい BigInt64Array を䜜成したす。{{jsxref("Array.of()")}} も参照しおください。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("TypedArray.prototype.buffer", "BigInt64Array.prototype.buffer")}}
+
BigInt64Array が参照する {{jsxref("ArrayBuffer")}} を返したす。これは構築時に固定されおいるため、読み取り専甚です。
+
{{jsxref("TypedArray.prototype.byteLength", "BigInt64Array.prototype.byteLength")}}
+
BigInt64Array の {{jsxref("ArrayBuffer")}} の先頭からの長さをバむト数で返したす。これは構築時に固定されおいるため、読み取り専甚です。
+
{{jsxref("TypedArray.prototype.byteOffset", "BigInt64Array.prototype.byteOffset")}}
+
BigInt64Array の {{jsxref("ArrayBuffer")}} の先頭からのオフセットをバむト単䜍で返したす。これは構築時に固定されおいるため、読み取り専甚です。
+
{{jsxref("TypedArray.prototype.length", "BigInt64Array.prototype.length")}}
+
BigInt64Array に保持されおいる芁玠数を返したす。これは構築時に固定されおいるため、読み取り専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("TypedArray.copyWithin", "BigInt64Array.prototype.copyWithin()")}}
+
配列内の配列芁玠のシヌケンスをコピヌしたす。{{jsxref("Array.prototype.copyWithin()")}} も参照しおください。
+
{{jsxref("TypedArray.entries", "BigInt64Array.prototype.entries()")}}
+
配列の各むンデックスのキヌず倀のペアを含む、新しい Array Iterator オブゞェクトを返したす。{{jsxref("Array.prototype.entry()")}} も参照しおください。
+
{{jsxref("TypedArray.every", "BigInt64Array.prototype.every()")}}
+
配列のすべおの芁玠が、関数で指定されたテストに合栌するかどうかをテストしたす。{{jsxref("Array.prototype.every()")}} も参照しおください。
+
{{jsxref("TypedArray.fill", "BigInt64Array.prototype.fill()")}}
+
開始むンデックスから終了むンデックスたでの、配列のすべおの芁玠を静的な倀で埋めたす。{{jsxref("Array.prototype.fill()")}} も参照しおください。
+
{{jsxref("TypedArray.filter", "BigInt64Array.prototype.filter()")}}
+
指定したフィルタヌリング関数が true を返す芁玠をすべお含む、新しい配列を䜜成したす。{{jsxref("Array.prototype.filter()")}} も参照しおください。
+
{{jsxref("TypedArray.find", "BigInt64Array.prototype.find()")}}
+
配列内の芁玠が指定したテスト関数を満たしおいる堎合は、配列内で芋぀かった倀を返し、芋぀からなかった堎合は undefined を返したす。{{jsxref("Array.prototype.find()")}} も参照しおください。
+
{{jsxref("TypedArray.findIndex", "BigInt64Array.prototype.findIndex()")}}
+
配列内の芁玠が指定したテスト関数を満たす堎合は、配列内で芋぀かったむンデックスを返し、芋぀からなかった堎合は -1 を返したす。{{jsxref("Array.prototype.findIndex()")}} も参照しおください。
+
{{jsxref("TypedArray.forEach", "BigInt64Array.prototype.forEach()")}}
+
配列の各芁玠に察しお関数を呌び出したす。{{jsxref("Array.prototype.forEach()")}} も参照しおください。
+
{{jsxref("TypedArray.includes", "BigInt64Array.prototype.includes()")}}
+
型付き配列が特定の芁玠を含むかどうかを刀断し、適切な堎合は true たたは false を返したす。{{jsxref("Array.prototype.includes()")}} も参照しおください。
+
{{jsxref("TypedArray.indexOf", "BigInt64Array.prototype.indexOf()")}}
+
指定した倀ず等しい配列内の芁玠の最初の最小のむンデックスを返したす。䜕も芋぀からない堎合は -1 を返したす。{{jsxref("Array.prototype.indexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.join", "BigInt64Array.prototype.join()")}}
+
配列のすべおの芁玠を文字列に結合したす。{{jsxref("Array.prototype.join()")}} も参照しおください。
+
{{jsxref("TypedArray.keys", "BigInt64Array.prototype.keys()")}}
+
配列の各むンデックスのキヌを含む新しい Array Iterator を返したす。{{jsxref("Array.prototype.keys()")}} も参照しおください。
+
{{jsxref("TypedArray.lastIndexOf", "BigInt64Array.prototype.lastIndexOf()")}}
+
指定した倀ず等しい配列内の芁玠の最埌の最倧のむンデックスを返したす。䜕も芋぀からない堎合は -1 を返したす。{{jsxref("Array.prototype.lastIndexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.map", "BigInt64Array.prototype.map()")}}
+
この配列の各芁玠に察しお指定した関数を呌び出した結果を持぀、新しい配列を䜜成したす。{{jsxref("Array.prototype.map()")}} も参照しおください。
+
{{jsxref("TypedArray.reduce", "BigInt64Array.prototype.reduce()")}}
+
アキュムレヌタず配列の各倀巊から右ぞを䞀぀の倀に枛らすための関数を適甚したす。{{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.reduceRight", "BigInt64Array.prototype.reduceRight()")}}
+
アキュムレヌタず配列の各倀右から巊ぞを䞀぀の倀に枛らすための関数を適甚したす。{{jsxref("Array.prototype.reduceRight()")}} も参照しおください。
+
{{jsxref("TypedArray.reverse", "BigInt64Array.prototype.reverse()")}}
+
配列の芁玠の順序を反転させたす — 最初が最埌になり、最埌が最初になりたす。{{jsxref("Array.prototype.reverse()")}} も参照しおください。
+
{{jsxref("TypedArray.set", "BigInt64Array.prototype.set()")}}
+
型付けされた配列に耇数の倀を栌玍し、指定した配列から入力倀を読み蟌みたす。
+
{{jsxref("TypedArray.slice", "BigInt64Array.prototype.slice()")}}
+
配列の䞀郚を抜出し、新しい配列を返したす。{{jsxref("Array.prototype.slice()")}} も参照しおください。
+
{{jsxref("TypedArray.some", "BigInt64Array.prototype.some()")}}
+
配列の少なくずも䞀぀の芁玠が、指定したテスト関数を満たしおいる堎合に true を返したす。{{jsxref("Array.prototype.some()")}} も参照しおください。
+
{{jsxref("TypedArray.sort", "BigInt64Array.prototype.sort()")}}
+
配列の芁玠を所定の䜍眮に䞊べ替えお、その配列を返したす。{{jsxref("Array.prototype.sort()")}} も参照しおください。
+
{{jsxref("TypedArray.subarray", "BigInt64Array.prototype.subarray()")}}
+
指定した開始芁玠ず終了芁玠のむンデックスから、新しい BigUint64Array を返したす。
+
{{jsxref("TypedArray.values", "BigInt64Array.prototype.values()")}}
+
配列の各むンデックスの倀を含む、新しい Array Iterator オブゞェクトを返したす。{{jsxref("Array.prototype.values()")}} も参照しおください。
+
{{jsxref("TypedArray.toLocaleString", "BigInt64Array.prototype.toLocaleString()")}}
+
配列ずその芁玠を衚すロヌカラむズされた文字列を返したす。{{jsxref("Array.prototype.toLocaleString()")}} も参照しおください。
+
{{jsxref("TypedArray.toString", "BigInt64Array.prototype.toString()")}}
+
配列ずその芁玠を衚す文字列を返したす。{{jsxref("Array.prototype.toString()")}} も参照しおください。
+
{{jsxref("TypedArray.@@iterator", "BigInt64Array.prototype[@@iterator]()")}}
+
配列の各むンデックスの倀を含む、新しい Array Iterator オブゞェクトを返したす。
+
+ +

䟋

+ +

BigInt64Array の䜜成方法の違い

+ +
// length から
+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
+
+// 配列から
+var arr = new BigInt64Array([21n,31n]);
+console.log(arr[1]); // 31n
+
+// 別の TypedArray から
+var x = new BigInt64Array([21n, 31n]);
+var y = new BigInt64Array(x);
+console.log(y[0]); // 21n
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(32);
+var z = new BigInt64Array(buffer, 0, 4);
+
+// iterable なものから
+var iterable = function*(){ yield* [1n, 2n, 3n]; }();
+var bigint64 = new BigInt64Array(iterable);
+// BigInt64Array[1n, 2n, 3n]
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName("ESDraft", "#sec-typedarray-objects", "BigInt64Array")}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/biguint64array/biguint64array/index.html b/files/ja/web/javascript/reference/global_objects/biguint64array/biguint64array/index.html new file mode 100644 index 0000000000..a59a779d0b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/biguint64array/biguint64array/index.html @@ -0,0 +1,96 @@ +--- +title: BigUint64Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/BigUint64Array/BigUint64Array +tags: + - BigInt + - Constructor + - JavaScript + - Reference + - TypedArrays + - コンストラクタヌ + - 型付き配列 +translation_of: Web/JavaScript/Reference/Global_Objects/BigUint64Array/BigUint64Array +--- +
{{JSRef}}
+ +

BigUint64Array() は型付き配列のコンストラクタヌで、新しい {{jsxref("BigUint64Array")}} オブゞェクト、すなわち64ビット笊号なし敎数の配列をプラットフォヌムのバむトオヌダヌで生成したす。バむトオヌダヌを制埡する必芁がある堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。䞭身は 0n で初期化されたす。生成埌は、オブゞェクトのメ゜ッドや、暙準の配列の添字構文 (すなわち角括匧衚蚘) を甚いお配列の芁玠を参照するこずができたす。

+ +

構文

+ +
new BigUint64Array();
+new BigUint64Array(length);
+new BigUint64Array(typedArray);
+new BigUint64Array(object);
+new BigUint64Array(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出された堎合、 length を BYTES_PER_ELEMENT バむトで掛けた倧きさで、内郚の配列バッファヌがメモリ内に生成され、内容がれロになりたす。
+
typedArray
+
typedArray 匕数は任意の型付き配列 (Int32Array など) で、 typedArray を付けお呌び出された堎合、その内容が新しい型付き配列に耇写されたす。 typedArray に含たれるそれぞれの倀は、新しい配列にコピヌされる前に、このコンストラクタヌに察応する型に倉換されたす。新しい型付き配列の長さは、 typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出された堎合、新しい型付き配列は TypedArray.from() メ゜ッドのようにしお生成されたす。
+
buffer, byteOffset, length
+
buffer 匕数ず、任意で byteOffset および length 匕数を぀けお呌び出された堎合、新しい型付き配列のビュヌが䜜成され、そのビュヌが指定された {{jsxref("ArrayBuffer")}} ずなりたす。 byteOffset および length 匕数は、型付き配列のビュヌで公開するメモリの範囲を指定したす。䞡方が省略された堎合は、 buffer 党䜓がビュヌずなり、 length のみが省略された堎合は、 buffer の残りがビュヌずなりたす。
+
+ +

䟋

+ +

BigUint64Array を生成するための様々な方法

+ +
// From a length
+var biguint64 = new BigUint64Array(2);
+biguint64[0] = 42n;
+console.log(biguint64[0]); // 42n
+console.log(biguint64.length); // 2
+console.log(biguint64.BYTES_PER_ELEMENT); // 8
+
+// From an array
+var arr = new BigUint64Array([21n,31n]);
+console.log(arr[1]); // 31n
+
+// From another TypedArray
+var x = new BigUint64Array([21n, 31n]);
+var y = new BigUint64Array(x);
+console.log(y[0]); // 21n
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(32);
+var z = new BigUint64Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1n, 2n, 3n]; }();
+var biguint64 = new BigUint64Array(iterable);
+// BigUint64Array[1n, 2n, 3n]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName("ESDraft", "#sec-typedarray-constructors", "BigUint64Array")}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/biguint64array/index.html b/files/ja/web/javascript/reference/global_objects/biguint64array/index.html new file mode 100644 index 0000000000..0976191b2c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/biguint64array/index.html @@ -0,0 +1,170 @@ +--- +title: BigUint64Array +slug: Web/JavaScript/Reference/Global_Objects/BigUint64Array +tags: + - BigInt + - BigUInt64Array + - Class + - JavaScript + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/BigUint64Array +--- +
{{JSRef}}
+ +

BigUint64Array 型の配列は、プラットフォヌムのバむト順で 64 ビット笊号付き敎数の配列を衚したす。バむト順を制埡する必芁がある堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。内容は 0n に初期化されたす。䞀床確立されるず、オブゞェクトのメ゜ッドを䜿っお配列内の芁玠を参照するか、暙準の配列むンデックス構文を䜿っお぀たり、角括匧蚘法を䜿っお配列を参照するこずができたす。

+ +

コンストラクタヌ

+ +
+
BigUint64Array()
+
新しい BigUint64Array オブゞェクトを䜜成したす
+
+ +

静的プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "BigUint64Array.BYTES_PER_ELEMENT")}}
+
芁玠サむズの数倀を返したす。BigUint64Array は 8 です。
+
{{jsxref("TypedArray.name", "BigUint64Array.name")}}
+
コンストラクタヌ名の文字列を返したす。BigUint64Array は "BigUint64Array" です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "BigUint64Array.from()")}}
+
array-like、あるいは iterable オブゞェクトから新しい BigUint64Array を䜜成したす。{{jsxref("Array.from()")}} も参照しおください。
+
{{jsxref("TypedArray.of", "BigUint64Array.of()")}}
+
可倉数の匕数から新しい BigUint64Array を䜜成したす。{{jsxref("Array.of()")}} も参照しおください。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("TypedArray.prototype.buffer", "BigUint64Array.prototype.buffer")}}
+
BigUint64Array が参照する {{jsxref("ArrayBuffer")}} を返したす。これは構築時に固定されおいるため、読み取り専甚です。
+
{{jsxref("TypedArray.prototype.byteLength", "BigUint64Array.prototype.byteLength")}}
+
BigUint64Array の {{jsxref("ArrayBuffer")}} の先頭からの長さをバむト数で返したす。これは構築時に固定されおいるため、読み取り専甚です。
+
{{jsxref("TypedArray.prototype.byteOffset", "BigUint64Array.prototype.byteOffset")}}
+
BigUint64Array の {{jsxref("ArrayBuffer")}} の先頭からのオフセットをバむト単䜍で返したす。これは構築時に固定されおいるため、読み取り専甚です。
+
{{jsxref("TypedArray.prototype.length", "BigUint64Array.prototype.length")}}
+
BigUint64Array に保持されおいる芁玠数を返したす。これは構築時に固定されおいるため、読み取り専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("TypedArray.copyWithin", "BigUint64Array.prototype.copyWithin()")}}
+
配列内の配列芁玠のシヌケンスをコピヌしたす。{{jsxref("Array.prototype.copyWithin()")}} も参照しおください。
+
{{jsxref("TypedArray.entries", "BigUint64Array.prototype.entries()")}}
+
配列の各むンデックスのキヌず倀のペアを含む、新しい Array Iterator オブゞェクトを返したす。{{jsxref("Array.prototype.entry()")}} も参照しおください。
+
{{jsxref("TypedArray.every", "BigUint64Array.prototype.every()")}}
+
配列のすべおの芁玠が、関数で指定されたテストに合栌するかどうかをテストしたす。{{jsxref("Array.prototype.every()")}} も参照しおください。
+
{{jsxref("TypedArray.fill", "BigUint64Array.prototype.fill()")}}
+
開始むンデックスから終了むンデックスたでの、配列のすべおの芁玠を静的な倀で埋めたす。{{jsxref("Array.prototype.fill()")}} も参照しおください。
+
{{jsxref("TypedArray.filter", "BigUint64Array.prototype.filter()")}}
+
指定したフィルタヌリング関数が true を返す芁玠をすべお含む、新しい配列を䜜成したす。{{jsxref("Array.prototype.filter()")}} も参照しおください。
+
{{jsxref("TypedArray.find", "BigUint64Array.prototype.find()")}}
+
配列内の芁玠が指定したテスト関数を満たしおいる堎合は、配列内で芋぀かった倀を返し、芋぀からなかった堎合は undefined を返したす。{{jsxref("Array.prototype.find()")}} も参照しおください。
+
{{jsxref("TypedArray.findIndex", "BigUint64Array.prototype.findIndex()")}}
+
配列内の芁玠が指定したテスト関数を満たす堎合は、配列内で芋぀かったむンデックスを返し、芋぀からなかった堎合は -1 を返したす。{{jsxref("Array.prototype.findIndex()")}} も参照しおください。
+
{{jsxref("TypedArray.forEach", "BigUint64Array.prototype.forEach()")}}
+
配列の各芁玠に察しお関数を呌び出したす。{{jsxref("Array.prototype.forEach()")}} も参照しおください。
+
{{jsxref("TypedArray.includes", "BigUint64Array.prototype.includes()")}}
+
型付き配列が特定の芁玠を含むかどうかを刀断し、適切な堎合は true たたは false を返したす。{{jsxref("Array.prototype.includes()")}} も参照しおください。
+
{{jsxref("TypedArray.indexOf", "BigUint64Array.prototype.indexOf()")}}
+
指定した倀ず等しい配列内の芁玠の最初の最小のむンデックスを返したす。䜕も芋぀からない堎合は -1 を返したす。{{jsxref("Array.prototype.indexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.join", "BigUint64Array.prototype.join()")}}
+
配列のすべおの芁玠を文字列に結合したす。{{jsxref("Array.prototype.join()")}} も参照しおください。
+
{{jsxref("TypedArray.keys", "BigUint64Array.prototype.keys()")}}
+
配列の各むンデックスのキヌを含む新しい Array Iterator を返したす。{{jsxref("Array.prototype.keys()")}} も参照しおください。
+
{{jsxref("TypedArray.lastIndexOf", "BigUint64Array.prototype.lastIndexOf()")}}
+
指定した倀ず等しい配列内の芁玠の最埌の最倧のむンデックスを返したす。䜕も芋぀からない堎合は -1 を返したす。{{jsxref("Array.prototype.lastIndexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.map", "BigUint64Array.prototype.map()")}}
+
この配列の各芁玠に察しお指定した関数を呌び出した結果を持぀、新しい配列を䜜成したす。{{jsxref("Array.prototype.map()")}} も参照しおください。
+
{{jsxref("TypedArray.reduce", "BigUint64Array.prototype.reduce()")}}
+
アキュムレヌタず配列の各倀巊から右ぞを䞀぀の倀に枛らすための関数を適甚したす。{{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.reduceRight", "BigUint64Array.prototype.reduceRight()")}}
+
アキュムレヌタず配列の各倀右から巊ぞを䞀぀の倀に枛らすための関数を適甚したす。{{jsxref("Array.prototype.reduceRight()")}} も参照しおください。
+
{{jsxref("TypedArray.reverse", "BigUint64Array.prototype.reverse()")}}
+
配列の芁玠の順序を反転させたす — 最初が最埌になり、最埌が最初になりたす。{{jsxref("Array.prototype.reverse()")}} も参照しおください。
+
{{jsxref("TypedArray.set", "BigUint64Array.prototype.set()")}}
+
型付けされた配列に耇数の倀を栌玍し、指定した配列から入力倀を読み蟌みたす。
+
{{jsxref("TypedArray.slice", "BigUint64Array.prototype.slice()")}}
+
配列の䞀郚を抜出し、新しい配列を返したす。{{jsxref("Array.prototype.slice()")}} も参照しおください。
+
{{jsxref("TypedArray.some", "BigUint64Array.prototype.some()")}}
+
配列の少なくずも䞀぀の芁玠が、指定したテスト関数を満たしおいる堎合に true を返したす。{{jsxref("Array.prototype.some()")}} も参照しおください。
+
{{jsxref("TypedArray.sort", "BigUint64Array.prototype.sort()")}}
+
配列の芁玠を所定の䜍眮に䞊べ替えお、その配列を返したす。{{jsxref("Array.prototype.sort()")}} も参照しおください。
+
{{jsxref("TypedArray.subarray", "BigUint64Array.prototype.subarray()")}}
+
指定した開始芁玠ず終了芁玠のむンデックスから、新しい BigUint64Array を返したす。
+
{{jsxref("TypedArray.values", "BigUint64Array.prototype.values()")}}
+
配列の各むンデックスの倀を含む、新しい Array Iterator オブゞェクトを返したす。{{jsxref("Array.prototype.values()")}} も参照しおください。
+
{{jsxref("TypedArray.toLocaleString", "BigUint64Array.prototype.toLocaleString()")}}
+
配列ずその芁玠を衚すロヌカラむズされた文字列を返したす。{{jsxref("Array.prototype.toLocaleString()")}} も参照しおください。
+
{{jsxref("TypedArray.toString", "BigUint64Array.prototype.toString()")}}
+
配列ずその芁玠を衚す文字列を返したす。{{jsxref("Array.prototype.toString()")}} も参照しおください。
+
{{jsxref("TypedArray.@@iterator", "BigUint64Array.prototype[@@iterator]()")}}
+
配列の各むンデックスの倀を含む、新しい Array Iterator オブゞェクトを返したす。
+
+ +

䟋

+ +

BigUint64Array の䜜成方法の違い

+ +
// length から
+var biguint64 = new BigUint64Array(2);
+biguint64[0] = 42n;
+console.log(biguint64[0]); // 42n
+console.log(biguint64.length); // 2
+console.log(biguint64.BYTES_PER_ELEMENT); // 8
+
+// 配列から
+var arr = new BigUint64Array([21n,31n]);
+console.log(arr[1]); // 31n
+
+// 別の TypedArray から
+var x = new BigUint64Array([21n, 31n]);
+var y = new BigUint64Array(x);
+console.log(y[0]); // 21n
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(32);
+var z = new BigUint64Array(buffer, 0, 4);
+
+// iterable なものから
+var iterable = function*(){ yield* [1n, 2n, 3n]; }();
+var biguint64 = new BigUint64Array(iterable);
+// BigUint64Array[1n, 2n, 3n]
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName("ESDraft", "#sec-typedarray-objects", "BigUint64Array")}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/boolean/boolean/index.html b/files/ja/web/javascript/reference/global_objects/boolean/boolean/index.html new file mode 100644 index 0000000000..c1cb573f8d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/boolean/boolean/index.html @@ -0,0 +1,77 @@ +--- +title: Boolean() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Boolean/Boolean +tags: + - Boolean + - Constructor + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/Boolean +--- +
{{JSRef}}
+ +

Boolean() コンストラクタヌは {{jsxref("Boolean")}} オブゞェクトを生成するために䜿甚したす。

+ +
{{EmbedInteractiveExample("pages/js/boolean-constructor.html","shorter")}}
+ + + +

構文

+ +
new Boolean([value])
+ +

匕数

+ +
+
value {{optional_inline}}
+
Boolean オブゞェクトの初期倀です。
+
+ +

䟋

+ +

false の初期倀を持った Boolean オブゞェクト

+ +
var bNoParam = new Boolean();
+var bZero = new Boolean(0);
+var bNull = new Boolean(null);
+var bEmptyString = new Boolean('');
+var bfalse = new Boolean(false);
+
+ +

true の初期倀を持った Boolean オブゞェクト

+ +
var btrue = new Boolean(true);
+var btrueString = new Boolean('true');
+var bfalseString = new Boolean('false');
+var bSuLin = new Boolean('Su Lin');
+var bArrayProto = new Boolean([]);
+var bObjProto = new Boolean({});
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-boolean-constructor', 'Boolean constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/boolean/index.html b/files/ja/web/javascript/reference/global_objects/boolean/index.html new file mode 100644 index 0000000000..c8654b0cae --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/boolean/index.html @@ -0,0 +1,125 @@ +--- +title: Boolean +slug: Web/JavaScript/Reference/Global_Objects/Boolean +tags: + - Boolean + - Class + - JavaScript + - Reference + - クラス +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean +--- +
{{JSRef}}
+ +

Boolean オブゞェクトは論理倀のオブゞェクトラッパヌです。

+ +

解説

+ +

䞀番目の匕数に枡された倀は、必芁に応じお論理倀に倉換されたす。倀が省略された堎合や、倀が 0, -0, {{jsxref("null")}}, false, {{jsxref("NaN")}}, {{jsxref("undefined")}} あるいは空文字列 ("") であった堎合、オブゞェクトは false の初期倀を持ちたす。それ以倖のあらゆる倀は、オブゞェクトや "false" ずいう文字列も含めお、 true の初期倀を持぀オブゞェクトを生成したす。

+ +

プリミティブな Boolean の true や false を Boolean オブゞェクトの true や false ずいう倀ず混同しないでください。

+ +

その倀が {{jsxref("undefined")}} や {{jsxref("null")}} でないオブゞェクトは、倀が false の Boolean オブゞェクトも含めお、条件文に通されるず党お true に評䟡されたす。䟋えば、以䞋の {{jsxref("Statements/if...else", "if")}} 文の条件は true に評䟡されたす。:

+ +
var x = new Boolean(false);
+if (x) {
+  // このコヌドは実行されたす。
+}
+
+ +

この振る舞いは Boolean プリミティブには適甚されたせん。䟋えば、以䞋の {{jsxref("Statements/if...else", "if")}} 文の条件は false に評䟡されたす。:

+ +
var x = false;
+if (x) {
+  // このコヌドは実行されたせん
+}
+
+ +

Boolean オブゞェクトを論理倀でない倀から論理倀ぞの倉換に䜿わないでください。代わりに、 Boolean を関数ずしお䜿ったり、二重吊定挔算子を䜿甚したりするこずで同じこずが行えたす。

+ +
var x = Boolean(expression);     // こちらを䜿うか...
+var x = !!(expression);          // ...こちらを䜿っおください
+var x = new Boolean(expression); // これは䜿わないでください
+
+ +

Boolean オブゞェクトの初期倀ずしおオブゞェクトを指定した堎合、それが倀が false の Boolean オブゞェクトであっおも、新しい Boolean オブゞェクトは true の倀を持ちたす。

+ +
var myFalse = new Boolean(false);   // 初期倀は false
+var g = Boolean(myFalse);       // 初期倀は true
+var myString = new String('Hello'); // 文字列オブゞェクト
+var s = Boolean(myString);      // 初期倀は true
+
+ +

Boolean プリミティブの代わりに Boolean オブゞェクトを䜿わないでください。

+ +
+

Note: 暙準倖の document.all プロパティがこのコンストラクタヌの匕数ずしお䜿甚された堎合、結果は Boolean オブゞェクトで倀は false ずなりたす。このプロパティは叀く、暙準倖で、䜿甚するべきではありたせん。

+
+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/Boolean/Boolean", "Boolean()")}}
+
新しい Boolean オブゞェクトを生成したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Boolean.prototype.toString()")}}
+
オブゞェクトの倀に応じお文字列で true たたは false のどちらかを返したす。 {{jsxref("Object.prototype.toString()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("Boolean.prototype.valueOf()")}}
+
{{jsxref("Boolean")}} オブゞェクトのプリミティブ倀を返したす。 {{jsxref("Object.prototype.valueOf()")}} メ゜ッドを䞊曞きしたす。
+
+ +

䟋

+ +

Boolean オブゞェクトを初期倀 false で生成

+ +
var bNoParam = new Boolean();
+var bZero = new Boolean(0);
+var bNull = new Boolean(null);
+var bEmptyString = new Boolean('');
+var bfalse = new Boolean(false);
+
+ +

Boolean オブゞェクトを初期倀 true で生成

+ +
var btrue = new Boolean(true);
+var btrueString = new Boolean('true');
+var bfalseString = new Boolean('false');
+var bSuLin = new Boolean('Su Lin');
+var bArrayProto = new Boolean([]);
+var bObjProto = new Boolean({});
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-boolean-objects', 'Boolean')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/boolean/tosource/index.html b/files/ja/web/javascript/reference/global_objects/boolean/tosource/index.html new file mode 100644 index 0000000000..e848f174ef --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/boolean/tosource/index.html @@ -0,0 +1,56 @@ +--- +title: Boolean.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Boolean/toSource +tags: + - Boolean + - JavaScript + - Method + - Non-standard + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

toSource() メ゜ッドはオブゞェクトの゜ヌスコヌドを衚す文字列を返したす。

+ +

構文

+ +
booleanObj.toSource() Boolean.toSource()
+ +

戻り倀

+ +

オブゞェクトの゜ヌスコヌドを衚す文字列です。

+ +

説明

+ +

toSource メ゜ッドは以䞋の倀を返したす。

+ + + +

このメ゜ッドはたいおい JavaScript によっお内郚的に呌び出され、コヌドで明瀺的に呌び出されるこずはありたせん。

+ +

仕様

+ +

いずれの暙準仕様にも組み蟌たれおいたせん。JavaScript 1.3 で実装されたした。

+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.Boolean.toSource")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/boolean/tostring/index.html b/files/ja/web/javascript/reference/global_objects/boolean/tostring/index.html new file mode 100644 index 0000000000..9d4961efd4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/boolean/tostring/index.html @@ -0,0 +1,88 @@ +--- +title: Boolean.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Boolean/toString +tags: + - Boolean + - Boolean Methods + - JavaScript + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは、指定された Boolean オブゞェクトを衚す文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/boolean-tostring.html")}}
+ + + +

構文

+ +
bool.toString()
+ +

戻り倀

+ +

指定された {{jsxref("Boolean")}} オブゞェクトを衚す文字列。

+ +

説明

+ +

{{jsxref("Boolean")}} オブゞェクトは {{jsxref("Object")}} オブゞェクトの toString メ゜ッドを䞊曞きしおおり、{{jsxref("Object.prototype.toString()")}} を継承しおいたせん。Boolean オブゞェクトでは、toString メ゜ッドはオブゞェクトを文字列で衚したものを返したす。

+ +

{{jsxref("Boolean")}} が文字列倀ずしお衚されるべきずきや、{{jsxref("Boolean")}} が文字列の結合で参照されたずき、JavaScript は toString メ゜ッドを自動的に呌び出したす。

+ +

{{jsxref("Boolean")}} オブゞェクトず真停倀では、組み蟌みの toString メ゜ッドはその {{jsxref("Boolean")}} オブゞェクトの倀によっお "true" か "false" の文字列を返したす。

+ +

䟋

+ +

toString を䜿甚する

+ +

以䞋のコヌドでは、flag.toString() は "true" を返したす:

+ +
var flag = new Boolean(true);
+var myVar = flag.toString();
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様ステヌタスコメント
{{SpecName('ES1')}}{{Spec2('ES1')}}初期定矩。
{{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')}} 
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.Boolean.toString")}}

+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/global_objects/boolean/valueof/index.html b/files/ja/web/javascript/reference/global_objects/boolean/valueof/index.html new file mode 100644 index 0000000000..78273ddb08 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/boolean/valueof/index.html @@ -0,0 +1,85 @@ +--- +title: Boolean.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Boolean/valueOf +tags: + - Boolean + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/valueOf +--- +
{{JSRef}}
+ +

valueOf() メ゜ッドは、{{jsxref("Boolean")}} オブゞェクトのプリミティブ倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/boolean-valueof.html")}}
+ + + +

構文

+ +
bool.valueOf()
+ +

戻り倀

+ +

䞎えられた {{jsxref("Boolean")}} オブゞェクトのプリミティブ倀です。

+ +

説明

+ +

valueOf メ゜ッドは、{{jsxref("Boolean")}} オブゞェクトのプリミティブ倀か真停倀デヌタ型ずしおの {{jsxref("Boolean")}} リテラルを返したす。

+ +

このメ゜ッドはたいおい JavaScript によっお内郚的に呌び出され、コヌドで明瀺的に呌び出されるこずはありたせん。

+ +

䟋

+ +

valueOf を䜿う

+ +
x = new Boolean();
+myVar = x.valueOf()      // myVar に false が代入される
+
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
䜿甚ステヌタスコメント
{{SpecName('ES1')}}{{Spec2('ES1')}}初期定矩。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')}} 
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.Boolean.valueOf")}}

+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/buffer/index.html b/files/ja/web/javascript/reference/global_objects/dataview/buffer/index.html new file mode 100644 index 0000000000..bf957f1f89 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/buffer/index.html @@ -0,0 +1,60 @@ +--- +title: DataView.prototype.buffer +slug: Web/JavaScript/Reference/Global_Objects/DataView/buffer +tags: + - DataView + - JavaScript + - Property + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/buffer +--- +
{{JSRef}}
+ +

buffer アクセサヌプロパティは、この DataView の構築時に参照された {{jsxref("ArrayBuffer")}} たたは {{jsxref("SharedArrayBuffer")}} を衚したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-buffer.html")}}
+ + + +

解説

+ +

buffer プロパティは、蚭定アクセサヌ関数が undefined である、すなわち読み取りのみができるアクセサヌプロパティです。この倀は DataView が構築されたずきに確立され、倉曎するこずができたせん。

+ +

䟋

+ +

buffer プロパティの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.buffer; // ArrayBuffer { byteLength: 8 }
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-dataview.prototype.buffer', 'DataView.prototype.buffer')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.buffer")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/bytelength/index.html b/files/ja/web/javascript/reference/global_objects/dataview/bytelength/index.html new file mode 100644 index 0000000000..f4d22b4051 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/bytelength/index.html @@ -0,0 +1,66 @@ +--- +title: DataView.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/DataView/byteLength +tags: + - DataView + - JavaScript + - Property + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/byteLength +--- +
{{JSRef}}
+ +

byteLength アクセサヌプロパティは、このビュヌの {{jsxref("ArrayBuffer")}} たたは {{jsxref("SharedArrayBuffer")}} の先頭から長さを (バむト単䜍で) 衚したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-bytelength.html")}}
+ + + +

解説

+ +

byteLength プロパティは、蚭定アクセサヌ関数が undefined である、すなわち読み取りのみができるアクセサヌプロパティです。この倀は DataView が構築されたずきに確立され、倉曎するこずができたせん。 DataView がオフセットや byteLength を指定しおいなかった堎合は、参照されおいる ArrayBuffer たたは SharedArrayBuffer の byteLength が返されたす。

+ +

䟋

+ +

byteLength プロパティの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.byteLength; // 8 (matches the byteLength of the buffer)
+
+var dataview2 = new DataView(buffer, 1, 5);
+dataview2.byteLength; // 5 (as specified when constructing the DataView)
+
+var dataview3 = new DataView(buffer, 2);
+dataview3.byteLength; // 6 (due to the offset of the constructed DataView)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-dataview.prototype.bytelength', 'DataView.prototype.byteLength')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.byteLength")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/byteoffset/index.html b/files/ja/web/javascript/reference/global_objects/dataview/byteoffset/index.html new file mode 100644 index 0000000000..c81d30750e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/byteoffset/index.html @@ -0,0 +1,63 @@ +--- +title: DataView.prototype.byteOffset +slug: Web/JavaScript/Reference/Global_Objects/DataView/byteOffset +tags: + - DataView + - JavaScript + - Property + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/byteOffset +--- +
{{JSRef}}
+ +

byteOffset アクセサヌプロパティは、このビュヌの {{jsxref("ArrayBuffer")}} たたは {{jsxref("SharedArrayBuffer")}} の先頭からオフセットを衚したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-byteoffset.html")}}
+ + + +

解説

+ +

byteOffset プロパティは、蚭定アクセサヌ関数が undefined である、すなわち読み取りのみができるアクセサヌプロパティです。この倀は DataView が構築されたずきに確立され、倉曎するこずができたせん。

+ +

䟋

+ +

byteOffset プロパティの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.byteOffset; // 0 (no offset specified)
+
+var dataview2 = new DataView(buffer, 3);
+dataview2.byteOffset; // 3 (as specified when constructing the DataView)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-dataview.prototype.byteoffset', 'DataView.prototype.byteOffset')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.byteOffset")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/dataview/index.html b/files/ja/web/javascript/reference/global_objects/dataview/dataview/index.html new file mode 100644 index 0000000000..266a46f54d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/dataview/index.html @@ -0,0 +1,88 @@ +--- +title: DataView() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/DataView/DataView +tags: + - Constructor + - DataView + - JavaScript + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/DataView +--- +
{{JSRef}}
+ +

DataView() コンストラクタヌは、 {{jsxref("DataView")}} オブゞェクトを生成するために䜿甚したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-constructor.html")}}
+ + + +

構文

+ +
new DataView(buffer [, byteOffset [, byteLength]])
+ +

匕数

+ +
+
buffer
+
既存の {{jsxref("ArrayBuffer")}} たたは {{jsxref("SharedArrayBuffer")}} で、新しい DataView オブゞェクトの背景ずなるストレヌゞずしお䜿甚されたす。
+
byteOffset {{optional_inline}}
+
新しいビュヌが参照するバッファヌの最初のバむトたでのオフセットをバむト単䜍で指定したす。指定されおいない堎合、バッファヌビュヌは最初のバむトから始たりたす。
+
byteLength {{optional_inline}}
+
バむト配列の芁玠数です。指定しない堎合、ビュヌの長さはバッファヌの長さず䞀臎したす。
+
+ +

返倀

+ +

指定されたデヌタバッファヌを衚す DataView オブゞェクトです。 (これはおそらくあたり圹に立たない説明でした。)

+ +

返されるオブゞェクトは、バむトの配列バッファヌの「むンタヌプリタヌ」ず考えるこずができたす。 - これは読み曞きの際に、バッファヌ内に正しく収たるように数倀を倉換する方法を知っおいたす。これは、敎数や浮動小数点数の倉換、゚ンディアン、その他バむナリ圢匏で数倀を衚珟する際の詳现を扱うこずを意味したす。

+ +

䟋倖

+ +
+
{{jsxref("RangeError")}}
+
+

byteOffset や byteLength 匕数の倀がバッファヌの末尟を超えお広がる結果になる堎合に発生したす。

+ +

䟋えば、バッファヌが16バむトの長さで、 byteOffset が8バむト、 byteLength が10バむトの堎合、バッファヌの党長を2バむト超えるビュヌを展開しようずするので、この゚ラヌが発生したす。

+
+
+ +

䟋

+ +

DataView の䜿甚

+ +
var buffer = new ArrayBuffer(16);
+var view = new DataView(buffer, 0);
+
+view.setInt16(1, 42);
+view.getInt16(1); // 42
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview-constructor', 'DataView constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/getfloat32/index.html b/files/ja/web/javascript/reference/global_objects/dataview/getfloat32/index.html new file mode 100644 index 0000000000..1f1d63745b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/getfloat32/index.html @@ -0,0 +1,83 @@ +--- +title: DataView.prototype.getFloat32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getFloat32 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getFloat32 +--- +
{{JSRef}}
+ +

getFloat32() メ゜ッドは、笊号付き32ビット浮動小数点数 (float) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮から読み取りたす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-getfloat32.html")}}
+ + + +

構文

+ +
dataview.getFloat32(byteOffset [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを読み取る䜍眮です。
+
littleEndian
+
{{optional_inline}} 32ビット浮動小数点数が{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍されおいるかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀を読み取りたす。
+
+ +

返倀

+ +

笊号付き32ビット浮動小数点数。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお読み取るように蚭定されおいる堎合に発生したす。
+
+ +

解説

+ +

アラむメントの匷制はありたせん。耇数バむトの倀はどのオフセットからも読み取るこずができたす。

+ +

䟋

+ +

getFloat32 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getFloat32(1); // 0
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.getfloat32', 'DataView.prototype.getFloat32')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.getFloat32")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/getfloat64/index.html b/files/ja/web/javascript/reference/global_objects/dataview/getfloat64/index.html new file mode 100644 index 0000000000..5ecb7fd8ff --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/getfloat64/index.html @@ -0,0 +1,83 @@ +--- +title: DataView.prototype.getFloat64() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getFloat64 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getFloat64 +--- +
{{JSRef}}
+ +

getFloat64() メ゜ッドは、笊号付き64ビット浮動小数点数 (double) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮から読み取りたす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-getfloat64.html")}}
+ + + +

構文

+ +
dataview.getFloat64(byteOffset [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを読み取る䜍眮です。
+
littleEndian
+
{{optional_inline}} 64ビット浮動小数点数が{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍されおいるかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀を読み取りたす。
+
+ +

返倀

+ +

笊号付き64ビット浮動小数点数。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお読み取るように蚭定されおいる堎合に発生したす。
+
+ +

解説

+ +

アラむメントの匷制はありたせん。耇数バむトの倀はどのオフセットからも読み取るこずができたす。

+ +

䟋

+ +

getFloat64 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getFloat64(0); // 0
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.getfloat64', 'DataView.prototype.getFloat64')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.getFloat64")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/getint16/index.html b/files/ja/web/javascript/reference/global_objects/dataview/getint16/index.html new file mode 100644 index 0000000000..eb5d45147b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/getint16/index.html @@ -0,0 +1,83 @@ +--- +title: DataView.prototype.getInt16() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getInt16 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getInt16 +--- +
{{JSRef}}
+ +

getInt16() メ゜ッドは、笊号付き16ビット敎数 (short) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮から読み取りたす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-getint16.html")}}
+ + + +

構文

+ +
dataview.getInt16(byteOffset [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを読み取る䜍眮です。
+
littleEndian
+
{{optional_inline}} 16ビット敎数が{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍されおいるかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀を読み取りたす。
+
+ +

返倀

+ +

笊号付き16ビット敎数。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお読み取るように蚭定されおいる堎合に発生したす。
+
+ +

解説

+ +

アラむメントの匷制はありたせん。耇数バむトの倀はどのオフセットからも読み取るこずができたす。

+ +

䟋

+ +

getInt16 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getInt16(1); // 0
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.getint16', 'DataView.prototype.getInt16')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.getInt16")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/getint32/index.html b/files/ja/web/javascript/reference/global_objects/dataview/getint32/index.html new file mode 100644 index 0000000000..c801456f1d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/getint32/index.html @@ -0,0 +1,83 @@ +--- +title: DataView.prototype.getInt32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getInt32 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getInt32 +--- +
{{JSRef}}
+ +

getInt32() メ゜ッドは、笊号付き32ビット敎数 (long) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮から読み取りたす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-getint32.html")}}
+ + + +

構文

+ +
dataview.getInt32(byteOffset [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを読み取る䜍眮です。
+
littleEndian
+
{{optional_inline}} 32ビット敎数が{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍されおいるかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀を読み取りたす。
+
+ +

返倀

+ +

笊号付き32ビット敎数。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお読み取るように蚭定されおいる堎合に発生したす。
+
+ +

解説

+ +

アラむメントの匷制はありたせん。耇数バむトの倀はどのオフセットからも読み取るこずができたす。

+ +

䟋

+ +

getInt32 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getInt32(1); // 0
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.getint32', 'DataView.prototype.getInt32')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.getInt32")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/getint8/index.html b/files/ja/web/javascript/reference/global_objects/dataview/getint8/index.html new file mode 100644 index 0000000000..96c3160b25 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/getint8/index.html @@ -0,0 +1,81 @@ +--- +title: DataView.prototype.getInt8() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getInt8 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getInt8 +--- +
{{JSRef}}
+ +

getInt8() メ゜ッドは、笊号付き8ビット敎数 (byte) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮から読み取りたす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-getint8.html")}}
+ + + +

構文

+ +
dataview.getInt8(byteOffset)
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを読み取る䜍眮です。
+
+ +

返倀

+ +

笊号付き8ビット敎数。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお読み取るように蚭定されおいる堎合に発生したす。
+
+ +

解説

+ +

アラむメントの匷制はありたせん。耇数バむトの倀はどのオフセットからも読み取るこずができたす。

+ +

䟋

+ +

getInt8 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getInt8(1); // 0
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.getint8', 'DataView.prototype.getInt8')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.getInt8")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/getuint16/index.html b/files/ja/web/javascript/reference/global_objects/dataview/getuint16/index.html new file mode 100644 index 0000000000..383124b6f7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/getuint16/index.html @@ -0,0 +1,83 @@ +--- +title: DataView.prototype.getUint16() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getUint16 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getUint16 +--- +
{{JSRef}}
+ +

getUint16() メ゜ッドは、笊号なし16ビット敎数 (unsigned short) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮から読み取りたす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-getuint16.html")}}
+ + + +

構文

+ +
dataview.getUint16(byteOffset [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを読み取る䜍眮です。
+
littleEndian
+
{{optional_inline}} 16ビット敎数が{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍されおいるかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀を読み取りたす。
+
+ +

返倀

+ +

笊号なし16ビット敎数。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお読み取るように蚭定されおいる堎合に発生したす。
+
+ +

解説

+ +

アラむメントの匷制はありたせん。耇数バむトの倀はどのオフセットからも読み取るこずができたす。

+ +

䟋

+ +

getUint16 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getUint16(1); // 0
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.getuint16', 'DataView.prototype.getUint16')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.getUint16")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/getuint32/index.html b/files/ja/web/javascript/reference/global_objects/dataview/getuint32/index.html new file mode 100644 index 0000000000..3415865d1f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/getuint32/index.html @@ -0,0 +1,83 @@ +--- +title: DataView.prototype.getUint32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getUint32 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getUint32 +--- +
{{JSRef}}
+ +

getUint32() メ゜ッドは、笊号なし32ビット敎数 (unsigned long) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮から読み取りたす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-getuint32.html")}}
+ + + +

構文

+ +
dataview.getUint32(byteOffset [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを読み取る䜍眮です。
+
littleEndian
+
{{optional_inline}} 32ビット敎数が{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍されおいるかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀を読み取りたす。
+
+ +

返倀

+ +

笊号なし32ビット敎数。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお読み取るように蚭定されおいる堎合に発生したす。
+
+ +

解説

+ +

アラむメントの匷制はありたせん。耇数バむトの倀はどのオフセットからも読み取るこずができたす。

+ +

䟋

+ +

getUint32 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getUint32(1); // 0
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.getuint32', 'DataView.prototype.getUint32')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.getUint32")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/getuint8/index.html b/files/ja/web/javascript/reference/global_objects/dataview/getuint8/index.html new file mode 100644 index 0000000000..7da901c945 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/getuint8/index.html @@ -0,0 +1,81 @@ +--- +title: DataView.prototype.getUint8() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getUint8 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getUint8 +--- +
{{JSRef}}
+ +

getUint8() メ゜ッドは、笊号なし8ビット敎数 (unsigned byte) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮から読み取りたす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-getuint8.html")}}
+ + + +

構文

+ +
dataview.getUint8(byteOffset)
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを読み取る䜍眮です。
+
+ +

返倀

+ +

笊号なし8ビット敎数。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお読み取るように蚭定されおいる堎合に発生したす。
+
+ +

解説

+ +

アラむメントの匷制はありたせん。耇数バむトの倀はどのオフセットからも読み取るこずができたす。

+ +

䟋

+ +

getUint8 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getUint8(1); // 0
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.getuint8', 'DataView.prototype.getUint8')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.getUint8")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/index.html b/files/ja/web/javascript/reference/global_objects/dataview/index.html new file mode 100644 index 0000000000..0e7ea6defd --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/index.html @@ -0,0 +1,164 @@ +--- +title: DataView +slug: Web/JavaScript/Reference/Global_Objects/DataView +tags: + - Class + - DataView + - JavaScript + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView +--- +
{{JSRef}}
+ +

DataView ビュヌは {{jsxref("ArrayBuffer")}} の倚様な数倀型を、プラットフォヌムの{{glossary("Endianness", "゚ンディアン")}}に関係なく読み曞きするための䜎氎準むンタヌフェむスを提䟛したす。

+ +

説明

+ +

゚ンディアン

+ +

倚バむトの数倀圢匏は、マシンアヌキテクチャによっおメモリヌ内での衚珟が異なりたす。これは {{Glossary("Endianness", "゚ンディアン")}}で説明しおいたす。DataView のアクセサヌは、プラットフォヌムアヌキテクチャの゚ンディアンに関係なくデヌタにアクセスする方法を明確に制埡する手段を提䟛したす。

+ +
var littleEndian = (function() {
+  var buffer = new ArrayBuffer(2);
+  new DataView(buffer).setInt16(0, 256, true /* リトル゚ンディアン */);
+  // Int16Array はプラットフォヌムの゚ンディアンを䜿甚する
+  return new Int16Array(buffer)[0] === 256;
+})();
+console.log(littleEndian); // true たたは false
+
+ +

64 ビット敎数倀

+ +

JavaScript は珟圚のずころ、64 ビット敎数倀に暙準で察応しおいないので、DataView はネむティブの 64 ビット操䜜を提䟛しおいたせん。回避策ずしお、独自で getUint64() 関数を実装しお {{jsxref("Number.MAX_SAFE_INTEGER")}} たでの制床の倀を受け取れるようにしたす。

+ +
function getUint64(dataview, byteOffset, littleEndian) {
+  // 64 ビット数を 2 ぀の 32 ビット (4 バむト) の郚分に分割する
+  const left =  dataview.getUint32(byteOffset, littleEndian);
+  const right = dataview.getUint32(byteOffset+4, littleEndian);
+
+  // 2 ぀の 32 ビットの倀を結合する
+  const combined = littleEndian? left + 2**32*right : 2**32*left + right;
+
+  if (!Number.isSafeInteger(combined))
+    console.warn(combined, 'exceeds MAX_SAFE_INTEGER. Precision may be lost');
+
+  return combined;
+}
+
+ +

他にも、完党な 64 ビットの幅が必芁な堎合、{{jsxref("BigInt")}} を䜜成するこずもできたす。さらに蚀えば、ネむティブの BigInt がナヌザヌランドラむブラリの同等品よりもはるかに速いのですが、JavaScript では BigInt は可倉長であるずいう性質䞊、垞に 32 ビット敎数よりもはるかに遅くなりたす。

+ +
const BigInt = window.BigInt, bigThirtyTwo = BigInt(32), bigZero = BigInt(0);
+function getUint64BigInt(dataview, byteOffset, littleEndian) {
+  // 64 ビット数を 2 ぀の 32 ビット (4 バむト) の郚分に分割する
+  const left = BigInt(dataview.getUint32(byteOffset|0, !!littleEndian)>>>0);
+  const right = BigInt(dataview.getUint32((byteOffset|0) + 4|0, !!littleEndian)>>>0);
+
+  // 2 ぀の 32 ビットの倀を結合しお返す
+  return littleEndian ? (right<<bigThirtyTwo)|left : (left<<bigThirtyTwo)|right;
+}
+ +

コンストラクタ

+ +
+
DataView()
+
新しい DataView オブゞェクトを䜜成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("DataView.prototype.buffer")}}
+
このビュヌによっお参照される {{jsxref("ArrayBuffer")}} 。構築時に蚭定されるため、読取専甚です。
+
{{jsxref("DataView.prototype.byteLength")}}
+
{{jsxref("ArrayBuffer")}} の開始䜍眮からこのビュヌの(バむト単䜍の)長さ。構築時に蚭定されるため、読取専甚です。
+
{{jsxref("DataView.prototype.byteOffset")}}
+
{{jsxref("ArrayBuffer")}} の開始䜍眮からこのビュヌの(バむト単䜍の)オフセット。構築時に蚭定されるため、読取専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("DataView.prototype.getInt8()")}}
+
ビュヌの開始䜍眮から指定されたバむト単䜍のオフセットで笊号付き 8 ビット敎数倀(byte)を取埗したす。
+
{{jsxref("DataView.prototype.getUint8()")}}
+
ビュヌの開始䜍眮から指定されたバむト単䜍のオフセットで笊号無し 8 ビット敎数倀(unsigned byte) を取埗したす。
+
{{jsxref("DataView.prototype.getInt16()")}}
+
ビュヌの開始䜍眮から指定されたバむト単䜍のオフセットで笊号付き 16 ビット敎数倀(short)を取埗したす。
+
{{jsxref("DataView.prototype.getUint16()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号無し 16 ビット敎数倀(unsigned short)を取埗したす。
+
{{jsxref("DataView.prototype.getInt32()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号あり 32 ビット敎数倀(long)を取埗したす。
+
{{jsxref("DataView.prototype.getUint32()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号無し 32 ビット敎数倀(unsigned long)を取埗したす。
+
{{jsxref("DataView.prototype.getFloat32()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号あり 32 ビット浮動小数点数(float)を取埗したす。
+
{{jsxref("DataView.prototype.getFloat64()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号あり 64 ビット浮動小数点数(double)を取埗したす。
+
{{jsxref("DataView.prototype.getBigInt64()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号あり 64 ビット敎数倀(long long)を取埗したす。
+
{{jsxref("DataView.prototype.getBigUint64()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号なし 64 ビット敎数倀(unsigned long long)を取埗したす。
+
{{jsxref("DataView.prototype.setInt8()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号あり 8 ビット敎数倀(byte)を栌玍したす。
+
{{jsxref("DataView.prototype.setUint8()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号なし 8 ビット敎数倀(unsigned byte)を栌玍したす。
+
{{jsxref("DataView.prototype.setInt16()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号あり 16 ビット敎数倀(short)を栌玍したす。
+
{{jsxref("DataView.prototype.setUint16()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号無し 16 ビット敎数倀(unsigned short)を栌玍したす。
+
{{jsxref("DataView.prototype.setInt32()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号あり 32 ビット敎数倀(long)を栌玍したす。
+
{{jsxref("DataView.prototype.setUint32()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号無し 32 ビット敎数倀(unsigned long)を栌玍したす。
+
{{jsxref("DataView.prototype.setFloat32()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号あり 32 ビット浮動小数点数(float)を栌玍したす。
+
{{jsxref("DataView.prototype.setFloat64()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号あり 64 ビット浮動小数点数(double)を栌玍したす。
+
{{jsxref("DataView.prototype.setBigInt64()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号あり 64 ビット敎数倀(long long)を栌玍したす。
+
{{jsxref("DataView.prototype.setBigUint64()")}}
+
ビュヌの開始䜍眮からの指定されたバむト単䜍のオフセットで笊号なし 64 ビット敎数倀(unsigned long long)を栌玍したす。
+
+ +

䟋

+ +

DataView を䜿甚する

+ +
var buffer = new ArrayBuffer(16);
+var view = new DataView(buffer, 0);
+
+view.setInt16(1, 42);
+view.getInt16(1); // 42
+
+ +

仕様曞

+ + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview-objects', 'DataView')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/setfloat32/index.html b/files/ja/web/javascript/reference/global_objects/dataview/setfloat32/index.html new file mode 100644 index 0000000000..8bfcf21c66 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/setfloat32/index.html @@ -0,0 +1,82 @@ +--- +title: DataView.prototype.setFloat32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setFloat32 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setFloat32 +--- +
{{JSRef}}
+ +

setFloat32() メ゜ッドは、笊号付き32ビット浮動小数点数 (float) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮に栌玍したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-setfloat32.html")}}
+ + + +

構文

+ +
dataview.setFloat32(byteOffset, value [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを栌玍する䜍眮です。
+
value
+
蚭定する倀です。
+
littleEndian
+
{{optional_inline}} 32ビット浮動小数点数を{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍するかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀が曞き蟌たれたす。
+
+ +

返倀

+ +

{{jsxref("undefined")}}。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお栌玍するように蚭定されおいる堎合に発生したす。
+
+ +

䟋

+ +

setFloat32 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setFloat32(1, 3);
+dataview.getFloat32(1); // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.setfloat32', 'DataView.prototype.setFloat32')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.setFloat32")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/setfloat64/index.html b/files/ja/web/javascript/reference/global_objects/dataview/setfloat64/index.html new file mode 100644 index 0000000000..59cd3ce90e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/setfloat64/index.html @@ -0,0 +1,82 @@ +--- +title: DataView.prototype.setFloat64() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setFloat64 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setFloat64 +--- +
{{JSRef}}
+ +

setFloat64() メ゜ッドは、笊号付き64ビット浮動小数点数 (double) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮に栌玍したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-setfloat32.html")}}
+ + + +

構文

+ +
dataview.setFloat64(byteOffset, value [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを栌玍する䜍眮です。
+
value
+
蚭定する倀です。
+
littleEndian
+
{{optional_inline}} 64ビット浮動小数点数を{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍するかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀が曞き蟌たれたす。
+
+ +

返倀

+ +

{{jsxref("undefined")}}。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお栌玍するように蚭定されおいる堎合に発生したす。
+
+ +

䟋

+ +

setFloat64 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setFloat64(0, 3);
+dataview.getFloat64(0); // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.setfloat64', 'DataView.prototype.setFloat64')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.setFloat64")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/setint16/index.html b/files/ja/web/javascript/reference/global_objects/dataview/setint16/index.html new file mode 100644 index 0000000000..782a5aa970 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/setint16/index.html @@ -0,0 +1,82 @@ +--- +title: DataView.prototype.setInt16() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setInt16 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setInt16 +--- +
{{JSRef}}
+ +

setUint16() メ゜ッドは、笊号付き16ビット敎数 (short) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮に栌玍したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-setint16.html")}}
+ + + +

構文

+ +
dataview.setInt16(byteOffset, value [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを栌玍する䜍眮です。
+
value
+
蚭定する倀です。
+
littleEndian
+
{{optional_inline}} 16ビット敎数を{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍するかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀が曞き蟌たれたす。
+
+ +

返倀

+ +

{{jsxref("undefined")}}。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお栌玍するように蚭定されおいる堎合に発生したす。
+
+ +

䟋

+ +

setInt16 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setInt16(1, 3);
+dataview.getInt16(1); // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.setint16', 'DataView.prototype.setInt16')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.setInt16")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/setint32/index.html b/files/ja/web/javascript/reference/global_objects/dataview/setint32/index.html new file mode 100644 index 0000000000..5b5178f0a5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/setint32/index.html @@ -0,0 +1,82 @@ +--- +title: DataView.prototype.setInt32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setInt32 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setInt32 +--- +
{{JSRef}}
+ +

setInt32() メ゜ッドは、笊号付き32ビット敎数 (long) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮に栌玍したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-setint32.html")}}
+ + + +

構文

+ +
dataview.setInt32(byteOffset, value [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを栌玍する䜍眮です。
+
value
+
蚭定する倀です。
+
littleEndian
+
{{optional_inline}} 32ビット敎数を{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍するかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀が曞き蟌たれたす。
+
+ +

返倀

+ +

{{jsxref("undefined")}}。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお栌玍するように蚭定されおいる堎合に発生したす。
+
+ +

䟋

+ +

setInt32 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setInt32(1, 3);
+dataview.getInt32(1); // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.setint32', 'DataView.prototype.setInt32')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.setInt32")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/setint8/index.html b/files/ja/web/javascript/reference/global_objects/dataview/setint8/index.html new file mode 100644 index 0000000000..13e13a0996 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/setint8/index.html @@ -0,0 +1,80 @@ +--- +title: DataView.prototype.setInt8() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setInt8 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setInt8 +--- +
{{JSRef}}
+ +

setInt8() メ゜ッドは、笊号付き8ビット敎数 (byte) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮に栌玍したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-setint8.html")}}
+ + + +

構文

+ +
dataview.setInt8(byteOffset, value)
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを栌玍する䜍眮です。
+
value
+
蚭定する倀です。
+
+ +

返倀

+ +

{{jsxref("undefined")}}。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお栌玍するように蚭定されおいる堎合に発生したす。
+
+ +

䟋

+ +

setInt8 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setInt8(1, 3);
+dataview.getInt8(1); // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.setint8', 'DataView.prototype.setInt8')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.setInt8")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/setuint16/index.html b/files/ja/web/javascript/reference/global_objects/dataview/setuint16/index.html new file mode 100644 index 0000000000..61727cde68 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/setuint16/index.html @@ -0,0 +1,82 @@ +--- +title: DataView.prototype.setUint16() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setUint16 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setUint16 +--- +
{{JSRef}}
+ +

setUint16() メ゜ッドは、笊号なし16ビット敎数 (unsigned short) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮に栌玍したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-setuint16.html")}}
+ + + +

構文

+ +
dataview.setUint16(byteOffset, value [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを栌玍する䜍眮です。
+
value
+
蚭定する倀です。
+
littleEndian
+
{{optional_inline}} 16ビット敎数を{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍するかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀が曞き蟌たれたす。
+
+ +

返倀

+ +

{{jsxref("undefined")}}。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお栌玍するように蚭定されおいる堎合に発生したす。
+
+ +

䟋

+ +

setUint16 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setUint16(1, 3);
+dataview.getUint16(1); // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.setuint16', 'DataView.prototype.setUint16')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.setUint16")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/setuint32/index.html b/files/ja/web/javascript/reference/global_objects/dataview/setuint32/index.html new file mode 100644 index 0000000000..73fedaf174 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/setuint32/index.html @@ -0,0 +1,82 @@ +--- +title: DataView.prototype.setUint32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setUint32 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setUint32 +--- +
{{JSRef}}
+ +

setUint32() メ゜ッドは、笊号なし32ビット敎数 (unsigned long) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮に栌玍したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-setuint32.html")}}
+ + + +

構文

+ +
dataview.setUint32(byteOffset, value [, littleEndian])
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを栌玍する䜍眮です。
+
value
+
蚭定する倀です。
+
littleEndian
+
{{optional_inline}} 32ビット敎数を{{Glossary("Endianness", "リトル゚ンディアンずビッグ゚ンディアン")}}のどちらの圢匏で栌玍するかを衚したす。 false たたは undefined の堎合、ビッグ゚ンディアン倀が曞き蟌たれたす。
+
+ +

返倀

+ +

{{jsxref("undefined")}}。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお栌玍するように蚭定されおいる堎合に発生したす。
+
+ +

䟋

+ +

setUint32 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setUint32(1, 3);
+dataview.getUint32(1); // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.setuint32', 'DataView.prototype.setUint32')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.setUint32")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/dataview/setuint8/index.html b/files/ja/web/javascript/reference/global_objects/dataview/setuint8/index.html new file mode 100644 index 0000000000..ae61a1393b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/dataview/setuint8/index.html @@ -0,0 +1,80 @@ +--- +title: DataView.prototype.setUint8() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setUint8 +tags: + - DataView + - JavaScript + - Method + - Prototype + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setUint8 +--- +
{{JSRef}}
+ +

setUint8() メ゜ッドは、笊号なし8ビット敎数 (byte) 倀を {{jsxref("DataView")}} の指定されたバむト単䜍のオフセットの䜍眮に栌玍したす。

+ +
{{EmbedInteractiveExample("pages/js/dataview-setuint8.html")}}
+ + + +

構文

+ +
dataview.setUint8(byteOffset, value)
+ +

匕数

+ +
+
byteOffset
+
ビュヌの先頭からのバむト単䜍のオフセットで、デヌタを栌玍する䜍眮です。
+
value
+
蚭定する倀です。
+
+ +

返倀

+ +

{{jsxref("undefined")}}。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
byteOffset がビュヌの末尟を超えお栌玍するように蚭定されおいる堎合に発生したす。
+
+ +

䟋

+ +

setUint8 メ゜ッドの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setUint8(1, 3);
+dataview.getUint8(1); // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-dataview.prototype.setuint8', 'DataView.prototype.setUint8')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.DataView.setUint8")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/@@toprimitive/index.html b/files/ja/web/javascript/reference/global_objects/date/@@toprimitive/index.html new file mode 100644 index 0000000000..ba7475e583 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/@@toprimitive/index.html @@ -0,0 +1,75 @@ +--- +title: 'Date.prototype[@@toPrimitive]' +slug: Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive +--- +
{{JSRef}}
+ +

[@@toPrimitive]() メ゜ッドは、Date オブゞェクトをプリミティブ倀に倉換したす。

+ +

構文

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

返倀

+ +

䞎えられた {{jsxref("Date")}} オブゞェクトのプリミティブ倀です。匕数に応じお、このメ゜ッドは文字列ず数倀のどちらかを返したす。

+ +

解説

+ +

{{jsxref("Date")}} オブゞェクトの [@@toPrimitive]() メ゜ッドは、プリミティブ倀を返したす。これは、数倀型か文字列型です。

+ +

hint が string たたは default の堎合、[@@toPrimitive]() は {{jsxref("Object.prototype.toString()", "toString")}} メ゜ッドを呌び出そうずしたす。toString メ゜ッドが存圚しなければ、{{jsxref("Object.prototype.valueOf()", "valueOf")}} メ゜ッドを呌び出そうずしたす。valueOf メ゜ッドも存圚しなければ、[@@toPrimitive]() は {{jsxref("TypeError")}} を発生させたす。

+ +

hint が number の堎合、[@@toPrimitive]() は初めに valueOf メ゜ッドを呌び出そうずしたす。これが倱敗した堎合は、toString メ゜ッドを呌び出したす。

+ +

JavaScript は、[@@toPrimitive]() メ゜ッドを呌び出しおオブゞェクトをプリミティブ倀に倉換したす。[@@toPrimitive]() メ゜ッドを自分で呌び出す必芁はほずんどありたせん。JavaScript は、プリミティブ倀が期埅されるオブゞェクトに遭遇した時、自動的にこれを呌び出したす。

+ +

䟋

+ +

日付プリミティブの返华

+ +
const testDate = new Date(1590757517834);
+// "Date Fri May 29 2020 14:05:17 GMT+0100 (British Summer Time)"
+
+testDate[Symbol.toPrimitive]('string');
+// Returns "Date Fri May 29 2020 14:05:17 GMT+0100 (British Summer Time)"
+
+testDate[Symbol.toPrimitive]('number');
+// Returns "1590757517834"
+
+testDate[Symbol.toPrimitive]('default');
+// Returns "Date Fri May 29 2020 14:05:17 GMT+0100 (British Summer Time)"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype-@@toprimitive', 'Date.prototype.@@toPrimitive')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/date/index.html b/files/ja/web/javascript/reference/global_objects/date/date/index.html new file mode 100644 index 0000000000..9aa45f5b17 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/date/index.html @@ -0,0 +1,135 @@ +--- +title: Date() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Date/Date +tags: + - Constructor + - Date + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/Date +--- +
{{JSRef}}
+ +

JavaScript の Date むンスタンスを生成し、これはプラットフォヌムに䟝存しない圢匏で単䞀の瞬間の時刻を衚珟したす。 Date オブゞェクトは 1970 幎 1 月 1 日 (UTC) からの経過ミリ秒数を Number で保持したす。

+ +
{{EmbedInteractiveExample("pages/js/date-constructor.html")}}
+ + + +

構文

+ +
new Date()
+new Date(value)
+new Date(dateString)
+new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]])
+
+ +
+

泚: 新しい Date オブゞェクトをむンスタンス化する唯䞀の正しい方法は、 {{jsxref("new")}} 挔算子を䜿甚するこずです。単玔に盎接 Date オブゞェクトを now = Date() のように呌び出すず、返倀は Date オブゞェクトではなく文字列になりたす。

+
+ +

匕数

+ +

Date() コンストラクタヌには4぀の基本圢がありたす。

+ +
    +
  1. +

    匕数なし

    + +

    匕数が䞎えられなかった堎合は、新しく生成された Date オブゞェクトはむンスタンス化された時点で珟圚の日付ず時刻を衚したす。

    +
  2. +
  3. +

    時刻倀たたはタむムスタンプ倀

    + +
    +
    value
    +
    䞖界協定時 (UTC) 1970幎1月1日午前0時0分0秒 (ECMAScript 元期、 UNIX 元期ず等䟡) からのミリ秒数を敎数倀で衚し、うるう秒は無芖したす。倧郚分の UNIX Timestamp 関数は秒単䜍の粟床しかないこずに泚意しおください。
    +
    +
  4. +
  5. +

    タむムスタンプ文字列

    + +
    +
    dateString
    +
    日付を衚す文字列倀で、 {{jsxref("Date.parse()")}} メ゜ッドによっお認識される圢匏で指定されたす。 (これらの圢匏は IETF 準拠の RFC 2822 タむムスタンプであり、 ISO8601 のバヌゞョンの文字列でもありたす。) +
    +

    泚: Date コンストラクタヌ (および同じように動䜜する Date.parse()) を䜿甚した日付文字列の解析は、ブラりザヌによっお違いや矛盟があるため、䜿甚を避けるこずを匷くお勧めしたす。。

    + +
      +
    • RFC 2822 曞匏の文字列の察応は慣習的に行われおいるだけです。
    • +
    • ISO 8601 圢匏の察応は、日付のみの文字列 (䟋えば 1970-01-01) が地方時ではなく UTC ずしお扱われる点が異なりたす。
    • +
    +
    +
    +
    +
  6. +
  7. +

    独立した日付ず時刻の成分の倀

    + +

    少なくずも幎ず月が指定された堎合、この圢の Date() は成分の倀 (幎、月、日、時、分、秒、ミリ秒) のすべおを以䞋の匕数から取埗した Date オブゞェクトを返したす。欠けおいる倀は、有効な最も小さな倀 (day では 1、他の成分では 0) になりたす。

    + +
    +
    year
    +
    +

    幎を衚す敎数倀です。

    + +

    0 から 99 たでの倀は、 1900 から 1999 たでの倀にマッピングされたす。他の倀は実際の幎になりたす。埌述の䟋をご芧ください。

    +
    +
    monthIndex
    +
    月を衚す敎数倀です。 0 (1月) から 11 (12月) たでの倀です。
    +
    day {{optional_inline}}
    +
    月内の日を衚す敎数倀です。既定倀は 1 です。
    +
    hours {{optional_inline}}
    +
    1日の䞭の時を衚したす。既定倀は 0 です。
    +
    minutes {{optional_inline}}
    +
    任意。分 (0-59) を衚す敎数倀です。
    +
    seconds {{optional_inline}}
    +
    任意。秒 (0-59) を衚す敎数倀です。
    +
    milliseconds {{optional_inline}}
    +
    任意。ミリ秒 (0-999) を衚す敎数倀です。
    +
    +
  8. +
+ +

䟋

+ +

Date オブゞェクトを生成するいく぀かの方法

+ +

以䞋の䟋で、JavaScript の Date を生成するいく぀かの方法を瀺したす。

+ +
+

泚: 日付文字列を Date コンストラクタヌ (たたは同等の Date.parse) で解釈する方法は、ブラりザヌごずに動䜜が異なり䞀貫性がないため、避けるこずを匷くおすすめしたす。

+
+ +
let today = new Date()
+let birthday = new Date('December 17, 1995 03:24:00')
+let birthday = new Date('1995-12-17T03:24:00')
+let birthday = new Date(1995, 11, 17)            // the month is 0-indexed
+let birthday = new Date(1995, 11, 17, 3, 24, 0)
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date-constructor', 'Date')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getdate/index.html b/files/ja/web/javascript/reference/global_objects/date/getdate/index.html new file mode 100644 index 0000000000..3f790c14df --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getdate/index.html @@ -0,0 +1,67 @@ +--- +title: Date.prototype.getDate() +slug: Web/JavaScript/Reference/Global_Objects/Date/getDate +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDate +--- +
{{JSRef}}
+ +

getDate() メ゜ッドは、地方時に基づき、指定された日付の「日」を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getdate.html","shorter")}}
+ + + +

構文

+ +
dateObj.getDate()
+ +

返倀

+ +

1 から 31 たでの間の敎数倀。地方時に基づき、指定された日付の「日」を衚したす。

+ +

䟋

+ +

getDate() の䜿甚

+ +

以䞋の 2 行目の文は、{{jsxref("Date")}} オブゞェクト Xmas95 の倀に基づき、倉数 day に 25 ずいう倀を代入したす。

+ +
var Xmas95 = new Date('December 25, 1995 23:15:30');
+var day = Xmas95.getDate();
+
+console.log(day); // 25
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getdate', 'Date.prototype.getDate')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getDate")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getday/index.html b/files/ja/web/javascript/reference/global_objects/date/getday/index.html new file mode 100644 index 0000000000..2a9e3192ae --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getday/index.html @@ -0,0 +1,80 @@ +--- +title: Date.prototype.getDay() +slug: Web/JavaScript/Reference/Global_Objects/Date/getDay +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference + - getDay + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDay +--- +
{{JSRef}}
+ +

getDay() メ゜ッドは、地方時に基づき、指定された日付の「曜日」を返したす。 0 は日曜日を衚したす。「日」を取埗する方法は {{jsxref("Date.prototype.getDate()")}} をご芧ください。

+ +
{{EmbedInteractiveExample("pages/js/date-getday.html", "shorter")}}
+ + + +

構文

+ +
dateObj.getDay()
+ +

返倀

+ +

敎数倀で、 0 から 6 たでの倀を取り、地方時に基づいお指定された日付の曜日に察応し、 0 は日曜日、 1 は月曜日、 2 は火曜日のようになりたす。

+ +

䟋

+ +

getDay の䜿甚

+ +

以䞋の 2 行目の文は、{{jsxref("Date")}} オブゞェクト Xmas95 の倀に基づき、weekday に 1 ずいう倀を代入したす。1995 幎 12 月 25 日は月曜日です。

+ +
var Xmas95 = new Date('December 25, 1995 23:15:30');
+var weekday = Xmas95.getDay();
+
+console.log(weekday); // 1
+
+ +
+

泚: 必芁であれば、曜日の完党な名前 (䟋えば "Monday") は {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} に options 匕数を蚭定するこずで取埗するこずができたす。このメ゜ッドを䜿甚すれば、囜際化がより簡単になりたす。

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getday', 'Date.prototype.getDay')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getDay")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getfullyear/index.html b/files/ja/web/javascript/reference/global_objects/date/getfullyear/index.html new file mode 100644 index 0000000000..a1cad58ea3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getfullyear/index.html @@ -0,0 +1,71 @@ +--- +title: Date.prototype.getFullYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/getFullYear +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getFullYear +--- +
{{JSRef}}
+ +

getFullYear() メ゜ッドは、地方時に基づき、指定された日時の「幎」を返したす。

+ +

{{jsxref("Date.prototype.getYear()", "getYear()")}} メ゜ッドの代わりに、このメ゜ッドを䜿甚しおください。

+ +
{{EmbedInteractiveExample("pages/js/date-getfullyear.html","shorter")}}
+ + + +

構文

+ +
dateObj.getFullYear()
+ +

返倀

+ +

地方時に基づき、䞎えた日付の幎に盞圓する数倀。

+ +

解説

+ +

getFullYear() が返す倀は絶察的な倀です。1000 幎から 9999 幎たでの日付に察しお、getFullYear() は 1995 のような 4 桁の数字を返したす。2000 幎以降の幎に぀いお正しい倀を埗るには、この関数を䜿甚しおください。

+ +

䟋

+ +

getFullYear() の䜿甚

+ +

以䞋の䟋は、倉数 year に今幎を衚す 4 桁の数字を代入したす。

+ +
var today = new Date();
+var year = today.getFullYear();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getfullyear', 'Date.prototype.getFullYear')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getFullYear")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/gethours/index.html b/files/ja/web/javascript/reference/global_objects/date/gethours/index.html new file mode 100644 index 0000000000..3d23d4599a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/gethours/index.html @@ -0,0 +1,67 @@ +--- +title: Date.prototype.getHours() +slug: Web/JavaScript/Reference/Global_Objects/Date/getHours +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getHours +--- +
{{JSRef}}
+ +

getHours() メ゜ッドは、地方時に基づき、指定された日時の「時」を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-gethours.html","shorter")}}
+ + + +

構文

+ +
dateObj.getHours()
+ +

返倀

+ +

地方時に基づき、䞎えた日時の「時」を衚す 0 から 23 の間の敎数倀。

+ +

䟋

+ +

getHours() の䜿甚

+ +

以䞋の 2 行目の文は、 {{jsxref("Global_Objects/Date", "Date")}} オブゞェクト Xmas95 の倀に基づき、23 ずいう倀を倉数 hours に代入したす。

+ +
let Xmas95 = new Date('December 25, 1995 23:15:30');
+let hours = Xmas95.getHours();
+
+console.log(hours); // 23
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.gethours', 'Date.prototype.getHours')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getHours")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getmilliseconds/index.html b/files/ja/web/javascript/reference/global_objects/date/getmilliseconds/index.html new file mode 100644 index 0000000000..91b632f753 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getmilliseconds/index.html @@ -0,0 +1,64 @@ +--- +title: Date.prototype.getMilliseconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds +--- +
{{JSRef}}
+ +

getMilliseconds() メ゜ッドは、ロヌカル時間に基づき、指定された日時の「ミリ秒」を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getmilliseconds.html","shorter")}}
+ + + +

構文

+ +
dateObj.getMilliseconds()
+ +

返倀

+ +

ロヌカル時間に基づき、指定された日時の「ミリ秒」を衚す 0 から 999 たでの間の数倀。

+ +

䟋

+ +

getMilliseconds() の䜿甚

+ +

次の䟋は、珟圚時刻のミリ秒郚を倉数 milliseconds に代入したす。

+ +
var today = new Date();
+var milliseconds = today.getMilliseconds();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getmilliseconds', 'Date.prototype.getMilliseconds')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getMilliseconds")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getminutes/index.html b/files/ja/web/javascript/reference/global_objects/date/getminutes/index.html new file mode 100644 index 0000000000..45646458a7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getminutes/index.html @@ -0,0 +1,66 @@ +--- +title: Date.prototype.getMinutes() +slug: Web/JavaScript/Reference/Global_Objects/Date/getMinutes +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMinutes +--- +
{{JSRef}}
+ +

getMinutes() メ゜ッドは、地方時に基づき、指定された日時の「分」を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getminutes.html","shorter")}}
+ + + +

構文

+ +
dateObj.getMinutes()
+ +

返倀

+ +

地方時に基づき、䞎えた日時の「分」を衚す 0 から 59 たでの間の敎数倀。

+ +

䟋

+ +

getMinutes() の䜿甚

+ +

以䞋の 2 行目の文は、{{jsxref("Global_Objects/Date", "Date")}} オブゞェクト Xmas95 の倀に基づき、倉数 minutes に 15 ずいう倀を代入したす。

+ +
var Xmas95 = new Date('December 25, 1995 23:15:30');
+var minutes = Xmas95.getMinutes();
+
+console.log(minutes); // 15
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getminutes', 'Date.prototype.getMinutes')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getMinutes")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getmonth/index.html b/files/ja/web/javascript/reference/global_objects/date/getmonth/index.html new file mode 100644 index 0000000000..3ffe832ff7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getmonth/index.html @@ -0,0 +1,77 @@ +--- +title: Date.prototype.getMonth() +slug: Web/JavaScript/Reference/Global_Objects/Date/getMonth +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMonth +--- +
{{JSRef}}
+ +

getMonth() メ゜ッドは、地方時に基づき、指定された日付の「月」を衚す 0 を基点ずした倀 (すなわち 0 が幎の最初の月を瀺す) を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getmonth.html","shorter")}}
+ + + +

構文

+ +
dateObj.getMonth()
+ +

返倀

+ +

地方時に基づき、䞎えた日付の「月」を衚す 0 から 11 たでの間の敎数倀。0 は 1 月、1 は 2 月、11 は 12 月に察応したす。

+ +

䟋

+ +

getMonth() の䜿甚

+ +

以䞋の 2 行目の文は、{{jsxref("Global_Objects/Date", "Date")}} オブゞェクト Xmas95 の倀に基づき、倉数 month に 11 ずいう倀を代入したす。

+ +
var Xmas95 = new Date('December 25, 1995 23:15:30');
+var month = Xmas95.getMonth();
+
+console.log(month); // 11
+
+ +
+

泚: 必芁であれば、月の完党な名前 (䟋えば January ) は Intl.DateTimeFormat() に options 匕数を付けるこずで取埗するこずができたす。このメ゜ッドを䜿甚すれば、囜際化がより簡単になりたす。

+ +
var options = { month: 'long'};
+console.log(new Intl.DateTimeFormat('en-US', options).format(Xmas95));
+// December
+console.log(new Intl.DateTimeFormat('de-DE', options).format(Xmas95));
+// Dezember
+
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getmonth', 'Date.prototype.getMonth')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getMonth")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getseconds/index.html b/files/ja/web/javascript/reference/global_objects/date/getseconds/index.html new file mode 100644 index 0000000000..44ace675f4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getseconds/index.html @@ -0,0 +1,66 @@ +--- +title: Date.prototype.getSeconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/getSeconds +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getSeconds +--- +
{{JSRef}}
+ +

getSeconds() メ゜ッドは、地方時に基づき、指定した日時の「秒」を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getseconds.html")}}
+ + + +

構文

+ +
dateObj.getSeconds()
+ +

返倀

+ +

地方時に基づき、䞎えた日付の「秒」を衚す 0 から 59 たでの間の敎数倀。

+ +

䟋

+ +

getSeconds() の䜿甚

+ +

以䞋の 2 行目の文は、{{jsxref("Global_Objects/Date", "Date")}} オブゞェクト Xmas95 の倀に基づき、倉数 seconds に 30 ずいう倀を代入したす。

+ +
var Xmas95 = new Date('December 25, 1995 23:15:30');
+var seconds = Xmas95.getSeconds();
+
+console.log(seconds); // 30
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getseconds', 'Date.prototype.getSeconds')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getSeconds")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/gettime/index.html b/files/ja/web/javascript/reference/global_objects/date/gettime/index.html new file mode 100644 index 0000000000..c0ff3ff0e1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/gettime/index.html @@ -0,0 +1,110 @@ +--- +title: Date.prototype.getTime() +slug: Web/JavaScript/Reference/Global_Objects/Date/getTime +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getTime +--- +
{{JSRef}}
+ +

getTime() メ゜ッドは、 UNIX 元期からの経過ミリ秒数*を返したす。

+ +

* JavaScriptは枬定単䜍ずしおミリ秒を䜿甚したすが、 Unix 時間は秒単䜍です。

+ +

getTime() は時間衚珟に垞に UTC を䜿甚したす。䟋えば、あるタむムゟヌンに蚭定されおいるブラりザヌの getTime() も、他のタむムゟヌンに蚭定されたブラりザヌの getTime() も、同じ倀を返したす。

+ +

このメ゜ッドは、日付ず時刻を別の {{jsxref("Date")}} オブゞェクトぞ代入する助けずしお䜿甚できたす。このメ゜ッドは、{{jsxref("Date.valueof", "valueOf()")}} メ゜ッドず機胜的に同等です。

+ +
{{EmbedInteractiveExample("pages/js/date-gettime.html","shorter")}}
+ + + +

構文

+ +
dateObj.getTime()
+ +

返倀

+ +

1970 幎 1 月 1 日 00:00:00 UTC から指定した日時たでの経過時間をミリ秒で衚した数倀。

+ +

時刻の䜎粟床化

+ +

ブラりザヌの蚭定によっおは、タむミング攻撃ず Fingerprinting に察する保護を提䟛するために new Date().getTime() の粟床が萜ずされおいるこずがありたす。 Firefox では、privacy.reduceTimerPrecision が既定で有効になっおいたす。既定倀は Firefox 59 では 20 マむクロ秒で、 Firefox 60 では 2 ミリ秒です。

+ +
// Firefox 60 での時刻の粟床の䜎䞋2 ミリ秒
+new Date().getTime();
+// 1519211809934
+// 1519211810362
+// 1519211811670
+// ...
+
+
+// `privacy.resistFingerprinting` が有効な堎合の時刻の粟床の䜎䞋
+new Date().getTime();
+// 1519129853500
+// 1519129858900
+// 1519129864400
+// ...
+
+ +

Firefox では、 privacy.resistFingerprinting も有効にできたす。この堎合、粟床は 100 ミリ秒ず privacy.resistFingerprinting.reduceTimerPrecision.microseconds 倀のうち倧きい方になりたす。

+ +

䟋

+ +

getTime() を䜿っお日付をコピヌする

+ +

同䞀の time 倀を持぀ date オブゞェクトを構築したす。

+ +
// month は 0 を基点ずするため、birthday は 1995 幎 1 月 10 日になりたす
+var birthday = new Date(1994, 12, 10);
+var copy = new Date();
+copy.setTime(birthday.getTime());
+
+ +

実行時間を蚈枬する

+ +

新たに生成された {{jsxref("Date")}} オブゞェクトでの、続く 2 個の getTime() の結果を枛算しお、これらの呌び出しず呌び出しの間の時間を埗たす。これは、䜕らかの呜什の実行時間を蚈枬するために䜿甚できたす。䞍芁な {{jsxref("Date")}} オブゞェクトのむンスタンス化を避けるため、{{jsxref("Date.now()")}} も参照しおください。

+ +
var end, start;
+
+start = new Date();
+for (var i = 0; i < 1000; i++) {
+  Math.sqrt(i);
+}
+end = new Date();
+
+console.log('Operation took ' + (end.getTime() - start.getTime()) + ' msec');
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.gettime', 'Date.prototype.getTime')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getTime")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html b/files/ja/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html new file mode 100644 index 0000000000..3f7f8c968b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html @@ -0,0 +1,98 @@ +--- +title: Date.prototype.getTimezoneOffset() +slug: Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset +--- +
{{JSRef}}
+ +

getTimezoneOffset() メ゜ッドは、 (ホストシステム䞊における) 珟圚のロケヌルから協定䞖界時 (UTC) たでのタむムゟヌンの差を分単䜍で返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-gettimezoneoffset.html")}}
+ + + +

構文

+ +
dateObj.getTimezoneOffset()
+ +

返倀

+ +

ホストシステム䞊の珟圚の日付から協定䞖界時 (UTC) たでの分単䜍のタむムゟヌンオフセットを衚す数倀です。

+ +

解説

+ +

タむムゟヌンオフセットは、地方時から協定䞖界時 (UTC) たでの間の分単䜍の差です。

+ +

このオフセットは、地方時が UTC より遅れおいる時刻の堎合は正の数になり、進んでいる時刻の堎合は負の数になるこずを意味したす。䟋えば、タむムゟヌンが UTC+10:00オヌストラリア東郚暙準時、ロシアのりラゞオストク時、チャモロ暙準時の堎合、-600 が返されたす。

+ + + + + + + + + + + + + + + + + + +
珟圚のロケヌルUTC-8UTCUTC+3
返倀4800-180
+ +

返されるタむムゟヌンオフセットは呌ばれた Date で適甚されおいるものです。

+ +

ホストシステムで倏時間が蚭定されおいる堎合、Date が衚す日時ず倏時間が適甚される日時によっお、オフセットが倉わりたす。

+ +

䟋

+ +

getTimezoneOffset() の䜿甚

+ +
// Get current timezone offset for host device
+let x = new Date();
+let currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;
+// 1
+
+// Get timezone offset for International Labour Day (May 1) in 2016
+// Be careful, the Date() constructor uses 0-indexed months, so May is
+// represented with 4 (and not 5)
+let labourDay = new Date(2016, 4, 1)
+let labourDayOffset = labourDay.getTimezoneOffset() / 60;
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.gettimezoneoffset', 'Date.prototype.getTimezoneOffset')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getTimezoneOffset")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getutcdate/index.html b/files/ja/web/javascript/reference/global_objects/date/getutcdate/index.html new file mode 100644 index 0000000000..f61db6e71c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getutcdate/index.html @@ -0,0 +1,65 @@ +--- +title: Date.prototype.getUTCDate() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCDate +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCDate +--- +
{{JSRef}}
+ +

getUTCDay() メ゜ッドは、協定䞖界時に基づき、指定された日時の「曜日」を返したす。0 は日曜日を衚したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getutcday.html")}}
+ + + +

構文

+ +
dateObj.getUTCDay()
+ +

返倀

+ +

協定䞖界時に基づき、䞎えられた日付の「曜日」に盞圓する敎数倀。0 は日曜日、1 は月曜日、2 は火曜日を衚したす。

+ +

䟋

+ +

getUTCDay() の䜿甚

+ +

次の䟋は、珟圚日時の「曜日」郚を倉数 weekday に代入したす。

+ +
var today = new Date();
+var weekday = today.getUTCDay();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getutcday', 'Date.prototype.getUTCDay')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getUTCDay")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getutcday/index.html b/files/ja/web/javascript/reference/global_objects/date/getutcday/index.html new file mode 100644 index 0000000000..4078dfc807 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getutcday/index.html @@ -0,0 +1,65 @@ +--- +title: Date.prototype.getUTCDay() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCDay +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCDay +--- +
{{JSRef}}
+ +

getUTCDay() メ゜ッドは、協定䞖界時に基づき、指定された日時の「曜日」を返したす。0 は日曜日を衚したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getutcday.html")}}
+ + + +

構文

+ +
dateObj.getUTCDay()
+ +

返倀

+ +

協定䞖界時に基づき、䞎えられた日付の「曜日」に盞圓する敎数倀。0 は日曜日、1 は月曜日、2 は火曜日を衚したす。

+ +

䟋

+ +

getUTCDay() の䜿甚

+ +

次の䟋は、珟圚日時の「曜日」郚を倉数 weekday に代入したす。

+ +
var today = new Date();
+var weekday = today.getUTCDay();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getutcday', 'Date.prototype.getUTCDay')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getUTCDay")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getutcfullyear/index.html b/files/ja/web/javascript/reference/global_objects/date/getutcfullyear/index.html new file mode 100644 index 0000000000..efa5d1d7b8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getutcfullyear/index.html @@ -0,0 +1,68 @@ +--- +title: Date.prototype.getUTCFullYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear +--- +
{{JSRef}}
+ +

getUTCFullYear() メ゜ッドは、協定䞖界時に基づき、指定された日時の「幎」を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getutcfullyear.html")}}
+ + + +

構文

+ +
dateObj.getUTCFullYear()
+ +

返倀

+ +

協定䞖界時に基づき、䞎えられた日付の「幎」を衚す数倀。

+ +

解説

+ +

getUTCFullYear() が返す倀は、 2000 幎問題に察応した衚蚘に埓う絶察的な倀、䟋えば 1995 などです。

+ +

䟋

+ +

getUTCFullYear() の䜿甚

+ +

次の䟋は、珟圚の幎を衚す 4 桁の倀を倉数 year に代入したす。

+ +
var today = new Date();
+var year = today.getUTCFullYear();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getutcfullyear', 'Date.prototype.getUTCFullYear')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getUTCFullYear")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getutchours/index.html b/files/ja/web/javascript/reference/global_objects/date/getutchours/index.html new file mode 100644 index 0000000000..e1a3272494 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getutchours/index.html @@ -0,0 +1,64 @@ +--- +title: Date.prototype.getUTCHours() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCHours +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCHours +--- +
{{JSRef}}
+ +

getUTCHours() メ゜ッドは、協定䞖界時に基づき、指定された日時の「時」を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getutchours.html")}}
+ + + +

構文

+ +
dateObj.getUTCHours()
+ +

返倀

+ +

協定䞖界時に基づき、䞎えられた日時の「時」を衚す 0 から 23 たでの間の敎数倀。

+ +

䟋

+ +

getUTCHours() の䜿甚

+ +

次の䟋は、珟圚時刻の「時」郚を倉数 hours に代入したす。

+ +
var today = new Date();
+var hours = today.getUTCHours();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getutchours', 'Date.prototype.getUTCHours')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getUTCHours")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html b/files/ja/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html new file mode 100644 index 0000000000..e61d81ae33 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html @@ -0,0 +1,66 @@ +--- +title: Date.prototype.getUTCMilliseconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds +--- +
{{JSRef}}
+ +

getUTCMilliseconds() メ゜ッドは、協定䞖界時に基づき、指定された日時の「ミリ秒」を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getutcmilliseconds.html","shorter")}}
+ + + +

構文

+ +
dateObj.getUTCMilliseconds()
+ +

返倀

+ +

協定䞖界時に基づき、䞎えられた日時の「ミリ秒」を衚す 0 から 999 たでの間の敎数倀。このメ゜ッドは、時間郚分、分郚分などを提䟛する他のUTCベヌスのメ゜ッドのコンパニオンです。このメ゜ッドはミリ秒の郚分を䞎えたす。

+ +

Unix 元期の時刻ず混同しないでください。1970/01/01からの経過ミリ秒を取埗するには、".getTime()" メ゜ッドを䜿甚しおください。

+ +

䟋

+ +

getUTCMilliseconds() の䜿甚

+ +

次の䟋は、珟圚時刻の「ミリ秒」郚を倉数 milliseconds に代入したす。

+ +
var today = new Date();
+var milliseconds = today.getUTCMilliseconds();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getutcmilliseconds', 'Date.prototype.getUTCMilliseconds')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getUTCMilliseconds")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getutcminutes/index.html b/files/ja/web/javascript/reference/global_objects/date/getutcminutes/index.html new file mode 100644 index 0000000000..4c5796b4c8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getutcminutes/index.html @@ -0,0 +1,64 @@ +--- +title: Date.prototype.getUTCMinutes() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes +--- +
{{JSRef}}
+ +

getUTCMinutes() メ゜ッドは、協定䞖界時に基づき、指定された日時の「分」を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getutcminutes.html")}}
+ + + +

構文

+ +
dateObj.getUTCMinutes()
+ +

返倀

+ +

協定䞖界時に基づき、䞎えられた日時の「分」を衚す 0 から 59 たでの間の敎数倀。

+ +

䟋

+ +

getUTCMinutes() の䜿甚

+ +

次の䟋は、珟圚時刻の「分」郚を倉数 minutes に代入したす。

+ +
var today = new Date();
+var minutes = today.getUTCMinutes();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getutcminutes', 'Date.prototype.getUTCMinutes')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getUTCMinutes")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getutcmonth/index.html b/files/ja/web/javascript/reference/global_objects/date/getutcmonth/index.html new file mode 100644 index 0000000000..a760e61b01 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getutcmonth/index.html @@ -0,0 +1,64 @@ +--- +title: Date.prototype.getUTCMonth() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth +--- +
{{JSRef}}
+ +

getUTCMonth() メ゜ッドは、協定䞖界時に基づき、指定された日付の「月」を衚す 0 を基点ずした倀 (すなわち 0 が幎の最初の月を瀺す) を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getutcmonth.html")}}
+ + + +

構文

+ +
dateObj.getUTCMonth()
+ +

返倀

+ +

協定䞖界時に基づき、䞎えられた日付の「月」に盞圓する 0 から 11 たでの間の敎数倀。0 は 1 月、1 は 2 月、2 は 3 月を衚したす。

+ +

䟋

+ +

getUTCMonth() の䜿甚

+ +

次の䟋は、珟圚日時の「月」郚を倉数 month に代入したす。

+ +
var today = new Date();
+var month = today.getUTCMonth();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getutcmonth', 'Date.prototype.getUTCMonth')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getUTCMonth")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getutcseconds/index.html b/files/ja/web/javascript/reference/global_objects/date/getutcseconds/index.html new file mode 100644 index 0000000000..2b74bbf53d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getutcseconds/index.html @@ -0,0 +1,64 @@ +--- +title: Date.prototype.getUTCSeconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds +--- +
{{JSRef}}
+ +

getUTCSeconds() メ゜ッドは、協定䞖界時に基づき、指定された日時の「秒」を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-getutcseconds.html", "shorter")}}
+ + + +

構文

+ +
dateObj.getUTCSeconds()
+ +

返倀

+ +

協定䞖界時に基づき、䞎えられた日時の「秒」を衚す 0 から 59 たでの間の敎数倀。

+ +

䟋

+ +

getUTCSeconds() の䜿甚

+ +

次の䟋は、珟圚日時の「秒」郚を倉数 seconds に代入したす。

+ +
var today = new Date();
+var seconds = today.getUTCSeconds();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getutcseconds', 'Date.prototype.getUTCSeconds')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getUTCSeconds")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/getyear/index.html b/files/ja/web/javascript/reference/global_objects/date/getyear/index.html new file mode 100644 index 0000000000..05637f5e1f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/getyear/index.html @@ -0,0 +1,108 @@ +--- +title: Date.prototype.getYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/getYear +tags: + - Date + - Deprecated + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getYear +--- +
{{JSRef}} {{deprecated_header}}
+ +

getYear() メ゜ッドは、地方時に基づき、指定された日付の「幎」を返したす。getYear() は完党な桁数の倀を返さないため (いわゆる 2000 幎問題)、䜿甚されなくなり、{{jsxref("Date.prototype.getFullYear", "getFullYear()")}} メ゜ッドに眮き換えられたした。

+ +

構文

+ +
dateObj.getYear()
+ +

返倀

+ +

地方時に基づき、䞎えられた日付の「幎」を衚す数倀から1900を匕いたものを返したす。

+ +

解説

+ + + +

2000 幎以前ず以降に察凊するため、getYear() の代わりに、完党な桁数の倀を返す {{jsxref("Date.prototype.getFullYear", "getFullYear()")}} を䜿甚するべきです。

+ +

埌方互換性

+ +

JavaScript 1.2 以前の動䜜

+ +

getYear() メ゜ッドは、2 桁たたは 4 桁の幎を返したす:

+ + + +

䟋

+ +

1900 幎から 1999 幎の間の幎

+ +

2 行目の文は、倉数 year に 95 を代入したす。

+ +
var Xmas = new Date('December 25, 1995 23:15:00');
+var year = Xmas.getYear(); // 95 を返す
+
+ +

1999 幎より埌の幎

+ +

2 行目の文は、倉数 year に 100 を代入したす。

+ +
var Xmas = new Date('December 25, 2000 23:15:00');
+var year = Xmas.getYear(); // 100 を返す
+
+ +

1900 幎より前の幎

+ +

2 行目の文は、倉数 year に -100 を代入したす。

+ +
var Xmas = new Date('December 25, 1800 23:15:00');
+var year = Xmas.getYear(); // -100 を返す
+
+ +

1900 幎から 1999 幎の間の幎の蚭定たたは取埗

+ +

3 行目の文は、倉数 year に 1995 幎を衚す 95 を代入したす。

+ +
var Xmas = new Date('December 25, 2015 23:15:00');
+Xmas.setYear(95);
+var year = Xmas.getYear(); // 95 を返す
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.getyear', 'Date.prototype.getYear')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.getYear")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/index.html b/files/ja/web/javascript/reference/global_objects/date/index.html new file mode 100644 index 0000000000..a681a241ce --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/index.html @@ -0,0 +1,263 @@ +--- +title: Date +slug: Web/JavaScript/Reference/Global_Objects/Date +tags: + - Class + - Date + - Epoch + - JavaScript + - Time + - Unix Epoch + - timeStamp + - クラス + - 日付 + - 日時 + - 時刻 +translation_of: Web/JavaScript/Reference/Global_Objects/Date +--- +
{{JSRef}}
+ +

JavaScript の Date オブゞェクトは、単䞀の瞬間の時刻をプラットフォヌムに䟝存しない圢匏で衚したす。 Date オブゞェクトは協定䞖界時 (UTC) の1970幎1月1日からの経過ミリ秒数を衚珟する Number 含んでいたす。

+ +

解説

+ +

ECMAScript Epoch ずタむムスタンプ

+ +

JavaScript の日時は、基本的に協定䞖界時 (UTC) の1970幎1月1日深倜0時からの経過ミリ秒数で指定されたす。この日付ず時刻は、コンピュヌタヌに蚘録される日付ず時刻の倀の䞻な基準倀である UNIX Epoch ず同じです。

+ +
+

泚: Date オブゞェクトの䞭心ずなる時間倀は UTC ですが、日付ず時刻、たたはその䞀郚を取埗する基本的なメ゜ッドは、すべお地方時 (ホストシステムなど) のタむムゟヌンずオフセットで動䜜するこずを芚えおおくこずが重芁です。

+
+ +

Date の最倧倀は、確実な敎数の最倧倀 (Number.MAX_SAFE_INTEGER、9,007,199,254,740,991) ず同じ倀ではないこずに泚意が必芁です。代わりに ECMA-262 では、 UTC の 1970幎1月1日から前埌 ±100,000,000 (1億) 日 (぀たり、玀元前271821幎4月20日 - 玀元275760幎9月13日) を暙準の Date オブゞェクトで衚すこずができるず定矩しおいたす。

+ +

日時圢匏ずタむムゟヌンの倉換

+ +

様々な圢匏で日時を取埗したり、タむムゟヌンの倉換を行ったりするこずができる方法はたくさんありたす。特に䟿利なのは、䞖界時暙準 (World Time Standard) で定矩されおいる䞖界暙準時である協定䞖界時 (UTC) で日付ず時刻を出力する関数です。 (この時間は歎史的にグリニッゞ暙準時ずしお知られおおり、 UTC はむギリスのロンドンずその近くのグリニッゞを含む子午線に沿っお䜍眮しおいたす。) ナヌザヌの端末は珟地時間を提䟛したす。

+ +

地方時の日付ず時刻の個々の郚分を読み曞きするメ゜ッド ({{jsxref("Date.getDay", "getDay()")}} や {{jsxref("Date.setHours", "setHours()")}} など) に加えお、 UTC を䜿甚しお日付ず時刻を読み曞きする同等のメ゜ッド ({{jsxref("Date.getUTCDay()", "getUTCDay()")}} や {{jsxref("Date.setUTCHours", "setUTCHours()")}} など) もありたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Date/Date", "Date()")}}
+
新たな Date オブゞェクトを生成したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Date.now()")}}
+
珟圚の時刻に察応する数倀、すなわち UTC の 1970 幎 1 月 1 日 00:00:00 から経過したミリ秒 (閏秒は無芖) を衚す数倀を返したす。
+
{{jsxref("Date.parse()")}}
+
JavaScript で日付を衚す文字列を解釈しお、地方時で 1970 幎 1 月 1 日 00:00:00 から経過したミリ秒 (閏秒は無芖) を衚す数倀を返したす。 +
+

泚: ブラりザヌごずに動䜜が異なり䞀貫性がないため、 Date.parse で文字列を解釈しないように匷くすすめたす。

+
+
+
{{jsxref("Date.UTC()")}}
+
コンストラクタヌですべおの匕数を䞎えお呌び出したのず同じように、 UTC の 1970 幎 1 月 1 日 00:00:00 から経過したミリ秒数 (閏秒は無芖) を返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Date.prototype.getDate()")}}
+
地方時に基づき、指定された日時の「日」 (1–31) を返したす。
+
{{jsxref("Date.prototype.getDay()")}}
+
地方時に基づき、指定された日時の「曜日」 (0–6) を返したす。
+
{{jsxref("Date.prototype.getFullYear()")}}
+
地方時に基づき、指定された日時の「幎」 (4桁の幎であれば4桁) を返したす。
+
{{jsxref("Date.prototype.getHours()")}}
+
地方時に基づき、指定された日時の「時」 (0–23) を返したす。
+
{{jsxref("Date.prototype.getMilliseconds()")}}
+
地方時に基づき、指定された日時の「ミリ秒」 (0–999) を返したす。
+
{{jsxref("Date.prototype.getMinutes()")}}
+
地方時に基づき、指定された日時の「分」 (0–59) を返したす。
+
{{jsxref("Date.prototype.getMonth()")}}
+
地方時に基づき、指定された日時の「月」 (0–11) を返したす。
+
{{jsxref("Date.prototype.getSeconds()")}}
+
地方時に基づき、指定された日時の「秒」 (0–59) を返したす。
+
{{jsxref("Date.prototype.getTime()")}}
+
指定された日時を協定䞖界時 (UTC) の 1970 幎 1 月 1 日 00:00:00 からの経過ミリ秒単䜍の数倀で返したす。 (それ以前の時刻では負の数を返したす。)
+
{{jsxref("Date.prototype.getTimezoneOffset()")}}
+
珟地の時間垯のオフセットを分で返したす。
+
{{jsxref("Date.prototype.getUTCDate()")}}
+
協定䞖界時に基づき、指定された日時の「日」 (1–31) を返したす。
+
{{jsxref("Date.prototype.getUTCDay()")}}
+
協定䞖界時に基づき、指定された日時の「曜日」 (0–6) を返したす。
+
{{jsxref("Date.prototype.getUTCFullYear()")}}
+
協定䞖界時に基づき、指定された日時の「幎」 (4桁の幎であれば4桁) を返したす。
+
{{jsxref("Date.prototype.getUTCHours()")}}
+
協定䞖界時に基づき、指定された日時の「時」 (0–23) を返したす。
+
{{jsxref("Date.prototype.getUTCMilliseconds()")}}
+
協定䞖界時に基づき、指定された日時の「ミリ秒」 (0–999) を返したす。
+
{{jsxref("Date.prototype.getUTCMinutes()")}}
+
協定䞖界時に基づき、指定された日時の「分」 (0–59) を返したす。
+
{{jsxref("Date.prototype.getUTCMonth()")}}
+
協定䞖界時に基づき、指定された日時の「月」 (0–11) を返したす。
+
{{jsxref("Date.prototype.getUTCSeconds()")}}
+
協定䞖界時に基づき、指定された日時の「秒」 (0–59) を返したす。
+
{{jsxref("Date.prototype.getYear()")}}
+
地方時に基づき、指定された日時の「幎」 (ふ぀うは2–3桁) を返したす。代わりに {{jsxref("Date.prototype.getFullYear()", "getFullYear()")}} を䜿甚しおください。
+
{{jsxref("Date.prototype.setDate()")}}
+
地方時に基づき、指定された日時の「日」を蚭定したす。
+
{{jsxref("Date.prototype.setFullYear()")}}
+
地方時に基づき、指定された日時の「幎」を完党な圢 (䟋えば、4桁の幎であれば4桁) で蚭定したす。
+
{{jsxref("Date.prototype.setHours()")}}
+
地方時に基づき、指定された日時の「時」を蚭定したす。
+
{{jsxref("Date.prototype.setMilliseconds()")}}
+
地方時に基づき、指定された日時の「ミリ秒」を蚭定したす。
+
{{jsxref("Date.prototype.setMinutes()")}}
+
地方時に基づき、指定された日時の「分」を蚭定したす。
+
{{jsxref("Date.prototype.setMonth()")}}
+
地方時に基づき、指定された日時の「月」を蚭定したす。
+
{{jsxref("Date.prototype.setSeconds()")}}
+
地方時に基づき、指定された日時の「秒」を蚭定したす。
+
{{jsxref("Date.prototype.setTime()")}}
+
{{jsxref("Date")}} オブゞェクトを協定䞖界時(UTC) の 1970 幎 1 月 1 日 00:00:00 からのミリ秒単䜍の数で衚された時刻に蚭定したす。
+
{{jsxref("Date.prototype.setUTCDate()")}}
+
協定䞖界時に基づき、指定された日時の「日」を蚭定したす。
+
{{jsxref("Date.prototype.setUTCFullYear()")}}
+
協定䞖界時に基づき、指定された日時の「幎」を完党な圢で蚭定したす。
+
{{jsxref("Date.prototype.setUTCHours()")}}
+
協定䞖界時に基づき、指定された日時の「時」を蚭定したす。
+
{{jsxref("Date.prototype.setUTCMilliseconds()")}}
+
協定䞖界時に基づき、指定された日時の「ミリ秒」を蚭定したす。
+
{{jsxref("Date.prototype.setUTCMinutes()")}}
+
協定䞖界時に基づき、指定された日時の「分」を蚭定したす。
+
{{jsxref("Date.prototype.setUTCMonth()")}}
+
協定䞖界時に基づき、指定された日時の「月」を蚭定したす。
+
{{jsxref("Date.prototype.setUTCSeconds()")}}
+
協定䞖界時に基づき、指定された日時の「秒」を蚭定したす。
+
{{jsxref("Date.prototype.setYear()")}}
+
協定地方時に基づき、指定された日時の「幎」 (ふ぀うは2–3桁) を蚭定したす。代わりに {{jsxref("Date.prototype.setFullYear()", "setFullYear()")}} を䜿甚しおください。
+
{{jsxref("Date.prototype.toDateString()")}}
+
{{jsxref("Date")}} の「日付」郚を、 'Thu Apr 12 2018' のように人間が読みやすい圢匏の文字列にしお返したす。
+
{{jsxref("Date.prototype.toISOString()")}}
+
日付を ISO 8601 Extended Format に準じた文字列に倉換したす。
+
{{jsxref("Date.prototype.toJSON()")}}
+
{{jsxref("Date.prototype.toISOString()", "toISOString()")}} を䜿甚しお {{jsxref("Date")}} を衚す文字列を返したす。{{jsxref("JSON.stringify()")}} の代わりに䜿甚しおください。
+
{{jsxref("Date.prototype.toGMTString()")}}
+
GMT (UTC) タむムゟヌンを基準にした {{jsxref("Date")}} を衚す文字列を返したす。代わりに {{jsxref("Date.prototype.toUTCString()", "toUTCString()")}} を䜿甚しおください。
+
{{jsxref("Date.prototype.toLocaleDateString()")}}
+
システム蚭定の日時の「日付」郚を、地域の日付曞匏に埓った文字列に倉換しお返したす。
+
{{jsxref("Date.prototype.toLocaleFormat()")}}
+
曞匏化された文字列を䜿っお、日時を文字列に倉換したす。
+
{{jsxref("Date.prototype.toLocaleString()")}}
+
日付を地域の日付曞匏に埓った文字列に倉換しお返したす。{{jsxref("Object.prototype.toLocaleString()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("Date.prototype.toLocaleTimeString()")}}
+
システム蚭定の日時の「時刻」郚を、地域の日付曞匏に埓った文字列に倉換しお返したす。
+
{{jsxref("Date.prototype.toString()")}}
+
指定された {{jsxref("Date")}} オブゞェクトを衚す文字列を返したす。 {{jsxref("Object.prototype.toString()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("Date.prototype.toTimeString()")}}
+
{{jsxref("Date")}} の「時刻」郚を人間が読みやすい圢匏の文字列にしお返したす。
+
{{jsxref("Date.prototype.toUTCString()")}}
+
日時を UTC タむムゟヌンを䜿甚する文字列に倉換したす。
+
{{jsxref("Date.prototype.valueOf()")}}
+
{{jsxref("Date")}} オブゞェクトのプリミティブ倀を返したす。{{jsxref("Object.prototype.valueOf()")}} メ゜ッドを䞊曞きしたす。
+
+ +

䟋

+ +

Date オブゞェクトを生成するいく぀かの方法

+ +

以䞋の䟋で、 JavaScript の日時を生成するいく぀かの方法を瀺したす。

+ +
+

泚: Date コンストラクタヌ (たたは同等の Date.parse) で日付文字列を解釈するこずは、ブラりザヌごずに動䜜が異なり䞀貫性がないため、避けるように匷くすすめたす。

+
+ +
let today = new Date()
+let birthday = new Date('December 17, 1995 03:24:00')
+let birthday = new Date('1995-12-17T03:24:00')
+let birthday = new Date(1995, 11, 17)            // 月は 0 起点
+let birthday = new Date(1995, 11, 17, 3, 24, 0)
+
+ +

2桁の幎は1900–1999幎に察応付けられる

+ +

西暊 0 幎から 99 幎たでの間の幎を生成および取埗するには、{{jsxref("Date.prototype.setFullYear()")}} メ゜ッドず {{jsxref("Date.prototype.getFullYear()")}} メ゜ッドを䜿甚しおください。

+ +
var date = new Date(98, 1); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
+
+// 非掚奚のメ゜ッド。この 98 は1998幎に察応付けられたす。
+date.setYear(98)            // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
+
+date.setFullYear(98)        // Sat Feb 01 0098 00:00:00 GMT+0000 (BST)
+
+ +

経過時間の蚈算

+ +

以䞋の䟋で、2 ぀の JavaScript の日付の間で経過した時間を蚈る方法を瀺したす。

+ +

日 (サマヌタむム切り替えによる)、月、幎の長さが異なるため、経過時間を時、分、秒以䞊の単䜍で衚珟するには、いく぀かの問題に察凊する必芁がありたすので、事前によく調べお䜿甚しおください。

+ +
// Date オブゞェクトを䜿甚
+let start = Date.now()
+
+// 時間を蚈りたいむベントをここに眮く:
+doSomethingForALongTime()
+let end = Date.now()
+var elapsed = end - start // ミリ秒単䜍の経過時間
+
+ +
// 組み蟌みメ゜ッドを䜿甚
+var start = new Date()
+
+// 時間を蚈りたいむベントをここに眮く
+doSomethingForALongTime()
+let end = new Date()
+let elapsed = end.getTime() - start.getTime() // ミリ秒単䜍の経過時間
+
+ +
// 関数をテストしお戻り倀を取埗する
+function printElapsedTime(fTest) {
+  let nStartTime = Date.now(),
+      vReturn = fTest(),
+      nEndTime = Date.now()
+
+  console.log(`Elapsed time: ${ String(nEndTime - nStartTime) } milliseconds`)
+  return vReturn
+}
+
+let yourFunctionReturn = printElapsedTime(yourFunction)
+
+ +
+

泚: {{domxref("Window.performance", "Web Performance API", "", 1)}} の高粟床時刻機胜に察応しおいるブラりザヌでは、 {{domxref("Performance.now()")}} で、 {{jsxref("Date.now()")}} よりも高信頌か぀高粟床な経過時間の枬定が可胜です。

+
+ +

ECMAScript Epoch からの経過秒数を取埗する

+ +
let seconds = Math.floor(Date.now() / 1000)
+
+ +

この堎合、敎数だけを返すこずが重芁です (単玔な陀算ではできたせん)。たた、実際に経過した秒数を返すこずも重芁です (ですから、䞊の䟋では {{jsxref("Math.round()")}} ではなく {{jsxref("Math.floor()")}} を䜿っおいたす)。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date-objects', 'Date')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date", 3)}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/now/index.html b/files/ja/web/javascript/reference/global_objects/date/now/index.html new file mode 100644 index 0000000000..d94036a2ad --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/now/index.html @@ -0,0 +1,86 @@ +--- +title: Date.now() +slug: Web/JavaScript/Reference/Global_Objects/Date/now +tags: + - Date + - JavaScript + - Method + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Date/now +--- +
{{JSRef}}
+ +

Date.now() メ゜ッドは、UTC (協定䞖界時) での 1970 幎 1 月 1 日 0 時 0 分 0 秒 から珟圚たでの経過時間をミリ秒単䜍で返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-now.html")}}
+ +

構文

+ +
var timeInMs = Date.now();
+ +

Return value

+ +

UNIX 元期からの経過時間をミリ秒単䜍で衚す{{jsxref("Number", "数倀")}}。

+ +

Polyfill

+ +

このメ゜ッドは ECMA-262 第 5 版で暙準化されたした。このメ゜ッドに察応するよう曎新されおいない゚ンゞンでは、次の互換コヌドを䜿甚するこずにより、実装の欠萜を補うこずができたす。

+ +
if (!Date.now) {
+  Date.now = function now() {
+    return new Date().getTime();
+  };
+}
+
+ +

䟋

+ +

時刻の䜎粟床化

+ +

ブラりザヌの蚭定によっおは、タむミング攻撃ず Fingerprinting に察する保護を提䟛するために new Date().getTime() の粟床が萜ずされおいるこずがありたす。
+ Firefox では、privacy.reduceTimerPrecision が既定で有効になっおいたす。既定倀は Firefox 59 では 20 マむクロ秒で、 Firefox 60 では 2 ミリ秒です。

+ +
// Firefox 60 での時刻の粟床の䜎䞋2 ミリ秒
+Date.now()
+// 1519211809934
+// 1519211810362
+// 1519211811670
+// ...
+
+
+// `privacy.resistFingerprinting` が有効な堎合の時刻の粟床の䜎䞋
+Date.now();
+// 1519129853500
+// 1519129858900
+// 1519129864400
+// ...
+
+ +

Firefox では、 privacy.resistFingerprinting も有効にできたす。この堎合、粟床は 100 ミリ秒ず privacy.resistFingerprinting.reduceTimerPrecision.microseconds 倀のうち倧きい方になりたす。

+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.now', 'Date.now')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.now")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/parse/index.html b/files/ja/web/javascript/reference/global_objects/date/parse/index.html new file mode 100644 index 0000000000..5de3118e54 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/parse/index.html @@ -0,0 +1,199 @@ +--- +title: Date.parse() +slug: Web/JavaScript/Reference/Global_Objects/Date/parse +tags: + - Date + - JavaScript + - Method + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Date/parse +--- +
{{JSRef}}
+ +

Date.parse() メ゜ッドは、日時を衚す文字列を解釈し、協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 からの経過時間を衚すミリ秒単䜍の数倀を返したす。たたは、文字列を解釈できなかったり䞍正な日付 (䟋えば 2015-02-31) が指定された堎合 NaN を返したす。

+ +

ES5 に準拠しお実装されるたで Date.parse の䜿甚は掚奚されたせん。文字列の解釈は党䜓的に実装䟝存です。これらには倚くの異なる実装があり、文字列の解釈が異なるこずがあるため、日付の文字列は手動で解釈するべきです (倚くの異なる曞匏に察応したラむブラリの䜿甚が助けになるでしょう)。

+ +
{{EmbedInteractiveExample("pages/js/date-parse.html")}}
+ + + +

構文

+ +

盎接呌び出し:

+ +
Date.parse(dateString)
+
+ +

暗黙の呌び出し:

+ +
new Date(dateString)
+
+ +

匕数

+ +
+
dateString
+
RFC2822 たたは (掟生の) ISO 8601 の日付を衚す文字列。 (他の曞匏も䜿甚するこずができたすが、結果は実装䟝存になりたす。)
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 UTC からの経過時間をミリ秒単䜍で衚す数倀。このメ゜ッドに䞎えられた日付を衚す文字列の解釈により取埗される日付。匕数に正しい倀が䞎えられない堎合、 {{jsxref("NaN")}} を返したす。

+ +

解説

+ +

parse() メ゜ッドは、日時の文字列 (䟋えば "2011-10-10T14:48:00") を取り、協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 からのミリ秒単䜍の経過時間を衚す数倀を返したす。

+ +

この関数は、䟋えば {{jsxref("Date.prototype.setTime()", "setTime()")}} メ゜ッドず {{jsxref("Global_Objects/Date", "Date")}} オブゞェクトを組み合わせお䜿う堎合など、文字列倀を基にしお日時の倀を蚭定するずきに有甚です。。

+ +

日付ず時刻の文字列曞匏

+ +

日時文字列の暙準的な文字列衚珟は、 ISO 8601 のカレンダヌ日付拡匵圢匏を簡略化したものです。 (詳しくは、 ECMAScript 仕様曞の Date Time String Format の章を参照しおください。)

+ +

䟋えば, "2011-10-10" (日付のみの圢匏), "2011-10-10T14:48:00" (日時圢匏), "2011-10-10T14:48:00.000+09:00" (日時圢匏にミリ秒ずタむムゟヌンが぀いたもの) を枡し、解釈するこずができたす。タむムゟヌンのオフセットがない堎合は、日付のみの圢匏では UTC 時刻ず解釈され、日時圢匏では地方時ずしお解釈されたす。

+ +

タむムゟヌン指定子は、日付文字列の解析䞭に匕数を解釈するために䜿甚されたすが、返される倀は垞に、 1970 幎 1 月 1 日 00:00:00:00 UTC ず、匕数で衚される時点ずの間のミリ秒数たたは NaN です。

+ +

parse() は {{jsxref("Date")}} の静的メ゜ッドですので、 {{jsxref("Date")}} のメ゜ッドずしおではなく Date.parse() ずしお呌び出されたす。

+ +

実装䟝存の日付圢匏ぞのフォヌルバック

+ +
+

この節では実装䟝存の動䜜を説明しおおり、実装間で䞀貫性がない可胜性がありたす。

+
+ +

ECMAScript 仕様曞は、文字列が暙準の曞匏に準拠しおいない堎合、この関数は実装固有の怜出方法や実装固有の解析アルゎリズムにフォヌルバックするこずがあり、解釈できない文字列や ISO 曞匏文字列における䞍正な芁玠倀を含む日付を枡すず、 Date.parse() が {{jsxref("NaN")}} を返すず既定しおいたす。

+ +

しかし、 ECMA-262 で定矩されおいる簡略化 ISO 曞匏ずしお解釈できない日付文字列の無効な倀は、ブラりザヌや䞎えられた倀に䟝存しお、 {{jsxref("NaN")}} を返したり返さなかったりするこずがありたす。次の䟋を参照しおください。

+ +
// 䞍正な倀を持぀ 非 ISO 文字列
+new Date('23/25/2014');
+
+ +

これは、 Firefox 30 では、地方時の 2015 幎 11 月 25 日ずしお扱われ、 Safari 7 では䞍正な倀ずしお凊理されたす。

+ +

しかし、文字列が ISO 曞匏の文字列ずしお解釈され、䞍正な倀を含む堎合、 ES5 以降の仕様に準拠するすべおのブラりザヌが {{jsxref("NaN")}} を返したす。

+ +
// 䞍正な倀を持぀ ISO 文字列
+new Date('2014-25-23').toISOString();
+// ES5 準拠のすべおのブラりザヌが "RangeError: invalid date" を返す
+
+ +

SpiderMonkey の実装特有のヒュヌリスティックは、jsdate.cpp にありたす。 "10 06 2014" の文字列は、非 ISO 曞匏の䟋ずしお挙げられおおり、このようにカスタム凊理にフォヌルバックされたす。この解釈の動䜜を説明するおよそのアりトラむン も参照しおください。

+ +
new Date('10 06 2014');
+
+ +

これは、2014 幎 6 月 10 日ではなく、地方時の 2014 幎 10 月 6 日 ずしお扱われたす。

+ +

他の䟋です。

+ +
new Date('foo-bar 2014').toString();
+// 返倀: "Invalid Date"
+
+Date.parse('foo-bar 2014');
+// 返倀: NaN
+
+ +

想定されるタむムゟヌンの違い

+ +
+

この節では実装䟝存の動䜜を説明しおおり、実装間で䞀貫性がない可胜性がありたす。

+
+ +

暙準倖の日付文字列である "March 7, 2014" を枡すず、 parse() はタむムゟヌンずしお地方時を想定したすが、 "2014-03-07" のような ISO 曞匏を䞎えるず UTC をタむムゟヌンずしお想定したす (ES5 および ECMAScript 2015 の仕様)。したがっお、これらの文字列を䜿甚しお生成される {{jsxref("Date")}}} オブゞェクトは、システムが UTC の地方時に蚭定されおいない限り、察応しおいる ECMAScript のバヌゞョンによっお異なる時刻を衚す可胜性がありたす。぀たり、同じように芋える 2 ぀の日付文字列が、倉換される文字列の圢匏によっお 2 ぀の異なる倀になる可胜性があるずいうこずです。

+ +

䟋

+ +

Using Date.parse() の䜿甚

+ +

以䞋の呌び出しはすべお 1546300800000 を返したす。最初のものは ES5 によれば UTC 時刻を意味し、それ以倖は ISO 日付仕様 (Z および +00:00) に埓っお UTC をタむムゟヌンを指定しおいたす。

+ +
Date.parse("2019-01-01")
+Date.parse("2019-01-01T00:00:00.000Z")
+Date.parse("2019-01-01T00:00:00.000+00:00")
+
+ +

以䞋の呌び出しではタむムゟヌンを指定しおいないので、システムの地方時で 2019-01-01 の 00:00:00 に蚭定されたす。

+ +
Date.parse("2019-01-01T00:00:00")
+
+ +

暙準倖の日付文字列

+ +
+

この節では実装䟝存の動䜜を説明しおおり、実装間で䞀貫性がない可胜性がありたす。

+
+ +

IPOdate が既存の {{jsxref("Date")}} オブゞェクトならば、次のようにしお、これを 1995 幎 8 月 9 日 (地方時) にセットできたす:

+ +
IPOdate.setTime(Date.parse('Aug 9, 1995'));
+
+ +

それ以倖の暙準倖の日付文字列の解釈の䟋を瀺したす。

+ +
Date.parse('Aug 9, 1995');
+
+ +

GMT-0300 のタむムゟヌンでは 807937200000 を返し、他のタむムゟヌンでは他の倀を返したす。タむムゟヌンが指定されおおらず ISO 曞匏でないため、既定で地方時のタむムゟヌンが䜿甚されたす。

+ +
Date.parse('Wed, 09 Aug 1995 00:00:00 GMT');
+
+ +

GMT (UTC) が指定されおいるため、地方時のタむムゟヌンに関係なく 807926400000 を返したす。

+ +
Date.parse('Wed, 09 Aug 1995 00:00:00');
+
+ +

GMT-0300 のタむムゟヌンでは 807937200000 を返し、他のタむムゟヌンでは他の倀を返したす。匕数にタむムゟヌンが指定されおおらず、 ISO 曞匏ではないため、地方時ずしお扱われたす。

+ +
Date.parse('Thu, 01 Jan 1970 00:00:00 GMT');
+
+ +

GMT (UTC) のタむムゟヌンが指定されおいるため、地方時のタむムゟヌンに関係なく 0 を返したす。

+ +
Date.parse('Thu, 01 Jan 1970 00:00:00');
+
+ +

GMT-0400 のタむムゟヌンでは 14400000 を返し、他のタむムゟヌンでは他の倀を返したす。タむムゟヌンが指定されおおらず、 ISO 曞匏ではないため、地方時のタむムゟヌンが䜿甚されたす。

+ +
Date.parse('Thu, 01 Jan 1970 00:00:00 GMT-0400');
+
+ +

GMT (UTC) のタむムゟヌンが指定されおいるため、地方時のタむムゟヌンに関係なく 14400000 を返したす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.parse', 'Date.parse')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.parse")}}

+ +

互換性ノヌト

+ + + +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setdate/index.html b/files/ja/web/javascript/reference/global_objects/date/setdate/index.html new file mode 100644 index 0000000000..9042106ce6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setdate/index.html @@ -0,0 +1,82 @@ +--- +title: Date.prototype.setDate() +slug: Web/JavaScript/Reference/Global_Objects/Date/setDate +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setDate +--- +
{{JSRef}}
+ +

setDate() メ゜ッドは、珟圚蚭定されおいる月から始たる {{jsxref("Date")}} オブゞェクトの「日」を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setdate.html")}}
+ + + +

構文

+ +
dateObj.setDate(dayValue)
+ +

匕数

+ +
+
dayValue
+
「日」を衚す敎数の倀です。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から䞎えられた日付たでの間のミリ秒単䜍の数倀 ({{jsxref("Date")}} オブゞェクトも適切に倉曎されたす)。

+ +

解説

+ +

dayValue がその月の日付の範囲倖の倀の堎合、それに応じお setDate() が {{jsxref("Date")}} オブゞェクトを曎新したす。

+ +

䟋えば、dayValue に 0 を䞎えた堎合、日付は前月の最終日に蚭定されたす。

+ +

dayValue に負の数を指定するず、前月の最終日から逆算しお日付が蚭定されたす。 -1の堎合、日付は前月の最終日の1日前に蚭定されたす。

+ +

䟋

+ +

setDate() の䜿甚

+ +
var theBigDay = new Date(1962, 6, 7); // 1962-07-07 (7th of July 1962)
+theBigDay.setDate(24);  // 1962-07-24 (24th of July 1962)
+theBigDay.setDate(32);  // 1962-08-01 (1st of August 1962)
+theBigDay.setDate(22);  // 1962-08-22 (22th of August 1962)
+theBigDay.setDate(0);   // 1962-07-31 (31th of July 1962)
+theBigDay.setDate(98);  // 1962-10-06 (6th of October 1962)
+theBigDay.setDate(-50); // 1962-08-11 (11th of August 1962)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setdate', 'Date.prototype.setDate')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setDate")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setfullyear/index.html b/files/ja/web/javascript/reference/global_objects/date/setfullyear/index.html new file mode 100644 index 0000000000..5c4a299589 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setfullyear/index.html @@ -0,0 +1,80 @@ +--- +title: Date.prototype.setFullYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/setFullYear +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setFullYear +--- +
{{JSRef}}
+ +

setFullYear() メ゜ッドは、地方時に基づき、指定された日付の「幎」を蚭定したす。新しいタむムスタンプを返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setfullyear.html")}}
+ + + +

構文

+ +
dateObj.setFullYear(yearValue[, monthValue[, dateValue]])
+ +

匕数

+ +
+
yearValue
+
「幎」の数字を指定する敎数倀。䟋えば、1995。
+
monthValue
+
任意。1 月から 12 月を衚す 0 から 11 たでの間の敎数倀。
+
dateValue
+
「日」を衚す 1 から 31 たでの間の敎数倀。dateValue 匕数を指定した堎合、monthValue も指定しなければなりたせん。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日付たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

monthValue 匕数ず dateValue 匕数を指定しない堎合、{{jsxref("Date.prototype.getUTCMonth()", "getUTCMonth()")}} メ゜ッドず {{jsxref("Date.prototype.getUTCDate()", "getUTCDate()")}} メ゜ッドから返される倀が䜿われたす。

+ +

指定した倀が期埅される日付の範囲倖の堎合、それに応じお setFullYear() が他の匕数ず {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、monthValue に 15 を指定した堎合、幎に 1 が加算 (yearValue + 1) され、月が 3 になりたす。

+ +

䟋

+ +

setFullYear() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setFullYear(1997);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setfullyear', 'Date.prototype.setFullYear')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setFullYear")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/sethours/index.html b/files/ja/web/javascript/reference/global_objects/date/sethours/index.html new file mode 100644 index 0000000000..d66c6dfeb3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/sethours/index.html @@ -0,0 +1,85 @@ +--- +title: Date.prototype.setHours() +slug: Web/JavaScript/Reference/Global_Objects/Date/setHours +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setHours +--- +
{{JSRef}}
+ +

setHours() メ゜ッドは、地方時に基づき、指定された日付の「時」を蚭定し、協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された {{jsxref("Date")}} むンスタンスが衚す時刻たでの間のミリ秒単䜍の数倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-sethours.html")}}
+ + + +

構文

+ +
dateObj.setHours(hoursValue[, minutesValue[, secondsValue[, msValue]]])
+ +

JavaScript 1.3 以前

+ +
dateObj.setHours(hoursValue)
+ +

匕数

+ +
+
hoursValue
+
理想的には、「時」を衚す 0 から 23 たでの間の敎数倀です。23よりも倧きな倀が指定された堎合は、日時は远加の時間数だけ増加したす。
+
minutesValue
+
任意。理想的には、「分」を衚す 0 から 59 たでの間の敎数倀です。59よりも倧きな倀が指定された堎合は、日時は远加の分数だけ増加したす。
+
secondsValue
+
任意。理想的には、「秒」を衚す 0 から 59 たでの間の敎数倀です。59より倧きな倀が指定された堎合は、日時は远加の秒数だけ増加したす。secondsValue 匕数を指定した堎合は、minutesValue も指定しなければなりたせん。
+
msValue
+
任意。理想的には、ミリ秒を衚す 0 から 999 たでの間の敎数倀です。999よりも倧きな倀が指定された堎合は、日時は远加のミリ秒数だけ増加したす。msValue 匕数を指定した堎合、minutesValue ず secondsValue も指定しなければなりたせん。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

minutesValue, secondsValue および msValue 匕数を指定しなかった堎合、{{jsxref("Date.prototype.getMinutes()", "getMinutes()")}} ず {{jsxref("Date.prototype.getSeconds()", "getSeconds()")}}、{{jsxref("Date.prototype.getMilliseconds()", "getMilliseconds()")}} メ゜ッドから返される倀が䜿われたす。

+ +

指定した倀が期埅される日付の範囲倖の堎合、それに応じお setHours() が他の匕数ず {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、secondsValue に 100 を指定した堎合、分に 1 加算 (minutesValue + 1) され、秒が 40 になりたす。

+ +

䟋

+ +

setHours() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setHours(7);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.sethours', 'Date.prototype.setHours')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setHours")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setmilliseconds/index.html b/files/ja/web/javascript/reference/global_objects/date/setmilliseconds/index.html new file mode 100644 index 0000000000..4596840365 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setmilliseconds/index.html @@ -0,0 +1,73 @@ +--- +title: Date.prototype.setMilliseconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds +--- +
{{JSRef}}
+ +

setMilliseconds() メ゜ッドは、地方時に基づき、指定された日時の「ミリ秒」を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setmilliseconds.html")}}
+ + + +

構文

+ +
dateObj.setMilliseconds(millisecondsValue)
+ +

匕数

+ +
+
millisecondsValue
+
「ミリ秒」を衚す 0 から 999 たでの間の敎数倀。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

指定した倀が期埅される日付の範囲倖の堎合、それに応じお {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、1005 を指定した堎合、秒の数倀が 1 加算され、ミリ秒に 5 が䜿甚されたす。

+ +

䟋

+ +

setMilliseconds() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setMilliseconds(100);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setmilliseconds', 'Date.prototype.setMilliseconds')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setMilliseconds")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setminutes/index.html b/files/ja/web/javascript/reference/global_objects/date/setminutes/index.html new file mode 100644 index 0000000000..b1763e6d23 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setminutes/index.html @@ -0,0 +1,83 @@ +--- +title: Date.prototype.setMinutes() +slug: Web/JavaScript/Reference/Global_Objects/Date/setMinutes +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMinutes +--- +
{{JSRef}}
+ +

setMinutes() メ゜ッドは、地方時に基づき、指定された日時の「分」を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setminutes.html")}}
+ + + +

構文

+ +
dateObj.setMinutes(minutesValue[, secondsValue[, msValue]])
+ +

JavaScript 1.3 より前のバヌゞョン

+ +
dateObj.setMinutes(minutesValue)
+ +

匕数

+ +
+
minutesValue
+
「分」を衚す 0 から 59 たでの間の敎数倀。
+
secondsValue
+
任意。「秒」を衚す 0 から 59 たでの間の敎数倀。secondsValue 匕数を指定した堎合、minutesValue も指定しなければなりたせん。
+
msValue
+
任意。ミリ秒を衚す 0 から 999 たでの間の敎数倀。msValue 匕数を指定した堎合、minutesValue ず secondsValue も指定しなければなりたせん。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

secondsValue および msValue 匕数を指定しない堎合、{{jsxref("Date.prototype.getSeconds()", "getSeconds()")}} ず {{jsxref("Date.prototype.getMilliseconds()", "getMilliseconds()")}} メ゜ッドから返される倀が䜿われたす。

+ +

指定した倀が期埅される日時の範囲倖の堎合、それに応じお setMinutes() が {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、secondsValue に 100 を指定した堎合、分に 1 が加算 (minutesValue + 1) され、秒が 40 になりたす。

+ +

䟋

+ +

setMinutes() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setMinutes(45);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setminutes', 'Date.prototype.setMinutes')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setMinutes")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setmonth/index.html b/files/ja/web/javascript/reference/global_objects/date/setmonth/index.html new file mode 100644 index 0000000000..81caf3b8ec --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setmonth/index.html @@ -0,0 +1,86 @@ +--- +title: Date.prototype.setMonth() +slug: Web/JavaScript/Reference/Global_Objects/Date/setMonth +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMonth +--- +
{{JSRef}}
+ +

setMonth() メ゜ッドは、珟圚蚭定されおいる幎に基づき、指定された日付の「月」を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setmonth.html")}}
+ +

構文

+ +
dateObj.setMonth(monthValue[, dayValue])
+ +

JavaScript 1.3 より前のバヌゞョン

+ +
dateObj.setMonth(monthValue)
+ +

匕数

+ +
+
monthValue
+
0から始たる敎数倀で、幎の始たりからの月のオフセットを衚したす。そのため、0 は 1 月を衚し、 11 は 12 月を衚し、 12 は次の幎の 1 月を衚したす。
+
dayValue
+
任意。「日」を衚す 1 から 31 たでの間の敎数倀。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

dayValue 匕数を指定しなかった堎合、{{jsxref("Date.prototype.getDate()", "getDate()")}} メ゜ッドから返される倀が䜿われたす。

+ +

指定した倀が期埅される日付の範囲倖の堎合、それに応じお setMonth() が {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、monthValue に 15 を指定した堎合、幎に 1 が加算され、月が 3 になりたす。

+ +

このメ゜ッドの動䜜は、ある特定の月の日にちに圱響を䞎えたす。抂念䞊は、その月の日数を、匕数ずしお䞎えた新しい月の初日に加え、新しい日付を返したす。䟋えば、珟圚の倀が 2016 幎 8 月 31 日である堎合、1 を匕数ずしお setMonth を呌び出すず 2016 幎 3 月 2 日が返っおきたす。これは、2016 幎の 2 月が 29 日間しかないからです。

+ +

䟋

+ +

setMonth() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setMonth(6);
+
+//Watch out for end of month transitions
+var endOfMonth = new Date(2016, 7, 31);
+endOfMonth.setMonth(1);
+console.log(endOfMonth); //Wed Mar 02 2016 00:00:00
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setmonth', 'Date.prototype.setMonth')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setMonth")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setseconds/index.html b/files/ja/web/javascript/reference/global_objects/date/setseconds/index.html new file mode 100644 index 0000000000..ec0a67f989 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setseconds/index.html @@ -0,0 +1,81 @@ +--- +title: Date.prototype.setSeconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/setSeconds +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setSeconds +--- +
{{JSRef}}
+ +

setSeconds() メ゜ッドは、地方時に基づき、指定された日時の「秒」を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setseconds.html")}}
+ + + +

構文

+ +
dateObj.setSeconds(secondsValue[, msValue])
+ +

JavaScript 1.3 より前のバヌゞョン

+ +
dateObj.setSeconds(secondsValue)
+ +

匕数

+ +
+
secondsValue
+
日付の「秒」を衚す 0 から 59 たでの間の敎数倀。
+
msValue {{Optional_inline}}
+
日付の「ミリ秒」を衚す 0 から 999 たでの間の敎数。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

msValue 匕数を指定しなかった堎合、{{jsxref("Date.prototype.getMilliseconds()", "getMilliseconds()")}} メ゜ッドから返される倀が䜿われたす。

+ +

指定した倀が期埅される日付の範囲倖の堎合、それに応じお setSeconds() が {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、 secondsValue に 100 を指定した堎合、分に 1 が加算され、秒が 40 になりたす。

+ +

䟋

+ +

setSeconds() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setSeconds(30);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setseconds', 'Date.prototype.setSeconds')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setSeconds")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/settime/index.html b/files/ja/web/javascript/reference/global_objects/date/settime/index.html new file mode 100644 index 0000000000..0c4ffa06f9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/settime/index.html @@ -0,0 +1,74 @@ +--- +title: Date.prototype.setTime() +slug: Web/JavaScript/Reference/Global_Objects/Date/setTime +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setTime +--- +
{{JSRef}}
+ +

setTime() メ゜ッドは、{{jsxref("Date")}} オブゞェクトを協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 からの経過時間をミリ秒単䜍で衚す時刻に蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-settime.html")}}
+ + + +

構文

+ +
dateObj.setTime(timeValue)
+ +

匕数

+ +
+
timeValue
+
協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 からの経過時間をミリ秒単䜍で衚す敎数倀。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀 (曎新された日時は、匕数の倀になりたす)。

+ +

解説

+ +

setTime() メ゜ッドは、日付ず時刻を別の {{jsxref("Date")}} オブゞェクトに代入するのに圹立ちたす。

+ +

䟋

+ +

setTime() の䜿甚

+ +
var theBigDay = new Date('July 1, 1999');
+var sameAsBigDay = new Date();
+sameAsBigDay.setTime(theBigDay.getTime());
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.settime', 'Date.prototype.setTime')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setTime")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setutcdate/index.html b/files/ja/web/javascript/reference/global_objects/date/setutcdate/index.html new file mode 100644 index 0000000000..649ca500a7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setutcdate/index.html @@ -0,0 +1,73 @@ +--- +title: Date.prototype.setUTCDate() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCDate +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCDate +--- +
{{JSRef}}
+ +

setUTCDate() メ゜ッドは、協定䞖界時に基づき、指定された日付の「日」を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setutcdate.html")}}
+ + + +

構文

+ +
dateObj.setUTCDate(dayValue)
+ +

匕数

+ +
+
dayValue
+
任意。「日」を衚す 1 から 31 たでの間の敎数倀。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

指定した倀が期埅される日付の範囲倖の堎合、それに応じお setUTCDate() が {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、dayValue に 40 を指定し、{{jsxref("Date")}} に栌玍された「月」が 6 月の堎合、「日」は 10 に倉曎され、「月」が繰り䞊がっお 7 月になりたす。

+ +

䟋

+ +

setUTCDate() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setUTCDate(20);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setutcdate', 'Date.prototype.setUTCDate')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setUTCDate")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setutcfullyear/index.html b/files/ja/web/javascript/reference/global_objects/date/setutcfullyear/index.html new file mode 100644 index 0000000000..c2d2f205df --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setutcfullyear/index.html @@ -0,0 +1,79 @@ +--- +title: Date.prototype.setUTCFullYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear +--- +
{{JSRef}}
+ +

setUTCFullYear() メ゜ッドは、協定䞖界時に基づき、指定された日付の幎を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setutcmonth.html")}}
+ + + +

構文

+ +
dateObj.setUTCFullYear(yearValue[, monthValue[, dayValue]])
+ +

匕数

+ +
+
yearValue
+
「幎」の数字を指定する敎数倀。䟋えば、1995。
+
monthValue
+
任意。1 月から 12 月を衚す 0 から 11 たでの間の敎数倀。
+
dayValue
+
任意。「日」を衚す 1 から 31 たでの間の敎数倀。dayValue 匕数を指定した堎合、monthValue も指定しなければなりたせん。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

monthValue 匕数ず dayValue 匕数を指定しない堎合、{{jsxref("Date.prototype.getUTCMonth()", "getUTCMonth()")}} メ゜ッドず {{jsxref("Date.prototype.getUTCDate()", "getUTCDate()")}} メ゜ッドから返される倀が䜿われたす。

+ +

指定した倀が期埅される日付の範囲倖の堎合、それに応じお setUTCFullYear() が他の匕数ず {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、monthValue に 15 を指定した堎合、幎に 1 が加算 (yearValue + 1) され、月が 3 になりたす。

+ +

䟋

+ +

setUTCFullYear() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setUTCFullYear(1997);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setutcfullyear', 'Date.prototype.setUTCFullYear')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setUTCFullYear")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setutchours/index.html b/files/ja/web/javascript/reference/global_objects/date/setutchours/index.html new file mode 100644 index 0000000000..9b6fce0056 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setutchours/index.html @@ -0,0 +1,81 @@ +--- +title: Date.prototype.setUTCHours() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCHours +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCHours +--- +
{{JSRef}}
+ +

setUTCHours() メ゜ッドは、協定䞖界時に基づき、指定された日付の「時」を蚭定し、協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された {{jsxref("Date")}} むンスタンスが衚す時刻たでの間のミリ秒単䜍の数倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setutchours.html")}}
+ + + +

構文

+ +
dateObj.setUTCHours(hoursValue[, minutesValue[, secondsValue[, msValue]]])
+ +

匕数

+ +
+
hoursValue
+
「時」を衚す 0 から 23 たでの間の敎数倀。
+
minutesValue
+
任意。「分」を衚す 0 から 59 たでの間の敎数倀。
+
secondsValue
+
任意。「秒」を衚す 0 から 59 たでの間の敎数倀。secondsValue 匕数を指定した堎合、minutesValue も指定しなければなりたせん。
+
msValue
+
任意。ミリ秒を衚す 0 から 999 たでの間の敎数倀。msValue 匕数を指定した堎合、minutesValue ず secondsValue も指定しなければなりたせん。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

minutesValue, secondsValue および msValue 匕数を指定しない堎合、{{jsxref("Date.prototype.getUTCMinutes()", "getUTCMinutes()")}} ず {{jsxref("Date.prototype.getUTCSeconds()", "getUTCSeconds()")}}、{{jsxref("Date.prototype.getUTCMilliseconds()", "getUTCMilliseconds()")}} メ゜ッドから返される倀が䜿われたす。

+ +

指定した倀が期埅される日付の範囲倖の堎合、それに応じお setUTCHours() が {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、secondsValue に 100 を指定した堎合、分に 1 が加算 (minutesValue + 1) され、秒が 40 になりたす。

+ +

䟋

+ +

setUTCHours() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setUTCHours(8);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setutchours', 'Date.prototype.setUTCHours')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setUTCHours")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html b/files/ja/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html new file mode 100644 index 0000000000..268babe40a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html @@ -0,0 +1,73 @@ +--- +title: Date.prototype.setUTCMilliseconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds +--- +
{{JSRef}}
+ +

setUTCMilliseconds() メ゜ッドは、協定䞖界時に基づき、指定された日時の「ミリ秒」を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setutcmilliseconds.html")}}
+ + + +

構文

+ +
dateObj.setUTCMilliseconds(millisecondsValue)
+ +

匕数

+ +
+
millisecondsValue
+
「ミリ秒」を衚す 0 から 999 たでの間の敎数倀。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

指定した倀が期埅される日付の範囲倖の堎合、それに応じお setUTCMilliseconds() が {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、millisecondsValue に 1100 を指定した堎合、{{jsxref("Date")}} オブゞェクトに栌玍された秒の数倀に 1 が加算され、ミリ秒に 100 が䜿甚されたす。

+ +

䟋

+ +

setUTCMilliseconds() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setUTCMilliseconds(500);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setutcmilliseconds', 'Date.prototype.setUTCMilliseconds')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setUTCMilliseconds")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setutcminutes/index.html b/files/ja/web/javascript/reference/global_objects/date/setutcminutes/index.html new file mode 100644 index 0000000000..37d4c845f9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setutcminutes/index.html @@ -0,0 +1,79 @@ +--- +title: Date.prototype.setUTCMinutes() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes +--- +
{{JSRef}}
+ +

setUTCMinutes() メ゜ッドは、協定䞖界時に基づき、指定された日時の「分」を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setutcminutes.html")}}
+ + + +

構文

+ +
dateObj.setUTCMinutes(minutesValue[, secondsValue[, msValue]])
+ +

匕数

+ +
+
minutesValue
+
「分」を衚す 0 から 59 たでの間の敎数倀。
+
secondsValue
+
任意。「秒」を衚す 0 から 59 たでの間の敎数倀。secondsValue 匕数を指定した堎合、minutesValue も指定しなければなりたせん。
+
msValue
+
任意。ミリ秒を衚す 0 から 999 たでの間の敎数倀。msValue 匕数を指定した堎合、minutesValue ず secondsValue も指定しなければなりたせん。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

secondsValue および msValue 匕数を指定しない堎合、{{jsxref("Date.prototype.getUTCSeconds()", "getUTCSeconds()")}} ず {{jsxref("Date.prototype.getUTCMilliseconds()", "getUTCMilliseconds()")}} メ゜ッドから返される倀が䜿われたす。

+ +

指定した倀が期埅される日時の範囲倖の堎合、それに応じお setUTCMinutes() が {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、secondsValue に 100 を指定した堎合、分に 1 が加算 (minutesValue + 1) され、秒が 40 になりたす。

+ +

䟋

+ +

setUTCMinutes() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setUTCMinutes(43);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setutcminutes', 'Date.prototype.setUTCMinutes')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setUTCMinutes")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setutcmonth/index.html b/files/ja/web/javascript/reference/global_objects/date/setutcmonth/index.html new file mode 100644 index 0000000000..671b969014 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setutcmonth/index.html @@ -0,0 +1,77 @@ +--- +title: Date.prototype.setUTCMonth() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth +--- +
{{JSRef}}
+ +

setUTCMonth() メ゜ッドは、協定䞖界時に基づき、指定された日時の「月」を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setutcseconds.html")}}
+ + + +

構文

+ +
dateObj.setUTCMonth(monthValue[, dayValue])
+ +

匕数

+ +
+
monthValue
+
1 月から 12 月を衚す 0 から 11 たでの間の敎数倀。
+
dayValue
+
任意。「日」を衚す 1 から 31 たでの間の敎数倀。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

dayValue 匕数を指定しない堎合、{{jsxref("Date.prototype.getUTCDate()", "getUTCDate()")}} メ゜ッドから返される倀が䜿われたす。

+ +

指定した倀が期埅される日時の範囲倖の堎合、それに応じお setUTCMonth() が {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、monthValue に 15 を指定した堎合、幎に 1 が加算され、月が 3 になりたす。

+ +

䟋

+ +

setUTCMonth() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setUTCMonth(11);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setutcmonth', 'Date.prototype.setUTCMonth')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setUTCMonth")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setutcseconds/index.html b/files/ja/web/javascript/reference/global_objects/date/setutcseconds/index.html new file mode 100644 index 0000000000..88cb29dc5b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setutcseconds/index.html @@ -0,0 +1,77 @@ +--- +title: Date.prototype.setUTCSeconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds +--- +
{{JSRef}}
+ +

setUTCSeconds() メ゜ッドは、協定䞖界時に基づき、指定された日時の「秒」を蚭定したす。

+ +
{{EmbedInteractiveExample("pages/js/date-setutcseconds.html")}}
+ + + +

構文

+ +
dateObj.setUTCSeconds(secondsValue[, msValue])
+ +

匕数

+ +
+
secondsValue
+
「秒」を衚す 0 から 59 たでの間の敎数倀。
+
msValue
+
任意。ミリ秒を衚す 0 から 999 たでの間の敎数倀。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

msValue 匕数を指定しない堎合、{{jsxref("Date.prototype.getUTCMilliseconds()", "getUTCMilliseconds()")}} メ゜ッドから返される倀が䜿われたす。

+ +

指定した倀が期埅される日時の範囲倖の堎合、それに応じお setUTCSeconds() が {{jsxref("Date")}} オブゞェクトの日付情報の曎新を詊みたす。䟋えば、secondsValue に 100 を指定した堎合、分に 1 加算され、秒が 40 になりたす。

+ +

䟋

+ +

setUTCSeconds() の䜿甚

+ +
var theBigDay = new Date();
+theBigDay.setUTCSeconds(20);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setutcseconds', 'Date.prototype.setUTCSeconds')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setUTCSeconds")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/setyear/index.html b/files/ja/web/javascript/reference/global_objects/date/setyear/index.html new file mode 100644 index 0000000000..18cbf5b5d9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/setyear/index.html @@ -0,0 +1,77 @@ +--- +title: Date.prototype.setYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/setYear +tags: + - Date + - Deprecated + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setYear +--- +
{{JSRef}} {{deprecated_header}}
+ +

setYear() メ゜ッドは、地方時に基づき、指定された日付の「幎」を蚭定したす。 setYear() は完党な桁数の倀を蚭定しないため (いわゆる 2000 幎問題)、䜿甚されなくなり、{{jsxref("Date.prototype.setFullYear", "setFullYear()")}} メ゜ッドに眮き換えられたした。

+ +

構文

+ +
dateObj.setYear(yearValue)
+ +

匕数

+ +
+
yearValue
+
敎数倀。
+
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から曎新された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

yearValue が 0 から 99 たでの倀の堎合、dateObj の「幎」には 1900 + yearValue が蚭定されたす。そうでない堎合、dateObj の「幎」には yearValue が蚭定されたす。

+ +

䟋

+ +

setYear() の䜿甚

+ +

最初の 2 行は「幎」を 1996 に蚭定したす。3 行目は、「幎」を 2000 に蚭定したす。

+ +
var theBigDay = new Date();
+
+theBigDay.setYear(96);
+theBigDay.setYear(1996);
+theBigDay.setYear(2000);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.setyear', 'Date.prototype.setYear')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.setYear")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/todatestring/index.html b/files/ja/web/javascript/reference/global_objects/date/todatestring/index.html new file mode 100644 index 0000000000..397ca3a281 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/todatestring/index.html @@ -0,0 +1,84 @@ +--- +title: Date.prototype.toDateString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toDateString +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toDateString +--- +
{{JSRef}}
+ +

toDateString() メ゜ッドは、 {{jsxref("Date")}} オブゞェクトの日付郚分を英語の次の曞匏で空癜区切りで返したす。

+ +
    +
  1. 曜日名の最初の3文字
  2. +
  3. 月名の最初の3文字
  4. +
  5. 2桁の日、必芁であれば巊に0埋め
  6. +
  7. 4桁 (以䞊) の幎、必芁であれば巊に0埋め
  8. +
+ +

䟋 "Thu Jan 01 1970".

+ +
{{EmbedInteractiveExample("pages/js/date-todatestring.html")}}
+ + + +

構文

+ +
dateObj.toDateString()
+ +

返倀

+ +

䞎えられた {{jsxref("Date")}} オブゞェクトの「日付」郚を衚す文字列を人間が読める英語の衚蚘で返したす。

+ +

解説

+ +

{{jsxref("Date")}} むンスタンスは、特定の時点を参照したす。{{jsxref("Date.prototype.toString()", "toString()")}} を呌び出すず、人間が読める英語の衚蚘で日付を返したす。SpiderMonkey では、この文字列は「日付」郚 (日、月、幎) ず続く「時刻」郚 (時、分、秒、タむムゟヌン) からなりたす。時々、時刻の文字列を埗たいこずがあるでしょう。そのような堎合は {{jsxref("Date.prototype.toTimeString()", "toTimeString()")}} メ゜ッドが䜿えたす。

+ +

ECMA-262 に埓っお実装された゚ンゞンは、{{jsxref("Date")}} オブゞェクトに察しお {{jsxref("Date.prototype.toString()", "toString()")}} メ゜ッドから埗られる文字列ず異なるこずがあるため、toDateString() メ゜ッドは特に圹立ちたす。その文字列の衚蚘は実装䟝存であり、単玔に文字列を切り出す方法では、耇数の゚ンゞンで䞀貫した結果を埗られない可胜性がありたす。

+ +

䟋

+ +

toDateString() の基本的な䜿い方

+ +
var d = new Date(1993, 5, 28, 14, 39, 7);
+
+console.log(d.toString());     // logs Mon Jun 28 1993 14:39:07 GMT-0600 (PDT)
+console.log(d.toDateString()); // logs Mon Jun 28 1993
+
+ +
+

泚: {{jsxref("Date")}} の匕数ずしお䜿甚する堎合、月は 0 から始たりたすよっお、 0 は 1 月に、 11 は 12 月 に察応したす。

+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.todatestring', 'Date.prototype.toDateString')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toDateString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/togmtstring/index.html b/files/ja/web/javascript/reference/global_objects/date/togmtstring/index.html new file mode 100644 index 0000000000..c64628399f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/togmtstring/index.html @@ -0,0 +1,68 @@ +--- +title: Date.prototype.toGMTString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toGMTString +tags: + - Date + - Deprecated + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toGMTString +--- +
{{JSRef}} {{deprecated_header}}
+ +

toGMTString() メ゜ッドは、むンタヌネットグリニッゞ暙準時 (GMT) 協定に基づき、日付を文字列ぞ倉換したす。toGMTString() が返す倀の正確な曞匏は、プラットフォヌムやブラりザによっお倉化したすが、䞀般に、人間が読める日付の文字列を衚したす。

+ +
+

泚: toGMTString() は非掚奚であり、もはや䜿われおいたせん。埌方互換性のためだけに残されおいたす。代わりに、{{jsxref("Date.prototype.toUTCString()", "toUTCString()")}} を䜿甚しおください。

+
+ +

構文

+ +
dateObj.toGMTString()
+ +

返倀

+ +

むンタヌネットグリニッゞ暙準時 (GMT) 協定に基づき、䞎えられた日付を衚す文字列。

+ +

䟋

+ +

簡単な䟋

+ +

この䟋では、toGMTString() メ゜ッドは OS のタむムゟヌンオフセットを䜿っお、日付を GMT (UTC) に倉換し、次の曞匏に䌌た文字列倀を返したす。正確な曞匏はプラットフォヌムに䟝存したす。

+ +
var today = new Date();
+var str = today.toGMTString();  // deprecated! use toUTCString()
+
+console.log(str);               // Mon, 18 Dec 1995 17:28:35 GMT
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.togmtstring', 'Date.prototype.toGMTString')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toGMTString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/toisostring/index.html b/files/ja/web/javascript/reference/global_objects/date/toisostring/index.html new file mode 100644 index 0000000000..945302e3d9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/toisostring/index.html @@ -0,0 +1,96 @@ +--- +title: Date.prototype.toISOString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toISOString +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toISOString +--- +
{{JSRef}}
+ +

toISOString() メ゜ッドは、簡朔な拡匵衚蚘の ISO 圢匏 (ISO 8601) の文字列を返したす。これは、垞に 24 文字たたは 27 文字の長さになりたす (それぞれ、YYYY-MM-DDTHH:mm:ss.sssZ たたは ±YYYYYY-MM-DDTHH:mm:ss.sssZ)。タむムゟヌンは垞に 0 UTC オフセットになり、接尟蟞 "Z" で衚蚘されたす。

+ +
{{EmbedInteractiveExample("pages/js/date-toisostring.html")}}
+ + + +

構文

+ +
dateObj.toISOString()
+ +

返倀

+ +

協定䞖界時に基づき、䞎えられた日付を ISO 8601 圢匏で衚す文字列。

+ +

ポリフィル

+ +

このメ゜ッドは、ECMA-262 第 5 版で暙準化されたした。このメ゜ッドに察応するため、曎新されおいない゚ンゞンでは、次のコヌドを甚いおこのメ゜ッドの欠萜を補うこずができたす。

+ +
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';
+    };
+
+  })();
+}
+
+ +

䟋

+ +

toISOString() の䜿甚

+ +
let today = new Date('05 October 2011 14:48 UTC')
+
+console.log(today.toISOString())  // 2011-10-05T14:48:00.000Z を返す
+
+ +

䞊蚘の䟋は、Mozilla 以倖のブラりザヌでは正しく解析されない、非暙準の文字列倀を解析するのに䜿いたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.toisostring', 'Date.prototype.toISOString')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toISOString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/tojson/index.html b/files/ja/web/javascript/reference/global_objects/date/tojson/index.html new file mode 100644 index 0000000000..2370dfc2b7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/tojson/index.html @@ -0,0 +1,69 @@ +--- +title: Date.prototype.toJSON() +slug: Web/JavaScript/Reference/Global_Objects/Date/toJSON +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toJSON +--- +
{{JSRef}}
+ +

toJSON() メ゜ッドは、{{jsxref("Date")}} オブゞェクトの文字列衚珟を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-tojson.html")}}
+ + + +

構文

+ +
dateObj.toJSON()
+ +

返倀

+ +

䞎えられた日付を衚す文字列。

+ +

解説

+ +

{{jsxref("Date")}} むンスタンスは、特定の時点を参照したす。toJSON() の呌び出しは、{{jsxref("Date")}} オブゞェクトの倀を衚す文字列 ({{jsxref("Date.prototype.toISOString()", "toISOString()")}} を䜿甚) を返したす。このメ゜ッドは、䞀般的に、{{Glossary("JSON")}} シリアラむズを目的ずしお {{jsxref("Date")}} オブゞェクトをシリアラむズするために䜿甚されたす。

+ +

䟋

+ +

toJSON() を䜿う

+ +
var jsonDate = (new Date()).toJSON();
+var backToDate = new Date(jsonDate);
+
+console.log(jsonDate); //2015-10-26T07:46:36.611Z
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.tojson', 'Date.prototype.toJSON')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toJSON")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/tolocaledatestring/index.html b/files/ja/web/javascript/reference/global_objects/date/tolocaledatestring/index.html new file mode 100644 index 0000000000..04a1278e49 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/tolocaledatestring/index.html @@ -0,0 +1,159 @@ +--- +title: Date.prototype.toLocaleDateString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString +tags: + - Date + - IANA Timezone Format + - Internationalization + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString +--- +
{{JSRef}}
+ +

toLocaleDateString() メ゜ッドは、この Date オブゞェクトの「日付」郚を衚す蚀語に䟝存した文字列を返したす。新しい locales 匕数ず options 匕数により、アプリケヌションは、䜿甚される曞匏倉換の蚀語の指定や、関数の振る舞いのカスタマむズができたす。叀い実装のアプリケヌションは、locales 匕数ず options 匕数を無芖したす。䜿甚されるロケヌルや返される文字列の曞匏は、完党に実装䟝存です。

+ +
{{EmbedInteractiveExample("pages/js/date-tolocaledatestring.html")}}
+ + + +

構文

+ +
dateObj.toLocaleDateString([locales[, options]])
+ +

匕数

+ +

locales 匕数ず options 匕数をサポヌトしおいるブラりザヌは、{{anch("Browser compatibility", "ブラりザヌの実装状況")}} セクションを確認しおください。機胜が䜿甚できるかどうかは、{{anch("Checking_for_support_for_locales_and_options_arguments", "locales 匕数ず options 匕数がサポヌトされおいるか確認する")}}で確認しおください。

+ +

See the Intl.DateTimeFormat() constructor for details on these parameters and how to use them.

+ +

日時のそれぞれの郚分ののプロパティにおける既定倀は、{{jsxref("undefined")}}です。ただし、weekday、 year、month、day プロパティがすべお {{jsxref("undefined")}} のずきは、year、month、day は "numeric" ずみなされたす。

+ +

返倀

+ +

䞎えられた {{jsxref("Global_Objects/Date", "Date")}} むンスタンスの「日付」郚を衚す、蚀語特有の慣習による文字列。

+ +

性胜

+ +

倧量の日付を曞匏化する堎合は、 {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} オブゞェクトを生成しおその {{jsxref("DateTimeFormat.prototype.format", "format")}} プロパティで提䟛される関数を䜿甚したほうが埗策です。

+ +

䟋

+ +

toLocaleDateString() の䜿甚

+ +

ロケヌルを指定しない基本的な䜿い方では、既定のロケヌルず既定のオプションによる曞匏の文字列が返されたす。

+ +
var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// toLocaleDateString() に匕数を䞎えなければ実装に䟝存し、
+// 既定のロケヌルずタむムゟヌンを返す
+console.log(date.toLocaleDateString());
+// → "12/11/2012" : アメリカ/ロサンれルスのタむムゟヌンの en-US ロケヌルで実行した堎合
+
+ +

locales ず options の各匕数に察応しおいるか確認する

+ +

locales および options 匕数は、ただすべおのブラりザヌが察応しおいるわけではありたせん。これらが実装されおいるかどうかをチェックするには、䞍適切な蚀語タグを䞎えるず {{jsxref("RangeError")}} 䟋倖で拒吊されるずいう芁件を䜿甚するこずができたす。

+ +
function toLocaleDateStringSupportsLocales() {
+  try {
+    new Date().toLocaleDateString('i');
+  } catch (e) {
+    return e.name !== 'RangeError';
+  }
+  return true;
+}
+
+ +

locales の䜿甚

+ +

この䟋では、囜ごずに異なる日付曞匏を瀺したす。アプリケヌションのナヌザヌむンタヌフェむスで䜿甚されおいる蚀語の曞匏を埗るには、 locales 匕数でその蚀語 (あるいはフォヌルバック先の蚀語) を指定しおください。

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// 以䞋の曞匏はその地域のタむムゟヌンずロケヌルを想定
+// 米囜のアメリカ倧陞/ロサンれルス
+
+// 米囜英語は月-日-幎の順
+console.log(date.toLocaleDateString('en-US'));
+// → "12/19/2012"
+
+// 英囜英語は日-月-幎の順
+console.log(date.toLocaleDateString('en-GB'));
+// → "20/12/2012"
+
+// 韓囜は幎-月-日の順
+console.log(date.toLocaleDateString('ko-KR'));
+// → "2012. 12. 20."
+
+// Event for Persian, It's hard to manually convert date to Solar Hijri
+console.log(date.toLocaleDateString('fa-IR'));
+// → "۱۳۹۱/۹/۳۰"
+
+// 倚くのアラビア語圏ではアラビア数字
+console.log(date.toLocaleDateString('ar-EG'));
+// → "٢٠‏/١٢‏/٢٠١٢"
+
+// 日本語では、アプリケヌションは元号を甚いるこずがある
+// 2012 幎は平成 24 幎
+console.log(date.toLocaleDateString('ja-JP-u-ca-japanese'));
+// → "24/12/20"
+
+// 察応しおいない可胜性のある蚀語を芁求した堎合、䟋えば
+// バリ語ずし、フォヌルバック蚀語にむンドネシア語を指定した堎合
+console.log(date.toLocaleDateString(['ban', 'id']));
+// → "20/12/2012"
+
+ +

options の䜿甚

+ +

toLocaleDateString() メ゜ッドから埗られる結果は、 options 匕数でカスタマむズできたす。

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// 曜日を加えお月ずずもに長い曞匏で衚す
+var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
+console.log(date.toLocaleDateString('de-DE', options));
+// → "Donnerstag, 20. Dezember 2012"
+
+// アプリケヌションで UTC を甚いおそれを瀺したい堎合
+options.timeZone = 'UTC';
+options.timeZoneName = 'short';
+console.log(date.toLocaleDateString('en-US', options));
+// → "Thursday, December 20, 2012, GMT"
+
+ +

仕様曞

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.tolocaletimestring', 'Date.prototype.toLocaleTimeString')}}
{{SpecName('ES Int Draft', '#sup-date.prototype.tolocaletimestring', 'Date.prototype.toLocaleTimeString')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toLocaleDateString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/tolocalestring/index.html b/files/ja/web/javascript/reference/global_objects/date/tolocalestring/index.html new file mode 100644 index 0000000000..4de5f6bf2e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/tolocalestring/index.html @@ -0,0 +1,180 @@ +--- +title: Date.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleString +tags: + - Date + - Internationalization + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleString +--- +
{{JSRef}}
+ +

toLocaleString() メ゜ッドは、蚀語に合わせた日時の文字列を返したす。

+ +

新しい locales ず options の匕数により、アプリケヌションは䜿甚される曞匏倉換の蚀語の指定や、関数の振る舞いのカスタマむズをするこずができたす。

+ +

叀い実装のアプリケヌションは、 locales ず options の匕数を無芖したす。䜿甚されるロケヌルや返される文字列の曞匏は、完党に実装䟝存です。

+ +
{{EmbedInteractiveExample("pages/js/date-tolocalestring.html")}}
+ + + +

構文

+ +
dateObj.toLocaleString([locales[, options]])
+ +

匕数

+ +

どのブラりザヌが locales ず options に察応しおいるのかは、ブラりザヌの互換性をご芧ください。 locales ず options を無芖する実装では、䜿甚されるロケヌルや返される文字列の曞匏は、完党に実装䟝存です。

+ +

これらの匕数の詳现やその䜿甚方法は、 {{jsxref("DateTimeFormat/DateTimeFormat", "Intl.DateTimeFormat()")}} コンストラクタヌを確認しおください。

+ +

日時のそれぞれの郚分のプロパティにおける既定倀は {{jsxref("undefined")}} です。ただし、 weekday, year, month, day の各プロパティがすべお {{jsxref("undefined")}} のずきは、 year, month, day は "numeric" ずみなされたす。

+ +

返倀

+ +

䞎えられた文字列を蚀語特有の慣習によっお衚した文字列です。

+ +

性胜

+ +

倧量の日付を曞匏化する堎合は、 {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} オブゞェクトを生成しおその {{jsxref("DateTimeFormat.prototype.format", "format")}} プロパティで提䟛される関数を䜿甚したほうが埗策です。

+ +

䟋

+ +

toLocaleString() の䜿甚

+ +

ロケヌルを指定しない基本的な䜿い方では、既定のロケヌルず既定のオプションによる曞匏の文字列が返されたす。

+ +
let date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// toLocaleString() メ゜ッドに匕数を䞎えなければ実装に䟝存し、
+// 既定のロケヌルずタむムゟヌンを返す
+console.log(date.toLocaleString());
+// → "12/11/2012, 7:00:00 PM" : アメリカ/ロサンれルスのタむムゟヌンの en-US ロケヌルで実行した堎合
+
+ +

locales ず options に察応しおいるか確認する

+ +

locales ず options は、ただすべおのブラりザヌが察応しおいる蚳ではありたせん。これらが実装されおいるかどうかは、䞍適切な蚀語タグを䞎えお {{jsxref("RangeError")}} 䟋倖で拒吊されるかどうかで確かめられたす。

+ +
function toLocaleStringSupportsLocales() {
+  try {
+    new Date().toLocaleString('i');
+  } catch (e) {
+    return e instanceof RangeError;
+  }
+  return false;
+}
+
+ +

locales の䜿甚

+ +

この䟋では、囜ごずに異なる日時の曞匏を瀺したす。ご䜿甚のアプリケヌションのナヌザヌむンタヌフェむスで䜿甚される蚀語の曞匏を埗るには、 locales でその蚀語 (あるいは代替蚀語) を指定しおください。

+ +
let date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// 以䞋の曞匏はその地域のタむムゟヌンずロケヌルを想定
+// 米囜のアメリカ倧陞/ロサンれルス
+
+// 米囜英語は月-日-幎の順で AM/PM 衚蚘の 12 時間制
+console.log(date.toLocaleString('en-US'));
+// → "12/19/2012, 7:00:00 PM"
+
+// 英囜英語は日-月-幎の順で AM/PM 衚蚘なしの 24 時間制
+console.log(date.toLocaleString('en-GB'));
+// → "20/12/2012 03:00:00"
+
+// 韓囜は幎-月-日の順で AM/PM 衚蚘の 12 時間制
+console.log(date.toLocaleString('ko-KR'));
+// → "2012. 12. 20. 였후 12:00:00"
+
+// 倚くのアラビア語圏ではアラビア数字を䜿甚
+console.log(date.toLocaleString('ar-EG'));
+// → "٢٠‏/١٢‏/٢٠١٢ ٥:٠٠:٠٠ ص"
+
+// 日本のアプリケヌションでは元号を甚いるこずがある
+// 2012 幎は平成 24 幎
+console.log(date.toLocaleString('ja-JP-u-ca-japanese'));
+// → "24/12/20 12:00:00"
+
+// 察応しおいない可胜性のある蚀語を芁求した堎合、たずえば
+// ここではバリ語ずし、代替蚀語にむンドネシア語
+console.log(date.toLocaleString(['ban', 'id']));
+// → "20/12/2012 11.00.00"
+
+ +

options の䜿甚

+ +

toLocaleString() メ゜ッドから埗られる結果は、options でカスタマむズできたす。

+ +
let date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// 曜日を加えお月ずずもに長い曞匏で衚す
+let options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
+
+console.log(date.toLocaleString('de-DE', options));
+// → "Donnerstag, 20. Dezember 2012"
+
+// アプリケヌションで UTC を甚いおそれを瀺したい堎合
+options.timeZone = 'UTC';
+options.timeZoneName = 'short';
+
+console.log(date.toLocaleString('en-US', options));
+// → "Thursday, December 20, 2012, GMT"
+
+// 米囜でも 24 時間制を䜿うこずがある
+console.log(date.toLocaleString('en-US', { hour12: false }));
+// → "12/19/2012, 19:00:00"
+
+ +

曞匏化した日付倀を固定倀ず比范しないでください

+ +

たいおいの堎合、 toLocaleString() が返す曞匏は䞀貫しおいたす。しかし、これは将来的に倉曎される可胜性があり、すべおの蚀語で保蚌されおいるわけではありたせん。

+ +

特に泚目すべきは、IE および Edge ブラりザヌは日付の呚りに曞字方向の制埡文字を挿入するため、出力テキストが他のテキストず連結されたずきに適切に流れるようになっおいたす。

+ +

このこずから、 toLocaleString() を固定倀ず比范できるず期埅しおはいけたせん。

+ +
"1/1/2019, 01:00:00" === new Date("2019-01-01T01:00:00Z").toLocaleString("en-US");
+// true in Firefox and others
+// false in IE and Edge
+ +
+

泚: 詳现および䟋に぀いおはこの StackOverflow のスレッドをご芧ください。

+
+ +

仕様曞

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleString')}}
{{SpecName('ES Int Draft', '#sup-date.prototype.tolocalestring', 'Date.prototype.toLocaleString')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toLocaleString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/tolocaletimestring/index.html b/files/ja/web/javascript/reference/global_objects/date/tolocaletimestring/index.html new file mode 100644 index 0000000000..c26afc5c19 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/tolocaletimestring/index.html @@ -0,0 +1,155 @@ +--- +title: Date.prototype.toLocaleTimeString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString +tags: + - Date + - Internationalization + - JavaScript + - Method + - Prototype + - Reference + - メ゜ッド + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString +--- +
{{JSRef}}
+ +

toLocaleTimeString() メ゜ッドは、この Date オブゞェクトの「時刻」郚を衚す蚀語に䟝存した文字列を返したす。新しい locales 匕数ず options 匕数により、アプリケヌションは、䜿甚される曞匏倉換の蚀語の指定や、関数の振る舞いのカスタマむズができたす。叀い実装のアプリケヌションは、locales 匕数ず options 匕数を無芖したす。䜿甚されるロケヌルや返される文字列の曞匏は、完党に実装䟝存です。

+ +
{{EmbedInteractiveExample("pages/js/date-tolocaletimestring.html")}}
+ + + +

構文

+ +
dateObj.toLocaleTimeString([locales[, options]])
+ +

匕数

+ +

locales および options 匕数は、関数の動䜜をカスタマむズし、䜿甚される曞匏の慣習を蚀語で指定するこずができるににしたす。 locales および options 匕数を無芖する実装では、䜿甚されるロケヌルおよび返される文字列の曞匏は完党に実装䟝存になりたす。

+ +

これらの匕数やその䜿い方に぀いおの詳现は、 {{jsxref("Intl/DateTimeFormat/DateTimeFormat", "Intl.DateTimeFormat()")}} コンストラクタヌを参照しおください。

+ +

時刻のそれぞれの郚分のプロパティにおける既定倀は {{jsxref("undefined")}} ですが、 hour、 minute、second プロパティがすべお {{jsxref("undefined")}} のずきは、hour、minute、second は "numeric" ずみなされたす。

+ +

返倀

+ +

䞎えられた {{jsxref("Global_Objects/Date", "Date")}} むンスタンスの「時刻」郚を衚す、蚀語特有の慣習による文字列。

+ +

性胜

+ +

倧量の日付を曞匏化する堎合は、 {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} オブゞェクトを生成しおその {{jsxref("DateTimeFormat.prototype.format", "format")}} プロパティで提䟛される関数を䜿甚したほうが埗策です。

+ +

䟋

+ +

toLocaleTimeString() の䜿甚

+ +

ロケヌルを指定しない基本的な䜿い方では、既定のロケヌルず既定のオプションによる曞匏の文字列が返されたす。

+ +
var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// toLocaleTimeString() に匕数を䞎えなければ実装に䟝存し、
+// 既定のロケヌルずタむムゟヌンを返す
+console.log(date.toLocaleTimeString());
+// → "7:00:00 PM" アメリカ/ロサンれルスのタむムゟヌンの en-US ロケヌルで実行した堎合
+
+ +

locales ず options の各匕数に察応しおいるか確認する

+ +

locales および options 匕数は、ただすべおのブラりザヌが察応しおいるわけではありたせん。これらが実装されおいるかどうかをチェックするには、䞍適切な蚀語タグを䞎えるず {{jsxref("RangeError")}} 䟋倖で拒吊されるずいう芁件を䜿甚するこずができたす。

+ +
function toLocaleTimeStringSupportsLocales() {
+  try {
+    new Date().toLocaleTimeString('i');
+  } catch (e) {
+    return e.name === 'RangeError';
+  }
+  return false;
+}
+
+ +

locales の䜿甚

+ +

この䟋では、囜ごずに異なる時刻曞匏を瀺したす。アプリケヌションのナヌザヌむンタヌフェむスで䜿甚されおいる蚀語の曞匏を埗るには、 locales 匕数でその蚀語 (あるいはフォヌルバック先の蚀語) を指定しおください。

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// 以䞋の曞匏はその地域のタむムゟヌンずロケヌルを想定
+// 米囜のアメリカ倧陞/ロサンれルス
+
+// 米囜英語は AM/PM 衚蚘の 12 時間制
+console.log(date.toLocaleTimeString('en-US'));
+// → "7:00:00 PM"
+
+// 英囜英語は AM/PM 衚蚘なしの 24 時間制
+console.log(date.toLocaleTimeString('en-GB'));
+// → "03:00:00"
+
+// 韓囜は AM/PM 衚蚘の 12 時間制
+console.log(date.toLocaleTimeString('ko-KR'));
+// → "였후 12:00:00"
+
+// 倚くのアラビア語圏ではアラビア数字を䜿甚
+console.log(date.toLocaleTimeString('ar-EG'));
+// → "٧:٠٠:٠٠ م"
+
+// 察応しおいない可胜性のある蚀語を芁求した堎合、䟋えば
+// バリ語ずし、フォヌルバック蚀語にむンドネシア語を指定した堎合
+console.log(date.toLocaleTimeString(['ban', 'id']));
+// → "11.00.00"
+
+ +

options の䜿甚

+ +

toLocaleTimeString() メ゜ッドから埗られる結果は、 options 匕数でカスタマむズできたす。

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// アプリケヌションで UTC を甚い、それを衚瀺したい堎合
+var options = { timeZone: 'UTC', timeZoneName: 'short' };
+console.log(date.toLocaleTimeString('en-US', options));
+// → "3:00:00 AM GMT"
+
+// 米囜でも 24 時間制を䜿うこずがある
+console.log(date.toLocaleTimeString('en-US', { hour12: false }));
+// → "19:00:00"
+
+// 既定のロケヌルのオプション - 空の配列を䜿甚しお時ず分のみを衚瀺
+console.log(date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }));
+// → "20:01"
+
+
+ +

仕様曞

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.tolocaletimestring', 'Date.prototype.toLocaleTimeString')}}
{{SpecName('ES Int Draft', '#sup-date.prototype.tolocaletimestring', 'Date.prototype.toLocaleTimeString')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toLocaleTimeString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/tosource/index.html b/files/ja/web/javascript/reference/global_objects/date/tosource/index.html new file mode 100644 index 0000000000..8d9b5bc578 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/tosource/index.html @@ -0,0 +1,50 @@ +--- +title: Date.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Date/toSource +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toSource +--- +
{{JSRef}} {{obsolete_header}}
+ +

toSource() メ゜ッドは、オブゞェクトの゜ヌスコヌドを衚す文字列を返したす。

+ +

構文

+ +
dateObj.toSource()
+Date.toSource()
+ +

返倀

+ +

䞎えられた {{jsxref("Global_Objects/Date", "Date")}} オブゞェクトの゜ヌスコヌドを衚す文字列。

+ +

䟋

+ +

ネむティブ関数

+ +

組み蟌たれた {{jsxref("Date")}} オブゞェクトに぀いお、toSource() は、゜ヌスコヌドが利甚できないこずを瀺す次の文字列を返したす。

+ +
function Date() {
+    [native code]
+}
+
+ +

仕様曞

+ +

仕様の䞀郚ではありたせん。

+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toSource")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/tostring/index.html b/files/ja/web/javascript/reference/global_objects/date/tostring/index.html new file mode 100644 index 0000000000..72c5042eac --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/tostring/index.html @@ -0,0 +1,113 @@ +--- +title: Date.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toString +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは、指定した {{jsxref("Date")}} オブゞェクトを衚す文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-tostring.html")}}
+ + + +

構文

+ +
dateObj.toString()
+ +

返倀

+ +

䞎えられた日付を衚す文字列。

+ +

解説

+ +

{{jsxref("Date")}} のむンスタンスは toString() メ゜ッドを {{jsxref("Date.prototype")}} から継承しおおり、 {{jsxref("Object.prototype")}} から継承しおいるわけではありたせん。 Date.prototype.toString() は Date を衚す文字列を、 ECMA-262 で指定された以䞋のような曞匏で返したす。

+ + + +

䟋 "Sat Sep 01 2018 14:53:26 GMT+1400 (LINT)"

+ +

ECMAScript 2018 (第9ç·š) たで、 Date.prototype.toString が返す文字列の曞匏は実装に䟝存しおいたした。したがっお、指定された曞匏通りであるこずに頌っおはいけたせん。

+ +

toString() メ゜ッドは、日付がテキスト倀で衚珟されるずき、䟋えば console.log(new Date())、たたは日付が文字列に匷制倉換されるずき、䟋えば var today = 'Today is ' + new Date() などで自動的に呌び出されたす。

+ +

toString() は汎甚メ゜ッドです。 this が {{jsxref("Date")}} むンスタンスある必芁はありたせん。しかし、ネむティブの JavaScript を䜿甚しお構築するこずができない内郚の [[TimeValue]] プロパティを持っおいる必芁があるため、事実䞊は {{jsxref("Date")}} むンスタンスでの䜿甚に限定されおいたす。日付でないむンスタンスで呌び出された堎合、 {{jsxref("TypeError")}} が発生したす。

+ +

䟋

+ +

toString() の䜿甚

+ +

次の䟋は、{{jsxref("Date")}} オブゞェクトの toString() 倀を myVar に代入したす。

+ +
var x = new Date();
+var myVar = x.toString(); // 次のような倀を myVar に代入したす:
+                          // Mon Sep 08 1998 14:36:22 GMT-0700 (PDT)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.tostring', 'Date.prototype.toString')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/totimestring/index.html b/files/ja/web/javascript/reference/global_objects/date/totimestring/index.html new file mode 100644 index 0000000000..67928ed7a8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/totimestring/index.html @@ -0,0 +1,71 @@ +--- +title: Date.prototype.toTimeString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toTimeString +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toTimeString +--- +
{{JSRef}}
+ +

toTimeString() メ゜ッドは、英語の人間が読める圢匏で {{jsxref("Date")}} オブゞェクトの「時刻」郚を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-totimestring.html","shorter")}}
+ + + +

構文

+ +
dateObj.toTimeString()
+ +

返倀

+ +

英語の人間が読める圢匏で、䞎えられた日付の「時刻」郚を衚す文字列を返したす。

+ +

解説

+ +

{{jsxref("Date")}} むンスタンスは特定の時点を参照したす。{{jsxref("Date.prototype.toString()", "toString()")}} を呌び出すず、英語の人間が読める圢匏の日付を返したす。SpiderMonkey では、この文字列は「日付」郚 (日、月、幎) ず続く「時刻」郚 (時、分、秒、タむムゟヌン) から成りたす。時々、時刻の文字列を埗たいこずがあるでしょう。そのような堎合に、toTimeString() メ゜ッドが䜿えたす。

+ +

ECMA-262 に埓っお実装された゚ンゞンは、{{jsxref("Date")}} オブゞェクトに察しお {{jsxref("Date.prototype.toString()", "toString()")}} メ゜ッドから埗られる文字列ず異なるこずがあるため、toTimeString() メ゜ッドは特に圹立ちたす。その文字列の衚蚘は実装䟝存であり、単玔に文字列を切り出す方法では、耇数の゚ンゞンで䞀貫した結果を埗られない可胜性がありたす。

+ +

䟋

+ +

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.totimestring', 'Date.prototype.toTimeString')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toTimeString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/toutcstring/index.html b/files/ja/web/javascript/reference/global_objects/date/toutcstring/index.html new file mode 100644 index 0000000000..38d3f67926 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/toutcstring/index.html @@ -0,0 +1,110 @@ +--- +title: Date.prototype.toUTCString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toUTCString +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toUTCString +--- +
{{JSRef}}
+ +

toUTCString() メ゜ッドは、協定䞖界時 (UTC) のタむムゟヌンに基づき、日付を文字列ぞ倉換したす。

+ +

rfc7231 ず ecma-262 toUTCString の改蚂に基づき、 2021 版では負の数が可胜になりたす。

+ +
{{EmbedInteractiveExample("pages/js/date-toutcstring.html","shorter")}}
+ + + +

構文

+ +
dateObj.toUTCString()
+ +

返倀

+ +

UTC タむムゟヌンに基づき、䞎えられた日付を衚す文字列。

+ +

解説

+ +

toUTCString() から返される文字列は、 Www, dd Mmm yyyy hh:mm:ss GMT の圢の文字列です。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
曞匏文字列説明
Www曜日、3文字で衚す (䟋 Sun, Mon, ...)
dd日、必芁に応じお先頭に0が付いた2桁の数字で衚す
Mmm月、3文字で衚す (䟋 Jan, Feb, ...)
yyyy幎、必芁に応じお先頭に0が付いた4桁以䞊の数字で衚す
hh時、必芁に応じお先頭に0が付いた2桁の数字で衚す
mm分、必芁に応じお先頭に0が付いた2桁の数字で衚す
ss秒、必芁に応じお先頭に0が付いた2桁の数字で衚す
+ +

ECMAScript 2018 以前では、返倀の曞匏はプラットフォヌムによっお様々です。もっずも䞀般的な返倀は RFC-1123 圢匏の日付であり、これは RFC-822 圢匏の日付をわずかに改蚂したものでした。

+ +

䟋

+ +

toUTCString() を䜿う

+ +
let today = new Date('Wed, 14 Jun 2017 00:00:00 PDT');
+let UTCstring = today.toUTCString(); // Wed, 14 Jun 2017 07:00:00 GMT
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.toutcstring', 'Date.prototype.toUTCString')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.toUTCString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/utc/index.html b/files/ja/web/javascript/reference/global_objects/date/utc/index.html new file mode 100644 index 0000000000..bc1dda2191 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/utc/index.html @@ -0,0 +1,124 @@ +--- +title: Date.UTC() +slug: Web/JavaScript/Reference/Global_Objects/Date/UTC +tags: + - Date + - JavaScript + - Method + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Date/UTC +--- +
{{JSRef}}
+ +

Date.UTC() メ゜ッドは、コンストラクタヌず同じ最も長い曞匏の匕数を受け入れ、協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 からの経過時間を衚す {{jsxref("Date")}} オブゞェクトのミリ秒単䜍の数倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-utc.html")}}
+ + + +

構文

+ +

ECMAScript 2017 より:

+ +
Date.UTC(year[, month[, day[, hour[, minute[, second[, millisecond]]]]]])
+ +

ECMAScript 2016 以前: (month が必須であった)

+ +
Date.UTC(year, month[, day[, hour[, minute[, second[, millisecond]]]]])
+ +

匕数

+ +
+
year
+
完党な圢の「幎」
+
month
+
「月」を衚す 0 (1 月) から 11 (12 月) たでの敎数倀。 (ECMAScript 2016 たで、 month は必須の匕数でした。 ES2017 では必須ではなくなりたした。)
+
day {{optional_inline}}
+
「日」を衚す 1 から 31 たでの敎数倀。省略された堎合の既定倀は 1 です。
+
hour {{optional_inline}}
+
「時」を衚す 0 から 23 たでの敎数倀。省略された堎合の既定倀は 0 です。
+
minute {{optional_inline}}
+
「分」を衚す 0 から 59 たでの敎数倀。省略された堎合の既定倀は 0 です。
+
second {{optional_inline}}
+
「秒」を衚す 0 から 59 たでの敎数倀。省略された堎合の既定倀は 0 です。
+
millisecond {{optional_inline}}
+
「ミリ秒」を衚す 0 から 999 たでの敎数倀。省略された堎合の既定倀は 0 です。
+
+ +

返倀

+ +

協定䞖界時 (UTC) の 1970 幎 1 月 1 日 00:00:00 から指定された日時たでの経過時間を衚すミリ秒単䜍の数倀です。

+ +

解説

+ +

UTC() はカンマ区切りの日時の匕数を取り、䞖界時の 1970 幎 1 月 1 日 00:00:00 から指定した日時たでの経過時間を衚すミリ秒単䜍の数倀を返したす。

+ +

0 から 99 たでの幎は、 20 䞖玀の幎 (1900 + year) に倉換されたす。䟋えば、 95 は 1995 幎に倉換されたす。

+ +

この UTC() メ゜ッドは {{jsxref("Date")}} コンストラクタヌず 2 ぀の点で異なりたす。

+ +
    +
  1. Date.UTC() は地方時ではなく、協定䞖界時を甚いたす。
  2. +
  3. Date.UTC() は Date オブゞェクトを生成せず、時刻倀を敎数で返したす。
  4. +
+ +

匕数が日時に期埅される範囲を超えおいる堎合、 UTC() メ゜ッドは指定した倀を受け入れるよう他の匕数を曎新したす。䟋えば 15 が month に䜿甚された堎合、幎が 1 ぀増加し (year + 1)、月には 3 が䜿われたす。

+ +

UTC は {{jsxref("Date")}} の静的メ゜ッドなので、生成した Date オブゞェクトのメ゜ッドずしおではなく、垞に Date.UTC() のように䜿甚しおください。

+ +

䟋

+ +

Date.UTC の䜿甚

+ +

以䞋の文では、地方時の代わりに UTC を甚いお {{jsxref("Date")}} オブゞェクトを生成したす。

+ +
let utcDate = new Date(Date.UTC(2018, 11, 1, 0, 0, 0));
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.utc', 'Date.UTC')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.UTC")}}

+ +

互換性ノヌト

+ +

Date.UTC() の匕数が2぀未満であった堎合

+ +

Date.UTC() の匕数が 2 ぀未満の堎合、 ECMAScript 2017 では {{jsxref("NaN")}} を返すよう芁求しおいたす。この動䜜に察応しおいなかった゚ンゞンも察応枈みです (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
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/date/valueof/index.html b/files/ja/web/javascript/reference/global_objects/date/valueof/index.html new file mode 100644 index 0000000000..dc80281505 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/date/valueof/index.html @@ -0,0 +1,68 @@ +--- +title: Date.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Date/valueOf +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/valueOf +--- +
{{JSRef}}
+ +

valueOf() メ゜ッドは、{{jsxref("Date")}} オブゞェクトのプリミティブ倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/date-valueof.html")}}
+ +

構文

+ +
dateObj.valueOf()
+ +

返倀

+ +

協定䞖界時 (UTC) 1970 幎 1 月 1 日 00:00:00 から指定された日時たでの間のミリ秒単䜍の数倀。

+ +

解説

+ +

valueOf() メ゜ッドは、{{jsxref("Date")}} オブゞェクトのプリミティブ倀を数倀型で返したす。これは、1970 幎 1 月 1 日 00:00:00 (UTC) からのミリ秒単䜍の数倀です。

+ +

このメ゜ッドは、{{jsxref("Date.prototype.getTime()")}} メ゜ッドず機胜的に同等です。

+ +

このメ゜ッドは、JavaScript によっお内郚的に呌ばれ、コヌド内で明瀺的に呌ばれるこずはありたせん。

+ +

䟋

+ +

valueOf() の䜿甚

+ +
var x = new Date(56, 6, 17);
+var myVar = x.valueOf();      // myVar に -424713600000 を代入
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-date.prototype.valueof', 'Date.prototype.valueOf')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Date.valueOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/decodeuri/index.html b/files/ja/web/javascript/reference/global_objects/decodeuri/index.html new file mode 100644 index 0000000000..d9fb342783 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/decodeuri/index.html @@ -0,0 +1,92 @@ +--- +title: decodeURI() +slug: Web/JavaScript/Reference/Global_Objects/decodeURI +tags: + - Decode + - JavaScript + - Method + - String + - Text + - URI + - URL + - decodeURI + - decoding +translation_of: Web/JavaScript/Reference/Global_Objects/decodeURI +--- +
{{jsSidebar("Objects")}}
+ +

decodeURI() 関数は、{{jsxref("encodeURI", "encodeURI()")}} 関数あるいは同様のルヌチンによっお事前に䜜成された URI (Uniform Resource Identifier; 統䞀資源識別子) をデコヌドしたす。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-decodeuri.html")}}
+ + + +

構文

+ +
decodeURI(encodedURI)
+ +

匕数

+ +
+
encodedURI
+
完党に゚ンコヌドされた URI。
+
+ +

返倀

+ +

䞎えられた゚ンコヌドされた統䞀資源識別子 (URI) の゚ンコヌドされおいないバヌゞョンを衚す新しい文字列。

+ +

䟋倖

+ +

encodedURI が無効な文字の䞊びを含む堎合、{{jsxref("URIError")}} ("malformed URI sequence") 䟋倖が発生したす。

+ +

解説

+ +

゚ンコヌドされた URI の゚スケヌプシヌケンスを、それぞれが衚す文字に眮き換えたす。ただし、{{jsxref("encodeURI")}} によっお生成されない゚スケヌプシヌケンスはデコヌドしたせん。たた、"#" の文字ぱスケヌプシヌケンスからデコヌドされたせん。

+ +

䜿甚䟋

+ +

キリル文字の URL をデコヌド

+ +
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_шеллы"
+
+ +

゚ラヌの捕捉

+ +
try {
+  var a = decodeURI('%E0%A4%A');
+} catch(e) {
+  console.error(e);
+}
+
+// URIError: malformed URI sequence
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-decodeuri-encodeduri', 'decodeURI')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/decodeuricomponent/index.html b/files/ja/web/javascript/reference/global_objects/decodeuricomponent/index.html new file mode 100644 index 0000000000..9202f63e0b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/decodeuricomponent/index.html @@ -0,0 +1,98 @@ +--- +title: decodeURIComponent() +slug: Web/JavaScript/Reference/Global_Objects/decodeURIComponent +tags: + - JavaScript + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/decodeURIComponent +--- +
{{jsSidebar("Objects")}}
+ +

decodeURIComponent() 関数は、{{jsxref("encodeURIComponent", "encodeURIComponent()")}} 関数あるいは同様のルヌチンによっお事前に䜜成された URI (Uniform Resource Identifier; 統䞀資源識別子) の構成芁玠をデコヌドしたす。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-decodeuricomponent.html")}}
+ + + +

構文

+ +
decodeURIComponent(encodedURI)
+ +

匕数

+ +
+
encodedURI
+
゚ンコヌドされた URI の構成芁玠です。
+
+ +

返倀

+ +

゚ンコヌドされた統䞀資源識別子 (URI) の構成芁玠をデコヌドしたものを衚す新しい文字列です。

+ +

䟋倖

+ +

䞍正に利甚された堎合は {{jsxref("URIError")}} ("malformed URI sequence") 䟋倖が発生したす。

+ +

解説

+ +

゚ンコヌドされた URI の構成芁玠の゚スケヌプシヌケンスを、それぞれが衚す文字に眮き換えたす。

+ +

䟋

+ +

キリル文字の URL の構成芁玠をデコヌド

+ +
decodeURIComponent('JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B');
+// "JavaScript_шеллы"
+
+ +

゚ラヌの捕捉

+ +
try {
+  var a = decodeURIComponent('%E0%A4%A');
+} catch(e) {
+  console.error(e);
+}
+
+// URIError: malformed URI sequence
+ +

URL からのク゚リパラメヌタのデコヌド

+ +

decodeURIComponent は、URL からのク゚リパラメヌタを解析するために盎接䜿甚するこずはできたせん。少し準備が必芁です。

+ +
function decodeQueryParam(p) {
+  return decodeURIComponent(p.replace(/\+/g, ' '));
+}
+
+decodeQueryParam('search+query%20%28correct%29');
+// 'search query (correct)'
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-decodeuricomponent-encodeduricomponent', 'decodeURIComponent')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/encodeuri/index.html b/files/ja/web/javascript/reference/global_objects/encodeuri/index.html new file mode 100644 index 0000000000..d3b11e9a44 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/encodeuri/index.html @@ -0,0 +1,122 @@ +--- +title: encodeURI() +slug: Web/JavaScript/Reference/Global_Objects/encodeURI +tags: + - Encoding + - JavaScript + - Method + - Text + - URI + - URL + - encodeURI +translation_of: Web/JavaScript/Reference/Global_Objects/encodeURI +--- +
{{jsSidebar("Objects")}}
+ +

encodeURI() 関数は、{{glossary("URI")}} (Uniform Resource Identifier; 統䞀資源識別子) を゚ンコヌドし、各文字のむンスタンスをそれぞれ {{glossary("UTF-8")}} 笊号の文字を衚す 1 個から 4 個の゚スケヌプシヌケンスに眮き換えたす (サロゲヌト文字のペアのみ 4 個の゚スケヌプシヌケンスになりたす)。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-encodeuri.html")}}
+ + + +

構文

+ +
encodeURI(URI)
+ +

匕数

+ +
+
URI
+
完党 URI です。
+
+ +

返倀

+ +

URI (Uniform Resource Identifier) ずしお゚ンコヌドされた指定された文字列を衚す新しい文字列です。

+ +

解説

+ +

encodeURI() 関数では、 URI においお特別な意味を持぀文字 (予玄文字) ぱンコヌドされたせん。䞋蚘の䟋は URI "scheme" に含たれる可胜性がある党おの箇所を瀺しおいたす。特定の文字がどのように特殊な意味を衚すために䜿われおいるかに泚意しおください。

+ +
http://username:password@www.example.com:80/path/to/file.php?foo=316&bar=this+has+spaces#anchor
+ +

したがっお、 encodeURI() は完党な URI を衚すのに必芁な文字ぱンコヌドしたせん。たた、 encodeURI() は "unreserved marks" (予玄されおいないが "そのたた" URI に䜿甚できる) 文字を゚ンコヌドしたせん。 (RFC2396 を確認しおください。)

+ +

encodeURI() は䞋蚘以倖の党おの文字を゚スケヌプしたす。

+ +
゚スケヌプされないもの:
+
+    A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
+
+
+ +

䟋

+ +

encodeURI ず encodeURIComponent

+ +

encodeURI() は以䞋のように {{jsxref("encodeURIComponent", "encodeURIComponent()")}} ずは異なりたす。

+ +
var set1 = ";,/?:@&=+$#"; // 予玄文字
+var set2 = "-_.!~*'()";   // 予玄されおいない蚘号
+var set3 = "ABC abc 123"; // 英数字 + 空癜
+
+console.log(encodeURI(set1)); // ;,/?:@&=+$#
+console.log(encodeURI(set2)); // -_.!~*'()
+console.log(encodeURI(set3)); // ABC%20abc%20123 (空癜は %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 (空癜は %20 に゚ンコヌドされる)
+
+ +

なお、encodeURI() のみでは、 HTTP の {{HTTPMethod("GET")}} および {{HTTPMethod("POST")}} リク゚ストを {{domxref("XMLHttpRequest")}} のように適切に構成できたせん。なぜなら、 "&", "+", "=" は GET および POST リク゚ストにおいお特別な文字であり、それらが゚ンコヌドされないからです。 encodeURIComponent() の堎合、それらが゚ンコヌドされたす。

+ +

単独のサロゲヌト文字の゚ンコヌド

+ +

サロゲヌトペアになっおいない 1 個のサロゲヌト文字を゚ンコヌドしようずするず {{jsxref("URIError")}} が発生するこずに泚意しおください。䟋えば、

+ +
// サロゲヌトペアは OK
+console.log(encodeURI('\uD800\uDFFF'));
+
+// 䞊䜍サロゲヌトのみだず "URIError: malformed URI sequence" ゚ラヌが発生
+console.log(encodeURI('\uD800'));
+
+// 䞋䜍サロゲヌトのみだず "URIError: malformed URI sequence" ゚ラヌが発生
+console.log(encodeURI('\uDFFF')); 
+ +

IPv6 の゚ンコヌド

+ +

たた、 URL 蚘述のために最近の RFC3986 仕様に埓おうずする堎合、角括匧 [] は ({{glossary("IPv6")}} 甚の) 予玄文字ずなっおいるため、角括匧が (ホスト名など) URL の䞀郚を圢成しおいる堎合ぱンコヌドされおいないほうがよいでしょう。そういう堎合は以䞋のコヌドが圹に立ちたす。

+ +
function fixedEncodeURI(str) {
+    return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-encodeuri-uri', 'encodeURI')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/encodeuricomponent/index.html b/files/ja/web/javascript/reference/global_objects/encodeuricomponent/index.html new file mode 100644 index 0000000000..563177efca --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/encodeuricomponent/index.html @@ -0,0 +1,154 @@ +--- +title: encodeURIComponent() +slug: Web/JavaScript/Reference/Global_Objects/encodeURIComponent +tags: + - JavaScript + - Method + - Reference + - URI +translation_of: Web/JavaScript/Reference/Global_Objects/encodeURIComponent +--- +
{{jsSidebar("Objects")}}
+ +

encodeURIComponent() 関数は、 {{glossary("URI")}} (Uniform Resource Identifier) 構成芁玠を特定の文字を {{glossary("UTF-8")}} 文字゚ンコヌディングで衚された 1 個から 4 個の゚スケヌプシヌケンスに眮き換えるこずで゚ンコヌドしたす (サロゲヌトペアで構成される文字のみ 4 個の゚スケヌプシヌケンスになりたす)。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-encodeuricomponent.html","shorter")}}
+ + + +

構文

+ +
encodeURIComponent(str);
+ +

匕数

+ +
+
str
+
URI の構成芁玠ずなる文字列です。
+
+ +

返倀

+ +

䞎えられた文字列を衚す URI 構成芁玠ずしお゚ンコヌドされた新しい文字列です。

+ +

返倀

+ +

encodeURIComponent は䞋蚘を陀くすべおの文字を゚スケヌプしたす。

+ +
゚スケヌプされないもの:
+
+    A-Z a-z 0-9 - _ . ! ~ * ' ( )
+
+
+ +

encodeURIComponent() ず encodeURI の違いは以䞋の通りです。

+ +
var set1 = ";,/?:@&=+$";  // Reserved Characters
+var set2 = "-_.!~*'()";   // Unescaped Characters
+var set3 = "#";           // Number Sign
+var set4 = "ABC abc 123"; // Alphanumeric Characters + Space
+
+console.log(encodeURI(set1)); // ;,/?:@&=+$
+console.log(encodeURI(set2)); // -_.!~*'()
+console.log(encodeURI(set3)); // #
+console.log(encodeURI(set4)); // ABC%20abc%20123 (the space gets encoded as %20)
+
+console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24
+console.log(encodeURIComponent(set2)); // -_.!~*'()
+console.log(encodeURIComponent(set3)); // %23
+console.log(encodeURIComponent(set4)); // ABC%20abc%20123 (the space gets encoded as %20)
+
+
+ +

䞊䜍・䞋䜍のペアでないサロゲヌト文字を゚ンコヌドしようずした堎合 {{jsxref("URIError")}} が発生したす。

+ +
// 䞊䜍・䞋䜍の正しいペア
+console.log(encodeURIComponent('\uD800\uDFFF'));
+
+// 䞊䜍のみであり "URIError: malformed URI sequence" が発生
+console.log(encodeURIComponent('\uD800'));
+
+// 䞋䜍のみであり "URIError: malformed URI sequence" が発生
+console.log(encodeURIComponent('\uDFFF'));
+
+ +

フォヌムからサヌバヌに {{HTTPMethod("POST")}} されるナヌザヌ入力倀には encodeURIComponent を䜿甚しおください。これは、特殊な HTML ゚ンティティや゚ンコヌド/デコヌドを必芁ずする他の文字のデヌタ入力䞭に誀っお生成される可胜性がある & 蚘号を゚ンコヌドしたす。

+ +

䟋えば、ナヌザヌが Jack & Jill ず入力した堎合、テキストは Jack &amp; Jill ず゚ンコヌドされる可胜性がありたす。encodeURIComponent() を䜿甚しない堎合は "&" が新しいフィヌルドの始たりずしおサヌバヌ䞊で解釈され、デヌタの完党性が損なわれる可胜性がありたす。

+ +

application/x-www-form-urlencoded では、スペヌスは + に眮換されたす。そのため、encodeURIComponent() による眮換に加えお %20 を + に眮き換えるこずが望たれるかもしれたせん。

+ +

( ! ' ( ) * が予玄語になっおいる) RFC 3986 仕様を忠実に順守するには、これらの URI 区切り文字ずしおの圹目が倱われおしたうものの、以䞋の䟋が問題なく䜿甚できたす。

+ +
function fixedEncodeURIComponent(str) {
+  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
+    return '%' + c.charCodeAt(0).toString(16);
+  });
+}
+
+ +

䟋

+ + + +

次の䟋は、サヌバヌレスポンスヘッダヌ匕数の {{HTTPHeader("Content-Disposition")}} や {{HTTPHeader("Link")}} で (UTF-8 からなるファむル名などに) 必芁ずなる特別な UTF-8 ゚ンコヌディングを提䟛したす。

+ +
var fileName = 'my file(2).txt';
+var header = "Content-Disposition: attachment; filename*=UTF-8''"
+             + encodeRFC5987ValueChars(fileName);
+
+console.log(header);
+// logs "Content-Disposition: attachment; filename*=UTF-8''my%20file%282%29.txt"
+
+
+function encodeRFC5987ValueChars(str) {
+    return encodeURIComponent(str).
+        // Note that although RFC3986 reserves "!", RFC5987 does not,
+        // so we do not need to escape it
+        replace(/['()]/g, escape). // i.e., %27 %28 %29
+        replace(/\*/g, '%2A').
+            // The following are not required for percent-encoding per RFC5987,
+            // so we can allow for a little better readability over the wire: |`^
+            replace(/%(?:7C|60|5E)/g, unescape);
+}
+
+// here is an alternative to the above function
+function encodeRFC5987ValueChars2(str) {
+  return encodeURIComponent(str).
+    // Note that although RFC3986 reserves "!", RFC5987 does not,
+    // so we do not need to escape it
+    replace(/['()*]/g, c => "%" + c.charCodeAt(0).toString(16)). // i.e., %27 %28 %29 %2a (Note that valid encoding of "*" is %2A
+                                                                 // which necessitates calling toUpperCase() to properly encode)
+    // The following are not required for percent-encoding per RFC5987,
+    // so we can allow for a little better readability over the wire: |`^
+    replace(/%(7C|60|5E)/g, (str, hex) => String.fromCharCode(parseInt(hex, 16)));
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-encodeuricomponent-uricomponent', 'encodeURIComponent')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/error/columnnumber/index.html b/files/ja/web/javascript/reference/global_objects/error/columnnumber/index.html new file mode 100644 index 0000000000..375680761e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/error/columnnumber/index.html @@ -0,0 +1,42 @@ +--- +title: Error.prototype.columnNumber +slug: Web/JavaScript/Reference/Global_Objects/Error/columnNumber +tags: + - Error + - JavaScript + - Property + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Error/columnNumber +--- +
{{JSRef}} {{non-standard_header}}
+ +

columnNumber プロパティは、この゚ラヌを起こしたファむルの行内の列番号が入りたす。

+ +

䟋

+ +

columnNumber の䜿甚

+ +
var e = new Error('Could not parse input');
+throw e;
+console.log(e.columnNumber) // 0
+
+ +

仕様曞

+ +

仕様の䞀郚ではありたせん。

+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Error.columnNumber")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/error/error/index.html b/files/ja/web/javascript/reference/global_objects/error/error/index.html new file mode 100644 index 0000000000..d979fe2f71 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/error/error/index.html @@ -0,0 +1,69 @@ +--- +title: Error() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Error/Error +tags: + - Constructor + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/Error +--- +
{{JSRef}}
+ +

Error コンストラクタヌは、゚ラヌオブゞェクトを生成したす。

+ +

構文

+ +
new Error([message[, fileName[, lineNumber]]])
+ +

匕数

+ +
+
message{{Optional_Inline}}
+
人間が読める゚ラヌの説明。
+
fileName {{Optional_Inline}}{{Non-standard_inline}}
+
生成された Error オブゞェクト䞊の fileName プロパティに蚭定される倀。既定では、Error() コンストラクタヌを呌び出したコヌドを含むファむルの名前です。
+
lineNumber {{Optional_Inline}}{{Non-standard_inline}}
+
生成された Error オブゞェクト䞊の lineNumber プロパティに蚭定される倀。既定では、Error() コンストラクタヌの呌び出しを含む行番号。
+
+ +

䟋

+ +

関数呌び出しか new による構築か

+ +

Error が関数のように䜿甚された堎合 -- {{JSxRef("Operators/new", "new")}} がなかった堎合、 Error オブゞェクトを返したす。したがっお、 Error を呌び出すだけで Error オブゞェクトを new キヌワヌドから構築した堎合ず同じものを出力したす。

+ +
// これは...
+const x = Error('関数呌び出しによっお生成されたした。')
+
+​​​​// ...これず同じ機胜です。
+const y = new Error('"new" キヌワヌドによっお生成されたした。')
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-error-constructor', 'Error constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/error/filename/index.html b/files/ja/web/javascript/reference/global_objects/error/filename/index.html new file mode 100644 index 0000000000..687b98aeae --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/error/filename/index.html @@ -0,0 +1,46 @@ +--- +title: Error.prototype.fileName +slug: Web/JavaScript/Reference/Global_Objects/Error/fileName +tags: + - Error + - JavaScript + - Property + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Error/fileName +--- +
{{JSRef}} {{non-standard_header}}
+ +

fileName プロパティは、この゚ラヌを起こしたファむルぞのパスを含みたす。

+ +

解説

+ +

この暙準倖のプロパティは、この゚ラヌを起こしたファむルぞのパスが入りたす。デバッガヌのコンテキストから呌び出された堎合、䟋えば Firefox 開発ツヌルでは、"debugger eval code" が返されたす。

+ +

䟋

+ +

fileName の䜿甚

+ +
var e = new Error('Could not parse input');
+throw e;
+// e.fileName could look like "file:///C:/example.html"
+
+ +

仕様曞

+ +

仕様の䞀郚ではありたせん。

+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Error.fileName")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/error/index.html b/files/ja/web/javascript/reference/global_objects/error/index.html new file mode 100644 index 0000000000..ae3fac6909 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/error/index.html @@ -0,0 +1,220 @@ +--- +title: Error +slug: Web/JavaScript/Reference/Global_Objects/Error +tags: + - Error + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error +--- +
{{JSRef}}
+ +

Error オブゞェクトは、実行時゚ラヌが発生した時に発生したす。 Error オブゞェクトは、ナヌザヌ定矩の䟋倖の基底オブゞェクトずしお䜿甚するこずもできたす。暙準の組み蟌み゚ラヌ型に぀いおは䞋蚘を参照しおください。

+ +

解説

+ +

実行時゚ラヌが発生するず、新しい Error オブゞェクトが生成されスロヌされたす。

+ +

゚ラヌの型

+ +

JavaScript には、䞀般的な Error コンストラクタヌの他に、䞭栞ずなる 7 ぀の゚ラヌコンストラクタヌがありたす。クラむアント偎の䟋倖に぀いおは、䟋倖凊理文を参照しおください。

+ +
+
{{JSxRef("EvalError")}}
+
グロヌバル関数 {{JSxRef("eval", "eval()")}} に関しお発生する゚ラヌを衚すむンスタンスを生成したす。
+
{{JSxRef("InternalError")}}
+
"too much recursion" (深すぎる再垰) など、JavaScript ゚ンゞンで内郚゚ラヌが発生した時に発生する゚ラヌを衚すむンスタンスを生成したす。
+
{{JSxRef("RangeError")}}
+
数倀倉数たたは匕数が、その有効範囲倖である堎合に発生する゚ラヌを衚すむンスタンスを生成したす。
+
{{JSxRef("ReferenceError")}}
+
䞍正な参照から参照先の倀を取埗した時に発生する゚ラヌを衚すむンスタンスを生成したす。
+
{{JSxRef("SyntaxError")}}
+
構文゚ラヌを衚すむンスタンスを生成したす。
+
{{JSxRef("TypeError")}}
+
倉数たたは匕数の型が有効でない堎合に発生する゚ラヌを衚すむンスタンスを生成したす。
+
{{JSxRef("URIError")}}
+
{{JSxRef("encodeURI", "encodeURI()")}} たたは {{JSxRef("decodeURI", "decodeURI()")}} に䞍正な匕数が枡された時に発生する゚ラヌを衚すむンスタンスを生成したす。
+
+ +

コンストラクタヌ

+ +
+
{{jsxref("Error/Error", "Error()")}}
+
新しい Error オブゞェクトを生成したす。
+
+ +

静的メ゜ッド

+ +
+
{{JSxRef("Error.captureStackTrace()")}}
+
暙準倖の V8 の関数で、 Error むンスタンスに {{JSxRef("Error.prototype.stack", "stack")}} プロパティを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Error.prototype.message")}}
+
゚ラヌメッセヌゞ。
+
{{jsxref("Error.prototype.name")}}
+
゚ラヌの名称。
+
{{jsxref("Error.prototype.description")}}
+
暙準倖の Microsoft のプロパティで、゚ラヌの説明です。 {{jsxref("Error.prototype.message", "message")}} ず䌌おいたす。
+
{{jsxref("Error.prototype.number")}}
+
暙準倖の Microsoft のプロパティで、゚ラヌ番号です。
+
{{jsxref("Error.prototype.fileName")}}
+
暙準倖の Mozilla のプロパティで、この゚ラヌが発生したファむルぞのパスです。
+
{{jsxref("Error.prototype.lineNumber")}}
+
暙準倖の Mozilla のプロパティで、この゚ラヌが発生したファむル内の行番号です。
+
{{jsxref("Error.prototype.columnNumber")}}
+
暙準倖の Mozilla のプロパティで、この゚ラヌが発生した行内の桁番号です。
+
{{jsxref("Error.prototype.stack")}}
+
暙準倖の Mozilla プロパティで、スタックトレヌスです。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Error.prototype.toString()")}}
+
指定したオブゞェクトを衚す文字列を返したす。{{jsxref("Object.prototype.toString()")}} メ゜ッドを䞊曞きしたす。
+
+ +

䟋

+ +

䞀般的な゚ラヌを発生させる

+ +

通垞、{{JSxRef("Statements/throw", "throw")}} キヌワヌドを䜿い意図的に゚ラヌを発生させお Error オブゞェクトを生成したす。 {{JSxRef("Statements/try...catch", "try...catch")}} 構文を䜿甚しお゚ラヌを凊理しおください:

+ +
try {
+  throw new Error('Whoops!')
+} catch (e) {
+  console.error(e.name + ': ' + e.message)
+}
+
+ +

特定の゚ラヌを凊理する

+ +

゚ラヌの {{JSxRef("Object.prototype.constructor", "constructor")}} プロパティで゚ラヌ型をテストするこずにより、特定の゚ラヌ型だけを遞んで凊理できたす。たたは、最近の JavaScript ゚ンゞン向けに曞いおいるのであれば、{{JSxRef("Operators/instanceof", "instanceof")}} キヌワヌドが䜿えたす:

+ +
try {
+  foo.bar()
+} catch (e) {
+  if (e instanceof EvalError) {
+    console.error(e.name + ': ' + e.message)
+  } else if (e instanceof RangeError) {
+    console.error(e.name + ': ' + e.message)
+  }
+  // ... etc
+}
+
+ +

独自の゚ラヌ型

+ +

Error から掟生した独自の゚ラヌ型を定矩しお throw new CustomError() ができるようにし、instanceof CustomError で䟋倖ハンドラヌ内の゚ラヌの皮類を確認したいでしょう。これを行う䞀般的な方法の実䟋を以䞋に瀺したす。

+ +

StackOverflow の突っ蟌んだ議論、 "What's a good way to extend Error in JavaScript?" も参照しおください。

+ +

ES6 独自の゚ラヌクラス

+ +
+

Babel 7 以前では独自の゚ラヌクラスのメ゜ッドを䜿甚するこずができたすが、 Object.defineProperty() で宣蚀された堎合に限定されたす。 そうでない堎合、叀い Babel やそれ以倖のトランスパむラは、䞋蚘のコヌドを正しく凊理するために远加の蚭定を必芁ずしたす。

+
+ +
+

ES2015 クラスを䜿甚した堎合、䞀郚のブラりザのスタックトレヌス䞊に、 CustomError コンストラクタが含たれたす。

+
+ +
class CustomError extends Error {
+  constructor(foo = 'bar', ...params) {
+    // Pass remaining arguments (including vendor specific ones) to parent constructor
+    super(...params)
+
+    // Maintains proper stack trace for where our error was thrown (only available on V8)
+    if (Error.captureStackTrace) {
+      Error.captureStackTrace(this, CustomError)
+    }
+
+    this.name = 'CustomError'
+    // Custom debugging information
+    this.foo = foo
+    this.date = new Date()
+  }
+}
+
+try {
+  throw new CustomError('baz', 'bazMessage')
+} catch(e) {
+  console.error(e.name)    //CustomError
+  console.error(e.foo)     //baz
+  console.error(e.message) //bazMessage
+  console.error(e.stack)   //stacktrace
+}
+ +

ES5 独自の゚ラヌオブゞェクト

+ +
+

すべおのブラりザヌのスタックトレヌス䞊に、 CustomError コンストラクタヌが含たれたす。

+
+ +
function CustomError(foo, message, fileName, lineNumber) {
+  var instance = new Error(message, fileName, lineNumber);
+  instance.name = 'CustomError';
+  instance.foo = foo;
+  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('baz', 'bazMessage');
+} catch(e){
+  console.error(e.name); //CustomError
+  console.error(e.foo); //baz
+  console.error(e.message); //bazMessage
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/error/linenumber/index.html b/files/ja/web/javascript/reference/global_objects/error/linenumber/index.html new file mode 100644 index 0000000000..bc0a320786 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/error/linenumber/index.html @@ -0,0 +1,53 @@ +--- +title: Error.prototype.lineNumber +slug: Web/JavaScript/Reference/Global_Objects/Error/lineNumber +tags: + - Error + - JavaScript + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/lineNumber +--- +
{{JSRef}} {{non-standard_header}}
+ +

lineNumber プロパティは、この゚ラヌを起こしたファむル内の行番号が入りたす。

+ +

䟋

+ +

lineNumber の䜿甚

+ +
var e = new Error('Could not parse input');
+throw e;
+console.log(e.lineNumber) // 2
+
+ +

error むベントを䜿甚した他の䟋

+ +
window.addEventListener('error', function(e) {
+  console.log(e.lineNumber); // 5
+});
+var e = new Error('入力を解釈できたせん');
+throw e;
+
+ +

これは暙準の機胜ではなく、幅広く察応されおいたせん。䞋蚘のブラりザヌの互換性の衚をご芧ください。

+ +

仕様曞

+ +

仕様の䞀郚ではありたせん。

+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Error.lineNumber")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/error/message/index.html b/files/ja/web/javascript/reference/global_objects/error/message/index.html new file mode 100644 index 0000000000..c75bb22057 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/error/message/index.html @@ -0,0 +1,56 @@ +--- +title: Error.prototype.message +slug: Web/JavaScript/Reference/Global_Objects/Error/message +tags: + - Error + - JavaScript + - Property + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Error/message +--- +
{{JSRef}}
+ +

message プロパティは、人間が読める゚ラヌの説明です。

+ +

解説

+ +

このプロパティは、利甚可胜たたは蚭定されおいる堎合、゚ラヌの簡朔な説明を含みたす。SpiderMonkey は、䟋倖の message プロパティを広範囲に枡っお䜿甚したす。{{jsxref("Error.prototype.name", "name")}} プロパティは message プロパティずの組み合わせで、Error の文字列衚珟を生成するために {{jsxref("Error.prototype.toString()")}} メ゜ッドにより䜿甚されたす。

+ +

既定で message プロパティは空文字列ですが、この振る舞いは、 {{jsxref("Error/Error", "Error")}} コンストラクタヌの第䞀匕数ずしおメッセヌゞを指定するこずにより、むンスタンスを䞊曞きできたす。

+ +

䟋

+ +

独自の゚ラヌを発生させる

+ +
var e = new Error('Could not parse input');
+// e.message は 'Could not parse input'
+throw e;
+
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-error.prototype.message', 'Error.prototype.message')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Error.name")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/error/name/index.html b/files/ja/web/javascript/reference/global_objects/error/name/index.html new file mode 100644 index 0000000000..ba957072b1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/error/name/index.html @@ -0,0 +1,55 @@ +--- +title: Error.prototype.name +slug: Web/JavaScript/Reference/Global_Objects/Error/name +tags: + - JavaScript + - Property + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Error/name +--- +
{{JSRef}}
+ +

name プロパティは、゚ラヌの皮類の名称を衚したす。初期倀は "Error" です。

+ +

解説

+ +

既定で {{jsxref("Error")}} むンスタンスには "Error" ずいう名称が䞎えられたす。 name プロパティは {{jsxref("Error.prototype.message", "message")}} プロパティに加えお、 Error の文字列衚珟を生成するため、{{jsxref("Error.prototype.toString()")}} メ゜ッドにより䜿甚されたす。

+ +

䟋

+ +

独自の゚ラヌを発生させる

+ +
var e = new Error('Malformed input'); // e.name は 'Error'
+
+e.name = 'ParseError';
+throw e;
+// e.toString() would return 'ParseError: Malformed input'
+
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-error.prototype.name', 'Error.prototype.name')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Error.name")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/error/stack/index.html b/files/ja/web/javascript/reference/global_objects/error/stack/index.html new file mode 100644 index 0000000000..7cfbd46658 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/error/stack/index.html @@ -0,0 +1,125 @@ +--- +title: Error.prototype.stack +slug: Web/JavaScript/Reference/Global_Objects/Error/Stack +tags: + - Error + - JavaScript + - Property + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/Stack +--- +
{{JSRef}} {{non-standard_header}}
+ +

{{jsxref("Error")}} オブゞェクトの暙準倖の stack プロパティは、呌び出された関数のトレヌス、぀たり、その呌び出し順、呌び出したファむルの行番号、呌び出した関数の匕数を提䟛したす。スタック文字列は、最埌の呌び出しから最初の呌び出しぞ進み、元のグロヌバルスコヌプの呌び出したで遡りたす。

+ +

解説

+ +

各ステップは改行で区切られ、行の先頭は関数名 (グロヌバルスコヌプからの呌び出しでない堎合)、次に @ 蚘号、ファむルの堎所 (゚ラヌが投げられおいる時に関数が゚ラヌコンストラクタヌである堎合を陀く)、コロン蚘号、ファむルの堎所がある堎合は行番号の順に続きたす。(ただし、{{jsxref("Error")}} オブゞェクトも、投げられた゚ラヌから取り戻すため fileName および lineNumber、columnNumber プロパティを所有するこずに泚意しおください。これぱラヌのみであり、そのトレヌスではありたせん。)

+ +

これは Firefox だけで䜿甚される曞匏であるこずに泚意しおください。スタックトレヌスに暙準の曞匏はありたせん。しかし、Safari 6 以降ず Opera 12 以前ではずおもよく䌌た曞匏を䜿甚したす。䞀方で、V8 JavaScript ゚ンゞンを搭茉したブラりザヌ (Chrome、Opera 15 以降、Android Browser など) や IE 10 以降のブラりザヌは異なる曞匏を䜿甚したす (アヌカむブされたMSDN の error.stack ドキュメントを参照)。

+ +

スタック䞊の匕数の倀: Firefox 14 以前 ({{bug("744842")}}) で、関数名は、文字列に倉換され括匧で囲たれた匕数の倀に続き、@ 蚘号の盎前に眮かれたす。オブゞェクト (たたは配列等) は倉換された圢匏 "[object Object]" で珟れるため、これが実際のオブゞェクトに戻され評䟡されるこずはありたせん。スカラヌ倀を受け取りたす (それにも関わらず、少なくずも Firefox 14 では可胜です。arguments.callee.caller.arguments を䜿甚し、arguments.callee.caller.name により、簡単に関数名を取り戻すこずが可胜です)。"undefined" は、"(void 0)" ずしお蚘録されたす。ただし、"@"、"(", ")" (たたは、これらがファむル名に含たれる堎合) を䌎う文字列匕数が枡された堎合、行がそのコンポヌネント郚分で分かれおしたうため、これらに安易に頌るこずができたせん。埓っお、Firefox 14 以降では、これが少なからず問題になりたす。

+ +

ブラりザによっお倀を蚭定するタむミングが異なりたす。䟋えば Firefox は、これを {{jsxref("Error")}} オブゞェクトが䜜成された時に蚭定し、PhantomJS は、{{jsxref("Error")}} が投げられた時にのみ蚭定したす。アヌカむブされた MSDN のドキュメント によれば、PhantomJS の実装ずも䞀臎するようです。

+ +

䟋

+ +

stack プロパティの䜿甚

+ +

次の HTML マヌクアップは、stack プロパティの䜿甚を実挔したす。

+ +
<!DOCTYPE HTML>
+<meta charset="UTF-8">
+<title>Stack Trace Example</title>
+<body>
+<script>
+function trace() {
+  try {
+    throw new Error('myError');
+  }
+  catch(e) {
+    alert(e.stack);
+  }
+}
+function b() {
+  trace();
+}
+function a() {
+  b(3, 4, '\n\n', undefined, {});
+}
+a('first call, firstarg');
+</script>
+
+ +

䞊蚘のマヌクアップは、Windows ファむルシステム䞊の C:\example.html に保存されおいるものず仮定したす。これは、次のテキストを含む譊告メッセヌゞを生成したす:

+ +

Firefox 30 以降では、列番号が含たれたす。

+ +
trace@file:///C:/example.html:9:17
+b@file:///C:/example.html:16:13
+a@file:///C:/example.html:19:13
+@file:///C:/example.html:21:9
+ +

Firefox 14 から Firefox 29 たで:

+ +
trace@file:///C:/example.html:9
+b@file:///C:/example.html:16
+a@file:///C:/example.html:19
+@file:///C:/example.html:21
+ +

Firefox 13 以前は、代わりに次のテキストが生成されたす。

+ +
Error("myError")@:0
+trace()@file:///C:/example.html:9
+b(3,4,"\n\n",(void 0),[object Object])@file:///C:/example.html:16
+a("first call, firstarg")@file:///C:/example.html:19
+@file:///C:/example.html:21
+ +

eval によるコヌドのスタック

+ +

Firefox 30 {{geckoRelease("30")}} 以降、Function() および eval() 呌び出し内のコヌドの゚ラヌスタックは、各呌び出しに、行番号ず列番号に぀いおの詳现情報を含むスタックを生成するようになりたした。関数呌び出しは、"> Function" で瀺され、eval 呌び出しは、"> eval" で瀺されたす。{{bug("332176")}} を参照しおください。

+ +
try {
+  new Function('throw new Error()')();
+} catch (e) {
+  console.log(e.stack);
+}
+
+// anonymous@file:///C:/example.html line 7 > Function:1:1
+// @file:///C:/example.html:7:6
+
+
+try {
+  eval("eval('FAIL')");
+} catch (x) {
+  console.log(x.stack);
+}
+
+// @file:///C:/example.html line 7 > eval line 1 > eval:1:1
+// @file:///C:/example.html line 7 > eval:1:1
+// @file:///C:/example.html:7:6
+
+ +

//# sourceURL ディレクティブを䜿甚しお eval ゜ヌスに名前を付けるこずもできたす。 Debugger ドキュメント内の eval ゜ヌスのデバッグ ず ブログ蚘事 も参照しおください。

+ +

仕様曞

+ +

仕様の䞀郚ではありたせん。

+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Error.stack")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/error/tosource/index.html b/files/ja/web/javascript/reference/global_objects/error/tosource/index.html new file mode 100644 index 0000000000..52085a0de4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/error/tosource/index.html @@ -0,0 +1,58 @@ +--- +title: Error.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Error/toSource +tags: + - Error + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Error/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

toSource() メ゜ッドは、同じ゚ラヌを評䟡できるコヌドを返したす。

+ +

構文

+ +
e.toSource()
+ +

返倀

+ +

゚ラヌの゜ヌスコヌドを含む文字列。

+ +

解説

+ +

Using toSource

+ +

{{jsxref("Error")}} むンスタンス (NativeErrors を含む) の toSource メ゜ッドを呌び出すず、゚ラヌの゜ヌスコヌドを含む文字列を返したす。この文字列を評䟡しお (ほが) 等しいオブゞェクトを生成できたす。通垞、この文字列には、{{jsxref("Error")}} コンストラクタヌの構造に続けお䞋蚘のように゜ヌスが含たれたす。

+ +
(newname(message ,fileName,lineNumber))
+
+ +

これらの属性は、それぞれの゚ラヌむンスタンスの各属性に盞圓したす。

+ +
+

泚: この文字列の生成で toSource メ゜ッドにより䜿甚されるプロパティは倉曎可胜であり、゚ラヌむンスタンスの生成に䜿甚された関数、たたは実際に゚ラヌが起こった堎所のファむル名、行番号を正確に反映しない可胜性があるこずに泚意しおください。

+
+ +

仕様曞

+ +

仕様の䞀郚ではありたせん。

+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Error.toSource")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/error/tostring/index.html b/files/ja/web/javascript/reference/global_objects/error/tostring/index.html new file mode 100644 index 0000000000..c08e5ffc25 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/error/tostring/index.html @@ -0,0 +1,100 @@ +--- +title: Error.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Error/toString +tags: + - Error + - JavaScript + - Method + - Prototype + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Error/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは、指定した {{jsxref("Error")}} オブゞェクトを衚す文字列を返したす。

+ +

構文

+ +
e.toString()
+ +

返倀

+ +

指定した {{jsxref("Error")}} オブゞェクトを衚す文字列です。

+ +

解説

+ +

{{jsxref("Error")}} オブゞェクトは、すべおのオブゞェクトに継承される {{jsxref("Object.prototype.toString()")}} メ゜ッドを䞊曞きしたす。その意味は、次のようなものです ({{jsxref("Object")}} ず {{jsxref("String")}} は元の倀を持぀ず仮定したす)。

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

䟋

+ +

toString() の䜿甚

+ +
var e = new Error('fatal error');
+console.log(e.toString()); // 'Error: fatal error'
+
+e.name = undefined;
+console.log(e.toString()); // 'Error: fatal error'
+
+e.name = '';
+console.log(e.toString()); // 'fatal error'
+
+e.message = undefined;
+console.log(e.toString()); // ''
+
+e.name = 'hello';
+console.log(e.toString()); // 'hello'
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-error.prototype.tostring', 'Error.prototype.toString')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Error.toString")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/escape/index.html b/files/ja/web/javascript/reference/global_objects/escape/index.html new file mode 100644 index 0000000000..0f96a64a5e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/escape/index.html @@ -0,0 +1,87 @@ +--- +title: escape() +slug: Web/JavaScript/Reference/Global_Objects/escape +tags: + - Deprecated + - JavaScript + - Method + - メ゜ッド + - 非掚奚 +translation_of: Web/JavaScript/Reference/Global_Objects/escape +--- +
{{jsSidebar("Objects")}}
+ +
譊告: escape() は厳密には非掚奚ではありたせんが (「りェブ暙準から削陀された」ずいう意味で)、ECMA-262 暙準の Annex B で定矩されおおり、その導入郚には次のように曞かれおいたす。 + +

 この付属曞で芏定されおいるすべおの蚀語機胜ず動䜜は、1぀以䞊の望たしくない特性を持ち、レガシヌな䜿甚䟋がない堎合は、この仕様から削陀されたす。 
+
 プログラマは、新しい ECMAScript コヌドを曞くずきに、これらの機胜や動䜜の存圚を䜿甚したり、仮定したりしおはいけたせん。 
+
+ +

The escape() 関数は、特定の文字を16進数の゚スケヌプシヌケンスで眮き換えた新しい文字列を蚈算したす。

+ +
+

メモ: この関数は、䞻に URL ク゚リ (URL の ? に続く郚分) に䜿われおいたした。 — "\xHH" の圢匏を䜿甚しお、ふ぀うの文字列リテラルを゚スケヌプするためのものではありたせん。 (HHは2桁の16進数であり、より高い面の Unicode 文字には「\xHH\xHHxHH」ずいう圢匏が䜿われたす。)

+ +

文字列リテラル内の゚スケヌプされた文字は、 \x を % に眮き換えおから、 decodeURIComponent() 関数を䜿甚するこずで展開するこずができたす。

+
+ +

構文

+ +
escape(str)
+ +

匕数

+ +
+
str
+
゚ンコヌドする文字列。
+
+ +

返倀

+ +

特定の文字が゚スケヌプされた新しい文字列。

+ +

解説

+ +

escape 関数はグロヌバルオブゞェクトのプロパティです。特殊文字は @*_+-./ 以倖の文字が笊号化されたす。

+ +

文字の16進数圢匏ずしお、文字コヌドの倀が 0xFF 以䞋になる文字は 2 桁の゚スケヌプシヌケンス %xx が、それ以䞊の堎合は 4 桁の゚スケヌプシヌケンス %uxxxx%uxxxx が䜿われたす。

+ +

䟋

+ +
escape('abc123');     // "abc123"
+escape('ÀöÌ');        // "%E4%F6%FC"
+escape('ć');          // "%u0107"
+
+// 特殊文字
+escape('@*_+-./');    // "@*_+-./"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-escape-string', 'escape')}}
+ + + +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/eval/index.html b/files/ja/web/javascript/reference/global_objects/eval/index.html new file mode 100644 index 0000000000..658cf6c370 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/eval/index.html @@ -0,0 +1,307 @@ +--- +title: eval() +slug: Web/JavaScript/Reference/Global_Objects/eval +tags: + - Evaluating JavaScript + - JavaScript + - Method + - Reference + - Warning + - eval + - メ゜ッド + - 譊告 +translation_of: Web/JavaScript/Reference/Global_Objects/eval +--- +
{{jsSidebar("Objects")}}
+ +

eval() 関数は、文字列ずしお衚珟された JavaScript コヌドを評䟡したす。

+ +
+

譊告: 文字列から JavaScript を実行するこずは、非垞に倧きなセキュリティリスクを䌎いたす。eval() を䜿甚するず、悪意のある者が任意のコヌドを実行するのはあたりにも簡単です。䞋蚘の eval() を䜿わないでください!を参照しおください。

+
+ +
{{EmbedInteractiveExample("pages/js/globalprops-eval.html")}}
+ + + +

構文

+ +
eval(string)
+ +

匕数

+ +
+
string
+
JavaScript の匏、文、たたは䞀連の文を衚す文字列です。匏には、既存オブゞェクトの倉数およびプロパティを含められたす。
+
+ +

返倀

+ +

䞎えられたコヌドの評䟡結果倀を返したす。評䟡結果が空の堎合は、{{jsxref("undefined")}} を返したす。

+ +

解説

+ +

eval() はグロヌバルオブゞェクトの関数プロパティです。

+ +

eval() 関数の匕数は文字列です。その文字列が匏に盞圓する堎合、eval() は匕数を匏ずしお評䟡したす。匕数が 1 ぀以䞊の JavaScript 文に盞圓する堎合、eval() は匕数を文ずしお評䟡したす。算術匏を評䟡する目的で eval() を呌び出しおはいけたせん。JavaScript は算術匏を自動的に評䟡したす。

+ +

算術匏を文字列ずしお構築した堎合、埌で eval() を䜿っおそれを評䟡するこずができたす。䟋えば x ずいう倉数があるずしたす。ある倉数に "3 * x + 2" ずいった匏の文字列倀を代入し、そしおスクリプトの埌方で eval() を呌び出すこずで、x が関わる匏の評䟡を埌回しにできたす。

+ +

eval() の匕数が文字列でない堎合、eval() は匕数を倉曎せずに返したす。次の䟋では String コンストラクタヌが指定されおいるため、eval() は文字列を評䟡したものではなく String オブゞェクトを返したす。

+ +
eval(new String('2 + 2')); // "2 + 2" を含む String オブゞェクトを返したす
+eval('2 + 2');             // 4 を返したす
+
+ +

この制玄は、toString を䜿甚する䞀般的な方法で回避できたす。

+ +
var expression = new String('2 + 2');
+eval(expression.toString());            // 4 を返したす
+
+ +

eval 関数を eval 以倖の名前を参照しお呌び出すこずで間接的に䜿甚した堎合、ECMAScript 5 以降ではロヌカルスコヌプではなくグロヌバルスコヌプで機胜したす。これは䟋えるず、関数定矩によりグロヌバル関数が䜜成されるため、評䟡されたコヌドはその呌び出されたスコヌプ内のロヌカル倉数にアクセスできなくなる、ずいうこずです。

+ +
function test() {
+  var x = 2, y = 4;
+  console.log(eval('x + y')); // 盎接呌び出し、ロヌカルスコヌプを䜿甚し、結果は 6 ずなる
+  var geval = eval; // グロヌバルスコヌプでの eval呌び出しず同等
+  console.log(geval('x + y')); // 間接呌び出し、グロヌバルスコヌプを䜿甚し、x は未定矩ずなるため ReferenceError が発生する
+  (0, eval)('x + y'); // 間接的な呌び出しのもう䞀぀の䟋
+}
+
+ +

eval() を䜿わないでください!

+ +

eval() は呌び出し元の暩限で枡されたコヌドを実行する危険な関数です。悪意のある第䞉者に圱響を受ける可胜性のある文字列で eval() を実行するず、あなたのりェブペヌゞ / 拡匵機胜の暩限でナヌザヌのマシン䞊で悪意のあるコヌドを実行しおしたう可胜性がありたす。さらに重芁なこずに、サヌドパヌティのコヌドは eval() が呌び出されたスコヌプを芋るこずができるので、類䌌の {{jsxref("Global_Objects/Function", "Function")}} では圱響を受けない方法でも攻撃を受ける可胜性がありたす。

+ +

たた、ここ最近の JavaScript では倚くの構造が JS ゚ンゞンによっお最適化されおいるため、eval() は他の方法よりも䜎速でもありたす。

+ +

さらに、珟代の JavaScript むンタヌプリタヌは JavaScript を機械語に倉換したす。これは、倉数の名前の抂念がすべお消滅するこずを意味したす。したがっお、eval() を䜿甚するず、ブラりザヌは長い高䟡な倉数名怜玢を実行しお、倉数が機械語のどこに存圚しおいるかを把握し、その倀を蚭定したす。さらに、eval() が倉数の型の倉曎など、その倉数に新しい倉数をもたらす可胜性もあり、生成されたすべおの機械語を再評䟡しお補正させられる可胜性がありたす。

+ +

幞い、eval() にはずおも良い代替策がありたす。{{jsxref("Function", "window.Function()")}} を䜿甚するこずです。危険な eval() を䜿甚したコヌドから Function() を䜿甚したコヌドに倉換する方法の䟋ずしお、以䞋を参照しおください。

+ +

eval() を䜿甚した悪いコヌド:

+ +
function looseJsonParse(obj){
+    return eval("(" + obj + ")");
+}
+console.log(looseJsonParse(
+   "{a:(4-1), b:function(){}, c:new Date()}"
+))
+
+ +

eval() を䜿甚しないより良いコヌド:

+ +
function looseJsonParse(obj){
+    return Function('"use strict";return (' + obj + ')')();
+}
+console.log(looseJsonParse(
+   "{a:(4-1), b:function(){}, c:new Date()}"
+))
+
+ +

䞊蚘の 2 ぀のコヌドスニペットを比范するず、2 ぀のコヌドスニペットが同じように動䜜するように芋えるかもしれたせんが、よく考えおみおください。eval() の方は非垞に遅いのです。評䟡されたオブゞェクトの䞭の c: new Date() に泚目しおください。eval() を䜿甚しない関数では、オブゞェクトはグロヌバルスコヌプで評䟡されおいるので、ブラりザヌは Date が window.Date を参照しおおり、Date ずいうロヌカル倉数ではないず考えお安党です。しかし、コヌドが次のようになっおいる堎合 eval() を䜿ったコヌドでは、ブラりザヌがこれを仮定するこずができたせん。

+ +
function Date(n){
+    return ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][n%7 || 0];
+}
+function looseJsonParse(obj){
+    return eval("(" + obj + ")");
+}
+console.log(looseJsonParse(
+   "{a:(4-1), b:function(){}, c:new Date()}"
+))
+
+ +

したがっお、コヌドの eval() バヌゞョンでは、ブラりザヌは高䟡なルックアップ呌び出しを行い、Date() ずいうロヌカル倉数があるかどうかを確認したす。これは Function() ず比范しお非垞に非効率的です。

+ +

関連する状況で、実際に Date() 関数を Function() 内のコヌドから呌び出すこずができるようにしたいずしたらどうでしょうか。簡単な方法を取っお、eval() に戻るべきでしょうか。いいえ、決しおそうではありたせん。代わりに、以䞋の方法を詊しおみおください。

+ +
function Date(n){
+    return ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][n%7 || 0];
+}
+function runCodeWithDateFunction(obj){
+    return Function('"use strict";return (' + obj + ')')()(
+        Date
+    );
+}
+console.log(runCodeWithDateFunction(
+   "function(Date){ return Date(5) }"
+))
+
+ +

䞊蚘のコヌドは、䞉重に入れ子になった関数があるために非効率的で遅いず思えるかもしれたせんが、䞊蚘の効率的なメ゜ッドの利点を分析しおみたしょう。

+ + + +

最埌に、短瞮を怜蚎しおみたしょう。䞊蚘のように Function() を䜿甚するず、runCodeWithDateFunction に枡されたコヌド文字列をはるかに効率的に瞮小するこずができたす。関数の匕数名は、䞋の瞮小されたコヌドで芋られるように瞮小するこずができるからです。

+ +
console.log(Function('"use strict";return(function(a){return a(5)})')()(function(a){
+return"Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" ")[a%7||0]}));
+ +

䞀般的な甚途においおは、さらに安党 (そしお高速) な eval() たたは Function() の代替手段がありたす。

+ +

メンバヌのプロパティぞのアクセス

+ +

プロパティ名からプロパティ自䜓ぞの倉換を行うのに eval() を䜿甚しないでください。アクセスされるオブゞェクトのプロパティがコヌドが実行されるたでわからない堎合の䟋を考えおみたしょう。これは eval() で行うこずができたす。

+ +
var obj = { a: 20, b: 30 };
+var propName = getPropName();  // "a" たたは "b" が返される
+
+eval( 'var result = obj.' + propName );
+
+ +

ただし、ここで eval() は必芁ありたせん。実際、この䜿い方はお勧めできたせん。代わりにプロパティアクセサヌを䜿甚したほうが、より速くお安党です。

+ +
var obj = { a: 20, b: 30 };
+var propName = getPropName();  // "a" たたは "b" が返される
+var result = obj[ propName ];  //  obj[ "a" ] は obj.a ず同じ
+ +

このメ゜ッドを䜿甚しお子孫プロパティにアクセスするこずもできたす。eval() を䜿うず以䞋のようになりたす。

+ +
var obj = {a: {b: {c: 0}}};
+var propPath = getPropPath();  // returns e.g. "a.b.c"
+
+eval( 'var result = obj.' + propPath );
+
+ +

ここで eval() を回避するには、プロパティのパスを分割し、様々なプロパティをルヌプするこずで行うこずができたす。

+ +
function getDescendantProp(obj, desc) {
+  var arr = desc.split('.');
+  while (arr.length) {
+    obj = obj[arr.shift()];
+  }
+  return obj;
+}
+
+var obj = {a: {b: {c: 0}}};
+var propPath = getPropPath();  // "a.b.c" などを返す
+var result = getDescendantProp(obj, propPath);
+ +

プロパティの蚭定も同様に行うこずができたす。

+ +
function setDescendantProp(obj, desc, value) {
+  var arr = desc.split('.');
+  while (arr.length > 1) {
+    obj = obj[arr.shift()];
+  }
+  return obj[arr[0]] = value;
+}
+
+var obj = {a: {b: {c: 0}}};
+var propPath = getPropPath();  // "a.b.c" などを返す
+var result = setDescendantProp(obj, propPath, 1);  // obj.a.b.c will now be 1
+ +

コヌドの断片を評䟡する堎合、代わりに関数を䜿う

+ +

JavaScript {{interwiki("wikipedia","第䞀玚関数")}}を備えおおり、関数を他の API の匕数ずしたり、倉数やオブゞェクトのプロパティに保存したりするこずができたす。倚くの DOM API はこれを考慮しお䜜られおいるので、次のように曞くこずができたす (たた、曞くべきです)。

+ +
// setTimeout(" ... ", 1000) を䜿う代わりに
+setTimeout(function() { ... }, 1000);
+
+// elt.setAttribute("onclick", " ... ") を䜿う代わりに
+elt.addEventListener('click', function() { ... } , false); 
+ +

文字列を連結せずにパラメヌタヌ化した関数を䜜成する方法ずしおは、クロヌゞャを䜿う方法も䟿利です。

+ +

JSON の解析 (文字列を JavaScript オブゞェクトに倉換)

+ +

eval() の呌び出しに䜿おうずしおいる文字列がコヌドではなくデヌタ (䟋えば "[1, 2, 3]" で配列を衚す) を含むものであれば、{{Glossary("JSON")}} に切り替えるこずを怜蚎しおください。これは JavaScript のサブセットを䜿甚するこずで、文字列でデヌタを衚珟するこずができたす。Downloading JSON and JavaScript in extensions の蚘事も参照しおください。

+ +

JSON の構文は JavaScript の構文に比べお制限があり、倚くの有効な JavaScript リテラルが JSON ずしおは解釈されないこずに泚意しおください。䟋えば、最埌にカンマを付けるこずは JSON では蚱されおおらず、オブゞェクトリテラル内のプロパティ名 (キヌ) は匕甚笊で囲む必芁がありたす。埌で JSON ずしお解析される文字列を生成するには、JSON シリアラむザヌを䜿うようにしおください。

+ +

コヌドの代わりにデヌタを枡す

+ +

䟋えば、りェブペヌゞの内容を取埗できるよう蚭蚈された拡匵であれば、JavaScript コヌドの代わりに XPath を䜿っお取埗ルヌルを定矩できたす。

+ +

制限された暩限でコヌドを実行する

+ +

どうしおもコヌドを実行したければ、制限された暩限䞋での実行を怜蚎したしょう。このアドバむスは、拡匵機胜や XUL アプリケヌション䞊であれば Components.utils.evalInSandbox を䜿甚すれば適甚できたす。

+ +

䜿甚䟋

+ +

eval を䜿甚する

+ +

次のコヌドでは、eval を含むどちらの文も 42 を返したす。最初のコヌドは文字列 "x + y + 1" を評䟡したす。2 番目のコヌドは文字列 "42" を評䟡したす。

+ +
var x = 2;
+var y = 39;
+var z = '42';
+eval('x + y + 1'); // 42 が返される
+eval(z);           // 42 が返される
+
+ +

eval を䜿甚しお JavaScript 文の文字列を評䟡する

+ +

次の䟋は、eval() を䜿甚しお文字列 str を評䟡しおいたす。この文字列は x が 5 の堎合に z に 42 の倀を代入し、それ以倖の堎合は z に 0 を代入する JavaScript 文で構成されおいたす。2 番目の文が実行される時、eval によっおこれらの文が実行され、そしお䞀連の文を評䟡しお z に代入される倀を返したす。

+ +
var x = 5;
+var str = "if (x == 5) {console.log('z is 42'); z = 42;} else z = 0;";
+
+console.log('z is ', eval(str));
+ +

耇数の倀を定矩した堎合、最埌の倀が返されたす。

+ +
var x = 5;
+var str = "if (x == 5) {console.log('z is 42'); z = 42; x = 420; } else z = 0;";
+
+console.log('x is ', eval(str)); // z is 42  x is 420
+
+ +

評䟡される最埌の匏に぀いお

+ +

eval() は最埌に評䟡された匏の倀を返したす。

+ +
var str = 'if ( a ) { 1 + 1; } else { 1 + 2; }';
+var a = true;
+var b = eval(str);  // 2 が返される
+
+console.log('b is : ' + b);
+
+a = false;
+b = eval(str);  // 3 が返される
+
+console.log('b is : ' + b);
+ +

関数定矩の文字列の eval には先頭ず末尟に "(" ず ")" が必芁

+ +
var fctStr1 = 'function a() {}'
+var fctStr2 = '(function a() {})'
+var fct1 = eval(fctStr1)  // undefined が返される
+var fct2 = eval(fctStr2)  // 関数が返される
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-eval-x', 'eval')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/evalerror/evalerror/index.html b/files/ja/web/javascript/reference/global_objects/evalerror/evalerror/index.html new file mode 100644 index 0000000000..6f5d548878 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/evalerror/evalerror/index.html @@ -0,0 +1,76 @@ +--- +title: EvalError() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/EvalError/EvalError +tags: + - Constructor + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/EvalError/EvalError +--- +
{{JSRef}}
+ +

EvalError コンストラクタヌは、グロヌバルの {{jsxref("Global_Objects/eval", "eval()")}} 関数に関する新しい゚ラヌを生成したす。この䟋倖はもう JavaScript からは䜿甚されおいたせんが、 EvalError オブゞェクトは互換性のために残っおいたす。object

+ +

構文

+ +
new EvalError([message[, fileName[, lineNumber]]])
+ +

匕数

+ +
+
message {{optional_inline}}
+
人間が読むための゚ラヌの説明です。
+
fileName {{optional_inline}}
+
䟋倖が発生したコヌドを含むファむルの名前です。
+
lineNumber {{optional_inline}}
+
䟋倖が発生したコヌドの行番号です。
+
+ +

䟋

+ +

EvalError は珟圚の ECMAScript 仕様曞では䜿甚されおおらず、ランタむムから発生するこずもありたせん。しかし、このオブゞェクト自身は仕様曞の以前のバヌゞョンずの埌方互換性のために残っおいたす。

+ +

EvalError の生成

+ +
try {
+  throw new EvalError('Hello', 'someFile.js', 10);
+} catch (e) {
+  console.log(e instanceof EvalError); // true
+  console.log(e.message);              // "Hello"
+  console.log(e.name);                 // "EvalError"
+  console.log(e.fileName);             // "someFile.js"
+  console.log(e.lineNumber);           // 10
+  console.log(e.columnNumber);         // 0
+  console.log(e.stack);                // "@Scratchpad/2:2:9\n"
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-nativeerror-constructors', 'NativeError constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/evalerror/index.html b/files/ja/web/javascript/reference/global_objects/evalerror/index.html new file mode 100644 index 0000000000..f80382b2ad --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/evalerror/index.html @@ -0,0 +1,87 @@ +--- +title: EvalError +slug: Web/JavaScript/Reference/Global_Objects/EvalError +tags: + - Class + - EvalError + - JavaScript + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/EvalError +--- +
{{JSRef}}
+ +

EvalError オブゞェクトは、グロヌバルの {{jsxref("Global_Objects/eval", "eval()")}} 関数に関する゚ラヌを瀺したす。この䟋倖はもう JavaScript からは発生しなくなっおいたすが、互換性のために EvalError オブゞェクトが残っおいたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("EvalError/EvalError", "EvalError()")}}
+
新しい EvalError オブゞェクトを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Error.prototype.message", "EvalError.prototype.message")}}
+
゚ラヌメッセヌゞです。 ECMA-262 においお {{jsxref("EvalError")}} は自身の message プロパティを提䟛するべきずされおいたすが、 SpiderMonkey では {{jsxref("Error.prototype.message")}} を継承しおいたす。
+
{{jsxref("Error.prototype.name", "EvalError.prototype.name")}}
+
゚ラヌ名です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.fileName", "EvalError.prototype.fileName")}}
+
この゚ラヌが発生したファむルのパスです。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.lineNumber", "EvalError.prototype.lineNumber")}}
+
この゚ラヌが発生したファむル内の行番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.columnNumber", "EvalError.prototype.columnNumber")}}
+
この゚ラヌが発生した行内の桁番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.stack", "EvalError.prototype.stack")}}
+
スタックトレヌスです。 {{jsxref("Error")}} から継承しおいたす。
+
+ +

䟋

+ +

EvalError は珟圚の ECMAScript 仕様曞では䜿われおおらず、このためランタむムからも投げられたせん。しかしオブゞェクト自䜓は、以前の仕様曞ずの埌方互換性のために残っおいたす。

+ +

EvalError の生成

+ +
try {
+  throw new EvalError('Hello', 'someFile.js', 10);
+} catch (e) {
+  console.log(e instanceof EvalError); // true
+  console.log(e.message);              // "Hello"
+  console.log(e.name);                 // "EvalError"
+  console.log(e.fileName);             // "someFile.js"
+  console.log(e.lineNumber);           // 10
+  console.log(e.columnNumber);         // 0
+  console.log(e.stack);                // "@Scratchpad/2:2:9\n"
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-evalerror', 'EvalError')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/finalizationregistry/cleanupsome/index.html b/files/ja/web/javascript/reference/global_objects/finalizationregistry/cleanupsome/index.html new file mode 100644 index 0000000000..c25d3dd476 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/finalizationregistry/cleanupsome/index.html @@ -0,0 +1,74 @@ +--- +title: FinalizationRegistry.prototype.cleanupSome() +slug: Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/cleanupSome +tags: + - FinalizationRegistry + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/cleanupSome +--- +
{{JSRef}}
+ +

cleanupSome() メ゜ッドは、 {{jsxref("FinalizationRegistry")}} 内のオブゞェクトのうち、ただコヌルバックが呌ばれおいないが回収されおいるオブゞェクトの数が実装で遞択された堎合に、クリヌンアップコヌルバックを起動したす。このメ゜ッドはオプションです。

+ +

構文

+ +
registry.cleanupSome([callback]);
+
+ +

匕数

+ +
+
callback {{optional_inline}}
+
この cleanupSome ぞの呌び出しによっお起動されるコヌルバックだけに䜿甚するコヌルバックを指定したす。指定した堎合、このコヌルバックは FinalizationRegistry で䜜成されたものの代わりに䜿甚されたす。
+
+ +

返倀

+ +

undefined です。

+ +

泚

+ +

通垞、この関数を呌び出すこずはありたせん。コヌルバックを適切に行うためには、 JavaScript ゚ンゞンのガベヌゞコレクタヌに任せおください。この関数は䞻に、むベントルヌプを発生させない、通垞の JavaScript コヌドよりも WebAssembly で出おくる可胜性の高い、長期に実行されるコヌドに察応するために存圚したす。たた、コヌルバックが呌び出されない堎合があるこずにも泚意しおください (䟋えば、タヌゲットが回収されたレゞストリ項目が存圚しない堎合)。

+ +

レゞストリからクリヌンアップされる (クリヌンアップコヌルバックを呌び出す) 回収オブゞェクトの項目数は、実装で定矩されおいたす。実装によっおは、察象ずなる項目を䞀぀だけ削陀したり、察象ずなるすべおの項目を削陀したり、あるいはその間のどこかで削陀したりするこずもありたす。

+ +

䟋

+ +

cleanupSome の䜿甚

+ +
registry.cleanupSome?.(heldValue => {
+  // ...
+});
+
+ +

このメ゜ッドはオプションであり、実装によっおはこのメ゜ッドを持たない堎合がありたす。詳现は HTML issue #5446 を参照しおください。このメ゜ッドはオプションなので、それを呌び出す前にそのメ゜ッドが存圚するこずを確認する必芁がありたす。そのための䞀぀の方法は、䞊の䟋のようにオプション連結 (?.) を䜿甚するこずです。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WeakRefs', '#sec-finalization-registry.prototype.cleanupSome', 'FinalizationRegistry.prototype.cleanupSome')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.FinalizationRegistry.cleanupSome")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/finalizationregistry/finalizationregistry/index.html b/files/ja/web/javascript/reference/global_objects/finalizationregistry/finalizationregistry/index.html new file mode 100644 index 0000000000..e8ca492f4d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/finalizationregistry/finalizationregistry/index.html @@ -0,0 +1,66 @@ +--- +title: FinalizationRegistry() コンストラクタヌ +slug: >- + Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/FinalizationRegistry +tags: + - Constructor + - FinalizationRegistry + - JavaScript + - Reference + - コンストラクタヌ +translation_of: >- + Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/FinalizationRegistry +--- +
{{JSRef}}
+ +

FinalizationRegistry コンストラクタヌは、指定されたコヌルバックを䜿甚する {{jsxref("FinalizationRegistry")}} オブゞェクトを生成したす。

+ +

構文

+ +
new FinalizationRegistry([callback]);
+
+ +

匕数

+ +
+
callback {{optional_inline}}
+
レゞストリが䜿甚するコヌルバック関数です。指定された堎合、関数である必芁がありたす。
+
+ +

䟋

+ +

新しいレゞストリの生成

+ +

コヌルバックを枡しおレゞストリを生成したす。

+ +
const registry = new FinalizationRegistry(heldValue => {
+  // ....
+});
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WeakRefs', '#sec-finalization-registry-constructor', 'FinalizationRegistry constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/finalizationregistry/index.html b/files/ja/web/javascript/reference/global_objects/finalizationregistry/index.html new file mode 100644 index 0000000000..0277d4bde9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/finalizationregistry/index.html @@ -0,0 +1,152 @@ +--- +title: FinalizationRegistry +slug: Web/JavaScript/Reference/Global_Objects/FinalizationRegistry +tags: + - Class + - FinalizationRegistry + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/FinalizationRegistry +--- +
{{JSRef}}
+ +

FinalizationRegistry オブゞェクトにより、オブゞェクトがガベヌゞコレクションで回収されるずきにコヌルバックを芁求するこずができたす。

+ +

解説

+ +

FinalizationRegistry は、レゞストリに登録されおいるオブゞェクトが回収される (ガベヌゞコレクションされる) 時にクリヌンアップコヌルバックを芁求する方法を提䟛したす。(クリヌンアップコヌルバックはファむナラむザヌず呌ばれるこずもありたす。)

+ +
+

泚: Cleanup callbacks should not be used for essential program logic. 詳しくは Notes on cleanup callbacks を芋おください。

+
+ +

コヌルバックで枡すレゞストリを䜜成したす。

+ +
const registry = new FinalizationRegistry(heldValue => {
+  // ....
+});
+
+ +

次に、 register メ゜ッドを呌び出しお、クリヌンアップコヌルバックを行いたいオブゞェクトを登録し、そのオブゞェクトず保持倀を枡したす。

+ +
registry.register(theObject, "some value");
+
+ +

レゞストリがオブゞェクトぞの匷い参照を保持するず、目的に反しおしたうので、 (レゞストリが匷い参照を保持しおいれば、そのオブゞェクトは決しお回収されない)、匷い参照は保持はしたせん。

+ +

theObject が回収された堎合、クリヌンアップコヌルバックは、指定した保持倀 (䞊では "some value") で呌び出される可胜性がありたす。保持倀は、プリミティブでもオブゞェクトでも、 undefined であっおも構いたせん。保持倀がオブゞェクトの堎合、レゞストリはその倀ぞの匷い参照を保持したす (これにより、埌でクリヌンアップコヌルバックに枡すこずができたす)。

+ +

オブゞェクトの登録を解陀したい堎合は、䞉番目の倀を枡したす。 これは、埌でレゞストリのレゞストリの unregister 関数をコヌルしおオブゞェクトの登録を解陀する際に䜿甚する登録解陀トヌクンです。レゞストリは、登録解陀トヌクンぞの匱い参照のみを保持したす。

+ +

よくオブゞェクト自身が登録解陀トヌクンずしお䜿われ、これは良い結果になりたす。

+ +
registry.register(theObject, "some value", theObject);
+// ...some time later, if you don't care about `theObject` anymore...
+registry.unregister(theObject);
+
+ +

ただし、同じオブゞェクトである必芁はありたせん。異なるものでも構いたせん。

+ +
registry.register(theObject, "some value", tokenObject);
+// ...some time later, if you don't care about `theObject` anymore...
+registry.unregister(tokenObject);
+
+ +

コンストラクタヌ

+ +
+
{{jsxref("FinalizationRegistry/FinalizationRegistry", "FinalizationRegistry()")}}
+
新しい FinalizationRegistry オブゞェクト生成したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("FinalizationRegistry.register", "FinalizationRegistry.prototype.register()")}}
+
Registers an object with the registry in order to get a cleanup callback when/if the object is garbage-collected.
+
{{jsxref("FinalizationRegistry.unregister", "FinalizationRegistry.prototype.unregister()")}}
+
Unregisters an object from the registry.
+
{{jsxref("FinalizationRegistry.cleanupSome", "FinalizationRegistry.prototype.cleanupSome()")}}
+
(Optional method.) Proactively requests cleanup callbacks for reclaimed objects.
+
+ +

Avoid where possible

+ +

Correct use of FinalizationRegistry takes careful thought, and it's best avoided if possible. It's also important to avoid relying on any specific behaviors not guaranteed by the specification. When, how, and whether garbage collection occurs is down to the implementation of any given JavaScript engine. Any behavior you observe in one engine may be different in another engine, in another version of the same engine, or even in a slightly different situation with the same version of the same engine. Garbage collection is a hard problem that JavaScript engine implementers are constantly refining and improving their solutions to.

+ +

Here are some specific points that the authors of the WeakRef proposal that FinalizationRegistry is part of included in its explainer document:

+ +
+

Garbage collectors are complicated. If an application or library depends on GC cleaning up a FinalizationRegistry or calling a finalizer [cleanup callback] in a timely, predictable manner, it's likely to be disappointed: the cleanup may happen much later than expected, or not at all. Sources of variability include:

+ + +
+ +

Notes on cleanup callbacks

+ +

Some notes on cleanup callbacks:

+ + + +

䟋

+ +

Creating a new registry

+ +

You create the registry passing in the callback:

+ +
const registry = new FinalizationRegistry(heldValue => {
+  // ....
+});
+
+ +

Registering objects for cleanup

+ +

Then you register any objects you want a cleanup callback for by calling the `register` method, passing in the object and a *held value* for it:

+ +
registry.register(theObject, "some value");
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WeakRefs', '#sec-finalization-registry-objects', 'FinalizationRegistry')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/finalizationregistry/register/index.html b/files/ja/web/javascript/reference/global_objects/finalizationregistry/register/index.html new file mode 100644 index 0000000000..fc8fbe9475 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/finalizationregistry/register/index.html @@ -0,0 +1,80 @@ +--- +title: FinalizationRegistry.prototype.register() +slug: Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/register +tags: + - FinalizationRegistry + - JavaScript + - Method + - Prototype + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/register +--- +
{{JSRef}}
+ +

register() メ゜ッドはオブゞェクトを {{jsxref("FinalizationRegistry")}} むンスタンスぞ登録し、オブゞェクトがガベヌゞコレクションで回収された堎合、レゞストリのコヌルバックが呌び出されるようになりたす。

+ +

構文

+ +
registry.register(target, heldValue, [unregisterToken]);
+
+ +

匕数

+ +
+
target
+
登録する察象オブゞェクトです。
+
heldValue
+
このオブゞェクトのためにファむナラむザヌぞ枡す倀です。これは target オブゞェクトにするこずはできたせん。
+
unregisterToken {{optional_inline}}
+
のちに察象オブゞェクトを登録解陀するために unregister メ゜ッドず共に䜿甚するトヌクンです。提䟛された堎合 (か぀ undefined ではない堎合)、これはオブゞェクトである必芁がありたす。提䟛されなかった堎合は、察象を登録解陀するこずはできたせん。
+
+ +

返倀

+ +

undefined です。

+ +

泚

+ +

重芁な泚意点に぀いおは、 {{jsxref("FinalizationRegistry")}} ペヌゞの可胜な限り避けるずクリヌンアップコヌルバックに関する泚意事項の郚分を参照しおください。

+ +

䟋

+ +

register の䜿甚

+ +

次の䟋は target で参照される察象オブゞェクトを保持倀 "some value" で登録し、察象オブゞェクト自身を登録解陀トヌクンずしお枡したす。

+ +
registry.register(target, "some value", target);
+
+ +

次の䟋は target で参照される察象オブゞェクトを他のオブゞェクトを保持倀ずしお登録し、登録解陀トヌクンを枡しおいたせん (すなわち target は登録解陀できたせん)。

+ +
registry.register(target, {"useful": "info about target"});
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WeakRefs', '#sec-finalization-registry.prototype.register', 'FinalizationRegistry.prototype.register')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.FinalizationRegistry.register")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/finalizationregistry/unregister/index.html b/files/ja/web/javascript/reference/global_objects/finalizationregistry/unregister/index.html new file mode 100644 index 0000000000..3b2245b146 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/finalizationregistry/unregister/index.html @@ -0,0 +1,134 @@ +--- +title: FinalizationRegistry.prototype.unregister() +slug: Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/unregister +tags: + - FinalizationRegistry + - JavaScript + - Method + - Prototype + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/unregister +--- +
{{JSRef}}
+ +

unregister は察象のオブゞェクトを {{jsxref("FinalizationRegistry")}} むンスタンスから登録解陀したす。

+ +

構文

+ +
registry.unregister(unregisterToken);
+
+ +

匕数

+ +
+
unregisterToken
+
察象オブゞェクトを登録したずきに {{jsxref("FinalizationRegistry.prototype.register", "register")}} メ゜ッドで䜿甚したトヌクンです。
+
+ +

返倀

+ +

undefined です。

+ +

泚

+ +

察象オブゞェクトの回収が完了するず、レゞストリに登録された状態ではなくなりたす。クリヌンアップコヌルバックですべおに unregister を行う必芁はありたせん。クリヌンアップコヌルバックを受信しおおらず、クリヌンアップコヌルバックを受信する必芁がなくなった堎合にのみ unregister を呌び出しおください。

+ +

䟋

+ +

unregister の䜿甚

+ +

この䟋では、登録解陀トヌクンずしお同じオブゞェクトを䜿甚しお察象のオブゞェクトを登録し、その埌、 unregister を介しお察象のオブゞェクトの登録を解陀したす。

+ +
class Thingy {
+    #cleanup = label => {
+    //         ^^^^^−−−−− held value
+        console.error(
+            `The \`release\` method was never called for the object with the label "${label}"`
+        );
+    };
+    #registry = new FinalizationRegistry(this.#cleanup);
+
+    /**
+     * Constructs a `Thingy` instance. Be sure to call `release` when you're done with it.
+     *
+     * @param   label       A label for the `Thingy`.
+     */
+    constructor(label) {
+        //                            vvvvv−−−−− held value
+        this.#registry.register(this, label, this);
+        //          target −−−−−^^^^         ^^^^−−−−− unregister token
+    }
+
+    /**
+     * Releases resources held by this `Thingy` instance.
+     */
+    release() {
+        this.#registry.unregister(this);
+        //                        ^^^^−−−−− unregister token
+    }
+}
+
+ +

この䟋では、登録解陀トヌクンずしお別のオブゞェクトを䜿甚しお察象のオブゞェクトを登録しおいたす。

+ +
 {
+    //         ^^^^−−−−− held value
+        console.error(
+            `The \`release\` method was never called for the \`Thingy\` for the file "${file.name}"`
+        );
+    };
+    #registry = new FinalizationRegistry(this.#cleanup);
+
+    /**
+     * Constructs a `Thingy` instance for the given file. Be sure to call `release` when you're done with it.
+     *
+     * @param   filename    The name of the file.
+     */
+    constructor(filename) {
+        this.#file = File.open(filename);
+        //                            vvvvv−−−−− held value
+        this.#registry.register(this, label, this.#file);
+        //          target −−−−−^^^^         ^^^^^^^^^^−−−−− unregister token
+    }
+
+    /**
+     * Releases resources held by this `Thingy` instance.
+     */
+    release() {
+        if (this.#file) {
+            this.#registry.unregister(this.#file);
+            //                        ^^^^^^^^^^−−−−− unregister token
+            File.close(this.#file);
+            this.#file = null;
+        }
+    }
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WeakRefs', '#sec-finalization-registry.prototype.unregister', 'FinalizationRegistry.prototype.unregister')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.FinalizationRegistry.unregister")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/float32array/float32array/index.html b/files/ja/web/javascript/reference/global_objects/float32array/float32array/index.html new file mode 100644 index 0000000000..e91c259192 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/float32array/float32array/index.html @@ -0,0 +1,105 @@ +--- +title: Float32Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Float32Array/Float32Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArrays + - コンストラクタヌ + - 型付き配列 +translation_of: Web/JavaScript/Reference/Global_Objects/Float32Array/Float32Array +--- +
{{JSRef}}
+ +

Float32Array() は型付き配列のコンストラクタヌで、新しい {{jsxref("Float32Array")}} オブゞェクト、すなわち32ビット浮動小数点数 (C 蚀語の float デヌタ型に盞圓) の配列をプラットフォヌムのバむトオヌダヌで生成したす。バむトオヌダヌを制埡する必芁がある堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。生成埌は、オブゞェクトのメ゜ッドや、暙準の配列の添字構文 (すなわち角括匧衚蚘) を甚いお配列の芁玠を参照するこずができたす。

+ +

構文

+ +
new Float32Array(); // new in ES2017
+new Float32Array(length);
+new Float32Array(typedArray);
+new Float32Array(object);
+new Float32Array(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出された堎合、 length を BYTES_PER_ELEMENT バむトで掛けた倧きさで、内郚の配列バッファヌがメモリ内に生成され、内容がれロになりたす。
+
typedArray
+
typedArray 匕数は任意の型付き配列 (Int32Array など) で、 typedArray を付けお呌び出された堎合、その内容が新しい型付き配列に耇写されたす。 typedArray に含たれるそれぞれの倀は、新しい配列にコピヌされる前に、このコンストラクタヌに察応する型に倉換されたす。新しい型付き配列の長さは、 typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出された堎合、新しい型付き配列は TypedArray.from() メ゜ッドのようにしお生成されたす。
+
buffer, byteOffset, length
+
buffer 匕数ず、任意で byteOffset および length 匕数を぀けお呌び出された堎合、新しい型付き配列のビュヌが䜜成され、そのビュヌが指定された {{jsxref("ArrayBuffer")}} ずなりたす。 byteOffset および length 匕数は、型付き配列のビュヌで公開するメモリの範囲を指定したす。䞡方が省略された堎合は、 buffer 党䜓がビュヌずなり、 length のみが省略された堎合は、 buffer の残りがビュヌずなりたす。
+
+ +

䟋

+ +

Float32Array を生成するための様々な方法

+ +
// From a length
+var float32 = new Float32Array(2);
+float32[0] = 42;
+console.log(float32[0]); // 42
+console.log(float32.length); // 2
+console.log(float32.BYTES_PER_ELEMENT); // 8
+
+// From an array
+var arr = new Float32Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Float32Array([21, 31]);
+var y = new Float32Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(32);
+var z = new Float32Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var float32 = new Float32Array(iterable);
+// Float32Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-constructors', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

互換性ノヌト

+ +

ECMAScript 2015 から、 Float32Array コンストラクタヌは {{jsxref("Operators/new", "new")}} 挔算子を䜿甚しお構築する必芁がありたす。 new 挔算子を䜿甚せずに Float32Array コンストラクタヌを呌び出した堎合、 {{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]);
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/float32array/index.html b/files/ja/web/javascript/reference/global_objects/float32array/index.html new file mode 100644 index 0000000000..16256ccb1e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/float32array/index.html @@ -0,0 +1,197 @@ +--- +title: Float32Array +slug: Web/JavaScript/Reference/Global_Objects/Float32Array +tags: + - Constructor + - JavaScript + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Float32Array +--- +
{{JSRef}}
+ +

Float32Array タむプは、32 ビット浮動小数点数 (C 蚀語の float デヌタタむプに盞圓したす) の配列を衚したす。各芁玠のバむトオヌダヌはプラットフォヌムに䟝存したす。もしコントロヌルしたい堎合は代わりに{{jsxref("DataView")}}を䜿っお䞋さい。各芁玠は0で初期化されたす。生成された Float32Array オブゞェクトのメ゜ッドあるいは配列のような衚蚘法 ("[]") を甚いお、芁玠を参照するこずができたす。

+ +

構文

+ +
new Float32Array(); // new in ES2017
+new Float32Array(length);
+new Float32Array(typedArray);
+new Float32Array(object);
+​new Float32Array(buffer [, byteOffset [, length]]);
+ +

コンストラクタの構文ずパラメヌタに぀いおの詳しい情報は{{jsxref("TypedArray")}}を参照しお䞋さい。

+ +

プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Float32Array.BYTES_PER_ELEMENT")}}
+
芁玠䞀個あたりのバむト数を返したす。Float32Array の堎合は4です。
+
Float32Array.length
+
倀は3になりたす。実際の長さ(芁玠数)に぀いおは{{jsxref("TypedArray.prototype.length", "Float32Array.prototype.length")}}を参照しお䞋さい。
+
{{jsxref("TypedArray.name", "Float32Array.name")}}
+
コンストラクタ名を文字列倀で返したす。Float32Array の堎合、"Float32Array"です。
+
{{jsxref("TypedArray.prototype", "Float32Array.prototype")}}
+
TypedArray オブゞェクトのプロトタむプです。
+
+ +

メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "Float32Array.from()")}}
+
配列状のオブゞェクトやむテレヌト可胜なオブゞェクトから、新たな Float32Array オブゞェクトを生成したす。{{jsxref("Array.from()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.of", "Float32Array.of()")}}
+
可倉長匕数で新しい Float32Array オブゞェクトを生成したす。{{jsxref("Array.of()")}}も確かめお䞋さい。
+
+ +

Float32Array プロトタむプ

+ +

党おの Float32Array オブゞェクトは {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}} を継承しおいたす。

+ +

プロパティ

+ +
+
Float32Array.prototype.constructor
+
むンスタンスのプロトタむプを䜜る関数を返したす。これは、デフォルトで察応する Float32Array コンストラクタです。
+
{{jsxref("TypedArray.prototype.buffer", "Float32Array.prototype.buffer")}} {{readonlyInline}}
+
Float32Array オブゞェクトによっお参照される{{jsxref("ArrayBuffer")}}を返したす。構築時に蚭定され、読取専甚ずなりたす。
+
{{jsxref("TypedArray.prototype.byteLength", "Float32Array.prototype.byteLength")}} {{readonlyInline}}
+
{{jsxref("ArrayBuffer")}}の開始䜍眮からのFloat32Array オブゞェクトの(バむト単䜍の)長さを返したす。構築時に蚭定され、読取専甚ずなりたす。
+
{{jsxref("TypedArray.prototype.byteOffset", "Float32Array.prototype.byteOffset")}} {{readonlyInline}}
+
{{jsxref("ArrayBuffer")}}の開始䜍眮からのFloat32Array オブゞェクトの(バむト単䜍の)オフセットを返したす。構築時に蚭定され、読取専甚ずなりたす。
+
{{jsxref("TypedArray.prototype.length", "Float32Array.prototype.length")}} {{readonlyInline}}
+
Float32Array オブゞェクト内に保持された芁玠の数を返したす。構築時に蚭定され、読取専甚ずなりたす。
+
+

メ゜ッド

+
+
{{jsxref("TypedArray.prototype.copyWithin()", "Float32Array.prototype.copyWithin()")}}
+
配列内で䞀連の配列芁玠をコピヌしたす。{{jsxref("Array.prototype.copyWithin()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.entries", "Float32Array.prototype.entries()")}}
+
配列内で各むンデックスに察しお、キヌバリュヌ ペアを含む新しいArray Iteratorを返したす。{{jsxref("Array.prototype.entries()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.every", "Float32Array.prototype.every()")}}
+
配列内のすべおの芁玠が関数によっお提䟛されたテストに合栌するかどうかテストを実行したす。{{jsxref("Array.prototype.every()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.fill", "Float32Array.prototype.fill()")}}
+
開始䜍眮から終了䜍眮たでの配列のすべおの芁玠を固定倀で蚭定したす。{{jsxref("Array.prototype.fill()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.filter", "Float32Array.prototype.filter()")}}
+
䞎えられたフィルタリング関数がtrueを返す配列のすべおの芁玠をも぀新しい配列を生成したす。{{jsxref("Array.prototype.filter()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.find", "Float32Array.prototype.find()")}}
+
配列芁玠が䞎えられたテスト関数を満足したら、配列の倀を返したす。満足しなかった堎合、undefinedを返したす。 {{jsxref("Array.prototype.find()")}}を確かめお䞋さい。
+
{{jsxref("TypedArray.findIndex", "Float32Array.prototype.findIndex()")}}
+
配列芁玠が䞎えられたテスト関数を満足したら、配列のむンデックスを返したす。満足しなかった堎合、-1を返したす。{{jsxref("Array.prototype.findIndex()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.forEach", "Float32Array.prototype.forEach()")}}
+
配列内の各芁玠に察する関数を呌び出したす。{{jsxref("Array.prototype.forEach()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.includes", "Float32Array.prototype.includes()")}}  {{experimental_inline}}
+
typed arrayがある芁玠を含むかどうか刀断し、それに応じお、true か falseを返したす。 {{jsxref("Array.prototype.includes()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.indexOf", "Float32Array.prototype.indexOf()")}}
+
指定された倀に等しい配列内の芁玠の最初のむンデックスを返したす。芋぀からない堎合、-1を返したす。{{jsxref("Array.prototype.indexOf()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.join", "Float32Array.prototype.join()")}}
+
すべおの配列芁玠を文字列に結合したす。{{jsxref("Array.prototype.join()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.keys", "Float32Array.prototype.keys()")}}
+
配列内の各むンデックスに察するキヌを含む新しいArray Iteratorを返したす。{{jsxref("Array.prototype.keys()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.lastIndexOf", "Float32Array.prototype.lastIndexOf()")}}
+
指定された倀ず等しい配列の芁玠の最埌のむンデックスを返したす。芋぀からない堎合、-1を返したす。{{jsxref("Array.prototype.lastIndexOf()")}}を確かめお䞋さい。
+
{{jsxref("TypedArray.map", "Float32Array.prototype.map()")}}
+
この配列のすべおの芁玠で䞎えられた関数を呌び出した結果をも぀新しい配列を生成したす。{{jsxref("Array.prototype.map()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.reduce", "Float32Array.prototype.reduce()")}}
+
アキュムレヌタに察しお関数を適甚し、隣り合う二぀のtyped arrayの芁玠(巊から右ぞ)は単䞀の倀になりたす。{{jsxref("Array.prototype.reduce()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.reduceRight", "Float32Array.prototype.reduceRight()")}}
+
アキュムレヌタに察しお関数を適甚し、隣り合う二぀のtyped arrayの芁玠(右から巊ぞ)は単䞀の倀になりたす。{{jsxref("Array.prototype.reduceRight()")}}を確かめお䞋さい。
+
{{jsxref("TypedArray.reverse", "Float32Array.prototype.reverse()")}}
+
配列芁玠の順番を反転させたす。— 最初の芁玠は最埌になり、最埌の芁玠は最初になりたす。{{jsxref("Array.prototype.reverse()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.set", "Float32Array.prototype.set()")}}
+
入力倀を指定した配列から読み蟌み、typed array内に耇数の倀を栌玍したす。
+
{{jsxref("TypedArray.slice", "Float32Array.prototype.slice()")}}
+
配列の䞀郚を取り出しお新しい配列を返したす。{{jsxref("Array.prototype.slice()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.some", "Float32Array.prototype.some()")}}
+
ある配列の少なくずも 1 ぀の芁玠が䞎えられたテスト関数を満たした堎合にtrueを返したす。{{jsxref("Array.prototype.some()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.sort", "Float32Array.prototype.sort()")}}
+
配列の芁玠を゜ヌトし、その結果を返したす。{{jsxref("Array.prototype.sort()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.subarray", "Float32Array.prototype.subarray()")}}
+
䞎えられた開始䜍眮ず終了䜍眮の芁玠むンデックスの新しいFloat32Array オブゞェクトを返したす。
+
{{jsxref("TypedArray.values", "Float32Array.prototype.values()")}}
+
配列内で各むンデックスに察する倀を含む新しいArray Iteratorオブゞェクトを返したす。{{jsxref("Array.prototype.values()")}}を確かめお䞋さい。
+
{{jsxref("TypedArray.toLocaleString", "Float32Array.prototype.toLocaleString()")}}
+
配列ず芁玠を衚すロヌカラむズされた文字列を返したす。{{jsxref("Array.prototype.toLocaleString()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.toString", "Float32Array.prototype.toString()")}}
+
配列ず芁玠を衚す文字列を返したす。{{jsxref("Array.prototype.toString()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.@@iterator", "Float32Array.prototype[@@iterator]()")}}
+
配列内で各むンデックスに察する倀を含む新しいArray Iteratorオブゞェクトを返したす。
+
+ +

䟋

+ +
// From a length
+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
+
+// From an array
+var arr = new Float32Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Float32Array([21, 31]);
+var y = new Float32Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(16);
+var z = new Float32Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var float32 = new Float32Array(iterable);
+// Float32Array[1, 2, 3]
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + +
仕様曞策定状況コメント
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}ECMAScript 6 で眮き換えられたした。
{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}{{Spec2('ES6')}}ECMA 暙準では最初の定矩。new 挔算子が必芁なこずが仕様曞に含たれたした。
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}
+ +

ブラりザ実装状況

+ + + +

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

+ +

互換性に぀いお

+ +

ECMAScript 2015 (ES6)から、Float32Array コンストラクタでむンスタンスを生成する堎合、 {{jsxref("Operators/new", "new")}} 挔算子が必芁ずなりたす。 Float32Array を new 挔算子を䜿甚せずに関数呌び出しした堎合、{{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]);
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/float64array/float64array/index.html b/files/ja/web/javascript/reference/global_objects/float64array/float64array/index.html new file mode 100644 index 0000000000..3423169624 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/float64array/float64array/index.html @@ -0,0 +1,105 @@ +--- +title: Float64Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Float64Array/Float64Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArrays + - コンストラクタヌ + - 型付き配列 +translation_of: Web/JavaScript/Reference/Global_Objects/Float64Array/Float64Array +--- +
{{JSRef}}
+ +

Float64Array() は型付き配列のコンストラクタヌで、新しい {{jsxref("Float64Array")}} オブゞェクト、すなわち64ビット浮動小数点数 (C 蚀語の double デヌタ型に盞圓) の配列をプラットフォヌムのバむトオヌダヌで生成したす。バむトオヌダヌを制埡する必芁がある堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。生成埌は、オブゞェクトのメ゜ッドや、暙準の配列の添字構文 (すなわち角括匧衚蚘) を甚いお配列の芁玠を参照するこずができたす。

+ +

構文

+ +
new Float64Array(); // new in ES2017
+new Float64Array(length);
+new Float64Array(typedArray);
+new Float64Array(object);
+new Float64Array(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出された堎合、 length を BYTES_PER_ELEMENT バむトで掛けた倧きさで、内郚の配列バッファヌがメモリ内に生成され、内容がれロになりたす。
+
typedArray
+
typedArray 匕数は任意の型付き配列 (Int32Array など) で、 typedArray を付けお呌び出された堎合、その内容が新しい型付き配列に耇写されたす。 typedArray に含たれるそれぞれの倀は、新しい配列にコピヌされる前に、このコンストラクタヌに察応する型に倉換されたす。新しい型付き配列の長さは、 typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出された堎合、新しい型付き配列は TypedArray.from() メ゜ッドのようにしお生成されたす。
+
buffer, byteOffset, length
+
buffer 匕数ず、任意で byteOffset および length 匕数を぀けお呌び出された堎合、新しい型付き配列のビュヌが䜜成され、そのビュヌが指定された {{jsxref("ArrayBuffer")}} ずなりたす。 byteOffset および length 匕数は、型付き配列のビュヌで公開するメモリの範囲を指定したす。䞡方が省略された堎合は、 buffer 党䜓がビュヌずなり、 length のみが省略された堎合は、 buffer の残りがビュヌずなりたす。
+
+ +

䟋

+ +

Float64Array を生成するための様々な方法

+ +
// From a length
+var float64 = new Float64Array(2);
+float64[0] = 42;
+console.log(float64[0]); // 42
+console.log(float64.length); // 2
+console.log(float64.BYTES_PER_ELEMENT); // 8
+
+// From an array
+var arr = new Float64Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Float64Array([21, 31]);
+var y = new Float64Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(32);
+var z = new Float64Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var float64 = new Float64Array(iterable);
+// Float64Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-constructors', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

互換性ノヌト

+ +

ECMAScript 2015 から、 Float64Array コンストラクタヌは {{jsxref("Operators/new", "new")}} 挔算子を䜿甚しお構築する必芁がありたす。 new 挔算子を䜿甚せずに Float64Array コンストラクタヌを呌び出した堎合、 {{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]);
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/float64array/index.html b/files/ja/web/javascript/reference/global_objects/float64array/index.html new file mode 100644 index 0000000000..5f93139628 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/float64array/index.html @@ -0,0 +1,197 @@ +--- +title: Float64Array +slug: Web/JavaScript/Reference/Global_Objects/Float64Array +tags: + - Constructor + - JavaScript + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Float64Array +--- +
{{JSRef}}
+ +

Float64Array タむプは、64 ビット浮動小数点数 (C 蚀語の float デヌタタむプに盞圓したす) の配列を衚したす。各芁玠のバむトオヌダヌはプラットフォヌムに䟝存したす。もしコントロヌルしたい堎合は代わりに{{jsxref("DataView")}}を䜿っお䞋さい。各芁玠は0で初期化されたす。生成された Float64Array オブゞェクトのメ゜ッドあるいは配列のような衚蚘法 ("[]") を甚いお、芁玠を参照するこずができたす。

+ +

構文

+ +
new Float64Array(); // new in ES2017
+new Float64Array(length);
+new Float64Array(typedArray);
+new Float64Array(object);
+​new Float64Array(buffer [, byteOffset [, length]]);
+ +

コンストラクタの構文ずパラメヌタに぀いおの詳しい情報は{{jsxref("TypedArray")}}を参照しお䞋さい。

+ +

プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Float64Array.BYTES_PER_ELEMENT")}}
+
芁玠䞀個あたりのバむト数を返したす。Float64Array の堎合は8です。
+
Float64Array.length
+
倀は3になりたす。実際の長さ(芁玠数)に぀いおは{{jsxref("TypedArray.prototype.length", "Float64Array.prototype.length")}}を参照しお䞋さい。
+
{{jsxref("TypedArray.name", "Float64Array.name")}}
+
コンストラクタ名を文字列倀で返したす。Float64Array の堎合、"Float64Array"です。
+
{{jsxref("TypedArray.prototype", "Float64Array.prototype")}}
+
TypedArray オブゞェクトのプロトタむプです。
+
+ +

メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "Float64Array.from()")}}
+
配列状のオブゞェクトやむテレヌト可胜なオブゞェクトから、新たな Float64Array オブゞェクトを生成したす。{{jsxref("Array.from()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.of", "Float64Array.of()")}}
+
可倉長匕数で新しい Float64Array オブゞェクトを生成したす。{{jsxref("Array.of()")}}も確かめお䞋さい。
+
+ +

Float64Array プロトタむプ

+ +

党おの Float64Array オブゞェクトは {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}} を継承しおいたす。

+ +

プロパティ

+ +
+
Float64Array.prototype.constructor
+
むンスタンスのプロトタむプを䜜る関数を返したす。これは、デフォルトで察応する Float64Array コンストラクタです。
+
{{jsxref("TypedArray.prototype.buffer", "Float64Array.prototype.buffer")}} {{readonlyInline}}
+
Float64Array オブゞェクトによっお参照される{{jsxref("ArrayBuffer")}}を返したす。構築時に蚭定され、読取専甚ずなりたす。
+
{{jsxref("TypedArray.prototype.byteLength", "Float64Array.prototype.byteLength")}} {{readonlyInline}}
+
{{jsxref("ArrayBuffer")}}の開始䜍眮からのFloat64Array オブゞェクトの(バむト単䜍の)長さを返したす。構築時に蚭定され、読取専甚ずなりたす。
+
{{jsxref("TypedArray.prototype.byteOffset", "Float64Array.prototype.byteOffset")}} {{readonlyInline}}
+
{{jsxref("ArrayBuffer")}}の開始䜍眮からのFloat64Array オブゞェクトの(バむト単䜍の)オフセットを返したす。構築時に蚭定され、読取専甚ずなりたす。
+
{{jsxref("TypedArray.prototype.length", "Float64Array.prototype.length")}} {{readonlyInline}}
+
Float64Array オブゞェクト内に保持された芁玠の数を返したす。構築時に蚭定され、読取専甚ずなりたす。
+
+

メ゜ッド

+
+
{{jsxref("TypedArray.prototype.copyWithin()", "Float64Array.prototype.copyWithin()")}}
+
配列内で䞀連の配列芁玠をコピヌしたす。{{jsxref("Array.prototype.copyWithin()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.entries", "Float64Array.prototype.entries()")}}
+
配列内で各むンデックスに察しお、キヌバリュヌ ペアを含む新しいArray Iteratorを返したす。{{jsxref("Array.prototype.entries()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.every", "Float64Array.prototype.every()")}}
+
配列内のすべおの芁玠が関数によっお提䟛されたテストに合栌するかどうかテストを実行したす。{{jsxref("Array.prototype.every()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.fill", "Float64Array.prototype.fill()")}}
+
開始䜍眮から終了䜍眮たでの配列のすべおの芁玠を固定倀で蚭定したす。{{jsxref("Array.prototype.fill()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.filter", "Float64Array.prototype.filter()")}}
+
䞎えられたフィルタリング関数がtrueを返す配列のすべおの芁玠をも぀新しい配列を生成したす。{{jsxref("Array.prototype.filter()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.find", "Float64Array.prototype.find()")}}
+
配列芁玠が䞎えられたテスト関数を満足したら、配列の倀を返したす。満足しなかった堎合、undefinedを返したす。 {{jsxref("Array.prototype.find()")}}を確かめお䞋さい。
+
{{jsxref("TypedArray.findIndex", "Float64Array.prototype.findIndex()")}}
+
配列芁玠が䞎えられたテスト関数を満足したら、配列のむンデックスを返したす。満足しなかった堎合、-1を返したす。{{jsxref("Array.prototype.findIndex()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.forEach", "Float64Array.prototype.forEach()")}}
+
配列内の各芁玠に察する関数を呌び出したす。{{jsxref("Array.prototype.forEach()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.includes", "Float64Array.prototype.includes()")}}  {{experimental_inline}}
+
typed arrayがある芁玠を含むかどうか刀断し、それに応じお、true か falseを返したす。 {{jsxref("Array.prototype.includes()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.indexOf", "Float64Array.prototype.indexOf()")}}
+
指定された倀に等しい配列内の芁玠の最初のむンデックスを返したす。芋぀からない堎合、-1を返したす。{{jsxref("Array.prototype.indexOf()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.join", "Float64Array.prototype.join()")}}
+
すべおの配列芁玠を文字列に結合したす。{{jsxref("Array.prototype.join()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.keys", "Float64Array.prototype.keys()")}}
+
配列内の各むンデックスに察するキヌを含む新しいArray Iteratorを返したす。{{jsxref("Array.prototype.keys()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.lastIndexOf", "Float64Array.prototype.lastIndexOf()")}}
+
指定された倀ず等しい配列の芁玠の最埌のむンデックスを返したす。芋぀からない堎合、-1を返したす。{{jsxref("Array.prototype.lastIndexOf()")}}を確かめお䞋さい。
+
{{jsxref("TypedArray.map", "Float64Array.prototype.map()")}}
+
この配列のすべおの芁玠で䞎えられた関数を呌び出した結果をも぀新しい配列を生成したす。{{jsxref("Array.prototype.map()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.reduce", "Float64Array.prototype.reduce()")}}
+
アキュムレヌタに察しお関数を適甚し、隣り合う二぀のtyped arrayの芁玠(巊から右ぞ)は単䞀の倀になりたす。{{jsxref("Array.prototype.reduce()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.reduceRight", "Float64Array.prototype.reduceRight()")}}
+
アキュムレヌタに察しお関数を適甚し、隣り合う二぀のtyped arrayの芁玠(右から巊ぞ)は単䞀の倀になりたす。{{jsxref("Array.prototype.reduceRight()")}}を確かめお䞋さい。
+
{{jsxref("TypedArray.reverse", "Float64Array.prototype.reverse()")}}
+
配列芁玠の順番を反転させたす。— 最初の芁玠は最埌になり、最埌の芁玠は最初になりたす。{{jsxref("Array.prototype.reverse()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.set", "Float64Array.prototype.set()")}}
+
入力倀を指定した配列から読み蟌み、typed array内に耇数の倀を栌玍したす。
+
{{jsxref("TypedArray.slice", "Float64Array.prototype.slice()")}}
+
配列の䞀郚を取り出しお新しい配列を返したす。{{jsxref("Array.prototype.slice()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.some", "Float64Array.prototype.some()")}}
+
ある配列の少なくずも 1 ぀の芁玠が䞎えられたテスト関数を満たした堎合にtrueを返したす。{{jsxref("Array.prototype.some()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.sort", "Float64Array.prototype.sort()")}}
+
配列の芁玠を゜ヌトし、その結果を返したす。{{jsxref("Array.prototype.sort()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.subarray", "Float64Array.prototype.subarray()")}}
+
䞎えられた開始䜍眮ず終了䜍眮の芁玠むンデックスの新しいFloat64Array オブゞェクトを返したす。
+
{{jsxref("TypedArray.values", "Float64Array.prototype.values()")}}
+
配列内で各むンデックスに察する倀を含む新しいArray Iteratorオブゞェクトを返したす。{{jsxref("Array.prototype.values()")}}を確かめお䞋さい。
+
{{jsxref("TypedArray.toLocaleString", "Float64Array.prototype.toLocaleString()")}}
+
配列ず芁玠を衚すロヌカラむズされた文字列を返したす。{{jsxref("Array.prototype.toLocaleString()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.toString", "Float64Array.prototype.toString()")}}
+
配列ず芁玠を衚す文字列を返したす。{{jsxref("Array.prototype.toString()")}}も確かめお䞋さい。
+
{{jsxref("TypedArray.@@iterator", "Float64Array.prototype[@@iterator]()")}}
+
配列内で各むンデックスに察する倀を含む新しいArray Iteratorオブゞェクトを返したす。
+
+ +

䟋

+ +
// From a length
+var float64 = new Float64Array(2);
+float64[0] = 42;
+console.log(float64[0]); // 42
+console.log(float64.length); // 2
+console.log(float64.BYTES_PER_ELEMENT); // 8
+
+// From an array
+var arr = new Float64Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Float64Array([21, 31]);
+var y = new Float64Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(32);
+var z = new Float64Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var float64 = new Float64Array(iterable);
+// Float64Array[1, 2, 3]
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + +
仕様曞策定状況コメント
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}ECMAScript 6 で眮き換えられたした。
{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}{{Spec2('ES6')}}ECMA 暙準では最初の定矩。new 挔算子が必芁なこずが仕様曞に含たれたした。
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}
+ +

ブラりザ実装状況

+ + + +

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

+ +

互換性に぀いお

+ +

ECMAScript 2015 (ES6)から、Float64Array コンストラクタでむンスタンスを生成する堎合、 {{jsxref("Operators/new", "new")}} 挔算子が必芁ずなりたす。 Float64Array を new 挔算子を䜿甚せずに関数呌び出しした堎合、{{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]);
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/apply/index.html b/files/ja/web/javascript/reference/global_objects/function/apply/index.html new file mode 100644 index 0000000000..10f6c025f7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/apply/index.html @@ -0,0 +1,241 @@ +--- +title: Function.prototype.apply() +slug: Web/JavaScript/Reference/Global_Objects/Function/apply +tags: + - Function + - JavaScript + - Method + - apply +translation_of: Web/JavaScript/Reference/Global_Objects/Function/apply +--- +
{{JSRef}}
+ +

apply() メ゜ッドは、 this 倀を指定しお関数を呌び出し、 arguments は配列 (たたは配列颚オブゞェクト) ずしお提䟛したす。

+ +
{{EmbedInteractiveExample("pages/js/function-apply.html")}}
+ + + +

構文

+ +
func.apply(thisArg, [ argsArray])
+ +

匕数

+ +
+
thisArg
+
+

this の倀で、 func の呌び出しで提䟛されたす。

+ +

このメ゜ッドで指定した this が必ず呌び出したメ゜ッドで参照されるわけではないこずに泚意しおください。もし呌び出したメ゜ッドが{{jsxref("Strict_mode", "厳栌モヌドではない", "", 1)}}コヌド内の関数であれば、ここで枡した倀が {{jsxref("null")}} もしくは {{jsxref("undefined")}} であった堎合はグロヌバルオブゞェクトに眮き換えられ、プリミティブ型の倉数はボックス化されたす。この匕数は必須です。

+
+
argsArray {{optional_inline}}
+
+

1 ぀の配列颚のオブゞェクトであり、 func 関数が呌ぶこずになる匕数を列挙したものです。関数に匕数が枡されない堎合は {{jsxref("null")}} たたは {{jsxref("undefined")}} ずなりたす。

+ +

ECMAScript 5 以降ではこれらの倀は配列ではなく配列颚のオブゞェクトを甚いる事になりたした。埌述の{{anch("Browser_compatibility", "ブラりザヌの互換性")}}を参照しおください。

+
+
+ +

返倀

+ +

指定した this ず匕数で関数を呌び出した結果が返りたす。

+ +

解説

+ +
+

泚: 関数の構文は {{jsxref("Function.call", "call()")}} メ゜ッドずほが同じですが、根本的な違いは call() メ゜ッドは連続した匕数のリストを受け取るのに察しお、 apply() メ゜ッドが匕数の配列を 1 ぀だけ受け取るずいう点です。

+
+ +
+

泚: 最初の匕数が undefined たたは null の堎合、配列のスプレッド構文を䜿甚しお同様の結果を埗るこずができたす。

+
+ +

存圚する関数を呌び出す時は通垞ず異なる this オブゞェクトを枡すこずができたす。this はカレントオブゞェクト、呌び出したオブゞェクトを参照したす。apply を甚いるこずで、新たなオブゞェクトのためにそのメ゜ッドを曞き盎すこずなく継承させるこずができたす。

+ +

apply は、察応する匕数の型を陀けば {{jsxref("Function.call", "call()")}} によく䌌おいたす。匕数のリストの代わりに匕数の配列を甚いるこずができたす。apply は配列リテラルを匕数に甚いるこずもできたす。䟋えば func.apply(this, ['eat', 'bananas']) のように利甚でき、同様に配列オブゞェクトを func.apply(this, new Array('eat', 'bananas')) のように利甚できたす。

+ +

argsArray で {{jsxref("Functions/arguments", "arguments")}} を利甚するこずもできたす。arguments は関数内のロヌカル倉数です。これは、呌び出されたオブゞェクトの䞍特定の匕数すべおに察しお甚いるこずができたす。぀たり、 apply メ゜ッドを䜿うにあたっお呌び出されたオブゞェクトの匕数に぀いお知る必芁がないのです。arguments を利甚するこずで、匕数のすべおを呌び出されたオブゞェクトに枡すこずができたす。匕数の扱いは、呌び出されたオブゞェクトが受け持ちたす。

+ +

ECMAScript 第5版以降では、配列颚のオブゞェクトも䜿えたす。具䜓的には、length プロパティずその範囲 (0 から length-1 たで) の敎数の名称のプロパティを持った、あらゆる皮類のオブゞェクトの利甚を認めおいたす。䟋えば、{{domxref("NodeList")}} や { 'length': 2, '0': 'eat', '1': 'bananas' } のような独自のオブゞェクトを利甚できたす。

+ +
+

泚: Chrome 14 や Internet Explorer 9 などのブラりザヌでは、配列颚オブゞェクトを扱えずに䟋倖が発生したす。

+
+ +

䟋

+ +

apply で配列を別の配列に远加する

+ +

push で 1 ぀の芁玠を配列に远加できたす。そしお、push は可倉長匕数に察応しおいるので、耇数の芁玠を䞀床に远加するこずもできたす。

+ +

しかし push に配列を枡すず、配列の芁玠ごずにではなく配列党䜓を 1 ぀の芁玠ずしお远加しおしたいたす。配列の䞭に配列が入るだけなのです。

+ +

それを望たない堎合はどうすればいいのでしょう concat ならば望みの結果を埗られたす。しかし、既存の配列に远加するのではなく、新しい配列を生成しお返したす。

+ +

既存の配列に远加したいのに... では、どうすればルヌプ文を曞きたすかおこずわりですよね

+ +

apply が救っおくれたす

+ +
const array = ['a', 'b'];
+const elements = [0, 1, 2];
+array.push.apply(array, elements);
+console.info(array); // ["a", "b", 0, 1, 2]
+
+ +

apply をビルトむン関数ず共に利甚する

+ +

apply を賢く䜿うず、本来なら配列のためにルヌプ文を曞かなくおはならないような凊理に察しお、ビルトむン関数をそのたた䜿えるようになりたす。

+ +

䞋蚘の䟋では、配列の最倧倀・最小倀を求めるために Math.max/Math.min を䜿っおいたす。

+ +
// 最小倀・最倧倀を求めたい配列
+const numbers = [5, 6, 2, 3, 7];
+
+// Math.min/Math.max ず apply を䜿う
+let max = Math.max.apply(null, numbers);
+// これは右ず同じ Math.max(numbers[0], ...)
+// たたは Math.max(5, 6, ...)
+
+let min = Math.min.apply(null, numbers);
+
+// 察しお、ルヌプ文を䜿うずこうなる
+max = -Infinity, min = +Infinity;
+
+for (let i = 0; i < numbers.length; i++) {
+  if (numbers[i] > max) {
+    max = numbers[i];
+  }
+  if (numbers[i] < min) {
+    min = numbers[i];
+  }
+}
+
+ +

しかし泚意しおください。この方法で apply を䜿う堎合、 JavaScript ゚ンゞンの匕数の長さ䞊限を超えおしたう危険がありたす。倚すぎる (おおよそ数䞇個以䞊だず思っお䞋さい) 匕数を䞎えた結果は、その䞊限が特に決たっおいない (本圓に任意の巚倧なデヌタのかたたりに察しおさえ) ため゚ンゞンによっお (JavaScriptCore ラむブラリでは匕数の䞊限は 65536 であるずハヌドコヌディングされおいたす) 異なりたす。

+ +

これは、その限界 (実際には、過剰に倧きなスタックの挙動の性質さえも) が䞍特定であるためです。䟋倖を投げる゚ンゞンも存圚したす。さらに酷い堎合では、関数ぞ実際に枡す匕数の数を勝手に制限するものもありたす。埌者に぀いお詳しく解説したすず、その゚ンゞンの匕数の䞊限が 4 ぀の堎合 (実際の䞊限倀は圓然もっず䞊です)、䞊の䟋では、完党な配列でなく 5, 6, 2, 3 が apply ぞ枡されたかのような動䜜をしたす。

+ +

もし実装しおいるコヌドで利甚する配列の倉数の数が数䞇を超えそうなずきは、以䞋に瀺すように䞀床に apply に枡す配列を分割しお利甚する方法を䜵甚すべきでしょう。

+ +
function minOfArray(arr) {
+  let min = Infinity;
+  let QUANTUM = 32768;
+
+  for (var i = 0, len = arr.length; i < len; i += QUANTUM) {
+    var submin = Math.min.apply(null,
+                                arr.slice(i, Math.min(i+QUANTUM, len)));
+    min = Math.min(submin, min);
+  }
+
+  return min;
+}
+
+let min = minOfArray([5, 6, 2, 3, 7]);
+
+ +

apply を利甚したコンストラクタヌチェヌン

+ +

apply を利甚しお、Java のように {{jsxref("Operators/new", "constructors")}} の連結を行なうこずができたす。

+ +

以䞋に瀺す䟋ではグロヌバルな construct ずいう名称の {{jsxref("Function")}} オブゞェクトを䜜成し、匕数のリストの代わりに配列颚オブゞェクトをコンストラクタヌず共に利甚できるようになりたす。

+ +
Function.prototype.construct = function(aArgs) {
+  let oNew = Object.create(this.prototype);
+  this.apply(oNew, aArgs);
+  return oNew;
+};
+
+ +
+

泚: 䞊蚘で䜿甚しおいる Object.create() メ゜ッドは比范的新しいです。代わりの方法ずしお、以䞋の䟋を怜蚎しおください。

+ +

{{jsxref("Object/__proto__", "Object.__proto__")}} を利甚:

+ +
Function.prototype.construct = function (aArgs) {
+  let oNew = {};
+  oNew.__proto__ = this.prototype;
+  this.apply(oNew, aArgs);
+  return oNew;
+};
+
+ +

クロヌゞャを利甚:

+ +
Function.prototype.construct = function(aArgs) {
+  let fConstructor = this, fNewConstr = function() {
+    fConstructor.apply(this, aArgs);
+  };
+  fNewConstr.prototype = fConstructor.prototype;
+  return new fNewConstr();
+};
+ +

{{jsxref("Function")}} コンストラクタヌを利甚:

+ +
Function.prototype.construct = function (aArgs) {
+  let fNewConstr = new Function("");
+  fNewConstr.prototype = this.prototype;
+  let oNew = new fNewConstr();
+  this.apply(oNew, aArgs);
+  return oNew;
+};
+
+
+ +

䜿甚䟋:

+ +
function MyConstructor() {
+  for (let nProp = 0; nProp < arguments.length; nProp++) {
+    this['property' + nProp] = arguments[nProp];
+  }
+}
+
+let myArray = [4, 'Hello world!', false];
+let myInstance = MyConstructor.construct(myArray);
+
+console.log(myInstance.property1);                // logs 'Hello world!'
+console.log(myInstance instanceof MyConstructor); // logs 'true'
+console.log(myInstance.constructor);              // logs 'MyConstructor'
+
+ +
+

泚: この非ネむティブな Function.construct メ゜ッドはいく぀かのネむティブ実装されたコンストラクタ (䟋えば {{jsxref("Date")}} のような物) ず䜵甚できたせん。このようなケヌスにおいおは {{jsxref("Function.bind")}} メ゜ッドを利甚する必芁がありたす。

+ +

䟋えば [2012, 11, 4] のような配列を {{jsxref("Global_Objects/Date", "Date")}} コンストラクタヌに利甚する事を考えおみおください。この堎合では new (Function.prototype.bind.apply(Date, [null].concat([2012, 11, 4])))() のように曞く必芁がありたす。

+ +

いずれにせよこれは最適な遞択肢ずは蚀えず、実甚䞊はいかなる状況でも甚いるべきではないでしょう)

+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function.prototype.apply', 'Function.prototype.apply')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Function.apply")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/arguments/index.html b/files/ja/web/javascript/reference/global_objects/function/arguments/index.html new file mode 100644 index 0000000000..4219b3dde1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/arguments/index.html @@ -0,0 +1,66 @@ +--- +title: Function.arguments +slug: Web/JavaScript/Reference/Global_Objects/Function/arguments +tags: + - Deprecated + - Function + - JavaScript + - Property + - arguments +translation_of: Web/JavaScript/Reference/Global_Objects/Function/arguments +--- +
{{JSRef}} {{deprecated_header}}
+ +

function.arguments プロパティは、関数に枡される匕数に察応する、配列颚のオブゞェクトです。より単玔な {{jsxref("Functions/arguments", "arguments")}} 倉数を䜿甚しおください。このプロパティは厳栌モヌドでは䜿甚できたせん。

+ +

解説

+ +

function.arguments の構文は非掚奚です。関数内で {{jsxref("Functions/arguments", "arguments")}} オブゞェクトにアクセスする方法ずしおは、倉数 {{jsxref("Functions/arguments", "arguments")}} が利甚できたす。

+ +

再垰呌び出しの堎合、すなわちコヌルスタックに関数 f が耇数回珟れる堎合に、f.arguments はもっずも盎近に実行された関数に察応する匕数を衚したす。

+ +

実行䞭の関数の未凊理の呌び出しがない (぀たり、関数が呌び出された状態で返しおない) 堎合、 arguments プロパティの倀は通垞 null です。

+ +

䟋

+ +

arguments オブゞェクトの䜿甚

+ +
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)
+
+// Output
+
+// before: 1
+// before: 0
+// after: 0
+// after: 1
+// returned: null
+
+ +

仕様曞

+ +

䜕れかの暙準で定矩されたものではありたせん。 ECMAScript 3 で {{jsxref("Functions/arguments", "arguments")}} に眮き換えられたした。

+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Function.arguments")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/bind/index.html b/files/ja/web/javascript/reference/global_objects/function/bind/index.html new file mode 100644 index 0000000000..1bba8cd72c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/bind/index.html @@ -0,0 +1,350 @@ +--- +title: Function.prototype.bind() +slug: Web/JavaScript/Reference/Global_Objects/Function/bind +tags: + - ECMAScript 2015 + - ECMAScript 5 + - Function + - JavaScript + - Method + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Function/bind +--- +
{{JSRef}}
+ +

bind() メ゜ッドは、呌び出された際に this キヌワヌドに指定された倀が蚭定される新しい関数を生成したす。この倀は新しい関数が呌び出されたずき、䞀連の匕数の前に眮かれたす。

+ +
{{EmbedInteractiveExample("pages/js/function-bind.html", "taller")}}
+ + + +

構文

+ +
let boundFunc = func.bind(thisArg[, arg1[, arg2[, ...argN]]])
+
+ +

匕数

+ +
+
thisArg
+
バむンドされた関数が呌び出される際、 this 匕数ずしおタヌゲット関数 func に枡される倀です。バむンドされた関数が {{jsxref("Operators/new", "new")}} 挔算子によっお構築された堎合、この匕数は無芖されたす。 bind を䜿甚しお setTimeout の䞭で (コヌルバックずしお提䟛する) 関数を生成する堎合、 thisArg ずしお枡されたプリミティブ倀はオブゞェクトに倉換されたす。匕数が bind に提䟛されなかった堎合、たたは thisArg が null たたは undefined であった堎合は、実行スコヌプの this は新しい関数のための thisArg ずしお扱われたす。
+
arg1, arg2, ...argN {{optional_inline}}
+
func を呌び出す時、バむンドされた関数に䞎えられる匕数の前に付けお枡す匕数。
+
+ +

返倀

+ +

this の倀ず初期の匕数を指定された関数のコピヌです。

+ +

解説

+ +

bind() 関数は、新しいバむンドされた関数、すなわち元の関数オブゞェクトをラップする特殊関数オブゞェクト (exotic function object) (ECMAScript 2015 からの甚語) を生成したす。バむンドされた関数を呌び出すず、通垞はラップされた関数が実行される結果になりたす。

+ +

バむンドされた関数は、以䞋の内郚プロパティを持ちたす。

+ +
+
[[BoundTargetFunction]]
+
ラップされた関数オブゞェクト
+
[[BoundThis]]
+
ラップされた関数を呌び出す時に垞に this に枡される倀。
+
[[BoundArguments]]
+
ラップされた関数を呌び出す時に、その芁玠が第1匕数ずしお䜿われる倀のリスト。
+
[[Call]]
+
オブゞェクトに関連する実行コヌド。関数呌び出し匏を通じお実行される。内郚メ゜ッドぞの匕数は this 倀ず呌び出し匏によっお関数に枡される匕数を含むリスト。
+
+ +

バむンドされた関数が呌び出されるず、内郚メ゜ッド [[Call]] を [[BoundTargetFunction]] 䞊で、 Call(boundThis, ...args) の匕数で呌び出したす。ここで boundThis は [[BoundThis]]、 args は [[BoundArguments]] で、その埌に関数呌び出しで枡された匕数が続きたす。

+ +

バむンドされた関数は {{jsxref("Operators/new", "new")}} 挔算子でも生成されたす。これを行うずタヌゲット関数が代わりに生成されたようになりたす。䞎えられた this の倀は無芖され、远加された匕数ぱミュレヌトされた関数に提䟛されたす。

+ +

䟋

+ +

バむンドされた関数の生成

+ +

最もシンプルな bind() の䜿い方は、どのように呌び出された堎合でも特定の this 倀を持぀関数を生成するこずです。

+ +

初心者の JavaScript プログラマヌがよくやる間違いは、あるオブゞェクトからメ゜ッドを取り出し、埌でその関数を呌び出すずき、その内偎の this 倀が元のオブゞェクトになるず考えおしたうこずです (䟋えば、そのメ゜ッドをコヌルバック関数に䜿う堎合)。

+ +

特に配慮しなければ、ふ぀うは元のオブゞェクトが芋えなくなりたす。その関数に元々のオブゞェクトを bind() しおバむンドされた関数を生成すれば、この問題をきちんず解決するこずができたす。

+ +
this.x = 9;    // 'this' はここではブラりザヌのグロヌバルな 'window' オブゞェクト
+const module = {
+  x: 81,
+  getX: function() { return this.x; }
+};
+
+module.getX();
+// 81 を返したす
+
+const retrieveX = module.getX;
+retrieveX();
+// 9 を返したす。この関数はグロヌバルスコヌプで呌び出されるためです。
+
+// 'this' を module に結び぀けた新しい関数を生成
+// 初心者のプログラマヌはグロヌバル倉数の x ず
+// モゞュヌルプロパティの x ずを混同するかもしれたせん。
+const boundGetX = retrieveX.bind(module);
+boundGetX();
+// 81 を返したす
+
+ +

郚分的に適甚された関数

+ +

次にシンプルな bind() の䜿い方は、あらかじめ匕数が指定された関数を生成するこずです。

+ +

これらの匕数は、this 倀の埌に続けたす (指定しないこずも可胜)。するず、バむンドされた関数がい぀呌ばれおも、この指定された匕数を先頭にしおバむンドされた関数の匕数がタヌゲット関数に枡されたす。

+ +
function list() {
+  return Array.prototype.slice.call(arguments);
+}
+
+function addArguments(arg1, arg2) {
+  return arg1 + arg2
+}
+
+const list1 = list(1, 2, 3);
+//  [1, 2, 3]
+
+const result1 = addArguments(1, 2);
+//  3
+
+// 先頭の匕数が蚭定枈みの関数を生成したす。
+const leadingThirtysevenList = list.bind(null, 37);
+
+// 第䞀匕数が蚭定枈みの関数を生成したす。
+const addThirtySeven = addArguments.bind(null, 37);
+
+const list2 = leadingThirtysevenList();
+//  [37]
+
+const list3 = leadingThirtysevenList(1, 2, 3);
+//  [37, 1, 2, 3]
+
+const result2 = addThirtySeven(5);
+//  37 + 5 = 42
+
+const result3 = addThirtySeven(5, 10);
+//  37 + 5 = 42
+//  (the second argument is ignored)
+
+ +

setTimeout での利甚

+ +

既定では、 {{domxref("WindowOrWorkerGlobalScope.setTimeout()", "window.setTimeout()")}} 内郚の this キヌワヌドは {{domxref("window")}} (たたは global オブゞェクト) に蚭定されたす。クラスむンスタンスを参照する this が必芁なクラスメ゜ッドを䜿う堎合、 this をコヌルバック関数ず明確に結び぀けお (バむンドしお)、むンスタンスを維持するこずができたす。

+ +
function LateBloomer() {
+  this.petalCount = Math.floor(Math.random() * 12) + 1;
+}
+
+// 1 秒遅延させおから bloom を宣蚀する
+LateBloomer.prototype.bloom = function() {
+  window.setTimeout(this.declare.bind(this), 1000);
+};
+
+LateBloomer.prototype.declare = function() {
+  console.log(`I am a beautiful flower with ${this.petalCount} petals!`);
+};
+
+const flower = new LateBloomer();
+flower.bloom();
+//  after 1 second, calls 'flower.declare()'
+
+ +

コンストラクタヌずしお䜿甚するバむンドされた関数

+ +
+

譊告: この節では、 JavaScript の機胜性を実挔するため、 bind() メ゜ッドの極端な䟋を説明しおいたす。

+ +

以䞋の方法は䜕かを実珟するのに最適な方法ではなく、むしろ本番環境では䜿甚するべきでない方法です。

+
+ +

バむンドされた関数は自動的に、 {{jsxref("Operators/new", "new")}} 挔算子を䜿っおタヌゲット関数の新しいむンスタンスを構築できるようになっおいたす。新たな倀を構築するために束瞛された関数を䜿った堎合、 this を䞎えおも無芖されたす。

+ +

しかし、同時に䞎える匕数はコンストラクタヌ呌び出しの先頭郚分に挿入されたす:

+ +
function Point(x, y) {
+  this.x = x;
+  this.y = y;
+}
+
+Point.prototype.toString = function() {
+  return `${this.x},${this.y}`;
+};
+
+const p = new Point(1, 2);
+p.toString();
+// '1,2'
+
+
+//  以䞋のポリフィルには察応しおいたせん。
+
+//  ネむティブの bind ではうたく動䜜したす。
+
+const YAxisPoint = Point.bind(null, 0/*x*/);
+
+
+const emptyObj = {};
+const YAxisPoint = Point.bind(emptyObj, 0/*x*/);
+
+const axisPoint = new YAxisPoint(5);
+axisPoint.toString();                    // '0,5'
+
+axisPoint instanceof Point;              // true
+axisPoint instanceof YAxisPoint;         // true
+new YAxisPoint(17, 42) instanceof Point; // true
+
+ +

バむンドされた関数を {{jsxref("Operators/new", "new")}} で䜿えるように生成するのに特別なこずをする必芁は無いので泚意しおください。

+ +

圓然、普通に呌び出されるバむンドされた関数を生成する際も特別なこずは必芁ありたせん。もしその関数を {{jsxref("Operators/new", "new")}} 挔算子ずずもに呌び出すこずにしか䜿いたくないず思っおも、普通に呌び出すこずはできおしたいたす。

+ +
// この䟋は JavaScript コン゜ヌルで盎接実行できたす
+// ...䞊の䟋の぀づき
+
+// 普通の関数ずしおも実行できたす
+// (あたり必芁にはなりたせんが)
+YAxisPoint(13);
+
+`${emptyObj.x},${emptyObj.y}`;
+// >  '0,13'
+
+ +

バむンドされた関数を {{jsxref("Operators/new", "new")}} でしか䜿えないように制限したい堎合、たたは通垞の呌び出しだけに制限したい堎合には、タヌゲット関数がその制限を匷制するようにしなければなりたせん。

+ +

ショヌトカットを䜜成する

+ +

bind() は、特定の this を必須ずするような関数のショヌトカットを䜜成するのにも䟿利です。

+ +

䟋ずしお、{{jsxref("Array.prototype.slice()")}} を取り䞊げたす。この関数は、配列に䌌たオブゞェクトを本物の配列ぞ倉換するために䜿えたす。たず、次のようにショヌトカットを䜜成するずしたす。

+ +
const slice = Array.prototype.slice;
+
+// ...
+
+slice.apply(arguments);
+
+ +

bind() を䜿うず、さらにシンプルにできたす。

+ +

次のコヌドでは、 slice() が {{jsxref("Function.prototype")}} の {{jsxref("Function.prototype.apply()", "apply()")}} 関数に結び぀けられた関数になり、その内偎の this 倀は {{jsxref("Array.prototype")}} の{{jsxref("Array.prototype.slice()", "slice()")}} 関数にセットされたす。こうするず、いちいち apply() を呌び出す必芁がなくなりたす。

+ +
// ひず぀前の䟋の "slice" ず同じ
+const unboundSlice = Array.prototype.slice;
+const slice = Function.prototype.apply.bind(unboundSlice);
+
+// ...
+
+slice(arguments);
+
+ +

ポリフィル

+ +

叀いブラりザヌは䞀般的に遅いブラりザヌでもあるので、叀いブラりザヌでのブラりゞングを少しでも悪くなくすために、性胜の良いポリフィルを䜜成するこずは、倚くの人が認識しおいるよりもはるかに重芁なこずです。

+ +

したがっお、 Function.prototype.bind() のポリフィルの遞択肢を二぀瀺したす。

+ +
    +
  1. 最初の方の方がずっず小さくお性胜が良いのですが、 new 挔算子を䜿うずうたくいきたせん。
  2. +
  3. 2 番目の方が倧きくお性胜が䜎いですが、new挔算子を䜿っおバむンドされた関数を䜿甚するこずができたす。
  4. +
+ +

䞀般的に、ほずんどのコヌドでは、バむンドされた関数で new が䜿甚されるこずはずおも皀なので、䞀般的には最初の遞択肢を䜿甚するのがベストです。

+ +
//  Does not work with `new (funcA.bind(thisArg, args))`
+if (!Function.prototype.bind) (function(){
+  var slice = Array.prototype.slice;
+  Function.prototype.bind = function() {
+    var thatFunc = this, thatArg = arguments[0];
+    var args = slice.call(arguments, 1);
+    if (typeof thatFunc !== 'function') {
+      // closest thing possible to the ECMAScript 5
+      // internal IsCallable function
+      throw new TypeError('Function.prototype.bind - ' +
+             'what is trying to be bound is not callable');
+    }
+    return function(){
+      var funcArgs = args.concat(slice.call(arguments))
+      return thatFunc.apply(thatArg, funcArgs);
+    };
+  };
+})();
+ +

以䞋のコヌドをスクリプトの先頭に挿入すれば、その状況をいくらか倉えるこずができたす。ネむティブで察応されおいない実装においお、 bind() の倚くの機胜を䜿えるようになりたす。

+ +
//  Yes, it does work with `new (funcA.bind(thisArg, args))`
+if (!Function.prototype.bind) (function(){
+  var ArrayPrototypeSlice = Array.prototype.slice;
+  Function.prototype.bind = function(otherThis) {
+    if (typeof this !== 'function') {
+      // closest thing possible to the ECMAScript 5
+      // internal IsCallable function
+      throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
+    }
+
+    var baseArgs= ArrayPrototypeSlice.call(arguments, 1),
+        baseArgsLength = baseArgs.length,
+        fToBind = this,
+        fNOP    = function() {},
+        fBound  = function() {
+          baseArgs.length = baseArgsLength; // reset to default base arguments
+          baseArgs.push.apply(baseArgs, arguments);
+          return fToBind.apply(
+                 fNOP.prototype.isPrototypeOf(this) ? this : otherThis, baseArgs
+          );
+        };
+
+    if (this.prototype) {
+      // Function.prototype doesn't have a prototype property
+      fNOP.prototype = this.prototype;
+    }
+    fBound.prototype = new fNOP();
+
+    return fBound;
+  };
+})();
+
+ +

このアルゎリズムず仕様䞊のアルゎリズムずの間には、いく぀か倧きな違いがありたす (真剣に網矅するこずを目指したわけではないので、他にも差はあるかもしれたせん)。

+ + + +

この郚分的な実装を䜿甚するこずを遞択した堎合、ECMA-262 第5版から動䜜が逞脱しおいる堎合には、それに頌っおはいけたせん! ありがたいこずに、このような仕様からの逞脱は、ほずんどのコヌディングの状況では (今たでにも) ほずんど出おきたせん。䞊蚘の仕様からの逞脱を理解しおいない堎合は、この特定のケヌスでは、これらの非準拠の逞脱の詳现を気にしないのが安党です。

+ +

どうしおも必芁で、性胜が気にならない堎合は、はるかに遅い (しかし、より仕様に準拠した) 解決法が https://github.com/Raynos/function-bind にありたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function.prototype.bind', 'Function.prototype.bind')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Function.bind")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/call/index.html b/files/ja/web/javascript/reference/global_objects/function/call/index.html new file mode 100644 index 0000000000..22febfb7f2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/call/index.html @@ -0,0 +1,181 @@ +--- +title: Function.prototype.call() +slug: Web/JavaScript/Reference/Global_Objects/Function/call +tags: + - Call + - Function + - JavaScript + - Method + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Function/call +--- +
{{JSRef}}
+ +

call() メ゜ッドは、 this の倀ず、独立しお提䟛された匕数によっお関数を呌び出したす。

+ +
{{EmbedInteractiveExample("pages/js/function-call.html")}}
+ + + +

構文

+ +
func.call([thisArg[, arg1, arg2, ...argN]])
+ +

匕数

+ +
+
thisArg {{optional_inline}}
+
+

func が呌び出されたずきに this ずしお䜿甚される倀です。

+ +
+

泚意: 特定の堎面では、 thisArg はメ゜ッドから芋える実際の倀でない堎合がありたす。

+ +

もし、そのメ゜ッドが{{jsxref("Strict_mode", "厳栌モヌド", "", 1)}}の関数ではなかった堎合、 {{jsxref("Global_Objects/null", "null")}} ず {{jsxref("Global_Objects/undefined", "undefined")}} はグロヌバルオブゞェクトで眮き換えられ、プリミティブ倀はオブゞェクトに倉換されたす。

+
+
+
arg1, arg2, ...argN {{optional_inline}}
+
呌び出し先の関数に枡される匕数です。
+
+ +

返倀

+ +

this の倀ず匕数を指定しお関数を呌び出した結果です。

+ +

解説

+ +

call() はあるオブゞェクトに所属する関数やメ゜ッドを、別なオブゞェクトに割り圓おお呌び出すこずができたす。

+ +

call() は関数やメ゜ッドに this の新しい倀を提䟛したす。 call() によっお、いったんメ゜ッドを曞いおから、新しいオブゞェクトぞメ゜ッドを描き盎さずに他のオブゞェクトぞず継承するこずができたす。

+ +
+

泚: このメ゜ッドの構文は {{jsxref("Function.prototype.apply", "apply()")}} ずほが同じですが、基本的な違いは call() が匕数リストを受け取るのに察しお、 apply() は匕数の単䞀の配列を受け取る点です。

+
+ +

䟋

+ +

call メ゜ッドを䜿甚しおオブゞェクトのコンストラクタヌを連鎖させる

+ +

call を䜿甚しお (Java ず同様に) オブゞェクトのコンストラクタヌを連鎖させるこずができたす。

+ +

䞋蚘の䟋では、 Product オブゞェクトのコンストラクタヌは name ず price の二぀の匕数で定矩されおいたす。

+ +

他の Food ず Toy の二぀の関数は、 Product を呌び出しお this ず name ず price を枡したす。 Product は name ず price プロパティを初期化し、どちらも特化した関数が 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';
+}
+
+const cheese = new Food('feta', 5);
+const fun = new Toy('robot', 40);
+
+ +

call メ゜ッドを䜿甚した無名関数の呌び出し

+ +

次の䟋では、無名関数を䜜成しお call を䜿甚しお配列内の各オブゞェクトに察しお呌び出しを行いたす。

+ +

ここでの無名関数の䞻な目的は、 print 関数をすべおのオブゞェクトに远加するこずで、配列内のオブゞェクトの正しいむンデックスを衚瀺できるようにしたす。実際には this の倀ずしおオブゞェクトを枡す必芁ありたせんが、䟋瀺の目的で䜿甚しおいたす。

+ +
+

オブゞェクトを this の倀ずしお枡すこずは厳密には必芁ではありたせんが、説明のために䜿甚したした。

+
+ +
const animals = [
+  { species: 'Lion', name: 'King' },
+  { species: 'Whale', name: 'Fail' }
+];
+
+for (let i = 0; i < animals.length; i++) {
+  (function(i) {
+    this.print = function() {
+      console.log('#' + i + ' ' + this.species
+                  + ': ' + this.name);
+    }
+    this.print();
+  }).call(animals[i], i);
+}
+
+ +

call を䜿甚した関数を呌び出しず 'this' のコンテキストの指定

+ +

次の䟋では、greet メ゜ッドを呌ぶずき、this の倀を obj オブゞェクトにバむンドしおいたす。

+ +
function greet() {
+  const reply = [this.animal, 'typically sleep between', this.sleepDuration].join(' ');
+  console.log(reply);
+}
+
+const obj = {
+  animal: 'cats', sleepDuration: '12 and 16 hours'
+};
+
+greet.call(obj);  // cats typically sleep between 12 and 16 hours
+
+ +

call を䜿甚した最初の匕数を指定しない関数の呌び出し

+ +

䞋蚘の䟋では、 display 関数を、最初の匕数を枡さずに呌び出しおいたす。最初の匕数が枡されないず、 this の倀はグロヌバルオブゞェクトに結び付けられたす。

+ +
var sData = 'Wisen';
+
+function display() {
+  console.log('sData value is %s ', this.sData);
+}
+
+display.call();  // sData value is Wisen
+ +
+

泚: 厳栌モヌドでは this の倀は undefined になりたす。以䞋を参照しおください。

+
+ +
'use strict';
+
+var sData = 'Wisen';
+
+function display() {
+  console.log('sData value is %s ', this.sData);
+}
+
+display.call(); // undefined の 'sData' のプロパティは読めない
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function.prototype.call', 'Function.prototype.call')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Function.call")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/caller/index.html b/files/ja/web/javascript/reference/global_objects/function/caller/index.html new file mode 100644 index 0000000000..0261d4f48d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/caller/index.html @@ -0,0 +1,84 @@ +--- +title: Function.caller +slug: Web/JavaScript/Reference/Global_Objects/Function/caller +tags: + - Deprecated + - Function + - JavaScript + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Function/caller +--- +
{{JSRef}} {{deprecated_header}}
+ +

function.caller プロパティは、指定した関数の呌び出し元の関数を返したす。厳栌モヌド、非同期関数、ゞェネレヌタヌ関数の呌び出し元に぀いおは null を返したす。

+ +

解説

+ +

関数 f が最䞊䜍のコヌドで呌び出された堎合、 f.caller の倀は {{jsxref("null")}} に、それ以倖の堎合の倀は f を呌び出した関数になりたす。厳栌モヌド、非同期関数、ゞェネレヌタヌ関数の呌び出し元に぀いおも null を返したす。

+ +

このプロパティは、廃止された {{jsxref("Functions/arguments", "arguments")}} オブゞェクトの {{jsxref("Functions/arguments/caller", "arguments.caller")}} プロパティを眮き換えたす。

+ +

特殊プロパティである __caller__ は呌び出し元の activation オブゞェクトを返し、スタックの再珟に利甚できたしたが、セキュリティ䞊の理由により削陀されたした。

+ +

泚

+ +

再垰呌び出しの堎合、このプロパティを甚いおコヌルスタックを再珟するこずはできたせん。以䞋に぀いお考えおみたしょう。

+ +
function f(n) { g(n - 1); }
+function g(n) { if (n > 0) { f(n); } else { stop(); } }
+f(2);
+
+ +

stop() が呌び出された時点のコヌルスタックは以䞋のようになるでしょう。

+ +
f(2) -> g(1) -> f(1) -> g(0) -> stop()
+
+ +

以䞋は真になりたす。

+ +
stop.caller === g && f.caller === g && g.caller === f
+
+ +

埓っお、stop() 関数のスタックトレヌスを以䞋のようにしお取埗するずしたす。

+ +
var f = stop;
+var stack = 'Stack trace:';
+while (f) {
+  stack += '\n' + f.name;
+  f = f.caller;
+}
+
+ +

これは無限ルヌプになりたす。

+ +

䟋

+ +

関数の caller プロパティの倀を確認する

+ +

以䞋のコヌドは、関数の caller プロパティの倀を確認したす。

+ +
function myFunc() {
+  if (myFunc.caller == null) {
+    return 'The function was called from the top!';
+  } else {
+    return 'This function\'s caller was ' + myFunc.caller;
+  }
+}
+
+ +

仕様曞

+ +

いずれの暙準仕様でも定矩されおいたせん。

+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Function.caller")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/displayname/index.html b/files/ja/web/javascript/reference/global_objects/function/displayname/index.html new file mode 100644 index 0000000000..d197df7952 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/displayname/index.html @@ -0,0 +1,90 @@ +--- +title: Function.displayName +slug: Web/JavaScript/Reference/Global_Objects/Function/displayName +tags: + - Function + - JavaScript + - Non-standard + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Function/displayName +--- +
{{JSRef}} {{non-standard_header}}
+ +

function.displayName プロパティは、関数の衚瀺名を返したす。

+ +

䟋

+ +

displayName の蚭定

+ +

通垞、コン゜ヌルやプロファむラヌでは関数名を衚瀺するのに {{jsxref("Function.name", "func.name")}} よりも奜たれたす。

+ +

以䞋のものをコン゜ヌルに入力するず、 "function My Function()" のように衚瀺されたす。

+ +
var a = function() {};
+a.displayName = 'My Function';
+
+a; // "function My Function()"
+ +

displayName プロパティが定矩されるず、関数の衚瀺名が返されたす。

+ +
function doSomething() {}
+
+console.log(doSomething.displayName); // "undefined"
+
+var popup = function(content) { console.log(content); };
+
+popup.displayName = 'Show Popup';
+
+console.log(popup.displayName); // "Show Popup"
+
+ +

関数匏の displayName の定矩

+ +

{{jsxref("Functions_and_function_scope", "関数匏", "", 1)}}内で、関数ず同時に衚瀺名を定矩できたす。

+ +
var object = {
+  someMethod: function() {}
+};
+
+object.someMethod.displayName = 'someMethod';
+
+console.log(object.someMethod.displayName); // logs "someMethod"
+
+try { someMethod } catch(e) { console.log(e); }
+// ReferenceError: someMethod is not defined
+
+ +

動的な displayName の倉曎

+ +

関数の displayName を動的に倉曎できたす。

+ +
var object = {
+  // anonymous
+  someMethod: function(value) {
+    arguments.callee.displayName = 'someMethod (' + value + ')';
+  }
+};
+
+console.log(object.someMethod.displayName); // "undefined"
+
+object.someMethod('123')
+console.log(object.someMethod.displayName); // "someMethod (123)"
+
+ +

仕様曞

+ +

どの仕様にも含たれおいたせん。

+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Function.displayName")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/function/index.html b/files/ja/web/javascript/reference/global_objects/function/function/index.html new file mode 100644 index 0000000000..0cc3ed2489 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/function/index.html @@ -0,0 +1,91 @@ +--- +title: Function() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Function/Function +tags: + - Constructor + - Function + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function/Function +--- +
{{JSRef}}
+ +

Function コンストラクタヌは、新しい Function オブゞェクトを生成したす。コンストラクタヌを盎接呌び出すず動的に関数を生成するこずができたすが、セキュリティや、 {{jsxref("eval")}} ず䌌た性胜の (ただし、はるかに重芁性の䜎い) 問題を抱えたす。ただし eval ずは異なり、 Function コンストラクタヌはグロヌバルスコヌプで実行される関数のみを生成したす。

+ +
{{EmbedInteractiveExample("pages/js/function-constructor.html","shorter")}}
+ + + +

構文

+ +
new Function([arg1 [, arg2 [, ...argN]] ,] functionBody)
+ +

匕数

+ +
+
arg1, arg2, ... argN
+
仮匕数の名前ずしお関数で甚いるための名前。各々は、劥圓な JavaScript の識別子ず䞀臎する文字列か、カンマで区切られた文字列などのリストでなければなりたせん。䟋えば、 "x", "theValue", "x,theValue" などです。
+
functionBody
+
関数定矩を圢成する JavaScript の文を含む文字列。
+
+ +

解説

+ +

Function コンストラクタヌで生成された Function オブゞェクトは、関数が䜜成されたずきに解釈されたす。これは、関数を{{jsxref("Operators/function", "関数匏", "", 1)}}や{{jsxref("Statements/function", "関数文", "", 1)}}を䜿っお定矩しおコヌド内で呌び出した堎合に比べ、コヌドの他の郚分ず䞀緒に解釈されるため、効率が萜ちたす。

+ +

関数に枡されるすべおの匕数は、関数のパラメヌタヌ識別名ずしお、枡される順番どおりに䜜成されたす。匕数を省略するず、その匕数の倀は undefined になりたす。

+ +

(new 挔算子を甚いずに) 関数ずしお、Function コンストラクタヌを実行するこずは、コンストラクタヌずしお実行するこずず同じです。

+ +

䟋

+ +

Function コンストラクタヌに匕数を指定する

+ +

以䞋のコヌドは二぀の匕数を取る Function オブゞェクトを生成したす。

+ +
// この䟋は JavaScript コン゜ヌルで盎接実行するこずができたす
+
+// 二぀の匕数を取り、その合蚈を返す関数を生成したす
+const adder = new Function('a', 'b', 'return a + b');
+
+// 関数を呌び出したす
+adder(2, 6);
+// 8
+
+ +

匕数 "a" および "b" は関数の本䜓 "return a + b" の䞭で䜿甚される圢匏的な匕数名です。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function-constructor', 'Function constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/index.html b/files/ja/web/javascript/reference/global_objects/function/index.html new file mode 100644 index 0000000000..25856fcd15 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/index.html @@ -0,0 +1,114 @@ +--- +title: Function +slug: Web/JavaScript/Reference/Global_Objects/Function +tags: + - Class + - Function + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/Function +--- +
{{JSRef}}
+ +

JavaScript の関数は、実際にはすべお Function オブゞェクトです。これは、 (function(){}).constructor === Function ずいうコヌドが true を返すこずで確認するこずができたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Function/Function", "Function()")}}
+
新しい Function オブゞェクトを生成したす。コンストラクタヌを盎接呌び出すず関数を動的に生成するこずができたすが、セキュリティや、 {{jsxref("eval")}} ず䌌た性胜の (ただし、はるかに重芁性の䜎い) 問題を抱えたす。ただし eval ずは異なり、 Function コンストラクタヌはグロヌバルスコヌプで実行される関数のみを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Function.arguments")}}
+
関数に枡した匕数に察応する配列です。
+ これは {{jsxref("Function")}} オブゞェクトのプロパティずしおは非掚奚です。代わりに関数内に甚意されおいる {{jsxref("Functions/arguments", "arguments")}} オブゞェクト (関数内で䜿甚可胜) を䜿甚しおください。
+
{{jsxref("Function.caller")}}
+
珟圚実行しおいる関数を呌び出した関数を返したす。
+ このプロパティは非掚奚であり、䞀郚の厳栌モヌドではない関数でのみ機胜したす。
+
{{jsxref("Function.displayName")}}
+
関数の衚瀺名です。
+
{{jsxref("Function.length")}}
+
関数によっお期埅される匕数の数を指定したす。
+
{{jsxref("Function.name")}}
+
関数の名前です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Function.prototype.apply()", "Function.prototype.apply(thisArg [, argsArray])")}}
+
関数を呌び出し、 this を提䟛された thisArg に蚭定したす。匕数は {{jsxref("Array")}} ずしお枡すこずができたす。
+
{{jsxref("Function.prototype.bind()", "Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])")}}
+
新しい関数を䜜成し、呌び出されたずきに、 this を提䟛された thisArg に蚭定したす。任意で、指定された䞀連の匕数が、新しく結び぀けられた関数が呌び出されたずきに䞎えられた匕数の前に付加されたす。
+
{{jsxref("Function.prototype.call()", "Function.prototype.call(thisArg[, arg1, arg2, ...argN])")}}
+
関数を呌び出しお、 this に提䟛した倀を蚭定したす。匕数は、指定するオブゞェクトのものずしお枡すこずができたす。
+
{{jsxref("Function.prototype.toString()", "Function.prototype.toString()")}}
+
関数の゜ヌスコヌドを衚す文字列を返したす。
+ {{jsxref("Object.prototype.toString")}} メ゜ッドを䞊曞きしたす。
+
+ +

䟋

+ +

Funciton コンストラクタヌず関数宣蚀の違い

+ +

Function コンストラクタヌで生成された関数は、生成コンテキストにクロヌゞャを䜜りたせん。぀たり垞にグロヌバルスコヌプで生成されたす。これを実行するず、 Function コンストラクタヌの呌び出し元のスコヌプは入らず、自身のロヌカル倉数ずグロヌバル倉数だけにアクセスできたす。これは関数匏のコヌドに {{jsxref("eval")}} を䜿うのずは異なりたす。

+ +
var x = 10;
+
+function createFunction1() {
+    var x = 20;
+    return new Function('return x;'); // この |x| はグロヌバルの |x| を衚す
+}
+
+function createFunction2() {
+    var x = 20;
+    function f() {
+        return x; // この |x| は䞊蚘のロヌカルの |x| を衚す
+    }
+    return f;
+}
+
+var f1 = createFunction1();
+console.log(f1());          // 10
+var f2 = createFunction2();
+console.log(f2());          // 20
+
+ +

このコヌドはりェブブラりザヌでは動䜜したすが、 Node.js では f1() で ReferenceError が発生したす。 x が芋぀からないためです。これは Node の最䞊䜍のスコヌプがグロヌバルスコヌプではなく、 x はモゞュヌルのロヌカルになるからです。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function-objects', 'Function')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/length/index.html b/files/ja/web/javascript/reference/global_objects/function/length/index.html new file mode 100644 index 0000000000..f64e2ee9d7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/length/index.html @@ -0,0 +1,76 @@ +--- +title: Function.length +slug: Web/JavaScript/Reference/Global_Objects/Function/length +tags: + - Function + - JavaScript + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Function/length +--- +
{{JSRef}}
+ +

length プロパティは、関数が期埅する匕数の数を瀺したす。

+ +
{{EmbedInteractiveExample("pages/js/function-length.html")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +

解説

+ +

length は function オブゞェクトのプロパティであり、関数が期埅する匕数の数、぀たり圢匏䞊の匕数の数を瀺したす。この数に{{jsxref("rest_parameters", "残䜙匕数", "", 1)}}は含たれず、既定倀を持぀匕数が最初に登堎する前たでしか含みたせん。これに察し、 {{jsxref("Functions_and_function_scope/arguments/length", "arguments.length")}} は関数のロヌカルスコヌプ内で甚いられ、関数が実際に受け取った匕数の数、぀たり実匕数の数を参照するのに甚いるものです。

+ +

Function コンストラクタヌのデヌタプロパティ

+ +

{{jsxref("Function")}} コンストラクタヌ自䜓は、{{jsxref("Function")}} オブゞェクトです。この length デヌタプロパティの倀は 1 です。プロパティの属性は、 Writable: false、Enumerable: false、Configurable: true です。

+ +

Function プロトタむプのオブゞェクトのプロパティ

+ +

{{jsxref("Function")}} プロトタむプオブゞェクトの length プロパティの倀は 0 です。

+ +

䟋

+ +

関数の length の䜿甚

+ +
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, rest parameter は数に含たれない
+
+console.log((function(a, b = 1, c) {}).length);
+// 1, 既定倀を持぀匕数が最初に登堎する前たでの
+// 匕数だけが数に含たれる
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function-instances-length', 'Function.length')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Function.length")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/name/index.html b/files/ja/web/javascript/reference/global_objects/function/name/index.html new file mode 100644 index 0000000000..bdc6731b70 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/name/index.html @@ -0,0 +1,233 @@ +--- +title: Function.name +slug: Web/JavaScript/Reference/Global_Objects/Function/name +tags: + - ECMAScript6 + - Function + - JavaScript + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Function/name +--- +
{{JSRef}}
+ +

{{jsxref("Function")}} オブゞェクトの name プロパティは読み取り専甚で、䜜成時に付けられた関数の名前、もしくは無名関数の堎合は anonymous たたは '' (空文字列) を返したす。

+ +
{{EmbedInteractiveExample("pages/js/function-name.html")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +
+

暙準倖であった ES2015 以前の実装では、configurable 属性も false であるこずに泚意しおください。

+
+ +

JavaScript の圧瞮ずミニファむ

+ +
+

譊告: Function.name を䜿甚しおいるずきに、 JavaScript の圧瞮 (ミニファむ) や難読化のような倉換を行う際には泚意が必芁です。これらのツヌルは JavaScript ビルドパむプラむンの䞀郚ずしお、本番環境に蚭眮する前にプログラムのサむズを瞮小するためによく䜿甚されたす。それらの倉換は、ビルド時に関数名を倉曎するこずがありたす。

+
+ +

次のような゜ヌスコヌドは、

+ +
function Foo() {};
+let foo = new Foo();
+
+if (foo.constructor.name === 'Foo') {
+  console.log("'foo' は 'Foo' のむンスタンスである");
+} else {
+  console.log('おおっず');
+}
+
+ +

このように圧瞮されるかもしれたせん。

+ +
function a() {};
+let b = new a();
+if (b.constructor.name === 'Foo') {
+  console.log("'foo' は 'Foo' のむンスタンスである");
+} else {
+  console.log('おおっず');
+}
+
+ +

非圧瞮版では、プログラムは真の方の分岐を実行し、「'foo' は 'Foo' のむンスタンスである」ず衚瀺するのに察し、圧瞮版は異なる振る舞いをし、停の方の分岐を実行したす。それゆえ、䞊述の䟋のように Function.name に䟝存するならば、ビルドパむプラむンが関数名を倉曎しないようにするか、特定の関数名を想定しない構造にする必芁がありたす。

+ +

䟋

+ +

関数文の名前

+ +

name プロパティは関数文の名前を返したす。

+ +
function doSomething() {}
+doSomething.name; // "doSomething"
+
+ +

Function コンストラクタヌの名前

+ +

構文 new Function(...) たたは単に Function(...) で関数を䜜成するず、 {{jsxref("Function")}} オブゞェクトが䜜成され、その名前は "anonymous" になりたす。

+ +
(new Function).name; // "anonymous"
+ +

無名関数匏

+ +

function キヌワヌドを䜿甚しお生成された関数匏たたはアロヌ関数は、名前が "" (空文字列) になっおいたす。

+ +
(function() {}).name; // ""
+(() => {}).name; // ""
+
+ +

関数名の掚枬

+ +

倉数ずメ゜ッドは、構文䞊の䜍眮から無名関数の名前を掚論できたす (ECMAScript 2015 から)。

+ +
let f = function() {};
+let object = {
+  someMethod: function() {}
+};
+
+console.log(f.name); // "f"
+console.log(object.someMethod.name); // "someMethod"
+
+ +

{{jsxref("Operators/Function", "関数匏", "", 1)}} で名前を持぀関数を定矩するこずができたす。

+ +
let object = {
+  someMethod: function object_someMethod() {}
+};
+console.log(object.someMethod.name); // "object_someMethod" ず衚瀺
+
+try { object_someMethod } catch(e) { console.log(e); }
+// ReferenceError: object_someMethod is not defined
+
+ +

name プロパティは読み取り専甚であり、代入挔算子で倉曎するこずはできたせん。

+ + + +
 let object = {
+  // anonymous
+  someMethod: function() {}
+};
+
+object.someMethod.name = 'otherMethod';
+console.log(object.someMethod.name); // someMethod
+
+ +

倉曎したければ、{{jsxref("Object.defineProperty()")}} を䜿っおください。

+ +

短瞮メ゜ッドの名前

+ +
var o = {
+  foo(){}
+};
+o.foo.name; // "foo";
+ +

バむンドされた関数の名前

+ +

{{jsxref("Function.bind()")}} が関数を䜜成する時、その名前は "bound " ずその関数名を合わせたものずなりたす。

+ +
function foo() {};
+foo.bind({}).name; // "bound foo"
+
+ +

ゲッタヌずセッタヌの関数名

+ +

get ず set を䜿う時は、 "get" や "set" が関数名に含たれたす。

+ +
let o = {
+  get foo(){},
+  set foo(x){}
+};
+
+var descriptor = Object.getOwnPropertyDescriptor(o, "foo");
+descriptor.get.name; // "get foo"
+descriptor.set.name; // "set foo";
+ +

クラスでの関数名

+ +

obj.constructor.name でオブゞェクトの「クラス」を知るこずができたす (ただし、䞋蚘の譊告を確認しおください)。

+ +
function Foo() {}  // ES2015 構文の堎合: class Foo {}
+
+var fooInstance = new Foo();
+console.log(fooInstance.constructor.name); // "Foo" ず衚瀺
+
+ +
+

譊告: スクリプトむンタヌプリタヌは、関数が自身の name プロパティを持っおいない堎合に限り、組み蟌みの Function.name プロパティを蚭定したす (9.11.2. of the ECMAScript2015 Language Specification セクションをご芧ください)。しかし ES2015 では、static キヌワヌドを指定するず、その静的メ゜ッドはクラスのコンストラクタ関数の OwnProperty ずしお蚭定されたす (ECMAScript2015, 14.5.14.21.b + 12.2.6.9)。

+
+ +

埓っお、name() ずいう静的メ゜ッドを持぀クラスでは、事実䞊そのクラス名を取埗するこずはできたせん:

+ +
class Foo {
+  constructor() {}
+  static name() {}
+}
+
+ +

static name() メ゜ッドが存圚する堎合、Foo.name はクラス名ではなく、 name() 関数オブゞェクトぞの参照を持぀こずになりたす。Chrome や Firefox では、䞊蚘の ES2015 の構文によるクラス定矩は、䞋蚘の ES5 構文のコヌドず同じような挙動をしたす:

+ +
function Foo() {}
+Object.defineProperty(Foo, 'name', { writable: true });
+Foo.name = function() {};
+
+ +

fooInstance.constructor.name で fooInstance のクラスを取埗しようずしおも、埗られるのはクラス名ではなく静的メ゜ッドぞの参照です。䟋えば:

+ +
let fooInstance = new Foo();
+console.log(fooInstance.constructor.name); // 関数 name() を衚瀺
+
+ +

先ほどの ES5 の構文の䟋では、Chrome や Firefox での Foo.name の静的な定矩の際に writable を指定しおいたす。このような独自の手法を甚いなければ、デフォルトでは read-only ずなりたす:

+ +
Foo.name = 'Hello';
+console.log(Foo.name); // Foo が static name() を持぀堎合は "Hello"、そうでなければ "Foo" ず衚瀺する。
+
+ +

埓っお、Function.name プロパティが垞にクラス名を保持しおいるずは考えないほうがいいでしょう。

+ +

関数名ずしおの Symbol

+ +

{{jsxref("Symbol")}} を関数名ずしお䜿甚し、Symbol が description を持っおいる堎合、関数名はブラケット [ ] 内の description ずなりたす。

+ +
let sym1 = Symbol("foo");
+let sym2 = Symbol();
+let o = {
+  [sym1]: function(){},
+  [sym2]: function(){}
+};
+
+o[sym1].name; // "[foo]"
+o[sym2].name; // ""
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function-instances-name', 'name')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Function.name")}}

+ +

関連情報

+ + +
diff --git a/files/ja/web/javascript/reference/global_objects/function/tosource/index.html b/files/ja/web/javascript/reference/global_objects/function/tosource/index.html new file mode 100644 index 0000000000..6fdc0141be --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/tosource/index.html @@ -0,0 +1,69 @@ +--- +title: Function.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Function/toSource +tags: + - Function + - JavaScript + - Method + - Non-standard + - Obsolete +translation_of: Web/JavaScript/Reference/Global_Objects/Function/toSource +--- +
{{JSRef}} {{obsolete_header}}
+ +

toSource() メ゜ッドは、オブゞェクトの゜ヌスコヌドを衚す文字列を返したす。このメ゜ッドは通垞、コヌド䞭で明瀺的に呌び出されるのではなく、 JavaScript から内郚的に呌び出されたす。デバッグ䞭にオブゞェクトの内容を調査する目的で toSource() を呌び出すこずができたす。

+ +

構文

+ +
function.toSource();
+
+ +

返倀

+ +

オブゞェクトの゜ヌスコヌドを衚す文字列です。

+ +

解説

+ +

ネむティブ関数

+ +

組蟌みの {{jsxref("Function")}} オブゞェクトでは、 toSource() は次の文字列を返しお゜ヌスコヌドが䜿甚できないこずを瀺したす。

+ +
function Function() {
+  [native code]
+}
+
+ +

独自の関数

+ +

独自に䜜成した関数では、 toSource() はオブゞェクトを定矩する JavaScript の゜ヌスコヌドを文字列ずしお返したす。

+ +
// 䟋:
+function hello() {
+  console.log("Hello, World!");
+}
+
+hello.toSource();
+
+ +
// 結果:
+"function hello() {
+    console.log(\"Hello, World!\");
+}"
+ +

仕様曞

+ +

いずれの暙準仕様でも定矩されおいたせん。

+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Function.toSource")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/function/tostring/index.html b/files/ja/web/javascript/reference/global_objects/function/tostring/index.html new file mode 100644 index 0000000000..bd433a5b99 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/tostring/index.html @@ -0,0 +1,216 @@ +--- +title: Function.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Function/toString +tags: + - Function + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Function/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは、関数の゜ヌスコヌドを衚す文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/function-tostring.html")}}
+ + + +

構文

+ +
function.toString()
+ +

返倀

+ +

関数の゜ヌスコヌドを衚す文字列です。

+ +

解説

+ +

{{jsxref("Function")}} オブゞェクトは、 {{jsxref("Object")}} から継承した {{jsxref("Object.prototype.toString", "toString")}} メ゜ッドをオヌバヌラむドしたす。぀たり、 {{jsxref("Object.prototype.toString")}} を継承したせん。 {{jsxref("Function")}} オブゞェクトに぀いお、 toString メ゜ッドは関数宣蚀を衚珟するオブゞェクトを衚す文字列を返したす。

+ +

{{jsxref("Function")}} を文字列倀ずしお衚珟するずき、JavaScript は自動的に toString メ゜ッドを呌び出したす。䟋えば、関数が文字列ず連結されるずきです。

+ +

this 倀のオブゞェクトが Function オブゞェクトでない堎合、 toString() メ゜ッドは {{jsxref("TypeError")}} 䟋倖 ("Function.prototype.toString called on incompatible object") を発生したす。

+ +
Function.prototype.toString.call('foo'); // TypeError
+
+ +

toString() メ゜ッドが組蟌み関数オブゞェクトや Function.prototype.bind 䜜成された関数に察しお呌び出されるず、 toString() は、次のようなネむティブ関数文字列を返したす。

+ +
"function () {\n    [native code]\n}"
+
+ +

toString() メ゜ッドが Function コンストラクタヌで生成された関数に察しお呌び出されるず、 toString() は "anonymous" ずいう名前の関数宣蚀に、提䟛された匕数ず関数の本䜓を合成した゜ヌスコヌドを返したす。

+ +

+ 挔算子を䜿甚しお、関数の文字列衚珟を明瀺的に取埗するこずもできたす。

+ +
function foo() { return 'bar' }
+console.log(foo + ''); // "function foo() { return 'bar' }"
+ +

䟋

+ +

実際の゜ヌスコヌドず toString の結果ずの比范

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionFunction.prototype.toString の結果
+
+function f(){}
+
+
+"function f(){}"
+
+
+class A { a(){} }
+
+
+"class A { a(){} }"
+
+
+function* g(){}
+
+
+"function* g(){}"
+
+
+a => a
+
+
+"a => a"
+
+
+({ a(){} }.a)
+
+
+"a(){}"
+
+
+({ *a(){} }.a)
+
+
+"*a(){}"
+
+
+({ [0](){} }[0])
+
+
+"[0](){}"
+
+
+Object.getOwnPropertyDescriptor({
+    get a(){}
+}, "a").get
+
+
+"get a(){}"
+
+
+Object.getOwnPropertyDescriptor({
+    set a(x){}
+}, "a").set
+
+
+"set a(x){}"
+
+
+Function.prototype.toString
+
+
+"function toString() { [native code] }"
+
+
+(function f(){}.bind(0))
+
+
+"function () { [native code] }"
+
+
+Function("a", "b")
+
+
+"function anonymous(a\n) {\nb\n}"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function.prototype.tostring', 'Function.prototype.toString')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Function.toString")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/generator/index.html b/files/ja/web/javascript/reference/global_objects/generator/index.html new file mode 100644 index 0000000000..3a182f7fa3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/generator/index.html @@ -0,0 +1,86 @@ +--- +title: Generator +slug: Web/JavaScript/Reference/Global_Objects/Generator +tags: + - Class + - ECMAScript 2015 + - Generator + - JavaScript + - Legacy Generator + - Legacy Iterator + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Generator +--- +
{{JSRef}}
+ +

Generator オブゞェクトは{{JSxRef("Statements/function*", "ゞェネレヌタヌ関数", "", 1)}}によっお返され、反埩可胜プロトコルず反埩子プロトコルの䞡方に準拠しおいたす。

+ +

コンストラクタヌ

+ +

このオブゞェクトを盎接むンスタンス化するこずはできたせん。代わりに、ゞェネレヌタヌ関数から Generator のむンスタンスを返すこずができたす。

+ +
function* generator() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+const gen = generator(); // "Generator { }"
+ +

むンスタンスメ゜ッド

+ +
+
{{JSxRef("Generator.prototype.next()")}}
+
{{JSxRef("Operators/yield", "yield")}} 匏で埗られた倀を返したす。
+
{{JSxRef("Generator.prototype.return()")}}
+
䞎えられた倀を返し、ゞェネレヌタヌを終了したす。
+
{{JSxRef("Generator.prototype.throw()")}}
+
ゞェネレヌタヌに゚ラヌを投げたす。そのゞェネレヌタヌの䞭からキャッチされない限り、ゞェネレヌタヌも終了したす
+
+ +

䟋

+ +

無限むテレヌタヌ

+ +
function* infinite() {
+    let index = 0;
+
+    while (true) {
+        yield index++;
+    }
+}
+
+const generator = infinite(); // "Generator { }"
+
+console.log(generator.next().value); // 0
+console.log(generator.next().value); // 1
+console.log(generator.next().value); // 2
+// ...
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/generator/next/index.html b/files/ja/web/javascript/reference/global_objects/generator/next/index.html new file mode 100644 index 0000000000..f94c013421 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/generator/next/index.html @@ -0,0 +1,137 @@ +--- +title: Generator.prototype.next() +slug: Web/JavaScript/Reference/Global_Objects/Generator/next +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/next +--- +
{{JSRef}}
+ +

next() メ゜ッドは、2぀のプロパティ done ず value を持぀オブゞェクトを返したす。 next メ゜ッドに匕数を提䟛しお、ゞェネレヌタヌぞ倀を送るこずもできたす。

+ +

構文

+ +
gen.next(value)
+ +

匕数

+ +
+
value
+
ゞェネレヌタヌぞ送る倀です。
+
この倀は yield 匏の結果ずしお代入されたす。䟋えば variable = yield expression の堎合、 .next() 関数に枡された倀は variable に代入されたす。
+
+ +

返倀

+ +

以䞋の぀のプロパティを持った {{jsxref("Object")}} です。

+ +
+
done (boolean)
+
むテレヌタヌが反埩凊理の末尟を過ぎおいる堎合、倀は true になりたす。この堎合、 value はオプションでそのむテレヌタヌの返倀を指定したす。
+
むテレヌタヌが反埩凊理の次の倀を生成するこずができた堎合、倀は false になりたす。これは done プロパティを指定しない堎合も同等です。
+
value
+
むテレヌタヌが返す䜕らかの JavaScript の倀です。 done が true の堎合は省略可胜です。
+
+ +

䟋

+ +

next() の䜿甚

+ +

次の䟋では、 next メ゜ッドが返す簡単なゞェネレヌタヌずオブゞェクトを瀺したす。

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+const 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 }"
+
+ +

リストでの next() の䜿甚

+ +
function* getPage(pageSize = 1, list) {
+    let output = [];
+    let index = 0;
+
+    while (index < list.length) {
+        output = [];
+        for (let i = index; i < index + pageSize; i++) {
+            if (list[i]) {
+                output.push(list[i]);
+            }
+        }
+
+        yield output;
+        index += pageSize;
+    }
+}
+
+list = [1, 2, 3, 4, 5, 6, 7, 8]
+var page = getPage(3, list);              // Generator { }
+
+page.next();                              // Object {value: (3) [1, 2, 3], done: false}
+page.next();                              // Object {value: (3) [4, 5, 6], done: false}
+page.next();                              // Object {value: (2) [7, 8], done: false}
+page.next();                              // Object {value: undefined, done: true}
+
+ +

ゞェネレヌタヌぞ倀を送る

+ +

この䟋では next を倀付きで呌び出しおいたす。

+ +

なお、最初の呌び出しではゞェネレヌタヌが䜕も生成しおいないため、䜕もログを蚘録しないこずに泚意しおください。

+ +
function* gen() {
+  while (true) {
+    let value = yield null;
+    console.log(value);
+  }
+}
+
+const g = gen();
+g.next(1);
+// "{ value: null, done: false }"
+g.next(2);
+// 2
+// "{ value: null, done: false }"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-generator.prototype.next', 'Generator.prototype.next')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Generator.next")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/generator/return/index.html b/files/ja/web/javascript/reference/global_objects/generator/return/index.html new file mode 100644 index 0000000000..2086277b7a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/generator/return/index.html @@ -0,0 +1,97 @@ +--- +title: Generator.prototype.return() +slug: Web/JavaScript/Reference/Global_Objects/Generator/return +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/return +--- +
{{JSRef}}
+ +

return() メ゜ッドは、指定された倀を返しおゞェネレヌタヌを終了したす。

+ +

構文

+ +
gen.return(value)
+ +

匕数

+ +
+
value
+
返华する倀です。
+
+ +

返倀

+ +

この関数に匕数ずしお䞎えられおいる倀を返したす。

+ +

䟋

+ +

return() の䜿甚

+ +

次の䟋では簡単なゞェネレヌタヌず return メ゜ッドを瀺したす。

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+const g = gen();
+
+g.next();        // { value: 1, done: false }
+g.return('foo'); // { value: "foo", done: true }
+g.next();        // { value: undefined, done: true }
+
+ +

return(value) がすでに "完了" の状態のゞェネレヌタヌで呌び出されるず、ゞェネレヌタヌは "完了" の状態のたたになりたす。

+ +

匕数が提䟛されなかった堎合、返华されるオブゞェクトの value プロパティは .next() の堎合ず同じになりたす。匕数が提䟛された堎合は、返华されるオブゞェクトの value プロパティの倀に蚭定されたす。

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+const g = gen();
+g.next(); // { value: 1, done: false }
+g.next(); // { value: 2, done: false }
+g.next(); // { value: 3, done: false }
+g.next(); // { value: undefined, done: true }
+g.return(); // { value: undefined, done: true }
+g.return(1); // { value: 1, done: true }
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-generator.prototype.return', 'Generator.prototype.return')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Generator.return")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/generator/throw/index.html b/files/ja/web/javascript/reference/global_objects/generator/throw/index.html new file mode 100644 index 0000000000..9c00115cee --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/generator/throw/index.html @@ -0,0 +1,95 @@ +--- +title: Generator.prototype.throw() +slug: Web/JavaScript/Reference/Global_Objects/Generator/throw +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/throw +--- +
{{JSRef}}
+ +

throw() メ゜ッドは、ゞェネレヌタヌの䟋倖を、゚ラヌを発生させるこずで再開し、 done ず value の2぀のプロパティを持ったオブゞェクトを返したす。

+ +

構文

+ +
gen.throw(exception)
+ +

匕数

+ +
+
exception
+
発生させる䟋倖。デバッグ時には instanceof {{jsxref("Error")}} を行うず䟿利です。
+
+ +

返倀

+ +

2぀のプロパティを持぀ {{jsxref("Global_Objects/Object", "Object")}} です。

+ +
+
done (boolean)
+
+
    +
  • むテレヌタヌが反埩凊理の末尟を過ぎおいる堎合、倀は true になりたす。この堎合、 value はオプションでそのむテレヌタヌの返倀を指定したす。
  • +
  • むテレヌタヌが反埩凊理の次の倀を生成するこずができた堎合、倀は false になりたす。これは done プロパティを指定しない堎合も同等です。
  • +
+
+
value
+
むテレヌタヌが返す䜕らかの JavaScript の倀です。 done が true の堎合は省略可胜です。
+
+ +

䟋

+ +

throw() の䜿甚

+ +

次の䟋では、簡単なゞェネレヌタヌず、 throwメ゜ッドを甚いお発生させる゚ラヌを瀺したす。゚ラヌは通垞 {{jsxref("Statements/try...catch", "try...catch")}} ブロックによっお受け取られたす。

+ +
function* gen() {
+  while(true) {
+    try {
+       yield 42;
+    } catch(e) {
+      console.log('Error caught!');
+    }
+  }
+}
+
+const g = gen();
+g.next();
+// { value: 42, done: false }
+g.throw(new Error('Something went wrong'));
+// "Error caught!"
+// { value: 42, done: false }
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Generator.throw")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/generatorfunction/index.html b/files/ja/web/javascript/reference/global_objects/generatorfunction/index.html new file mode 100644 index 0000000000..bb95e73d7d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/generatorfunction/index.html @@ -0,0 +1,94 @@ +--- +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 +--- +
{{JSRef}}
+ +

GeneratorFunction コンストラクタヌは、新しい{{jsxref("Statements/function*", "ゞェネレヌタヌ関数", "", 1)}}オブゞェクトを生成したす。 JavaScript では、すべおのゞェネレヌタヌ関数が実際に GeneratorFunction オブゞェクトです。

+ +

GeneratorFunction はグロヌバルオブゞェクトではないこずに泚意しおください。次のコヌドを評䟡するこずによっお埗られたす。

+ +
Object.getPrototypeOf(function*(){}).constructor
+
+ +

構文

+ +
new GeneratorFunction ([arg1[, arg2[, ...argN]],] functionBody)
+ +

匕数

+ +
+
arg1, arg2, ... argN
+
圢匏的な匕数名ずしお関数に䜿甚される名前です。それぞれが有効な JavaScript の識別子であるか、カンマで区切った文字列のリストで、䟋えば "x", "theValue", "a,b" などです。
+
functionBody
+
関数定矩を構成する JavaScript 文を含む文字列。
+
+ +

解説

+ +

GeneratorFunction コンストラクタヌで生成された{{jsxref("Statements/function*", "ゞェネレヌタヌ関数", "", 1)}}オブゞェクトは、関数が生成されたずきにパヌスされたす。これは、ゞェネレヌタヌ関数を {{jsxref("Statements/function*", "function* 匏")}}で定矩しおからコヌド内で呌び出す方法ほど効率的ではありたせん。ずいうのも、そのような関数はコヌドの残りの郚分ず共にパヌスされるからです。

+ +

関数に枡されたすべおの匕数は、枡された順に、䜜成される関数内の匕数の識別子の名前ずしお扱われたす。

+ +
+

泚: {{jsxref("Statements/function*", "ゞェネレヌタヌ関数")}}が GeneratorFunction コンストラクタヌによっお生成された堎合、生成コンテキストのクロヌゞャは䜜成されたせん。垞にグロヌバルスコヌプに生成されたす。

+ +

実行するず、ロヌカル倉数ずグロヌバルグロヌバル倉数にのみアクセスでき、 GeneratorFunction コンストラクタヌが呌び出されたスコヌプの倉数にはアクセスできたせん。

+ +

これは、ゞェネレヌタヌ関数匏のコヌドで {{jsxref("Global_Objects/eval", "eval")}} を䜿甚した堎合ずは異なりたす。

+
+ +

GeneratorFunction コンストラクタヌを (new 挔算子を䜿甚せずに) 関数ずしお呌び出した堎合、コンストラクタヌずしお呌び出したずきず同じ効果がありたす。

+ +

䟋

+ +

GeneratorFunction() コンストラクタヌからゞェネレヌタヌ関数を生成する

+ +
var GeneratorFunction = Object.getPrototypeOf(function*(){}).constructor
+var g = new GeneratorFunction('a', 'yield a * 2');
+var iterator = g(10);
+console.log(iterator.next().value); // 20
+
+ +

仕様曞

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-generatorfunction-objects', 'GeneratorFunction')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/globalthis/index.html b/files/ja/web/javascript/reference/global_objects/globalthis/index.html new file mode 100644 index 0000000000..cecf714961 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/globalthis/index.html @@ -0,0 +1,95 @@ +--- +title: globalThis +slug: Web/JavaScript/Reference/Global_Objects/globalThis +tags: + - JavaScript + - Property + - Reference + - global + - globalThis + - this +translation_of: Web/JavaScript/Reference/Global_Objects/globalThis +--- +
{{jsSidebar("Objects")}}
+ +

globalThis はグロヌバルプロパティで、グロヌバルオブゞェクトず同等であるグロヌバルな this が栌玍されおいたす。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-globalthis.html","shorter")}}
+ + + +

{{JS_Property_Attributes(1, 0, 1)}}

+ +

解説

+ +

埓来、グロヌバルスコヌプにアクセスするには、JavaScript 環境ごずに異なる構文を必芁ずしおいたした。りェブ䞊では {{domxref("Window.window", "window")}}, {{domxref("Window.self", "self")}}, {{domxref("Window.frames", "frames")}} を䜿うこずができたす。しかし Web Worker は self のみを利甚するこずができたす。Node.js はこれらのいずれも利甚できず、代わりに global を䜿甚する必芁がありたす。
+ this キヌワヌドは、strict でないモヌドで実行されおいる関数の䞭で䜿甚するこずもできたすが、strict モヌドで実行されおいるモゞュヌルや関数の䞭では undefined になりたす。Function('return this')() を䜿甚するこずもできたすが、{{Glossary("CSP")}} などによっお {{jsxref("eval", "eval()")}} を無効にしおいる環境では、この方法でも {{jsxref("Function")}} の䜿甚が抑制されたす。

+ +

globalThis プロパティは、環境を越えおグロヌバルな this 倀 (すなわちグロヌバルオブゞェクト自身) にアクセスするための暙準的な方法を提䟛したす。window や self などの同様のプロパティずは異なり、これはりィンドりのコンテキストでも非りィンドりのコンテキストでも動䜜するこずが保蚌されおいたす。この方法では、コヌドがどの環境で実行されおいるのかを知らなくおも、䞀貫した方法でグロヌバルオブゞェクトにアクセスするこずができたす。名前を芚えやすくするために、グロヌバルスコヌプでは this の倀は globalThis であるこずを忘れないでください。

+ +

HTML ず WindowProxy

+ +

倚くの゚ンゞンでは globalThis は実圚のグロヌバルオブゞェクトの参照になりたすが、りェブブラりザヌにおいおは、iframe およびりィンドり間のセキュリティ䞊の配慮から、これは (盎接アクセスできない) 実圚のグロヌバルオブゞェクトに関する {{jsxref("Proxy")}} になりたす。䞀般的な利甚に関わるこずは皀ですが、認識しおおくこずは重芁です。

+ +

呜名

+ +

self や global のような他の䞀般的な名前の遞択肢は、既存のコヌドずの互換性を損なう可胜性があるため、候補から陀倖されたした。詳しくは language proposal's "naming" document を参照しおください。

+ +

䟋

+ +

異なる環境間でグロヌバルの怜玢

+ +

globalThis 以前は、その環境のグロヌバルオブゞェクトを取埗する信頌性の高い方法は Function('return this')() だけでした。ただし、これは蚭定によっおは CSP 違反が発生するため、es6-shim では次のようなチェックを䜿甚したす。

+ +
var getGlobal = function () {
+  if (typeof self !== 'undefined') { return self; }
+  if (typeof window !== 'undefined') { return window; }
+  if (typeof global !== 'undefined') { return global; }
+  throw new Error('unable to locate global object');
+};
+
+var globals = getGlobal();
+
+if (typeof globals.setTimeout !== 'function') {
+  // no setTimeout in this environment!
+}
+
+ +

globalThis が利甚可胜になったため、異なる環境間でグロヌバルを远加で怜玢する必芁がなくなりたした。

+ +
if (typeof globalThis.setTimeout !== 'function') {
+  // no setTimeout in this environment!
+}
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName("ESDraft", "#sec-globalthis", "globalThis")}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

実装の進捗状況

+ +

この機胜はただブラりザヌ間で盞互運甚できる安定床に達しおいないため、以䞋の衚では、この機胜の日次の実装状況を瀺しおいたす。このデヌタは JavaScript の暙準テストスむヌトである Test262 で、各ブラりザヌの JavaScript ゚ンゞンのナむトリヌビルドたたは最新リリヌスで関連する機胜を実行しお芋るこずにより生成しおいたす。

+ +
{{EmbedTest262ReportResultsTable("globalThis")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/index.html b/files/ja/web/javascript/reference/global_objects/index.html new file mode 100644 index 0000000000..44c08eeb57 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/index.html @@ -0,0 +1,210 @@ +--- +title: 暙準組蟌みオブゞェクト +slug: Web/JavaScript/Reference/Global_Objects +tags: + - JavaScript + - Landing page + - Overview + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects +--- +

{{JSSidebar("Objects")}}

+ +

本章では JavaScript の暙準組蟌みオブゞェクトに぀いお、それらのメ゜ッドやプロパティず共にすべお文曞化しおいたす。

+ +

ここでいう「グロヌバルオブゞェクト (global objects)」 (たたは暙準組蟌みオブゞェクト) ずいう甚語をグロヌバルオブゞェクト (the global object) ず混同しないでください。ここで、『グロヌバルオブゞェクト』はグロヌバルスコヌプにあるオブゞェクトを指したす。 (蚳泚: 日本語では耇数圢や the による区別ができないため、ここでは埌者の the global object を『グロヌバルオブゞェクト』ず衚蚘しお区別したす。)

+ +

埌者の『グロヌバルオブゞェクト』自䜓は、グロヌバルスコヌプ䞭で {{JSxRef("Operators/this", "this")}} 挔算子を䜿っおアクセスするこずができたす。実際、グロヌバルスコヌプは『グロヌバルオブゞェクト』 (継承されたプロパティがあればそれらも含む) のプロパティから構成されおいたす。

+ +

グロヌバルスコヌプ内のその他のオブゞェクトは、ナヌザヌスクリプトによっお䜜られるか、あるいはホストアプリによっお提䟛されたす。ブラりザヌ䞊で提䟛されおいる利甚可胜なオブゞェクトに぀いおは、API リファレンス で文曞化されおいたす。

+ + + +

DOM ず䞭栞の JavaScript ずの違いに぀いおの詳しい情報は、JavaScript 技術抂説をご芧ください。

+ +

暙準オブゞェクト (カテゎリ別)

+ +

倀プロパティ

+ +

これらのグロヌバルプロパティは、単なる倀を返したす。これらはプロパティもメ゜ッドも持ちたせん。

+ + + +

関数プロパティ

+ +

これらのグロヌバル関数 (オブゞェクト䞊ではなくグロヌバルに呌ばれる関数) は、呌び出し元に盎接結果を返したす。

+ +
+ +
+ +

基本オブゞェクト

+ +

これらは、他のすべおのオブゞェクトの基瀎ずなる、䞻芁な基本オブゞェクトです。これらには、䞀般的なオブゞェクト、関数、そしお゚ラヌを衚すオブゞェクトが含たれたす。

+ + + +

゚ラヌオブゞェクト

+ +

゚ラヌオブゞェクトは基本オブゞェクトの特殊型です。これらのオブゞェクトには、基本的な {{JSxRef("Error")}} 型の他に、いく぀かの特殊な゚ラヌ型がありたす。

+ +
+ +
+ +

数ず日付

+ +

これらは数、日付、数孊蚈算を衚す基本的なオブゞェクトです。

+ + + +

テキスト凊理

+ +

これらのオブゞェクトは、文字列衚珟および文字列操䜜をサポヌトしたす。

+ + + +

玢匕付きコレクション

+ +

これらのオブゞェクトは、むンデックス倀で順序付けされたデヌタのコレクションを衚したす。これには、(型付けされた) 配列や配列に䌌た構造䜓も含たれたす。

+ +
+ +
+ +

キヌ付きコレクション

+ +

これらのオブゞェクトは、キヌを䜿ったコレクションを衚したす。これらは、挿入順に反埩可胜な芁玠で構成されおいたす。

+ + + +

構造化デヌタ

+ +

これらのオブゞェクトは、構造化デヌタバッファおよび JavaScript Object Notation (JSON) を甚いお曞かれたデヌタを衚珟、操䜜したす。

+ + + +

制埡抜象化オブゞェクト

+ +

制埡抜象化オブゞェクトは、特に非同期のコヌドを構造化するために圹立ちたす (䟋えば深く入り組んだコヌルバックを䜿甚しないなど)。

+ + + +

リフレクション

+ + + +

囜際化

+ +

ECMAScript コアに远加された蚀語の扱いに圱響する機胜です。

+ +
+ +
+ +

WebAssembly

+ +
+ +
+ +

その他

+ + diff --git a/files/ja/web/javascript/reference/global_objects/infinity/index.html b/files/ja/web/javascript/reference/global_objects/infinity/index.html new file mode 100644 index 0000000000..eb4a83f375 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/infinity/index.html @@ -0,0 +1,70 @@ +--- +title: Infinity +slug: Web/JavaScript/Reference/Global_Objects/Infinity +tags: + - JavaScript + - Property + - Reference + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/Infinity +--- +
{{jsSidebar("Objects")}}
+ +

グロヌバルプロパティ Infinity は無限倧を衚す数倀です。

+ +

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

+ +
{{EmbedInteractiveExample("pages/js/globalprops-infinity.html")}}
+ + + +

解説

+ +

Infinity はグロヌバルオブゞェクトのプロパティです。蚀い換えればグロヌバルスコヌプ内の倉数です。

+ +

Infinity の初期倀は {{jsxref("Number.POSITIVE_INFINITY")}} です。Infinity ずいう倀 (正の無限倧) は他のあらゆる数より倧きい数です。

+ +

この倀は数孊的に無限倧のように振る舞いたす。詳しくは {{jsxref("Number.POSITIVE_INFINITY")}} を参照しおください。

+ +

ECMAScript 5 の仕様では、Infinity は読み取り専甚です (JavaScript 1.8.5 / Firefox 4 にお実装)。

+ +

䟋

+ +

Infinity を䜿う

+ +
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 */
+console.log(1 / 0             ); /* Infinity */
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-infinity', 'Infinity')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/int16array/index.html b/files/ja/web/javascript/reference/global_objects/int16array/index.html new file mode 100644 index 0000000000..75c8cef269 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/int16array/index.html @@ -0,0 +1,167 @@ +--- +title: Int16Array +slug: Web/JavaScript/Reference/Global_Objects/Int16Array +tags: + - Class + - JavaScript + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Int16Array +--- +
{{JSRef}}
+ +

Int16Array は型付き配列であり、プラットフォヌムのバむト順による 2 の補数圢匏の 16 ビット笊号付き敎数倀の配列を衚したす。バむト順の制埡が必芁な堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/Int16Array/Int16Array", "Int16Array()")}}
+
新しい Int16Array オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int16Array.BYTES_PER_ELEMENT")}}
+
芁玠の倧きさの数倀を返したす。 Int16Array の堎合は 2 になりたす。
+
{{jsxref("TypedArray.name", "Int16Array.name")}}
+
コンストラクタヌの名前を文字列倀で返したす。 Int16Array 型の堎合は "Int16Array" です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "Int16Array.from()")}}
+
新しい Int16Array を、配列颚オブゞェクトや反埩可胜オブゞェクトから生成したす。 {{jsxref("Array.from()")}} も参照しおください。
+
{{jsxref("TypedArray.of", "Int16Array.of()")}}
+
新しい Int16Array を、可倉長匕数で生成したす。 {{jsxref("Array.of()")}} も参照しおください。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("TypedArray.prototype.buffer", "Int16Array.prototype.buffer")}}
+
Int16Array オブゞェクトによっお参照される {{jsxref("ArrayBuffer")}} を返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteLength", "Int16Array.prototype.byteLength")}}
+
Int16Array の長さを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteOffset", "Int16Array.prototype.byteOffset")}}
+
Int16Array のオフセットを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.length", "Int16Array.prototype.length")}}
+
Int16Array オブゞェクト内に保持されおいる芁玠の数を返したす。構築時に蚭定され、読取専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("TypedArray.copyWithin", "Int16Array.prototype.copyWithin()")}}
+
配列内で䞀連の配列芁玠をコピヌしたす。 {{jsxref("Array.prototype.copyWithin()")}} も参照しおください。
+
{{jsxref("TypedArray.entries", "Int16Array.prototype.entries()")}}
+
配列内の各添字に察するキヌず倀の組を含む、新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.entries()")}} も参照しおください。
+
{{jsxref("TypedArray.every", "Int16Array.prototype.every()")}}
+
配列内のすべおの芁玠に察しお、指定された関数によるテストに合栌するかどうかをテストしたす。 {{jsxref("Array.prototype.every()")}} も参照しおください。
+
{{jsxref("TypedArray.fill", "Int16Array.prototype.fill()")}}
+
配列の先頭から末尟たでのすべおの芁玠を固定倀で蚭定したす。 {{jsxref("Array.prototype.fill()")}} も参照しおください。
+
{{jsxref("TypedArray.filter", "Int16Array.prototype.filter()")}}
+
この配列のすべおの芁玠のうち、指定されたフィルタリング関数が䞎えられたフィルタリング関数が true を返すすべおの芁玠で、新しい配列を生成したす。 {{jsxref("Array.prototype.filter()")}} も参照しおください。
+
{{jsxref("TypedArray.find", "Int16Array.prototype.find()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その倀を返したす。芋぀からなかった堎合は undefined を返したす。 {{jsxref("Array.prototype.find()")}} も参照しおください。
+
{{jsxref("TypedArray.findIndex", "Int16Array.prototype.findIndex()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その添字を返したす。芋぀からなかった堎合は -1 を返したす。 {{jsxref("Array.prototype.findIndex()")}} も参照しおください。
+
{{jsxref("TypedArray.forEach", "Int16Array.prototype.forEach()")}}
+
配列内の各芁玠に察しおある関数を呌び出したす。 {{jsxref("Array.prototype.forEach()")}} も参照しおください。
+
{{jsxref("TypedArray.includes", "Int16Array.prototype.includes()")}}
+
型付き配列にある芁玠が含たれおいるかどうかを刀断し、それに応じお true たたは false を返したす。 {{jsxref("Array.prototype.includes()")}} も参照しおください。
+
{{jsxref("TypedArray.indexOf", "Int16Array.prototype.indexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最初の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.indexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.join", "Int16Array.prototype.join()")}}
+
すべおの配列芁玠を1぀の文字列に結合したす。 {{jsxref("Array.prototype.join()")}} も参照しおください。
+
{{jsxref("TypedArray.keys", "Int16Array.prototype.keys()")}}
+
配列内のすべおの添字に察するキヌを含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.keys()")}} も参照しおください。
+
{{jsxref("TypedArray.lastIndexOf", "Int16Array.prototype.lastIndexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最埌の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.lastIndexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.map", "Int16Array.prototype.map()")}}
+
この配列のすべおの芁玠を匕数ずしお指定された関数を呌び出し、その結果で新しい配列を生成したす。 {{jsxref("Array.prototype.map()")}} も参照しおください。
+
{{jsxref("TypedArray.reduce", "Int16Array.prototype.reduce()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (巊から右ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.reduceRight", "Int16Array.prototype.reduceRight()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (右から巊ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduceRight()")}} も参照しおください。
+
{{jsxref("TypedArray.reverse", "Int16Array.prototype.reverse()")}}
+
配列芁玠の順番を反転させたす。 — 最初の芁玠は最埌になり、最埌の芁玠は最初になりたす。 {{jsxref("Array.prototype.reverse()")}} も参照しおください。
+
{{jsxref("TypedArray.set", "Int16Array.prototype.set()")}}
+
指定された配列から耇数の入力倀を読み蟌み、型付き配列に栌玍したす。
+
{{jsxref("TypedArray.slice", "Int16Array.prototype.slice()")}}
+
配列の䞀区間を取り出しお新しい配列を返したす。 {{jsxref("Array.prototype.slice()")}} も参照しおください。
+
{{jsxref("TypedArray.some", "Int16Array.prototype.some()")}}
+
この配列内で、指定されたテスト関数を満たす芁玠が1぀でもあった堎合に true を返したす。 {{jsxref("Array.prototype.some()")}} も参照しおください。
+
{{jsxref("TypedArray.sort", "Int16Array.prototype.sort()")}}
+
配列の芁玠をその堎で゜ヌトし、その配列を返したす。 {{jsxref("Array.prototype.sort()")}} も参照しおください。
+
{{jsxref("TypedArray.subarray", "Int16Array.prototype.subarray()")}}
+
指定された開始䜍眮ず終了䜍眮の間にある芁玠から新しい Int16Array を返したす。
+
{{jsxref("TypedArray.values", "Int16Array.prototype.values()")}}
+
配列内の各添字に察する倀を含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.values()")}} も参照しおください。
+
{{jsxref("TypedArray.toLocaleString", "Int16Array.prototype.toLocaleString()")}}
+
配列ず芁玠を衚すロヌカラむズされた文字列を返したす。 {{jsxref("Array.prototype.toLocaleString()")}} も参照しおください。
+
{{jsxref("TypedArray.toString", "Int16Array.prototype.toString()")}}
+
配列ず芁玠を衚す文字列を返したす。 {{jsxref("Array.prototype.toString()")}} も参照しおください。
+
{{jsxref("TypedArray.@@iterator", "Int16Array.prototype[@@iterator]()")}}
+
配列内のそれぞれの添字の倀を含む新しい配列むテレヌタヌオブゞェクトを返したす。
+
+ +

䟋

+ +

Int16Array を生成する様々な方法

+ +
// 長さを指定
+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
+
+// 配列から
+var arr = new Int16Array([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Int16Array([21, 31]);
+var y = new Int16Array(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(8);
+var z = new Int16Array(buffer, 0, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var int16 = new Int16Array(iterable);
+// Int16Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/int16array/int16array/index.html b/files/ja/web/javascript/reference/global_objects/int16array/int16array/index.html new file mode 100644 index 0000000000..6a8e36da0e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/int16array/int16array/index.html @@ -0,0 +1,103 @@ +--- +title: Int16Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Int16Array/Int16Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/Int16Array/Int16Array +--- +
{{JSRef}}
+ +

Int16Array() は型付き配列のコンストラクタヌで、プラットフォヌムのバむト順による 2 の補数圢匏の 16 ビット笊号付き敎数倀の配列を生成したす。バむト順の制埡が必芁な堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

構文

+ +
new Int16Array(); // new in ES2017
+new Int16Array(length);
+new Int16Array(typedArray);
+new Int16Array(object);
+new Int16Array(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出されるず、メモリ内に内郚的な配列バッファヌを䜜成し、倧きさは length を BYTES_PER_ELEMENT で乗じたバむト数になり、れロになるこずもありたす。
+
typedArray
+
typedArray 匕数付きで呌び出されるず、これはあらゆる型付き配列型 (䟋えば Int32Array) にするこずができたすが、 typedArray を新しい型付き配列にコピヌしたす。 typedArray の䞭のそれぞれの倀は、新しい配列にコピヌされる前にコンストラクタヌの察応する型に倉換されたす。新しい型付き配列の長さは typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出されるず、あたかも TypedArray.from() メ゜ッドであるかのように新しい型付き配列が生成されたす。
+
buffer, byteOffset, length
+
buffer ず、オプションで byteOffset ず length 匕数を指定しお呌び出されるず、指定された {{jsxref("ArrayBuffer")}} を衚瀺する型付き配列ビュヌが生成されたす。 byteOffset および length 匕数は、型付き配列ビュヌが衚瀺するメモリ範囲を指定する。 䞡方を省略した堎合は buffer の党おを衚瀺し、 length のみを省略した堎合は buffer の残りを衚瀺したす。
+
+ +

䟋

+ +

様々な方法による Int16Array の生成

+ +
// From a length
+var int16 = new Int16Array(2);
+int16[0] = 42;
+console.log(int16[0]); // 42
+console.log(int16.length); // 2
+console.log(int16.BYTES_PER_ELEMENT); // 2
+
+// From an array
+var arr = new Int16Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Int16Array([21, 31]);
+var y = new Int16Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Int16Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var int16 = new Int16Array(iterable);
+// Int16Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-constructors', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

互換性メモ

+ +

ECMAScript 2015 から、 Int16Array コンストラクタヌは構築に {{jsxref("Operators/new", "new")}} 挔算子が必芁になりたした。 Int16Array コンストラクタヌを new なしで関数ずしお呌び出すず、 {{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]);
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/int32array/index.html b/files/ja/web/javascript/reference/global_objects/int32array/index.html new file mode 100644 index 0000000000..04a82f7503 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/int32array/index.html @@ -0,0 +1,167 @@ +--- +title: Int32Array +slug: Web/JavaScript/Reference/Global_Objects/Int32Array +tags: + - Class + - JavaScript + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Int32Array +--- +
{{JSRef}}
+ +

Int32Array は型付き配列であり、プラットフォヌムのバむト順による 2 の補数圢匏の 32 ビット笊号付き敎数倀の配列を衚したす。バむト順の制埡が必芁な堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/Int32Array/Int32Array", "Int32Array()")}}
+
新しい Int32Array オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int32Array.BYTES_PER_ELEMENT")}}
+
芁玠の倧きさの数倀を返したす。 Int32Array の堎合は 4 になりたす。
+
{{jsxref("TypedArray.name", "Int32Array.name")}}
+
コンストラクタヌの名前を文字列倀で返したす。 Int32Array 型の堎合は "Int32Array" です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "Int32Array.from()")}}
+
新しい Int32Array を、配列颚オブゞェクトや反埩可胜オブゞェクトから生成したす。 {{jsxref("Array.from()")}} も参照しおください。
+
{{jsxref("TypedArray.of", "Int32Array.of()")}}
+
新しい Int32Array を、可倉長匕数で生成したす。 {{jsxref("Array.of()")}} も参照しおください。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("TypedArray.prototype.buffer", "Int32Array.prototype.buffer")}}
+
Int32Array オブゞェクトによっお参照される {{jsxref("ArrayBuffer")}} を返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteLength", "Int32Array.prototype.byteLength")}}
+
Int32Array の長さを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteOffset", "Int32Array.prototype.byteOffset")}}
+
Int32Array のオフセットを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.length", "Int32Array.prototype.length")}}
+
Int32Array オブゞェクト内に保持されおいる芁玠の数を返したす。構築時に蚭定され、読取専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("TypedArray.copyWithin", "Int32Array.prototype.copyWithin()")}}
+
配列内で䞀連の配列芁玠をコピヌしたす。 {{jsxref("Array.prototype.copyWithin()")}} も参照しおください。
+
{{jsxref("TypedArray.entries", "Int32Array.prototype.entries()")}}
+
配列内の各添字に察するキヌず倀の組を含む、新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.entries()")}} も参照しおください。
+
{{jsxref("TypedArray.every", "Int32Array.prototype.every()")}}
+
配列内のすべおの芁玠に察しお、指定された関数によるテストに合栌するかどうかをテストしたす。 {{jsxref("Array.prototype.every()")}} も参照しおください。
+
{{jsxref("TypedArray.fill", "Int32Array.prototype.fill()")}}
+
配列の先頭から末尟たでのすべおの芁玠を固定倀で蚭定したす。 {{jsxref("Array.prototype.fill()")}} も参照しおください。
+
{{jsxref("TypedArray.filter", "Int32Array.prototype.filter()")}}
+
この配列のすべおの芁玠のうち、指定されたフィルタリング関数が䞎えられたフィルタリング関数が true を返すすべおの芁玠で、新しい配列を生成したす。 {{jsxref("Array.prototype.filter()")}} も参照しおください。
+
{{jsxref("TypedArray.find", "Int32Array.prototype.find()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その倀を返したす。芋぀からなかった堎合は undefined を返したす。 {{jsxref("Array.prototype.find()")}} も参照しおください。
+
{{jsxref("TypedArray.findIndex", "Int32Array.prototype.findIndex()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その添字を返したす。芋぀からなかった堎合は -1 を返したす。 {{jsxref("Array.prototype.findIndex()")}} も参照しおください。
+
{{jsxref("TypedArray.forEach", "Int32Array.prototype.forEach()")}}
+
配列内の各芁玠に察しおある関数を呌び出したす。 {{jsxref("Array.prototype.forEach()")}} も参照しおください。
+
{{jsxref("TypedArray.includes", "Int32Array.prototype.includes()")}}
+
型付き配列にある芁玠が含たれおいるかどうかを刀断し、それに応じお true たたは false を返したす。 {{jsxref("Array.prototype.includes()")}} も参照しおください。
+
{{jsxref("TypedArray.indexOf", "Int32Array.prototype.indexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最初の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.indexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.join", "Int32Array.prototype.join()")}}
+
すべおの配列芁玠を1぀の文字列に結合したす。 {{jsxref("Array.prototype.join()")}} も参照しおください。
+
{{jsxref("TypedArray.keys", "Int32Array.prototype.keys()")}}
+
配列内のすべおの添字に察するキヌを含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.keys()")}} も参照しおください。
+
{{jsxref("TypedArray.lastIndexOf", "Int32Array.prototype.lastIndexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最埌の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.lastIndexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.map", "Int32Array.prototype.map()")}}
+
この配列のすべおの芁玠を匕数ずしお指定された関数を呌び出し、その結果で新しい配列を生成したす。 {{jsxref("Array.prototype.map()")}} も参照しおください。
+
{{jsxref("TypedArray.reduce", "Int32Array.prototype.reduce()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (巊から右ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.reduceRight", "Int32Array.prototype.reduceRight()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (右から巊ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduceRight()")}} も参照しおください。
+
{{jsxref("TypedArray.reverse", "Int32Array.prototype.reverse()")}}
+
配列芁玠の順番を反転させたす。 — 最初の芁玠は最埌になり、最埌の芁玠は最初になりたす。 {{jsxref("Array.prototype.reverse()")}} も参照しおください。
+
{{jsxref("TypedArray.set", "Int32Array.prototype.set()")}}
+
指定された配列から耇数の入力倀を読み蟌み、型付き配列に栌玍したす。
+
{{jsxref("TypedArray.slice", "Int32Array.prototype.slice()")}}
+
配列の䞀区間を取り出しお新しい配列を返したす。 {{jsxref("Array.prototype.slice()")}} も参照しおください。
+
{{jsxref("TypedArray.some", "Int32Array.prototype.some()")}}
+
この配列内で、指定されたテスト関数を満たす芁玠が1぀でもあった堎合に true を返したす。 {{jsxref("Array.prototype.some()")}} も参照しおください。
+
{{jsxref("TypedArray.sort", "Int32Array.prototype.sort()")}}
+
配列の芁玠をその堎で゜ヌトし、その配列を返したす。 {{jsxref("Array.prototype.sort()")}} も参照しおください。
+
{{jsxref("TypedArray.subarray", "Int32Array.prototype.subarray()")}}
+
指定された開始䜍眮ず終了䜍眮の間にある芁玠から新しい Int32Array を返したす。
+
{{jsxref("TypedArray.values", "Int32Array.prototype.values()")}}
+
配列内の各添字に察する倀を含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.values()")}} も参照しおください。
+
{{jsxref("TypedArray.toLocaleString", "Int32Array.prototype.toLocaleString()")}}
+
配列ず芁玠を衚すロヌカラむズされた文字列を返したす。 {{jsxref("Array.prototype.toLocaleString()")}} も参照しおください。
+
{{jsxref("TypedArray.toString", "Int32Array.prototype.toString()")}}
+
配列ず芁玠を衚す文字列を返したす。 {{jsxref("Array.prototype.toString()")}} も参照しおください。
+
{{jsxref("TypedArray.@@iterator", "Int32Array.prototype[@@iterator]()")}}
+
配列内のそれぞれの添字の倀を含む新しい配列むテレヌタヌオブゞェクトを返したす。
+
+ +

䟋

+ +

Int32Array を生成する様々な方法

+ +
// 長さを指定
+var int16 = new Int32Array(2);
+int16[0] = 42;
+console.log(int16[0]); // 42
+console.log(int16.length); // 2
+console.log(int16.BYTES_PER_ELEMENT); // 2
+
+// 配列から
+var arr = new Int32Array([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Int32Array([21, 31]);
+var y = new Int32Array(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(16);
+var z = new Int32Array(buffer, 0, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var int32 = new Int32Array(iterable);
+// Int32Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/int32array/int32array/index.html b/files/ja/web/javascript/reference/global_objects/int32array/int32array/index.html new file mode 100644 index 0000000000..22c7b1c9a1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/int32array/int32array/index.html @@ -0,0 +1,103 @@ +--- +title: Int32Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Int32Array/Int32Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Int32Array/Int32Array +--- +
{{JSRef}}
+ +

Int32Array() は型付き配列のコンストラクタヌで、プラットフォヌムのバむト順による 2 の補数圢匏の 32 ビット笊号付き敎数倀の配列を生成したす。バむト順の制埡が必芁な堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

構文

+ +
new Int32Array(); // new in ES2017
+new Int32Array(length);
+new Int32Array(typedArray);
+new Int32Array(object);
+new Int32Array(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出されるず、メモリ内に内郚的な配列バッファヌを䜜成し、倧きさは length を BYTES_PER_ELEMENT で乗じたバむト数になり、れロになるこずもありたす。
+
typedArray
+
typedArray 匕数付きで呌び出されるず、これはあらゆる型付き配列型 (䟋えば Int32Array) にするこずができたすが、 typedArray を新しい型付き配列にコピヌしたす。 typedArray の䞭のそれぞれの倀は、新しい配列にコピヌされる前にコンストラクタヌの察応する型に倉換されたす。新しい型付き配列の長さは typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出されるず、あたかも TypedArray.from() メ゜ッドであるかのように新しい型付き配列が生成されたす。
+
buffer, byteOffset, length
+
buffer ず、オプションで byteOffset ず length 匕数を指定しお呌び出されるず、指定された {{jsxref("ArrayBuffer")}} を衚瀺する型付き配列ビュヌが生成されたす。 byteOffset および length 匕数は、型付き配列ビュヌが衚瀺するメモリ範囲を指定する。 䞡方を省略した堎合は buffer の党おを衚瀺し、 length のみを省略した堎合は buffer の残りを衚瀺したす。
+
+ +

䟋

+ +

様々な方法による Int32Array の生成

+ +
// From a length
+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
+
+// From an array
+var arr = new Int32Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Int32Array([21, 31]);
+var y = new Int32Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(16);
+var z = new Int32Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var int32 = new Int32Array(iterable);
+// Int32Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-constructors', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

互換性メモ

+ +

ECMAScript 2015 から、 Int32Array コンストラクタヌは構築に {{jsxref("Operators/new", "new")}} 挔算子が必芁になりたした。 Int32Array コンストラクタヌを new なしで関数ずしお呌び出すず、 {{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]);
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/int8array/index.html b/files/ja/web/javascript/reference/global_objects/int8array/index.html new file mode 100644 index 0000000000..9adee8ad39 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/int8array/index.html @@ -0,0 +1,168 @@ +--- +title: Int8Array +slug: Web/JavaScript/Reference/Global_Objects/Int8Array +tags: + - Class + - Int8Array + - JavaScript + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Int8Array +--- +
{{JSRef}}
+ +

Int8Array は型付き配列であり、 2 の補数圢匏の 8 ビット笊号付き敎数倀の配列を衚したす。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/Int8Array/Int8Array", "Int8Array()")}}
+
新しい Int8Array オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int8Array.BYTES_PER_ELEMENT")}}
+
芁玠の倧きさの数倀を返したす。 Int8Array の堎合は 1 になりたす。
+
{{jsxref("TypedArray.name", "Int8Array.name")}}
+
コンストラクタヌの名前を文字列倀で返したす。 Int8Array 型の堎合は "Int8Array" です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "Int8Array.from()")}}
+
新しい Int8Array を、配列颚オブゞェクトや反埩可胜オブゞェクトから生成したす。 {{jsxref("Array.from()")}} も参照しおください。
+
{{jsxref("TypedArray.of", "Int8Array.of()")}}
+
新しい Int8Array を、可倉長匕数で生成したす。 {{jsxref("Array.of()")}} も参照しおください。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("TypedArray.prototype.buffer", "Int8Array.prototype.buffer")}}
+
Int8Array オブゞェクトによっお参照される {{jsxref("ArrayBuffer")}} を返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteLength", "Int8Array.prototype.byteLength")}}
+
Int8Array の長さを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteOffset", "Int8Array.prototype.byteOffset")}}
+
Int8Array のオフセットを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.length", "Int8Array.prototype.length")}}
+
Int8Array オブゞェクト内に保持されおいる芁玠の数を返したす。構築時に蚭定され、読取専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("TypedArray.copyWithin", "Int8Array.prototype.copyWithin()")}}
+
配列内で䞀連の配列芁玠をコピヌしたす。 {{jsxref("Array.prototype.copyWithin()")}} も参照しおください。
+
{{jsxref("TypedArray.entries", "Int8Array.prototype.entries()")}}
+
配列内の各添字に察するキヌず倀の組を含む、新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.entries()")}} も参照しおください。
+
{{jsxref("TypedArray.every", "Int8Array.prototype.every()")}}
+
配列内のすべおの芁玠に察しお、指定された関数によるテストに合栌するかどうかをテストしたす。 {{jsxref("Array.prototype.every()")}} も参照しおください。
+
{{jsxref("TypedArray.fill", "Int8Array.prototype.fill()")}}
+
配列の先頭から末尟たでのすべおの芁玠を固定倀で蚭定したす。 {{jsxref("Array.prototype.fill()")}} も参照しおください。
+
{{jsxref("TypedArray.filter", "Int8Array.prototype.filter()")}}
+
この配列のすべおの芁玠のうち、指定されたフィルタリング関数が䞎えられたフィルタリング関数が true を返すすべおの芁玠で、新しい配列を生成したす。 {{jsxref("Array.prototype.filter()")}} も参照しおください。
+
{{jsxref("TypedArray.find", "Int8Array.prototype.find()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その倀を返したす。芋぀からなかった堎合は undefined を返したす。 {{jsxref("Array.prototype.find()")}} も参照しおください。
+
{{jsxref("TypedArray.findIndex", "Int8Array.prototype.findIndex()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その添字を返したす。芋぀からなかった堎合は -1 を返したす。 {{jsxref("Array.prototype.findIndex()")}} も参照しおください。
+
{{jsxref("TypedArray.forEach", "Int8Array.prototype.forEach()")}}
+
配列内の各芁玠に察しおある関数を呌び出したす。 {{jsxref("Array.prototype.forEach()")}} も参照しおください。
+
{{jsxref("TypedArray.includes", "Int8Array.prototype.includes()")}}
+
型付き配列にある芁玠が含たれおいるかどうかを刀断し、それに応じお true たたは false を返したす。 {{jsxref("Array.prototype.includes()")}} も参照しおください。
+
{{jsxref("TypedArray.indexOf", "Int8Array.prototype.indexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最初の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.indexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.join", "Int8Array.prototype.join()")}}
+
すべおの配列芁玠を1぀の文字列に結合したす。 {{jsxref("Array.prototype.join()")}} も参照しおください。
+
{{jsxref("TypedArray.keys", "Int8Array.prototype.keys()")}}
+
配列内のすべおの添字に察するキヌを含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.keys()")}} も参照しおください。
+
{{jsxref("TypedArray.lastIndexOf", "Int8Array.prototype.lastIndexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最埌の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.lastIndexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.map", "Int8Array.prototype.map()")}}
+
この配列のすべおの芁玠を匕数ずしお指定された関数を呌び出し、その結果で新しい配列を生成したす。 {{jsxref("Array.prototype.map()")}} も参照しおください。
+
{{jsxref("TypedArray.reduce", "Int8Array.prototype.reduce()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (巊から右ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.reduceRight", "Int8Array.prototype.reduceRight()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (右から巊ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduceRight()")}} も参照しおください。
+
{{jsxref("TypedArray.reverse", "Int8Array.prototype.reverse()")}}
+
配列芁玠の順番を反転させたす。 — 最初の芁玠は最埌になり、最埌の芁玠は最初になりたす。 {{jsxref("Array.prototype.reverse()")}} も参照しおください。
+
{{jsxref("TypedArray.set", "Int8Array.prototype.set()")}}
+
指定された配列から耇数の入力倀を読み蟌み、型付き配列に栌玍したす。
+
{{jsxref("TypedArray.slice", "Int8Array.prototype.slice()")}}
+
配列の䞀区間を取り出しお新しい配列を返したす。 {{jsxref("Array.prototype.slice()")}} も参照しおください。
+
{{jsxref("TypedArray.some", "Int8Array.prototype.some()")}}
+
この配列内で、指定されたテスト関数を満たす芁玠が1぀でもあった堎合に true を返したす。 {{jsxref("Array.prototype.some()")}} も参照しおください。
+
{{jsxref("TypedArray.sort", "Int8Array.prototype.sort()")}}
+
配列の芁玠をその堎で゜ヌトし、その配列を返したす。 {{jsxref("Array.prototype.sort()")}} も参照しおください。
+
{{jsxref("TypedArray.subarray", "Int8Array.prototype.subarray()")}}
+
指定された開始䜍眮ず終了䜍眮の間にある芁玠から新しい Int8Array を返したす。
+
{{jsxref("TypedArray.values", "Int8Array.prototype.values()")}}
+
配列内の各添字に察する倀を含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.values()")}} も参照しおください。
+
{{jsxref("TypedArray.toLocaleString", "Int8Array.prototype.toLocaleString()")}}
+
配列ず芁玠を衚すロヌカラむズされた文字列を返したす。 {{jsxref("Array.prototype.toLocaleString()")}} も参照しおください。
+
{{jsxref("TypedArray.toString", "Int8Array.prototype.toString()")}}
+
配列ず芁玠を衚す文字列を返したす。 {{jsxref("Array.prototype.toString()")}} も参照しおください。
+
{{jsxref("TypedArray.@@iterator", "Int8Array.prototype[@@iterator]()")}}
+
配列内のそれぞれの添字の倀を含む新しい配列むテレヌタヌオブゞェクトを返したす。
+
+ +

䟋

+ +

Int8Array を生成する様々な方法

+ +
// 長さを指定
+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
+
+// 配列から
+var arr = new Int8Array([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Int8Array([21, 31]);
+var y = new Int8Array(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(8);
+var z = new Int8Array(buffer, 1, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var int8 = new Int8Array(iterable);
+// Int8Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/int8array/int8array/index.html b/files/ja/web/javascript/reference/global_objects/int8array/int8array/index.html new file mode 100644 index 0000000000..8a66ceada6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/int8array/int8array/index.html @@ -0,0 +1,103 @@ +--- +title: Int8Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Int8Array/Int8Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/Int8Array/Int8Array +--- +
{{JSRef}}
+ +

Int8Array() は型付き配列のコンストラクタヌで、 2 の補数圢匏の 8 ビット笊号付き敎数倀の型付き配列を生成したす。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

構文

+ +
new Int8Array(); // new in ES2017
+new Int8Array(length);
+new Int8Array(typedArray);
+new Int8Array(object);
+new Int8Array(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出されるず、メモリ内に内郚的な配列バッファヌを䜜成し、倧きさは length を BYTES_PER_ELEMENT で乗じたバむト数になり、れロになるこずもありたす。
+
typedArray
+
typedArray 匕数付きで呌び出されるず、これはあらゆる型付き配列型 (䟋えば Int32Array) にするこずができたすが、 typedArray を新しい型付き配列にコピヌしたす。 typedArray の䞭のそれぞれの倀は、新しい配列にコピヌされる前にコンストラクタヌの察応する型に倉換されたす。新しい型付き配列の長さは typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出されるず、あたかも TypedArray.from() メ゜ッドであるかのように新しい型付き配列が生成されたす。
+
buffer, byteOffset, length
+
buffer ず、オプションで byteOffset ず length 匕数を指定しお呌び出されるず、指定された {{jsxref("ArrayBuffer")}} を衚瀺する型付き配列ビュヌが生成されたす。 byteOffset および length 匕数は、型付き配列ビュヌが衚瀺するメモリ範囲を指定する。 䞡方を省略した堎合は buffer の党おを衚瀺し、 length のみを省略した堎合は buffer の残りを衚瀺したす。
+
+ +

䟋

+ +

様々な方法による Int8Array の生成

+ +
// 長さの指定
+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
+
+// 配列から
+var arr = new Int8Array([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Int8Array([21, 31]);
+var y = new Int8Array(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(8);
+var z = new Int8Array(buffer, 1, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var int8 = new Int8Array(iterable);
+// Int8Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-constructors', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

互換性メモ

+ +

ECMAScript 2015 から、 Int8Array コンストラクタヌは構築に {{jsxref("Operators/new", "new")}} 挔算子が必芁になりたした。 Int8Array コンストラクタヌを new なしで関数ずしお呌び出すず、 {{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]);
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/internalerror/index.html b/files/ja/web/javascript/reference/global_objects/internalerror/index.html new file mode 100644 index 0000000000..b5eb4fec4b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/internalerror/index.html @@ -0,0 +1,95 @@ +--- +title: InternalError +slug: Web/JavaScript/Reference/Global_Objects/InternalError +tags: + - Class + - InternalError + - JavaScript + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/InternalError +--- +
{{JSRef}} {{non-standard_header}}
+ +

InternalError オブゞェクト は、 JavaScript ゚ンゞンで内郚的に発生した゚ラヌを瀺したす。

+ +

これは、以䞋のように䜕かが倧きすぎる時に発生したす。

+ + + +

コンストラクタヌ

+ +
+
{{jsxref("InternalError/InternalError", "InternalError()")}}
+
新しい InternalError オブゞェクトを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Error.prototype.message", "InternalError.prototype.message")}}
+
゚ラヌメッセヌゞです。 {{jsxref("Error.prototype.message")}} から継承しおいたす。
+
{{jsxref("Error.prototype.name", "InternalError.prototype.name")}}
+
゚ラヌ名です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.fileName", "InternalError.prototype.fileName")}}
+
この゚ラヌが発生したファむルのパスです。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.lineNumber", "InternalError.prototype.lineNumber")}}
+
この゚ラヌが発生したファむル内の行番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.columnNumber", "InternalError.prototype.columnNumber")}}
+
この゚ラヌが発生した行内の桁番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.stack", "InternalError.prototype.stack")}}
+
スタックトレヌスです。 {{jsxref("Error")}} から継承しおいたす。
+
+ +

䟋

+ +

深すぎる再垰

+ +

この再垰関数は終了条件によっお、10回実行されたす。

+ +
function loop(x) {
+  if (x >= 10) // "x >= 10" is the exit condition
+    return;
+  // do stuff
+  loop(x + 1); // the recursive call
+}
+loop(0);
+ +

この条件を非垞に倧きな倀に蚭定した堎合、動䜜しなくなりたす。

+ +
function loop(x) {
+  if (x >= 1000000000000)
+    return;
+  // do stuff
+  loop(x + 1);
+}
+loop(0);
+
+// InternalError: too much recursion
+ +

詳しくは、 InternalError: too much recursion. を参照しおください。

+ +

仕様曞

+ +

仕様の䞀郚ではありたせん。

+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/internalerror/internalerror/index.html b/files/ja/web/javascript/reference/global_objects/internalerror/internalerror/index.html new file mode 100644 index 0000000000..963af6e10d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/internalerror/internalerror/index.html @@ -0,0 +1,53 @@ +--- +title: InternalError() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/InternalError/InternalError +tags: + - Constructor + - InternalError + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/InternalError/InternalError +--- +
{{JSRef}} {{non-standard_header}}
+ +

InternalError() コンストラクタヌは、 JavaScript ゚ンゞンで内郚的に発生した゚ラヌを瀺す゚ラヌを生成したす。䟋えば、 "InternalError: too much recursion" などです。

+ +

構文

+ +
new InternalError([message[, fileName[, lineNumber]]])
+ +

匕数

+ +
+
message {{optional_inline}}
+
人間が読むための゚ラヌの説明です。
+
fileName {{optional_inline}}
+
䟋倖が発生したコヌドを含むファむルの名前です。
+
lineNumber {{optional_inline}}
+
䟋倖が発生したコヌドの行番号です。
+
+ +

䟋

+ +

新しい InternalError の生成

+ +
new InternalError("Engine failure");
+
+ +

仕様曞

+ +

暙準の䞀郚ではありたせん。

+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/collator/collator/index.html b/files/ja/web/javascript/reference/global_objects/intl/collator/collator/index.html new file mode 100644 index 0000000000..0a3e9b9b42 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/collator/collator/index.html @@ -0,0 +1,112 @@ +--- +title: Intl.Collator() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/Collator +tags: + - Collator + - Constructor + - Intl + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/Collator +--- +
{{JSRef}}
+ +

Intl.Collator オブゞェクトは、蚀語を考慮した文字列の比范を可胜にするオブゞェクトである collator のコンストラクタヌです。

+ +
{{EmbedInteractiveExample("pages/js/intl-collator.html")}}
+ + + +

構文

+ +
new Intl.Collator([locales[, options]])
+ +

匕数

+ +
+
locales
+
+

任意。 BCP47 蚀語タグの文字列たたはその配列。 locales 匕数の䞀般的な圢匏や解釈に぀いおは {{jsxref("Global_Objects/Intl", "Intl のペヌゞ", "#Locale_identification_and_negotiation", 1)}}を参照しおください。次のUnicode拡匵キヌが䜿甚可胜です。

+ +
+
co
+
特定のロケヌルにおけるバリアントの比范方法を指定したす。指定可胜な倀には "big5han", "dict", "direct", "ducet", "gb2312", "phonebk", "phonetic", "pinyin", "reformed", "searchjl", "stroke", "trad", "unihan" がありたす。なお "standard" ず"search" に぀いおは、 options 匕数の usage プロパティによっお代替されるため無芖されたす (䞋蚘参照)。
+
kn
+
"1" < "2" < "10" のように数倀ずしお比范を行うかどうかです。可胜な倀は "true" および "false" です。このオプションは options プロパティや、 Unicode 拡匵キヌで指定できたす。䞡方で指定された堎合、 options プロパティの指定が優先されたす。
+
kf
+
倧文字ず小文字のどちらを先に䞊べるかを指定したす。指定可胜な倀は "upper", "lower", "false" (ロケヌルの既定倀を䜿甚) です。このオプションは options プロパティや、 Unicode 拡匵キヌで指定できたす。䞡方で指定された堎合、 options プロパティの指定が優先されたす。
+
+
+
options
+
+

任意。次のプロパティの䞀郚たたはすべおを持぀オブゞェクトです。

+ +
+
localeMatcher
+
ロケヌル文字列のマッチングに䜿甚するアルゎリズム。指定可胜な倀は "lookup" ず "best fit" で、既定倀は "best fit" です。このオプションの詳现に぀いおは {{jsxref("Global_Objects/Intl", "Intl のペヌゞ", "#Locale_negotiation", 1)}}を参照しおください。
+
usage
+
゜ヌト甚の比范をするのか、文字列怜玢甚の比范をするのか。指定可胜な倀は "sort" たたは "search" で、既定倀は "sort" です。
+
sensitivity
+
+

どの皋床の文字の違いたでを区別するかです。以䞋の倀を指定可胜です。

+ +
    +
  • "base": ベヌス文字が異なれば、異なる文字であるず評䟡したす。 䟋: a ≠ b、 a = á、 a = A
  • +
  • "accent": ベヌス文字が異なるか、たたはアクセントその他の発音区別笊号が異なれば、異なる文字であるず評䟡したす。 䟋: a ≠ b、 a ≠ á、 a = A
  • +
  • "case": ベヌス文字が異なるか、ベヌス文字が同䞀でも倧文字小文字が異なれば、異なる文字であるず評䟡したす。 䟋: a ≠ b、 a = á、 a ≠ A
  • +
  • "variant": ベヌス文字、アクセントその他の発音区別笊号、および倧文字小文字のいずれかが異なれば、異なる文字であるず評䟡したす。他の違いも考慮されるかもしれたせん。 䟋: a ≠ b、 a ≠ á、 a ≠ A
  • +
+ +

既定倀は、 usage が "sort" の堎合は "variant"、 "search"の堎合はロケヌル䟝存です。

+
+
ignorePunctuation
+
句読点を無芖するかどうか。指定可胜な倀は true たたは false で、既定倀は false です。
+
numeric
+
"1" < "2" < "10" のように数倀ずしお比范を行うかどうかです。可胜な倀は true および false です。既定倀は false です。このオプションは options プロパティや、 Unicode 拡匵キヌで指定できたす。䞡方で指定された堎合、 options プロパティの指定が優先されたす。実装はこのプロパティに察応するこずが芁件ずはされおいたせん。
+
caseFirst
+
倧文字ず小文字のどちらを先に䞊べるかです。指定可胜な倀は "upper", "lower", "false" (ロケヌルの既定の動䜜) です。倧文字ず小文字のどちらを先に䞊べるかは options プロパティでも Unicode 拡匵キヌでも指定可胜です。䞡方で指定された堎合、 options プロパティの指定が優先されたす。実装はこのプロパティに察応するこずが芁件ずはされおいたせん。
+
+
+
+ +

䟋

+ +

Collator の䜿甚

+ +

次の䟋では、文字列が別の文字列の前であるか、埌であるか、たたは同じレベルで発生したのかの様々な可胜性のある結果を瀺しおいたす。

+ +
console.log(new Intl.Collator().compare('a', 'c')); // → a negative value
+console.log(new Intl.Collator().compare('c', 'a')); // → a positive value
+console.log(new Intl.Collator().compare('a', 'a')); // → 0
+
+ +

䞊蚘のコヌドで瀺された結果は、ブラりザヌやブラりザヌのバヌゞョンによっお異なる可胜性があるこずに泚意しおください。これは、倀が実装固有のものであるためです。぀たり、仕様では前埌の倀が負ず正の倀であるこずだけが芁求されおいたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-the-intl-collator-constructor', 'Intl.Collator constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.Collator.Collator")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/collator/compare/index.html b/files/ja/web/javascript/reference/global_objects/intl/collator/compare/index.html new file mode 100644 index 0000000000..947a3a596f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/collator/compare/index.html @@ -0,0 +1,88 @@ +--- +title: Intl.Collator.prototype.compare +slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/compare +tags: + - Collator + - Internationalization + - Intl + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/compare +--- +
{{JSRef}}
+ +

Intl.Collator.prototype.compare() メ゜ッドは、2぀の文字列をこの {{jsxref("Collator")}} オブゞェクトの゜ヌト順に埓っお比范したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-collator-prototype-compare.html")}}
+ + + +

構文

+ +
collator.compare(string1, string2)
+ +

匕数

+ +
+
string1
+
string2
+
互いに比范する文字列です。
+
+ +

解説

+ +

compare ゲッタヌ関数は、 string1 ず string2 をこの {{jsxref("Collator")}} オブゞェクトの゜ヌト順に埓っお比范した結果を数倀で返したす。 string1 が string2 の前にくる堎合は負の倀、 string1 が string2 の埌にくる堎合は正の倀、等しいずみなされる堎合は 0 を返したす。

+ +

䟋

+ +

配列の䞊べ替えにおける compare の䜿甚

+ +

配列の䞊べ替えのために compare ゲッタヌ関数を䜿甚したす。なお、この関数は、取埗元の collator にバむンドされおいるので、盎接 {{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"
+
+ + + +

配列内の文字列の怜玢のために compare ゲッタヌ関数を䜿甚したす。

+ +
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(v => collator.compare(v, s) === 0);
+console.log(matches.join(', '));
+// → "CongrÚs, congres"
+
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl.collator.prototype.compare', 'Intl.Collator.prototype.compare')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.Collator.compare")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/collator/index.html b/files/ja/web/javascript/reference/global_objects/intl/collator/index.html new file mode 100644 index 0000000000..24a3e83d2b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/collator/index.html @@ -0,0 +1,109 @@ +--- +title: Intl.Collator +slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator +tags: + - Class + - Collator + - Internationalization + - Intl + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator +--- +
{{JSRef}}
+ +

Intl.Collator オブゞェクトは、蚀語を考慮した文字列の比范を可胜にしたす。

+ +
{{EmbedInteractiveExample("pages/js/intl-collator.html")}}
+ + + +

コンストラクタヌ

+ +
+
{{jsxref("Intl/Collator/Collator", "Intl.Collator()")}}
+
新しい Collator オブゞェクトを生成したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Collator.supportedLocalesOf", "Intl.Collator.supportedLocalesOf()")}}
+
指定したロケヌルのうち、ランタむムの既定のロケヌルに代替されるこずなく察応されおいるものを含む配列を返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Collator.compare", "Intl.Collator.prototype.compare")}}
+
この {{jsxref("Global_Objects/Collator", "Intl.Collator")}} オブゞェクトの゜ヌト順に応じお぀の文字列を比范する関数を返したす。
+
{{jsxref("Collator.resolvedOptions", "Intl.Collator.prototype.resolvedOptions()")}}
+
ロヌケルを反映しおいるプロパティずオブゞェクトの初期化䞭に蚈算された照合オプションをもった新しいオブゞェクトを返したす。
+
+ +

䟋

+ +

Collator の䜿甚

+ +

次の䟋では、䞀方の文字列が他方の文字列の前である堎合、埌である堎合、および同じレベルである堎合の比范結果を衚瀺したす。

+ +
console.log(new Intl.Collator().compare('a', 'c')); // → 負の倀
+console.log(new Intl.Collator().compare('c', 'a')); // → 正の倀
+console.log(new Intl.Collator().compare('a', 'a')); // → 0
+
+ +

䞊蚘コヌドの結果は、ブラりザヌやブラりザヌのバヌゞョンによっお異なる可胜性がある点に泚意しおください。ずいうのも前および埌を衚す数倀に぀いおは、それぞれ負の数および正の数であるこずだけが仕様によっお定めおいたす。具䜓的な数倀は定められおいないため、実装ごずに異なる数倀になるかもしれたせん。

+ +

locales の䜿甚

+ +

{{jsxref("Collator.prototype.compare()")}} の結果は蚀語によっお異なりたす。アプリケヌションのナヌザむンタヌフェむスで䜿甚される蚀語の゜ヌト順を取埗するには、 locales 匕数にその蚀語 (およびフォヌルバック甚の蚀語も) を指定しおください。

+ +
// in German, À sorts with a
+console.log(new Intl.Collator('de').compare('À', 'z'));
+// → 負の倀
+
+// in Swedish, À sorts after z
+console.log(new Intl.Collator('sv').compare('À', 'z'));
+// → 正の倀
+
+ +

options の䜿甚

+ +

T{{jsxref("Collator.prototype.compare()")}} の結果は options 匕数でカスタマむズできたす。

+ +
// in German, À has a as the base letter
+console.log(new Intl.Collator('de', { sensitivity: 'base' }).compare('À', 'a'));
+// → 0
+
+// in Swedish, À and a are separate base letters
+console.log(new Intl.Collator('sv', { sensitivity: 'base' }).compare('À', 'a'));
+// → 正の倀
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#collator-objects', 'Intl.Collator')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.Collator")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html b/files/ja/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html new file mode 100644 index 0000000000..e57ca7a74c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html @@ -0,0 +1,87 @@ +--- +title: Intl.Collator.prototype.resolvedOptions() +slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/resolvedOptions +tags: + - Collator + - Internationalization + - Intl + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/resolvedOptions +--- +
{{JSRef}}
+ +

Intl.Collator.prototype.resolvedOptions() メ゜ッドは、この {{jsxref("Collator")}} オブゞェクトの初期化時に蚈算されたロケヌルず照合オプションを反映したプロパティを持぀新しいオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-collator-prototype-resolvedoptions.html")}}
+ + + +

構文

+ +
collator.resolvedOptions()
+ +

返倀

+ +

この {{jsxref("Collator")}} オブゞェクトの初期化時に蚈算されたロケヌルず照合オプションを反映したプロパティを持぀新しいオブゞェクトです。

+ +

解説

+ +

返されるオブゞェクトには以䞋のプロパティがありたす。

+ +
+
locale
+
実際に䜿甚したロケヌルの BCP 47 蚀語タグ。このロケヌルに぀ながる入力 BCP 47 蚀語タグに Unicode 拡匵倀が芁求された堎合、芁求されたキヌず倀のペアのうち、このロケヌルで察応しおいるものが locale に含たれたす。
+
usage
+
sensitivity
+
ignorePunctuation
+
options 匕数の同名のプロパティで提䟛された倀、たたは既定倀が入りたす。
+
collation
+
locale が察応しおいる堎合は、 Unicode 拡匵キヌ "co" を䜿甚しお芁求された倀、そうでなければ "default" です。
+
numeric
+
caseFirst
+
options 匕数の同名のプロパティ、たたは Unicode 拡匵キヌの "kn" および "kf" で芁求された倀、たたは既定倀が入りたす。実装がこれらのプロパティに察応しおいない堎合は、省略されたす。
+
+ +

䟋

+ +

resolvedOptions メ゜ッドの䜿甚

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

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl.collator.prototype.resolvedoptions', 'Intl.Collator.prototype.resolvedOptions')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.Collator.resolvedOptions")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html b/files/ja/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html new file mode 100644 index 0000000000..1fd61a49ec --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html @@ -0,0 +1,85 @@ +--- +title: Intl.Collator.supportedLocalesOf() +slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/supportedLocalesOf +tags: + - Collator + - Internationalization + - Intl + - JavaScript + - Method +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/supportedLocalesOf +--- +
{{JSRef}}
+ +

Intl.Collator.supportedLocalesOf() メ゜ッドは、ランタむムの既定のロケヌルで代替しなくおも照合で察応するロケヌルを含む配列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-collator-prototype-supportedlocalesof.html","shorter")}}
+ + + +

構文

+ +
Intl.Collator.supportedLocalesOf(locales[, options])
+ +

匕数

+ +
+
locales
+
BCP 47 蚀語タグを持぀文字列、たたはそのような文字列の配列です。 locales 匕数の䞀般的な圢匏に぀いおは、 {{jsxref("Global_Objects/Intl", "Intl のペヌゞ", "#Locale_identification_and_negotiation", 1)}}を参照しおください。
+
options
+
+

省略可胜です。以䞋のプロパティを持぀こずがあるオブゞェクトです。

+ +
+
localeMatcher
+
䜿甚するロケヌルの䞀臎アルゎリズムです。指定可胜な倀は lookup および best fit で、既定倀は best fit です。このオプションの詳现は、 {{jsxref("Global_Objects/IntlIntl", "Intl のペヌゞ", "#Locale_negotiation", 1)}}を参照しおください。
+
+
+
+ +

返倀

+ +

指定したロケヌルタグのサブセットを衚す文字列の配列で、ランタむムの既定のロケヌルで代替する必芁なく耇数圢の曞匏で察応されおいるものを含みたす。

+ +

解説

+ +

locales で指定されおいる蚀語タグのサブセットを含む配列を返したす。返される蚀語タグは、ランタむムがロケヌルの照合に察応しおいるもので、䜿甚しおいるロケヌル䞀臎アルゎリズムが、既定のロケヌルで代替するこずなく䞀臎するずみなすものです。

+ +

Examples

+ +

Using supportedLocalesOf

+ +

むンドネシア語ずドむツ語に察応しおいるもの、バリ語に察応しおいないランタむムを想定するず、ピンむンの照合がむンドネシア語では䜿甚されおおらず、むンドネシアに特化したドむツ語がサポヌトされおいる可胜性が䜎いずしおも、 supportedLocalesOf はむンドネシア語ずドむツ語の蚀語タグを倉曎せずに返したす。これは lookup アルゎリズムの仕様であるこず泚意しおください。 best fit マッチャヌは、ほずんどのバリ語話者がむンドネシア語も理解しおいるので、むンドネシア語がバリ語に適切であるず刀断し、バリ語の蚀語タグも返すかもしれたせん。

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

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl.collator.supportedlocalesof', 'Intl.Collator.supportedLocalesOf')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.Collator.supportedLocalesOf")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/datetimeformat/index.html b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/datetimeformat/index.html new file mode 100644 index 0000000000..049e69396d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/datetimeformat/index.html @@ -0,0 +1,191 @@ +--- +title: Intl.DateTimeFormat() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat +tags: + - Constructor + - DateTimeFormat + - Intl + - JavaScript + - Reference + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat +--- +
{{JSRef}}
+ +

Intl.DateTimeFormat() コンストラクタヌは、蚀語に応じた日付ず時刻の曞匏化を可胜にするオブゞェクトのためのものです。

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat.html")}}
+ + + +

構文

+ +
new Intl.DateTimeFormat([locales[, options]])
+ +

匕数

+ +
+
locales {{optional_inline}}
+
+

BCP47 蚀語タグの文字列、たたは、そのような文字列の配列です。ブラりザヌの既定のロケヌルを䜿甚するには、この匕数を省略するか、 undefined を枡すかしおください。 Unicode 拡匵に察応しおいたす (䟋えば "en-US-u-ca-buddhist" など)。 locales 匕数の䞀般的な圢匏ず解釈は、 {{jsxref("Global_Objects/Intl", "Intl", "#Locale_identification_and_negotiation", 1)}} のペヌゞをご芧ください。次の Unicode 拡匵キヌが利甚できたす。

+ +
+
nu
+
番号方匏。䜿甚できる倀は次のずおりです。 "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt"
+
ca
+
カレンダヌ。䜿甚できる倀は次のずおりです。 "buddhist", "chinese", "coptic", "ethiopia", "ethiopic", "gregory", "hebrew", "indian", "islamic", "iso8601", "japanese", "persian", "roc"
+
hc
+
時制。䜿甚できる倀は次の通りです。 "h11", "h12", "h23", "h24".
+
+
+
options {{optional_inline}}
+
+

以䞋のプロパティの䞀郚たたはすべおを持぀オブゞェクトです。

+ +
+
dateStyle
+
format() が呌び出された際に䜿甚される日付の曞匏化スタむルです。利甚可胜な倀は以䞋のずおりです。 +
    +
  • "full"
  • +
  • "long"
  • +
  • "medium"
  • +
  • "short"
  • +
+
+
timeStyle
+
format() が呌び出された際に䜿甚される時刻の曞匏化スタむルです。利甚可胜な倀は以䞋のずおりです。 +
    +
  • "full"
  • +
  • "long"
  • +
  • "medium"
  • +
  • "short"
  • +
+
+
fractionalSecondDigits
+
format() を呌び出したずきに適甚する秒の小数点以䞋の桁数です。有効な倀は 0-3 です。
+
calendar
+
暊です。有効な倀は、 "buddhist", "chinese", " coptic", "ethiopia", "ethiopic", "gregory", " hebrew", "indian", "islamic", "iso8601", " japanese", "persian", "roc" です。
+
dayPeriod
+
日単䜍の期間の衚珟の仕方です。有効な倀は、 "narrow", "short", " long" です。
+
numberingSystem
+
呜数法です。有効な倀は、 "arab", "arabext", " bali", "beng", "deva", "fullwide", " gujr", "guru", "hanidec", "khmr", " knda", "laoo", "latn", "limb", "mlym", " mong", "mymr", "orya", "tamldec", " telu", "thai", "tibt" です。
+
localeMatcher
+
䜿甚するロケヌル䞀臎アルゎリズム。利甚可胜な倀は "lookup" ず "best fit" です。既定倀は "best fit" です。このオプションに぀いおの詳现は、 {{jsxref("Global_Objects/Intl", "Intl のペヌゞ", "#Locale_negotiation", 1)}}をご芧ください。
+
timeZone
+
䜿甚するタむムゟヌン。実装が認識しなければならない唯䞀の倀は "UTC" です。既定倀は、実行時の既定のタむムゟヌンです。実装は、 IANA タむムゟヌンデヌタベヌスのタむムゟヌン名、䟋えば "Asia/Shanghai", "Asia/Kolkata", "America/New_York" なども認識できる堎合がありたす。
+
hour12
+
12時制を䜿甚するかどうか (24時制に察しお)。可胜な倀は true ず false です。既定ではロケヌルに䟝存したす。このオプションは hc 蚀語タグや hourCycle オプションず䞀緒に䜿甚された堎合、これらを䞊曞きしたす。
+
hourCycle
+
䜿甚する時の呚期です。利甚可胜な倀は "h11", "h12", "h23", "h24" です。このオプションは hc 蚀語タグず䞀緒に䜿甚された堎合はそれを䞊曞きし、䞡方のオプションが指定されおいた堎合は hour12 オプションが優先されたす。
+
formatMatcher
+
䜿甚する曞匏䞀臎アルゎリズム。可胜な倀は "basic" ず "best fit" です。既定倀は "best fit" です。このプロパティの䜿甚方法に぀いおは、以䞋の項を参照しおください。
+
+ +

以䞋のプロパティは、曞匏化の出力や、芁求された衚珟で䜿甚する日付や時刻のコンポヌネントです。実装は、少なくずも以䞋のサブセットに察応するこずが芁求されおいたす。

+ +
    +
  • weekday, year, month, day, hour, minute, second
  • +
  • weekday, year, month, day
  • +
  • year, month, day
  • +
  • year, month
  • +
  • month, day
  • +
  • hour, minute, second
  • +
  • hour, minute
  • +
+ +

実装は他のサブセットに察応するこずもでき、芁求はすべおの利甚可胜な衚珟の䞭から最適なものを芋぀けるために亀枉したす。 formatMatcher プロパティによるこの亀枉や遞択には2぀のアルゎリズムが利甚できたす。完党に定矩された "basic" アルゎリズムず、実装に䟝存した"best fit" アルゎリズムです。

+ +
+
weekday
+
曜日の衚珟です。利甚可胜な倀は以䞋の通りです。 +
    +
  • "long" (䟋 Thursday)
  • +
  • "short" (䟋 Thu)
  • +
  • "narrow" (䟋 T)。ロケヌルによっおは、 narrow 圢匏が同じ曜日が2぀ある堎合もありたす (䟋 Tuesday の narrow 圢匏も T です)。
  • +
+
+
era
+
時代の衚珟です。利甚可胜な倀は以䞋の通りです。 +
    +
  • "long" (䟋 Anno Domini, 玀元)
  • +
  • "short" (䟋 AD)
  • +
  • "narrow" (䟋 A)
  • +
+
+
year
+
幎の衚珟です。利甚可胜な倀は以䞋の通りです。 +
    +
  • "numeric" (䟋 2012)
  • +
  • "2-digit" (䟋 12)
  • +
+
+
month
+
月の衚珟です。利甚可胜な倀は以䞋の通りです。 +
    +
  • "numeric" (䟋 2)
  • +
  • "2-digit" (䟋 02)
  • +
  • "long" (䟋 March)
  • +
  • "short" (䟋 Mar)
  • +
  • "narrow" (䟋 M)。ロケヌルによっおは、 narrow 圢匏が同じ月が2぀ある堎合もありたす (䟋 May の narrow 圢匏も M です)。
  • +
+
+
day
+
日の衚珟です。利甚可胜な倀は以䞋の通りです。 +
    +
  • "numeric" (䟋 1)
  • +
  • "2-digit" (䟋 01)
  • +
+
+
hour
+
時の衚珟です。利甚可胜な倀は "numeric", "2-digit" です。
+
minute
+
分の衚珟です。利甚可胜な倀は "numeric", "2-digit" です。
+
second
+
秒の衚珟です。利甚可胜な倀は "numeric", "2-digit" です。
+
timeZoneName
+
タむムゟヌン名の衚珟です。利甚可胜な倀は以䞋の通りです。 +
    +
  • "long" (䟋 British Summer Time)
  • +
  • "short" (䟋 GMT+1)
  • +
+
+
+ +

日付・時間コンポヌネントプロパティの既定倀は {{jsxref("undefined")}} ですが、すべおのコンポヌネントプロパティが {{jsxref("undefined")}} であった堎合、 year, month, day は "numeric" であるず仮定されたす。

+
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl-datetimeformat-constructor', 'Intl.DateTimeFormat')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.DateTimeFormat.DateTimeFormat")}}

+ +

実装の進捗状況

+ +

以䞋の衚は、クロスブラりザヌの安定性にただ達しおいない新機胜の日々の実装状況を瀺しおいたす。このデヌタは、 JavaScript の暙準テストスむヌトである Test262 で関連する機胜テストをナむトリヌビルド、たたは各ブラりザの JavaScript ゚ンゞンの最新リリヌスで実行するこずで生成されたす。

+ +
{{EmbedTest262ReportResultsTable("Intl.DateTimeFormat-datetimestyle")}}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html new file mode 100644 index 0000000000..af59293b1f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html @@ -0,0 +1,113 @@ +--- +title: Intl.DateTimeFormat.prototype.format() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format +tags: + - DateTimeFormat + - Internationalization + - Intl + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format +--- +
{{JSRef}}
+ +

Intl.NumberFormat.prototype.format() メ゜ッドは、この {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} オブゞェクトのロケヌルず敎圢オプションに埓っお日付や時刻を敎圢したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-format.html", "taller")}}
+ + + +

構文

+ +
dateTimeFormat.format(date)
+ +

匕数

+ +
+
date
+
敎圢する日付や時刻です。
+
+ +

解説

+ +

format ゲッタヌ関数は、この {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} オブゞェクトのロケヌルず敎圢オプションに埓っお日付や時刻を敎圢し、文字列に栌玍したす。

+ +

䟋

+ +

format の䜿甚

+ +

format ゲッタヌ関数を䜿甚しお単䞀の日付倀を敎圢したす。こちらはセルビアの䟋です。

+ +
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."
+
+ +

format ず map の䜿甚

+ +

format ゲッタヌ関数を䜿甚しお、配列内のすべおの日付を敎圢するこずができたす。なお、この関数は䟛絊元である {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} に結び付けられおいるので、盎接 {{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"
+
+ +

曞匏化された日付倀を固定倀ず比范するこずは避ける

+ +

ほずんどの堎合、 format() が返す曞匏は䞀貫しおいたす。しかし、これは将来的に倉曎される可胜性があり、すべおの蚀語で保蚌されおいるわけではありたせん — 出力のバリ゚ヌションは蚭蚈䞊のものであり、仕様䞊は蚱容されおいたす。最も泚目すべきは、 IE や Edge ブラりザは日付の呚りに双方向の制埡文字を挿入するため、他のテキストず連結したずきに出力テキストが適切に流れるこずです。

+ +

このこずから、 format() の結果ず固定倀を比范するこずができるず期埅しおはいけたせん。

+ +
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 in Firefox and others
+// false in IE and Edge
+
+ +
+

泚: この StackOverflow のスレッドに詳现や䟋がありたす。

+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl.datetimeformat.prototype.format', 'Intl.DateTimeFormat.format')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Intl.DateTimeFormat.format")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.html b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.html new file mode 100644 index 0000000000..39d0d6212e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.html @@ -0,0 +1,86 @@ +--- +title: Intl.DateTimeFormat.prototype.formatRange() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRange +tags: + - JavaScript + - Method + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRange +--- +
{{JSRef}}
+ +

Intl.DateTimeFormat.prototype.formatRange() は、日付の範囲をもっずも簡明な方法で、 {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} オブゞェクトがむンスタンス化されたずきに提䟛された locale ず options に基づいお曞匏化したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-formatrange.html", "taller")}}
+ + + +

構文

+ +
Intl.DateTimeFormat.prototype.formatRange(startDate, endDate)
+ +

䟋

+ +

基本的な formatRange の䜿甚

+ +

このメ゜ッドは2぀の {{jsxref("Date")}} を受け取り、 {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} オブゞェクトがむンスタンス化されたずきに提䟛された locale ず options に基づいお日付の範囲を曞匏化したす。

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

仕様曞

+ + + + + + + + + + + + + + + + +
仕様曞状態備考
Intl.DateTimeFormat.prototype.formatRangeStage 3
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.html b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.html new file mode 100644 index 0000000000..9659a69883 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.html @@ -0,0 +1,83 @@ +--- +title: Intl.DateTimeFormat.prototype.formatRangeToParts() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRangeToParts +tags: + - Internationalization + - JavaScript + - Localization + - Method + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRangeToParts +--- +

{{JSRef}}

+ +

Intl.DateTimeFormat.prototype.formatRangeToParts() メ゜ッドは、 DateTimeFormat フォヌマッタヌで生成される期間の各郚品を衚すロケヌル特有のトヌクンを提䟛したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-formatrangetoparts.html", "taller")}}
+ + + +

構文

+ +
Intl.DateTimeFormat.prototype.formatRangeToParts(startDate, endDate)
+ +

䟋

+ +

基本的な formatRangeToParts の䜿い方

+ +

このメ゜ッドは2぀の {{jsxref("Date")}} を受け取り、期間を曞匏化する際の各郚品を衚すロケヌル特有のトヌクンを含む {{jsxref("Array")}} オブゞェクトを返したす。

+ +
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);
+// return value:
+// [
+//   { 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"     }
+// ]
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Intl.DateTimeFormat.formatRange', '#sec-Intl.DateTimeFormat.prototype.formatRangeToParts', 'formatRangeToParts()')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Intl.DateTimeFormat.formatRangeToParts")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html new file mode 100644 index 0000000000..b6a1ea6c3e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html @@ -0,0 +1,241 @@ +--- +title: DateTimeFormat.prototype.formatToParts() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts +tags: + - DateTimeFormat + - Internationalization + - Intl + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts +--- +
{{JSRef}}
+ +

Intl.DateTimeFormat.prototype.formatToParts() メ゜ッドは、ロケヌルを意識した DateTimeFormat フォヌマッタヌが生成する文字列のロケヌルを考慮した曞匏化を可胜にしたす。

+ +

構文

+ +
dateTimeFormat.formatToParts(date)
+ +

匕数

+ +
+
date {{optional_inline}}
+
曞匏化する日付。
+
+ +

返倀

+ +

曞匏化された日付のパヌツを含むオブゞェクトの {{jsxref("Array")}} です。

+ +

解説

+ +

formatToParts() メ゜ッドは、日付文字列のフォヌマットをカスタマむズするずきに圹立ちたす。これは、ロケヌル特有の郚分を保持しながら、カスタム文字列を構築できるロケヌル特有のトヌクンを含むオブゞェクトの {{jsxref("Array")}} を返したす。formatToParts() メ゜ッドが返华する構造は、このようになりたす。

+ +
[
+  { type: 'day', value: '17' },
+  { type: 'weekday', value: 'Monday' }
+]
+ +

枡される可胜性がある type は以䞋のずおりです。

+ +
+
day
+
日付ずしお䜿甚される文字列。たずえば、 "17"。
+
dayPeriod
+
日付期間ずしお䜿甚される文字列。たずえば、 "AM", "PM", "in the morning", "noon" など。
+
era
+
時代ずしお䜿甚される文字列。たずえば、"BC" や "AD"。
+
fractionalSecond
+
小数点以䞋の秒ずしお䜿甚される文字列です。䟋えば "0" や "00" や "000" です。
+
hour
+
時刻ずしお䜿甚される文字列。たずえば "3" や "03"。
+
literal
+
日付や時刻の区切りずしお䜿甚される文字列。たずえば "/"、","、"o'clock"、"de"。
+
minute
+
分ずしお䜿甚される文字列。たずえば、"00"。
+
month
+
月ずしお䜿甚される文字列。たずえば、"12"。
+
relatedYear
+
カレンダヌの衚珟が year ではなくyearNameである堎合、関連する4桁のグレゎリオ暊の幎に䜿甚される文字列です。䟋えば "2019" です。
+
second
+
秒ずしお䜿甚される文字列。たずえば、"07" や "42"。
+
timeZoneName
+
タむムゟヌン名ずしお䜿甚される文字列。たずえば、"UTC"。
+
weekday
+
曜日ずしお䜿甚される文字列。たずえば、"M" や "Monday"、"Montag"。
+
year
+
幎ずしお䜿甚される文字列。たずえば、"2012" や "96"。
+
yearName
+
関連するコンテキストで yearName に䜿甚される文字列、䟋えば "geng-zi" など。
+
+ +

ポリフィル

+ +

この機胜のポリフィルは、提案リポゞトリから利甚できたす。

+ +

䟋

+ +

DateTimeFormat は、盎接操䜜できないロヌカラむズされた透過的でない文字列を出力したす。

+ +
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',
+  fractionalSecondDigits: 3,
+  hour12: true,
+  timeZone: 'UTC'
+});
+
+formatter.format(date);
+// "Monday, 12/17/2012, 3:00:42.000 AM"
+
+ +

しかし、倚くのナヌザヌむンタヌフェむスでは、この文字列の曞匏をカスタマむズしたいずいう芁望がありたす。 formatToParts メ゜ッドは、文字列を郚品単䜍で提䟛するこずで、 DateTimeFormat フォヌマッタヌによっお生成された文字列のロケヌルを意識した曞匏蚭定ができるようになりたす。

+ +
formatter.formatToParts(date);
+
+// return value:
+[
+  { type: 'weekday',   value: 'Monday' },
+  { type: 'literal',   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: 'fractionalSecond', value: '000' },
+  { type: 'literal',   value: ' '      },
+  { type: 'dayPeriod', value: 'AM'     }
+]
+
+ +

これで情報は個別に利甚可胜になり、カスタマむズされた方法で再び曞匏化しお連結するこずができたす。䟋えば、{{jsxref("Array.prototype.map()")}}、アロヌ関数、 switch 文、テンプレヌトリテラル、 {{jsxref("Array.prototype.reduce()")}} などを䜿甚しおいたす。

+ +
var dateString = formatter.formatToParts(date).map(({type, value}) => {
+  switch (type) {
+    case 'dayPeriod': return `<b>${value}</b>`;
+    default : return value;
+  }
+}).reduce((string, part) => string + part);
+
+ +

これにより、 formatToParts() メ゜ッドを䜿甚する際に、日の郚分が倪字になりたす。

+ +
console.log(formatter.format(date));
+// "Monday, 12/17/2012, 3:00:42.000 AM"
+
+console.log(dateString);
+// "Monday, 12/17/2012, 3:00:42.000 <b>AM</b>"
+ +

名前付きの幎ず混合カレンダヌ

+ +

いく぀かのケヌスでは、暊は名前付きの幎を䜿甚しおいたす。 䟋えば、䞭囜やチベットの暊では、60幎呚期の干支を䜿甚しおいたす。これらの幎は、グレゎリオ暊の幎ず関連付けお識別されたす。このような堎合、 formatToParts() の結果は、通垞は幎が存圚するはずなのに、幎の項目ではなく、4桁のグレゎリオ暊の幎を含む relatedYear の゚ントリを含むこずになりたす。バッグの䞭の項目を (任意の倀で) year に蚭定するず、幎ず yearName グレゎリオ暊の relatedYear の䞡方が埗られたす。

+ +
let opts = { year: "numeric", month: "numeric", day: "numeric" };
+let df = new Intl.DateTimeFormat("zh-u-ca-chinese", opts);
+df.formatToParts(Date.UTC(2012, 11, 17, 3, 0, 42));
+
+// return value
+[
+  { type: 'relatedYear', value: '2012' },
+  { type: 'literal', value: '幎' },
+  { type: 'month', value: '十䞀月' },
+  { type: 'day', value: '4' }
+]
+
+ +

year オプションがバッグ内で蚭定されおいない堎合 (任意の倀に蚭定されおいる堎合)、結果には relatedYear のみが含たれたす。

+ +
let df = new Intl.DateTimeFormat("zh-u-ca-chinese");
+df.formatToParts(Date.UTC(2012, 11, 17, 3, 0, 42));
+
+// 返倀
+[
+   { type: 'relatedYear', value: '2012' },
+   { type: 'literal', value: '幎' },
+   { type: 'month', value: '十䞀月' },
+   { type: 'day', value: '4' }
+]
+
+ +

year を出力したい堎合は、 .format() は䞀般的にこれらを䞊べお衚瀺するこずができたす。

+ +
let df = new Intl.DateTimeFormat("zh-u-ca-chinese", {year: "numeric"});
+df.format(Date.UTC(2012, 11, 17, 3, 0, 42));
+
+// 返倀
+2012壬蟰幎
+ +

これにより、ロケヌルずカレンダヌを䞡方の format で混圚させるこずも可胜になりたす。

+ +
let df = new Intl.DateTimeFormat("en-u-ca-chinese", {year: "numeric"});
+let date = Date.UTC(2012, 11, 17, 3, 0, 42);
+df.format(date);
+
+// 返倀
+2012(ren-chen)
+
+ +

および formatToParts の堎合

+ +
let opts = {month: 'numeric', day: 'numeric', year: "numeric"};
+let df = new Intl.DateTimeFormat("en-u-ca-chinese", opts);
+let date = Date.UTC(2012, 11, 17, 3);
+df.formatToParts(date)
+
+// 返倀
+[
+  { type: 'month', value: '11' },
+  { type: 'literal', value: '/' },
+  { type: 'day', value: '4' },
+  { type: 'literal', value: '/' },
+  { type: 'relatedYear', value: '2012' }
+]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.DateTimeFormat.prototype.formatToParts', 'Intl.DateTimeFormat.prototype.formatToParts')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.DateTimeFormat.formatToParts")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/index.html b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/index.html new file mode 100644 index 0000000000..0c9a663a52 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/index.html @@ -0,0 +1,195 @@ +--- +title: Intl.DateTimeFormat +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat +tags: + - Class + - DateTimeFormat + - Internationalization + - Intl + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat +--- +
{{JSRef}}
+ +

Intl.DateTimeFormat オブゞェクトは、蚀語に応じた日付ず時刻の曞匏化を可胜にするオブゞェクトのためのコンストラクタヌです。

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat.html")}}
+ + + +

コンストラクタヌ

+ +
+
{{jsxref("Intl/DateTimeFormat/DateTimeFormat", "Intl.DateTimeFormat()")}}
+
新しい DateTimeFormat オブゞェクトを生成したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("DateTimeFormat.supportedLocalesOf", "Intl.DateTimeFormat.supportedLocalesOf()")}}
+
指定されたロケヌルのうち、実行時の既定のロケヌルにフォヌルバックせずに察応されるものを配列に収めお返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("DateTimeFormat.format", "Intl.DateTimeFormat.prototype.format()")}}
+
ロケヌルおよびこの {{jsxref("DateTimeFormat", "DateTimeFormat")}} オブゞェクトの曞匏化オプションに則っお日付を曞匏化するゲッタヌ関数です。
+
{{jsxref("DateTimeFormat.formatToParts", "Intl.DateTimeFormat.prototype.formatToParts()")}}
+
オブゞェクトの {{jsxref("Array")}} を返し、これは専甚のロケヌルを意識した曞匏で䜿甚するこずができる郚品内の数倀文字列を衚したす。
+
{{jsxref("DateTimeFormat.resolvedOptions", "Intl.DateTimeFormat.prototype.resolvedOptions()")}}
+
ロヌケルを反映しおいるプロパティずオブゞェクトの初期化䞭に蚈算された照合オプションをもった新しいオブゞェクトを返したす。
+
{{jsxref("DateTimeFormat.formatRange", "Intl.DateTimeFormat.prototype.formatRange()")}}
+
このメ゜ッドは2぀の Date を受け取り、 {{jsxref("DateTimeFormat", "DateTimeFormat")}} むンスタンスを生成する際に指定されたロケヌルずオプションに基づいお、最も簡朔な方法で日付の範囲を曞匏化したす。
+
{{jsxref("DateTimeFormat.formatRangeToParts", "Intl.DateTimeFormat.prototype.formatRangeToParts()")}}
+
このメ゜ッドは2぀の Date を受け取り、曞匏化された日付の範囲の各郚分を衚すロケヌル固有のトヌクンを含むオブゞェクトの配列を返したす。
+
+ +

䟋

+ +

DateTimeFormat の䜿甚

+ +

基本的に、ロケヌルを指定せずに䜿甚するず、 DateTimeFormat は既定のロケヌルずオプションを䜿甚したす。

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// toLocaleString without arguments depends on the implementation,
+// the default locale, and the default time zone
+console.log(new Intl.DateTimeFormat().format(date));
+// → "12/19/2012" if run with en-US locale (language) and time zone America/Los_Angeles (UTC-0800)
+
+ +

locales の䜿甚

+ +

この䟋では、ロヌカラむズされた日付ず時刻の圢匏のバリ゚ヌションの䞀郚瀺しおいたす。アプリケヌションのナヌザヌむンタヌフェむスで䜿甚される蚀語のフォヌマットを取埗するには、 locales 匕数を䜿甚しお、その蚀語 (およびおそらくいく぀かのフォヌルバック蚀語) を指定しおください。

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Results below use the time zone of America/Los_Angeles (UTC-0800, Pacific Standard Time)
+
+// US English uses month-day-year order
+console.log(new Intl.DateTimeFormat('en-US').format(date));
+// → "12/19/2012"
+
+// British English uses day-month-year order
+console.log(new Intl.DateTimeFormat('en-GB').format(date));
+// → "19/12/2012"
+
+// Korean uses year-month-day order
+console.log(new Intl.DateTimeFormat('ko-KR').format(date));
+// → "2012. 12. 19."
+
+// Arabic in most Arabic speaking countries uses real Arabic digits
+console.log(new Intl.DateTimeFormat('ar-EG').format(date));
+// → "١٩‏/١٢‏/٢٠١٢"
+
+// for Japanese, applications may want to use the Japanese calendar,
+// where 2012 was the year 24 of the Heisei era
+console.log(new Intl.DateTimeFormat('ja-JP-u-ca-japanese').format(date));
+// → "24/12/19"
+
+// when requesting a language that may not be supported, such as
+// Balinese, include a fallback language, in this case Indonesian
+console.log(new Intl.DateTimeFormat(['ban', 'id']).format(date));
+// → "19/12/2012"
+
+ +

options の䜿甚

+ +

日付ず時刻の曞匏は options 匕数を䜿甚しおカスタマむズできたす。

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0, 200));
+
+// request a weekday along with a long date
+var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
+console.log(new Intl.DateTimeFormat('de-DE', options).format(date));
+// → "Donnerstag, 20. Dezember 2012"
+
+// an application may want to use UTC and make that visible
+options.timeZone = 'UTC';
+options.timeZoneName = 'short';
+console.log(new Intl.DateTimeFormat('en-US', options).format(date));
+// → "Thursday, December 20, 2012, GMT"
+
+// sometimes you want to be more precise
+options = {
+  hour: 'numeric', minute: 'numeric', second: 'numeric',
+  timeZone: 'Australia/Sydney',
+  timeZoneName: 'short'
+};
+console.log(new Intl.DateTimeFormat('en-AU', options).format(date));
+// → "2:00:00 pm AEDT"
+
+// sometimes you want to be very precise
+options.fractionalSecondDigits = 3;
+console.log(new Intl.DateTimeFormat('en-AU', options).format(date));
+// → "2:00:00.200 pm AEDT"
+
+
+// sometimes even the US needs 24-hour time
+options = {
+  year: 'numeric', month: 'numeric', day: 'numeric',
+  hour: 'numeric', minute: 'numeric', second: 'numeric',
+  hour12: false,
+  timeZone: 'America/Los_Angeles'
+};
+console.log(new Intl.DateTimeFormat('en-US', options).format(date));
+// → "12/19/2012, 19:00:00"
+
+
+// to specify options but use the browser's default locale, use 'default'
+console.log(new Intl.DateTimeFormat('default', options).format(date));
+// → "12/19/2012, 19:00:00"
+
+// sometimes it's helpful to include the period of the day
+options = {hour: "numeric", dayPeriod: "short"};
+console.log(new Intl.DateTimeFormat('en-US', options).format(date));
+// → 10 at night
+
+ +

The used calendar and numbering formats can also be set independently via options arguments:

+ +
var options = {calendar: 'chinese', numberingSystem: 'arab'};
+var dateFormat = new Intl.DateTimeFormat('default', options);
+var usedOptions = dateFormat.resolvedOptions();
+
+console.log(usedOptions.calendar);
+// → "chinese"
+
+console.log(usedOptions.numberingSystem);
+// → "arab"
+
+console.log(usedOptions.timeZone);
+// → "America/New_York" (the users default timezone)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#datetimeformat-objects', 'Intl.DateTimeFormat')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.DateTimeFormat")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/prototype/index.html b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/prototype/index.html new file mode 100644 index 0000000000..bf782a0664 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/prototype/index.html @@ -0,0 +1,87 @@ +--- +title: Intl.DateTimeFormat.prototype +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/prototype +tags: + - DateTimeFormat + - Internationalization + - JavaScript + - Property + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat +--- +
{{JSRef}}
+ +

Intl.DateTimeFormat.prototype プロパティは、 {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} コンストラクタヌに察するプロトタむプオブゞェクトを衚したす。

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

解説

+ +

Intl.DateTimeFormat むンスタンスの解説に぀いおは {{jsxref("DateTimeFormat")}} を確認しお䞋さい。

+ +

{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} むンスタンスは Intl.DateTimeFormat.prototype から継承したす。プロトタむプオブゞェクトぞの倉曎はすべおの {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} むンスタンスによっお継承されたす。

+ +

プロパティ

+ +
+
Intl.DateTimeFormat.prototype.constructor
+
{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} ぞの参照です。
+
+ +

メ゜ッド

+ +
+
{{jsxref("DateTimeFormat.format", "Intl.DateTimeFormat.prototype.format()")}}
+
ロケヌルおよびこの {{jsxref("DateTimeFormat", "DateTimeFormat")}} オブゞェクトの曞匏化オプションに則っお日付を曞匏化するゲッタヌ関数です。
+
{{jsxref("DateTimeFormat.formatToParts", "Intl.DateTimeFormat.prototype.formatToParts()")}}
+
Returns an {{jsxref("Array")}} of objects representing the date string in parts that can be used for custom locale-aware formatting.
+
{{jsxref("DateTimeFormat.resolvedOptions", "Intl.DateTimeFormat.prototype.resolvedOptions()")}}
+
ロヌケルを反映しおいるプロパティずオブゞェクトの初期化䞭に蚈算されたオプションをもった新しいオブゞェクトを返したす。
+
{{jsxref("DateTimeFormat.formatRange", "Intl.DateTimeFormat.prototype.formatRange()")}}
+
This method receives two Dates and formats the date range in the most concise way based on the locale and options provided when instantiating {{jsxref("DateTimeFormat", "DateTimeFormat")}}.
+
{{jsxref("DateTimeFormat.formatRangeToParts", "Intl.DateTimeFormat.prototype.formatRangeToParts()")}}
+
This method receives two Dates and returns an Array of objects containing the locale-specific tokens representing each part of the formatted date range.
+
+ +

仕様曞

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様曞状態備考
{{SpecName('ES Int Draft', '#sec-Intl.DateTimeFormat.prototype', 'Intl.DateTimeFormat.prototype')}}{{Spec2('ES Int Draft')}}
{{SpecName('ES Int 2.0', '#sec-12.2.1', 'Intl.DateTimeFormat.prototype')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int 1.0', '#sec-12.2.1', 'Intl.DateTimeFormat.prototype')}}{{Spec2('ES Int 1.0')}}初回定矩
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.DateTimeFormat.prototype")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html new file mode 100644 index 0000000000..4e28ab0347 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html @@ -0,0 +1,95 @@ +--- +title: Intl.DateTimeFormat.prototype.resolvedOptions() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions +tags: + - DateTimeFormat + - Internationalization + - Intl + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions +--- +
{{JSRef}}
+ +

Intl.Collator.prototype.resolvedOptions() メ゜ッドは、この {{jsxref("Collator")}} オブゞェクトの初期化時に蚈算されたロケヌルず照合オプションを反映したプロパティを持぀新しいオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-resolvedoptions.html")}}
+ + + +

構文

+ +
dateTimeFormat.resolvedOptions()
+ +

返倀

+ +

この {{jsxref("DateTimeFormat")}} オブゞェクトの初期化時に蚈算されたロケヌルず照合オプションを反映したプロパティを持぀新しいオブゞェクトです。

+ +

解説

+ +

返されるオブゞェクトには以䞋のプロパティがありたす。

+ +
+
locale
+
実際に䜿甚したロケヌルの BCP 47 蚀語タグ。このロケヌルに぀ながる入力 BCP 47 蚀語タグに Unicode 拡匵倀が芁求された堎合、芁求されたキヌず倀のペアのうち、このロケヌルで察応しおいるものが locale に含たれたす。
+
calendar
+
䟋: "gregory"
+
numberingSystem
+
Unicode 拡匵キヌの "ca" および "nu" で芁求された倀、たたは既定倀が入りたす。
+
timeZone
+
options 匕数の同名のプロパティで芁求された倀です。提䟛された倀がなければ {{jsxref("undefined")}} (ランタむムの既定のタむムゟヌン) です。譊告: アプリケヌションは {{jsxref("undefined")}} が返されるこずに䟝存しないでください。将来のバヌゞョンではランタむムの既定のタむムゟヌンを識別する {{jsxref("String")}} 倀が返されるようになる可胜性があるからです。
+
hour12
+
options 匕数の同名のプロパティで芁求された倀、たたは既定倀が入りたす。
+
weekday
+
era
+
year
+
month
+
day
+
hour
+
minute
+
second
+
timeZoneName
+
options 匕数の察応するプロパティず、遞択したロケヌルでの日付時刻の曞匏蚭定に利甚可胜な組み合わせや衚珟ずの間で、曞匏のマッチングを行った結果の倀。これらのプロパティの䞭には、察応するコンポヌネントが曞匏化された出力では衚珟されないものもありたす。
+
+ +

䟋

+ +

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

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl.datetimeformat.prototype.resolvedoptions', 'Intl.DateTimeFormat.prototype.resolvedOptions')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.DateTimeFormat.resolvedOptions")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html new file mode 100644 index 0000000000..0be4ec7300 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html @@ -0,0 +1,128 @@ +--- +title: Intl.DateTimeFormat.supportedLocalesOf() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/supportedLocalesOf +tags: + - DateTimeFormat + - Internationalization + - JavaScript + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/supportedLocalesOf +--- +
{{JSRef("Global_Objects", "DateTimeFormat", "Intl,Collator,NumberFormat")}}
+ +

抂芁

+ +

ランタむムのデフォルトロヌケルに戻る必芁なしでフォヌマットしおいる日時でサポヌトしおいる提䟛されおいるロヌケルを含んでいる配列を返したす。

+ +

構文

+ +
Intl.DateTimeFormat.supportedLocalesOf(locales[, options])
+ +

匕数

+ +
+
locales
+
BCP47蚀語タグの文字列、そのような文字列の配列。 locales匕数の䞀般的な圢匏に察しお、{{jsxref("Global_Objects/Intl", "Intl page", "#Locale_identification_and_negotiation", 1)}}を確かめお䞋さい。
+
options
+
+

オプション。次のプロパティを持぀オブゞェクト:

+ +
+
localeMatcher
+
䜿っおいるロヌケルマッチングアルゎリズム。利甚可胜な倀は"lookup"、"best fit"。デフォルトでは "best fit"。このオプションに぀いおの情報のために、{{jsxref("Global_Objects/Intl", "Intl page", "#Locale_negotiation", 1)}}を確かめお䞋さい。
+
+
+
+ +

説明

+ +

localesで提䟛されおいる蚀語タグのサブセットを持぀配列を返したす。返される蚀語タグは、ランタむムがロヌケルマッチングアルゎリズムを䜿っお考慮しおフォヌマットしおいる日時でのロヌケルをサポヌトしおいおるので、デフォルトロヌケルに戻る必芁はありたせん。

+ +

䟋

+ +

䟋: supportedLocalesOfを䜿う

+ +

日時のフォヌマットで、バリ語ではなく、むンドネシア語ずドむツ語をサポヌトしおいるランタむムを仮定するず、supportedLocalesOfはむンドネシア語ずドむツ語の蚀語タグを返したす。ピンむンは日時のフォヌマットには適切ではなくむンドネシア語では䜿われたせん。むンドネシアの特定のドむツ語はサポヌトされそうにもありたせん。 "lookup"アルゎリズムの指定に泚意しお䞋さい。"best fit"はむンドネシア語はバリ語に察しお、十分にふさわしいず決定するかもしれたせん。ずいうのも、 ほずんどのバリの人はむンドネシア語も理解するからです。それゆえバリ蚀語タグも同様に返したす。

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

仕様

+ + + + + + + + + + + + + + +
仕様状況コメント
{{SpecName('ES Int 1.0', '#sec-12.2.2', 'Intl.DateTimeFormat.supportedLocalesOf')}}{{Spec2('ES Int 1.0')}}Initial definition.
+ +

ブラりザ実装状況

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
機胜ChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
基本サポヌト{{CompatChrome("24")}}{{CompatGeckoDesktop("29")}}{{CompatIE("11")}}{{CompatOpera("15")}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
機胜AndroidChrome for AndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
基本サポヌト{{CompatNo}}{{CompatChrome("26")}}{{CompatNo}}
+ {{bug("864843")}}
{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/displaynames/index.html b/files/ja/web/javascript/reference/global_objects/intl/displaynames/index.html new file mode 100644 index 0000000000..2c29a952d4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/displaynames/index.html @@ -0,0 +1,154 @@ +--- +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}}
+ +

Intl.DisplayNames オブゞェクトは、蚀語、地域、文字䜓系の衚瀺名の䞀貫した翻蚳を可胜にするオブゞェクトのコンストラクタヌです。

+ +
{{EmbedInteractiveExample("pages/js/intl-displaynames.html")}}
+ + + +

コンストラクタヌ

+ +
+
{{jsxref("Intl/DisplayNames/DisplayNames", "Intl.DisplayNames()")}}
+
Intl.DisplayNames オブゞェクトを䜜成したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Intl/DisplayNames/supportedLocalesOf", "Intl.DisplayNames.supportedLocalesOf()")}}
+
提䟛されたロケヌルのうち、ランタむムのデフォルトロケヌルにフォヌルバックするこずなくサポヌトされおいるロケヌルを含む配列を返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Intl/DisplayNames/of", "Intl.DisplayNames.prototype.of()")}}
+
このメ゜ッドは code を受け取り、Intl.DisplayNames をむンスタンス化したずきに指定したロケヌルずオプションに基づく文字列を返したす。
+
{{jsxref("Intl/DisplayNames/resolvedOptions", "Intl.DisplayNames.prototype.resolvedOptions()")}}
+
オブゞェクトの初期化時に蚈算されたロケヌルや曞匏蚭定のオプションを反映したプロパティを持぀新しいオブゞェクトを返したす。
+
+ +

䟋

+ +

囜 (地域) の衚瀺名

+ +

ロケヌルを指定した Intl.DisplayNames を䜜成し、囜 (地域) コヌドの衚瀺名を取埗する方法です。

+ +
// 英語の地域名を衚瀺
+let regionNames = new Intl.DisplayNames(['en'], {type: 'region'});
+regionNames.of('419'); // "Latin America"
+regionNames.of('BZ');  // "Belize"
+regionNames.of('US');  // "United States"
+regionNames.of('BA');  // "Bosnia & Herzegovina"
+regionNames.of('MM');  // "Myanmar (Burma)"
+
+// 繁䜓字䞭囜語での地域名を衚瀺
+regionNames = new Intl.DisplayNames(['zh-Hant'], {type: 'region'});
+regionNames.of('419'; // "拉䞁矎掲"
+regionNames.of('BZ'); // "貝里斯"
+regionNames.of('US'); // "矎國"
+regionNames.of('BA'); // "波士尌亞與赫塞哥維玍"
+regionNames.of('MM'); // "緬甞"
+ +

蚀語の衚瀺名

+ +

ロケヌルを指定した Intl.DisplayNames を䜜成し、蚀語-文字䜓系-囜 (地域) の䞀連の衚瀺名を取埗する方法です。

+ +
// 英語の蚀語名を衚瀺
+let languageNames = new Intl.DisplayNames(['en'], {type: 'language'});
+languageNames.of('fr');      // "French"
+languageNames.of('de');      // "German"
+languageNames.of('fr-CA');   // "Canadian French"
+languageNames.of('zh-Hant'); // "Traditional Chinese"
+languageNames.of('en-US');   // "American English"
+languageNames.of('zh-TW');   // "Chinese (Taiwan)"]
+
+// 繁䜓字䞭囜語での蚀語名を衚瀺
+languageNames = new Intl.DisplayNames(['zh-Hant'], {type: 'language'});
+languageNames.of('fr'); // "法文"
+languageNames.of('zh'); // "äž­æ–‡"
+languageNames.of('de'); // "執文"
+ +

文字䜓系コヌドの衚瀺名称

+ +

ロケヌルを指定した Intl.DisplayNames を䜜成し、文字䜓系の衚瀺名を取埗する方法です。

+ +
// 英語の文字䜓系名を衚瀺
+let scriptNames = new Intl.DisplayNames(['en'], {type: 'script'});
+// Get script names
+scriptNames.of('Latn'); // "Latin"
+scriptNames.of('Arab'); // "Arabic"
+scriptNames.of('Kana'); // "Katakana"
+
+// 繁䜓字䞭囜語での文字䜓系名を衚瀺
+scriptNames = new Intl.DisplayNames(['zh-Hant'], {type: 'script'});
+scriptNames.of('Latn'); // "拉䞁文"
+scriptNames.of('Arab'); // "阿拉䌯文"
+scriptNames.of('Kana'); // "片假名"
+ +

通貚コヌドの衚瀺名称

+ +

ロケヌルを指定した Intl.DisplayNames を䜜成し、通貚の衚瀺名を取埗する方法です。

+ +
// 英語の通貚名を衚瀺
+let currencyNames = new Intl.DisplayNames(['en'], {type: 'currency'});
+// Get currency names
+currencyNames.of('USD'); // "US Dollar"
+currencyNames.of('EUR'); // "Euro"
+currencyNames.of('TWD'); // "New Taiwan Dollar"
+currencyNames.of('CNY'); // "Chinese Yuan"
+
+// 繁䜓字䞭囜語の通貚名を衚瀺
+currencyNames = new Intl.DisplayNames(['zh-Hant'], {type: 'currency'});
+currencyNames.of('USD'); // "矎元"
+currencyNames.of('EUR'); // "歐元"
+currencyNames.of('TWD'); // "新台幣"
+currencyNames.of('CNY'); // "人民幣"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Intl.DisplayNames', '#intl-displaynames-objects', 'DisplayNames')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.DisplayNames")}}

+
+ +

実装の進捗

+ +

以䞋の衚は、クロスブラりザヌの安定性に達しおいない、新しい機胜に察する日次の実装ステヌタスを提䟛したす。デヌタは、JavaScript の暙準テストスむヌト、Nightly ビルド、たたは各ブラりザヌの最新の JavaScript ゚ンゞンを䜿甚しお、Test262 内で適切な機胜テストを実行するこずにより生成されたす。

+ +

{{EmbedTest262ReportResultsTable("Intl.DisplayNames")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html b/files/ja/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html new file mode 100644 index 0000000000..1d85e32e87 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html @@ -0,0 +1,74 @@ +--- +title: Intl.getCanonicalLocales() +slug: Web/JavaScript/Reference/Global_Objects/Intl/getCanonicalLocales +tags: + - Internationalization + - Intl + - JavaScript + - Method +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/getCanonicalLocales +--- +
{{JSRef}}
+ +

Intl.getCanonicalLocales() メ゜ッドは、正芏のロケヌル名を含む配列を返したす。重耇は省略され、芁玠は構造的に有効な蚀語タグずしお怜蚌されたす。

+ +
{{EmbedInteractiveExample("pages/js/intl-getcanonicallocales.html")}}
+ + + +

構文

+ +
Intl.getCanonicalLocales(locales)
+ +

匕数

+ +
+
locales
+
暙準ロケヌル名を取埗するための {{jsxref("String")}} 倀リスト。
+
+ +

返倀

+ +

正芏のロケヌル名を含む配列です。

+ +

䟋

+ +

getCanonicalLocales の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl.getcanonicallocales', 'Intl.getCanonicalLocales')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.getCanonicalLocales")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/index.html b/files/ja/web/javascript/reference/global_objects/intl/index.html new file mode 100644 index 0000000000..f6c08e0a31 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/index.html @@ -0,0 +1,133 @@ +--- +title: Intl +slug: Web/JavaScript/Reference/Global_Objects/Intl +tags: + - Internationalization + - Intl + - JavaScript + - Namespace + - 名前空間 + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl +--- +
{{JSRef}}
+ +

Intl オブゞェクトは、 ECMAScript の囜際化 API の名前空間で、蚀語に䟝存した文字列の比范、数倀フォヌマット、日付フォヌマットを提䟛したす。 Intl オブゞェクトは、いく぀かのコンストラクタヌに加え、囜際化コンストラクタヌや他の蚀語に関する関数に共通する機胜ぞのアクセスを提䟛したす。

+ +

プロパティ

+ +
+
{{jsxref("Global_Objects/Collator", "Intl.Collator")}}
+
蚀語に䟝存した文字列の比范を可胜にするオブゞェクトである collator のためのコンストラクタヌ。
+
{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}
+
蚀語に䟝存した日時の曞匏化を可胜にするオブゞェクトのためのコンストラクタヌ。
+
{{jsxref("Global_Objects/ListFormat", "Intl.ListFormat")}}
+
蚀語に䟝存したリストの曞匏化を可胜にするオブゞェクトのためのコンストラクタヌ。
+
{{jsxref("Global_Objects/Locale", "Intl.Locale")}}
+
Unicode ロケヌル識別子を衚すオブゞェクトのためのコンストラクタヌ。
+
{{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}}
+
蚀語に䟝存した数倀フォヌマットを可胜にするオブゞェクトのためのコンストラクタヌ。
+
{{jsxref("Global_Objects/PluralRules", "Intl.PluralRules")}}
+
耇数圢を意識した曞匏化や耇数圢の蚀語芏則を可胜にするオブゞェクトのためのコンストラクタヌ。
+
{{jsxref("Global_Objects/RelativeTimeFormat", "Intl.RelativeTimeFormat")}}
+
蚀語を意識した盞察時刻の曞匏化を可胜にするオブゞェクトのためのコンストラクタヌ。
+
+ +

メ゜ッド

+ +
+
{{jsxref("Intl.getCanonicalLocales()")}}
+
正芏のロケヌル名を返すメ゜ッド。
+
+ +

ロケヌルの識別ずネゎシ゚ヌション

+ +

囜際化コンストラクタヌや他のコンストラクタヌの蚀語を意識したメ゜ッド (関連情報に蚘茉) は、ロケヌルを識別しお実際に䜿甚するものを決定するために共通のパタヌンを䜿甚しおいたす。これらはすべお、 locales ず options の匕数を受け取り、 options.localeMatcher プロパティで指定したアルゎリズムを䜿甚しお 芁求されたロケヌルず察応しおいるロケヌルずのネゎシ゚ヌションを行いたす。

+ +

locales 匕数

+ +

locales 匕数は、 BCP 47 蚀語タグを保持しおいる文字列か、そのような蚀語タグの配列でなければなりたせん。 locales 匕数が䞎えられおいなかったり、 undefined であったりした堎合は、実行時の既定のロケヌルが䜿甚されたす。

+ +

BCP 47 蚀語タグは、蚀語ず、少なくずも䞻たる蚀語コヌドを含んでいたす。ほずんどのよくある圢匏では、すべおハむフンで区切られたサブタグを、蚀語コヌド、文字䜓系コヌド、囜たたは地域コヌドの順で含んでいたす。タグは倧文字小文字を区別したせんが、文字䜓系コヌドでは先頭が倧文字で残りは小文字、囜たたは地域コヌドでは倧文字、その他はすべお小文字が掚奚されおいたす。

+ +

䟋:

+ + + +

蚀語、文字䜓系、囜 (地域)、 (たれに䜿甚される) 倉化圢を識別する BCP 47 蚀語タグのサブタグは IANA Language Subtag Registry で調べられたす。

+ +

BCP 47 はたた、拡匵を認めおおり、そのうちの䞀぀ "u" (Unicode) 拡匵は、 JavaScript の囜際化機胜にずっお重芁です。それは、{{jsxref("Collator")}}, {{jsxref("NumberFormat")}}, {{jsxref("DateTimeFormat")}} オブゞェクトのロケヌル固有の動䜜のカスタマむズを芁求するために䜿甚するこずができたす。

+ + + +

BCP 47 拡匵タグは Unicode CLDR Project にありたす。

+ +

ロケヌルネゎシ゚ヌション

+ +

locales 匕数は、すべおの Unicode 拡匵を陀去した埌、アプリケヌションからの優先順䜍付き芁求ずしお解釈されたす。ランタむムは、利甚可胜なロヌケルず比范し、利甚可胜なロケヌルのうち最適なものを遞びたす。マッチングアルゎリズムは二皮類ありたす。 "lookup" マッチャヌは、BCP 47 で指定された Lookup アルゎリズムに埓いたす。 "best fit" マッチャヌでは、ランタむムが少なくずも、あるいは堎合によっおは、 Lookup アルゎリズムの結果よりもリク゚ストに適合したロケヌルを提䟛したす。アプリケヌションが locales 匕数を提䟛しなかった堎合や、リク゚ストに䞀臎するロケヌルをランタむムが持っおいなかった堎合は、ランタむムの既定のロケヌルが䜿甚されたす。マッチャヌは、 options 匕数のプロパティを䜿っお遞択するこずができたす (埌述)。

+ +

ネゎシ゚ヌションにより遞択された蚀語タグが Unicode 拡匵の郚分文字列を持っおいるずき、その拡匵はここで、構築されたオブゞェクトや関数の振る舞いをカスタマむズするために䜿われたす。それぞれのコンストラクタヌや関数は、 Unicode 拡匵甚のキヌのごく䞀郚分のみ察応しおおり、たた、察応する倀は、倚くの堎合蚀語タグに䟝存したす。䟋えば、 "co" キヌ (コレクション)は、 {{jsxref("Collator")}} だけが察応しおおり、そのキヌに察する "phonebk" の倀はドむツ語だけが察応しおいたす。

+ +

options 匕数

+ +

options 匕数は、コンストラクタヌや関数ごずに異なるプロパティをも぀オブゞェクトである必芁がありたす。 options 匕数が䞎えられなかった堎合、たたは、未定矩の堎合、すべおのプロパティに察しお既定倀が䜿甚されたす。

+ +

蚀語を意識するすべおのコンストラクタヌや関数が察応しおいるプロパティが䞀぀ありたす。 localeMatcher プロパティで、この倀は "lookup" たたは "best fit" の文字列である必芁があり、䞊蚘のずけヌるマッチングアルゎリズムのうちから䞀぀を遞択したす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#intl-object', 'Intl')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/listformat/index.html b/files/ja/web/javascript/reference/global_objects/intl/listformat/index.html new file mode 100644 index 0000000000..08be4d24aa --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/listformat/index.html @@ -0,0 +1,104 @@ +--- +title: Intl.ListFormat +slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat +tags: + - Class + - Experimental + - Internationalization + - Intl + - JavaScript + - ListFormat + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat +--- +
{{JSRef}}
+ +

Intl.ListFormat オブゞェクトは、蚀語特有のリストを利甚可胜にするコンストラクタヌです。

+ +
{{EmbedInteractiveExample("pages/js/intl-listformat.html", "taller")}}
+ + + +

コンストラクタヌ

+ +
+
{{jsxref("Intl/ListFormat/ListFormat", "Intl.ListFormat()")}}
+
新しい ListFormat オブゞェクトを䜜成したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("ListFormat.supportedLocalesOf", "Intl.ListFormat.supportedLocalesOf()")}}
+
指定したロケヌルのうち、ランタむムの既定のロケヌルに代替されるこずなく察応しおいるものを含む配列を返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("ListFormat.prototype.format", "Intl.ListFormat.prototype.format()")}}
+
蚀語固有の圢匏の文字列を返しお列挙芁玠を衚瀺したす。
+
{{jsxref("ListFormat.prototype.formatToParts", "Intl.ListFormat.prototype.formatToParts()")}}
+
ロケヌルを考慮した方法で倀のリストを敎圢するために䜿甚できる、さたざたな郚分を衚すオブゞェクトの配列を返したす。
+
+ +

䟋

+ +

format の䜿甚

+ +

次の䟋では、英語を䜿甚するリストのフォヌマッタヌを生成する方法を瀺したす。

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

formatToParts の䜿甚

+ +

次の䟋では、敎圢枈みの郚分を返すリストフォヌマッタヌを生成する方法を瀺したす。

+ +
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" } ];
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Intl.ListFormat', '#listformat-objects', 'ListFormat')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.ListFormat")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/basename/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/basename/index.html new file mode 100644 index 0000000000..5157d8c0bd --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/basename/index.html @@ -0,0 +1,75 @@ +--- +title: Intl.Locale.prototype.baseName +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/baseName +tags: + - Internationalization + - JavaScript + - Property + - Prototype + - Reference + - プロパティ + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/baseName +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.baseName プロパティは、 Locale の文字列衚珟の郚分文字列を返し、そこには Locale に぀いおの䞭栞情報が含たれおいたす。

+ +

解説

+ +

{{jsxref("Locale", "Intl.Locale")}} オブゞェクトは、解析されたロケヌルずそのロケヌルのオプションを衚したす。 baseName プロパティは、ロケヌルに関する基本的な情報を、完党なデヌタ文字列の郚分文字列の圢で返したす。具䜓的には、このプロパティは蚀語を含む郚分文字列を返し、文字䜓系や地域があればそれも返したす。

+ +

baseName は 蚀語 ["-" 文字䜓系] ["-" 地域] *("-" variant) の圢で unicode_language_id grammar の郚分文字列を返したす。

+ +

䟋

+ +

基本的な䟋

+ +
let myLoc = new Intl.Locale("fr-Latn-CA"); // ロケヌルをカナダのフランス語に蚭定
+console.log(myLoc.toString()); // "fr-Latn-CA-u-ca-gregory" ず衚瀺
+console.log(myLoc.baseName); // "fr-Latn-CA" ず衚瀺
+ +

入力文字列のオプション付きの䟋

+ +
// 蚀語を日本語、地域を日本に蚭定する。
+
+// カレンダヌをグレゎリオ暊、時制を24時制にする
+let japan = new Intl.Locale("ja-JP-u-ca-gregory-hc-24");
+console.log(japan.toString()); // "ja-JP-u-ca-gregory-hc-h24" ず衚瀺
+console.log(japan.baseName); // "ja-JP" ず衚瀺
+ +

入力文字列を䞊曞きするオプション付きの䟋

+ +
// 入力文字列は蚀語がオランダ語、地域がベルギヌであるこずを瀺しおいたすが、
+
+// ただし、オプションオブゞェクトで地域を䞊曞きしおおり、オランダに蚭定しおいたす
+let dutch = new Intl.Locale("nl-Latn-BE", {region: "NL"});
+
+console.log(dutch.baseName); // "nl-Latn-NL" ず衚瀺
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.baseName')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.Intl.Locale.baseName")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/calendar/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/calendar/index.html new file mode 100644 index 0000000000..4df268ee41 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/calendar/index.html @@ -0,0 +1,159 @@ +--- +title: Intl.Locale.prototype.calendar +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar +tags: + - Internationalization + - JavaScript + - Property + - Prototype + - Reference + - プロパティ + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.calendar プロパティは、 Locale で䜿甚される暊の皮類を返すアクセサヌプロパティです。

+ +

解説

+ +

calendar プロパティは Locale の䞀郚、 Locale の暊を瀺す郚分を返したす。䞖界の倧郚分はグレゎリオ暊を䜿甚しおいたすが、䞖界各地で䜿甚されおいる地域暊もいく぀かありたす。以䞋の衚に、有効な Unicode 暊キヌ文字列をすべお瀺したす。

+ +

Unicode 暊キヌ

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unicode 暊キヌ
Calendar key (name)説明
buddhistタむの仏教暊
chinese叀来の䞭囜の暊
copticコプト暊
dangi叀来の韓囜の暊
ethioaaEthiopic calendar, Amete Alem (epoch approx. 5493 B.C.E)
ethiopicEthiopic calendar, Amete Mihret (epoch approx, 8 C.E.)
gregoryグレゎリオ暊
hebrew叀来のヘブラむ暊
indianむンド暊
islamicむスラム暊
islamic-umalquraIslamic calendar, Umm al-Qura
islamic-tblaIslamic calendar, tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29] - astronomical epoch)
islamic-civilIslamic calendar, tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29] - civil epoch)
islamic-rgsaIslamic calendar, Saudi Arabia sighting
iso8601ISO カレンダヌ (ISO 8601 カレンダヌの曜日芏則を䜿甚したグレゎリオ暊)
japanese日本の皇玀
persianペルシャ暊
roc䞭華民囜暊
+
islamicc 暊は非掚奚です。 islamic-civil を䜿甚しおください。
+ +

islamicc

+
Civil (algorithmic) Arabic calendar
+ +

䟋

+ +

ロケヌル文字列ぞのカレンダヌの远加

+ +

暊は、ロケヌルキヌの「拡匵キヌ」に該圓したす。これらのキヌは、ロケヌルに関するデヌタを远加するもので、拡匵子 -u を䜿甚しおロケヌル識別子に远加したす。したがっお、 {{jsxref("Locale/Locale", "Intl.Locale")}} コンストラクタヌに枡される初期のロケヌル識別子文字列に暊の皮類を远加するこずができたす。暊の皮類を远加するには、たず文字列に -u 拡匵を远加したす。次に、暊の皮類を远加するこずを瀺すために -ca 拡匵を远加したす。最埌に、暊を文字列に远加したす。

+ +
let frBuddhist = new Intl.Locale("fr-FR-u-ca-buddhist");
+console.log(frBuddhist.calendar); // "buddhist" ず衚瀺
+ +

構成オブゞェクトによる暊の远加

+ +

{{jsxref("Locale/Locale", "Intl.Locale")}} コンストラクタヌには、オプションで構成オブゞェクトの匕数があり、カレンダヌを含めた拡匵の皮類を枡すために䜿甚するこずができたす。構成オブゞェクトの calendar プロパティを望みの暊の倀に蚭定し、コンストラクタヌに枡したす。

+ +
let frBuddhist = new Intl.Locale("fr-FR", {calendar: "buddhist"});
+console.log(frBuddhist.calendar); // "buddhist" ず衚瀺
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.calendar')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.Intl.Locale.calendar")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/casefirst/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/casefirst/index.html new file mode 100644 index 0000000000..6f337ab869 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/casefirst/index.html @@ -0,0 +1,92 @@ +--- +title: Intl.Locale.prototype.caseFirst +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/caseFirst +tags: + - Internationalization + - Intl + - JavaScript + - Property + - Prototype + - Reference + - プロパティ + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/caseFirst +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.caseFirst プロパティは、ロケヌルの照合芏則に倧文字・小文字を考慮するかどうかを返すアクセサプロパティです。

+ +

解説

+ +

ロケヌルの照合芏則は、そのロケヌルでの文字列の䞊び順を決定するために甚いられたす。ロケヌルによっおは、照合凊理で文字の倧文字・小文字を䜿甚する堎合がありたす。この远加ルヌルは、 {{jsxref("Locale", "Locale")}} の caseFirst プロパティで衚珟するこずができたす。

+ +

caseFirst プロパティには䞋蚘の衚にある通り、3皮類の倀を指定するこずができたす。

+ +

caseFirst の倀

+ + + + + + + + + + + + + + + + + + + + + + +
倀説明
upper倧文字は小文字よりも前に䞊べられたす。
lower小文字は倧文字よりも前に䞊べられたす。
false倧文字・小文字で特別な䞊べ替えはしたせん。
+ +

䟋

+ +

ロケヌル文字列による caseFirst 倀の蚭定

+ +

Unicode ロケヌル文字列仕様曞では、 caseFirst が衚す倀は kf キヌに察応したす。 kf はロケヌル文字列の「拡匵子サブタグ」ずしお扱われたす。これらのサブタグは、ロケヌルに関するデヌタを远加するもので、 -u 拡匵を䜿甚しおロケヌル識別子に远加されたす。぀たり、 caseFirst の倀は、 Locale コンストラクタヌに枡される初期のロケヌル識別子文字列に远加するこずができたす。 caseFirst の倀を远加するには、たず文字列に -u 拡匵キヌを远加したす。次に、照合順序の型を远加するこずを瀺すために -kf 拡匵キヌを远加したす。最埌に、 caseFirst の倀を文字列に远加したす。

+ +
let caseFirstStr = new Intl.Locale("fr-Latn-FR-u-kf-upper");
+console.log(caseFirstStr.caseFirst); // "upper" ず衚瀺
+ +

構成オブゞェクト匕数による caseFirst の倀の蚭定

+ +

{{jsxref("Locale/Locale", "Intl.Locale")}} コンストラクタヌには、オプションで構成オブゞェクトの匕数があり、拡匵の皮類を枡すために䜿甚するこずができたす。構成オブゞェクトの caseFirst プロパティを望みの caseFirst の倀に蚭定し、コンストラクタヌに枡したす。

+ +
let caseFirstObj= new Intl.Locale("en-Latn-US", {caseFirst: "lower"});
+console.log(us12hour.caseFirst); // "lower" ず衚瀺
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.caseFirst')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.Intl.Locale.caseFirst")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/collation/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/collation/index.html new file mode 100644 index 0000000000..d2dad676cb --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/collation/index.html @@ -0,0 +1,166 @@ +--- +title: Intl.Locale.prototype.collation +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/collation +tags: + - Internationalization + - Intl + - JavaScript + - Property + - Prototype + - Reference + - プロパティ + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/collation +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.collation プロパティは、 Locale の照合皮別を返すアクセサヌプロパティです。

+ +

解説

+ +

照合ずは、文字列を䞊べ替える凊理のこずです。怜玢ク゚リの結果からデヌタベヌス内のレコヌドの順序付けたで、文字列を特定の順序に䞊べ替えお配眮しなければならない堎合に䜿甚されたす。文字列を順番に配眮するずいう考えは些现なこずのように思えるかもしれたせんが、順序の考え方は地域や蚀語によっお異なるこずがありたす。 collation プロパティは、 JavaScript プログラマヌが特定のロケヌルで䜿甚される照合皮別に簡単にアクセスできるようにするこずを助けたす。

+ +

利甚可胜な照合皮別は䞋蚘の衚にありたす。 Unicode 照合仕様曞 から匕甚したものです。

+ +

有効な照合皮別

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
照合皮別説明
big5hanラテン文字はピンむン順、挢字は big5 文字セット順 (䞭囜語で䜿甚)
compat前の版の順序で、互換性のため
dict蟞曞圢匏の順序 (シンハラ語など)
+
+

direct 照合順は非掚奚です。䜿甚しないでください。

+
+ +

direct

+
バむナリコヌドポむント順 (ヒンズヌ語で䜿甚)
ducet既定の Unicode 照合順で、芁玠衚順
emoji絵文字に掚奚の順序
eorペヌロッパ語の順序の芏則
gb2312ラテン文字はピンむン順、挢字は gb2312han 順 (䞭囜語で䜿甚)
phonebk電話垳圢匏の順序 (ドむツ語など)
phonetic発音順 (発音に基づく順序)
pinyinラテン文字ず挢字はピンむン順 (䞭囜語で䜿甚)
reformedリフォヌム順 (スりェヌデン語など)
search文字列怜玢のための特殊な照合皮別
searchjl韓囜語の頭文字子音怜玢甚の特殊な照合皮別
standard各蚀語の既定の照合順
strokeラテン文字はピンむン順、挢字は画数順 (䞭囜語で䜿甚)
trad歎史的な圢の順序 (スペむン語など)
unihanラテン文字はピンむン順、挢字は Unihan 郚銖画数順 (䞭囜語で䜿甚)
zhuyin +

ラテン文字はピンむン順、挢字ずパパラモフォは泚音順 (䞭囜語で䜿甚)

+
+ +

䟋

+ +

他のロケヌルのサブタグず同様、照合皮別はロケヌル文字列やコンストラクタヌの構成オブゞェクトの匕数で {{jsxref("Locale", "Intl.Locale")}} オブゞェクトに远加するこずができたす。

+ +

ロケヌル文字列による照合皮別の远加

+ +

Unicode ロケヌル文字列仕様曞では、照合皮別はロケヌルキヌの「拡匵子サブタグ」ずなりたす。これらのサブタグは、ロケヌルに関するデヌタを远加するもので、 -u 拡匵を䜿甚しおロケヌル識別子に远加されたす。぀たり、照合皮別は、ロケヌルのコンストラクタヌに枡される初期のロケヌル識別子文字列に远加するこずができたす。照合皮別を远加するには、たず文字列に -u 拡匵を远加したす。次に、照合順序の型を远加するこずを瀺すために -co 拡匵を远加したす。最埌に、照合順序を文字列に远加したす。

+ +
let stringColl = new Intl.Locale("en-Latn-US-u-co-emoji");
+console.log(stringColl.collation); // "emoji" ず衚瀺
+
+ +

構成オブゞェクト匕数による照合皮別の远加

+ +

{{jsxref("Locale/Locale", "Intl.Locale")}} コンストラクタヌには、オプションで構成オブゞェクトの匕数があり、これには照合皮別を含む任意の拡匵の皮類をいく぀か含めるこずができたす。構成オブゞェクトの collation プロパティを任意の照合皮別に蚭定し、コンストラクタヌに枡したす。

+ +
let configColl = new Intl.Locale("en-Latn-US", {collation: "emoji"});
+console.log(configColl.collation); // "emoji" ず衚瀺
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.collation')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Intl.Locale.collation")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/hourcycle/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/hourcycle/index.html new file mode 100644 index 0000000000..1d68f033ed --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/hourcycle/index.html @@ -0,0 +1,96 @@ +--- +title: Intl.Locale.prototype.hourCycle +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle +tags: + - Internationalization + - Intl + - JavaScript + - Property + - Prototype + - Reference + - プロパティ + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.hourCycle プロパティは、ロケヌルで䜿甚される時刻保持曞匏の芏則を返すアクセサヌプロパティです。

+ +

解説

+ +

䞖界䞭で䜿甚されおいる時刻保持芏則 (時制) には、䞻に12時制ず24時制の2぀の皮類がありたす。 hourCycle プロパティを䜿甚するず、 JavaScript のプログラマヌが特定のロケヌルで䜿甚されおいる時制に簡単にアクセスできるようになりたす。他の远加ロケヌルデヌタず同様に、時制皮別は拡匵サブタグであり、ロケヌル文字列に含たれるデヌタを拡匵したものです。時制皮別には、以䞋の衚にある通り、いく぀かの異なる倀を蚭定するこずができたす。

+ +

有効な時制皮別

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
時制皮別説明
h121–12を䜿甚する時制で、パタヌンの 'h' に察応したす。12時制で、正子は午前12:00から始たりたす。
h230–23を䜿甚する時制で、パタヌンの 'H' に察応したす。24時制で、正子は0:00から始たりたす。
h110–11を䜿甚する時制で、パタヌンの 'K' に察応したす。12時制で、正子は午前0:00から始たりたす。
h241–24を䜿甚する時制で、パタヌンの 'k' に察応したす。24時制で、正子は24:00から始たりたす。
+ +

䟋

+ +

これらの䟋は、時制デヌタを {{jsxref("Locale", "Locale")}} オブゞェクトに远加する方法を瀺しおいたす。

+ +

ロケヌル文字列による時制の远加

+ +

Unicode ロケヌル文字列仕様曞では、時制はロケヌル文字列の「拡匵サブタグ」です。これらのサブタグはロケヌルに぀いおの远加デヌタであり、拡匵キヌ -u を䜿甚しおロケヌル識別子に远加されたす。このようしお、 numeric の倀を {{jsxref("Locale/Locale", "Locale")}} コンストラクタヌに枡される初期のロケヌル識別子文字列に远加するこずができたす。時制皮別の倀を蚭定するには、たず文字列に -u 拡匵キヌを远加したす。次に、 -hc 拡匵キヌを远加しお、時制皮別の倀を远加しおいるこずを瀺したす。最埌に、時制皮別の倀を文字列に远加したす。

+ +
let ja24hour = new Intl.Locale("ja-JP-u-hc-h23");
+console.log(ja24hour.hourCycle); // "h23" ず衚瀺
+ +

構成オブゞェクト匕数から時制を远加

+ +

{{jsxref("Locale/Locale", "Intl.Locale")}} コンストラクタヌには、オプションで構成オブゞェクトの匕数があり、これには時制皮別を含む任意の拡匵の皮類をいく぀か含めるこずができたす。構成オブゞェクトの hourCycle プロパティを任意の時制皮別に蚭定し、コンストラクタヌに枡したす。

+ +
let us12hour = new Intl.Locale("en-US", {hourCycle: "h12"});
+console.log(us12hour.hourCycle); // "h12" ず衚瀺
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.hourCycle')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.Intl.Locale.hourCycle")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/index.html new file mode 100644 index 0000000000..d11507595d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/index.html @@ -0,0 +1,104 @@ +--- +title: Intl.Locale +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale +tags: + - Class + - Internationalization + - Intl + - JavaScript + - Reference + - クラス + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale +--- +
{{JSRef}}
+ +

Intl.Locale オブゞェクトは、 Unicode ロケヌル識別子を衚す Intl オブゞェクトの暙準組み蟌みプロパティです。

+ +
{{EmbedInteractiveExample("pages/js/intl-locale.html")}}
+ +

解説

+ +

Intl.Locale オブゞェクトは、 Unicode ロケヌルをより簡単に操䜜できるようにするために䜜成されたした。 Unicode は、ロケヌルをロケヌル識別子ず呌ばれる文字列で衚したす。ロケヌル識別子は、蚀語識別子ず拡匵タグから構成されたす。蚀語識別子はロケヌルの䞭栞ずなるもので、蚀語、文字䜓系、地域サブタグから構成されたす。ロケヌルに関する远加情報は、オプションの拡匵タグに栌玍されたす。拡匵タグには、暊の皮類や時蚈の皮類、数倀衚蚘法の皮類などのロケヌルに関する情報が栌玍されおいたす。

+ +

埓来、 Intl API は Unicode ず同様に文字列を䜿甚しおロケヌルを衚しおいたした。これはシンプルで軜量な解決策であり、うたく機胜したす。しかし、 Locale クラスを远加するこずで、蚀語、文字䜓系、地域、拡匵タグの解析や操䜜が容易になりたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Locale/Locale", "Intl.Locale()")}}
+
新しい Locale オブゞェクトを生成したす。
+
+ +

プロパティ

+ +
+
Intl.Locale.prototype
+
Locale コンストラクタヌのプロトタむプオブゞェクトです。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Locale/baseName", "Intl.Locale.prototype.baseName")}}
+
この Locale に関する基本的な情報を、完党なデヌタ文字列の郚分文字列の圢で返したす。
+
{{jsxref("Locale/calendar", "Intl.Locale.prototype.calendar")}}
+
このロケヌルの暊幎を瀺す Locale の郚分を返したす。
+
{{jsxref("Locale/caseFirst", "Intl.Locale.prototype.caseFirst")}}
+
ロケヌルの照合芏則に倧文字・小文字を考慮しおいるかどうかを返したす。
+
{{jsxref("Locale/collation", "Intl.Locale.prototype.collation")}}
+
この Locale の照合の皮類を返したす。これは、ロケヌルの芏則に埓っお文字列を䞊べ替えるために䜿甚したす。
+
{{jsxref("Locale/hourCycle", "Intl.Locale.prototype.hourCycle")}}
+
このロケヌルが䜿甚しおいる時刻保持曞匏の芏玄を返したす。
+
{{jsxref("Locale/language", "Intl.Locale.prototype.language")}}
+
このロケヌルに関連づけられた蚀語を返したす。
+
{{jsxref("Locale/numberingSystem", "Intl.Locale.prototype.numberingSystem")}}
+
このロケヌルが䜿甚しおいる数倀衚蚘法を返したす。
+
{{jsxref("Locale/numeric", "Intl.Locale.prototype.numeric")}}
+
このロケヌルが数字に察しお特殊な照合順序を持っおいるかどうかを返したす。
+
{{jsxref("Locale/region", "Intl.Locale.prototype.region")}}
+
このロケヌルに関連付けられた䞖界の地域 (通垞は囜) を返したす。
+
{{jsxref("Locale/script", "Intl.Locale.prototype.script")}}
+
このロケヌルで䜿われおいる特定の蚀語を曞く際に䜿甚する文字䜓系を返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Locale/minimize", "Intl.Locale.prototype.minimize()")}}
+
既存の倀に基づいお、ロケヌルの蚀語、衚蚘法、地域の最も可胜性の高い倀を取埗したす。
+
{{jsxref("Locale/maximize", "Intl.Locale.prototype.maximize()")}}
+
既存の倀に基づいお、ロケヌルの蚀語、衚蚘法、地域の最も可胜性の高い倀を取埗したす。
+
{{jsxref("Locale/toString", "Intl.Locale.prototype.toString()")}}
+
このロケヌルの完党なロケヌル識別子文字列を返したす。
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#locale-objects')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.Locale")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/language/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/language/index.html new file mode 100644 index 0000000000..7996d348df --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/language/index.html @@ -0,0 +1,67 @@ +--- +title: Intl.Locale.prototype.language +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/language +tags: + - Internationalization + - Intl + - JavaScript + - Property + - Prototype + - Reference + - プロパティ + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/language +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.language プロパティは、ロケヌルに関連付けられた蚀語を返すアクセサヌプロパティです。

+ +

解説

+ +

蚀語はロケヌルの䞭栞的な特城の䞀぀です。 Unicode 仕様曞では、ロケヌルの蚀語識別子を蚀語ず地域を合わせたものずしお扱いたす (むギリス英語ずアメリカ英語などの方蚀や倉化圢を区別するためです)。 {{jsxref("Locale", "Locale")}} の language プロパティは、ロケヌルの蚀語サブタグを厳密に返したす。

+ +

䟋

+ +

ロケヌル識別子の文字列匕数で蚀語を蚭定

+ +

有効な Unicode 蚀語識別子ずなるためには、文字列は蚀語サブタグで始めなければなりたせん。 {{jsxref("Locale/Locale", "Locale")}} コンストラクタヌの䞻芁な匕数には、有効な Unicode ロケヌル識別子がなければならないので、コンストラクタヌを䜿甚する際には必ず蚀語サブタグを持぀識別子を枡さなければなりたせん。

+ +
let langStr = new Intl.Locale("en-Latn-US");
+
+console.log(langStr.language); // "en" ず衚瀺
+ +

構成オブゞェクトにより蚀語を䞊曞き

+ +

蚀語サブタグは指定する必芁がありたすが、 {{jsxref("Locale/Locale", "Locale")}} コンストラクタヌは構成オブゞェクトを取り、これを甚いお蚀語サブタグを䞊曞きするこずができたす。

+ +
let langObj = new Intl.Locale("en-Latn-US", {language: "es"});
+
+console.log(langObj.language); // "es" ず衚瀺
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.language')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.Intl.Locale.language")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/locale/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/locale/index.html new file mode 100644 index 0000000000..8624c2d4ff --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/locale/index.html @@ -0,0 +1,61 @@ +--- +title: Intl.Locale() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/Locale +tags: + - Constructor + - Intl + - JavaScript + - Locale + - Reference + - コンストラクタヌ + - ロケヌル +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/Locale +--- +
{{JSRef}}
+ +

Intl.Locale コンストラクタヌは、 Intl オブゞェクトの暙準組み蟌みプロパティで、 Unicode ロケヌル識別子を衚したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-locale.html")}}
+ +

構文

+ +
new Intl.Locale(tag [, options])
+ +

匕数

+ +
+
tag
+
Unicode ロケヌル識別子の文字列です。
+
options
+
ロケヌルの構成を含むオブゞェクトです。キヌは Unicode ロケヌルタグで、倀は有効な Unicode タグ倀です。
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl-locale-constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.Locale.Locale")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/maximize/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/maximize/index.html new file mode 100644 index 0000000000..1e2848c7e3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/maximize/index.html @@ -0,0 +1,79 @@ +--- +title: Intl.Locale.prototype.maximize() +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/maximize +tags: + - Internationaliztion + - Intl + - JavaScript + - Method + - Prototype + - Reference + - メ゜ッド + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/maximize +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.maximize() メ゜ッドは、既存の倀に基づいおロケヌルの蚀語、衚蚘法、地域の最も可胜性の近い倀を取埗したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-locale-prototype-maximize.html")}}
+ + + +

構文

+ +
locale.maximize()
+ +

返倀

+ +

{{jsxref("Locale", "Locale")}} むンスタンスで、 baseName プロパティが、 Add Likely Subtags アルゎリズムが {{jsxref("Locale/baseName", "locale.baseName")}} に察しお実行された結果になったものを返したす。

+ +

解説

+ +

䞍完党な蚀語識別子をもずに、最も可胜性の高いロケヌル蚀語識別子サブタグを識別できるず䟿利な堎合がありたす。 Add Likely Subtags アルゎリズムはこの機胜を提䟛しおくれたす。䟋えば、蚀語識別子 "en" が䞎えられた堎合、アルゎリズムは "en-Latn-US" を返すこずになりたす。英語はラテン文字でしか曞けたせんし、䞖界最倧の英語圏の囜であるアメリカで䜿われおいる可胜性が高いからです。この機胜は、 maximize() メ゜ッドを介しお JavaScript プログラマヌに提䟛されおいたす。 maximize() は、蚀語識別子を構成する䞻芁なサブタグのうち蚀語サブ、衚蚘法、地域の各サブタグにのみ圱響を䞎えたす。ロケヌル識別子の "-u" の埌にあるその他のサブタグは拡匵サブタグず呌ばれ、 maximize() メ゜ッドの圱響を受けたせん。これらのサブタグの䟋ずしおは、 {{jsxref("Locale/hourCycle", "Locale.hourCycle")}}, {{jsxref("Locale/calendar", "Locale.calendar")}}, {{jsxref("Locale/numeric", "Locale.numeric")}} などがありたす。

+ +

䟋

+ +
let myLocale = new Intl.Locale("ja", {hourCycle: "h24", calendar: "gregory"});
+console.log(myLocale.baseName); // "ja" ず衚瀺
+console.log(myLocale.toString()); // "ja-u-ca-gregory-hc-h24" ず衚瀺
+let myLocMaximized = myLocale.maximize();
+
+// "ja-Jpan-JP"。 "Jpan" ず "JP" タグが远加されたす。
+// これは、日本語が䞻に挢字かな亀じり文 (Jpan) で曞かれ、たた䞻に日本 (JP) で話されおいるためです。
+console.log(myLocMaximized.baseName);
+
+// "ja-Jpan-JP-u-ca-gregory-hc-h24" ず衚瀺したす。
+// なお、拡匵タグ ("-u" 以降) はそのたた残りたす。
+console.log(myLocMaximized.toString()); 
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.maximize')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.Locale.maximize")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/minimize/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/minimize/index.html new file mode 100644 index 0000000000..51c26a0498 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/minimize/index.html @@ -0,0 +1,78 @@ +--- +title: Intl.Locale.prototype.minimize() +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/minimize +tags: + - Internationalization + - Intl + - JavaScript + - Method + - Prototype + - Reference + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/minimize +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.minimize() メ゜ッドは、 {{jsxref("Locale/maximize", "Locale.maximize()")}} を呌び出したこずで远加されるロケヌルに関する情報を削陀しようずしたす。

+ +
{{EmbedInteractiveExample("pages/js/intl-locale-prototype-minimize.html", "taller")}}
+ + + +

構文

+ +
locale.minimize()
+ +

返倀

+ +

{{jsxref("Locale", "Locale")}} むンスタンスで、 baseName プロパティが、 Remove Likely Subtags アルゎリズムが locale.baseName に察しお実行された結果になったものを返したす。

+ +

解説

+ +

このメ゜ッドは {{jsxref("Locale/maximize", "maximize()")}} の逆の凊理を行い、ロケヌルの蚀語識別子 (基本的には baseName の内容) から蚀語、文字䜓系、地域のサブタグをすべお削陀したす。これは、蚀語識別子の䞭に䜙分なサブタグがある堎合に䟿利です。䟋えば "en-Latn" は "en" に簡略化できたす。英語では "Latn" が曞き蚀葉に䜿われる唯䞀の文字䜓系だからです。 minimize() が圱響を䞎えるのは、蚀語識別子を構成する䞻芁なサブタグである蚀語、文字䜓系、地域の各サブタグのみです。ロケヌル識別子の "-u" の埌にあるその他のサブタグは拡匵サブタグず呌ばれ、 minimize() メ゜ッドの圱響を受けたせん。これらのサブタグの䟋ずしおは、 {{jsxref("Locale/hourCycle", "Locale.hourCycle")}}, {{jsxref("Locale/calendar", "Locale.calendar")}}, {{jsxref("Locale/numeric", "Locale.numeric")}} などがありたす。

+ +

䟋

+ +
let myLocale = new Intl.Locale("ja-Jpan-JP", {hourCycle: "h24", calendar: "gregory"});
+console.log(myLocale.baseName); // "ja-Jpan-JP" ず衚瀺
+console.log(myLocale.toString()); // "ja-Jpan-JP-u-ca-gregory-hc-h24" ず衚瀺
+
+let myLocMinimized = myLocale.minimize();
+
+// "ja" のみを衚瀺したす。日本語は䞻に挢字かな亀じり文 (Jpan) で
+// 衚蚘され、たたほずんど日本で話されおいるためです。
+console.log(myLocMinimized.baseName);
+
+// "ja-u-ca-gregory-hc-h24" ず衚瀺したす。
+// なお、拡匵タグ ("-u" 以降) はそのたた残りたす。
+console.log(myLocMinimized.toString());
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.minimize')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.Locale.minimize")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.html new file mode 100644 index 0000000000..02d82c108e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.html @@ -0,0 +1,419 @@ +--- +title: Intl.Locale.prototype.numberingSystem +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numberingSystem +tags: + - Internationalization + - Intl + - JavaScript + - Property + - Prototype + - Reference + - プロパティ + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numberingSystem +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.numberingSystem プロパティは、ロケヌルが䜿甚する呜数法を返すアクセサヌプロパティです。

+ +

解説

+ +

呜数法ずは、数倀を衚珟するための䜓系のこずです。 numberingSystem プロパティは、䞖界䞭のさたざたな囜、地域、文化で䜿甚されおいるさたざたな呜数法を衚珟する支揎をしたす。ほずんどの囜際化スキヌマず同様に、 Locale オブゞェクトで numberingSystem によっお衚珟できる呜数法は、 Unicode で暙準化されおいたす。暙準的な Unicode の呜数法の衚を以䞋に瀺したす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
倀説明
adlmAdlam digits
ahomAhom digits
arabアラビア・むンド数字
arabext拡匵アラビア・むンド数字
armn倧文字のアルメニア数字 — アルゎリズム
armnlow小文字のアルメニア数字 — アルゎリズム
baliBalinese digits
bengBengali digits
bhksBhaiksuki digits
brahBrahmi digits
cakmChakma digits
chamCham digits
cyrlキリル数字 — アルゎリズム
devaDevanagari digits
ethi゚チオピア数字 — アルゎリズム
finance金融数字 — アルゎリズムの堎合あり
fullwideå…šè§’æ•°å­—
georゞョヌゞア数字 — アルゎリズム
gongGunjala Gondi digits
gonmMasaram Gondi digits
grek倧文字のギリシャ数字 — アルゎリズム
greklow小文字のギリシャ数字 — アルゎリズム
gujrGujarati digits
guruGurmukhi digits
hanidays倪陰暊たたはその他の旧暊向けの挢字による日付の数字
hanidec挢字を数字ずしお䜿甚した呜数法
hans簡䜓字の挢数字 — アルゎリズム
hansfin簡䜓字の金融甚挢数字 — アルゎリズム
hant繁䜓字の挢数字 — アルゎリズム
hantfin繁䜓字の金融甚挢数字 — アルゎリズム
hebrヘブラむ数字 — アルゎリズム
hmngPahawh Hmong digits
hmnpNyiakeng Puachue Hmong digits
javaJavanese digits
jpan日本語の挢数字 — アルゎリズム
jpanfin日本語の金融甚挢数字 — アルゎリズム
jpanyear日本語の元号甚挢数字 (元幎衚蚘に察応)
kaliKayah Li digits
khmrKhmer digits
kndaKannada digits
lanaTai Tham Hora (secular) digits
lanathamTai Tham Tham (ecclesiastical) digits
laooLao digits
latnラテン数字
lepcLepcha digits
limbLimbu digits
mathbold数孊的倪数字
mathdbl数孊的黒板倪数字
mathmono数孊的等幅数字
mathsanb数孊的サンセリフ倪数字
mathsans数孊的サンセリフ数字
mlymMalayalam digits
modiModi digits
mongMongolian digits
mrooMro digits
mteiMeetei Mayek digits
mymrMyanmar digits
mymrshanMyanmar Shan digits
mymrtlngMyanmar Tai Laing digits
nativeネむティブの数字
newaNewa digits
nkooN'Ko digits
olckOl Chiki digits
oryaOriya digits
osmaOsmanya digits
rohgHanifi Rohingya digits
roman倧文字のロヌマ数字 — アルゎリズム
romanlow小文字のロヌマ数字 — アルゎリズム
saurSaurashtra digits
shrdSharada digits
sindKhudawadi digits
sinhSinhala Lith digits
soraSora_Sompeng digits
sundSundanese digits
takrTakri digits
taluNew Tai Lue digits
tamlタミル数字 — アルゎリズム
tamldecModern Tamil decimal digits
teluTelugu digits
thaiThai digits
tirhTirhuta digits
tibtTibetan digits
traditio䌝統的な数字 — アルゎリズムの堎合あり
vaiiVai digits
waraWarang Citi digits
wchoWancho digits
+ +

䟋

+ +

ロケヌル文字列から numberingSystem の倀を蚭定

+ +

Unicode ロケヌル文字列仕様曞では、 numberingSystem が衚す倀はキヌ nu に察応しおいたす。 nu はロケヌル文字列の「拡匵サブタグ」ずみなされたす。これらのサブタグは、ロケヌルに関する远加デヌタを远加するもので、拡匵キヌ -u を䜿甚しおロケヌル識別子に远加されたす。このようしお、 numberingSystem の倀を {{jsxref("Locale/Locale", "Locale")}} コンストラクタヌに枡される初期のロケヌル識別子文字列に远加するこずができたす。 numeric の倀を蚭定するには、たず文字列に -u 拡匵キヌを远加したす。次に、 -nu 拡匵キヌを远加しお、 numberingSystem の倀を远加しおいるこずを瀺したす。最埌に、文字列に numberingSystem の倀を远加したす。

+ +
let numberingSystemViaStr = new Intl.Locale("fr-Latn-FR-u-nu-mong");
+console.log(numberingSystemStr.numberingSystem); // "mong" ず衚瀺
+ +

構成オブゞェクト匕数から numberingSystem の倀を蚭定

+ +

{{jsxref("Locale/Locale", "Intl.Locale")}} コンストラクタヌには、オプションで構成オブゞェクトの匕数があり、これを䜿甚しお拡匵の皮類を枡すこずができたす。構成オブゞェクトの numberingSystem プロパティを任意の numberingSystem に蚭定し、コンストラクタヌに枡したす。

+ +
let numberingSystemViaObj= new Intl.Locale("en-Latn-US", {numberingSystem: "latn"});
+console.log(us12hour.numberingSystem); // "latn" ず衚瀺
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.numberingSystem')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.Intl.Locale.numberingSystem")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/numeric/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/numeric/index.html new file mode 100644 index 0000000000..f60bc08e48 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/numeric/index.html @@ -0,0 +1,65 @@ +--- +title: Intl.Locale.prototype.numeric +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numeric +tags: + - Internationalization + - Intl + - JavaScript + - Property + - Prototype + - Reference + - プロパティ + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numeric +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.numeric プロパティは、ロケヌルが特別な数字の照合凊理を行うかどうかを返すアクセサプロパティです。

+ +

解説

+ +

{{jsxref("Locale.caseFirst", "Intl.Locale.caseFirst")}} ず同様、 numeric はロケヌルが䜿甚する照合芏則を倉曎するものです。 numeric は {{jsxref("boolean", "Boolean")}} 倀で、 true か false のどちらかになりたす。 numeric を false に蚭定した堎合は、文字列内の数倀を特別に扱うこずはありたせん。 numeric を true に蚭定した堎合は、ロケヌルは文字列を照合する際に数倀を考慮したす。この数倀の特別な扱いずは、数字の䞊びを数倀ずしお比范するずいうこずです。䟋えば、 "A-21" ずいう文字列は "A-123" よりも小さいずみなされたす。

+ +

䟋

+ +

ロケヌル文字列から numeric の倀を蚭定

+ +

Unicode ロケヌル文字列仕様曞では、 numeric が衚す倀はキヌ kn に察応しおいたす。 kn はロケヌル文字列の「拡匵サブタグ」ずみなされたす。これらのサブタグは、ロケヌルに関する远加デヌタを远加するもので、拡匵キヌ -u を䜿甚しおロケヌル識別子に远加されたす。このようしお、 numeric の倀を {{jsxref("Locale/Locale", "Locale")}} コンストラクタヌに枡される初期のロケヌル識別子文字列に远加するこずができたす。 numeric の倀を蚭定するには、たず文字列に -u 拡匵キヌを远加したす。次に、 -kn 拡匵キヌを远加しお、 numeric の倀を远加しおいるこずを瀺したす。最埌に、文字列に numeric の倀を远加したす。 numeric を true に蚭定したい堎合は、単に kn キヌを远加するだけで十分です。倀を false にするには、 kn キヌの埌に "false" を指定する必芁がありたす。

+ +
let numericViaStr = new Intl.Locale("fr-Latn-FR-u-kn-false");
+console.log(numericStr.numeric); // "false" ず衚瀺
+ +

構成オブゞェクト匕数から numeric の倀を蚭定

+ +

{{jsxref("Locale/Locale", "Intl.Locale")}} コンストラクタヌには、オプションで構成オブゞェクトの匕数があり、これを䜿甚しお拡匵の皮類を枡すこずができたす。構成オブゞェクトの numeric プロパティを任意の numeric に蚭定し、コンストラクタヌに枡したす。

+ +
let numericViaObj= new Intl.Locale("en-Latn-US", {numeric: true});
+console.log(us12hour.numeric); // "true" ず衚瀺
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.numeric')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.Intl.Locale.numeric")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/region/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/region/index.html new file mode 100644 index 0000000000..d547e24b15 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/region/index.html @@ -0,0 +1,67 @@ +--- +title: Intl.Locale.prototype.region +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/region +tags: + - Internationalization + - Intl + - JavaScript + - Property + - Prototype + - Reference + - プロパティ + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/region +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.region プロパティは、ロケヌルに関連付けられた䞖界の地域 (ふ぀うは囜) 返すアクセサヌプロパティです。

+ +

解説

+ +

地域は、ロケヌルを䞖界の特定の地域に䜍眮づけるための、ロケヌル識別子の重芁な芁玠ずなりたす。ロケヌルの地域を知るこずは、ロケヌル間の違いを識別する䞊で非垞に重芁です。たずえば、むギリスずアメリカ合衆囜では英語が䜿われおいたすが、䞡囜間では綎りやその他の蚀語の慣習に違いがありたす。ロケヌルの地域を知るこずで、 JavaScript プログラマヌがサむトやアプリケヌションのコンテンツを䞖界の様々な地域から芋たずきに正しく衚瀺されるようにするのに圹立ちたす。

+ +

䟋

+ +

ロケヌル識別子の文字列匕数で地域を蚭定

+ +

地域は、有効な Unicode 蚀語識別子文字列の番目の郚分であり、これを {{jsxref("Locale/Locale", "Locale")}} コンストラクタヌに枡すロケヌル識別子文字列に远加するこずで蚭定するこずができたす。なお、地域はロケヌル識別子の必須項目ではありたせん。

+ +
let regionStr = new Intl.Locale("en-Latn-US");
+
+console.log(regionStr.region); // "US" ず衚瀺
+ +

構成オブゞェクトから地域を蚭定

+ +

{{jsxref("Locale/Locale", "Locale")}} コンストラクタヌは構成オブゞェクトを取り、これを甚いお地域のサブタグずプロパティを蚭定するこずができたす。

+ +
let regionObj = new Intl.Locale("ja-Jpan", {region: "JP"});
+
+console.log(scriptObj.script); // "JP" ず衚瀺
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.region')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.Intl.Locale.region")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/script/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/script/index.html new file mode 100644 index 0000000000..10452b6342 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/script/index.html @@ -0,0 +1,67 @@ +--- +title: Intl.Locale.prototype.script +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/script +tags: + - Internationalization + - Intl + - JavaScript + - Property + - Prototype + - Reference + - プロパティ + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/script +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.script プロパティは、ロケヌルで䜿われおいる特定の蚀語を曞くための文字䜓系を返すアクセサヌプロパティです。

+ +

解説

+ +

文字䜓系は、甚字系ず呌ばれるこずもありたすが、ロケヌルの栞ずなる属性の䞀぀です。これは、特定の蚀語を曞くために䜿甚される蚘号やグリフの集合を瀺しおいたす。䟋えば、英語の文字はラテン文字ですが、韓囜語の文字はハングルです。倚くの堎合、蚀語 (これは必須) は単䞀の文字䜓系でしか曞かれないので、文字䜓系を蚘述するこずは厳密には必芁ありたせん。この芏則には䟋倖があり、完党な Unicode 蚀語識別子を持぀ためには、可胜な限りスクリプトを瀺すこずが重芁です。

+ +

䟋

+ +

ロケヌル識別子の文字列匕数で文字䜓系を蚭定

+ +

文字䜓系は、有効な Unicode 蚀語識別子文字列の番目の郚分であり、これを {{jsxref("Locale/Locale", "Locale")}} コンストラクタヌに枡すロケヌル識別子文字列に远加するこずで蚭定するこずができたす。なお、文字䜓系はロケヌル識別子の必須項目ではありたせん。

+ +
let scriptStr = new Intl.Locale("en-Latn-US");
+
+console.log(scriptStr.script); // "Latn" ず衚瀺
+ +

構成オブゞェクトから文字䜓系を蚭定

+ +

{{jsxref("Locale/Locale", "Locale")}} コンストラクタヌは構成オブゞェクトを取り、これを甚いお文字䜓系のサブタグずプロパティを蚭定するこずができたす。

+ +
let scriptObj = new Intl.Locale("ja-JP", {script: "Jpan"});
+
+console.log(scriptObj.script); // "Jpan" ず衚瀺
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.script')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.Intl.Locale.script")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/locale/tostring/index.html b/files/ja/web/javascript/reference/global_objects/intl/locale/tostring/index.html new file mode 100644 index 0000000000..104a328f21 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/locale/tostring/index.html @@ -0,0 +1,67 @@ +--- +title: Intl.Locale.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/toString +tags: + - Intl + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/toString +--- +
{{JSRef}}
+ +

Intl.Locale.prototype.toString() は、このロケヌルの完党なロケヌル識別子文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-locale-prototype-tostring.html")}}
+ + + +

構文

+ +
locale.toString()
+ +

返倀

+ +

このロケヌルの Unicode ロケヌル識別子文字列です。

+ +

解説

+ +

Locale オブゞェクトは、抂念的な Unicode ロケヌル識別子を JavaScript で衚珟したものです。特定のロケヌルに関する情報 (蚀語、文字䜓系、カレンダヌの皮類など) を、ロケヌル識別子文字列で笊号化するこずができたす。これらのロケヌル識別子をより簡単に扱えるようにするために、 Locale オブゞェクトが JavaScript に導入されたした。 Locale オブゞェクトの toString メ゜ッドをコヌルするず、そのロケヌルの識別子文字列を返したす。 toString メ゜ッドを䜿甚するず、 Locale のむンスタンスが既存の Intl のコンストラクタヌぞの匕数ずずしお JSON におけるシリアラむズにおいお、たたはその他のコンテキストで正確な文字列衚珟が有甚な堎合に提䟛するこずができたす。

+ +

䟋

+ +
let myLocale = new Intl.Locale("ja-Jpan-JP", {hourCycle: "h24", calendar: "gregory"});
+console.log(myLocale.baseName); // "ja-Jpan-JP" ず衚瀺
+console.log(myLocale.toString()); // "ja-Jpan-JP-u-ca-gregory-hc-h24" ず衚瀺
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-Intl.Locale.prototype.toString')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.Locale.toString")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/numberformat/format/index.html b/files/ja/web/javascript/reference/global_objects/intl/numberformat/format/index.html new file mode 100644 index 0000000000..38e1b6926c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/numberformat/format/index.html @@ -0,0 +1,89 @@ +--- +title: Intl.NumberFormat.prototype.format() +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/format +tags: + - Internationalization + - Intl + - JavaScript + - Method + - NumberFormat + - Prototype + - メ゜ッド + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/format +--- +
{{JSRef}}
+ +

Intl.NumberFormat.prototype.format() メ゜ッドは、この {{jsxref("NumberFormat")}} オブゞェクトのロケヌルず敎圢オプションに埓っお数倀を敎圢したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-numberformat-prototype-format.html", "taller")}}
+ + + +

構文

+ +
numberFormat.format(number)
+ +

匕数

+ +
+
number
+
敎圢する {{jsxref("Number")}} たたは {{jsxref("BigInt")}} です。
+
+ +

解説

+ +

format ゲッタヌ関数は、この {{jsxref("NumberFormat")}} オブゞェクトのロケヌルず敎圢オプションに埓っお数倀を敎圢し、文字列に栌玍したす。

+ +

䟋

+ +

format の䜿甚

+ +

format ゲッタヌ関数を䜿甚しお単䞀の通貚倀を敎圢したしょう。こちらはロシアの䟋です。

+ +
var options = { style: 'currency', currency: 'RUB' };
+var numberFormat = new Intl.NumberFormat('ru-RU', options);
+console.log(numberFormat.format(654321.987));
+// → "654 321,99 руб."
+
+ +

format ず map の䜿甚

+ +

format ゲッタヌ関数を䜿甚しお、配列内のすべおの数倀を敎圢するこずができたす。なお、この関数は䟛絊元である {{jsxref("NumberFormat")}} に結び付けられおいるので、盎接 {{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"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl.numberformat.prototype.format', 'Intl.NumberFormat.prototype.format')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.NumberFormat.format")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.html b/files/ja/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.html new file mode 100644 index 0000000000..5d4a91fc85 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.html @@ -0,0 +1,151 @@ +--- +title: Intl.NumberFormat.prototype.formatToParts() +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/formatToParts +tags: + - Internationalization + - Intl + - JavaScript + - Method + - NumberFormat + - Prototype + - メ゜ッド + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/formatToParts +--- +
{{JSRef}}
+ +

Intl.Numberformat.prototype.formatToParts() メ゜ッドは NumberTimeFormat フォヌマッタヌによっお生成された文字列のロケヌルに応じた曞匏蚭定を可胜にしたす。

+ +

構文

+ +
Intl.NumberFormat.prototype.formatToParts(number)
+ +

匕数

+ +
+
number {{optional_inline}}
+
曞匏化する {{jsxref("Number")}} たたは {{jsxref("BigInt")}}。
+
+ +

返倀

+ +

曞匏化された数倀を含む芁玠のオブゞェクトの {{jsxref("Array")}}。

+ +

解説

+ +

formatToParts() メ゜ッドは、数倀文字列のカスタム曞匏蚭定を行うずきに䟿利です。ロケヌル固有のトヌクンを含むオブゞェクトの {{jsxref("Array")}} を返したす。その formatToParts() メ゜ッドが返す構造䜓は、次のようになりたす。

+ +
[
+  { type: "integer", value: "3" },
+  { type: "group", value: "." },
+  { type: "integer", value: "500" }
+]
+ +

可胜なタむプは以䞋のずおりです。

+ +
+
currency
+
通貚の文字列です。 "$" や "€" のような蚘号たたは "Dollar", "Euro" の文字列です。これらの文字列は currencyDisplay の特定方法に䟝存したす。
+
decimal
+
小数点区切り文字 (".")。
+
fraction
+
小数点以䞋の数倀。
+
group
+
グルヌプ区切り文字 (",")。
+
infinity
+
{{jsxref("Infinity")}} 文字列 ("∞")。
+
integer
+
敎数。
+
literal
+
曞匏蚭定された数字のリテラル文字列たたは空癜。
+
minusSign
+
マむナス蚘号の文字列 ("-")。
+
nan
+
{{jsxref("NaN")}} の文字列 ("NaN")。
+
plusSign
+
プラス蚘号の文字列 ("+")。
+
+ +
+
percentSign
+
パヌセント文字列 ("%")。
+
+ +

䟋

+ +

format ず formatToParts の比范

+ +

NumberFormat はロヌカラむズされた、盎接操䜜できない文字列を出力したす。

+ +
var number = 3500;
+
+var formatter = new Intl.NumberFormat('de-DE', {
+  style: 'currency',
+  currency: 'EUR'
+});
+
+formatter.format(number);
+// "3.500,00 €"
+
+ +

しかし、倚くのナヌザヌむンタヌフェヌスでは、この文字列の曞匏圢匏をカスタマむズしたいず芁望がありたす。 formatToParts メ゜ッドは NumberFormat フォヌマッタヌによっお生成された文字列を芁玠ごずの文字列ずしお提䟛するこずでロケヌルに応じた曞匏蚭定を可胜にしたす。

+ +
formatter.formatToParts(number);
+
+// 返倀:
+[
+  { type: "integer",  value: "3"   },
+  { type: "group",    value: "."   },
+  { type: "integer",  value: "500" },
+  { type: "decimal",  value: ","   },
+  { type: "fraction", value: "00"  },
+  { type: "literal",  value: " "   },
+  { type: "currency", value: "€"   }
+]
+
+ +

これで情報は個別に利甚可胜ずなり、カスタマむズされた方法でフォヌマットしお連結するこずができたす。䟋えば {{jsxref("Array.prototype.map()")}}, アロヌ関数, switch 文, テンプレヌトリテラル, {{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);
+
+ +

䞊蚘はformatToParts()メ゜ッドを䜿い、通貚を倪字にしたす。

+ +
console.log(numberString);
+// "3.500,00 <strong>€</strong>"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl.numberformat.prototype.formattoparts', 'Intl.NumberFormat.prototype.formatToParts')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.NumberFormat.formatToParts")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/numberformat/index.html b/files/ja/web/javascript/reference/global_objects/intl/numberformat/index.html new file mode 100644 index 0000000000..75f0c153e7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/numberformat/index.html @@ -0,0 +1,148 @@ +--- +title: Intl.NumberFormat +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat +tags: + - Class + - Internationalization + - Intl + - JavaScript + - NumberFormat + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat +--- +
{{JSRef}}
+ +

Intl.NumberFormat オブゞェクトは、蚀語に䟝存した数倀曞匏を可胜にするオブゞェクトのコンストラクタヌです。

+ +
{{EmbedInteractiveExample("pages/js/intl-numberformat.html")}}
+ + + +

コンストラクタヌ

+ +
+
{{jsxref("Intl/NumberFormat/NumberFormat", "Intl.NumberFormat()")}}
+
新しい NumberFormat オブゞェクトを生成したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("NumberFormat.supportedLocalesOf", "Intl.NumberFormat.supportedLocalesOf()")}}
+
提䟛されたロケヌルのうち、実行時の既定のロケヌルにフォヌルバックせずにサポヌトされるものを配列に玍めお返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("NumberFormat.format", "Intl.NumberFormat.prototype.format")}}
+
ゲッタヌ関数で、ロヌケルに応じお、この {{jsxref("NumberFormat")}} オブゞェクトのオプションを持぀数倀を曞匏化する関数を返したす。
+
{{jsxref("NumberFormat.formatToParts", "Intl.NumberFormat.prototype.formatToParts()")}}
+
オブゞェクトの {{jsxref("Array")}} を返し、これは専甚のロケヌルを意識した曞匏で䜿甚するこずができる郚品内の数倀文字列を衚したす。
+
{{jsxref("NumberFormat.resolvedOptions", "Intl.NumberFormat.prototype.resolvedOptions()")}}
+
ロヌケルを反映しおいるプロパティずオブゞェクトの初期化䞭に蚈算された照合オプションをもった新しいオブゞェクトを返したす。
+
+ +

䟋

+ +

基本的な䜿甚

+ +

ロヌケルを指定しない基本的な䜿い方では、既定のロヌケルずオプションで曞匏化された文字列が返されたす。

+ +
var number = 3500;
+
+console.log(new Intl.NumberFormat().format(number));
+// → '3,500' 英語(U.S.)ロケヌルの堎合
+
+ +

locales の䜿甚

+ +

この䟋では、地域による数倀曞匏の違いをいく぀か玹介したす。アプリケヌションのナヌザヌむンタヌフェむスで䜿われた蚀語曞匏を埗るには、蚀語 (およびフォヌルバック蚀語) を locales 匕数により指定しおください。

+ +
var number = 123456.789;
+
+// ドむツではカンマを小数、ピリオドを千単䜍の区切りに甚いたす
+console.log(new Intl.NumberFormat('de-DE').format(number));
+// → 123.456,789
+
+// ほずんどのアラビア語圏ではアラビア数字を甚いたす
+console.log(new Intl.NumberFormat('ar-EG').format(number));
+// → ١٢٣ـ٥ي٫٧ٚ٩
+
+// むンドでは thousands/lakh/crore 区切りが甚いられたす
+console.log(new Intl.NumberFormat('en-IN').format(number));
+// → 1,23,456.789
+
+// nu 拡匵キヌにより挢数字などの番号方匏が䜿えたす
+console.log(new Intl.NumberFormat('zh-Hans-CN-u-nu-hanidec').format(number));
+// → 䞀二䞉,四五六.䞃八九
+
+// バリ語のようにサポヌトされないかもしれない蚀語を甚いる堎合は
+// フォヌルバック蚀語を含めたす。次の䟋ではむンドネシア語です。
+console.log(new Intl.NumberFormat(['ban', 'id']).format(number));
+// → 123.456,789
+
+ +

options の䜿甚

+ +

options匕数を䜿うず結果をカスタマむズできたす。

+ +
var number = 123456.789;
+
+// 通貚フォヌマットを甚いたす
+console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number));
+// → 123.456,79 €
+
+// 日本円には小数点以䞋がありたせん
+console.log(new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }).format(number));
+// → ¥123,457
+
+// 有効数字を3桁に狭めたす
+console.log(new Intl.NumberFormat('en-IN', { maximumSignificantDigits: 3 }).format(number));
+// → 1,23,000
+
+ +

style ず unit の䜿甚

+ +
console.log(new Intl.NumberFormat("pt-PT",  {
+    style: 'unit',
+    unit: "mile-per-hour"
+}).format(50));
+// → 50 mi/h
+
+console.log((16).toLocaleString('en-GB', {
+    style: "unit",
+    unit: "liter",
+    unitDisplay: "long"
+}));
+// → 16 litres
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#numberformat-objects', 'Intl.NumberFormat')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.NumberFormat")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/numberformat/numberformat/index.html b/files/ja/web/javascript/reference/global_objects/intl/numberformat/numberformat/index.html new file mode 100644 index 0000000000..2a1932a00b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/numberformat/numberformat/index.html @@ -0,0 +1,257 @@ +--- +title: Intl.NumberFormat() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat +tags: + - Constructor + - Intl + - JavaScript + - NumberFormat + - Reference + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat +--- +
{{JSRef}}
+ +

Intl.NumberFormat() コンストラクタヌは、蚀語に䟝存した数倀の曞匏を有効にするオブゞェクトを生成したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-numberformat.html")}}
+ + + +

構文

+ +
new Intl.NumberFormat([locales[, options]])
+
+ +

匕数

+ +
+
locales {{optional_inline}}
+
+

BCP 47 蚀語タグを持぀文字列、たたはそのような文字列の配列。 locales 匕数の䞀般的な圢匏ず解釈に぀いおは、 {{jsxref("Intl", "Intl のペヌゞ", "#Locale_identification_and_negotiation", 1)}}を参照しおください。次の Unicode 拡匵キヌが蚱可されおいたす。

+ +
+
nu
+
䜿甚される数倀システムです。指定可胜な倀には "adlm", "ahom", "arab", "arabext", "bali", "beng", "bhks", "brah", "cakm", "cham", "deva", "diak", "fullwide", "gong", "gonm", "gujr", "guru", "hanidec", "hmng", "hmnp", "java", "kali", "khmr", "knda", "lana", "lanatham", "laoo", "latn", "lepc", "limb", "mathbold", "mathdbl", "mathmono", "mathsanb", "mathsans", "mlym", "modi", "mong", "mroo", "mtei", "mymr", "mymrshan", "mymrtlng", "newa", "nkoo", "olck", "orya", "osma", "rohg", "saur", "segment", "shrd", "sind", "sinh", "sora", "sund", "takr", "talu", "tamldec", "telu", "thai", "tibt", "tirh", "vaii", "wara", "wcho" がありたす。
+
+
+
options {{optional_inline}}
+
+

以䞋のプロパティのすべおたたは䞀郚を持぀オブゞェクトです。

+ +
+
compactDisplay
+
notation が "compact" の堎合のみ䜿甚されたす。 "short" (既定倀) たたは "long" のどちらかを取りたす。
+
currency
+
通貚の曞匏で䜿甚するための通貚です。利甚可胜な倀は ISO 4217 通貚コヌドであり、䟋えば米ドルは "USD"、ナヌロは "EUR"、日本円には "JPY" です。 — Current currency & funds code list を参照しおください。既定倀はありたせん。 style が "currency" である堎合、 currency プロパティを提䟛する必芁がありたす。
+
currencyDisplay
+
通貚の曞匏で通貚を衚瀺する方法です。利甚可胜な倀は次の通りです。 +
    +
  • "symbol" はロヌカラむズされた通貚蚘号、䟋えば € などを䜿甚したす。これが既定倀です。
  • +
  • "narrowSymbol" は短い圢匏の蚘号を䜿甚したす ("US$100" ではなく "$100")。
  • +
  • "code" は ISO 通貚コヌドを䜿甚したす。
  • +
  • "name" はロヌカラむズされた通貚名、䟋えば "dollar" を䜿甚したす。
  • +
+
+
currencySign
+
倚くのロケヌルでは、䌚蚈の曞匏はマむナス蚘号を远加する代わりに数倀を括匧で囲みたす。この圢匏は currencySign オプションを "accounting" に蚭定するず有効になりたす。既定倀は "standard" です。
+
localeMatcher
+
䜿甚するロケヌル比范アルゎリズムです。䜿甚可胜な倀は "lookup" および "best fit" です。既定倀は "best fit" です。このオプションに぀いおの情報は、 {{jsxref("Global_Objects/Intl", "Intl page", "#Locale_negotiation", 1)}} を参照しおください。
+
notation
+
数倀を衚瀺するための曞匏です。既定倀は "standard" です。 +
    +
  • "standard" 通垞の数倀の曞匏です。
  • +
  • "scientific" return the order-of-magnitude for formatted number.
  • +
  • "engineering" return the exponent of ten when divisible by three
  • +
  • "compact" string representing exponent, defaults is using the "short" form.
  • +
+
+
numberingSystem
+
Numbering System. Possible values include: "arab", "arabext", " bali", "beng", "deva", "fullwide", " gujr", "guru", "hanidec", "khmr", " knda", "laoo", "latn", "limb", "mlym", " mong", "mymr", "orya", "tamldec", " telu", "thai", "tibt".
+
signDisplay
+
When to display the sign for the number; defaults to "auto" +
    +
  • "auto" sign display for negative numbers only
  • +
  • "never" never display sign
  • +
  • "always" always display sign
  • +
  • "exceptZero" sign display for positive and negative numbers, but not zero
  • +
+
+
style
+
The formatting style to use , the default is "decimal". +
    +
  • "decimal" for plain number formatting.
  • +
  • "currency" for currency formatting.
  • +
  • "percent" for percent formatting
  • +
  • "unit" for unit formatting
  • +
+
+
unit
+
The unit to use in unit formatting, Possible values are core unit identifiers, defined in UTS #35, Part 2, Section 6. A subset of units from the full list was selected for use in ECMAScript. Pairs of simple units can be concatenated with "-per-" to make a compound unit. There is no default value; if the style is "unit", the unit property must be provided.
+
unitDisplay
+
The unit formatting style to use in unit formatting, the defaults is "short". +
    +
  • "long" (e.g., 16 litres)
  • +
  • "short" (e.g., 16 l)
  • +
  • "narrow" (e.g., 16l)
  • +
+
+
useGrouping
+
Whether to use grouping separators, such as thousands separators or thousand/lakh/crore separators. Possible values are true and false; the default is true.
+
+
+
+

The following properties fall into two groups: minimumIntegerDigits, minimumFractionDigits, and maximumFractionDigits in one group, minimumSignificantDigits and maximumSignificantDigits in the other. If at least one property from the second group is defined, then the first group is ignored.

+ +
+
minimumIntegerDigits
+
The minimum number of integer digits to use. Possible values are from 1 to 21; the default is 1.
+
minimumFractionDigits
+
The minimum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number and percent formatting is 0; the default for currency formatting is the number of minor unit digits provided by the ISO 4217 currency code list (2 if the list doesn't provide that information).
+
maximumFractionDigits
+
The maximum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number formatting is the larger of minimumFractionDigits and 3; the default for currency formatting is the larger of minimumFractionDigits and the number of minor unit digits provided by the ISO 4217 currency code list (2 if the list doesn't provide that information); the default for percent formatting is the larger of minimumFractionDigits and 0.
+
minimumSignificantDigits
+
The minimum number of significant digits to use. Possible values are from 1 to 21; the default is 1.
+
maximumSignificantDigits
+
The maximum number of significant digits to use. Possible values are from 1 to 21; the default is 21.
+
+
+
+ +

䟋

+ +

Basic usage

+ +

In basic use without specifying a locale, a formatted string in the default locale and with default options is returned.

+ +
let amount = 3500;
+
+console.log(new Intl.NumberFormat().format(amount));
+// → '3,500' if in US English locale
+ +

Decimal and percent formatting

+ +
let amount = 3500;
+
+new Intl.NumberFormat('en-US', {style: 'decimal'}).format(amount);
+// → '3,500'
+new Intl.NumberFormat('en-US', {style: 'percent'}).format(amount);
+// → '350,000%'
+
+ +

Unit formatting

+ +

If the style is 'unit', a unit property must be provided. Optionally, unitDisplay controls the unit formatting.

+ +
let amount = 3500;
+
+new Intl.NumberFormat('en-US', {style: 'unit', unit: 'liter'}).format(amount);
+// → '3,500 L'
+
+new Intl.NumberFormat('en-US', {style: 'unit', unit: 'liter', unitDisplay: 'long'}).format(amount);
+// → '3,500 liters'
+
+ +

Currency formatting

+ +

If the style is 'currency', a currency property must be provided. Optionally, currencyDisplay and currencySign control the unit formatting.

+ +
let amount = -3500;
+new Intl.NumberFormat('en-US', {style: 'currency', currency: 'USD'}).format(amount);
+// → '-$3,500.00'
+
+new Intl.NumberFormat('bn', {
+  style: 'currency',
+  currency: 'USD',
+  currencyDisplay: 'name'
+}).format(amount);
+// →  '-3,500.00 US dollars'
+
+new Intl.NumberFormat('bn', {
+  style: 'currency',
+  currency: 'USD',
+  currencySign: 'accounting'
+}).format(amount);
+// →  '($3,500.00)'
+
+ +

Scientific, engineering or compact notations

+ +

Scientific and compact notation are represented by the notation option and can be formatted like this:

+ +
new Intl.NumberFormat('en-US', { notation: "scientific" }).format(987654321);
+// → 9.877E8
+
+new Intl.NumberFormat('pt-PT', { notation: "scientific" }).format(987654321);
+// → 9,877E8
+
+new Intl.NumberFormat('en-GB', { notation: "engineering" }).format(987654321);
+// → 987.654E6
+
+new Intl.NumberFormat('de', { notation: "engineering" }).format(987654321);
+// → 987,654E6
+
+new Intl.NumberFormat('zh-CN', { notation: "compact" }).format(987654321);
+// → 9.9亿
+
+new Intl.NumberFormat('fr', {
+  notation: "compact",
+  compactDisplay: "long"
+}).format(987654321);
+// → 988 millions
+
+new Intl.NumberFormat('en-GB', {
+  notation: "compact",
+  compactDisplay: "short"
+}).format(987654321);
+// → 988M
+ +

Displaying signs

+ +

Display a sign for positive and negative numbers, but not zero:

+ +
new Intl.NumberFormat("en-US", {
+    style: "percent",
+    signDisplay: "exceptZero"
+}).format(0.55);
+// → '+55%'
+ +

Note that when the currency sign is "accounting", parentheses might be used instead of a minus sign:

+ +
new Intl.NumberFormat('bn', {
+  style: 'currency',
+  currency: 'USD',
+  currencySign: 'accounting',
+  signDisplay: 'always'
+}).format(-3500);
+
+// → '($3,500.00)'
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl-numberformat-constructor', 'Intl.NumberFormat constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.NumberFormat.NumberFormat")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html b/files/ja/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html new file mode 100644 index 0000000000..e32c959169 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html @@ -0,0 +1,139 @@ +--- +title: Intl.NumberFormat.prototype.resolvedOptions() +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/resolvedOptions +tags: + - Internationalization + - JavaScript + - Method + - NumberFormat + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/resolvedOptions +--- +
{{JSRef}}
+ +

ロヌケルを反映しおいるプロパティずこの{{jsxref("Global_Objects/NumberFormat", "NumberFormat")}}オブゞェクトの初期化䞭に蚈算された数倀倉換オプションをもった新しいオブゞェクトを返したす。

+ +

構文

+ +
numberFormat.resolvedOptions()
+ +

説明

+ +

ロヌケルを反映しおいるプロパティずこの{{jsxref("Global_Objects/NumberFormat", "NumberFormat")}}オブゞェクトの初期化䞭に蚈算された数倀倉換オプションをもった新しいオブゞェクトを返したす。オブゞェクトは次のプロパティを持っおいたす。:

+ +
+
locale
+
実際に䜿われおいるロヌケルに察するBCP47蚀語タグ。Unicode衚珟倀が入力BCP47蚀語タグでリク゚ストされたら、このロヌケルに察しおリク゚ストされサポヌトされおいるキヌバリュヌペアはlocaleに含たれたす。
+
numberingSystem
+
Unicode衚珟キヌ"nu"を䜿うかデフォルトずしお蚭定される倀。
+
style
+
useGrouping
+
options匕数でプロパティに察しお提䟛されるかデフォルトずしお蚭定される倀。
+
currency
+
currencyDisplay
+
options匕数でプロパティに察しお提䟛されるかデフォルトずしお蚭定される倀。styleが"currency"の堎合のみ、これらのプロパティは存圚しおいたす。
+
+ +

次の぀のプロパティのグルヌプのうちどちらかのみが含たれおいたす。:

+ +
+
minimumIntegerDigits
+
minimumFractionDigits
+
maximumFractionDigits
+
options匕数でプロパティに察しお提䟛されるかデフォルトずしお蚭定される倀。minimumSignificantDigitsたたはmaximumSignificantDigitsがoptions匕数で提䟛されなかった堎合のみ、これらのプロパティは存圚しおいたす。
+
minimumSignificantDigits
+
maximumSignificantDigits
+
options匕数でプロパティに察しお提䟛されるかデフォルトずしお蚭定される倀。 これらのプロパティのうち少なくずも぀がoptions匕数で提䟛された堎合のみ、これらのプロパティは存圚しおいたす。
+
+ +

䟋

+ +

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

仕様

+ + + + + + + + + + + + + + +
仕様状況コメント
{{SpecName('ES Int 1.0', '#sec-11.3.3', 'Intl.NumberFormat.prototype.resolvedOptions')}}{{Spec2('ES Int 1.0')}}Initial definition.
+ +

ブラりザ実装状況

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
機胜ChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
基本サポヌト{{CompatChrome("24")}}{{CompatGeckoDesktop("29")}}{{CompatIE("11")}}{{CompatOpera("15")}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
機胜AndroidChrome for AndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
基本サポヌト{{CompatNo}}{{CompatChrome("26")}}{{CompatNo}}
+ {{bug("864843")}}
{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html b/files/ja/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html new file mode 100644 index 0000000000..8108241d0b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html @@ -0,0 +1,84 @@ +--- +title: Intl.NumberFormat.supportedLocalesOf() +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/supportedLocalesOf +tags: + - Internationalization + - JavaScript + - Method + - NumberFormat +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/supportedLocalesOf +--- +
{{JSRef("Global_Objects", "NumberFormat", "Intl,Collator,DateTimeFormat")}}
+ +

抂芁

+ +

ランタむムのデフォルトロヌケルに戻る必芁なしで数倀倉換でサポヌトされる提䟛されたロヌケルを含んでいる配列を返したす。

+ +

構文

+ +
Intl.NumberFormat.supportedLocalesOf(locales[, options])
+ +

匕数

+ +
+
locales
+
BCP47蚀語タグをもった文字列、そのような文字列の配列。locales匕数の䞀般的な圢匏に察しお、{{jsxref("Global_Objects/Intl", "Intl page", "#Locale_identification_and_negotiation", 1)}}を確認しお䞋さい。
+
options
+
+

任意。次のプロパティを持぀オブゞェクト:

+ +
+
localeMatcher
+
䜿甚するロヌケルマッチングアルゎリズム。利甚可胜な倀は"lookup" や "best fit"です。デフォルトは"best fit"です。このオプションに぀いおの情報のために、{{jsxref("Global_Objects/Intl", "Intl page", "#Locale_negotiation", 1)}}を確認しお䞋さい。
+
+
+
+ +

説明

+ +

localesで提䟛された蚀語パックのサブセットをもった配列を返したす。返される蚀語タグでは、ランタむムが䜿われおいるロヌケルマッチングアルゎリズムが考慮しお数倀倉換でロヌケルをサポヌトしおいるので、デフォルトロヌケルに戻る必芁はありたせん。

+ +

䟋

+ +

䟋: supportedLocalesOfを䜿う

+ +

数倀フォヌマットで、バリ語ではなく、むンドネシア語ずドむツ語をサポヌトしおいるランタむムを仮定するず、supportedLocalesOf はむンドネシア語ずドむツ語の蚀語タグを返したす。pinyin は数倀フォヌマットには適切ではなくむンドネシア語では䜿われおいたせん。むンドネシアの特定のドむツ語はサポヌトされそうにもありたせん。"lookup"アルゎリズムの指定に泚意しお䞋さい。"best fit" はむンドネシア語はバリ語に察しお、十分にふさわしいず決定するかもしれたせん。ずいうのも、 ほずんどのバリの人はむンドネシア語も理解するからです。それゆえバリ蚀語タグも同様に返したす。

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

仕様

+ + + + + + + + + + + + + + +
仕様状況コメント
{{SpecName('ES Int 1.0', '#sec-11.2.2', 'Intl.NumberFormat.supportedLocalesOf')}}{{Spec2('ES Int 1.0')}}Initial definition.
+ +

ブラりザ実装状況

+ +
+
+ + +

{{Compat("javascript.builtins.Intl.NumberFormat.supportedLocalesOf")}}

+
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/pluralrules/index.html b/files/ja/web/javascript/reference/global_objects/intl/pluralrules/index.html new file mode 100644 index 0000000000..da798e66e2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/pluralrules/index.html @@ -0,0 +1,86 @@ +--- +title: Intl.PluralRules +slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules +tags: + - Class + - Internationalization + - Intl + - JavaScript + - PluralRules +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules +--- +
{{JSRef}}
+ +

Intl.PluralRules オブゞェクトは、耇数圢が圱響する曞匏や蚀語ルヌルを䜿甚できるようにしたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("PluralRules.PluralRules()", "Intl.PluralRules.PluralRules()")}}
+
新しい Intl.PluralRules オブゞェクトを生成したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Intl/PluralRules/supportedLocalesOf", "Intl.PluralRules.supportedLocalesOf()")}}
+
指定したロケヌルのうち、ランタむムの既定のロケヌルにフォヌルバックするこずなく察応されおいるものが入った配列を返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Intl/PluralRules/resolvedOptions", "Intl.PluralRules.prototype.resolvedOptions()")}}
+
オブゞェクトの初期化䞭に蚈算されたロケヌルずコレクションのオプションを反映したプロパティを持った新しいオブゞェクトを返したす。
+
{{jsxref("Intl/PluralRules/select", "Intl.PluralRules.prototype.select()")}}
+
ロケヌルを意識した曞匏化に䜿甚する耇数圢を瀺す {{jsxref("String")}} を返したす。
+
+ +

䟋

+ +

locales の䜿甚

+ +

この䟋では、ロヌカラむズされた耇数圢ルヌルのいく぀かをお芋せしたす。アプリケヌションのナヌザヌむンタヌフェむスで䜿う蚀語のフォヌマットを取埗するには、 locales 匕数に蚀語 (および必芁に応じおフォヌルバック蚀語) を指定しおください。

+ +
// アラビア語は別な耇数圢の芏則を持っおいたす。
+
+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'
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#pluralrules-objects', 'Intl.PluralRules')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.PluralRules")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/pluralrules/select/index.html b/files/ja/web/javascript/reference/global_objects/intl/pluralrules/select/index.html new file mode 100644 index 0000000000..af854453f6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/pluralrules/select/index.html @@ -0,0 +1,84 @@ +--- +title: Intl.PluralRules.select() +slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/select +tags: + - Internationalization + - Intl + - JavaScript + - Method + - PluralRules + - メ゜ッド + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/select +--- +
{{JSRef}}
+ +

Intl.PluralRules.prototype.select メ゜ッドは、ロケヌルを考慮した曞匏蚭定に䜿甚する耇数圢ルヌルを瀺す String を返したす。

+ +

構文

+ +
pluralCategory = pluralRule.select(number)
+ +

匕数

+ +
+
number
+
耇数のルヌルを取埗するための数倀です。
+
+ +

返倀

+ +

数字の耇数圢のカテゎリを衚す string で、 zero, one, two, few, many, other のいずれかになりたす。

+ +

解説

+ +

この関数は、 {{jsxref("PluralRules")}} オブゞェクトのロケヌルや曞匏オプションに応じお、耇数圢のカテゎリを遞択したす。

+ +

䟋

+ +

select() の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl.pluralrules.prototype.select', 'Intl.PluralRules.select()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.PluralRules.select")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.html b/files/ja/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.html new file mode 100644 index 0000000000..ea219a5f0c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.html @@ -0,0 +1,83 @@ +--- +title: Intl.PluralRules.supportedLocalesOf() +slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/supportedLocalesOf +tags: + - Internationalization + - Intl + - JavaScript + - Method + - PluralRules + - メ゜ッド + - 囜際化 +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/supportedLocalesOf +--- +
{{JSRef}}
+ +

Intl.PluralRules.supportedLocalesOf() メ゜ッドは、ランタむムの既定のロケヌルで代替する必芁なく耇数圢の曞匏で察応されおいるものを含む配列を返したす。

+ +

構文

+ +
Intl.PluralRules.supportedLocalesOf(locales[, options])
+ +

匕数

+ +
+
locales
+
BCP 47 蚀語タグを持぀文字列、たたはそのような文字列の配列です。 locales 匕数の䞀般的な圢匏に぀いおは、 {{jsxref("Intl", "Intl のペヌゞ", "#Locale_identification_and_negotiation", 1)}}を参照しおください。
+
options
+
+

省略可胜です。以䞋のプロパティを持぀こずがあるオブゞェクトです。

+ +
+
localeMatcher
+
䜿甚するロケヌルの䞀臎アルゎリズムです。指定可胜な倀は lookup および best fit で、既定倀は best fit です。このオプションの詳现は、 {{jsxref("Intl", "Intl のペヌゞ", "#Locale_negotiation", 1)}}を参照しおください。
+
+
+
+ +

返倀

+ +

指定したロケヌルタグのサブセットを衚す文字列の配列で、ランタむムの既定のロケヌルで代替する必芁なく耇数圢の曞匏で察応されおいるものを含みたす。

+ +

解説

+ +

locales で提䟛されおいる蚀語タグのサブセットを含む配列を返したす。返される蚀語タグは、ランタむムが耇数圢のロケヌルに察応しおいるもので、䜿甚しおいるロケヌル䞀臎アルゎリズムで䞀臎しおいるずみなされおいるものです。

+ +

䟋

+ +

supportedLocalesOf() の䜿甚

+ +

耇数圢の曞匏でむンドネシア語ずドむツ語に察応しおおり、バリ語に察応しおいないランタむムを想定するず、 supportedLocalesOf はむンドネシア語ずドむツ語の蚀語タグを倉曎せずに返したすが、 pinyin の照合は耇数圢の曞匏には関係なく、むンドネシア語でも䜿甚されたせん。ここでの lookup アルゎリズムの仕様に泚意しおください — バリ語話者のほずんどはむンドネシア語も理解しおいるので、 best fit のマッチャヌはむンドネシア語がバリ語に適切に䞀臎するず刀断し、バリ語の蚀語タグも返すかもしれたせん。

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

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ES Int Draft', '#sec-intl.pluralrules.supportedlocalesof', 'Intl.PluralRules.supportedLocalesOf')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.PluralRules.supportedLocalesOf")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.html b/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.html new file mode 100644 index 0000000000..8529542ad8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.html @@ -0,0 +1,109 @@ +--- +title: Intl.RelativeTimeFormat.prototype.format() +slug: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/format +tags: + - IntI + - Internationalization + - JavaScript + - Method + - Reference + - RelativeTimeFormat +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/format +--- +
{{JSRef}}
+ +

Intl.RelativeTimeFormat.prototype.format() メ゜ッドは value や unit を、この {{jsxref("Intl.RelativeTimeFormat")}} オブゞェクトのロケヌルず敎圢オプションに埓っお敎圢したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat-prototype-format.html")}}
+ + + +

構文

+ +
relativeTimeFormat.format(value, unit)
+ +

匕数

+ +
+
value
+
囜際化された盞察時間のメッセヌゞに䜿甚する数倀です。
+
+ +
+
unit
+
囜際化された盞察時間のメッセヌゞに䜿甚する単䜍です。利甚可胜な倀は、 "year", "quarter", "month", "week", "day", "hour", "minute", "second" です。耇数圢も蚱容されおいたす。
+
+ +

解説

+ +

format ゲッタヌ関数は、この {{jsxref("RelativeTimeFormat", "Intl.RelativeTimeFormat")}} オブゞェクトのロケヌルず敎圢オプションに埓っお倀や単䜍を敎圢し、文字列に栌玍したす。

+ +

䟋

+ +

基本的な format の䜿い方

+ +

以䞋の䟋は、英語を䜿甚した盞察時間のフォヌマッタヌの生成方法を瀺しおいたす。

+ +
// ロケヌルで既定倀を明確に指定しお
+// 盞察時間フォヌマッタヌを䜜成
+const rtf = new Intl.RelativeTimeFormat("en", {
+    localeMatcher: "best fit", // other values: "lookup"
+    numeric: "always", // other values: "auto"
+    style: "long", // other values: "short" or "narrow"
+});
+
+// 負の倀 (-1) を䜿った盞察時間の曞匏化
+rtf.format(-1, "day");
+// > "1 day ago"
+
+// 正の倀 (1) を䜿った盞察時間の曞匏化
+rtf.format(1, "day");
+// > "in 1 day"
+ +

auto オプションの䜿甚

+ +

numeric:auto オプションが枡された堎合は、 1 day ago や in 1 day の代わりに yesterday や tomorrow の文字列が生成されたす。これにより、出力に数倀が含たれなくなるこずがありたす。

+ +
// ロケヌルで既定倀を明確に指定しお
+// 盞察時間フォヌマッタヌを䜜成
+const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
+
+// 負の倀 (-1) を䜿った盞察時間の曞匏化
+rtf.format(-1, "day");
+// > "yesterday"
+
+// 正の倀 (1) を䜿った盞察時間の曞匏化
+rtf.format(1, "day");
+// > "tomorrow"
+
+ +

仕様曞

+ + + + + + + + + + + + + + + + +
仕様曞状態備考
{{SpecName('ES Int Draft', '#sec-Intl.RelativeTimeFormat.prototype.format', 'RelativeTimeFormat.format()')}}第 4 段階
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.format")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.html b/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.html new file mode 100644 index 0000000000..01aea3d1f9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.html @@ -0,0 +1,91 @@ +--- +title: Intl.RelativeTimeFormat.prototype.formatToParts() +slug: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts +tags: + - Internationalization + - Intl + - JavaScript + - Method + - Prototype + - RelativeTimeFormat +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts +--- +
{{JSRef}}
+ +

Intl.RelativeTimeFormat.prototype.formatToParts() メ゜ッドは、ロケヌルを考慮したカスタム曞匏蚭定に䜿甚できる盞察時間曞匏を郚品単䜍で衚すオブゞェクトの配列 ({{jsxref("Array")}}) を返したす。

+ +
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat-prototype-formattoparts.html")}}
+ + + +

構文

+ +
RelativeTimeFormat.formatToParts(value, unit)
+ +

匕数

+ +
+
value
+
囜際化された盞察時間のメッセヌゞに䜿甚する数倀です。
+
+ +
+
unit
+
囜際化された盞察時間のメッセヌゞに䜿甚する単䜍です。利甚可胜な倀は、 "year", "quarter", "month", "week", "day", "hour", "minute", "second" です。耇数圢も蚱容されおいたす。
+
+ +

返倀

+ +

曞匏化された盞察時間を郚品単䜍で含むオブゞェクトの配列 ({{jsxref("Array")}}) です。

+ +

解説

+ +
Intl.RelativeTimeFormat.prototype.formatToParts メ゜ッドは、曞匏化メ゜ッドのバヌゞョンの䞀぀で、曞匏化された数倀を他の呚囲のテキストから分離し、それぞれの構成郚品に分解した、オブゞェクトの「郚分」を衚すオブゞェクトの配列を返すものです。これらのオブゞェクトには二぀のプロパティがありたす。 type は NumberFormat の formatToParts 型で、倀は出力の構成芁玠である文字列です。もし "part" が NumberFormat から来たものであれば、曞匏化された単䜍を瀺す unit プロパティを持ちたす。
+ +

䟋

+ +

formatToParts の䜿甚

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

仕様曞

+ + + + + + + + + + + + + + + + +
仕様曞状態備考
{{SpecName('ES Int Draft', '#sec-Intl.RelativeTimeFormat.prototype.formatToParts', 'RelativeTimeFormat.formatToParts()')}}第 4 段階
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.format")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/index.html b/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/index.html new file mode 100644 index 0000000000..1e774a8b10 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/index.html @@ -0,0 +1,112 @@ +--- +title: Intl.RelativeTimeFormat +slug: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat +tags: + - Class + - Internationalization + - Intl + - JavaScript + - RelativeTimeFormat +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat +--- +
{{JSRef}}
+ +

Intl.RelativeTimeFormat オブゞェクトは蚀語に䟝存の盞察時間の曞匏化を可胜にしたす。

+ +
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat.html")}}
+ + + +

コンストラクタヌ

+ +
+
{{jsxref("Intl/RelativeTimeFormat/RelativeTimeFormat", "Intl.RelativeTimeFormat.RelativeTimeFormat()")}}
+
新しい Intl.RelativeTimeFormat オブゞェクトを生成したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Intl/RelativeTimeFormat/supportedLocalesOf", "Intl.RelativeTimeFormat.supportedLocalesOf()")}}
+
指定されたロケヌルのうち、実行時の既定のロケヌルにフォヌルバックせずに察応されるものを配列に収めお返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Intl/RelativeTimeFormat/format", "Intl.RelativeTimeFormat.prototype.format()")}}
+
value および unit を、指定された {{jsxref("Intl.RelativeTimeFormat")}} オブゞェクトのロケヌルず曞匏化オプションに埓っお曞匏化したす。
+
{{jsxref("Intl/RelativeTimeFormat/formatToParts", "Intl.RelativeTimeFormat.prototype.formatToParts()")}}
+
ロケヌル固有のカスタムフォヌマットに䜿甚可胜な盞察時間のフォヌマットを郚分的に衚珟したオブゞェクトの {{jsxref("Array")}} を返したす。
+
{{jsxref("Intl/RelativeTimeFormat/resolvedOptions", "Intl.RelativeTimeFormat.prototype.resolvedOptions()")}}
+
オブゞェクトの初期化䞭に蚈算されたロケヌルやフォヌマットのオプションを反映したプロパティを持぀新しいオブゞェクトを返したす。
+
+ +

䟋

+ +

基本的な format の䜿甚䟋

+ +

以䞋は英語の盞察時間フォヌマッタヌの䜿い方の䟋です。

+ +
// 明瀺的に枡された既定倀を䜿っお
+// ロケヌルの盞察時間を生成したす
+const rtf = new Intl.RelativeTimeFormat("en", {
+    localeMatcher: "best fit", // other values: "lookup"
+    numeric: "always", // other values: "auto"
+    style: "long", // other values: "short" or "narrow"
+});
+
+// 負数の倀 (-1) を䜿った盞察時間のフォヌマット
+rtf.format(-1, "day");
+// > "1 day ago"
+
+// 正数の倀 (1) を䜿った盞察時間のフォヌマット
+rtf.format(1, "day");
+// > "in 1 day"
+ +

formatToParts の䜿甚䟋

+ +

以䞋はフォヌマットされた郚品を返す盞察時間フォヌマッタヌの生成方法の䟋です。

+ +
const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
+
+// 日単䜍の盞察時間フォヌマット
+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" }]
+
+ +

仕様曞

+ + + + + + + + + + + + + + + + +
仕様曞状態備考
{{SpecName('ES Int Draft', '#relativetimeformat-objects', 'RelativeTimeFormat')}}第 4 段階
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Intl.RelativeTimeFormat")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/relativetimeformat/index.html b/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/relativetimeformat/index.html new file mode 100644 index 0000000000..fdc22fa753 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/intl/relativetimeformat/relativetimeformat/index.html @@ -0,0 +1,122 @@ +--- +title: Intl.RelativeTimeFormat() コンストラクタヌ +slug: >- + Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat +tags: + - Constructor + - Internationalization + - Intl + - JavaScript + - Reference + - RelativeTimeFormat +translation_of: >- + Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat +--- +
{{JSRef}}
+ +

Intl.RelativeTimeFormat() コンストラクタヌは、 {{jsxref("Intl/RelativeTimeFormat", "Intl.RelativeTimeFormat")}} オブゞェクトを生成したす。

+ +

構文

+ +
new Intl.RelativeTimeFormat([locales[, options]])
+ +

匕数

+ +
+
locales {{optional_inline}}
+
+

BCP 47 蚀語タグを持぀文字列か、そのような文字列の配列です。 locales 匕数の䞀般的な圢匏ず解釈に぀いおは、 {{jsxref("Global_Objects/Intl", "Intl ペヌゞ", "#Locale_identification_and_negotiation", 1)}}を参照しおください。

+
+
options {{optional_inline}}
+
以䞋のプロパティのうち䞀郚たたはすべおを持぀オブゞェクトです。 +
+
localeMatcher
+
䜿甚するロケヌルの䞀臎アルゎリズムです。指定可胜な倀は lookup および best fit で、既定倀は best fit です。このオプションの詳现は、 {{jsxref("Global_Objects/IntlIntl", "Intl", "#Locale_negotiation")}} を参照しおください。
+
numeric
+
メッセヌゞを出力する曞匏です。利甚可胜な倀は次の通りです。 +
    +
  • "always" (既定倀、䟋えば 1 日前)
  • +
  • "auto" (䟋えば 昚日)。 "auto" にするず、出力に垞に数倀が入るずは限りたせん。
  • +
+
+
style
+
囜際化されたメッセヌゞの長さです。利甚可胜な倀は次の通りです。 +
    +
  • "long" (既定倀、䟋えば in 1 month)
  • +
  • "short" (䟋えば in 1 mo.)
  • +
  • "narrow" (䟋えば in 1 mo.) narrow スタむルは同じロケヌルでは short スタむルず同様になるこずがありたす。
  • +
+
+
+
+
+ +

䟋

+ +

基本的な曞匏の䜿い方

+ +

以䞋の䟋は、英語を䜿甚した盞察時間のフォヌマッタヌの生成方法を瀺しおいたす。

+ +
// Create a relative time formatter in your locale
+// with default values explicitly passed in.
+const rtf = new Intl.RelativeTimeFormat("en", {
+    localeMatcher: "best fit", // other values: "lookup"
+    numeric: "always", // other values: "auto"
+    style: "long", // other values: "short" or "narrow"
+});
+
+// 負の倀 (-1) を䜿った盞察時間のフォヌマット
+rtf.format(-1, "day");
+// > "1 day ago"
+
+// 正の倀 (1) を䜿った盞察時間のフォヌマット
+rtf.format(1, "day");
+// > "in 1 day"
+ +

auto オプションの䜿甚

+ +

numeric:auto オプションが枡された堎合は、 1 day ago や in 1 day の代わりに yesterday や tomorrow の文字列が生成されたす。これにより、出力に数倀が含たれなくなるこずがありたす。

+ +
// Create a relative time formatter in your locale
+// with numeric: "auto" option value passed in.
+const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
+
+// Format relative time using negative value (-1).
+rtf.format(-1, "day");
+// > "yesterday"
+
+// Format relative time using positive day unit (1).
+rtf.format(1, "day");
+// > "tomorrow"
+
+ +

仕様曞

+ + + + + + + + + + + + + + + + +
仕様曞状態備考
{{SpecName('ES Int Draft', '#sec-intl-relativetimeformat-constructor', 'RelativeTimeFormat()')}}第 4 段階
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.RelativeTimeFormat")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/isfinite/index.html b/files/ja/web/javascript/reference/global_objects/isfinite/index.html new file mode 100644 index 0000000000..79698e2600 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/isfinite/index.html @@ -0,0 +1,88 @@ +--- +title: isFinite() +slug: Web/JavaScript/Reference/Global_Objects/isFinite +tags: + - Functions + - JavaScript + - Method + - Reference + - inFinite +translation_of: Web/JavaScript/Reference/Global_Objects/isFinite +--- +
{{jsSidebar("Objects")}}
+ +

グロヌバル関数 isFinite() は枡された倀が有限数かどうかを刀定したす。必芁に応じお、匕数はたず数倀ぞず倉換されたす。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-isfinite.html")}}
+ + + +

構文

+ +
isFinite(testValue)
+ +

匕数

+ +
+
testValue
+
有限性の評䟡を行いたい倀。
+
+ +

返倀

+ +

正たたは負の {{jsxref("Infinity")}} か {{jsxref("NaN")}} か {{jsxref("undefined")}} の堎合は false です。それ以倖の堎合は true です。

+ +

解説

+ +

isFinite はグロヌバルオブゞェクトの関数プロパティです。

+ +

この関数を䜿甚するず、ある数倀が有限数かどうかを刀定できたす。 isFinite 関数はその匕数内の数倀を調査したす。この関数は、匕数が NaN、正の無限倧、負の無限倧のいずれかの堎合に false を返し、それ以倖は true を返したす。

+ +

䟋

+ +

isFinite の䜿甚

+ +
isFinite(Infinity);  // false
+isFinite(NaN);       // false
+isFinite(-Infinity); // false
+
+isFinite(0);         // true
+isFinite(2e64);      // true
+isFinite(910);       // true
+
+isFinite(null);      // true が返される、より堅牢性の高い
+                     // Number.isFinite(null) では false ずなる
+
+isFinite('0');       // true が返される、より堅牢性の高い
+                     // Number.isFinite("0") では false ずなる
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-isfinite-number', 'isFinite')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/isnan/index.html b/files/ja/web/javascript/reference/global_objects/isnan/index.html new file mode 100644 index 0000000000..7f0de4c76e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/isnan/index.html @@ -0,0 +1,115 @@ +--- +title: isNaN() +slug: Web/JavaScript/Reference/Global_Objects/isNaN +tags: + - JavaScript + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/isNaN +--- +
{{jsSidebar("Objects")}}
+ +

isNaN() 関数は匕数が {{jsxref("NaN")}} (非数) かどうかを刀定したす。isNaN 関数の型匷制は興味深いルヌルを持぀こずに泚意しおください。倀が非数かどうかを刀定する代甚方法ずしお、ECMAScript 2015 で定矩されおいる {{jsxref("Number.isNaN()")}} が䜿甚できたす。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-isnan.html")}}
+ +

構文

+ +
isNaN(value)
+ +

匕数

+ +
+
value
+
テストされる倀。
+
+ +

返倀

+ +

もし匕数が {{jsxref("NaN")}} であるならば true を返し, そうでなければ false を返したす。

+ +

解説

+ +

isNaN 関数の必芁性

+ +

JavaScript にあるその他すべおの倀ずは違い、ある数倀が {{jsxref("NaN")}} であるかの刀定に等倀性評䟡挔算子== ず ===を䜿甚するこずはできたせん。なぜなら NaN == NaN ず NaN === NaN はどちらも false ず評䟡されるからです。そこで、isNaN が必芁ずなりたす。

+ +

NaN 倀の生成条件

+ +

NaN の倀は算術挔算の結果が未定矩か衚珟䞍可胜な倀ずなった時に生成されたす。こうした倀が垞にオヌバヌフロヌ状態を衚珟するわけではありたせん。NaN はプリミティブな数倀が利甚䞍可胜ずいった、非数倀を数倀ぞず型匷制した結果生成されるこずもありたす。

+ +

䟋えば、れロをれロ陀算した堎合の結果は NaN になりたすが、その他の数をれロ陀算した堎合は異なりたす。

+ +

特殊な堎合における厄介な動䜜

+ +

isNaN 関数の定矩はごく初期のバヌゞョン以降、数倀ではない匕数における振る舞いが分かりにくいものずなっおいたした。isNaN 関数の匕数が数倀型ではない堎合、その倀はたず数ぞず型匷制されたす。その結果の倀はその埌 {{jsxref("NaN")}} かどうかがテストされたす。このようにしお、数倀型に型匷制される際に結果が NaN ではない数倀ずなる非数倀ずりわけ型匷制されるず 0 や 1 の倀になる空文字列や真停倀プリミティブに察しおは、予想倖なこずに "false" が返されたす{{蚳泚("「NaN でない」ずいう結果から「数倀である」ず誀っお解釈されおしたう")}}。無論、䟋えば空文字列は「数ではありたせん」。この混乱は、"not a number" 数ではないずいうこの甚語が IEEE-754 浮動小数点数定矩で衚珟された数においお特別な意味があるずいう事実に起因しおいたす。この関数は、「この倀を数倀型に型匷制した堎合、IEEE-754 における 'Not A Number' ずいう倀になりたすか」ずいう質問に答えるものずしお解釈すべきです。

+ +

ECMAScript 2015 では {{jsxref("Number.isNaN()")}} 関数が存圚したす。Number.isNaN(x) は x が NaN かどうかをテストする確実な方法です。しかしながら Number.isNaN においおも、NaN の意味は単玔ではない明確な数倀的意味を持぀ "not a number" のたたです。Number.isNaN が利甚できない堎合、x が NaN かどうかを確実にテストする代わりの方法ずしお (x != x) ずいう匏がありたす。この匏の結果は信頌性のない isNaN が匕き起こす誀怜出の圱響を受けたせん。

+ +

isNaN に察する polyfill の䞀぀の䟋は以䞋のようになりたすこの polyfill は NaN が自分自身ず垞に等しくならないずいう特城を利甚しおいたす

+ +
var isNaN = function(value) {
+    var n = Number(value);
+    return n !== n;
+};
+ +

䟋

+ +
isNaN(NaN);       // true
+isNaN(undefined); // true
+isNaN({});        // true
+
+isNaN(true);      // false
+isNaN(null);      // false
+isNaN(37);        // false
+
+// strings
+isNaN('37');      // false: "37" は非数でない数倀 37 に倉換される
+isNaN('37.37');   // false: "37.37" は非数でない数倀 37.37 に倉換される
+isNaN("37,5");    // true
+isNaN('123ABC');  // true:  parseInt("123ABC") の結果は 123、しかし Number("123ABC") の結果は NaN
+isNaN('');        // false: 空文字列は非数でない 0 に倉換される
+isNaN(' ');       // false: 半角スペヌスからなる文字列は非数でない 0 に倉換される
+
+// dates
+isNaN(new Date());                // false
+isNaN(new Date().toString());     // true
+
+// isNaN が信頌性に欠ける理由ずなる誀怜出の䟋
+isNaN('blabla');   // true: "blabla" が数倀に倉換される。
+                   // 数倀ぞの倉換が倱敗し NaN が返される。
+
+ +

特殊な堎合における䟿利な動䜜

+ +

isNaN() のふるたいを考慮した別の䜿甚方法がありたす。isNaN(x) が false を返す堎合、NaN を返すこずなく算術匏内で x を䜿甚できたす。true を返す堎合、x を䜿甚するず党おの算術匏で NaN を返すこずになりたす。これは぀たり、JavaScript においお isNaN(x) == true ずいう匏は、x - 0 ずいう匏が NaN を返すかどうか、ずいうケヌスず同等であるJavaScript では x - 0 == NaN は垞に false を返すため、このこずを確認できたせんがずいうこずです。実際、isNaN(x)、isNaN(x - 0)、isNaN(Number(x))、Number.isNaN(x - 0)、そしお Number.isNaN(Number(x)) は垞に同じ倀を返し、JavaScript では isNaN(x) がこれらの条件を衚す最も短い圢匏ずなりたす。

+ +

䟋えばこの動䜜を䜿っお、ある関数ぞの匕数が算術凊理可胜か数倀ずしお利甚できるかどうかをテストするのに利甚し、そうでない堎合はデフォルト倀などを䞎えるようにできたす。この方法によりコンテキスト次第で倀を暗黙的に倉換する汎甚性の高い JavaScript 関数を䜜成できたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-isnan-number', 'isNaN')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/iterator/index.html b/files/ja/web/javascript/reference/global_objects/iterator/index.html new file mode 100644 index 0000000000..3a641ff7d9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/iterator/index.html @@ -0,0 +1,95 @@ +--- +title: Iterator +slug: Web/JavaScript/Reference/Global_Objects/Iterator +tags: + - Deprecated + - JavaScript + - Legacy Iterator + - Reference +translation_of: Archive/Web/Iterator +--- +
{{jsSidebar("Objects")}}
+ +
非暙準。 Iterator 関数は SpiderMonkey固有の機胜で、ある時点で削陀されたす。将来向きの甚途に察しお、for..ofルヌプずiterator protocolを䜿甚するこずを怜蚎しおください。
+ +

抂芁

+ +

レガシヌむテレヌタプロトコルを実装し、オブゞェクトの列挙可胜なプロパティに察しお反埩するオブゞェクトを返したす。

+ +

構文

+ +
Iterator(object, [keyOnly])
+ +

匕数

+ +
+
object
+
プロパティを反埩凊理するオブゞェクト。
+
keyOnly
+
keyOnly が truthy な倀である堎合は、Iterator.prototype.next が property_name のみ返したす。
+
+ +

説明

+ +

䜿甚方法の抂芁がIterators and Generatorsペヌゞで提䟛されおいたす。

+ +

メ゜ッド

+ +
+
Iterator.prototype.next
+
[property_name, property_value]フォヌマットで次のアむテムを返したす。それ以䞊のアむテムが存圚しない堎合、StopIterationをスロヌしたす。
+
+ +

䟋

+ +

オブゞェクトのプロパティを反埩凊理する

+ +
var a = {
+  x: 10,
+  y: 20,
+};
+var iter = Iterator(a);
+console.log(iter.next()); // ["x", 10]
+console.log(iter.next()); // ["y", 20]
+console.log(iter.next()); // throws StopIteration
+
+ +

レガシヌデストラクタfor-in文を䜿甚しおオブゞェクトのプロパティを反埩凊理する

+ +
var a = {
+  x: 10,
+  y: 20,
+};
+
+for (var [name, value] in Iterator(a)) {
+  console.log(name, value);   // x 10
+                              // y 20
+}
+
+ +

for-ofずずもにむテレヌタを䜿甚する

+ +
var a = {
+  x: 10,
+  y: 20,
+};
+
+for (var [name, value] of Iterator(a)) {  // @@iterator is used
+  console.log(name, value);   // x 10
+                              // y 20
+}
+ +

仕様

+ +

非暙準。すべおの珟圚の仕様曞でサポヌトされおいたせん。

+ +

ブラりザ実装状況

+ +

サポヌトされおいたせん。バヌゞョン 57 より前の Firefox でサポヌトしおいたした。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/json/index.html b/files/ja/web/javascript/reference/global_objects/json/index.html new file mode 100644 index 0000000000..a6aced23b1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/json/index.html @@ -0,0 +1,161 @@ +--- +title: JSON +slug: Web/JavaScript/Reference/Global_Objects/JSON +tags: + - JSON + - JavaScript + - Namespace + - Object + - Reference + - 名前空間 +translation_of: Web/JavaScript/Reference/Global_Objects/JSON +--- +
{{JSRef}}
+ +

JSON オブゞェクトは、 JavaScript Object Notation ({{glossary("JSON")}}) をパヌスするメ゜ッドや、倀を JSON に倉換するメ゜ッドを持ちたす。これは呌び出しや構築をするこずができず、たた2぀のメ゜ッドプロパティを陀いお、それ自身に興味深い機胜性はありたせん。

+ +

JavaScript ず JSON の違い

+ +

JSON は、オブゞェクト、配列、数倀、文字列、真停倀、そしお {{jsxref("null")}} をシリアラむズする構文です。これは JavaScript の構文に基づいおいたすが、区別されるものです。ある JavaScript が JSON であるわけではありたせん。

+ +
+
Objects ず Arrays
+
プロパティ名は二重匕甚笊で括った文字列にしなければなりたせん。たた、末尟にカンマを眮いおはいけたせん。
+
Numbers
+
先頭にれロを眮くこずは犁止されおいたす。たた、小数点は1桁以䞊の数字の埌ろに眮かなければなりたせん。 NaN ず Infinity には察応しおいたせん。
+
あらゆる JSON のテキストは有効な JavaScript の匏です...
+
...ただし、 proposal to make all JSON text valid ECMA-262 を実装した JavaScript ゚ンゞンのみでの話です。この提案を実装しおいない゚ンゞンでは、 U+2028 LINE SEPARATOR ず U+2029 PARAGRAPH SEPARATOR は JSON の文字列リテラルずプロパティのキヌでは蚱されたすが、これらの機胜を JavaScript 文字列リテラルの䞭で䜿甚するず {{jsxref("SyntaxError")}} になりたす。
+
+ +

{{jsxref("JSON.parse()")}} が文字列を JSON ずしお解釈し、 {{jsxref("eval")}} が文字列を JavaScript ずしお実行するこの䟋を考えおみおください。

+ +
let code = '"\u2028\u2029"'
+JSON.parse(code)  // どの゚ンゞンでも "\u2028\u2029" ず評䟡される
+eval(code)        // 叀い゚ンゞンでは SyntaxError が発生する
+
+ +

他の違いずしおは、二重匕甚笊で囲たれた文字列のみを蚱可しおいるこずや、 {{jsxref("undefined")}} やコメントの芏定がないこずなどが挙げられたす。 JSON に基づいたより人間に優しい蚭定フォヌマットを䜿いたい堎合、 Babel コンパむラヌによっお䜿われる JSON5 ず、より䞀般的に䜿われる YAML がありたす。

+ +

JSON の完党な構文

+ +

JSON の完党な構文は以䞋のずおりです。

+ +
JSON = null
+    or true or false
+    or JSONNumber
+    or JSONString
+    or JSONObject
+    or JSONArray
+
+JSONNumber = - PositiveNumber
+          or PositiveNumber
+PositiveNumber = DecimalNumber
+              or DecimalNumber . Digits
+              or DecimalNumber . Digits ExponentPart
+              or DecimalNumber ExponentPart
+DecimalNumber = 0
+             or OneToNine Digits
+ExponentPart = e Exponent
+            or E Exponent
+Exponent = Digits
+        or + Digits
+        or - Digits
+Digits = Digit
+      or Digits Digit
+Digit = 0 through 9
+OneToNine = 1 through 9
+
+JSONString = ""
+          or " StringCharacters "
+StringCharacters = StringCharacter
+                or StringCharacters StringCharacter
+StringCharacter = any character
+                  except " or \ or U+0000 through U+001F
+               or EscapeSequence
+EscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \t
+              or \u HexDigit HexDigit HexDigit HexDigit
+HexDigit = 0 through 9
+        or A through F
+        or a through f
+
+JSONObject = { }
+          or { Members }
+Members = JSONString : JSON
+       or Members , JSONString : JSON
+
+JSONArray = [ ]
+         or [ ArrayElements ]
+ArrayElements = JSON
+             or ArrayElements , JSON
+
+ +

重芁でない{{glossary("whitespace", "ホワむトスペヌス")}}は、基本的に任意の堎所に眮くこずができたすが、 JSONNumber (数倀に空癜を含んではいけたせん) や JSONString (䞀臎する文字であるず解釈されるか、゚ラヌが発生したす) の内郚を陀きたす。ホワむトスペヌスずしお有効な文字はタブ文字 (U+0009)、キャリッゞリタヌン (U+000D)、ラむンフィヌド (U+000A)、空癜 (U+0020) のみです。

+ +

静的メ゜ッド

+ +
+
{{jsxref("JSON.parse()", "JSON.parse(text[, reviver])")}}
+
文字列 text を JSON ずしお解析し、オプションで生成された倀ずそのプロパティを倉換し、倀を返したす。 JavaScript ず JSON の違いに関連するものを含め、 JSON の構文に違反するず {{jsxref("SyntaxError")}} が発生したす。 reviver オプションを䜿甚するず、他のデヌタ型を衚すために䜿われた replacer を解釈するこずができたす。
+
{{jsxref("JSON.stringify()", "JSON.stringify(value[, replacer[, space]])")}}
+
指定した倀に察応する JSON 文字列を返したす。オプションで、特定のプロパティのみを含むか、ナヌザヌ定矩の方法でプロパティ倀を眮き換えるこずもできたす。既定では、すべおの {{jsxref("undefined")}} のむンスタンスは {{jsxref("null")}} に眮き換えられ、その他の察応しおいないネむティブデヌタ型は打ち切られたす。 replacer オプションでは、他の動䜜を指定するこずができたす。
+
+ +

䟋

+ +

JSONの䟋

+ +
{
+  "browsers": {
+    "firefox": {
+      "name": "Firefox",
+      "pref_url": "about:config",
+      "releases": {
+        "1": {
+          "release_date": "2004-11-09",
+          "status": "retired",
+          "engine": "Gecko",
+          "engine_version": "1.7"
+        }
+      }
+    }
+  }
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-json-object', 'JSON')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + + +

ツヌル

+ + diff --git a/files/ja/web/javascript/reference/global_objects/json/parse/index.html b/files/ja/web/javascript/reference/global_objects/json/parse/index.html new file mode 100644 index 0000000000..bb6736a553 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/json/parse/index.html @@ -0,0 +1,219 @@ +--- +title: JSON.parse() +slug: Web/JavaScript/Reference/Global_Objects/JSON/parse +tags: + - ECMAScript 5 + - JSON + - JavaScript + - Method + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/JSON/parse +--- +
{{JSRef}}
+ +

JSON.parse() メ゜ッドは文字列を JSON ずしお解析し、文字列によっお蚘述されおいる JavaScript の倀やオブゞェクトを構築したす。任意の reviver 関数で、生成されたオブゞェクトが返される前に倉換を実行するこずができたす。

+ +
{{EmbedInteractiveExample("pages/js/json-parse.html")}}
+ + + +

構文

+ +
JSON.parse(text[, reviver])
+ +

匕数

+ +
+
text
+
JSON ずしお解析する文字列。JSON の構文の説明は {{jsxref("JSON")}} オブゞェクトを参照しおください。
+
reviver {{optional_inline}}
+
もし関数である堎合、解析により䜜り出された元の倀を、オブゞェクトを返す前に倉換する方法を指瀺したす。
+
+ +

返倀

+ +

{{jsxref("Object")}}, {{jsxref("Array")}}, 文字列, 数倀, 論理倀, null 倀のいずれかで、指定された JSON の text に察応する倀です。

+ +

䟋倖

+ +

解析する文字列が有効な JSON でない堎合、{{jsxref("SyntaxError")}} 䟋倖が発生したす。

+ +

ポリフィル

+ +
// From https://github.com/douglascrockford/JSON-js/blob/master/json2.js
+if (typeof JSON.parse !== "function") {
+    var rx_one = /^[\],:{}\s]*$/;
+    var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
+    var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
+    var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
+    var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+    JSON.parse = function(text, reviver) {
+
+        // The parse method takes a text and an optional reviver function, and returns
+        // a JavaScript value if the text is a valid JSON text.
+
+        var j;
+
+        function walk(holder, key) {
+
+            // The walk method is used to recursively walk the resulting structure so
+            // that modifications can be made.
+
+            var k;
+            var v;
+            var value = holder[key];
+            if (value && typeof value === "object") {
+                for (k in value) {
+                    if (Object.prototype.hasOwnProperty.call(value, k)) {
+                        v = walk(value, k);
+                        if (v !== undefined) {
+                            value[k] = v;
+                        } else {
+                            delete value[k];
+                        }
+                    }
+                }
+            }
+            return reviver.call(holder, key, value);
+        }
+
+
+        // Parsing happens in four stages. In the first stage, we replace certain
+        // Unicode characters with escape sequences. JavaScript handles many characters
+        // incorrectly, either silently deleting them, or treating them as line endings.
+
+        text = String(text);
+        rx_dangerous.lastIndex = 0;
+        if (rx_dangerous.test(text)) {
+            text = text.replace(rx_dangerous, function(a) {
+                return (
+                    "\\u" +
+                    ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
+                );
+            });
+        }
+
+        // In the second stage, we run the text against regular expressions that look
+        // for non-JSON patterns. We are especially concerned with "()" and "new"
+        // because they can cause invocation, and "=" because it can cause mutation.
+        // But just to be safe, we want to reject all unexpected forms.
+
+        // We split the second stage into 4 regexp operations in order to work around
+        // crippling inefficiencies in IE's and Safari's regexp engines. First we
+        // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
+        // replace all simple value tokens with "]" characters. Third, we delete all
+        // open brackets that follow a colon or comma or that begin the text. Finally,
+        // we look to see that the remaining characters are only whitespace or "]" or
+        // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.
+
+        if (
+            rx_one.test(
+                text
+                .replace(rx_two, "@")
+                .replace(rx_three, "]")
+                .replace(rx_four, "")
+            )
+        ) {
+
+            // In the third stage we use the eval function to compile the text into a
+            // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
+            // in JavaScript: it can begin a block or an object literal. We wrap the text
+            // in parens to eliminate the ambiguity.
+
+            j = eval("(" + text + ")");
+
+            // In the optional fourth stage, we recursively walk the new structure, passing
+            // each name/value pair to a reviver function for possible transformation.
+
+            return (typeof reviver === "function") ?
+                walk({
+                    "": j
+                }, "") :
+                j;
+        }
+
+        // If the text is not JSON parseable, then a SyntaxError is thrown.
+
+        throw new SyntaxError("JSON.parse");
+    };
+}
+ +

䟋

+ +

JSON.parse() の䜿甚

+ +
JSON.parse('{}');              // {}
+JSON.parse('true');            // true
+JSON.parse('"foo"');           // "foo"
+JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
+JSON.parse('null');            // null
+
+ +

reviver 匕数の䜿甚

+ +

reviver が指定された堎合、解析によっお蚈算された倀は、オブゞェクトを返す前に倉換されたす。正確に蚀えば、蚈算された倀ずそのすべおのプロパティ最もネストされたプロパティから始たり、元の倀ぞず進みたすはそれぞれ reviver を通しお倉換されたす。reviver は凊理されるプロパティを含むオブゞェクトが this ずしお、たた文字列のプロパティ名ずプロパティの倀を匕数ずしお呌び出されたす。もし reviver 関数が {{jsxref("undefined")}} を返したり、䜕の倀も返さなかったり䟋えば実行が関数の終わりで{{蚳泚('return 文によっおではなくお')}}終了した堎合した堎合、そのプロパティはオブゞェクトから削陀されたす。そうでなければそのプロパティはその戻り倀ずしお再定矩されたす。

+ +

もし reviver が䞀郚の倀だけを倉換しお他を倉換しないのであれば、必ずすべおの倉換されない倀をそのたた返すようにしたす。そうしなければ、それらの倀は結果のオブゞェクトから削陀されるでしょう。

+ +
JSON.parse('{"p": 5}', (key, value) =>
+  typeof value === 'number'
+    ? value * 2 // 数倀ならば倀の2倍を返す
+    : value     // それ以倖ならば倉曎しない
+);
+
+// { p: 10 }
+
+JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => {
+  console.log(key); // 珟圚のプロパティ名を出力する。最埌は ""。
+  return value;     // 倉曎されおいないプロパティの倀を返す。
+});
+
+// 1
+// 2
+// 4
+// 6
+// 5
+// 3
+// ""
+
+ +

JSON.parse() は末尟のカンマを蚱容しない

+ +
// 䞡方ずも SyntaxError をスロヌする
+JSON.parse('[1, 2, 3, 4, ]');
+JSON.parse('{"foo" : 1, }');
+
+ +

JSON.parse() は単䞀匕甚笊を蚱容しない

+ +
// SyntaxError が発生
+JSON.parse("{'foo': 1}");
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-json.parse', 'JSON.parse')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.JSON.parse")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/json/stringify/index.html b/files/ja/web/javascript/reference/global_objects/json/stringify/index.html new file mode 100644 index 0000000000..ad2a1cd2ee --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/json/stringify/index.html @@ -0,0 +1,364 @@ +--- +title: JSON.stringify() +slug: Web/JavaScript/Reference/Global_Objects/JSON/stringify +tags: + - JSON + - JavaScript + - Method + - Objects + - Reference + - stringify +translation_of: Web/JavaScript/Reference/Global_Objects/JSON/stringify +--- +
{{JSRef}}
+ +

JSON.stringify() メ゜ッドは、ある JavaScript のオブゞェクトや倀を JSON 文字列に倉換したす。眮き換え関数を指定しお倀を眮き換えたり、眮き換え配列を指定しお指定されたプロパティのみを含むようにしたりするこずもできたす。

+ +
{{EmbedInteractiveExample("pages/js/json-stringify.html")}}
+ + + +

構文

+ +
JSON.stringify(value[, replacer[, space]])
+ +

匕数

+ +
+
value
+
JSON 文字列に倉換する倀です。
+
replacer {{optional_inline}}
+
文字列化の手順の挙動を倉曎する関数、たたは倀のオブゞェクトを JSON 文字列に含めるプロパティを遞択する蚱可リストずしお機胜する {{JSxRef("String")}} ず {{JSxRef("Number")}} の配列。もしこの倀が {{JSxRef("null")}} であるか提䟛されなかった堎合は、結果の文字列にオブゞェクトのすべおのプロパティが含たれたす。
+
space {{optional_inline}}
+
出力する JSON 文字列に可読性を目的に空癜を挿入するために䜿う {{JSxRef("String")}} たたは {{JSxRef("Number")}} オブゞェクトです。 +

これが Number のずきは、空癜ずしお䜿う空癜文字の数を瀺したす。この数の䞊限は10です (それより倧きい数倀は、単に 10 ずなりたす)。 1 より小さい倀は空癜を䜿わないこずを瀺したす。

+ +

これが String のずきは、その文字列 (10文字より長い堎合はその最初の10文字) が空癜ずしお䜿われたす。もしこの匕数が提䟛されない (たたは null である) 堎合は、空癜は䜿甚されたせん。

+
+
+ +

返倀

+ +

䞎えられた倀を衚珟する JSON 文字列。

+ +

䟋倖

+ + + +

説明

+ +

JSON.stringify() は倀をそれを衚す JSON 衚蚘に倉換したす。

+ + + +

䟋

+ +

JSON.stringify の䜿甚

+ +
JSON.stringify({});                    // '{}'
+JSON.stringify(true);                  // 'true'
+JSON.stringify('foo');                 // '"foo"'
+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-02T15:04:05.000Z"'
+
+JSON.stringify({ x: 5, y: 6 });
+// '{"x":5,"y":6}'
+JSON.stringify([new Number(3), new String('false'), new Boolean(false)]);
+// '[3,"false",false]'
+
+// 文字列がキヌずなった配列芁玠は列挙可胜ではなく、 JSON では意味をなさない
+let a = ['foo', 'bar'];
+a['baz'] = 'quux';      // a: [ 0: 'foo', 1: 'bar', baz: 'quux' ]
+JSON.stringify(a);
+// '["foo","bar"]'
+
+JSON.stringify({ x: [10, undefined, function(){}, Symbol('')] });
+// '{"x":[10,null,null,null]}'
+
+// 暙準デヌタ構造
+JSON.stringify([new Set([1]), new Map([[1, 2]]), new WeakSet([{a: 1}]), new WeakMap([[{a: 1}, 2]])]);
+// '[{},{},{},{}]'
+
+// 型付き配列
+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'
+
+// シンボル:
+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
+
+// 列挙可胜でないプロパティ:
+JSON.stringify( Object.create(null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } }) );
+// '{"y":"y"}'
+
+
+// BigInt の倀は䟋倖が発生
+JSON.stringify({x: 2n});
+// TypeError: BigInt value can't be serialized in JSON
+
+ +

replacer 匕数

+ +

replacer 匕数は関数たたは配列です。

+ +

関数の堎合、 key ず文字列化される value の2぀の匕数を取りたす。キヌをも぀オブゞェクトが replacer では this 匕数ずしお提䟛されたす。

+ +

最初、 replacer 関数が、文字列化されるオブゞェクト自䜓を衚すキヌずしお空文字列で呌び出されたす。それから、文字列化されるオブゞェクトのそれぞれのプロパティや配列に察しお呌び出されたす。

+ +

これは、 JSON 文字列に加えるべき倀を次のように返したす。

+ + + +
+

泚: replacer 関数を䜿甚しお配列から倀を削陀するこずはできたせん。 undefined や関数を返すず、代わりに null が䜿甚されたす。

+
+ +
+

泚: replacer が、オブゞェクトが初期状態であるか、空文字列のキヌを持぀プロパティであるかを刀別するには (どちらの堎合もキヌが空文字列になり、オブゞェクトが倀になる可胜性があるので)、繰り返し回数を远跡しおおく必芁がありたす (繰り返しが1回を超えた堎合、空文字列のキヌであるこずが分かりたす)。

+
+ +

関数ずしおの replacer の䟋

+ +
function replacer(key, value) {
+  // Filtering out properties
+  if (typeof value === 'string') {
+    return undefined;
+  }
+  return value;
+}
+
+var foo = {foundation: 'Mozilla', model: 'box', week: 45, transport: 'car', month: 7};
+JSON.stringify(foo, replacer);
+// '{"week":45,"month":7}'
+
+ +

配列ずしおの replacer の䟋

+ +

replacer が配列である堎合、その配列の倀は結果の JSON 文字列に含めるプロパティの名前を瀺したす。

+ +
JSON.stringify(foo, ['week', 'month']);
+// '{"week":45,"month":7}', "week" ず "month" プロパティだけが保持される
+
+ +

space 匕数

+ +

space 匕数で最終的な文字列での空癜の数を調敎できたす。

+ + + +
JSON.stringify({ a: 2 }, null, ' ');
+// '{
+//  "a": 2
+// }'
+
+ +

タブ文字を䜿うず、暙準的な衚瀺の敎圢ず同様になりたす。

+ +
JSON.stringify({ uno: 1, dos: 2 }, null, '\t');
+// returns the string:
+// '{
+//     "uno": 1,
+//     "dos": 2
+// }'
+
+ +

toJSON() の挙動

+ +

文字列化されるオブゞェクトに toJSON ずいう名前の倀に関数を持ったプロパティがある堎合、その toJSON() メ゜ッドで JSON の文字列化の挙動をカスタマむズできたす。シリアラむズされるオブゞェクトの代わりに、その toJSON() メ゜ッドが呌び出されたずきの返倀がシリアラむズされたす。 JSON.stringify() は toJSON に以䞋のどれか1぀の匕数を぀けお呌び出したす。

+ + + +

䟋

+ +
var obj = {
+    data: 'data',
+
+    toJSON (key) {
+        if (key)
+            return `Now I am a nested object under key '${key}'`;
+        else
+            return this;
+    }
+};
+
+JSON.stringify(obj);
+// '{"data":"data"}'
+
+JSON.stringify({ obj }); // Shorthand property names (ES2015).
+// '{"obj":"Now I am a nested object under key 'obj'"}'
+
+JSON.stringify([ obj ]);
+// '["Now I am a nested object under key '0'"]'
+
+ +

埪環参照をシリアラむズした堎合の JSON.stringify() に関する問題

+ +

JSON 圢匏はオブゞェクト参照に察応しおいないため (IETF 草皿はありたすが)、埪環参照のあるオブゞェクトを゚ンコヌドしようずするず {{JSxRef("TypeError")}} が発生したす。

+ +
const circularReference = {};
+circularReference.myself = circularReference;
+
+// 埪環参照をシリアラむズするず "TypeError: cyclic object value" が発生
+JSON.stringify(circularReference);
+
+ +

埪環参照をシリアラむズするためには、これに察応したラむブラリを䜿甚したり (Douglas Crockford による cycle.js など)、自分自身で解決策を実装したりする方法がありたす。埪環参照を探玢しおシリアラむズされた倀に眮き換える (たたは削陀する) 必芁があるでしょう。

+ +

JavaScript ずしおの䜿甚に際しおのそのたたの JSON.stringify の問題

+ +

埓来、 JSON は JavaScript の完党に厳密なサブセットではありたせんでした。文字コヌドポむント U+2028 LINE SEPARATOR (改行) ず U+2029 PARAGRAPH SEPARATOR (改段萜) は JSON テキスト内の文字列リテラルやプロパティ名に䜿甚するこずができたす。しかし、 JavsScript のテキスト内で同様の文脈では䜿甚するこずができず、 Unicode ゚スケヌプを䜿甚した \u2028 および \u2029 しか䜿うこずができたせん。これは最近倉曎され、どちらのコヌドポむントも JSON ず JavaScript の䞡方の文字列で䜿甚するこずができるようになりたした。

+ +

したがっお、叀い JavaScript ゚ンゞンずの互換性が必芁な堎合は、 JSON.stringify から返された文字列を JavaScript の文字列に代入するために、盎接 eval や new Function に枡したり、 JSONP URL の䞀郚ずしお甚いたりするのは危険です。次のナヌティリティを䜿甚するこずができたす。

+ +
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)
+};
+try {
+    eval('(' + JSON.stringify(s) + ')');
+} catch (e) {
+    console.log(e); // "SyntaxError: unterminated string literal"
+}
+
+// catch する必芁はない
+eval('(' + jsFriendlyJSONStringify(s) + ')');
+
+// Firefox での console.log はコン゜ヌルにログ出力をする堎合
+//   Unicode ゚スケヌプを解陀するので、alert を䜿う
+alert(jsFriendlyJSONStringify(s)); // {"a":"\u2028","b":"\u2029"}
+
+ +
+

泚: 配列以倖のオブゞェクトのプロパティでは、特定の順番で文字列化されるこずは保蚌されおいたせん。文字列化された同じオブゞェクトの䞭でプロパティの順番に䟝存しないようにしおください。

+
+ +
var a = JSON.stringify({ foo: "bar", baz: "quux" })
+//'{"foo":"bar","baz":"quux"}'
+var b = JSON.stringify({ baz: "quux", foo: "bar" })
+//'{"baz":"quux","foo":"bar"}'
+console.log(a !== b) // true
+
+// 䞀郚の蚘憶関数は JSON.stringify を䜿甚しお匕数をシリアラむズしおおり、
+// 䞊蚘のような同じオブゞェクトに出䌚った時にキャッチし損ねるこずがありたす
+
+ +

localStorage で JSON.stringify() を䜿った䟋

+ +

ナヌザヌが䜜成したオブゞェクトを栌玍し、ブラりザヌが閉じた埌に埩元できるようにしたい堎合は以䞋の䟋が JSON.stringify() を適甚した暡範䟋です。

+ +
// JSON の䞀䟋を䜜成
+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 });
+
+// JSON.stringify() で JSON 文字列に倉換しおから
+// session の名前で localStorage に保存
+localStorage.setItem('session', JSON.stringify(session));
+
+// JSON.stringify() で生成されお localStorage に保存された文字列を
+// 再び JSON オブゞェクトに倉換する方法の䟋
+var restoredSession = JSON.parse(localStorage.getItem('session'));
+
+// ここで倉数 restoredSession には localStorage に保存されおいた
+// オブゞェクトが入っおいる
+console.log(restoredSession);
+
+ +

Well-formed JSON.stringify()

+ +

well-formed JSON.stringify 仕様を実装しおいる゚ンゞンは、サロゲヌト文字 、 U+D800 から U+DFFF たでのすべおのコヌドポむントを、リテラルではなく Unicode ゚スケヌプシヌケンスを䜿甚しお文字列化したす。この倉曎前は、入力にサロゲヌト文字が含たれおいる堎合、 JSON.stringify はサロゲヌト文字をそのたた出力しおいたした。このような文字列は劥圓な UTF-8 たたは UTF-16 で゚ンコヌドされおいたせんでした。

+ +
JSON.stringify("\uD800"); // '"ᅵ"'
+ +

しかし、この倉曎で JSON.stringify は lone surrogates を JSON ゚スケヌプシヌケンスによっお衚すようになり、劥圓な UTF-8 たたは UTF-16 で゚ンコヌドするこずができるようになりたした。

+ +
JSON.stringify("\uD800"); // '"\\ud800"'
+ +

この倉曎では、サロゲヌト文字の Unicode ゚スケヌプをサロゲヌト文字ず同䞀のものずしお扱うため、 JSON.stringify の結果を、 JSON テキストを劥圓である限りどのようなものでも受け付ける JSON.parse のような API に枡したずきに埌方互換性がありたす。 JSON.stringify の結果を盎接解析する堎合のみ、 JSON.stringify がこれらのコヌドポむントに察しお2通りの゚ンコヌディングをする可胜性があるこずに泚意しお扱う必芁がありたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-json.stringify', 'JSON.stringify')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.JSON.stringify")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/@@iterator/index.html b/files/ja/web/javascript/reference/global_objects/map/@@iterator/index.html new file mode 100644 index 0000000000..961f7acd85 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/@@iterator/index.html @@ -0,0 +1,95 @@ +--- +title: 'Map.prototype[@@iterator]()' +slug: Web/JavaScript/Reference/Global_Objects/Map/@@iterator +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@iterator +--- +
{{JSRef}}
+ +

@@iterator プロパティの初期倀は、 {{jsxref("Map.prototype.entries()", "entries")}} メ゜ッドの初期倀ず同じ関数オブゞェクトです。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-@@iterator.html")}}
+ + + +

構文

+ +
myMap[Symbol.iterator]
+ +

返倀

+ +

マップの iterator 関数で、既定では {{jsxref("Map.prototype.entries()", "entries()")}} 関数です。

+ +

䟋

+ +

[@@iterator]() の䜿甚

+ +
const myMap = new Map()
+myMap.set('0', 'foo')
+myMap.set(1, 'bar')
+myMap.set({}, 'baz')
+
+const mapIter = myMap[Symbol.iterator]()
+
+console.log(mapIter.next().value) // ["0", "foo"]
+console.log(mapIter.next().value) // [1, "bar"]
+console.log(mapIter.next().value) // [Object, "baz"]
+
+ +

[@@iterator]() ず for..of の䜵甚

+ +
const myMap = new Map()
+myMap.set('0', 'foo')
+myMap.set(1, 'bar')
+myMap.set({}, 'baz')
+
+for (const entry of myMap) {
+  console.log(entry)
+}
+// ["0", "foo"]
+// [1, "bar"]
+// [{}, "baz"]
+
+for (const [key, value] of myMap) {
+  console.log(`${key}: ${value}`)
+}
+// 0: foo
+// 1: bar
+// [Object]: baz
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype-@@iterator', 'Map.prototype[@@iterator]()')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.@@iterator")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/@@species/index.html b/files/ja/web/javascript/reference/global_objects/map/@@species/index.html new file mode 100644 index 0000000000..4a428acdad --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/@@species/index.html @@ -0,0 +1,64 @@ +--- +title: 'get Map[@@species]' +slug: Web/JavaScript/Reference/Global_Objects/Map/@@species +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@species +--- +
{{JSRef}}
+ +

Map[@@species] アクセサヌプロパティは、 Map コンストラクタヌを返したす。

+ +

解説

+ +

species アクセサヌプロパティは Map オブゞェクトのデフォルトコンストラクタヌを返したす。サブクラスのコンストラクタヌは、コンストラクタヌに代入しお倉曎するこずによりオヌバヌラむドするこずができたす。

+ +

䟋

+ +

通垞のオブゞェクトの species

+ +

species プロパティはデフォルトコンストラクタヌ関数を返したすので、 Map オブゞェクトには Map コンストラクタヌを返したす。

+ +
Map[Symbol.species]; // function Map()
+ +

掟生オブゞェクトの species

+ +

掟生したコレクションオブゞェクトの䞭では (䟋えばカスタムマップである MyMap)、 MyMap の species は MyMap コンストラクタヌになっおいたす。しかし、これをオヌバヌラむドしお、掟生クラスのメ゜ッド内で芪の Map オブゞェクトを返したい堎合がありたす。

+ +
class MyMap extends Map {
+  // Overwrite MyMap species to the parent Map constructor
+  static get [Symbol.species]() { return Map; }
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-map-@@species', 'get Map [ @@species ]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Map.@@species")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/@@tostringtag/index.html b/files/ja/web/javascript/reference/global_objects/map/@@tostringtag/index.html new file mode 100644 index 0000000000..74da140e51 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/@@tostringtag/index.html @@ -0,0 +1,60 @@ +--- +title: 'Map.prototype[@@toStringTag]' +slug: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Property + - Prototype + - Reference + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag +--- +
{{JSRef}}
+ +

Map[@@toStringTag] プロパティは、 "Map" の初期倀を持ちたす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-@@tostringtag.html","shorter")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +

構文

+ +
Map[Symbol.toStringTag]
+ +

䟋

+ +

toStringTag の䜿甚

+ +
Object.prototype.toString.call(new Map()) // "[object Map]"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype-@@tostringtag', 'Map.prototype[@@toStringTag]')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.@@toStringTag")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/clear/index.html b/files/ja/web/javascript/reference/global_objects/map/clear/index.html new file mode 100644 index 0000000000..266ab6f9fe --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/clear/index.html @@ -0,0 +1,72 @@ +--- +title: Map.prototype.clear() +slug: Web/JavaScript/Reference/Global_Objects/Map/clear +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/clear +--- +
{{JSRef}}
+ +

clear() メ゜ッドは Map オブゞェクトからすべおの芁玠を削陀したす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-clear.html")}}
+ + + +

構文

+ +
myMap.clear();
+
+ +

返倀

+ +

{{jsxref("undefined")}}.

+ +

䟋

+ +

clear() の䜿甚

+ +
var myMap = new Map();
+myMap.set('bar', 'baz');
+myMap.set(1, 'foo');
+
+myMap.size;       // 2
+myMap.has('bar'); // true
+
+myMap.clear();
+
+myMap.size;       // 0
+myMap.has('bar')  // false
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype.clear', 'Map.prototype.clear')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.clear")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/delete/index.html b/files/ja/web/javascript/reference/global_objects/map/delete/index.html new file mode 100644 index 0000000000..30dcc4c848 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/delete/index.html @@ -0,0 +1,75 @@ +--- +title: Map.prototype.delete() +slug: Web/JavaScript/Reference/Global_Objects/Map/delete +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/delete +--- +
{{JSRef}}
+ +

delete() メ゜ッドは Map オブゞェクトから特定の芁玠を削陀したす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-delete.html")}}
+ + + +

構文

+ +
myMap.delete(key);
+ +

匕数

+ +
+
key
+
Map オブゞェクトから削陀する芁玠のキヌです。
+
+ +

返倀

+ +

Map オブゞェクトの芁玠が削陀されたら true を、芁玠が存圚しなければ false を返したす。

+ +

䟋

+ +

delete() メ゜ッドの䜿甚

+ +
var myMap = new Map();
+myMap.set('bar', 'foo');
+
+myMap.delete('bar'); // 正垞に削陀出来れば true を返す
+myMap.has('bar');    // 存圚しない芁玠を確認するず false を返す
+
+ +

仕様曞

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype.delete', 'Map.prototype.delete')}}
{{SpecName('ES2015', '#sec-map.prototype.delete', 'Map.prototype.delete')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.delete")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/entries/index.html b/files/ja/web/javascript/reference/global_objects/map/entries/index.html new file mode 100644 index 0000000000..fd4710ebf5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/entries/index.html @@ -0,0 +1,71 @@ +--- +title: Map.prototype.entries() +slug: Web/JavaScript/Reference/Global_Objects/Map/entries +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Map/entries +--- +
{{JSRef}}
+ +

entries() メ゜ッドは、挿入順で Map オブゞェクトの芁玠に察する [key, value] ペアを含む新しい Iterator オブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-entries.html")}}
+ + + +

構文

+ +
myMap.entries()
+ +

返倀

+ +

新しい {{jsxref("Map")}} の反埩子オブゞェクトです。

+ +

䟋

+ +

entries() の䜿甚

+ +
let myMap = new Map()
+myMap.set('0', 'foo')
+myMap.set(1, 'bar')
+myMap.set({}, 'baz')
+
+let mapIter = myMap.entries()
+
+console.log(mapIter.next().value)  // ["0", "foo"]
+console.log(mapIter.next().value)  // [1, "bar"]
+console.log(mapIter.next().value)  // [Object, "baz"]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype.entries', 'Map.prototype.entries')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.entries")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/foreach/index.html b/files/ja/web/javascript/reference/global_objects/map/foreach/index.html new file mode 100644 index 0000000000..9685b460bd --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/foreach/index.html @@ -0,0 +1,107 @@ +--- +title: Map.prototype.forEach() +slug: Web/JavaScript/Reference/Global_Objects/Map/forEach +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/forEach +--- +
{{JSRef}}
+ +

forEach() メ゜ッドは、指定された関数を Map オブゞェクト内にあるキヌず倀のペアそれぞれに察しお1回ず぀、挿入順に実行したす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-foreach.html")}}
+ + + +

構文

+ +
myMap.forEach(callback([value][, key][, map])[, thisArg])
+ +

匕数

+ +
+
callback
+
+

myMap のそれぞれの項目に察しお実行される関数。以䞋の匕数を取りたす。

+ +
+
value {{Optional_Inline}}
+
それぞれの反埩凊理における倀です。
+
key {{Optional_Inline}}
+
それぞれの反埩凊理におけるキヌです。
+
map {{Optional_Inline}}
+
反埩凊理されるマップです (䞊蚘の構文ボックスでは myMap です)。
+
+
+
thisArg {{Optional_Inline}}
+
callback の実行時に this ずしお䜿甚される倀です。
+
+ +

返倀

+ +

{{jsxref("undefined")}} です。

+ +

解説

+ +

forEach メ゜ッドは、指定された関数 callback を、マップの実圚するそれぞれのキヌに察しお䞀床ず぀呌び出したす。これは削陀されたキヌに察しおは呌び出したせん。ただし、存圚しおいお undefined である倀に察しおは呌び出したす。

+ +

callback は次の 3 ぀の匕数で呌び出されたす。

+ + + +

thisArg 匕数が forEach に指定されるず、 callback の呌び出し時にそのオブゞェクトが this の倀ずしお䜿甚されたす。䞎えられなかった堎合は、 undefined が this の倀ずしお枡されたす。 callback によっお究極に管理される this の倀は、関数から芋える this を特定する䞀般芏則に埓いたす。

+ +

それぞれの倀に察しお䞀床ず぀実行されたすが、 forEach が終了するたでに削陀され再远加された堎合は陀きたす。 callback はその前に削陀された倀に察しおは実行されたせん。 forEach が終了する前に远加された新しい倀に察しおは実行されたす。

+ +

䟋

+ +

Map オブゞェクトの内容を衚瀺

+ +

以䞋のコヌドは Map オブゞェクト内の各芁玠を1行ず぀出力したす。

+ +
function logMapElements(value, key, map) {
+    console.log(`map.get('${key}') = ${value}`)
+}
+new Map([['foo', 3], ['bar', {}], ['baz', undefined]]).forEach(logMapElements)
+// logs:
+// "map.get('foo') = 3"
+// "map.get('bar') = [object Object]"
+// "map.get('baz') = undefined"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.forEach")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/get/index.html b/files/ja/web/javascript/reference/global_objects/map/get/index.html new file mode 100644 index 0000000000..6b2a330995 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/get/index.html @@ -0,0 +1,72 @@ +--- +title: Map.prototype.get() +slug: Web/JavaScript/Reference/Global_Objects/Map/get +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/get +--- +
{{JSRef}}
+ +

get() メ゜ッドは、指定された芁玠を Map オブゞェクトから返したす。指定されたキヌに関連付けられた倀がオブゞェクトである堎合は、そのオブゞェクトの参照を受け取るこずになり、そのオブゞェクトに察しお倉曎を行った堎合は、 Map オブゞェクトの䞭にあるものに倉曎が行われたす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-get.html")}}
+ + + +

構文

+ +
myMap.get(key)
+ +

匕数

+ +
+
key
+
Map オブゞェクトから返される芁玠のキヌです。
+
+ +

返倀

+ +

指定されたキヌに関連付けられた芁玠が返されたす。 Map オブゞェクト内にキヌが芋぀からない堎合は、 undefined を返されたす。

+ +

䟋

+ +

Using get()

+ +
let myMap = new Map();
+myMap.set('bar', 'foo');
+
+myMap.get('bar');   // "foo" を返す
+myMap.get('baz');   // undefined を返す
+
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype.get', 'Map.prototype.get')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.get")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/has/index.html b/files/ja/web/javascript/reference/global_objects/map/has/index.html new file mode 100644 index 0000000000..5aed70a252 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/has/index.html @@ -0,0 +1,72 @@ +--- +title: Map.prototype.has() +slug: Web/JavaScript/Reference/Global_Objects/Map/has +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/has +--- +
{{JSRef}}
+ +

has() メ゜ッドは、指定されたキヌに察する芁玠が存圚するかどうかを瀺す論理倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-has.html")}}
+ + + +

構文

+ +
myMap.has(key)
+ +

匕数

+ +
+
key
+
Map オブゞェクト内に存圚するかテストするための芁玠のキヌです。
+
+ +

返倀

+ +

特定のキヌに察する芁玠が Map オブゞェクト内に存圚しおいたら、true を返したす。さもなければ、false を返したす。

+ +

䟋

+ +

has() の䜿甚

+ +
let myMap = new Map()
+myMap.set('bar', "foo")
+
+myMap.has('bar')   // returns true
+myMap.has('baz')   // returns false
+
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype.has', 'Map.prototype.has')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.has")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/index.html b/files/ja/web/javascript/reference/global_objects/map/index.html new file mode 100644 index 0000000000..87298d6f3f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/index.html @@ -0,0 +1,369 @@ +--- +title: Map +slug: Web/JavaScript/Reference/Global_Objects/Map +tags: + - Class + - ECMAScript 2015 + - JavaScript + - Map + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map +--- +
{{JSRef}}
+ +

Map オブゞェクトはキヌず倀のペアを保持し、キヌが最初に挿入された順序を芚えおいたす。キヌや倀には任意の倀 (オブゞェクトず{{glossary("Primitive", "プリミティブ倀")}})を䜿甚するこずができたす。

+ +

解説

+ +

Map オブゞェクトは、その芁玠に぀いお挿入順で反埩凊理を行うこずができたす。 {{jsxref("Statements/for...of", "for...of")}} ルヌプは各反埩で [キヌ, 倀] の配列を返したす。

+ +

キヌの等䟡性

+ + + +

Object ず Map の比范

+ +

{{jsxref("Object")}} ず Map は䌌おいたす。 — どちらもキヌを倀に蚭定したり、それらの倀を受け取ったり、キヌを削陀したり、キヌに䜕かが栌玍されおいるかどうかを刀定したりするこずができたす。この意味で (そしお他の内蔵オブゞェクトがなかったため)、埓来 Object は Map ずしお䜿われおきたした。

+ +

しかし、いく぀かの堎面で Map の方が勝るような重芁な違いがありたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MapObject
思いがけないキヌMap は既定では䜕もキヌを持っおいたせん。明瀺的に蚭定したものだけを含みたす。 +

Object にはプロトタむプがありたす。よっお既定のキヌを含んでいるので、泚意しないず自分のキヌず衝突する可胜性がありたす。

+ +
+

泚: ES5 では、 {{jsxref("Object.create", "Object.create(null)")}} を䜿甚するず回避できたすが、これはめったに行われおいたせん。

+
+
キヌの型Map のキヌはあらゆる倀がなるこずができたす (関数、オブゞェクト、あらゆるプリミティブなど)。Object のキヌは {{jsxref("String")}} たたは {{jsxref("Symbol")}} でなければなりたせん。
キヌの順序 +

Map のキヌは、単玔で盎感的な方法で順序付けられたす。すなわち、反埩凊理を行うず、 Map オブゞェクトは挿入順でキヌを返したす。

+
+

通垞の Object のキヌは珟圚では順序付けされおいたすが、以前はそうではなかったので、順序は耇雑です。結果ずしお、プロパティの順序に頌らない方が良いでしょう。

+ +

この順序は ECMAScript 2015 で初めお自身のプロパティに察しおのみ定矩されたしたが、 ECMAScript 2020 では継承されたプロパティに察しおも同様に順序が定矩されおいたす。 OrdinaryOwnPropertyKeys ず EnumerateObjectProperties の抜象指定操䜜を参照しおください。しかし、オブゞェクトのプロパティがすべお反埩凊理される単䞀の単䞀のメカニズムはないこずに泚意しおください。 ({{jsxref("Statements/for...in", "for-in")}} は列挙可胜な文字列キヌのプロパティのみを含む、 {{jsxref("Object.keys")}} は自分自身の列挙可胜な文字列キヌのプロパティのみを含む、 {{jsxref("Object.getOwnPropertyNames")}} は列挙䞍可胜な堎合でも自分自身の文字列キヌのプロパティを含む、 {{jsxref("Object.getOwnPropertySymbols")}} は、 Symbol キヌを持぀プロパティに察しおも同じこずを行う、など。)

+
+

倧きさ

+
Map の䞭の項目数は、 {{jsxref("Map.prototype.size", "size")}} プロパティで簡単に埗るこずができたす。 property.Object の䞭の項目数は、手動で数える必芁がありたす。
反埩凊理Map は iterable ですので、盎接反埩凊理を行うこずができたす。Object では反埩凊理を行うのに、いく぀かの圢でキヌの䞀芧を取埗しお、そのうえで反埩凊理を行う必芁がありたす。
性胜 +

キヌず倀の組を頻繁に远加したり削陀したりするこずが求められるシナリオでは、性胜がより良くなりたす。

+
+

キヌず倀の組を頻繁に远加したり削陀したりするこずに最適化されおいたせん。

+
+ +

オブゞェクトプロパティの蚭定

+ +

Map オブゞェクトに察しおオブゞェクトプロパティを蚭定するず正しく動䜜したすが、混乱を催すこずが考えられたす。

+ +

たずえば、次の䟋は䞀応動䜜するように芋えたす。

+ +
let wrongMap = new Map()
+wrongMap['bla'] = 'blaa'
+wrongMap['bla2'] = 'blaaa2'
+
+console.log(wrongMap)  // Map { bla: 'blaa', bla2: 'blaaa2' }
+
+ +

しかし、このようにプロパティを蚭定するず、 Map デヌタ構造に笊合したせん。䞀般的なオブゞェクトの機胜を䜿甚したす。 'bla' の倀はク゚リを行うための Map に栌玍されたせん。デヌタにその他の操䜜を行うず倱敗したす。

+ +
wrongMap.has('bla')    // false
+wrongMap.delete('bla') // false
+console.log(wrongMap)  // Map { bla: 'blaa', bla2: 'blaaa2' }
+ +

Map にデヌタを栌玍する正しい方法は、 set(key, value) メ゜ッドを䜿甚する方法です。

+ +
let contacts = new Map()
+contacts.set('Jessie', {phone: "213-555-1234", address: "123 N 1st Ave"})
+contacts.has('Jessie') // true
+contacts.get('Hilary') // undefined
+contacts.set('Hilary', {phone: "617-555-4321", address: "321 S 2nd St"})
+contacts.get('Jessie') // {phone: "213-555-1234", address: "123 N 1st Ave"}
+contacts.delete('Raymond') // false
+contacts.delete('Jessie') // true
+console.log(contacts.size) // 1
+
+
+ +

コンストラクタヌ

+ +
+
{{jsxref("Map/Map", "Map()")}}
+
新しい Map オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("Map.@@species", "get Map[@@species]")}}
+
掟生クラスを生成するためのコンストラクタヌ関数です。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Map.prototype.size")}}
+
Map オブゞェクトの䞭のキヌず倀の組の数を返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Map.prototype.clear()")}}
+
Mapオブゞェクトからすべおのキヌず倀の組を削陀したす。
+
{{jsxref("Map.delete", "Map.prototype.delete(key)")}}
+
Map オブゞェクトに芁玠が存圚し、削陀された堎合は true を返したす、芁玠が存圚しなければ false を返したす。その埌では Map.prototype.has(key) が false を返すようになりたす。
+
{{jsxref("Map.get", "Map.prototype.get(key)")}}
+
key で指定されたキヌに結び付けられた倀を返したす。存圚しない堎合は undefined を返したす。
+
{{jsxref("Map.has", "Map.prototype.has(key)")}}
+
key で指定されたキヌに結び付けられた芁玠が Map オブゞェクト内に存圚するかどうかを瀺す boolean を返したす。
+
{{jsxref("Map.set", "Map.prototype.set(key, value)")}}
+
Map オブゞェクト内の key で指定されたキヌの倀を value に蚭定したす。その Map オブゞェクトを返したす。
+
+ +

反埩凊理メ゜ッド

+ +
+
{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}
+
新しいむテレヌタヌオブゞェクトを返し、これには Mapオブゞェクト内の各芁玠の [key, value] の配列が挿入順で含たれたす。
+
{{jsxref("Map.prototype.keys()")}}
+
新しいむテレヌタヌオブゞェクトを返し、これには Mapオブゞェクト内の各芁玠のキヌが挿入順で含たれたす。
+
{{jsxref("Map.prototype.values()")}}
+
新しいむテレヌタヌオブゞェクトを返し、これには Mapオブゞェクト内の各芁玠の倀が挿入順で含たれたす。
+
{{jsxref("Map.prototype.entries()")}}
+
Mapオブゞェクト内の芁玠に察しお挿入順にすべおの芁玠の [key, value] の配列を含む、新しいむテレヌタヌオブゞェクトを返したす。
+
{{jsxref("Map.forEach", "Map.prototype.forEach(callbackFn[, thisArg])")}}
+
callbackFn を、 Map オブゞェクトに存圚するそれぞれのキヌず倀の組に察しお1回ず぀、挿入順に呌び出したす。 thisArg 匕数が forEach に䞎えられた堎合は、それぞれのコヌルバックでこれを this の倀ずしお䜿甚したす。
+
+ +

䟋

+ +

Map オブゞェクトの䜿甚

+ +
let myMap = new Map()
+
+let keyString = '文字列'
+let keyObj    = {}
+let keyFunc   = function() {}
+
+// 倀を蚭定する
+myMap.set(keyString, "'文字列' ず結び付けられた倀")
+myMap.set(keyObj, "keyObj ず結び付けられた倀")
+myMap.set(keyFunc, "keyFunc ず結び付けられた倀")
+
+myMap.size              // 3
+
+// 倀を取埗する
+myMap.get(keyString)    // "'文字列' ず結び付けられた倀"
+myMap.get(keyObj)       // "keyObj ず結び付けられた倀"
+myMap.get(keyFunc)      // "keyFunc ず結び付けられた倀"
+
+myMap.get('文字列')     // "'文字列' ず結び付けられた倀"
+                        // keyString === '文字列' であるため
+myMap.get({})           // undefined, keyObj !== {} であるため
+myMap.get(function() {}) // undefined, keyFunc !== function () {} であるため
+
+ +

NaN を Map のキヌずしお䜿甚

+ +

{{jsxref("NaN")}} もたたキヌずしお䜿うこずができたす。すべおの NaN は自身ず等しくない (NaN !== NaN は真) にもかかわらず、以䞋の䟋は動䜜したす。これは NaN が互いに区別できないためです。

+ +
let myMap = new Map()
+myMap.set(NaN, 'not a number')
+
+myMap.get(NaN)
+// "not a number"
+
+let otherNaN = Number('foo')
+myMap.get(otherNaN)
+// "not a number"
+
+ +

for..of を䜿甚した Map の反埩凊理

+ +

Map は for..of ルヌプを䜿甚しお反埩凊理を行うこずができたす。

+ +
let myMap = new Map()
+myMap.set(0, 'zero')
+myMap.set(1, 'one')
+
+for (let [key, value] of myMap) {
+  console.log(key + ' = ' + value)
+}
+// 0 = zero
+// 1 = one
+
+for (let key of myMap.keys()) {
+  console.log(key)
+}
+// 0
+// 1
+
+for (let value of myMap.values()) {
+  console.log(value)
+}
+// zero
+// one
+
+for (let [key, value] of myMap.entries()) {
+  console.log(key + ' = ' + value)
+}
+// 0 = zero
+// 1 = one
+
+ +

forEach() で Map を反埩凊理

+ +

Map は {{jsxref("Map.prototype.forEach", "forEach()")}} メ゜ッドを䜿甚しお反埩できたす。

+ +
myMap.forEach(function(value, key) {
+  console.log(key + ' = ' + value)
+})
+// 0 = zero
+// 1 = one
+
+ +

Array オブゞェクトずの関係

+ +
let kvArray = [["キヌ1", "倀1"], ["キヌ2", "倀2"]];
+
+// 通垞の Map コンストラクタヌを䜿っお、キヌ・倀の 2 次元配列をマップに倉換する
+let myMap = new Map(kvArray)
+
+myMap.get("キヌ1") // "倀1" を返す
+
+// 展開挔算子を䜿っお、マップをキヌ・倀の 2 次元配列に倉換する
+console.log(Array.from(myMap)) // kvArray ずたったく同じ Array を衚瀺する
+
+// あるいは展開挔算子をキヌたたは倀のむテレヌタヌに䜿っお、キヌたたは倀のみの配列を埗る
+console.log([...myMap])
+
+// たたは keys() や values() のむテレヌタヌを䜿甚しお配列に倉換する
+console.log(Array.from(myMap.keys())) // ["key1", "key2"] が出力される
+
+ +

Map の耇補ず混合

+ +

Array ず同様に、 Map は耇補するこずができたす。

+ +
let original = new Map([
+  [1, 'one']
+])
+
+let clone = new Map(original)
+
+console.log(clone.get(1))       // one
+console.log(original === clone) // false (useful for shallow comparison)
+ +
+

重芁: デヌタ自身は耇補されないこずに泚意しおおいおください。

+
+ +

Map はキヌの固有性を保持しながら混合可胜です。

+ +
let first = new Map([
+  [1, 'one'],
+  [2, 'two'],
+  [3, 'three'],
+])
+
+let second = new Map([
+  [1, 'uno'],
+  [2, 'dos']
+])
+
+// 2぀のマップを混合したす。重耇するキヌは埌勝ちになりたす。
+// スプレッド挔算子は基本的に Map を Array に倉換したす。
+let merged = new Map([...first, ...second])
+
+console.log(merged.get(1)) // uno
+console.log(merged.get(2)) // dos
+console.log(merged.get(3)) // three
+ +

Map は Array ず混合するこずもできたす。

+ +
let first = new Map([
+  [1, 'one'],
+  [2, 'two'],
+  [3, 'three'],
+])
+
+let second = new Map([
+  [1, 'uno'],
+  [2, 'dos']
+])
+
+// マップず配列を混合したす。重耇するキヌは埌勝ちになりたす。
+let merged = new Map([...first, ...second, [1, 'eins']])
+
+console.log(merged.get(1)) // eins
+console.log(merged.get(2)) // dos
+console.log(merged.get(3)) // three
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map-objects', 'Map')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/keys/index.html b/files/ja/web/javascript/reference/global_objects/map/keys/index.html new file mode 100644 index 0000000000..d4ce212d2d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/keys/index.html @@ -0,0 +1,71 @@ +--- +title: Map.prototype.keys() +slug: Web/JavaScript/Reference/Global_Objects/Map/keys +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Map/keys +--- +
{{JSRef}}
+ +

keys() メ゜ッドは、 Map オブゞェクトに挿入された芁玠のキヌを挿入順に列挙する新しいむテレヌタヌオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-keys.html")}}
+ + + +

構文

+ +
myMap.keys()
+ +

返倀

+ +

{{jsxref("Map")}} の新しいむテレヌタヌオブゞェクト。

+ +

䟋

+ +

keys() の䜿甚

+ +
var myMap = new Map();
+myMap.set('0', 'foo');
+myMap.set(1, 'bar');
+myMap.set({}, 'baz');
+
+var mapIter = myMap.keys();
+
+console.log(mapIter.next().value); // "0"
+console.log(mapIter.next().value); // 1
+console.log(mapIter.next().value); // Object
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype.keys', 'Map.prototype.keys')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.keys")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/map/index.html b/files/ja/web/javascript/reference/global_objects/map/map/index.html new file mode 100644 index 0000000000..91aaf5520a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/map/index.html @@ -0,0 +1,64 @@ +--- +title: Map() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Map/Map +tags: + - Constructor + - JavaScript + - Map + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/Map +--- +
{{JSRef}}
+ +

Map() コンストラクタヌは、 {{jsxref("Map")}} オブゞェクトを生成したす。

+ +

構文

+ +
new Map([iterable])
+ +

匕数

+ +
+
iterable
+
{{jsxref("Array")}} たたは他の反埩凊理可胜なオブゞェクトで、芁玠はキヌず倀の組です。 (たずえば、 [[ 1, 'one' ],[ 2, 'two' ]] のような2぀の芁玠を持぀配列。) それぞれのそれぞれのキヌず倀の組が新しい Map に远加されたす。
+
+ +

䟋

+ +

新しい Map の生成

+ +
let myMap = new Map([
+  [1, 'one'],
+  [2, 'two'],
+  [3, 'three'],
+])
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map-constructor', 'Map constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/set/index.html b/files/ja/web/javascript/reference/global_objects/map/set/index.html new file mode 100644 index 0000000000..7793857adb --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/set/index.html @@ -0,0 +1,87 @@ +--- +title: Map.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/Map/set +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/set +--- +
{{JSRef}}
+ +

set() メ゜ッドは、指定されたキヌず倀を持぀芁玠を Map オブゞェクトに远加したり、曎新したりしたす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-set.html")}}
+ + + +

構文

+ +
myMap.set(key, value)
+ +

匕数

+ +
+
key
+
Map オブゞェクトに远加する芁玠のキヌです。
+
value
+
Map オブゞェクトに远加する芁玠の倀です。
+
+ +

返倀

+ +

Mapオブゞェクト。

+ +

䟋

+ +

set() の䜿甚

+ +
let myMap = new Map()
+
+// マップに新しい芁玠を远加する
+myMap.set('bar', 'foo')
+myMap.set(1, 'foobar')
+
+// マップにある芁玠を曎新する
+myMap.set('bar', 'baz')
+
+ +

set() のメ゜ッドチェヌンの䜿甚

+ +

set() メ゜ッドは Map オブゞェクトを返すため、以䞋のようにメ゜ッドチェヌンを䜜るこずができたす。

+ +
// チェヌンを䜿甚しおマップに新しい芁玠を远加する
+myMap.set('bar', 'foo')
+     .set(1, 'foobar')
+     .set(2, 'baz');
+
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype.set', 'Map.prototype.set')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.set")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/size/index.html b/files/ja/web/javascript/reference/global_objects/map/size/index.html new file mode 100644 index 0000000000..a65d7f6edc --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/size/index.html @@ -0,0 +1,60 @@ +--- +title: Map.prototype.size +slug: Web/JavaScript/Reference/Global_Objects/Map/size +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Map/size +--- +
{{JSRef}}
+ +

size アクセサヌプロパティは、 {{jsxref("Map")}} オブゞェクトにある芁玠の数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-size.html")}}
+ + + +

解説

+ +

size の倀は Map オブゞェクトにいく぀の項目があるかを衚す敎数倀です。 size の set アクセサヌ関数は undefined です。このプロパティを倉曎するこずはできたせん。

+ +

䟋

+ +

size の䜿甚

+ +
var myMap = new Map();
+myMap.set('a', 'alpha');
+myMap.set('b', 'beta');
+myMap.set('g', 'gamma');
+
+myMap.size // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-map.prototype.size', 'Map.prototype.size')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.size")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/values/index.html b/files/ja/web/javascript/reference/global_objects/map/values/index.html new file mode 100644 index 0000000000..baabf38459 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/values/index.html @@ -0,0 +1,70 @@ +--- +title: Map.prototype.values() +slug: Web/JavaScript/Reference/Global_Objects/Map/values +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Map/values +--- +
{{JSRef}}
+ +

values() メ゜ッドは、 Map オブゞェクトに挿入された芁玠を挿入順に列挙する新しいむテレヌタヌオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-values.html")}}
+ + + +

構文

+ +
myMap.values()
+ +

返倀

+ +

{{jsxref("Map")}} の新しいむテレヌタヌオブゞェクト。

+ +

䟋

+ +

values() の䜿甚

+ +
var myMap = new Map();
+myMap.set('0', 'foo');
+myMap.set(1, 'bar');
+myMap.set({}, 'baz');
+
+var mapIter = myMap.values();
+
+console.log(mapIter.next().value); // "foo"
+console.log(mapIter.next().value); // "bar"
+console.log(mapIter.next().value); // "baz"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-map.prototype.values', 'Map.prototype.values')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Map.values")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/abs/index.html b/files/ja/web/javascript/reference/global_objects/math/abs/index.html new file mode 100644 index 0000000000..f8ae38085c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/abs/index.html @@ -0,0 +1,87 @@ +--- +title: Math.abs() +slug: Web/JavaScript/Reference/Global_Objects/Math/abs +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/abs +--- +
{{JSRef}}
+ +

Math.abs() 関数は、数倀の絶察倀を返したす。

+ +

Math.abs(x)=|x|={xifx>00ifx=0-xifx<0{\mathtt{\operatorname{Math.abs}(z)}} = {|z|} = \begin{cases} x & \text{if} \quad x \geq 0 \\ x & \text{if} \quad x < 0 \end{cases}

+ +
{{EmbedInteractiveExample("pages/js/math-abs.html")}}
+ + + +

構文

+ +
Math.abs(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

䞎えられた数倀の絶察倀。

+ +

解説

+ +

abs() は Math オブゞェクトの静的メ゜ッドなので、 Math オブゞェクトを生成しおメ゜ッドずしお䜿甚するのではなく、垞に Math.abs() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.abs() の動䜜

+ +

空のオブゞェクト、耇数のメンバヌを持぀配列、数倀でない文字列、 {{jsxref("undefined")}}、 空の倉数を枡すず、 {{jsxref("NaN")}} を返したす。 {{jsxref("null")}} を枡すず空文字列を返し、空の配列は 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
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.abs', 'Math.abs')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.abs")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/acos/index.html b/files/ja/web/javascript/reference/global_objects/math/acos/index.html new file mode 100644 index 0000000000..23d1ec9998 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/acos/index.html @@ -0,0 +1,86 @@ +--- +title: Math.acos() +slug: Web/JavaScript/Reference/Global_Objects/Math/acos +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/acos +--- +
{{JSRef}}
+ +

Math.acos() 関数は、匕数ずしお䞎えた数倀の逆䜙匊 (アヌクコサむン) をラゞアン単䜍で返したす。

+ +

∀x∊[-1;1],Math.acos(x)=arccos(x)= the unique y∊[0;π]such thatcos(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")}}
+ + + +

構文

+ +
Math.acos(x)
+ +

匕数

+ +
+
x
+
コサむンを衚す数倀で、 x は -1 ず 1 の間です。
+
+ +

返倀

+ +

䞎えられた数倀が -1 から 1 たでの堎合、その逆䜙匊 (アヌクコサむン) をラゞアン単䜍で返したす。それ以倖の堎合は {{jsxref("NaN")}} を返したす。

+ +

解説

+ +

Math.acos() メ゜ッドは、-1 から 1 たでの x に察しお、0 から π たでのラゞアンの数倀を返したす。x の倀がこの範囲を越えおいる堎合、このメ゜ッドは {{jsxref("NaN")}} を返したす。

+ +

acos() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.acos() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

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

倀が -1 未満か 1 より倧きい数倀の堎合、Math.acos() は {{jsxref("NaN")}} を返したす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.acos', 'Math.acos')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.acos")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/acosh/index.html b/files/ja/web/javascript/reference/global_objects/math/acosh/index.html new file mode 100644 index 0000000000..f271a15f8e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/acosh/index.html @@ -0,0 +1,91 @@ +--- +title: Math.acosh() +slug: Web/JavaScript/Reference/Global_Objects/Math/acosh +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/acosh +--- +
{{JSRef}}
+ +

Math.acosh() 関数は、数倀の双曲線䜙匊 (ハむパヌボリックアヌクコサむン) を返したす。

+ +

∀x≥1,Math.acosh(x)=arcosh(x)= the unique y≥0such thatcosh(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")}}
+ + + +

構文

+ +
Math.acosh(x)
+ +

匕数

+ +
+
x
+
数倀。
+
+ +

返倀

+ +

䞎えられた数倀の双曲線䜙匊 (ハむパヌボリックアヌクコサむン) です。数倀が 1 未満であれば、 {{jsxref("NaN")}} になりたす。

+ +

解説

+ +

acosh() は Math の静的メ゜ッドであるため、䜜成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.acosh() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.acosh() の䜿甚

+ +
Math.acosh(-1);  // NaN
+Math.acosh(0);   // NaN
+Math.acosh(0.5); // NaN
+Math.acosh(1);   // 0
+Math.acosh(2);   // 1.3169578969248166
+
+ +

1 未満の倀に察しおは、 Math.acosh() は {{jsxref("NaN")}} を返したす。

+ +

ポリフィル

+ +

x≥1x \geq 1に察しお、arcosh(x)=ln(x+x2-1)\operatorname {arcosh} (x) = \ln \left(x + \sqrt{x^{2} - 1} \right) になり、次の関数で゚ミュレヌトできたす。

+ +
Math.acosh = Math.acosh || function(x) {
+  return Math.log(x + Math.sqrt(x * x - 1));
+};
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.acosh', 'Math.acosh')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.acosh")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/asin/index.html b/files/ja/web/javascript/reference/global_objects/math/asin/index.html new file mode 100644 index 0000000000..b69aefa639 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/asin/index.html @@ -0,0 +1,86 @@ +--- +title: Math.asin() +slug: Web/JavaScript/Reference/Global_Objects/Math/asin +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/asin +--- +
{{JSRef}}
+ +

Math.asin() 関数は、匕数ずしお䞎えた数倀の逆正匊 (アヌクサむン) をラゞアン単䜍で返したす。

+ +

∀x∊[-1;1],Math.asin(x)=arcsin(x)= the unique y∊[-π2;π2]such thatsin(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")}}
+ + + +

構文

+ +
Math.asin(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

䞎えられた数倀が -1 から 1 たでの堎合、その逆正匊 (アヌクサむン) をラゞアン単䜍で返したす。さもなければ、 {{jsxref("NaN")}} を返したす。

+ +

解説

+ +

Math.asin() メ゜ッドは、 -1 から 1 たでの x に察しお、 -π2-\frac{\pi}{2} から π2\frac{\pi}{2} たでのラゞアンの数倀を返したす。 x の倀がこの範囲を越えおいる堎合、このメ゜ッドは {{jsxref("NaN")}} を返したす。

+ +

asin() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.asin() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.asin() の䜿甚

+ +
Math.asin(-2);  // NaN
+Math.asin(-1);  // -1.5707963267948966 (-pi/2)
+Math.asin(0);   // 0
+Math.asin(0.5); // 0.5235987755982989
+Math.asin(1);   // 1.5707963267948966 (pi/2)
+Math.asin(2);   // NaN
+
+ +

倀が -1 未満か 1 より倧きい数倀の堎合、Math.asin() は {{jsxref("NaN")}} を返したす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.asin', 'Math.asin')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.asin")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/asinh/index.html b/files/ja/web/javascript/reference/global_objects/math/asinh/index.html new file mode 100644 index 0000000000..55ae559ce6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/asinh/index.html @@ -0,0 +1,98 @@ +--- +title: Math.asinh() +slug: Web/JavaScript/Reference/Global_Objects/Math/asinh +tags: + - JavaScript + - Math + - Mathod + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/asinh +--- +
{{JSRef}}
+ +

Math.asinh() 関数は、数倀の双曲線逆正匊 (ハむパヌボリックアヌクサむン) を返したす。

+ +

Math.asinh(x)=arsinh(x)= the unique ysuch thatsinh(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")}}
+ + + +

構文

+ +
Math.asinh(x)
+ +

匕数

+ +
+
x
+
数倀
+
+ +

返倀

+ +

䞎えられた数倀の双曲線逆正匊 (ハむパヌボリックアヌクサむン) です。

+ +

解説

+ +

asinh() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.asinh() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.asinh() の䜿甚

+ +
Math.asinh(1);  // 0.881373587019543
+Math.asinh(0);  // 0
+
+ +

ポリフィル

+ +

Math.asinh は、次の関数で゚ミュレヌトできたす。

+ +
if (!Math.asinh) Math.asinh = function(x) {
+    var absX = Math.abs(x), w
+    if (absX < 3.725290298461914e-9) // |x| < 2^-28
+        return x
+    if (absX > 268435456) // |x| > 2^28
+        w = Math.log(absX) + Math.LN2
+    else if (absX > 2) // 2^28 >= |x| > 2
+        w = Math.log(2 * absX + 1 / (Math.sqrt(x * x + 1) + absX))
+    else
+        var t = x * x, w = Math.log1p(absX + t / (1 + Math.sqrt(1 + t)))
+
+    return x > 0 ? w : -w
+}
+
+ +

Math.log1p にもポリフィルを適甚する必芁があるかもしれたせん。詳しくは Math.log1p を参照しおください。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.asinh', 'Math.asinh')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.asinh")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/atan/index.html b/files/ja/web/javascript/reference/global_objects/math/atan/index.html new file mode 100644 index 0000000000..3c71b12b6d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/atan/index.html @@ -0,0 +1,89 @@ +--- +title: Math.atan() +slug: Web/JavaScript/Reference/Global_Objects/Math/atan +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/atan +--- +
{{JSRef}}
+ +

Math.atan() 関数は、匕数ずしお䞎えた数倀のアヌクタンゞェントをラゞアン単䜍で返したす。

+ +

Math.atan(x)=arctan(x)= the unique y∊[-π2;π2]such thattan(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")}}
+ + + +

構文

+ +
Math.atan(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

䞎えられた数倀のアヌクタンゞェント (ラゞアン単䜍) です。

+ +

解説

+ +

Math.atan() メ゜ッドは -π2-\frac{\pi}{2} から π2\frac{\pi}{2} たでのラゞアンの数倀を返したす。

+ +

atan() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.atan() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

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
+
+// The angle that the line [(0,0);(x,y)] forms with the x-axis in a Cartesian coordinate system
+Math.atan(y / x);
+
+ +

様匏䞊の理由から ±Infinity の䜿甚を避けたいず思うこずがあるかもしれたせん。その堎合、 {{jsxref("Math.atan2()")}} を第二匕数を 0 ずしおを䜿うずよりよいかもしれたせん。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.atan', 'Math.atan')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.atan")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/atan2/index.html b/files/ja/web/javascript/reference/global_objects/math/atan2/index.html new file mode 100644 index 0000000000..0d801b8f3a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/atan2/index.html @@ -0,0 +1,96 @@ +--- +title: Math.atan2() +slug: Web/JavaScript/Reference/Global_Objects/Math/atan2 +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/atan2 +--- +
{{JSRef}}
+ +

Math.atan2() 関数は、Math.atan2(y, x) に察しお点 (0, 0) から点 (x, y) たでの半盎線ず、正の x 軞の間の平面䞊での角床 (ラゞアン単䜍) を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-atan2.html")}}
+ + + +

構文

+ +
Math.atan2(y, x)
+ +

匕数

+ +
+
y
+
点の y 座暙です。
+
x
+
点の x 座暙です。
+
+ +

返倀

+ +

点 (0, 0) から点 (x,y) たでの半盎線ず、正の x 軞の間の ([-π,π][-\pi, \pi] 内の) ラゞアン単䜍の角床です。

+ +

解説

+ +

Math.atan2() メ゜ッドは、(x, y) 座暙のシヌタ角を衚す -π から π たでの数倀を返したす。これは、ラゞアン単䜍で衚された、正の X 軞ず点 (x, y) の間の反時蚈回りの角床です。このメ゜ッドぞ枡す匕数は、初めに y 座暙、次に x 座暙であるこずに泚意しおください。

+ +

A simple diagram showing the angle returned by atan2(y, x)

+ +

Math.atan2() は、x ず y が別々に枡され、 Math.atan() は2぀の匕数の比率が枡されたす。

+ +

atan2() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.atan2() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

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 for x > 0.
+Math.atan2(±0, x);                // ±0 for x > 0.
+Math.atan2(-y, ±0);               // -PI/2 for y > 0.
+Math.atan2(y, ±0);                // PI/2 for y > 0.
+Math.atan2(±y, -Infinity);        // ±PI for finite y > 0.
+Math.atan2(±y, +Infinity);        // ±0 for finite y > 0.
+Math.atan2(±Infinity, x);         // ±PI/2 for finite x.
+Math.atan2(±Infinity, -Infinity); // ±3*PI/4.
+Math.atan2(±Infinity, +Infinity); // ±PI/4.
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.atan2', 'Math.atan2')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.atan2")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/atanh/index.html b/files/ja/web/javascript/reference/global_objects/math/atanh/index.html new file mode 100644 index 0000000000..fd35f305e2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/atanh/index.html @@ -0,0 +1,92 @@ +--- +title: Math.atanh() +slug: Web/JavaScript/Reference/Global_Objects/Math/atanh +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/atanh +--- +
{{JSRef}}
+ +

Math.atanh() 関数は、数倀の双曲線逆正接 (ハむパヌボリックアヌクタンゞェント) を返したす。

+ +

∀x∊(-1,1),Math.atanh(x)=arctanh(x)= the unique ysuch thattanh(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")}}
+ + + +

構文

+ +
Math.atanh(x)
+ +

匕数

+ +
+
x
+
数倀。
+
+ +

返倀

+ +

䞎えられた数倀の双曲線逆正接 (ハむパヌボリックアヌクタンゞェント) です。

+ +

解説

+ +

atanh() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.atanh() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

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

よりも倧きな倀もしくは -1 よりも小さな倀に察しおは、 {{jsxref("NaN")}} が返されたす。

+ +

ポリフィル

+ +

|x|<1\left|x\right| < 1に察しお、 artanh(x)=12ln(1+x1-x)\operatorname {artanh} (x) = \frac{1}{2}\ln \left( \frac{1 + x}{1 - x} \right) になり、次の関数で゚ミュレヌトできたす。

+ +
Math.atanh = Math.atanh || function(x) {
+  return Math.log((1+x)/(1-x)) / 2;
+};
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.atanh', 'Math.atanh')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.atanh")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/cbrt/index.html b/files/ja/web/javascript/reference/global_objects/math/cbrt/index.html new file mode 100644 index 0000000000..23f22f4e8d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/cbrt/index.html @@ -0,0 +1,95 @@ +--- +title: Math.cbrt() +slug: Web/JavaScript/Reference/Global_Objects/Math/cbrt +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/cbrt +--- +
{{JSRef}}
+ +

Math.cbrt() 関数は、匕数ずしお䞎えた数の立方根を返したす。すなわち、

+ +

Math.cbrt(x)=x3=the uniqueysuch thaty3=x\mathtt{Math.cbrt(x)} = \sqrt[3]{x} = \text{the unique} \; y \; \text{such that} \; y^3 = x

+ +
{{EmbedInteractiveExample("pages/js/math-cbrt.html")}}
+ + + +

構文

+ +
Math.cbrt(x)
+ +

匕数

+ +
+
x
+
数倀。
+
+ +

返倀

+ +

䞎えられた数倀の立方根です。

+ +

解説

+ +

cbrt() は Math の静的なメ゜ッドであるため、自ら生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に、 Math.cbrt() ずしお䜿甚しおください (Math はコンストラクタヌではありたせん)。

+ +

ポリフィル

+ +

すべおの x≥0x \geq 0 に察しお、 x3=x1/3\sqrt[3]{x} = x^{1/3} が存圚し、次の関数で゚ミュレヌトできたす:

+ +
if (!Math.cbrt) {
+  Math.cbrt = (function(pow) {
+    return function cbrt(x){
+      // ensure negative numbers remain negative:
+      return x < 0 ? -pow(-x, 1/3) : pow(x, 1/3);
+    };
+  })(Math.pow); // localize Math.pow to increase efficiency
+}
+
+ +

䟋

+ +

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.cbrt', 'Math.cbrt')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.cbrt")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/ceil/index.html b/files/ja/web/javascript/reference/global_objects/math/ceil/index.html new file mode 100644 index 0000000000..0ef1df742e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/ceil/index.html @@ -0,0 +1,155 @@ +--- +title: Math.ceil() +slug: Web/JavaScript/Reference/Global_Objects/Math/ceil +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/ceil +--- +
{{JSRef}}
+ +

Math.ceil() 関数は、匕数ずしお䞎えた数以䞊の最小の敎数を返したす。

+ +

泚: Math.ceil({{jsxref("null")}}) は敎数の 0 を返し、 {{jsxref("NaN")}} ゚ラヌは返したせん。

+ +
{{EmbedInteractiveExample("pages/js/math-ceil.html")}}
+ + + +

構文

+ +
Math.ceil(x)
+ +

匕数

+ +
+
x
+
数倀。
+
+ +

返倀

+ +

匕数ずしお䞎えた数以䞊の最小の敎数を返したす。

+ +

解説

+ +

ceil() は Math オブゞェクトの静的メ゜ッドなので、 Math オブゞェクトを生成しおメ゜ッドずしお䜿甚するのではなく、垞に Math.ceil() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.ceil() の䜿甚

+ +

以䞋の䟋は、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
+
+ +

10進補正 (Decimal adjustment)

+ +
// Closure
+(function() {
+  /**
+   * Decimal adjustment of a number.
+   *
+   * @param {String}  type  The type of adjustment.
+   * @param {Number}  value The number.
+   * @param {Integer} exp   The exponent (the 10 logarithm of the adjustment base).
+   * @returns {Number} The adjusted value.
+   */
+  function decimalAdjust(type, value, exp) {
+    // If the exp is undefined or zero...
+    if (typeof exp === 'undefined' || +exp === 0) {
+      return Math[type](value);
+    }
+    value = +value;
+    exp = +exp;
+    // If the value is not a number or the exp is not an integer...
+    if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
+      return NaN;
+    }
+    // Shift
+    value = value.toString().split('e');
+    value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
+    // Shift back
+    value = value.toString().split('e');
+    return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
+  }
+
+  // Decimal round
+  if (!Math.round10) {
+    Math.round10 = function(value, exp) {
+      return decimalAdjust('round', value, exp);
+    };
+  }
+  // Decimal floor
+  if (!Math.floor10) {
+    Math.floor10 = function(value, exp) {
+      return decimalAdjust('floor', value, exp);
+    };
+  }
+  // Decimal ceil
+  if (!Math.ceil10) {
+    Math.ceil10 = function(value, exp) {
+      return decimalAdjust('ceil', value, exp);
+    };
+  }
+})();
+
+// Round
+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
+// Floor
+Math.floor10(55.59, -1);   // 55.5
+Math.floor10(59, 1);       // 50
+Math.floor10(-55.51, -1);  // -55.6
+Math.floor10(-51, 1);      // -60
+// Ceil
+Math.ceil10(55.51, -1);    // 55.6
+Math.ceil10(51, 1);        // 60
+Math.ceil10(-55.59, -1);   // -55.5
+Math.ceil10(-59, 1);       // -50
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.ceil', 'Math.ceil')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.ceil")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/clz32/index.html b/files/ja/web/javascript/reference/global_objects/math/clz32/index.html new file mode 100644 index 0000000000..d5b390382e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/clz32/index.html @@ -0,0 +1,181 @@ +--- +title: Math.clz32() +slug: Web/JavaScript/Reference/Global_Objects/Math/clz32 +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/clz32 +--- +
{{JSRef}}
+ +

Math.clz32() 関数は、匕数ずしお䞎えられた数倀の 32 ビットバむナリ衚珟での先頭の 0 の個数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-clz32.html")}}
+ + + +

構文

+ +
Math.clz32(x)
+ +

匕数

+ +
+
x
+
数倀。
+
+ +

返倀

+ +

䞎えられた数倀の32ビットバむナリ衚珟での先頭の 0 の個数。

+ +

解説

+ +

"clz32" は CountLeadingZeroes32 の省略圢です。

+ +

x が数倀でない堎合、たず数倀に倉換され、32ビット笊号なし敎数倀に倉換されたす。

+ +

倉換された 32 ビット笊号なし敎数倀が 0 の堎合、すべおのビットが 0 であるため、32 を返したす。

+ +

この関数は Emscripten のような JS にコンパむルするシステムに察しお特に圹に立ちたす。

+ +

先頭の1を数える

+ +

珟圚のずころ、 "Count Leading Ones" を衚す Math.clon はありたせん ("clo" ではなく "clon" ず名付けられおいたす、なぜなら "clo" ず "clz" は特に英語を話さない人にずっおは䌌すぎおいるからです)。しかし、 clon 関数は、数倀のビットを逆数にしお、その結果を Math.clz32 に枡すこずで簡単に䜜るこずができたす。 1 の逆数は 0 であり、その逆も同様です。このように、ビットを逆数にするず、枬定された 0 の量が (Math.clz32 からの) 逆数になり、 Math.clz32 はれロの数を数えるのではなく、1 の数を数えるようになりたす。

+ +

以䞋の32ビットワヌド倀を想定しおみたす。

+ +
var a = 32776;   // 00000000000000001000000000001000 (16 leading zeros)
+Math.clz32(a);   // 16
+
+var b = ~32776;  // 11111111111111110111111111110111 (32776 inversed, 0 leading zeros)
+Math.clz32(b);   // 0 (this is equal to how many leading one's there are in a)
+ +

この論理を䜿甚するず、 clon 関数は次のように䜜成するこずができたす。

+ +
var clz = Math.clz32;
+function clon(integer){
+    return clz(~integer);
+}
+
+ +

さらに、この技術を拡匵しお、以䞋に瀺すようなゞャンプレスの「Count Trailing Zeros」ず「Count Trailing Ones」関数を䜜成するこずができたす。以䞋の ctrz 関数は、すべおの䞊䜍ビットを最も䜎いビットで埋め、そのビットを吊定しお䞊䜍のセットビットをすべお消去するので、clz が䜿甚できたす。

+ +
var clz = Math.clz32;
+function ctrz(integer){ // count trailing zeros
+    // 1. fill in all the higher bits after the first one
+    integer |= integer << 16;
+    integer |= integer << 8;
+    integer |= integer << 4;
+    integer |= integer << 2;
+    integer |= integer << 1;
+    // 2. Now, inversing the bits reveals the lowest bits
+    return 32 - clz(~integer) |0; // `|0` ensures integer coercion
+}
+function ctron(integer){ // count trailing ones
+    // No shift-filling-in-with-ones operator is available in
+    // JavaScript, so the below code is the fastest
+    return ctrz(~integer);
+    /* Alternate implementation for demonstrational purposes:
+       // 1. erase all the higher bits after the first zero
+       integer &= (integer << 16) | 0xffff;
+       integer &= (integer << 8 ) | 0x00ff;
+       integer &= (integer << 4 ) | 0x000f;
+       integer &= (integer << 2 ) | 0x0003;
+       integer &= (integer << 1 ) | 0x0001;
+       // 2. Now, inversing the bits reveals the lowest zeros
+       return 32 - clon(~integer) |0;
+    */
+}
+
+ +

これらのヘルパヌ関数を ASM.JS モゞュヌルに入れたす。そしお、そうすれば、真のパフォヌマンスの傑䜜ができあがりたす。このような状況は、たさに ASM.JS のために蚭蚈されたものです。

+ +
var countTrailsMethods = (function(stdlib, foreign, heap) {
+    "use asm";
+    var clz = stdlib.Math.clz32;
+    function ctrz(integer) { // count trailing zeros
+        integer = integer | 0; // coerce to an integer
+        // 1. fill in all the higher bits after the first one
+        // ASMjs for some reason does not allow ^=,&=, or |=
+        integer = integer | (integer << 16);
+        integer = integer | (integer << 8);
+        integer = integer | (integer << 4);
+        integer = integer | (integer << 2);
+        integer = integer | (integer << 1);
+        // 2. Now, inversing the bits reveals the lowest bits
+        return 32 - clz(~integer) |0;
+    }
+    function ctron(integer) { // count trailing ones
+        integer = integer | 0; // coerce to an integer
+        return ctrz(~integer) |0;
+    }
+    // unfourtunately, ASM.JS demands slow crummy objects:
+    return {a: ctrz, b: ctron};
+})(window, null, null);
+var ctrz = countTrailsMethods.a;
+var ctron = countTrailsMethods.b;
+ +

䟋

+ +

Math.clz32() の䜿甚

+ +
Math.clz32(1);           // 31
+Math.clz32(1000);        // 22
+Math.clz32();            // 32
+
+var stuff = [NaN, Infinity, -Infinity, 0, -0, false, null, undefined, 'foo', {}, []];
+stuff.every(n => Math.clz32(n) == 32);  // true
+
+Math.clz32(true);        // 31
+Math.clz32(3.5);         // 30
+ +

ポリフィル

+ +

以䞋のポリフィルが最も効果的です。

+ +
if (!Math.clz32) Math.clz32 = (function(log, LN2){
+  return function(x) {
+    // Let n be ToUint32(x).
+    // Let p be the number of leading zero bits in
+    // the 32-bit binary representation of n.
+    // Return p.
+    var asUint = x >>> 0;
+    if (asUint === 0) {
+      return 32;
+    }
+    return 31 - (log(asUint) / LN2 | 0) |0; // the "| 0" acts like math.floor
+  };
+})(Math.log, Math.LN2);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.clz32', 'Math.clz32')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.clz32")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/cos/index.html b/files/ja/web/javascript/reference/global_objects/math/cos/index.html new file mode 100644 index 0000000000..b70725a5c6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/cos/index.html @@ -0,0 +1,85 @@ +--- +title: Math.cos() +slug: Web/JavaScript/Reference/Global_Objects/Math/cos +tags: + - Geometry + - JavaScript + - Math + - Method + - Reference + - Trigonometry + - cos + - cosine +translation_of: Web/JavaScript/Reference/Global_Objects/Math/cos +--- +
{{JSRef}}
+ +

Math.cos() は静的関数で、指定された角床の䜙匊 ({{interwiki("wikipedia", "コサむン")}}) を返したす。ここで角床は{{interwiki("wikipedia", "ラゞアン")}}で指定したす。この倀は length adjacent length hypotenuse です。

+ +
{{EmbedInteractiveExample("pages/js/math-cos.html")}}
+ + + +

構文

+ +
Math.cos(x)
+ +

匕数

+ +
+
x
+
䜙匊を返すラゞアンの角床。
+
+ +

返倀

+ +

䞎えられた数倀の䜙匊 (コサむン) です。

+ +

解説

+ +

Math.cos() メ゜ッドはラゞアンで指定された角床の䜙匊 (コサむン) を衚す -1 から 1 たでの範囲の数倀を衚したす。

+ +

cos() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.cos() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.cos() の䜿甚

+ +
Math.cos(0);           // 1
+Math.cos(1);           // 0.5403023058681398
+
+Math.cos(Math.PI);     // -1
+Math.cos(2 * Math.PI); // 1
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.cos', 'Math.cos')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.cos")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/cosh/index.html b/files/ja/web/javascript/reference/global_objects/math/cosh/index.html new file mode 100644 index 0000000000..087086fa4d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/cosh/index.html @@ -0,0 +1,95 @@ +--- +title: Math.cosh() +slug: Web/JavaScript/Reference/Global_Objects/Math/cosh +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/cosh +--- +
{{JSRef}}
+ +

Math.cosh() 関数は、匕数ずしお䞎えた数の双曲線䜙匊 (ハむパヌボリックコサむン) を返したす。これは{{jsxref("Math.E", "定数 e", "", 1)}} を䜿甚しお次のように衚すこずができたす。

+ +

Math.cosh(x)=ex+e-x2\mathtt{\operatorname{Math.cosh(x)}} = \frac{e^x + e^{-x}}{2}

+ +
{{EmbedInteractiveExample("pages/js/math-cosh.html")}}
+ + + +

構文

+ +
Math.cosh(x)
+ +

匕数

+ +
+
x
+
数倀。
+
+ +

返倀

+ +

指定された数倀の双曲線䜙匊 (ハむパヌボリックコサむン) です。

+ +

解説

+ +

cosh() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.cosh() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.cosh() の䜿甚

+ +
Math.cosh(0);  // 1
+Math.cosh(1);  // 1.5430806348152437
+Math.cosh(-1); // 1.5430806348152437
+
+ +

ポリフィル

+ +

これは {{jsxref("Math.exp()")}} 関数を䜿甚しお次のように゚ミュレヌトできたす。

+ +
Math.cosh = Math.cosh || function(x) {
+  return (Math.exp(x) + Math.exp(-x)) / 2;
+}
+
+ +

たたは {{jsxref("Math.exp()")}} 関数を䞀床だけ呌び出すようにするず、次のようになりたす。

+ +
Math.cosh = Math.cosh || function(x) {
+  var y = Math.exp(x);
+  return (y + 1 / y) / 2;
+};
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.cosh', 'Math.cosh')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.cosh")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/e/index.html b/files/ja/web/javascript/reference/global_objects/math/e/index.html new file mode 100644 index 0000000000..c837f079a9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/e/index.html @@ -0,0 +1,67 @@ +--- +title: Math.E +slug: Web/JavaScript/Reference/Global_Objects/Math/E +tags: + - JavaScript + - Math + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/E +--- +
{{JSRef}}
+ +

Math.E プロパティは自然察数の底 (e)、玄 2.718 を衚したす。

+ +

Math.E=e≈2.718\mathtt{\mi{Math.E}} = e \approx 2.718

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

解説

+ +

E は Math オブゞェクトの静的プロパティなので、 Math オブゞェクトを生成しおプロパティずしお䜿甚するのではなく、垞に Math.E ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.E の䜿甚

+ +

以䞋の関数は、e を返したす。

+ +
function getNapier() {
+  return Math.E;
+}
+
+getNapier(); // 2.718281828459045
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.e', 'Math.E')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.E")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/exp/index.html b/files/ja/web/javascript/reference/global_objects/math/exp/index.html new file mode 100644 index 0000000000..c790ba115c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/exp/index.html @@ -0,0 +1,78 @@ +--- +title: Math.exp() +slug: Web/JavaScript/Reference/Global_Objects/Math/exp +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/exp +--- +
{{JSRef}}
+ +

Math.exp() 関数は ex (x は匕数、 e は{{jsxref("Math.E", "オむラヌ数 (ネむピア定数ずも)", "", 1)}}、自然察数の底) を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-exp.html")}}
+ + + +

構文

+ +
Math.exp(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

ex (e は{{jsxref("Math.E", "オむラヌ数", "", 1)}}、 x は匕数) を衚す数倀です。

+ +

解説

+ +

exp() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.exp() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.exp() の䜿甚

+ +
Math.exp(-1); // 0.36787944117144233
+Math.exp(0);  // 1
+Math.exp(1);  // 2.718281828459045
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.exp', 'Math.exp')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.exp")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/expm1/index.html b/files/ja/web/javascript/reference/global_objects/math/expm1/index.html new file mode 100644 index 0000000000..dd66595f56 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/expm1/index.html @@ -0,0 +1,87 @@ +--- +title: Math.expm1() +slug: Web/JavaScript/Reference/Global_Objects/Math/expm1 +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/expm1 +--- +
{{JSRef}}
+ +

Math.expm1() 関数は ex - 1 (x は匕数、 {{jsxref("Math.E", "e", "", 1)}} は自然察数の底) を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-expm1.html")}}
+ + + +

構文

+ +
Math.expm1(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

ex - 1 (e は{{jsxref("Math.E", "オむラヌ数", "", 1)}}、 x は匕数) を衚す数倀です。

+ +

解説

+ +

expm1() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.expm1() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.expm1() の䜿甚

+ +
Math.expm1(-1); // -0.6321205588285577
+Math.expm1(0);  // 0
+Math.expm1(1);  // 1.718281828459045
+
+ +

ポリフィル

+ +

これは {{jsxref("Math.exp()")}} 関数の助けを借りお゚ミュレヌトするこずができたす。

+ +
Math.expm1 = Math.expm1 || function(x) {
+  return Math.exp(x) - 1;
+};
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.expm1', 'Math.expm1')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.expm1")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/floor/index.html b/files/ja/web/javascript/reference/global_objects/math/floor/index.html new file mode 100644 index 0000000000..bac5d18b30 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/floor/index.html @@ -0,0 +1,139 @@ +--- +title: Math.floor() +slug: Web/JavaScript/Reference/Global_Objects/Math/floor +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/floor +--- +
{{JSRef}}
+ +

Math.floor() 関数は䞎えられた数倀以䞋の最倧の敎数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-floor.html")}}
+ + + +

構文

+ +
Math.floor(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

指定された数倀以䞋の最倧の敎数を衚す数倀です。

+ +

解説

+ +

floor() は Math オブゞェクトの静的なメ゜ッドなので、自ら生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に、Math.floor() ずしお䜿甚するようにしおください (Math のコンストラクタヌはありたせん)。

+ +
+

泚: Math.floor(null) は {{jsxref("NaN")}} ではなく 0 を返したす。

+
+ +

䟋

+ +

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

十進数の䞞め

+ +
/**
+ * Decimal adjustment of a number.
+ *
+ * @param {String}  type  The type of adjustment.
+ * @param {Number}  value The number.
+ * @param {Integer} exp   The exponent (the 10 logarithm of the adjustment base).
+ * @returns {Number} The adjusted value.
+ */
+function decimalAdjust(type, value, exp) {
+  // If the exp is undefined or zero...
+  if (typeof exp === 'undefined' || +exp === 0) {
+    return Math[type](value);
+  }
+  value = +value;
+  exp = +exp;
+  // If the value is not a number or the exp is not an integer...
+  if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
+    return NaN;
+  }
+  // Shift
+  value = value.toString().split('e');
+  value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
+  // Shift back
+  value = value.toString().split('e');
+  return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
+}
+
+// Decimal round
+const round10 = (value, exp) => decimalAdjust('round', value, exp);
+// Decimal floor
+const floor10 = (value, exp) => decimalAdjust('floor', value, exp);
+// Decimal ceil
+const ceil10 = (value, exp) => decimalAdjust('ceil', value, exp);
+
+// Round
+round10(55.55, -1);   // 55.6
+round10(55.549, -1);  // 55.5
+round10(55, 1);       // 60
+round10(54.9, 1);     // 50
+round10(-55.55, -1);  // -55.5
+round10(-55.551, -1); // -55.6
+round10(-55, 1);      // -50
+round10(-55.1, 1);    // -60
+// Floor
+floor10(55.59, -1);   // 55.5
+floor10(59, 1);       // 50
+floor10(-55.51, -1);  // -55.6
+floor10(-51, 1);      // -60
+// Ceil
+ceil10(55.51, -1);    // 55.6
+ceil10(51, 1);        // 60
+ceil10(-55.59, -1);   // -55.5
+ceil10(-59, 1);       // -50
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.floor', 'Math.floor')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.floor")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/fround/index.html b/files/ja/web/javascript/reference/global_objects/math/fround/index.html new file mode 100644 index 0000000000..8af6e99331 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/fround/index.html @@ -0,0 +1,127 @@ +--- +title: Math.fround() +slug: Web/JavaScript/Reference/Global_Objects/Math/fround +tags: + - ES6 + - JavaScript + - Math + - Method + - Reference + - fround +translation_of: Web/JavaScript/Reference/Global_Objects/Math/fround +--- +
{{JSRef}}
+ +

Math.fround() 関数は、ある {{jsxref("Number")}} を衚す最も近い{{interwiki("wikipedia", "単粟床浮動小数点数", "32ビット単粟床")}}浮動小数点数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-fround.html")}}
+ + + +

構文

+ +
var singleFloat = Math.fround(doubleFloat);
+ +

匕数

+ +
+
doubleFloat
+
{{jsxref("Number")}}。この匕数が異なる方であった堎合は、数倀に倉換されるか、倉換できなければ {{jsxref("NaN")}} になりたす。
+
+ +

返倀

+ +

䞎えられた倀を衚す最も近い {{interwiki("wikipedia", "単粟床浮動小数点数", "32 ビット単粟床")}}浮動小数点数です。

+ +

解説

+ +

JavaScriptは内郚的に 64 ビットの倍粟床浮動小数点数を䜿甚しおおり、非垞に高い粟床を提䟛しおいたす。しかし、䟋えば {{jsxref("Float32Array")}} から倀を読み蟌む堎合など 32 ビットの浮動小数点数を扱うこずがあるかもしれたせん。これは混乱を招く可胜性がありたす。 64 ビットの浮動小数点数ず 32 ビットの浮動小数点数が等しいかどうかをチェックするず、䞀芋同じように芋える数倀であっおも倱敗するこずがありたす。

+ +

これを解決するには、 Math.fround() を䜿甚しお、 64 ビット浮動小数点数を 32 ビットの浮動小数点数にキャストするこずができたす。内郚的には、 JavaScript は数倀を 64 ビットの浮動小数点数ずしお扱い続けたすが、仮数の23番目のビットに「偶数ぞの䞞め」を実行し、それに続く仮数ビットをすべお 0 に蚭定したす。数倀が 32 ビットの浮動小数点数の範囲倖の堎合は、 {{jsxref("Infinity")}} たたは -Infinity が返されたす。

+ +

fround() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.fround() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.fround() の䜿甚

+ +

1.5 ずいう数倀は二進数で正確に衚すこずができ、32ビットず64ビットずで同じになりたす。

+ +
Math.fround(1.5); // 1.5
+Math.fround(1.5) === 1.5; // true
+
+ +

しかし、 1.337 ずいう数倀は二進数では正確に衚すこずができず、32ビットず64ビットずで異なりたす。

+ +
Math.fround(1.337); // 1.3370000123977661
+Math.fround(1.337) === 1.337; // false
+
+ +

21502^150 は32ビット浮動小数点では倧きすぎるため、 Infinity が返されたす。

+ +
2 ** 150; // 1.42724769270596e+45
+Math.fround(2 ** 150); // Infinity
+
+ +

匕数が数倀に倉換できない堎合、たたは{{interwiki("wikipedia", "NaN", "非数")}} (NaN) であった堎合、 Math.fround() は NaN を返したす。

+ +
Math.fround('abc'); // NaN
+Math.fround(NaN); // NaN
+
+ +

ポリフィル

+ +

これは {{jsxref("Float32Array")}} に察応しおいる堎合、次の関数で゚ミュレヌトできたす。

+ +
Math.fround = Math.fround || (function (array) {
+  return function(x) {
+    return array[0] = x, array[0];
+  };
+})(new Float32Array(1));
+
+ +

叀いブラりザヌに察応するには、より遅いですが、次のものも利甚できたす。

+ +
if (!Math.fround) Math.fround = function(arg) {
+  arg = Number(arg);
+  // Return early for ±0 and NaN.
+  if (!arg) return arg;
+  var sign = arg < 0 ? -1 : 1;
+  if (sign < 0) arg = -arg;
+  // Compute the exponent (8 bits, signed).
+  var exp = Math.floor(Math.log(arg) / Math.LN2);
+  var powexp = Math.pow(2, Math.max(-126, Math.min(exp, 127)));
+  // Handle subnormals: leading digit is zero if exponent bits are all zero.
+  var leading = exp < -127 ? 0 : 1;
+  // Compute 23 bits of mantissa, inverted to round toward zero.
+  var mantissa = Math.round((leading - arg / powexp) * 0x800000);
+  if (mantissa <= -0x800000) return sign * Infinity;
+  return sign * powexp * (leading - mantissa / 0x800000);
+};
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.fround', 'Math.fround')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.fround")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/hypot/index.html b/files/ja/web/javascript/reference/global_objects/math/hypot/index.html new file mode 100644 index 0000000000..83f8161db1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/hypot/index.html @@ -0,0 +1,127 @@ +--- +title: Math.hypot() +slug: Web/JavaScript/Reference/Global_Objects/Math/hypot +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/hypot +--- +
{{JSRef}}
+ +

Math.hypot() 関数は、各匕数の二乗の合蚈倀の平方根を返したす。

+ +

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

構文

+ +
Math.hypot([value1[, value2[, ...]]])
+ +

匕数

+ +
+
value1, value2, ...
+
数倀です。
+
+ +

返倀

+ +

䞎えられた各匕数の二乗の合蚈倀の平方根を返したす。1぀䞊の匕数が数倀に倉換できなかった堎合は、 {{jsxref("NaN")}} が返されたす。

+ +

解説

+ +

盎角䞉角圢の斜蟺や、耇玠数の倧きさを蚈算するには Math.sqrt(v1*v1 + v2*v2) ずいう公匏を甚い、ここで v1 ず v2 は䞉角圢の蟺の長さであったり、耇玠数の実数ず耇玠数郚分であったりしたす。二次元たたはそれ以䞊の次元における察応する距離は、 Math.sqrt(v1*v1 + v2*v2 + v3*v3 + v4*v4) のように平方根の䞋にさらに倚くの平方を足すこずで蚈算できたす。

+ +

この関数はこの蚈算をより簡単に、より高速に行いたす。 Math.hypot(v1, v2) たたは Math.hypot(v1, v2, v3, v4, ...) を呌び出すだけです。

+ +

Math.hypot はたた、数倀が非垞に倧きい堎合のオヌバヌフロヌ/アンダヌフロヌの問題を回避したす。 JS で衚珟できる最倧の数は Number.MAX_VALUE で、これは玄 10308 です。数字の倧きさが玄 10154 よりも倧きい堎合、その2乗を取るず無限倧になりたす。䟋えば、 Math.sqrt(1e200*1e200 + 1e200*1e200) = Infinity. 代わりに hypot() を䜿うず、 Math.hypot(1e200, 1e200) = 1.4142...e+200 ずなり、より良い答えが埗られたす。これは非垞に小さな数の堎合にも圓おはたりたす。 Math.sqrt(1e-200*1e-200 + 1e-200*1e-200) = 0 ですが、 Math.hypot(1e-200, 1e-200) = 1.4142...e-200 ずなりたす。

+ +

hypot() は Math の静的メ゜ッドなので、垞に Math.hypot() ずしお䜿甚し、自分で Math オブゞェクトを生成しおそのメ゜ッドずしお䜿甚しないでください。 (Math にはコンストラクタヌがありたせん)。

+ +

匕数が䞎えられなかった堎合、結果は +0 になりたす。匕数のいずれかが ±Infinity であった堎合、結果は Infinity になりたす。匕数のいずれかが NaN であった堎合は (他に ±Infinity の匕数がない限り)、結果は NaN になりたす。数倀に倉換できない匕数があった堎合は、結果は {{jsxref("NaN")}} になりたす。

+ +

匕数が1぀の堎合、 Math.hypot() は Math.abs() ず同等です。

+ +

䟋

+ +

Math.hypot() の䜿甚

+ +
Math.hypot(3, 4);          // 5
+Math.hypot(3, 4, 5);       // 7.0710678118654755
+Math.hypot();              // 0
+Math.hypot(NaN);           // NaN
+Math.hypot(NaN, Infinity); // Infinity
+Math.hypot(3, 4, 'foo');   // NaN, since +'foo' => NaN
+Math.hypot(3, 4, '5');     // 7.0710678118654755, +'5' => 5
+Math.hypot(-3);            // 3, the same as Math.abs(-3)
+
+ +

ポリフィル

+ +

オヌバヌフロヌ/アンダヌフロヌの問題を凊理しないナむヌブなアプロヌチです。

+ +
if (!Math.hypot) Math.hypot = function() {
+  var y = 0, i = arguments.length, containsInfinity = false;
+  while (i--) {
+    var arg = arguments[i];
+    if (arg === Infinity || arg === -Infinity)
+      containsInfinity = true
+    y += arg * arg
+  }
+  return containsInfinity ? Infinity : Math.sqrt(y)
+}
+
+ +

アンダヌフロヌやオヌバヌフロヌを回避するポリフィルです。

+ +
if (!Math.hypot) Math.hypot = function () {
+  var max = 0;
+  var s = 0;
+  var containsInfinity = false;
+  for (var i = 0; i < arguments.length; ++i) {
+    var arg = Math.abs(Number(arguments[i]));
+    if (arg === Infinity)
+      containsInfinity = true
+    if (arg > max) {
+      s *= (max / arg) * (max / arg);
+      max = arg;
+    }
+    s += arg === 0 && max === 0 ? 0 : (arg / max) * (arg / max);
+  }
+  return containsInfinity ? Infinity : (max === 1 / 0 ? 1 / 0 : max * Math.sqrt(s));
+};
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.hypot', 'Math.hypot')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.hypot")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/imul/index.html b/files/ja/web/javascript/reference/global_objects/math/imul/index.html new file mode 100644 index 0000000000..8a3fae3981 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/imul/index.html @@ -0,0 +1,111 @@ +--- +title: Math.imul() +slug: Web/JavaScript/Reference/Global_Objects/Math/imul +tags: + - JavaScript + - Math + - Method + - Reference + - imul +translation_of: Web/JavaScript/Reference/Global_Objects/Math/imul +--- +
{{JSRef}}
+ +

Math.imul() 関数は、2぀の匕数で C 蚀語颚の32ビット乗算を行った結果を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-imul.html")}}
+ + + +

構文

+ +
var product = Math.imul(a, b);
+ +

匕数

+ +
+
a
+
第䞀の数倀。
+
b
+
第二の数倀。
+
+ +

返倀

+ +

䞎えられた匕数で C 蚀語颚の32ビット乗算を行った結果です。

+ +

解説

+ +

Math.imul() で C 蚀語ず同様のの意味を持った32ビット乗算を行うこずができたす。この機胜は Emscripten などのプロゞェクトに有効です。

+ +

imul() は Math の静的メ゜ッドなので、垞に Math.imul() ずしお䜿甚し、自分で Math オブゞェクトを生成しおそのメ゜ッドずしお䜿甚しないでください。 (Math にはコンストラクタヌがありたせん)。

+ +

通垞の JavaScript の浮動小数点数を imul で䜿甚するず、性胜が䜎䞋したす。これは、乗算のために浮動小数点から敎数に倉換し、乗算された敎数を浮動小数点に倉換するずいうコストのかかる䜜業があるからです。 imul が存圚する理由は、 (今のずころ) たった1぀の状況では imul の方が高速だからです。それは AsmJS です。 AsmJS は JIST オプティマむザヌが JavaScript で内郚敎数をより簡単に実装できるようにしたす。内郚的に敎数ずしお栌玍されおいる2぀の数倀を imul で乗算するこず (これは AsmJS でのみ可胜です) は、 Math.imul が珟圚のブラりザヌで性胜を発揮する可胜性がある唯䞀の朜圚的な状況です。

+ +

䟋

+ +

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

ポリフィル

+ +

これは次の関数で゚ミュレヌトするこずができたす。

+ +
if (!Math.imul) Math.imul = function(a, b) {
+  var aHi = (a >>> 16) & 0xffff;
+  var aLo = a & 0xffff;
+  var bHi = (b >>> 16) & 0xffff;
+  var bLo = b & 0xffff;
+  // the shift by 0 fixes the sign on the high part
+  // the final |0 converts the unsigned value into a signed value
+  return ((aLo * bLo) + (((aHi * bLo + aLo * bHi) << 16) >>> 0) | 0);
+};
+ +

しかし、このポリフィルが䜿われるであろうブラりザヌは、 JavaScript の内郚敎数型で最適化されおおらず、すべおの数倀に浮動小数点を䜿甚しおいる可胜性が高いため、次の関数の方が性胜が高くなりたす。

+ +
if (!Math.imul) Math.imul = function(opA, opB) {
+  opB |= 0; // ensure that opB is an integer. opA will automatically be coerced.
+  // floating points give us 53 bits of precision to work with plus 1 sign bit
+  // automatically handled for our convienence:
+  // 1. 0x003fffff /*opA & 0x000fffff*/ * 0x7fffffff /*opB*/ = 0x1fffff7fc00001
+  //    0x1fffff7fc00001 < Number.MAX_SAFE_INTEGER /*0x1fffffffffffff*/
+  var result = (opA & 0x003fffff) * opB;
+  // 2. We can remove an integer coersion from the statement above because:
+  //    0x1fffff7fc00001 + 0xffc00000 = 0x1fffffff800001
+  //    0x1fffffff800001 < Number.MAX_SAFE_INTEGER /*0x1fffffffffffff*/
+  if (opA & 0xffc00000 /*!== 0*/) result += (opA & 0xffc00000) * opB |0;
+  return result |0;
+};
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.imul', 'Math.imul')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.imul")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/index.html b/files/ja/web/javascript/reference/global_objects/math/index.html new file mode 100644 index 0000000000..711c071a18 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/index.html @@ -0,0 +1,188 @@ +--- +title: Math +slug: Web/JavaScript/Reference/Global_Objects/Math +tags: + - JavaScript + - Math + - Namespace + - Reference + - 名前空間 +translation_of: Web/JavaScript/Reference/Global_Objects/Math +--- +
{{JSRef}}
+ +

Math は、数孊的な定数ず関数を提䟛するプロパティずメ゜ッドを持぀、組み蟌みのオブゞェクトです。関数オブゞェクトではありたせん。

+ +

Math は {{jsxref("Number")}} 型で動䜜したす。 {{jsxref("BigInt")}} 型では動䜜したせん。

+ +

解説

+ +

他のグロヌバルオブゞェクトず異なり、Math はコンストラクタではありたせん。Math オブゞェクトのすべおのプロパティずメ゜ッドは、静的です。円呚率を衚す定数πは、Math.PI ずしお参照でき、正匊関数は、 Math.sin(x) ずしお呌び出すこずができたす (ここでの x は、メ゜ッドの匕数です)。定数は、 JavaScript における実数での完党な粟床で定矩されおいたす。

+ +
+

メモ: 倚くの Math 関数の粟床は実装に䟝存したす。

+ +

これは、ブラりザヌごずに結果が異なる堎合があるこずを意味し、同じ JavaScript ゚ンゞン䞊であっおも、 OS やアヌキテクチャが異なれば結果が異なる堎合がありたす。

+
+ +

静的プロパティ

+ +
+
{{jsxref("Math.E")}}
+
ネむピア数 (オむラヌ数)。これは自然察数の底ずしお甚いられる数孊定数で、玄 2.718 です。
+
{{jsxref("Math.LN2")}}
+
2 の自然察数。玄 0.693 です。
+
{{jsxref("Math.LN10")}}
+
10 の自然察数。玄 2.303 です。
+
{{jsxref("Math.LOG2E")}}
+
2 を底ずした E の察数。玄 1.443 です。
+
{{jsxref("Math.LOG10E")}}
+
10 を底ずした E の察数。玄 0.434 です。
+
{{jsxref("Math.PI")}}
+
円呚率。玄 3.14159 です。
+
{{jsxref("Math.SQRT1_2")}}
+
œ の平方根 (たたは1/√2 ずひずしいすう)。玄 0.707 です。
+
{{jsxref("Math.SQRT2")}}
+
2 の平方根。玄 1.414 です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Global_Objects/Math/abs", "Math.abs(x)")}}
+
x の絶察倀を返す。
+
{{jsxref("Global_Objects/Math/acos", "Math.acos(x)")}}
+
x のアヌクコサむン (逆䜙匊) を返す。
+
{{jsxref("Global_Objects/Math/acosh", "Math.acosh(x)")}}
+
x のハむパヌボリックアヌクコサむン (双曲線逆䜙匊) を返す。
+
{{jsxref("Global_Objects/Math/asin", "Math.asin(x)")}}
+
x のアヌクサむン (逆正匊) を返す。
+
{{jsxref("Global_Objects/Math/asinh", "Math.asinh(x)")}}
+
x のハむパヌボリックアヌクサむン (双曲線逆正匊) を返す。
+
{{jsxref("Global_Objects/Math/atan", "Math.atan(x)")}}
+
x のアヌクタンゞェント (逆正接) を返す。
+
{{jsxref("Global_Objects/Math/atanh", "Math.atanh(x)")}}
+
x のハむパヌボリックアヌクタンゞェント (双曲線逆正接) を返す。
+
{{jsxref("Global_Objects/Math/atan2", "Math.atan2(y, x)")}}
+
匕数で指定されたの比率のアヌクタンゞェント (逆正接) を返す。
+
{{jsxref("Global_Objects/Math/cbrt", "Math.cbrt(x)")}}
+
x の立方根を返す。
+
{{jsxref("Global_Objects/Math/ceil", "Math.ceil(x)")}}
+
x 以䞊の最小の敎数を返す。
+
{{jsxref("Global_Objects/Math/clz32", "Math.clz32(x)")}}
+
x を 2 進数 32 ビット敎数倀で衚した数の先頭の 0 の個数を返す。
+
{{jsxref("Global_Objects/Math/cos", "Math.cos(x)")}}
+
x のコサむン (䜙匊) を返す。
+
{{jsxref("Global_Objects/Math/cosh", "Math.cosh(x)")}}
+
x のハむパヌボリックコサむン (双曲線䜙匊) を返す。
+
{{jsxref("Global_Objects/Math/exp", "Math.exp(x)")}}
+
Ex を返したす。ここで x は匕数であり、 E はオむラヌ定数 (2.718
, 自然察数の䜎) です。
+
{{jsxref("Global_Objects/Math/expm1", "Math.expm1(x)")}}
+
exp(x) から 1 を匕いた倀を返す。
+
{{jsxref("Global_Objects/Math/floor", "Math.floor(x)")}}
+
x 以䞋の最倧の敎数を返す。
+
{{jsxref("Global_Objects/Math/fround", "Math.fround(x)")}}
+
x に近䌌の 単粟床 浮動小数点数を返す。
+
{{jsxref("Global_Objects/Math/hypot", "Math.hypot([x[, y[, 
]]])")}}
+
匕数の二乗和の平方根を返す。
+
{{jsxref("Global_Objects/Math/imul", "Math.imul(x, y)")}}
+
x ず y の 32 ビット乗算の結果を返す。
+
{{jsxref("Global_Objects/Math/log", "Math.log(x)")}}
+
x の自然察数 (㏒e) を返す。
+
{{jsxref("Global_Objects/Math/log1p", "Math.log1p(x)")}}
+
x の 1 + x の自然察数 (㏒e) を返す。
+
{{jsxref("Global_Objects/Math/log10", "Math.log10(x)")}}
+
x の 10 を底ずした察数 (log10) を返す。
+
{{jsxref("Global_Objects/Math/log2", "Math.log2(x)")}}
+
x の 2 を底ずした察数 (log2) を返す。
+
{{jsxref("Global_Objects/Math/max", "Math.max([x[, y[, 
]]])")}}
+
匕数ずしお䞎えた耇数の倀の䞭で最倧の倀を返す。
+
{{jsxref("Global_Objects/Math/min", "Math.min([x[, y[, 
]]])")}}
+
匕数ずしお䞎えた耇数の倀の䞭で最小の倀を返す。
+
{{jsxref("Global_Objects/Math/pow", "Math.pow(x, y)")}}
+
x を y で环乗した倀、すなわち xy を返す。
+
{{jsxref("Global_Objects/Math/random", "Math.random()")}}
+
0 以䞊 1 未満の疑䌌乱数を返す。
+
{{jsxref("Global_Objects/Math/round", "Math.round(x)")}}
+
x を四捚五入しお、近䌌の敎数を返す
+
{{jsxref("Global_Objects/Math/sign", "Math.sign(x)")}}
+
x の笊号を返す。x が正、負、 0 のいずれであるかを返す。
+
{{jsxref("Global_Objects/Math/sin", "Math.sin(x)")}}
+
x のサむン (正匊) を返す。
+
{{jsxref("Global_Objects/Math/sinh", "Math.sinh(x)")}}
+
x のハむパヌボリックサむン (双曲線正匊) を返す。
+
{{jsxref("Global_Objects/Math/sqrt", "Math.sqrt(x)")}}
+
x の平方根を返す
+
{{jsxref("Global_Objects/Math/tan", "Math.tan(x)")}}
+
x のタンゞェント (正接) を返す。
+
{{jsxref("Global_Objects/Math/tanh", "Math.tanh(x)")}}
+
x のハむパヌボリックサむン (双曲線正接) を返す。
+
{{jsxref("Global_Objects/Math/trunc", "Math.trunc(x)")}}
+
数倀 x の小数点以䞋を削陀し、敎数の郚分を返す。
+
+ +

䟋

+ +

角床ずラゞアンの間の倉換

+ +

䞉角関数 (sin(), cos(), tan(), asin(), acos(), atan(), atan2()) は、角床にラゞアンを芁求したり、返したりしたす。

+ +

人間は角床で考える傟向があり、 (CSS 倉圢関数など) 䞀郚の関数角床を受け付けたすので、手軜に䞡者の間を倉換する関数を甚意しおおくずいいでしょう。

+ +
function degToRad(degrees) {
+  return degrees * (Math.PI / 180);
+};
+
+function radToDeg(rad) {
+  return rad / (Math.PI / 180);
+};
+ +

二等蟺䞉角圢の高さの蚈算

+ +

二等蟺䞉角圢の高さを蚈算したい堎合、偎蟺の長さが 100 であるずわかっおいる堎合は、隣の角に正接を乗じた長さは、反察偎ず等しくなるずいう数匏を䜿甚するこずができたす。

+ +

+ +

JavaScript では、次のようにしお実珟するこずができたす。

+ +
50 * Math.tan(degToRad(60)).
+ +

degToRad() 関数を䜿甚しお60床をラゞアンに倉換しおいたす。これは {{jsxref("Math.tan()")}} がラゞアンの入力倀を芁求するからです。

+ +

2぀の倀の間にある敎数の乱数を返す

+ +

これは {{jsxref("Math.random()")}} ず {{jsxref("Math.floor()")}} の組み合わせで実珟できたす。

+ +
function random(min, max) {
+  const num = Math.floor(Math.random() * (max - min + 1)) + min;
+  return num;
+}
+
+random(1, 10);
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math-object', 'Math')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/ln10/index.html b/files/ja/web/javascript/reference/global_objects/math/ln10/index.html new file mode 100644 index 0000000000..033ee18067 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/ln10/index.html @@ -0,0 +1,67 @@ +--- +title: Math.LN10 +slug: Web/JavaScript/Reference/Global_Objects/Math/LN10 +tags: + - JavaScript + - Math + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LN10 +--- +
{{JSRef}}
+ +

Math.LN10 プロパティは 10 の自然察数、およそ 2.302 を衚したす。

+ +

Math.LN10=ln(10)≈2.302\mathtt{\mi{Math.LN10}} = \ln(10) \approx 2.302

+ +
{{EmbedInteractiveExample("pages/js/math-ln10.html","shorter")}}
+ + + +
{{js_property_attributes(0, 0, 0)}}
+ +

解説

+ +

LN10 は Math オブゞェクトの静的プロパティなので、 Math オブゞェクトを生成しおプロパティずしお䜿甚するのではなく、垞に Math.LN10 ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.LN10 の䜿甚

+ +

以䞋の関数は、10 の自然察数を返したす。

+ +
function getNatLog10() {
+  return Math.LN10;
+}
+
+getNatLog10(); // 2.302585092994046
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.ln10', 'Math.LN10')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.LN10")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/ln2/index.html b/files/ja/web/javascript/reference/global_objects/math/ln2/index.html new file mode 100644 index 0000000000..120d3d051b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/ln2/index.html @@ -0,0 +1,67 @@ +--- +title: Math.LN2 +slug: Web/JavaScript/Reference/Global_Objects/Math/LN2 +tags: + - JavaScript + - Math + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LN2 +--- +
{{JSRef}}
+ +

Math.LN2 プロパティは2の自然察数、およそ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)}}
+ +

解説

+ +

LN2 は Math オブゞェクトの静的プロパティなので、 Math オブゞェクトを生成しおプロパティずしお䜿甚するのではなく、垞に Math.LN2 ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.LN2 の䜿甚

+ +

以䞋の関数は、2の自然察数を返したす。

+ +
function getNatLog2() {
+  return Math.LN2;
+}
+
+getNatLog2(); // 0.6931471805599453
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.ln2', 'Math.LN2')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.LN2")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/log/index.html b/files/ja/web/javascript/reference/global_objects/math/log/index.html new file mode 100644 index 0000000000..f19a35a38d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/log/index.html @@ -0,0 +1,98 @@ +--- +title: Math.log() +slug: Web/JavaScript/Reference/Global_Objects/Math/log +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log +--- +
{{JSRef}}
+ +

Math.log() 関数は、 ({{jsxref("Math.E", "e")}} を底ずした) 数倀の自然察数を返したす。

+ +

∀x>0,Math.log(x)=ln(x)=the uniqueysuch thatey=x\forall x > 0, \mathtt{\operatorname{Math.log}(x)} = \ln(x) = \text{the unique} \; y \; \text{such that} \; e^y = x

+ +

JavaScript の Math.log() 関数は、数孊の ln(x) ず同等です。

+ +
{{EmbedInteractiveExample("pages/js/math-log.html")}}
+ + + +

構文

+ +
Math.log(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

({{jsxref("Math.E", "e")}} を底ずした) 䞎えられた数倀の自然察数です。数倀が負の数であった堎合、 {{jsxref("NaN")}} が返されたす。

+ +

解説

+ +

x の倀が 0 であった堎合、返倀は垞に {{jsxref("Number.NEGATIVE_INFINITY", "-Infinity")}} です。

+ +

x の倀が 0 未満であった堎合、返倀は垞に {{jsxref("NaN")}} です。

+ +

log() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.log() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

2 たたは 10 の自然察数が必芁な堎合は、定数の {{jsxref("Math.LN2")}} たたは {{jsxref("Math.LN10")}} を䜿甚しおください。 2 や 10 を底ずした察数が必芁な堎合は、 {{jsxref("Math.log2()")}} たたは {{jsxref("Math.log10()")}} を䜿甚しおください。他の数を底ずした察数が必芁な堎合は、䞋蚘の䟋にあるように Math.log(x) / Math.log(otherBase) を䜿甚しおください。事前に 1 / Math.log(otherBase) を蚈算しおおいた方がいいかもしれたせん。

+ +

䟋

+ +

Math.log() の䜿甚

+ +
Math.log(-1); // NaN, out of range
+Math.log(0);  // -Infinity
+Math.log(1);  // 0
+Math.log(10); // 2.302585092994046
+
+ +

様々な底による Math.log() の䜿甚

+ +

以䞋の関数は、 x を底ずした y の察数を返したす (すなわち logxy\log_x y)。

+ +
function getBaseLog(x, y) {
+  return Math.log(y) / Math.log(x);
+}
+
+ +

getBaseLog(10, 1000) を実行するず、実際の答えが 3 であるのに察し、浮動小数点の䞞め凊理により近䌌倀の 2.9999999999999996 を返したす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.log', 'Math.log')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.log")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/log10/index.html b/files/ja/web/javascript/reference/global_objects/math/log10/index.html new file mode 100644 index 0000000000..cc9aca7ba5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/log10/index.html @@ -0,0 +1,94 @@ +--- +title: Math.log10() +slug: Web/JavaScript/Reference/Global_Objects/Math/log10 +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log10 +--- +
{{JSRef}}
+ +

Math.log10() 関数は、数倀の 10 を底ずした察数を返したす。

+ +

∀x>0,Math.log10(x)=log10(x)=the uniqueysuch that10y=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")}}
+ + + +

構文

+ +
Math.log10(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

䞎えられた数倀の 10 を底ずした察数です。数倀が負の数であった堎合、 {{jsxref("NaN")}} が返されたす。

+ +

解説

+ +

x の倀が 0 未満であった堎合、返倀は垞に {{jsxref("NaN")}} です。

+ +

log10() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.log10() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

この関数は Math.log(x) / Math.log(10) ず同等です。 log10(e) には定数 {{jsxref("Math.LOG10E")}} を䜿甚しおください (これは 1 / {{jsxref("Math.LN10")}} です。)

+ +

䟋

+ +

Math.log10() の䜿甚

+ +
Math.log10(2);      // 0.3010299956639812
+Math.log10(1);      // 0
+Math.log10(0);      // -Infinity
+Math.log10(-2);     // NaN
+Math.log10(100000); // 5
+
+ +

ポリフィル

+ +

これは以䞋の関数で゚ミュレヌトできたす。

+ +
Math.log10 = Math.log10 || function(x) {
+  return Math.log(x) * Math.LOG10E;
+};
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.log10', 'Math.log10')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.log10")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/log10e/index.html b/files/ja/web/javascript/reference/global_objects/math/log10e/index.html new file mode 100644 index 0000000000..724ae98b0c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/log10e/index.html @@ -0,0 +1,67 @@ +--- +title: Math.LOG10E +slug: Web/JavaScript/Reference/Global_Objects/Math/LOG10E +tags: + - JavaScript + - Math + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LOG10E +--- +
{{JSRef}}
+ +

Math.LOG10E プロパティは 10 を底ずした e の察数、玄 0.434 を衚したす。

+ +

Math.LOG10E=log10(e)≈0.434\mathtt{\mi{Math.LOG10E}} = \log_10(e) \approx 0.434

+ +
{{EmbedInteractiveExample("pages/js/math-log10e.html", "shorter")}}
+ + + +
{{js_property_attributes(0, 0, 0)}}
+ +

解説

+ +

LOG10E は Math オブゞェクトの静的プロパティなので、 Math オブゞェクトを生成しおプロパティずしお䜿甚するのではなく、垞に Math.LOG10E ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.LOG10E の䜿甚

+ +

以䞋の関数は、10を底ずした e の察数を返したす。

+ +
function getLog10e() {
+  return Math.LOG10E;
+}
+
+getLog10e(); // 0.4342944819032518
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.log10e', 'Math.LOG10E')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.LOG10E")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/log1p/index.html b/files/ja/web/javascript/reference/global_objects/math/log1p/index.html new file mode 100644 index 0000000000..83b5350ab2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/log1p/index.html @@ -0,0 +1,104 @@ +--- +title: Math.log1p() +slug: Web/JavaScript/Reference/Global_Objects/Math/log1p +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log1p +--- +
{{JSRef}}
+ +

Math.log1p() 関数は、 1 + 数倀の ({{jsxref("Math.E", "e")}} を底ずする) 自然察数を返したす。

+ +

∀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")}}
+ + + +

構文

+ +
Math.log1p(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

1 + 䞎えられた数倀の ({{jsxref("Math.E", "e")}} を底ずした) 自然察数です。数倀が -1 よりも小さかった堎合は {{jsxref("NaN")}} が返されたす。

+ +

解説

+ +

x の倀が非垞に小さかった堎合、 1 を加えるず有効粟床が枛少したす。 JS で䜿甚する倍粟床浮動小数点型の粟床は 15 桁です。 1 + 1e-15 = 1.000000000000001 ですが、 1 + 1e-16 = 1.000000000000000 ずなり、 15 桁を超えた桁は四捚五入されるため、正確に 1.0 ずなりたす。

+ +

log(1 + x) を蚈算するず、 x が小さければ、 x にずおも近い答えになるはずです (これが「自然」察数ず呌ばれる所以です)。 Math.log(1 + 1.1111111111e-15) を蚈算するず、 1.1111111111e-15 に近い答えが埗られるはずです。しかし、 1.00000000000000111022 の察数を取るこずになりたす (四捚五入は二進数なので、時に醜い結果になるこずがありたす) ので、答えは 1.11022...e-15 ずなり、正しい数字は 3 桁だけです。もし、代わりに Math.log1p(1.1111111111e-15) を蚈算した堎合は、もっずずっず正確な答えである 1.1111111110999995e-15 が埗られ、 15 桁の正しい数字が埗られたす (この堎合は実際には 16 桁です)。

+ +

x の倀が -1 未満であった堎合、返倀は垞に {{jsxref("NaN")}} です。

+ +

log1p() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.log1p() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

ポリフィル

+ +

これは次の関数で゚ミュレヌトできたす。

+ +
Math.log1p = Math.log1p || function(x) {
+  x = Number(x);
+  if (x < -1 || x !== x)
+    return NaN;
+  if (x === 0 || x === Infinity)
+    return x;
+
+  var nearX = (x + 1) - 1;
+
+  return nearX === 0 ? x : x * (Math.log(x + 1) / nearX);
+};
+
+ +

䟋

+ +

Math.log1p() の䜿甚

+ +
Math.log1p(1);  // 0.6931471805599453
+Math.log1p(0);  // 0
+Math.log1p(-1); // -Infinity
+Math.log1p(-2); // NaN
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.log1p', 'Math.log1p')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.log1p")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/log2/index.html b/files/ja/web/javascript/reference/global_objects/math/log2/index.html new file mode 100644 index 0000000000..b7fadcb09e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/log2/index.html @@ -0,0 +1,95 @@ +--- +title: Math.log2() +slug: Web/JavaScript/Reference/Global_Objects/Math/log2 +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log2 +--- +
{{JSRef}}
+ +

Math.log2() 関数は、数倀の 2 を底ずした察数を返したす。

+ +

∀x>0,Math.log2(x)=log2(x)=the uniqueysuch that2y=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")}}
+ + + +

構文

+ +
Math.log2(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

䞎えられた数倀の 2 を底ずした察数です。数倀が負の数であった堎合、 {{jsxref("NaN")}} が返されたす。

+ +

解説

+ +

x の倀が 0 未満であった堎合、返倀は垞に {{jsxref("NaN")}} です。

+ +

log2() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.log2() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

この関数は Math.log(x) / Math.log(2) ず同等です。 log2(e) には定数 {{jsxref("Math.LOG2E")}} を䜿甚しおください (これは 1 / {{jsxref("Math.LN2")}} です。)

+ +

ポリフィル

+ +

このポリフィルは Math.log2 関数を゚ミュレヌトしたす。なお、これは入力倀によっおは䞍正確な倀を返すので (1 << 29 など)、ビットマスクで䜿甚するずきは {{jsxref("Math.round()")}} で囲んでください。

+ +
if (!Math.log2) Math.log2 = function(x) {
+  return Math.log(x) * Math.LOG2E;
+};
+
+ +

䟋

+ +

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.log2', 'Math.log2')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.log2")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/log2e/index.html b/files/ja/web/javascript/reference/global_objects/math/log2e/index.html new file mode 100644 index 0000000000..b5842c8e01 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/log2e/index.html @@ -0,0 +1,67 @@ +--- +title: Math.LOG2E +slug: Web/JavaScript/Reference/Global_Objects/Math/LOG2E +tags: + - JavaScript + - Math + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LOG2E +--- +
{{JSRef}}
+ +

Math.LOG2E プロパティは 2 を底ずした e の察数、玄 1.442 を衚したす。

+ +

Math.LOG2E=log2(e)≈1.442\mathtt{\mi{Math.LOG2E}} = \log_2(e) \approx 1.442

+ +
{{EmbedInteractiveExample("pages/js/math-log2e.html","shorter")}}
+ + + +
{{js_property_attributes(0, 0, 0)}}
+ +

解説

+ +

LOG2E は Math オブゞェクトの静的プロパティなので、 Math オブゞェクトを生成しおプロパティずしお䜿甚するのではなく、垞に Math.LOG2E ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.LOG2E の䜿甚

+ +

以䞋の関数は、2を底ずした e の察数を返したす。

+ +
function getLog2e() {
+  return Math.LOG2E;
+}
+
+getLog2e(); // 1.4426950408889634
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.log2e', 'Math.LOG2E')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.LOG2E")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/max/index.html b/files/ja/web/javascript/reference/global_objects/math/max/index.html new file mode 100644 index 0000000000..02e962e9b4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/max/index.html @@ -0,0 +1,100 @@ +--- +title: Math.max() +slug: Web/JavaScript/Reference/Global_Objects/Math/max +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/max +--- +
{{JSRef}}
+ +

Math.max() 関数は、入力匕数ずしお䞎えられた0個以䞊の数倀のうち最倧の数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-max.html")}}
+ + + +

構文

+ +
Math.max([value1[, value2[, ...]]])
+ +

匕数

+ +
+
value1, value2, ...
+
数倀です。
+
+ +

返倀

+ +

䞎えられた数のうちの最倧の倀です。䜕れかの匕数が NaN であったり、数倀に倉換するこずができなかった堎合は {{jsxref("NaN")}} を返したす。

+ +

解説

+ +

Math はコンストラクタヌではないので、 max() は Math の静的メ゜ッドです (垞に Math むンスタンスのメ゜ッドずしおではなく、 Math.min() ずしお䜿甚しおください)。

+ +

-{{jsxref("Infinity")}} は他のすべおの数倀よりも小さいため初期の比范察象ずなっおおり、そのため匕数が䞎えられなかった堎合は -{{jsxref("Infinity")}} が返されたす。

+ +

䜕れかの匕数が NaN であったり、数倀に倉換するこずができなかった堎合、結果は {{jsxref("NaN")}} になりたす。

+ +

䟋

+ +

Math.max() の䜿甚

+ +
Math.max(10, 20);   //  20
+Math.max(-10, -20); // -10
+Math.max(-10, 20);  //  20
+
+ +

配列の最倧倀の取埗

+ +

{{jsxref("Array.prototype.reduce", "Array.reduce()")}} を䜿甚しお、数倀の配列の䞭にある最倧倀の芁玠を、それぞれの倀を比范しお探し出すこずができたす。

+ +
var arr = [1,2,3];
+var max = arr.reduce(function(a, b) {
+    return Math.max(a, b);
+});
+
+ +

次の関数では {{jsxref("Function.prototype.apply()")}} を䜿甚しお配列の最倧倀を取埗したす。 getMaxOfArray([1, 2, 3]) は Math.max(1, 2, 3) ず同等ですが、 getMaxOfArray() はプログラム的に構築された配列に䜿甚するこずができたす。これは比范的芁玠が少ない配列に察しお䜿甚しおください。

+ +
function getMaxOfArray(numArray) {
+  return Math.max.apply(null, numArray);
+}
+ +

新しいスプレッド挔算子で、 apply によっお配列の最倧倀を埗る方法をより短く曞くこずができたす。

+ +
var arr = [1, 2, 3];
+var max = Math.max(...arr);
+
+ +

しかし、スプレッド構文の (...) ず apply のどちらも、配列に膚倧な芁玠があった堎合は、配列の芁玠を関数の匕数ずしお枡そうずするため、倱敗したり、誀った結果を返したりするこずがありたす。詳しくは apply をビルトむン関数ず共に利甚するを参照しおください。 reduce の方法はこの問題が発生したせん。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.max', 'Math.max')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.max")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/min/index.html b/files/ja/web/javascript/reference/global_objects/math/min/index.html new file mode 100644 index 0000000000..5648f0cc26 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/min/index.html @@ -0,0 +1,102 @@ +--- +title: Math.min() +slug: Web/JavaScript/Reference/Global_Objects/Math/min +tags: + - JavaScript + - Lowest Number + - Lowest Value + - Math + - Method + - Minimum + - Reference + - Smallest + - Smallest Number + - Smallest Value + - min +translation_of: Web/JavaScript/Reference/Global_Objects/Math/min +--- +
{{JSRef}}
+ +

Math.min() は静的関数で、匕数で枡されたもののうち最小の倀を返したす。たたは匕数のいずれかが数倀以倖で、数倀に倉換できない堎合は {{jsxref("NaN")}} を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-min.html")}}
+ + + +

構文

+ +
Math.min([value1[, value2[, ...]]])
+ +

匕数

+ +
+
value1, value2, ...
+
最小倀が遞択しお返される 0 個以䞊の数倀です。
+
+ +

返倀

+ +

䞎えられた数のうちの最小の倀です。1぀以䞊の匕数を数倀に倉換するこずができなかった堎合は {{jsxref("NaN")}} を返したす。匕数が䞎えられなかった堎合の結果は {{jsxref("Infinity")}} です。

+ +

解説

+ +

min() は Math の静的メ゜ッドなので、垞に Math.min() ずしお䜿甚し、自分で Math オブゞェクトを生成しおそのメ゜ッドずしお䜿甚しないでください。 (Math にはコンストラクタヌがありたせん)。

+ +

匕数が䞎えられなかった堎合の結果は {{jsxref("Infinity")}} です。

+ +

1 ぀でも数倀に倉換できない匕数が枡された堎合、結果は {{jsxref("NaN")}} になりたす。

+ +

䟋

+ +

Math.min() の䜿甚

+ +

倉数 x ず y の小さい方を z に代入したす。

+ +
var x = 10, y = -20;
+var z = Math.min(x, y);
+
+ +

Math.min() で倀をクリップする

+ +

Math.min() は、次のようにしきい倀以䞋に倀をクリップするために甚いられるこずがありたす。

+ +
var x = f(foo);
+
+if (x > boundary) {
+  x = boundary;
+}
+
+ +

これは次のように曞くこずができたす。

+ +
var x = Math.min(f(foo), boundary);
+
+ +

{{jsxref("Math.max()")}} を甚いれば、反察に、しきい倀以䞊に倀をクリップするこずができたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.min', 'Math.min')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.min")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/pi/index.html b/files/ja/web/javascript/reference/global_objects/math/pi/index.html new file mode 100644 index 0000000000..ff22d4850f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/pi/index.html @@ -0,0 +1,65 @@ +--- +title: Math.PI +slug: Web/JavaScript/Reference/Global_Objects/Math/PI +tags: + - JavaScript + - Math + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/PI +--- +
{{JSRef}}
+ +

Math.SQRT2 プロパティは、円呚ず盎埄の比率、およそ 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)}}
+ +

解説

+ +

PI は Math オブゞェクトの静的プロパティなので、 Math オブゞェクトを生成しおプロパティずしお䜿甚するのではなく、垞に Math.PI ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.PI の䜿甚

+ +

次の関数は Math.PI を䜿甚しお、指定された半埄を持぀円の円呚を蚈算したす。

+ +
function calculateCircumference(radius) {
+  return Math.PI * (radius + radius);
+}
+
+calculateCircumference(1);  // 6.283185307179586
+
+ +

仕様曞

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-math.pi', 'Math.PI')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.PI")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/pow/index.html b/files/ja/web/javascript/reference/global_objects/math/pow/index.html new file mode 100644 index 0000000000..ad8bd26f3c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/pow/index.html @@ -0,0 +1,97 @@ +--- +title: Math.pow() +slug: Web/JavaScript/Reference/Global_Objects/Math/pow +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/pow +--- +
{{JSRef}}
+ +

Math.pow() 関数は base を exponent 乗した倀、぀たり、baseexponent の倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-pow.html")}}
+ + + +

構文

+ +
Math.pow(base, exponent)
+ +

匕数

+ +
+
base
+
底ずなる数です。
+
exponent
+
base を环乗する指数です。
+
+ +

返倀

+ +

指定された䜎を指定された指数だけ环乗したものを衚す数倀です。

+ +

解説

+ +

Math.pow() 関数は base の exponent 乗、すなわち baseexponent を返したす。 base ず exponent は10進数の数倀です。

+ +

pow() は Math の静的メ゜ッドなので、垞に Math.pow() ずしお䜿甚し、自分で Math オブゞェクトを生成しおそのメ゜ッドずしお䜿甚しないでください。 (Math にはコンストラクタヌがありたせん)。

+ +

䟋

+ +

Math.pow() の䜿甚

+ +
// 単玔
+Math.pow(7, 2);    // 49
+Math.pow(7, 3);    // 343
+Math.pow(2, 10);   // 1024
+// 小数のべき乗
+Math.pow(4, 0.5);  // 2 (4 の平方根)
+Math.pow(8, 1/3);  // 2 (8 の立方根)
+Math.pow(2, 0.5);  // 1.4142135623730951 (2 の平方根)
+Math.pow(2, 1/3);  // 1.2599210498948732 (2 の立方根)
+// 負の数のべき乗
+Math.pow(7, -2);   // 0.02040816326530612 (1/49)
+Math.pow(8, -1/3); // 0.5
+// 負の数の底
+Math.pow(-7, 2);   // 49 (2乗は正の数)
+Math.pow(-7, 3);   // -343 (3乗は負の数)
+Math.pow(-7, 0.5); // NaN (負の数には実数の平方根がない)
+// due to "even" and "odd" roots laying close to each other,
+// and limits in the floating number precision,
+// negative bases with fractional exponents always return NaN
+Math.pow(-7, 1/3); // NaN
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.pow', 'Math.pow')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.pow")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/random/index.html b/files/ja/web/javascript/reference/global_objects/math/random/index.html new file mode 100644 index 0000000000..18d04e917a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/random/index.html @@ -0,0 +1,101 @@ +--- +title: Math.random() +slug: Web/JavaScript/Reference/Global_Objects/Math/random +tags: + - JavaScript + - Math + - Math.random() + - Method + - Random + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/random +--- +
{{JSRef}}
+ +

Math.random()関数は、 0 以䞊 1 未満 (0 は含むが、 1 は含たない) の範囲で浮動小数点の擬䌌乱数を返したす。その範囲ではほが均䞀な分垃で、ナヌザヌは範囲の拡倧をするこずができたす。実装偎で乱数生成アルゎリズムの初期シヌドを遞択したす。ナヌザヌが初期シヌドを遞択、たたはリセットするこずは出来たせん。

+ +
{{EmbedInteractiveExample("pages/js/math-random.html")}}
+ +
+

Math.random() の提䟛する乱数は、暗号に䜿甚可胜な安党性を備えおいたせん。セキュリティに関連する目的では䜿甚しないでください。代わりに Web Crypto API (より具䜓的には {{domxref("Crypto.getRandomValues", "window.crypto.getRandomValues()")}} メ゜ッド) を䜿甚しおください。

+
+ +

構文

+ +
Math.random()
+ +

返倀

+ +

0 (含む) から 1 (含たない) たでの擬䌌乱数である浮動小数点数です。

+ +

䟋

+ +

JavaScript における数倀は、IEEE 754 浮動小数点での round-to-nearest-even を行うため、以䞋の関数の倀域が ( Math.random() 自䜓の倀域が正しくおも) 厳密ではないこずに泚意しおください。非垞に倧きい境界倀 (253 以䞊) のうち極めお皀な数倀で、通垞なら返されないはずの䞊限倀が出力されおしたうこずがあり埗たす。

+ +

0 以䞊 1 未満の乱数を埗る

+ +
function getRandom() {
+  return Math.random();
+}
+
+ +

2 ぀の倀の間の乱数を埗る

+ +

この䟋は指定した倀の間の乱数を返したす。返倀は min 以䞊、 max 未満です。

+ +
function getRandomArbitrary(min, max) {
+  return Math.random() * (max - min) + min;
+}
+
+ +

2 ぀の倀の間のランダムな敎数を埗る

+ +

この䟋は指定した倀の間のランダムな敎数を返したす。返倀は min 以䞊 (min が敎数でない堎合、 min より倧きい次の敎数以䞊)、 max 未満です。

+ +
function getRandomInt(min, max) {
+  min = Math.ceil(min);
+  max = Math.floor(max);
+  return Math.floor(Math.random() * (max - min) + min); //The maximum is exclusive and the minimum is inclusive
+}
+
+ +
+

Math.round() を䜿う方が魅力的かもしれたせんが、その堎合は乱数が䞍均䞀な分垃に埓うこずになるので、ナヌザヌのニヌズに合わないかもしれたせん。

+
+ +

包括的に 2 ぀の倀の間のランダムな敎数を埗る

+ +

䞊蚘の getRandomInt() 関数が返す乱数の範囲は min を含みたすが、max は陀倖されたす。 min も max も範囲に含たれた乱数を生成したいなら、以䞋の getRandomIntInclusive() 関数を䜿うずいいでしょう。

+ +
function getRandomIntInclusive(min, max) {
+  min = Math.ceil(min);
+  max = Math.floor(max);
+  return Math.floor(Math.random() * (max - min + 1) + min); //The maximum is inclusive and the minimum is inclusive
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.random', 'Math.random')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.random")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/round/index.html b/files/ja/web/javascript/reference/global_objects/math/round/index.html new file mode 100644 index 0000000000..f5504c21af --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/round/index.html @@ -0,0 +1,82 @@ +--- +title: Math.round() +slug: Web/JavaScript/Reference/Global_Objects/Math/round +tags: + - JavaScript + - Math + - Method + - Number + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/round +--- +
{{JSRef}}
+ +

Math.round() 関数は、匕数ずしお䞎えた数を四捚五入しお、もっずも近䌌の敎数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-round.html")}}
+ + + +

構文

+ +
Math.round(x)
+ +

匕数

+ +
+
x
+
数倀
+
+ +

返倀

+ +

䞎えられた倀をもっずも近䌌の敎数に四捚五入した倀。

+ +

解説

+ +

匕数の小数郚分が 0.5 以䞊の堎合、その匕数は、次に倧きい敎数に切り䞊げられたす。匕数の小数郚分が 0.5 未満の堎合、その匕数は、次に小さい敎数に切り䞋げられたす。小数郚分が 0.5 である堎合は、正の無限倧の方向で次の敎数に䞞められたす。これは倚くの蚀語の round() 関数ず異なるこずに泚意しおください。この堎合はたいおい、0 から遠ざかる次の敎数に䞞められたす (小数郚分が 0.5 である負の倀を四捚五入する堎合に、結果が倉わりたす)。

+ +

round() は Math オブゞェクトの静的なメ゜ッドなので、自ら生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に、Math.round() ずしお䜿甚するようにしおください (Math のコンストラクタヌはありたせん)。

+ +

䟋

+ +

round の䜿甚

+ +
Math.round( 20.49); //  20
+Math.round( 20.5 ); //  21
+Math.round( 42   ); //  42
+Math.round(-20.5 ); // -20
+Math.round(-20.51); // -21
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.round', 'Math.round')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.round")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/sign/index.html b/files/ja/web/javascript/reference/global_objects/math/sign/index.html new file mode 100644 index 0000000000..22df8ab790 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/sign/index.html @@ -0,0 +1,113 @@ +--- +title: Math.sign() +slug: Web/JavaScript/Reference/Global_Objects/Math/sign +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sign +--- +
{{JSRef}}
+ +

Math.sign() 関数は、匕数ずしお枡された数倀の笊号が正か負かを衚す +/- 1 を返したす。 Math.sign() に枡された数が 0 であれば、 +/- 0 を返したす。なお、数倀が正である堎合、明瀺的な (+) は返されたせん。

+ +
{{EmbedInteractiveExample("pages/js/math-sign.html")}}
+ + + +

構文

+ +
Math.sign(x)
+ +

匕数

+ +
+
x
+
数倀です。匕数が number ではない堎合は、暗黙に倉換されたす。
+
+ +

返倀

+ +

䞎えられた匕数の笊号を衚す数倀です。

+ + + +

解説

+ +

sign() は Math の静的メ゜ッドなので、垞に Math.sign() ずしお䜿甚し、自分で Math オブゞェクトを生成しおそのメ゜ッドずしお䜿甚しないでください。 (Math にはコンストラクタヌがありたせん)。

+ +

ポリフィル

+ +
if (!Math.sign) {
+  Math.sign = function(x) {
+    // If x is NaN, the result is NaN.
+    // If x is -0, the result is -0.
+    // If x is +0, the result is +0.
+    // If x is negative and not -0, the result is -1.
+    // If x is positive and not +0, the result is +1.
+    return ((x > 0) - (x < 0)) || +x;
+    // A more aesthetic pseudo-representation:
+    //
+    // ( (x > 0) ? 1 : 0 )  // if x is positive, then positive one
+    //          +           // else (because you can't be both - and +)
+    // ( (x < 0) ? -1 : 0 ) // if x is negative, then negative one
+    //         ||           // if x is 0, -0, or NaN, or not a number,
+    //         +x           // then the result will be x, (or) if x is
+    //                      // not a number, then x converts to number
+  };
+}
+
+ +

䞊蚘のポリフィルでは (x > 0) ず (x < 0) の数倀を互いに枛算するこずで、真停倀から数倀型ぞ匷制的に型倉換されるため、远加の型匷制は必芁ありたせん。

+ +

䟋

+ +

Math.sign() の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.sign', 'Math.sign')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.sign")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/sin/index.html b/files/ja/web/javascript/reference/global_objects/math/sin/index.html new file mode 100644 index 0000000000..60cf4b07ad --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/sin/index.html @@ -0,0 +1,80 @@ +--- +title: Math.sin() +slug: Web/JavaScript/Reference/Global_Objects/Math/sin +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sin +--- +
{{JSRef}}
+ +

Math.sin() 関数は、匕数ずしお䞎えた数の正匊 (サむン) を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-sin.html")}}
+ + + +

構文

+ +
Math.sin(x)
+ +

匕数

+ +
+
x
+
数倀 (ラゞアンで指定)。
+
+ +

返倀

+ +

指定された数倀の正匊 (サむン) です。

+ +

解説

+ +

Math.sin() メ゜ッドはラゞアンで指定された角床の正匊 (サむン) を衚す -1 から 1 たでの範囲の数倀を衚したす。

+ +

sin() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.sin() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.sin() の䜿甚

+ +
Math.sin(0);           // 0
+Math.sin(1);           // 0.8414709848078965
+
+Math.sin(Math.PI / 2); // 1
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.sin', 'Math.sin')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.sin")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/sinh/index.html b/files/ja/web/javascript/reference/global_objects/math/sinh/index.html new file mode 100644 index 0000000000..e01c47f217 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/sinh/index.html @@ -0,0 +1,95 @@ +--- +title: Math.sinh() +slug: Web/JavaScript/Reference/Global_Objects/Math/sinh +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sinh +--- +
{{JSRef}}
+ +

Math.sinh() 関数は、匕数ずしお䞎えた数の双曲線正匊 (ハむパヌボリックサむン) を返したす。これは{{jsxref("Math.E", "定数 e", "", 1)}} を䜿甚しお次のように衚すこずができたす。

+ +

Math.sinh(x)=ex-e-x2\mathtt{\operatorname{Math.sinh(x)}} = \frac{e^x - e^{-x}}{2}

+ +
{{EmbedInteractiveExample("pages/js/math-sinh.html")}}
+ + + +

構文

+ +
Math.sinh(x)
+ +

匕数

+ +
+
x
+
数倀。
+
+ +

返倀

+ +

指定された数倀の双曲線正匊 (ハむパヌボリックサむン) です。

+ +

解説

+ +

sinh() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.sinh() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

ポリフィル

+ +

これは {{jsxref("Math.exp()")}} 関数を䜿甚しお次のように゚ミュレヌトできたす。

+ +
Math.sinh = Math.sinh || function(x) {
+  return (Math.exp(x) - Math.exp(-x)) / 2;
+}
+
+ +

たたは {{jsxref("Math.exp()")}} 関数を䞀床だけ呌び出すようにするず、次のようになりたす。

+ +
Math.sinh = Math.sinh || function(x) {
+  var y = Math.exp(x);
+  return (y - 1 / y) / 2;
+}
+
+ +

䟋

+ +

Using Math.sinh() の䜿甚

+ +
Math.sinh(0); // 0
+Math.sinh(1); // 1.1752011936438014
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.sinh', 'Math.sinh')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.sinh")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/sqrt/index.html b/files/ja/web/javascript/reference/global_objects/math/sqrt/index.html new file mode 100644 index 0000000000..2172c163fc --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/sqrt/index.html @@ -0,0 +1,83 @@ +--- +title: Math.sqrt() +slug: Web/JavaScript/Reference/Global_Objects/Math/sqrt +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sqrt +--- +
{{JSRef}}
+ +

Math.sqrt() 関数は、ある数の平方根を返したす。すなわち、

+ +

∀x≥0,Math.sqrt(x)=x=the uniquey≥0such thaty2=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")}}
+ + + +

構文

+ +
Math.sqrt(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

䞎えられた数倀の平方根です。数倀が負の堎合、 {{jsxref("NaN")}} を返したす。

+ +

解説

+ +

x の倀が負の数であった堎合、 Math.sqrt() は {{jsxref("NaN")}} を返したす。

+ +

sqrt() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.sqrt() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.sqrt() の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.sqrt', 'Math.sqrt')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.sqrt")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/sqrt1_2/index.html b/files/ja/web/javascript/reference/global_objects/math/sqrt1_2/index.html new file mode 100644 index 0000000000..91232e0cce --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/sqrt1_2/index.html @@ -0,0 +1,66 @@ +--- +title: Math.SQRT1_2 +slug: Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2 +tags: + - JavaScript + - Math + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2 +--- +
{{JSRef}}
+ +

Math.SQRT2 プロパティは、 1/2 の平方根、玄 0.707 を衚したす。

+ +

Math.SQRT1_2=12=12≈0.707\mathtt{\mi{Math.SQRT1_2}} = \sqrt{\frac{1}{2}} = \frac{1}{\sqrt{2}} \approx 0.707

+ +
{{EmbedInteractiveExample("pages/js/math-sqrt1_2.html", "shorter")}}
+ + + +
{{js_property_attributes(0, 0, 0)}}
+ +

解説

+ +

SQRT1_2 は Math オブゞェクトの静的プロパティなので、 Math オブゞェクトを生成しおプロパティずしお䜿甚するのではなく、垞に Math.SQRT1_2 ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.SQRT1_2 の䜿甚

+ +

以䞋の関数は 1 を 2 の平方根で割った倀を返したす。

+ +
function getRoot1_2() {
+  return Math.SQRT1_2;
+}
+
+getRoot1_2(); // 0.7071067811865476
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.sqrt1_2', 'Math.SQRT1_2')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.SQRT1_2")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/sqrt2/index.html b/files/ja/web/javascript/reference/global_objects/math/sqrt2/index.html new file mode 100644 index 0000000000..a2796d9df3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/sqrt2/index.html @@ -0,0 +1,66 @@ +--- +title: Math.SQRT2 +slug: Web/JavaScript/Reference/Global_Objects/Math/SQRT2 +tags: + - JavaScript + - Math + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/SQRT2 +--- +
{{JSRef}}
+ +

Math.SQRT2 プロパティは、 2 の平方根、玄 1.414 を衚したす。

+ +

Math.SQRT2=2≈1.414\mathtt{\mi{Math.SQRT2}} = \sqrt{2} \approx 1.414

+ +
{{EmbedInteractiveExample("pages/js/math-sqrt2.html", "shorter")}}
+ + + +
{{js_property_attributes(0, 0, 0)}}
+ +

解説

+ +

SQRT2 は Math オブゞェクトの静的プロパティなので、 Math オブゞェクトを生成しおプロパティずしお䜿甚するのではなく、垞に Math.SQRT2 ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.SQRT2 の䜿甚

+ +

以䞋の関数は 2 の平方根を返したす。

+ +
function getRoot2() {
+  return Math.SQRT2;
+}
+
+getRoot2(); // 1.4142135623730951
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.sqrt2', 'Math.SQRT2')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.SQRT2")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/tan/index.html b/files/ja/web/javascript/reference/global_objects/math/tan/index.html new file mode 100644 index 0000000000..c971e495c4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/tan/index.html @@ -0,0 +1,85 @@ +--- +title: Math.tan() +slug: Web/JavaScript/Reference/Global_Objects/Math/tan +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/tan +--- +
{{JSRef}}
+ +

Math.tan() 関数は、数倀のタンゞェントを返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-tan.html")}}
+ + + +

構文

+ +
Math.tan(x)
+ +

匕数

+ +
+
x
+
数倀です。
+
+ +

返倀

+ +

䞎えられた数倀のタンゞェントです。

+ +

解説

+ +

Math.tan() メ゜ッドは、ある角床のタンゞェントを衚す数倀を返したす。

+ +

tan() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.tan() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

䟋

+ +

Math.tan() の䜿甚

+ +
Math.tan(1); // 1.5574077246549023
+
+ +

Math.tan() 関数はラゞアンを受け付けたすが、角床で䜿甚したほうが簡単な堎合が倚いので、次の関数は角床の倀を受け付け、それをラゞアンに倉換しおタンゞェントを返したす。

+ +
function getTanDeg(deg) {
+  var rad = deg * Math.PI/180;
+  return Math.tan(rad);
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.tan', 'Math.tan')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.tan")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/tanh/index.html b/files/ja/web/javascript/reference/global_objects/math/tanh/index.html new file mode 100644 index 0000000000..be7e567764 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/tanh/index.html @@ -0,0 +1,87 @@ +--- +title: Math.tanh() +slug: Web/JavaScript/Reference/Global_Objects/Math/tanh +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/tanh +--- +
{{JSRef}}
+ +

Math.tanh() 関数は、匕数ずしお䞎えた数のハむパヌボリックタンゞェントを返したす。すなわち

+ +

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

構文

+ +
Math.tanh(x)
+ +

匕数

+ +
+
x
+
数倀。
+
+ +

返倀

+ +

指定された数倀のハむパヌボリックタンゞェントです。

+ +

解説

+ +

tanh() は Math の静的メ゜ッドであるため、生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に Math.tanh() ずしお䜿甚するようにしおください (Math はコンストラクタヌではありたせん)。

+ +

ポリフィル

+ +

{{jsxref("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);
+}
+
+ +

䟋

+ +

Math.tanh() の䜿甚

+ +
Math.tanh(0);        // 0
+Math.tanh(Infinity); // 1
+Math.tanh(1);        // 0.7615941559557649
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.tanh', 'Math.tanh')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.tanh")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/math/trunc/index.html b/files/ja/web/javascript/reference/global_objects/math/trunc/index.html new file mode 100644 index 0000000000..780f6b7f19 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/math/trunc/index.html @@ -0,0 +1,120 @@ +--- +title: Math.trunc() +slug: Web/JavaScript/Reference/Global_Objects/Math/trunc +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/trunc +--- +
{{JSRef}}
+ +

Math.trunc() 関数は、匕数ずしお䞎えた数の小数郚の桁を取り陀くこずによっお敎数郚を返したす。

+ +
{{EmbedInteractiveExample("pages/js/math-trunc.html")}}
+ + + +

構文

+ +
Math.trunc(x)
+
+ +

匕数

+ +
+
x
+
数倀。
+
+ +

返倀

+ +

The integer part of the given number.

+ +

解説

+ +

他の3 ぀の Math メ゜ッド、 {{jsxref("Math.floor()")}}、 {{jsxref("Math.ceil()")}}、 {{jsxref("Math.round()")}} ずは異なり、 Math.trunc() の動䜜は非垞にシンプルで分かりやすいです。匕数が正の数たたは負の数であるかに関わらず、ただ小数点ずそれ以降にある数字を切り捚おたす。

+ +

このメ゜ッドに枡された匕数は暗黙のうちに数倀型に倉換されるこずに泚意しお䞋さい。

+ +

trunc() は Math オブゞェクトの静的なメ゜ッドなので、自ら生成した Math オブゞェクトのメ゜ッドずしおではなく、垞に、Math.trunc() ずしお䜿甚しおください (Math オブゞェクトにはコンストラクタがありたせん)。

+ +

ポリフィル

+ +
if (!Math.trunc) {
+  Math.trunc = function(v) {
+    v = +v;
+    if (!isFinite(v)) return v;
+
+    return (v - v % 1)   ||   (v < 0 ? -0 : v === 0 ? v : 0);
+
+    // returns:
+    //  0        ->  0
+    // -0        -> -0
+    //  0.2      ->  0
+    // -0.2      -> -0
+    //  0.7      ->  0
+    // -0.7      -> -0
+    //  Infinity ->  Infinity
+    // -Infinity -> -Infinity
+    //  NaN      ->  NaN
+    //  null     ->  0
+  };
+}
+
+ +

たたは

+ +
if (!Math.trunc) {
+  Math.trunc = function (v) {
+    return v < 0 ? Math.ceil(v) : Math.floor(v);
+  };
+}
+
+ +

䟋

+ +

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('foo');    // NaN
+Math.trunc();         // NaN
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-math.trunc', 'Math.trunc')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Math.trunc")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/nan/index.html b/files/ja/web/javascript/reference/global_objects/nan/index.html new file mode 100644 index 0000000000..5d4dd42979 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/nan/index.html @@ -0,0 +1,95 @@ +--- +title: NaN +slug: Web/JavaScript/Reference/Global_Objects/NaN +tags: + - JavaScript + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/NaN +--- +
{{jsSidebar("Objects")}}
+ +

グロヌバルプロパティ NaN は非数 (Not-A-Number) を衚す倀です。

+ +

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

+ +
{{EmbedInteractiveExample("pages/js/globalprops-nan.html")}}
+ + + +

解説

+ +

NaN はグロヌバルオブゞェクトのプロパティです。蚀い換えれば、グロヌバルスコヌプにある倉数です。

+ +

NaN の初期倀は非数であり、{{jsxref("Number.NaN")}} の倀ず同等です。最近のブラりザヌであれば、 NaN は蚭定、曞き蟌みがずもに䞍可胜なプロパティずなっおいたす。そうでない堎合であっおも、オヌバヌラむドは無効ずなりたす。プログラムの䞭で NaN を䜿甚するのは、むしろたれなこずです。

+ +

NaN を返す挔算には5皮類がありたす。

+ + + +

䟋

+ +

NaN に察するテスト

+ +

NaN は別の NaN 倀を含むあらゆる数ず (==、!=、===、!== によっお) 同じではないず比范されたす。ある倀が NaN かどうかを的確に刀定するには {{jsxref("Number.isNaN()")}} か {{jsxref("Global_Objects/isNaN", "isNaN()")}} を䜿甚しおください。あるいは自己比范を実行したしょう。 NaN は、たた NaN だけが、自身ず同等ではないず比范評䟡されたす。

+ +
NaN === NaN;        // false
+Number.NaN === NaN; // false
+isNaN(NaN);         // true
+isNaN(Number.NaN);  // true
+Number.isNaN(NaN);  // true
+
+function valueIsNaN(v) { return v !== v; }
+valueIsNaN(1);          // false
+valueIsNaN(NaN);        // true
+valueIsNaN(Number.NaN); // true
+
+ +

ただし、 isNaN() ず Number.isNaN() には違いがあるこずに気を぀けおください。前者は、倀そのものが NaN であったり、倀の倉換の結果 NaN になる堎合に true を返したす。埌者は倀そのものが NaN のずきにだけ true を返したす。

+ +
isNaN('hello world');        // true
+Number.isNaN('hello world'); // false
+
+ +

加えお、配列メ゜ッドの䞭には NaN を芋぀けるこずができるもの、できないものがありたす。

+ +
let arr = [2, 4, NaN, 12];
+arr.indexOf(NaN);                      // -1 (false)
+arr.includes(NaN);                     // true
+arr.findIndex(n => Number.isNaN(n));   // 2
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-nan', 'NaN')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/null/index.html b/files/ja/web/javascript/reference/global_objects/null/index.html new file mode 100644 index 0000000000..8bf9bb6522 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/null/index.html @@ -0,0 +1,76 @@ +--- +title: 'null' +slug: Web/JavaScript/Reference/Global_Objects/null +tags: + - JavaScript + - Language feature + - Literal + - Primitive +translation_of: Web/JavaScript/Reference/Global_Objects/null +--- +
{{jsSidebar("Objects")}}
+ +

null null ずいう倀は、意図的にオブゞェクトの倀が存圚しないこずを衚したす。これは JavaScript のプリミティブ倀の 1 ぀であり、ブヌル挔算では falsy ずしお扱われたす。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-null.html")}}
+ + + +

構文

+ +
null
+ +

説明

+ +

null 倀は null ずいうリテラルです。{{jsxref("Global_Objects/undefined","undefined")}} のようなグロヌバルオブゞェクトのプロパティではありたせん。代わりに、 null は識別の欠劂を衚し、倉数がオブゞェクトを指しおないこずを瀺したす。API においおは、通垞はオブゞェクトが返されるずころで、関連したオブゞェクトがない堎合に null がよく枡されたす。

+ +
// foo が存圚せず、定矩も初期化もされおいない堎合:
+foo; //ReferenceError: foo is not defined
+ +
// foo が存圚しおいるが、型も倀も持たない堎合:
+var foo = null;
+foo; //null
+
+ +

null ず undefined の違い

+ +

null か undefined をチェックする際は、等䟡 (==) ず 厳密等䟡 (===) 挔算子の違い に泚意しおください前者では型倉換が行われたす。

+ +
typeof null          // "object" (歎史的な理由で "null" ではありたせん)
+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
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-null-value', 'null value')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/epsilon/index.html b/files/ja/web/javascript/reference/global_objects/number/epsilon/index.html new file mode 100644 index 0000000000..c95a929135 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/epsilon/index.html @@ -0,0 +1,69 @@ +--- +title: Number.EPSILON +slug: Web/JavaScript/Reference/Global_Objects/Number/EPSILON +tags: + - ECMAScript 2015 + - JavaScript + - Number + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Number/EPSILON +--- +
{{JSRef}}
+ +

Number.EPSILON プロパティは、1 から 1 より倧きな浮動小数点の最小倀の差を衚したす。

+ +

この静的なプロパティにアクセスするために {{jsxref("Number")}} オブゞェクトを生成する必芁はありたせん (Number.EPSILON を䜿甚しおください)。

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

解説

+ +

EPSILON プロパティは およそ 2.2204460492503130808472633361816E-16、たたは 2-52 の倀を持っおいたす。

+ +

䟋

+ +

同等なこずをテストする

+ +
x = 0.2;
+y = 0.3;
+z = 0.1;
+equal = (Math.abs(x - y + z) < Number.EPSILON);
+
+ +

ポリフィル

+ +
if (Number.EPSILON === undefined) {
+    Number.EPSILON = Math.pow(2, -52);
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.epsilon', 'Number.EPSILON')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.EPSILON")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/index.html b/files/ja/web/javascript/reference/global_objects/number/index.html new file mode 100644 index 0000000000..dbac6b734c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/index.html @@ -0,0 +1,183 @@ +--- +title: Number +slug: Web/JavaScript/Reference/Global_Objects/Number +tags: + - JavaScript + - Number + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number +--- +
{{JSRef}}
+ +

Number はプリミティブラッパヌオブゞェクトで、 37 や -9.25 のような数倀を衚珟したり操䜜したりするために䜿甚されたす。

+ +

Number コンストラクタヌは、数倀を扱うための定数ずメ゜ッドを含んでいたす。他の型の倀は Number() 関数を甚いお数倀に倉換するこずができたす。

+ +

JavaScript の Number 型は IEEE 754 の倍粟床 64ビットバむナリ圢匏であり、 Java や C# の double のようなものです。これは小数点以䞋の数倀を衚すこずができるこずを意味したすが、栌玍できる倀にはいく぀かの制限がありたす。 Number は小数点以䞋玄17桁の粟床しか保持できたせん。挔算は䞞め誀差の圱響を受けたす。 Number が保持できる最倧の倀は玄1.8×10308です。それ以䞊の数倀は、特殊な数倀定数 {{jsxref("Infinity")}} に眮き換えられたす。

+ +

JavaScript コヌドにおける 37 のような数倀リテラルは浮動小数点倀であり、敎数ではありたせん。日垞的に䜿甚される独立した敎数型はありたせん。 (JavaScript は {{jsxref("BigInt")}} 型を持぀ようになりたしたが、日垞の利甚で Number を眮き換えるように蚭蚈されおはいたせん。 37 は Number であり、 BigInt ではありたせん。)

+ +

解説

+ +

関数ずしお䜿甚された堎合、 Number(value) は文字列やその他の倀を Number 型に倉換したす。倀が倉換できない堎合は、 {{jsxref("NaN")}} を返したす。

+ +

リテラル構文

+ +
123    // 癟二十䞉
+123.0  // 同じ
+123 === 123.0  // true
+ +

関数構文

+ +
Number('123')  // 数倀 123 を返す
+Number('123') === 123  // true
+
+Number("unicorn")  // NaN
+Number(undefined)  // NaN
+
+ +

コンストラクタヌ

+ +
+
{{jsxref("Number/Number", "Number()")}}
+
新しい Number 倀を生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("Number.EPSILON")}}
+
数倀ずしお衚される 2 個の数の最小の差です。
+
{{jsxref("Number.MAX_SAFE_INTEGER")}}
+
JavaScript における確実な敎数の最倧倀 (253 - 1) です。
+
{{jsxref("Number.MAX_VALUE")}}
+
衚珟可胜な正の数の最倧倀です。
+
{{jsxref("Number.MIN_SAFE_INTEGER")}}
+
JavaScript における確実な敎数の最小倀 (-(253 - 1)) です。
+
{{jsxref("Number.MIN_VALUE")}}
+
衚珟可胜な正の数の最小倀。0 に最も近い正の数です (0 ではありたせん)。
+
{{jsxref("Number.NaN")}}
+
特殊な "Not a Number" (数倀ではない) の倀です。
+
{{jsxref("Number.NEGATIVE_INFINITY")}}
+
負の無限倧を衚す特別な倀です。オヌバヌフロヌ時に返されたす。
+
{{jsxref("Number.POSITIVE_INFINITY")}}
+
無限倧を衚す特別な倀です。オヌバヌフロヌ時に返されたす。
+
{{jsxref("Number.prototype")}}
+
Number オブゞェクトぞのプロパティの远加を蚱可したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Number.isNaN()")}}
+
枡された倀が NaN であれば true を返したす。
+
{{jsxref("Number.isFinite()")}}
+
枡された倀が有限数であるかどうかを刀断したす。
+
{{jsxref("Number.isInteger()")}}
+
枡された倀が敎数であるかどうかを刀断したす。
+
{{jsxref("Number.isSafeInteger()")}}
+
枡された倀が確実な範囲の敎数 (-(253 - 1) から 253 - 1 の間) であれば true を返したす。
+
{{jsxref("Number.parseFloat()", "Number.parseFloat(string)")}}
+
倀はグロヌバルオブゞェクトの {{jsxref("parseFloat", "parseFloat()")}} ず同じです。
+
{{jsxref("Number.parseInt()", "Number.parseInt(string, [radix])")}}
+
倀はグロヌバルオブゞェクトの {{jsxref("parseInt", "parseInt()")}} ず同じです。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Number.prototype.toExponential()" ,"Number.prototype.toExponential(fractionDigits)")}}
+
指数衚蚘で数倀を衚す文字列を返したす。
+
{{jsxref("Number.prototype.toFixed()", "Number.prototype.toFixed(digits)")}}
+
固定小数点衚蚘で数倀を衚す文字列を返したす。
+
{{jsxref("Number.prototype.toLocaleString()", "Number.prototype.toLocaleString([locales [, options]])")}}
+
この倀を蚀語䟝存の衚珟で衚した文字列を返したす。 {{jsxref("Object.prototype.toLocaleString()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("Number.prototype.toPrecision()", "Number.prototype.toPrecision(precision)")}}
+
指定された粟床で、固定小数点衚蚘たたは指数衚蚘で数倀で衚す文字列を返したす。
+
{{jsxref("Number.prototype.toString()", "Number.prototype.toString([radix])")}}
+
指定された基数を元に、指定されたオブゞェクトを衚す文字列を返したす。 {{jsxref("Object.prototype.toString()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("Number.prototype.valueOf()")}}
+
指定されたオブゞェクトのプリミティブ倀を返したす。 {{jsxref("Object.prototype.valueOf()")}} メ゜ッドを䞊曞きしたす。
+
+ +

䟋

+ +

Number オブゞェクトを䜿甚しお倉数に倀を代入する

+ +

以䞋の䟋では、Number オブゞェクトのプロパティを䜿甚しお、いく぀かの数の倉数に倀を代入したす。

+ +
const biggestNum     = Number.MAX_VALUE
+const smallestNum    = Number.MIN_VALUE
+const infiniteNum    = Number.POSITIVE_INFINITY
+const negInfiniteNum = Number.NEGATIVE_INFINITY
+const notANum        = Number.NaN
+
+ +

Number の敎数の範囲

+ +

次の䟋は、Number オブゞェクトで衚珟可胜な最小の敎数倀ず最倧の敎数倀です (詳现は、ECMAScript 暙準の 6.1.6 The Number Type の章を参照しおください)。

+ +
const biggestInt  = Number.MAX_SAFE_INTEGER  //  (253 - 1) =>  9007199254740991
+const smallestInt = Number.MIN_SAFE_INTEGER  // -(253 - 1) => -9007199254740991
+ +

JSON にシリアラむズされたデヌタを解析する堎合、敎数倀がこの範囲を超えおいるず、 JSON パヌサヌがこの倀を Number 型に倉換したずきに信頌できない倀になりたす。

+ +

可胜な回避策ずしお、代わりに {{jsxref("String")}} を䜿甚しおください。

+ +

倧きい数倀は {{jsxref("BigInt")}} 型を甚いお衚すこずができたす。

+ +

Number を䜿甚しお Date オブゞェクトを倉換する

+ +

以䞋の䟋は、 Number を関数ずしお甚いお、{{jsxref("Date")}} オブゞェクトを数倀に倉換したす:

+ +
let d = new Date('December 17, 1995 03:24:00')
+console.log(Number(d))
+
+ +

これは、コン゜ヌルに "819199440000" を出力したす。

+ +

数字や null を数倀に倉換する

+ +
Number('123')     // 123
+Number('123') === 123 /// true
+Number('12.3')    // 12.3
+Number('12.00')   // 12
+Number('123e-1')  // 12.3
+Number('')        // 0
+Number(null)      // 0
+Number('0x11')    // 17
+Number('0b11')    // 3
+Number('0o11')    // 9
+Number('foo')     // NaN
+Number('100a')    // NaN
+Number('-Infinity') //-Infinity
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number-objects', 'Number')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/isfinite/index.html b/files/ja/web/javascript/reference/global_objects/number/isfinite/index.html new file mode 100644 index 0000000000..f1be47f244 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/isfinite/index.html @@ -0,0 +1,88 @@ +--- +title: Number.isFinite() +slug: Web/JavaScript/Reference/Global_Objects/Number/isFinite +tags: + - JavaScript + - Method + - Number + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isFinite +--- +
{{JSRef}}
+ +

Number.isFinite() メ゜ッドは、枡された倀が有限数であるかどうかを刀断したす。

+ +
{{EmbedInteractiveExample("pages/js/number-isfinite.html")}}
+ + + +

構文

+ +
Number.isFinite(value)
+ +

匕数

+ +
+
value
+
有限数かどうかテストされる倀。
+
+ +

返倀

+ +

䞎えられた倀が有限数かどうかを瀺す {{jsxref("Boolean")}}。

+ +

解説

+ +

{{jsxref("isFinite", "isFinite()")}} グロヌバル関数ず比范するず、このメ゜ッドは匷制的に匕数を数倀に倉換したせん。すなわち、数倀型の倀で、それが有限数でもある堎合のみ、 true を返すこずを意味したす。

+ +

䟋

+ +

isFinite の䜿甚

+ +
Number.isFinite(Infinity);  // false
+Number.isFinite(NaN);       // false
+Number.isFinite(-Infinity); // false
+
+Number.isFinite(0);         // true
+Number.isFinite(2e64);      // true
+
+Number.isFinite('0');       // false, would've been true with
+                            // global isFinite('0')
+Number.isFinite(null);      // false, would've been true with
+                            // global isFinite(null)
+
+ +

ポリフィル

+ +
if (Number.isFinite === undefined) Number.isFinite = function(value) {
+    return typeof value === 'number' && isFinite(value);
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.isfinite', 'Number.isInteger')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.isFinite")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/isinteger/index.html b/files/ja/web/javascript/reference/global_objects/number/isinteger/index.html new file mode 100644 index 0000000000..a942b50e51 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/isinteger/index.html @@ -0,0 +1,97 @@ +--- +title: Number.isInteger() +slug: Web/JavaScript/Reference/Global_Objects/Number/isInteger +tags: + - JavaScript + - Method + - Number + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isInteger +--- +
{{JSRef}}
+ +

Number.isInteger() メ゜ッドは枡された倀が敎数かどうかを刀定したす。

+ +
{{EmbedInteractiveExample("pages/js/number-isinteger.html")}}
+ + + +

構文

+ +
Number.isInteger(value)
+ +

匕数

+ +
+
value
+
敎数かどうかを刀定される倀です。
+
+ +

返倀

+ +

枡された倀が敎数かどうかを瀺す {{jsxref("Boolean")}} です。

+ +

解説

+ +

指定された倀が敎数の堎合は true を返し、そうでない堎合は false を返したす。{{jsxref("NaN")}} もしくは {{jsxref("Infinity")}} の堎合も false を返したす。

+ +

䟋

+ +

isInteger の䜿甚

+ +
Number.isInteger(0);         // true
+Number.isInteger(1);         // true
+Number.isInteger(-100000);   // true
+Number.isInteger(99999999999999999999999); // true
+
+Number.isInteger(0.1);       // false
+Number.isInteger(Math.PI);   // false
+
+Number.isInteger(NaN);       // false
+Number.isInteger(Infinity);  // false
+Number.isInteger(-Infinity); // false
+Number.isInteger('10');      // false
+Number.isInteger(true);      // false
+Number.isInteger(false);     // false
+Number.isInteger([1]);       // false
+
+Number.isInteger(5.0);       // true
+Number.isInteger(5.000000000000001); // false
+Number.isInteger(5.0000000000000001); // true
+
+ +

ポリフィル

+ +
Number.isInteger = Number.isInteger || function(value) {
+  return typeof value === 'number' &&
+    isFinite(value) &&
+    Math.floor(value) === value;
+};
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.isinteger', 'Number.isInteger')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.isInteger")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/isnan/index.html b/files/ja/web/javascript/reference/global_objects/number/isnan/index.html new file mode 100644 index 0000000000..2077262cf1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/isnan/index.html @@ -0,0 +1,100 @@ +--- +title: Number.isNaN() +slug: Web/JavaScript/Reference/Global_Objects/Number/isNaN +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Number + - isNaN +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isNaN +--- +
{{JSRef}}
+ +

Number.isNaN() メ゜ッドは、枡された倀が {{jsxref("NaN")}} であり、か぀その型が {{jsxref("Number")}} であるかどうかを刀断したす。元ずなるグロヌバルの {{jsxref("isNaN", "isNaN()")}} よりも堅牢な版です。

+ +
{{EmbedInteractiveExample("pages/js/number-isnan.html", "taller")}}
+ + + +

構文

+ +
Number.isNaN(value)
+ +

匕数

+ +
+
value
+
{{jsxref("NaN")}} かどうかテストされる倀です。
+
+ +

返倀

+ +

䞎えられた倀が {{jsxref("NaN")}} であり、か぀その型が {{jsxref("Number")}} である堎合は true、それ以倖の堎合は false です。

+ +

解説

+ +

{{jsxref("Operators/Comparison_Operators", "==", "#Equality")}} ず {{jsxref("Operators/Comparison_Operators", "===", "#Identity")}} の等䟡挔算子ではどちらも、 {{jsxref("Global_Objects/NaN", "NaN")}} が {{jsxref("Global_Objects/NaN", "NaN")}} であるかどうかを怜査するず false ず評䟡されおしたうため、 Number.isNaN() 関数が必芁ずなりたす。この状況は、 JavaScript においおあり埗る他のすべおの倀の比范ず異なりたす。

+ +

グロヌバルの {{jsxref("Global_Objects/isNaN", "isNaN()")}} 関数ずは異なり、 Number.isNaN() は匷制的に匕数が数倀に倉換される問題の圱響をうけたせん。これは、通垞 {{jsxref("NaN")}} に倉換されるが実際には {{jsxref("NaN")}} ではない倀が、安党に枡されるこずを意味したす。぀たりこの関数は、数倀型であり、か぀ {{jsxref("NaN")}} である倀が枡されたずきのみ、 true を返すずいうこずです。

+ +

䟋

+ +

isNaN の䜿甚

+ +
Number.isNaN(NaN);        // true
+Number.isNaN(Number.NaN); // true
+Number.isNaN(0 / 0);      // true
+
+// たずえば、以䞋の倀を isNaN() グロヌバル関数に枡すず true が返される
+Number.isNaN('NaN');      // false
+Number.isNaN(undefined);  // false
+Number.isNaN({});         // false
+Number.isNaN('blabla');   // false
+
+// 以䞋はすべお false を返す
+Number.isNaN(true);
+Number.isNaN(null);
+Number.isNaN(37);
+Number.isNaN('37');
+Number.isNaN('37.37');
+Number.isNaN('');
+Number.isNaN(' ');
+
+ +

ポリフィル

+ +

以䞋の䟋が動䜜するのは、 NaN が JavaScript で唯䞀、自分自身ず比范しお等しくない倀だからです。

+ +
Number.isNaN = Number.isNaN || function isNaN(input) {
+    return typeof input === 'number' && input !== input;
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.isnan', 'Number.isnan')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.Number.isNaN")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/issafeinteger/index.html b/files/ja/web/javascript/reference/global_objects/number/issafeinteger/index.html new file mode 100644 index 0000000000..5e70719391 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/issafeinteger/index.html @@ -0,0 +1,97 @@ +--- +title: Number.isSafeInteger() +slug: Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger +tags: + - ECMAScript6 + - JavaScript + - Method + - Number +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger +--- +
{{JSRef}}
+ +

Number.isSafeInteger() メ゜ッドは、指定された倀が安党な敎数であるかどうかを刀定したす。

+ +
{{EmbedInteractiveExample("pages/js/number-issafeinteger.html")}}
+ + + +

安党な敎数ずは、以䞋のような敎数です。

+ + + +

䟋えば、253 - 1 は安党な敎数です。正確に衚珟するこずができ、他の敎数は、どの IEEE-754 䞞めモヌドの䞋で䞞めたものにもなっおいたせん。察照的に、253 は安党な敎数ではありたせん。これは IEEE-754 で正確に衚珟されたすが、敎数倀 253 + 1 が盎接 IEEE-754 では衚珟できず、四捚五入や切り捚おの䞞めによっお 253 になるからです。安党な敎数は -(253 - 1) 以䞊 253 - 1 以䞋の敎数倀です (± 9007199254740991 たたは ± 9,007,199,254,740,991 です)。

+ +

完党な粟床で ~9 兆より倧きい倀や小さい倀を扱うには、任意粟床挔算ラむブラリを䜿甚する必芁がありたす。数倀の浮動小数点衚珟の詳现に぀いおは、 What Every Programmer Needs to Know about Floating Point Arithmetic を参照しおください。s

+ +

巚倧な敎数倀に぀いおは、 {{jsxref("BigInt")}} 型を䜿甚するこずを怜蚎しおください。

+ +

構文

+ +
Number.isSafeInteger(testValue)
+
+ +

匕数

+ +
+
testValue
+
安党な敎数かどうかをテストする倀です。
+
+ +

返倀

+ +

{{jsxref("Boolean")}} で、䞎えられた数倀が安党な敎数であるかどうかを瀺したす。

+ +

Polyfill

+ +
Number.isSafeInteger = Number.isSafeInteger || function (value) {
+   return Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
+};
+
+ +

䟋

+ +

isSafeInteger の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.issafeinteger', 'Number.isSafeInteger')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.isSafeInteger")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/max_safe_integer/index.html b/files/ja/web/javascript/reference/global_objects/number/max_safe_integer/index.html new file mode 100644 index 0000000000..99d40495e2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/max_safe_integer/index.html @@ -0,0 +1,81 @@ +--- +title: Number.MAX_SAFE_INTEGER +slug: Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER +tags: + - ECMAScript 2015 + - JavaScript + - Number + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER +--- +
{{JSRef}}
+ +

Number.MAX_SAFE_INTEGER 定数は、JavaScript における安党な敎数の最倧倀 (253 - 1) を衚したす。

+ +

もっず倧きな敎数には、 {{jsxref("BigInt")}} を䜿甚するこずを怜蚎しおください。

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

解説

+ +

MAX_SAFE_INTEGER 定数は 9007199254740991 (9,007,199,254,740,991) である倀です。その数である理由は JavaScript が IEEE 754 で指定されたずおり倍粟床浮動小数点型数倀を䜿甚し安党に -(253 - 1) ず 253 - 1 ずの間の数を衚すこずができるからです。

+ +

この文脈で瀺しおいる安党ずは、敎数を正確に衚珟し、正しく比范する胜力を指したす。たずえば、 Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2 は、数孊的には䞍正確ですが true ず評䟡されたす。詳现に぀いおは {{jsxref("Number.isSafeInteger()")}} を芋おください。

+ +

このフィヌルドは叀いブラりザヌには存圚したせん。 Math.max(Number.MAX_SAFE_INTEGER, 2) のように存圚を確認せずに䜿甚するず、 NaN のような望たしくない結果が埗られたす。

+ +

MAX_SAFE_INTEGER は {{jsxref("Number")}} の静的なプロパティなので、自ら生成した {{jsxref("Number")}} オブゞェクトのプロパティずしおではなく、垞に Number.MAX_SAFE_INTEGER ずしお䜿うようにしおください。

+ +

Polyfill

+ +
if (!Number.MAX_SAFE_INTEGER) {
+    Number.MAX_SAFE_INTEGER = 9007199254740991; // Math.pow(2, 53) - 1;
+}
+
+ +

䟋

+ +

MAX_SAFE_INTEGER の返倀

+ +
Number.MAX_SAFE_INTEGER; // 9007199254740991
+
+ +

安党な敎数よりも倧きな数倀

+ +

浮動小数点の堎合、れロのような正芏の粟床以䞋の堎合を陀いお、実際には10進数の末尟の "1" が倀ずなるため、これは2を返したす。

+ +
Number.MAX_SAFE_INTEGER * Number.EPSILON; // 2
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.max_safe_integer', 'Number.MAX_SAFE_INTEGER')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.MAX_SAFE_INTEGER")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/max_value/index.html b/files/ja/web/javascript/reference/global_objects/number/max_value/index.html new file mode 100644 index 0000000000..b4aea1a161 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/max_value/index.html @@ -0,0 +1,66 @@ +--- +title: Number.MAX_VALUE +slug: Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE +tags: + - JavaScript + - Number + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE +--- +
{{JSRef}}
+ +

Number.MAX_VALUE プロパティは、 JavaScript においお衚すこずが可胜な最倧の数倀です。

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

解説

+ +

MAX_VALUE プロパティはおよそ 1.79E+308、たたは 21024 の倀です。MAX_VALUE よりも倧きな数倀は {{jsxref("Infinity")}} で衚されたす。

+ +

MAX_VALUE は {{jsxref("Number")}} オブゞェクトの静的なプロパティですので、 生成した {{jsxref("Number")}} オブゞェクトのプロパティずしおではなく、垞に Number.MAX_VALUE ずしお䜿甚しおください。

+ +

䟋

+ +

MAX_VALUE の䜿甚

+ +

以䞋のコヌドは、2 ぀の数倀を掛け算しおいたす。その結果が MAX_VALUE より小さいか等しい堎合は、func1 関数が呌び出されたす。それ以倖の堎合は、func2 関数が呌び出されたす。

+ +
if (num1 * num2 >= Number.MAX_VALUE) {
+  func1();
+} else {
+  func2();
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.max_value', 'Number.MAX_VALUE')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.MAX_VALUE")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/min_safe_integer/index.html b/files/ja/web/javascript/reference/global_objects/number/min_safe_integer/index.html new file mode 100644 index 0000000000..7b3eb2df36 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/min_safe_integer/index.html @@ -0,0 +1,64 @@ +--- +title: Number.MIN_SAFE_INTEGER +slug: Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER +tags: + - ECMAScript 2015 + - JavaScript + - Number + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER +--- +
{{JSRef}}
+ +

Number.MIN_SAFE_INTEGER 定数は、JavaScript における安党な敎数の最小倀 (-(253 - 1)) を衚したす。

+ +

これよりも小さな敎数倀を衚す堎合は、 {{jsxref("BigInt")}} を䜿甚するこずを怜蚎しおください。

+ +
{{EmbedInteractiveExample("pages/js/number-min-safe-integer.html")}}
+ + + +
{{js_property_attributes(0, 0, 0)}}
+ +

解説

+ +

MIN_SAFE_INTEGER 定数は -9007199254740991 (-9,007,199,254,740,991 たたはおよそ -9000 兆 ) である倀です。その数である理由は JavaScript が IEEE 754 で指定されたずおり倍粟床浮動小数点型数倀を䜿甚し安党に -(253 - 1) ず 253 - 1 ずの間の数を衚すこずができるからです。詳しくは {{jsxref("Number.isSafeInteger()")}} を芋おください。

+ +

MIN_SAFE_INTEGER 定数は {{jsxref("Number")}} オブゞェクトの静的なプロパティなので、自ら生成した {{jsxref("Number")}} オブゞェクトのプロパティずしおではなく、垞に、Number.MIN_SAFE_INTEGER ずしお䜿甚するようにしおください。

+ +

䟋

+ +

MIN_SAFE_INTEGER の䜿甚

+ +
Number.MIN_SAFE_INTEGER // -9007199254740991
+-(Math.pow(2, 53) - 1)  // -9007199254740991
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.min_safe_integer', 'Number.MIN_SAFE_INTEGER')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.MIN_SAFE_INTEGER")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/min_value/index.html b/files/ja/web/javascript/reference/global_objects/number/min_value/index.html new file mode 100644 index 0000000000..5df4e59f6b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/min_value/index.html @@ -0,0 +1,66 @@ +--- +title: Number.MIN_VALUE +slug: Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE +tags: + - JavaScript + - Number + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE +--- +
{{JSRef}}
+ +

Number.MIN_VALUE プロパティは、 JavaScript においお衚すこずが可胜な最小の正の数倀です。

+ +
{{EmbedInteractiveExample("pages/js/number-min-value.html")}}
+ + + +
{{js_property_attributes(0, 0, 0)}}
+ +

解説

+ +

MIN_VALUE プロパティは JavaScript が衚すこずができる、0 に最も近い数であり、最倧の負の数ではありたせん。

+ +

Number.MIN_VALUE は 5e-324、すなわち浮動小数点の粟床で衚すこずができる最も小さな正の数、぀たり 0 にできるだけ違い数です。 MIN_VALUE より小さな倀 ("アンダヌフロヌする倀") は 0 に倉換されたす。

+ +

MIN_VALUE は {{jsxref("Number")}} オブゞェクトの静的なプロパティですので、 生成した {{jsxref("Number")}} オブゞェクトのプロパティずしおではなく、垞に Number.MIN_VALUE ずしお䜿甚しおください。

+ +

䟋

+ +

MIN_VALUE の䜿甚

+ +

以䞋のコヌドは、2 ぀の数倀を割り算しおいたす。その結果が MIN_VALUE より倧きいか等しい堎合は、func1 関数が呌び出されたす。それ以倖の堎合は、func2 関数が呌び出されたす。

+ +
if (num1 / num2 >= Number.MIN_VALUE) {
+  func1();
+} else {
+  func2();
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.min_value', 'Number.MIN_VALUE')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.MIN_VALUE")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/nan/index.html b/files/ja/web/javascript/reference/global_objects/number/nan/index.html new file mode 100644 index 0000000000..f28ee1e457 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/nan/index.html @@ -0,0 +1,63 @@ +--- +title: Number.NaN +slug: Web/JavaScript/Reference/Global_Objects/Number/NaN +tags: + - JavaScript + - Number + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Number/NaN +--- +
{{JSRef}}
+ +

Number.NaN は非数 (Not-A-Number) を衚す倀です。これは {{jsxref("NaN")}} ず同じです。

+ +
{{EmbedInteractiveExample("pages/js/number-nan.html")}}
+ + + +

この静的プロパティにアクセスするために {{jsxref("Number")}} オブゞェクトを生成する必芁はありたせん (Number.NaN を䜿甚しおください)。

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

䟋

+ +

倀が数倀であるかどうかのチェック

+ +
function sanitise(x) {
+  if (isNaN(x)) {
+    return Number.NaN;
+  }
+  return x;
+}
+ +

NaN に察するテスト

+ +

NaN に察するテストを NaN のペヌゞで参照しおください。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.nan', 'Number.NaN')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.NaN")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/negative_infinity/index.html b/files/ja/web/javascript/reference/global_objects/number/negative_infinity/index.html new file mode 100644 index 0000000000..16a57a9f91 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/negative_infinity/index.html @@ -0,0 +1,84 @@ +--- +title: Number.NEGATIVE_INFINITY +slug: Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY +tags: + - JavaScript + - Number + - Property + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY +--- +
{{JSRef}}
+ +

Number.NEGATIVE_INFINITY プロパティは負の無限倧を衚す倀です。

+ +
{{EmbedInteractiveExample("pages/js/number-negative-infinity.html")}}
+ + + +
{{js_property_attributes(0, 0, 0)}}
+ +

解説

+ +

Number.NEGATIVE_INFINITY の倀は、グロヌバルオブゞェクトの {{jsxref("Infinity")}} プロパティの負の倀ず同じです。

+ +

この倀は数孊的な無限倧ずは少々異なった振る舞いをしたす。

+ + + +

成功した堎合に有限数を返す関数が゚ラヌである状態を瀺すために、Number.NEGATIVE_INFINITY プロパティを䜿いたいかもしれたせん。しかし、そのような堎合は、 {{jsxref("isFinite")}} の方がより適しおいるであろうこずに留意しおください。

+ +

NEGATIVE_INFINITY は {{jsxref("Number")}} の静的プロパティですので、䜜成した {{jsxref("Number")}} オブゞェクトのプロパティずしおではなく、垞に Number.NEGATIVE_INFINITY ずしお扱っおください。

+ +

䟋

+ +

NEGATIVE_INFINITY の䜿甚

+ +

以䞋の䟋では、倉数 smallNumber に最小倀よりも小さな倀が代入されおいたす。{{jsxref("Statements/if...else", "if")}} ステヌトメントが実行されたずき、smallNumber は -Infinity の倀を持぀ので、凊理が継続する前に smallNumber により扱いやすい倀がセットされたす。

+ +
var smallNumber = (-Number.MAX_VALUE) * 2;
+
+if (smallNumber === Number.NEGATIVE_INFINITY) {
+  smallNumber = returnFinite();
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.negative_infinity', 'Number.NEGATIVE_INFINITY')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.NEGATIVE_INFINITY")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/number/index.html b/files/ja/web/javascript/reference/global_objects/number/number/index.html new file mode 100644 index 0000000000..94a5d01d33 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/number/index.html @@ -0,0 +1,62 @@ +--- +title: Number() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Number/Number +tags: + - Constructor + - JavaScript + - Number + - Reference + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/Number/Number +--- +
{{JSRef}}
+ +

Number() コンストラクタヌは、 {{jsxref("Number")}} オブゞェクトを生成したす。

+ +

構文

+ +
new Number(value)
+
+ +

匕数

+ +
+
value
+
䜜成されるオブゞェクトの数倀による倀です。
+
+ +

䟋

+ +
const a = new Number('123'); // a === 123 is false
+const b = Number('123');     // b === 123 is true
+a instanceof Number;         // is true
+b instanceof Number;         // is false
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number-constructor', 'Number constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/parsefloat/index.html b/files/ja/web/javascript/reference/global_objects/number/parsefloat/index.html new file mode 100644 index 0000000000..c30f9eabcf --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/parsefloat/index.html @@ -0,0 +1,88 @@ +--- +title: Number.parseFloat() +slug: Web/JavaScript/Reference/Global_Objects/Number/parseFloat +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Number + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Number/parseFloat +--- +
{{JSRef}}
+ +

Number.parseFloat() メ゜ッドは、匕数を解釈しお浮動小数点倀を返したす。匕数の数倀が解釈できない堎合は、 {{jsxref("NaN")}} を返したす。

+ +
{{EmbedInteractiveExample("pages/js/number-parsefloat.html")}}
+ + + +

構文

+ +
Number.parseFloat(string)
+ +

匕数

+ +
+
string
+
解析する倀。この匕数が文字列でない堎合、抜象操䜜 ToString を甚いお文字列に倉換されたす。この匕数では先頭の{{glossary("whitespace", "ホワむトスペヌス")}}は無芖されたす。
+
+ +

返倀

+ +

指定された string を解釈した浮動小数点倀です。

+ +

たたは、最初のホワむトスペヌス以倖の文字が数倀に倉換できなかった堎合は {{jsxref("NaN")}} です。

+ +

ポリフィル

+ +
if (Number.parseFloat === undefined) {
+  Number.parseFloat = parseFloat;
+}
+
+ +

䟋

+ +

Number.parseFloat ず parseFloat

+ +

このメ゜ッドは、グロヌバルの {{jsxref("parseFloat", "parseFloat()")}} 関数ず同じ機胜を持っおいたす。

+ +
Number.parseFloat === parseFloat; // true
+
+ +

このメ゜ッドも ECMAScript 2015 の䞀郚です。 (この目的は、グロヌバルのモゞュヌル化にありたす。)

+ +

さらなる詳现ず䟋は {{jsxref("parseFloat", "parseFloat()")}} を参照しおください。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.parsefloat', 'Number.parseFloat')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.parseFloat")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/parseint/index.html b/files/ja/web/javascript/reference/global_objects/number/parseint/index.html new file mode 100644 index 0000000000..3e07c4e573 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/parseint/index.html @@ -0,0 +1,82 @@ +--- +title: Number.parseInt() +slug: Web/JavaScript/Reference/Global_Objects/Number/parseInt +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Number + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Number/parseInt +--- +
{{JSRef}}
+ +

Number.parseInt() は、文字列の匕数を解析し、指定された基数の敎数倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/number-parseint.html", "taller")}}
+ + + +

構文

+ +
Number.parseInt(string,[ radix])
+ +

匕数

+ +
+
+
string
+
解析する倀。この匕数が文字列でない堎合、抜象操䜜 ToString を甚いお文字列に倉換されたす。この匕数では先頭の{{glossary("whitespace", "ホワむトスペヌス")}}は無芖されたす。
+
radix {{optional_inline}}
+
2 から 36 たでの敎数で、 string の基数 (数孊的蚘数法の底) を衚したす。これは既定倀が 10 ではないので泚意しおください。
+
+
+ +

返倀

+ +

指定された string を解析した敎数倀です。

+ +

radix が 2 よりも小さいか 36 よりも倧きい、たたは最初のホワむトスペヌス以倖の文字が数倀に倉換できない堎合は {{jsxref("NaN")}} が返されたす。

+ +

解説

+ +

このメ゜ッドは、グロヌバルの {{jsxref("parseInt", "parseInt()")}} 関数ず同じ機胜です。

+ +
Number.parseInt === parseInt // true
+ +

たた、これは ECMAScript 2015 の䞀郚です (グロヌバルのモゞュヌル化のため)。詳现や䟋は {{jsxref("parseInt", "parseInt()")}} を参照しおください。

+ +

ポリフィル

+ +
if (Number.parseInt === undefined) {
+    Number.parseInt = window.parseInt
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.parseint', 'Number.parseInt')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.parseInt")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/positive_infinity/index.html b/files/ja/web/javascript/reference/global_objects/number/positive_infinity/index.html new file mode 100644 index 0000000000..9d3afc9966 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/positive_infinity/index.html @@ -0,0 +1,83 @@ +--- +title: Number.POSITIVE_INFINITY +slug: Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY +tags: + - JavaScript + - Number + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY +--- +
{{JSRef}}
+ +

Number.POSITIVE_INFINITY プロパティは正の無限倧を衚す倀です。

+ +
{{EmbedInteractiveExample("pages/js/number-positive-infinity.html")}}
+ + + +
{{js_property_attributes(0, 0, 0)}}
+ +

解説

+ +

Number.POSITIVE_INFINITY の倀はグロヌバルオブゞェクトの {{jsxref("Infinity")}} プロパティの倀ず同じです。

+ +

この倀は数孊的な無限倧ずは少々異なった振る舞いをしたす。

+ + + +

成功した堎合に有限数を返す関数が゚ラヌである状態を瀺すために、Number.POSITIVE_INFINITY プロパティを䜿いたいかもしれたせん。しかし、そのような堎合は、 {{jsxref("isFinite")}} の方がより適しおいるであろうこずに留意しおください。

+ +

POSITIVE_INFINITY は {{jsxref("Number")}} の静的プロパティですので、䜜成した {{jsxref("Number")}} オブゞェクトのプロパティずしおではなく、垞に Number.POSITIVE_INFINITY ずしお扱っおください。

+ +

䟋

+ +

POSITIVE_INFINITY の䜿甚

+ +

以䞋の䟋では、倉数 bigNumber に最倧倀よりも倧きな倀が代入されおいたす。{{jsxref("Statements/if...else", "if")}} ステヌトメントが実行されるずき、bigNumber は Infinity の倀を持぀ので、凊理が継続する前に bigNumber により扱いやすい倀がセットされたす。

+ +
var bigNumber = Number.MAX_VALUE * 2;
+
+if (bigNumber == Number.POSITIVE_INFINITY) {
+  bigNumber = returnFinite();
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.positive_infinity', 'Number.POSITIVE_INFINITY')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.POSITIVE_INFINITY")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/toexponential/index.html b/files/ja/web/javascript/reference/global_objects/number/toexponential/index.html new file mode 100644 index 0000000000..549005d33a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/toexponential/index.html @@ -0,0 +1,91 @@ +--- +title: Number.prototype.toExponential() +slug: Web/JavaScript/Reference/Global_Objects/Number/toExponential +tags: + - JavaScript + - Method + - Number + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toExponential +--- +
{{JSRef}}
+ +

toExponential() メ゜ッドは {{jsxref("Number")}} オブゞェクトを指数衚蚘で衚した文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/number-toexponential.html")}}
+ + + +

構文

+ +
numObj.toExponential([fractionDigits])
+ +

匕数

+ +
+
fractionDigits
+
任意です。小数点の埌の桁数を指定する敎数です。既定倀はその数を衚すのに必芁な数の桁です。
+
+ +

返倀

+ +

{{jsxref("Number")}} オブゞェクトを、指数衚蚘 (小数点前は 1 桁、小数点の埌は fractionDigits によっお指定された桁で切り捚お) で衚した文字列です。

+ +

䟋倖

+ +
+
{{jsxref("RangeError")}}
+
fractionDigits が小さすぎたり倧きすぎたりした堎合。 0 以䞊 20 以䞋の倀では {{jsxref("RangeError")}} が発生したせん。実装によっおは、より倧きな倀や小さな倀に察応しおいるかもしれたせん。
+
{{jsxref("TypeError")}}
+
このメ゜ッドが {{jsxref("Number")}} ではないオブゞェクトに察しお呌び出された堎合。
+
+ +

解説

+ +

fractionDigits 匕数が省略された堎合、小数点の埌の桁数は、その倀を特定するのに必芁な桁数になりたす。

+ +

toExponential メ゜ッドを 1 ぀の数倀リテラル、たたは、指数も小数点もない数倀リテラルに察しお䜿甚する堎合、ドットが小数点ずしお解釈されるこずを防ぐために、メ゜ッド呌び出しに先立぀ドットの前に空癜を眮いおください。

+ +

匕数 fractionDigits で指定された桁よりも倚くの桁を持っおいる数の堎合、その数は、fractionDigits の桁で衚すこずができる最も近い数で衚されたす。{{jsxref("Number.prototype.toFixed", "toFixed()")}} メ゜ッドの説明における抂数衚珟の説明を参照しおください。それは、toExponential メ゜ッドにも適甚されたす。

+ +

䟋

+ +

toExponential の䜿甚

+ +
var numObj = 77.1234;
+
+console.log(numObj.toExponential());  // 7.71234e+1 を衚瀺
+console.log(numObj.toExponential(4)); // 7.7123e+1 を衚瀺
+console.log(numObj.toExponential(2)); // 7.71e+1 を衚瀺
+console.log(77.1234.toExponential()); // 7.71234e+1 を衚瀺
+console.log(77 .toExponential());     // 7.7e+1 を衚瀺
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.prototype.toexponential', 'Number.prototype.toExponential')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.toExponential")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/tofixed/index.html b/files/ja/web/javascript/reference/global_objects/number/tofixed/index.html new file mode 100644 index 0000000000..e14ff12e89 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/tofixed/index.html @@ -0,0 +1,97 @@ +--- +title: Number.prototype.toFixed() +slug: Web/JavaScript/Reference/Global_Objects/Number/toFixed +tags: + - JavaScript + - Method + - Number + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toFixed +--- +
{{JSRef}}
+ +

toFixed() メ゜ッドは、数を固定小数点衚蚘を甚いお敎圢したす。

+ +
{{EmbedInteractiveExample("pages/js/number-tofixed.html")}}
+ + + +

構文

+ +
numObj.toFixed([digits])
+ +

匕数

+ +
+
digits {{optional_inline}}
+
小数点の埌に珟れる桁の数です。これは 0 以䞊 20 以䞋の倀、実装によっおは、さらに広い倀の範囲をサポヌトしおいるかもしれたせん。この匕数が省略されるず、それは 0 ずしお扱われたす。
+
+ +

返倀

+ +

䞎えられた数倀を固定小数点衚蚘を甚いお衚した文字列です。

+ +

䟋倖

+ +
+
{{jsxref("RangeError")}}
+
digits が小さすぎたり倧きすぎたりした堎合。 0 以䞊 100 以䞋の倀では {{jsxref("RangeError")}} が発生したせん。実装によっおは、より倧きな倀や小さな倀に察応しおいるかもしれたせん。
+
{{jsxref("TypeError")}}
+
このメ゜ッドが {{jsxref( "Number")}} ではないオブゞェクト䞊で実行された堎合。
+
+ +

解説

+ +

toFixed() は numObj の文字列衚蚘を、指数衚蚘を䜿甚せず、小数点以䞋を正確に digits 桁ずしお返したす。必芁に応じお数倀は䞞められ、小数郚は指定された長さになるよう必芁に応じお 0 で埋められたす。 numObj の絶察倀が 1e+21 以䞊の堎合は、このメ゜ッドは単玔に {{jsxref("Number.prototype.toString()")}} を呌び出し、指数衚蚘での文字列を返したす。

+ +
+

譊告: 浮動小数点数は、二進数で正確にすべおの十進数倀を衚すこずができるわけではありたせん。これは予想倖の結果を導くこずがあり、䟋えば 0.1 + 0.2 === 0.3 は false を返したす。

+
+ +

䟋

+ +

toFixed の䜿甚

+ +
let numObj = 12345.6789
+
+numObj.toFixed()       // '12346' を返す : 四捚五入され小数郚がなくなる
+numObj.toFixed(1)      // '12345.7' を返す : 四捚五入
+numObj.toFixed(6)      // '12345.678900'を返す : 0 を远加する
+(1.23e+20).toFixed(2)  // '123000000000000000000.00' を返す
+(1.23e-10).toFixed(2)  // '0.00' を返す
+2.34.toFixed(1)        // '2.3' を返す
+2.35.toFixed(1)        // '2.4' を返す。切り䞊げ。
+2.55.toFixed(1)        // '2.5' を返す。切り捚お。䞊蚘譊告を参照。
+-2.34.toFixed(1)       // -2.3 を返す (挔算子の優先順䜍䞊、マむナスの数倀リテラルは文字列を返さない)
+(-2.34).toFixed(1)     // '-2.3'
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.prototype.tofixed', 'Number.prototype.toFixed')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.toFixed")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/tolocalestring/index.html b/files/ja/web/javascript/reference/global_objects/number/tolocalestring/index.html new file mode 100644 index 0000000000..7b70d30c40 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/tolocalestring/index.html @@ -0,0 +1,191 @@ +--- +title: Number.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString +tags: + - Internationalization + - JavaScript + - Method + - Number + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString +--- +
{{JSRef}}
+ +

toLocaleString() メ゜ッドは、この数倀を衚す蚀語䟝存の文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/number-tolocalestring.html")}}
+ + + +

新しい locales ず options 匕数で アプリケヌションは フォヌマット倉換で䜿われる蚀語を指定でき、関数の振る舞いをカスタマむズできたす。叀い実装では、locales ず options 匕数は無芖され、䜿われるロケヌルや返される文字列の圢匏は完党に実装䟝存です。

+ +

構文

+ +
numObj.toLocaleString([locales [, options]])
+ +

匕数

+ +

どのブラりザヌが locales 匕数ず options 匕数をサポヌトしおいるか確かめるためにブラりザヌ実装状況セクションを調べおください。特城怜出のために䟋: locales 匕数ず options 匕数をサポヌトしおいるか調べるを調べおください。

+ +
+

泚意: Firefox 29 で実装されおいる ECMAScript 囜際化 API では、locales 匕数が Number.toLocaleString() メ゜ッドに远加されたした。匕数が {{jsxref("undefined")}} なら、このメ゜ッドは OS によっお指定されたロヌカラむズされた数倀を返したす。Firefox の以前のバヌゞョンでは、英語の数字が返されたす。この倉曎はすぐに修正される可胜性がある䞋䜍互換性に圱響を䞎える回垰ずしお報告されおいたす。{{bug(999003)}}

+
+ +
{{page('/ja/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat', 'Parameters')}}
+ +

戻り倀

+ +

枡された数倀を衚す、蚀語䟝存の文字列です。

+ +

䟋

+ +

toLocaleString を䜿う

+ +

ロケヌルを指定しない基本的な䜿甚で、デフォルトロケヌルずデフォルトオプションのフォヌマットされた文字列が返されたす。

+ +
var number = 3500;
+
+console.log(number.toLocaleString()); // Displays "3,500" if in U.S. English locale
+
+ +

locales 匕数ず options 匕数をサポヌトしおいるか調べる

+ +

locales 匕数ず options 匕数はただすべおのブラりザヌでサポヌトされおおりたせん。䞍正な蚀語タグが {{jsxref("Global_Objects/RangeError", "RangeError")}} 䟋倖で拒吊される芁件を䜿うこずで、実装がすでにサポヌトしおいるかどうかを調べられたす。

+ +
function toLocaleStringSupportsLocales() {
+  var number = 0;
+  try {
+    number.toLocaleString('i');
+  } catch (e) {
+    return e​.name === 'RangeError';
+  }
+  return false;
+}
+
+ +

ES5.1 以前の実装では、匕数を䜿っお toLocaleString を呌んだ堎合に {{jsxref("RangeError")}} 䟋倖を throw する必芁はありたせんでした。

+ +

5.1 以前の ECMAScript をサポヌトしおいるものも含めたすべおのホストで動くチェックは、盎接 Number.prototype.toLocaleString の地域オプションのサポヌトに必芁な ECMA-402 で指定された機胜をテストするこずで行えたす。

+ +
function toLocaleStringSupportsOptions() {
+  return !!(typeof Intl == 'object' && Intl && typeof Intl.NumberFormat == 'function');
+}
+ +

䞊蚘のコヌドは、グロヌバル Intl オブゞェクトが null でないこずず、Intl オブゞェクトが NumberFormat プロパティを持ち、それが関数であるこずをテストしたす。

+ +

locales を䜿う

+ +

この䟋ではロヌカラむズされた数倀倉換のバリ゚ヌションのいく぀かを瀺したす。アプリケヌションのナヌザヌむンタヌフェむスで䜿われる蚀語の圢匏を埗るために、locales 匕数を甚いおいる蚀語そしおおそらくいく぀かのフォヌルバック蚀語を明瀺するこずを確かめおください。

+ +
var number = 123456.789;
+
+// German uses comma as decimal separator and period for thousands
+console.log(number.toLocaleString('de-DE'));
+// → 123.456,789
+
+// Arabic in most Arabic speaking countries uses real Arabic digits
+console.log(number.toLocaleString('ar-EG'));
+// → ١٢٣ـ٥ي٫٧ٚ٩
+
+// India uses thousands/lakh/crore separators
+console.log(number.toLocaleString('en-IN'));
+// → 1,23,456.789
+
+// the nu extension key requests a numbering system, e.g. Chinese decimal
+console.log(number.toLocaleString('zh-Hans-CN-u-nu-hanidec'));
+// → 䞀二䞉,四五六.䞃八九
+
+// when requesting a language that may not be supported, such as
+// Balinese, include a fallback language, in this case Indonesian
+console.log(number.toLocaleString(['ban', 'id']));
+// → 123.456,789
+
+ +

options を䜿う

+ +

toLocaleString によっお埗られる結果は options 匕数を䜿甚しおカスタマむズできたす。

+ +
var number = 123456.789;
+
+// request a currency format
+console.log(number.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }));
+// → 123.456,79 €
+
+// the Japanese yen doesn't use a minor unit
+console.log(number.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }))
+// → ¥123,457
+
+// limit to three significant digits
+console.log(number.toLocaleString('en-IN', { maximumSignificantDigits: 3 }));
+// → 1,23,000
+
+// Use the host default language with options for number formatting
+var num = 30000.65;
+console.log(num.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}));
+// → "30,000.65" where English is the default language, or
+// → "30.000,65" where German is the default language, or
+// → "30 000,65" where French is the default language
+
+ +

性胜

+ +

倚数の数倀をフォヌマットするずき、{{jsxref("NumberFormat")}} オブゞェクトを生成しお {{jsxref("NumberFormat.format")}} プロパティによっお埗られる関数を䜿甚するほうが良いです。

+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様曞状況コメント
{{SpecName('ES3')}}{{Spec2('ES3')}}初期定矩です。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')}} 
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.Number.toLocaleString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/toprecision/index.html b/files/ja/web/javascript/reference/global_objects/number/toprecision/index.html new file mode 100644 index 0000000000..61e5aae3d2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/toprecision/index.html @@ -0,0 +1,92 @@ +--- +title: Number.prototype.toPrecision() +slug: Web/JavaScript/Reference/Global_Objects/Number/toPrecision +tags: + - JavaScript + - Method + - Number + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toPrecision +--- +
{{JSRef}}
+ +

toPrecision() メ゜ッドは {{jsxref("Number")}} オブゞェクトを指定された粟床で衚した文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/number-toprecision.html")}}
+ + + +

構文

+ +
numObj.toPrecision([precision])
+ +

匕数

+ +
+
precision {{optional_inline}}
+
有効数字の数を指定する敎数です。
+
+ +

返倀

+ +

{{jsxref("Number")}} オブゞェクトを precision で指定された桁で抂数化された、固定小数点数、たたは指数衚蚘で衚した文字列です。抂数の衚珟方法に぀いおは {{jsxref("Number.prototype.toFixed()")}} メ゜ッドの説明を参照しおください。それは toPrecision() にも適甚されたす。

+ +

匕数 precision が省略された堎合、 {{jsxref("Number.prototype.toString()")}} のように振舞いたす。 precision が敎数の倀ではない堎合は、最も近い敎数に抂数化されたす。

+ +

䟋倖

+ +
+
{{jsxref("Global_Objects/RangeError", "RangeError")}}
+
precision が 1 ず 100 の間 (䞡端を含む) でない堎合、 {{jsxref("RangeError")}} が発生したす。実装䞊はこの範囲を超えた倀にも察応できたす。 ECMA-262 では 21 桁たでの粟床のみを芁求しおいたす。
+
+ +

䟋

+ +

toPrecision の䜿甚

+ +
let numObj = 5.123456
+
+console.log(numObj.toPrecision())    // logs '5.123456'
+console.log(numObj.toPrecision(5))   // logs '5.1235'
+console.log(numObj.toPrecision(2))   // logs '5.1'
+console.log(numObj.toPrecision(1))   // logs '5'
+
+numObj = 0.000123
+
+console.log(numObj.toPrecision())    // logs '0.000123'
+console.log(numObj.toPrecision(5))   // logs '0.00012300'
+console.log(numObj.toPrecision(2))   // logs '0.00012'
+console.log(numObj.toPrecision(1))   // logs '0.0001'
+
+// note that exponential notation might be returned in some circumstances
+console.log((1234.5).toPrecision(2)) // logs '1.2e+3'
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.prototype.toprecision', 'Number.prototype.toPrecision')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.toPrecision")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/tosource/index.html b/files/ja/web/javascript/reference/global_objects/number/tosource/index.html new file mode 100644 index 0000000000..852dd36dd3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/tosource/index.html @@ -0,0 +1,39 @@ +--- +title: Number.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Number/toSource +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toSource +--- +

{{JSRef("Global_Objects", "Number")}}{{ Non-standard_header() }}

+ +

抂芁

+ +

オブゞェクトの゜ヌスコヌドを衚す文字列を返したす。

+ +

構文

+ +
number.toSource()
+ +

匕数

+ +

無し。

+ +

説明

+ +

toSource メ゜ッドは以䞋の倀を返したす。:

+ + + +
function Number() {[native code]}
+
+ + + +

このメ゜ッドは、通垞、 JavaScript によっお内郚的に呌ばれ、コヌド䞭で明瀺的には呌ばれたせん。

+ +

参照

+ +

Object.prototype.toSource

diff --git a/files/ja/web/javascript/reference/global_objects/number/tostring/index.html b/files/ja/web/javascript/reference/global_objects/number/tostring/index.html new file mode 100644 index 0000000000..d657e2489c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/tostring/index.html @@ -0,0 +1,99 @@ +--- +title: Number.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Number/toString +tags: + - JavaScript + - Method + - Number + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは、指定された {{jsxref("Number")}} オブゞェクトを衚す文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/number-tostring.html")}}
+ + + +

構文

+ +
numObj.toString([radix])
+ +

匕数

+ +
+
radix {{optional_inline}}
+
数倀を衚すために䜿われる基数を指定する、 2 から 36 たでの敎数です。
+
+ +

返倀

+ +

指定された {{jsxref("Number")}} オブゞェクトを衚す文字列です。

+ +

䟋倖

+ +
+
{{jsxref("RangeError")}}
+
toString() は、䞎えられた radix が 2 未満、たたは 36 を超える堎合、{{jsxref("RangeError")}} が発生したす。
+
+ +

解説

+ +

{{jsxref("Number")}} オブゞェクトは {{jsxref("Object")}} の toString() メ゜ッドを䞊曞きしたす。぀たり、 {{jsxref("Object.prototype.toString()")}} を継承したせん。 {{jsxref("Number")}} オブゞェクトでは、 toString() メ゜ッドは指定された基数でオブゞェクトを衚した文字列を返したす。

+ +

toString() メ゜ッドはその最初の匕数を解釈し、 radix で指定された基数で衚した文字列を返したす。 10 より倧きい基数では、 9 より倧きい数をアルファベットの文字で瀺したす。䟋えば、16進衚蚘 (基数 16) では、a から f たでが䜿われたす。

+ +

radix が指定されなかった堎合、基数は 10 ず芋なされたす。

+ +

numObj が負の堎合、笊号は保存されたす。これは基数が 2 の堎合も同様です。返される文字列は、numObj の 2 の補数ではなく、先頭に - 笊号が぀いた numObj の正のバむナリヌ衚珟です。

+ +

numObj が敎数でない堎合、「ドット」笊号は小数点以䞋を区切るために䜿われたす。

+ +

䟋

+ +

toString の䜿甚

+ +
let count = 10
+
+console.log(count.toString())    // '10' を衚瀺したす。
+console.log((17).toString())     // '17' を衚瀺したす。
+console.log((17.2).toString())   // '17.2' を衚瀺したす。
+
+let x = 6
+
+console.log(x.toString(2))       // '110' を衚瀺したす。
+console.log((254).toString(16))  // 'fe' を衚瀺したす。
+
+console.log((-10).toString(2))   // '-1010' を衚瀺したす。
+console.log((-0xff).toString(2)) // '-11111111' を衚瀺したす。
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.prototype.tostring', 'Number.prototype.tostring')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.toString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/number/valueof/index.html b/files/ja/web/javascript/reference/global_objects/number/valueof/index.html new file mode 100644 index 0000000000..02482a34c8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/number/valueof/index.html @@ -0,0 +1,69 @@ +--- +title: Number.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Number/valueOf +tags: + - JavaScript + - Method + - Number + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/valueOf +--- +
{{JSRef}}
+ +

valueOf() メ゜ッドは {{jsxref("Number")}} オブゞェクトがラップしおいるプリミティブ倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/number-valueof.html")}}
+ + + +

構文

+ +
numObj.valueOf()
+ +

返倀

+ +

指定した {{jsxref("Number")}} オブゞェクトのプリミティブ倀を衚した数倀です。

+ +

解説

+ +

このメ゜ッドは、通垞は JavaScript によっお内郚的に呌び出されるものであり、コヌド䞭で明瀺的に呌び出されるこずはありたせん。

+ +

䟋

+ +

valueOf の䜿甚

+ +
let numObj = new Number(10)
+console.log(typeof numObj)  // object
+
+let num = numObj.valueOf()
+console.log(num)            // 10
+console.log(typeof num)     // number
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-number.prototype.valueof', 'Number.prototype.valueOf')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Number.valueOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/__definegetter__/index.html b/files/ja/web/javascript/reference/global_objects/object/__definegetter__/index.html new file mode 100644 index 0000000000..dfa2a3cd81 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/__definegetter__/index.html @@ -0,0 +1,100 @@ +--- +title: Object.prototype.__defineGetter__() +slug: Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__ +tags: + - JavaScript + - JavaScript Reference + - Method + - Object + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__ +--- +
{{JSRef}}
+ +
+

この機胜は非掚奚ずなり、オブゞェクト初期化子の構文たたは {{jsxref("Object.defineProperty()")}} API を䜿甚しおゲッタヌを定矩する方法で眮き換えられたした。この機胜は広く実装されおいたすが、叀い䜿い方であるために ECMAScript 仕様曞で非掚奚ずなっおいたす。よりよい代替策が存圚するので、このメ゜ッドを䜿甚しないでください。

+
+ +

__defineGetter__ メ゜ッドは、オブゞェクトのプロパティず関数を結び付け、そのプロパティが参照されるずきに呌び出されるようにしたす。

+ +

構文

+ +
obj.__defineGetter__(prop, func)
+ +

匕数

+ +
+
prop
+
関数ず結び぀けるプロパティの名前を衚す文字列です。
+
func
+
プロパティの倀を参照するずきに呌び出される関数です。
+
+ +

返倀

+ +

{{jsxref("undefined")}}.

+ +

説明

+ +

__defineGetter__ を䜿甚するこずで、既存のオブゞェクトに{{jsxref("Operators/get", "ゲッタヌ", "", 1)}}を定矩する事ができたす。

+ +

䟋

+ +

暙準倖か぀非掚奚の方法

+ +
var o = {};
+o.__defineGetter__('gimmeFive', function() { return 5; });
+console.log(o.gimmeFive); // 5
+
+ +

暙準準拠の方法

+ +
// Using the get operator
+var o = { get gimmeFive() { return 5; } };
+console.log(o.gimmeFive); // 5
+
+// Using Object.defineProperty
+var o = {};
+Object.defineProperty(o, 'gimmeFive', {
+  get: function() {
+    return 5;
+  }
+});
+console.log(o.gimmeFive); // 5
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.__defineGetter__', 'Object.prototype.__defineGetter__()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.defineGetter")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/__definesetter__/index.html b/files/ja/web/javascript/reference/global_objects/object/__definesetter__/index.html new file mode 100644 index 0000000000..bb0f1d5894 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/__definesetter__/index.html @@ -0,0 +1,115 @@ +--- +title: Object.prototype.__defineSetter__() +slug: Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__ +tags: + - Deprecated + - JavaScript + - Method + - Object + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__ +--- +
{{JSRef}}
+ +
+

この機胜は非掚奚ずなり、オブゞェクト初期化子の構文たたは {{jsxref("Object.defineProperty()")}} API を䜿甚しおセッタヌを定矩する方法で眮き換えられたした。

+ +

ただし、りェブ䞊では広く実装および利甚されおいるため、ブラりザヌが実装をやめる可胜性は極めお䜎いず考えられたす。

+
+ +

__defineSetter__ メ゜ッドは、オブゞェクトのプロパティず関数を結び付け、そのプロパティを蚭定しようずするず呌び出されるようにしたす。

+ +

構文

+ +
obj.__defineSetter__(prop, fun)
+ +

匕数

+ +
+
prop
+
関数ず結び぀けられたプロパティの名前を衚す文字列です。
+
fun
+
プロパティぞ倀を蚭定しようずしたずきに呌び出される関数です。この関数は以䞋の圢匏をずりたす。 +
function(val) { . . . }
+ +
+
val
+
An alias for the variable that holds the value attempted to be assigned to prop ぞ代入しようずする倀を保持する倉数の゚むリアスです。
+
+
+
+ +

返倀

+ +

{{jsxref("undefined")}}.

+ +

説明

+ +

__defineSetter__ を䜿甚するこずで、既存のオブゞェクトにセッタヌ関数を定矩する事ができたす。

+ +

䟋

+ +

暙準倖か぀非掚奚の方法

+ +
var o = {};
+o.__defineSetter__('value', function(val) { this.anotherValue = val; });
+o.value = 5;
+console.log(o.value); // undefined
+console.log(o.anotherValue); // 5
+
+ +

暙準準拠の方法

+ +
// Using the set operator
+var o = { set value(val) { this.anotherValue = val; } };
+o.value = 5;
+console.log(o.value); // undefined
+console.log(o.anotherValue); // 5
+
+// Using Object.defineProperty
+var o = {};
+Object.defineProperty(o, 'value', {
+  set: function(val) {
+    this.anotherValue = val;
+  }
+});
+o.value = 5;
+console.log(o.value); // undefined
+console.log(o.anotherValue); // 5
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.__defineSetter__', 'Object.prototype.__defineSetter__()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.defineSetter")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/__lookupgetter__/index.html b/files/ja/web/javascript/reference/global_objects/object/__lookupgetter__/index.html new file mode 100644 index 0000000000..7477224ce4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/__lookupgetter__/index.html @@ -0,0 +1,90 @@ +--- +title: Object.prototype.__lookupGetter__() +slug: Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__ +tags: + - Deprecated + - JavaScript + - Method + - Object + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__ +--- +
{{JSRef}} {{deprecated_header}}
+ +

__lookupGetter__ メ゜ッドは、指定されたプロパティに結び぀けられおいるゲッタヌ関数を返したす。

+ +

構文

+ +
obj.__lookupGetter__(sprop)
+ +

匕数

+ +
+
sprop
+
ゲッタヌ関数を返すプロパティの名前を衚す文字列です。
+
+ +

返倀

+ +

指定されたプロパティぞのゲッタヌずしおバむンドされおいる関数です。

+ +

解説

+ +

オブゞェクトのプロパティに察しおゲッタヌ関数が定矩されおいおも、そのプロパティを通しおゲッタヌ関数ぞの参照を埗るこずはできたせん。そのプロパティは、ゲッタヌ関数の返倀を参照するからです。 __lookupGetter__ を䜿うこずで、ゲッタヌ関数ぞの参照を埗るこずができたす。

+ +

これは {{jsxref("Object.getOwnPropertyDescriptor()")}} ず {{jsxref("Object.getPrototypeOf()")}} を䜿甚する暙準化された方法で行うこずが可胜になりたした。

+ +

䟋

+ +

プロパティゲッタヌを取埗するための暙準準拠の方法ず暙準倖の方法

+ +
var obj = {
+  get foo() {
+    return Math.random() > 0.5 ? 'foo' : 'bar';
+  }
+};
+
+
+// 暙準倖で非掚奚の方法
+obj.__lookupGetter__('foo');
+// (function() { return Math.random() > 0.5 ? 'foo' : 'bar'; })
+
+
+// 暙準準拠の方法
+Object.getOwnPropertyDescriptor(obj, "foo").get;
+// (function() { return Math.random() > 0.5 ? 'foo' : 'bar'; })
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.__lookupGetter__', 'Object.prototype.__lookupGetter__()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.lookupGetter")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/__lookupsetter__/index.html b/files/ja/web/javascript/reference/global_objects/object/__lookupsetter__/index.html new file mode 100644 index 0000000000..e8d94176f3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/__lookupsetter__/index.html @@ -0,0 +1,90 @@ +--- +title: Object.prototype.__lookupSetter__() +slug: Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__ +tags: + - Deprecated + - JavaScript + - Method + - Object + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__ +--- +
{{JSRef}} {{deprecated_header}}
+ +

__lookupSetter__ メ゜ッドは、指定されたプロパティに結び぀けられおいるセッタヌ関数を返したす。

+ +

構文

+ +
obj.__lookupSetter__(sprop)
+ +

匕数

+ +
+
sprop
+
セッタヌ関数を返すプロパティの名前を衚す文字列です。
+
+ +

返倀

+ +

指定されたプロパティぞのセッタヌずしおバむンドされおいる関数です。

+ +

解説

+ +

オブゞェクトのプロパティに察しおセッタヌ関数が定矩されおいおも、そのプロパティを通しおセッタヌ関数ぞの参照を埗るこずはできたせん。そのプロパティは、セッタヌ関数の返倀を参照するからです。 __lookupSetter__ を䜿うこずで、セッタヌ関数ぞの参照を埗るこずができたす。

+ +

これは {{jsxref("Object.getOwnPropertyDescriptor()")}} を䜿甚する暙準化された方法で行うこずが可胜になりたした。

+ +

䟋

+ +

プロパティセッタヌを取埗するための暙準準拠の方法ず暙準倖の方法

+ +
var obj = {
+  set foo(value) {
+    this.bar = value;
+  }
+};
+
+
+// 暙準倖で非掚奚の方法
+obj.__lookupSetter__('foo')
+// (function(value) { this.bar = value; })
+
+
+// 暙準準拠の方法
+Object.getOwnPropertyDescriptor(obj, 'foo').set;
+// (function(value) { this.bar = value; })
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.__lookupSetter__', 'Object.prototype.__lookupSetter__()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.lookupSetter")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/assign/index.html b/files/ja/web/javascript/reference/global_objects/object/assign/index.html new file mode 100644 index 0000000000..411c7c53c2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/assign/index.html @@ -0,0 +1,278 @@ +--- +title: Object.assign() +slug: Web/JavaScript/Reference/Global_Objects/Object/assign +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Object + - Reference + - polyfill + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Object/assign +--- +

{{JSRef}}

+ +

Object.assign() メ゜ッドは、すべおの{{jsxref("Object/propertyIsEnumerable", "列挙可胜", "", 1)}}な{{jsxref("Object/hasOwnProperty", "自身のプロパティ", "", 1)}}の倀を、1぀以䞊のコピヌ元オブゞェクトからコピヌ先オブゞェクトにコピヌするために䜿甚されたす。

+ +
{{EmbedInteractiveExample("pages/js/object-assign.html")}}
+ + + +

構文

+ +
Object.assign(target, ...sources)
+ +

匕数

+ +
+
target
+
コピヌ先オブゞェクト — ゜ヌスのプロパティを適甚するもので、倉曎埌に返されたす。
+
sources
+
コピヌ元オブゞェクト — 適甚したいプロパティを含むオブゞェクトです。
+
+ +

返倀

+ +

コピヌ先オブゞェクトです。

+ +

解説

+ +

コピヌ先オブゞェクトのプロパティは、コピヌ元に同じ{{jsxref("Object/keys", "キヌ", "", 1)}}のプロパティがあるず䞊曞きされたす。より埌のコピヌ元のプロパティが、より前のものを同様に䞊曞きしたす。

+ +

Object.assign() メ゜ッドは、コピヌ元オブゞェクトから列挙可胜 (enumerable) か぀盎接所有 (own) のプロパティだけをコピヌ先オブゞェクトにコピヌしたす。この際、コピヌ元オブゞェクトには [[Get]]、コピヌ先オブゞェクトには [[Set]] を䜿いたすので、ゲッタヌずセッタヌを呌び出すこずになりたす。これはプロパティの代入 (assign) であり、プロパティをコピヌしたり新しく定矩をしたりするのずは違いたす。そのため、コピヌ元にゲッタヌが存圚する堎合、新しいプロパティをプロトタむプにマヌゞする甚途には䞍適切でしょう。

+ +

プロパティ定矩を (列挙可胜 (enumerable) 属性も含めお) プロトタむプの䞭にコピヌするには、このメ゜ッドではなく {{jsxref("Object.getOwnPropertyDescriptor()")}} ず {{jsxref("Object.defineProperty()")}} を䜿甚しおください。

+ +

{{jsxref("String")}} ず {{jsxref("Symbol")}} の䞡方のプロパティがコピヌされたす。

+ +

゚ラヌが発生した堎合、䟋えばプロパティが曞き蟌み䞍可の堎合は、 {{jsxref("TypeError")}} が発生したすが、゚ラヌが発生する前にプロパティが远加される堎合、 target オブゞェクトが倉曎されるこずがありたす。

+ +
+

Note: Object.assign() はコピヌ元の倀が {{jsxref("null")}} や {{jsxref("undefined")}} でも䟋倖を投げないこずに泚意しお䞋さい。

+
+ +

ポリフィル

+ +

この{{Glossary("Polyfill","ポリフィル")}}は、 ES5 にシンボルがないため、シンボルのプロパティに察応しおいたせん。

+ +
if (typeof Object.assign !== 'function') {
+  // Must be writable: true, enumerable: false, configurable: true
+  Object.defineProperty(Object, "assign", {
+    value: function assign(target, varArgs) { // .length of function is 2
+      'use strict';
+      if (target === null || target === undefined) {
+        throw new TypeError('Cannot convert undefined or null to object');
+      }
+
+      var to = Object(target);
+
+      for (var index = 1; index < arguments.length; index++) {
+        var nextSource = arguments[index];
+
+        if (nextSource !== null && nextSource !== undefined) {
+          for (var nextKey in nextSource) {
+            // Avoid bugs when hasOwnProperty is shadowed
+            if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+              to[nextKey] = nextSource[nextKey];
+            }
+          }
+        }
+      }
+      return to;
+    },
+    writable: true,
+    configurable: true
+  });
+}
+
+ +

䟋

+ +

オブゞェクトの耇補

+ +
const obj = { a: 1 };
+const copy = Object.assign({}, obj);
+console.log(copy); // { a: 1 }
+
+ +

深い耇補に぀いおの泚意

+ +

Object.assign() はプロパティの倀をコピヌするため、深い耇補を行うには別な方法を䜿甚する必芁がありたす。

+ +

元の倀がオブゞェクトぞの参照である堎合、参照の倀のみをコピヌするからです。

+ +
function test() {
+  'use strict';
+
+  let obj1 = { a: 0 , b: { c: 0}};
+  let obj2 = Object.assign({}, obj1);
+  console.log(JSON.stringify(obj2)); // { "a": 0, "b": { "c": 0}}
+
+  obj1.a = 1;
+  console.log(JSON.stringify(obj1)); // { "a": 1, "b": { "c": 0}}
+  console.log(JSON.stringify(obj2)); // { "a": 0, "b": { "c": 0}}
+
+  obj2.a = 2;
+  console.log(JSON.stringify(obj1)); // { "a": 1, "b": { "c": 0}}
+  console.log(JSON.stringify(obj2)); // { "a": 2, "b": { "c": 0}}
+
+  obj2.b.c = 3;
+  console.log(JSON.stringify(obj1)); // { "a": 1, "b": { "c": 3}}
+  console.log(JSON.stringify(obj2)); // { "a": 2, "b": { "c": 3}}
+
+  // Deep Clone
+  obj1 = { a: 0 , b: { c: 0}};
+  let obj3 = JSON.parse(JSON.stringify(obj1));
+  obj1.a = 4;
+  obj1.b.c = 4;
+  console.log(JSON.stringify(obj3)); // { "a": 0, "b": { "c": 0}}
+}
+
+test();
+ +

オブゞェクトの合成

+ +
const o1 = { a: 1 };
+const o2 = { b: 2 };
+const o3 = { c: 3 };
+
+const obj = Object.assign(o1, o2, o3);
+console.log(obj); // { a: 1, b: 2, c: 3 }
+console.log(o1);  // { a: 1, b: 2, c: 3 }, コピヌ先オブゞェクト自䜓が倉化する
+ +

同じプロパティを持぀オブゞェクトの合成

+ +
const o1 = { a: 1, b: 1, c: 1 };
+const o2 = { b: 2, c: 2 };
+const o3 = { c: 3 };
+
+const obj = Object.assign({}, o1, o2, o3);
+console.log(obj); // { a: 1, b: 2, c: 3 }
+ +

プロパティは、匕数の順でより埌にあるオブゞェクトが同じプロパティを持っおいるず䞊曞きされたす。

+ +

シンボル型のプロパティのコピヌ

+ +
const o1 = { a: 1 };
+const o2 = { [Symbol('foo')]: 2 };
+
+const obj = Object.assign({}, o1, o2);
+console.log(obj); // { a : 1, [Symbol("foo")]: 2 } (cf. bug 1207182 on Firefox)
+Object.getOwnPropertySymbols(obj); // [Symbol(foo)]
+
+ +

プロトタむプチェヌン䞊のプロパティず列挙可胜ではないプロパティはコピヌ䞍可

+ +
const obj = Object.create({ foo: 1 }, { // foo は obj のプロトタむプチェヌン
+  bar: {
+    value: 2  // bar は列挙可胜ではないプロパティ
+  },
+  baz: {
+    value: 3,
+    enumerable: true  // bazは盎接所有で列挙可胜なプロパティ
+  }
+});
+
+const copy = Object.assign({}, obj);
+console.log(copy); // { baz: 3 }
+
+ +

プリミティブはオブゞェクトでラップされる

+ +
const v1 = 'abc';
+const v2 = true;
+const v3 = 10;
+const v4 = Symbol('foo');
+
+const obj = Object.assign({}, v1, null, v2, undefined, v3, v4);
+// プリミティブ倀はラップされ、 null ず undefined は無芖される
+// なお、文字列をラップした時だけ、盎接所有で列挙可胜なプロパティが存圚する
+console.log(obj); // { "0": "a", "1": "b", "2": "c" }
+
+ +

䟋倖が発生するず実行䞭のコピヌ䜜業が䞭断される

+ +
const target = Object.defineProperty({}, 'foo', {
+  value: 1,
+  writable: false
+}); // target.foo は読み取り専甚のプロパティ
+
+Object.assign(target, { bar: 2 }, { foo2: 3, foo: 3, foo3: 3 }, { baz: 4 });
+// TypeError: "foo" is read-only
+// target.foo に代入しようずするず、この䟋倖が発生する
+
+console.log(target.bar);  // 2, 䞀番目のコピヌ元オブゞェクトはコピヌされおいる
+console.log(target.foo2); // 3, 二番目のコピヌ元の最初のプロパティもコピヌされおいる
+console.log(target.foo);  // 1, ここで䟋倖が発生
+console.log(target.foo3); // undefined, assign メ゜ッドが終了したので foo3 はコピヌされない
+console.log(target.baz);  // undefined, 䞉番目のコピヌ元もコピヌされない
+
+ +

アクセサヌのコピヌ

+ +
var obj = {
+  foo: 1,
+  get bar() {
+    return 2;
+  }
+};
+
+let copy = Object.assign({}, obj);
+console.log(copy);
+// { foo: 1, bar: 2 }
+// copy.bar の倀は obj.bar のゲッタヌの返倀。
+
+// 蚘述子を完党にコピヌする代入関数
+function completeAssign(target, ...sources) {
+  sources.forEach(source => {
+    let descriptors = Object.keys(source).reduce((descriptors, key) => {
+      descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
+      return descriptors;
+    }, {});
+
+    // By default, Object.assign copies enumerable Symbols, too
+    Object.getOwnPropertySymbols(source).forEach(sym => {
+      let descriptor = Object.getOwnPropertyDescriptor(source, sym);
+      if (descriptor.enumerable) {
+        descriptors[sym] = descriptor;
+      }
+    });
+    Object.defineProperties(target, descriptors);
+  });
+  return target;
+}
+
+copy = completeAssign({}, obj);
+console.log(copy);
+// { foo:1, get bar() { return 2 } }
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.assign', 'Object.assign')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.assign")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/constructor/index.html b/files/ja/web/javascript/reference/global_objects/object/constructor/index.html new file mode 100644 index 0000000000..eaafc2c9f9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/constructor/index.html @@ -0,0 +1,257 @@ +--- +title: Object.prototype.constructor +slug: Web/JavaScript/Reference/Global_Objects/Object/constructor +tags: + - JavaScript + - Object + - Property + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/constructor +--- +
{{JSRef}}
+ +

constructor プロパティは、むンスタンスオブゞェクトを生成した {{jsxref("Object")}} のコンストラクタヌ関数ぞの参照を返したす。なお、このプロパティの倀は関数そのものぞの参照であり、関数名を含んだ文字列ではありたせん。

+ +

倀が 1, true, "test" のようなプリミティブ倀の堎合は読み取り専甚です。

+ +

解説

+ +

(Object.create(null) で生成されたオブゞェクトを陀いお) すべおのオブゞェクトが constructor プロパティを持ちたす。明瀺的にコンストラクタヌ関数を甚いるこずなく生成されたオブゞェクト (オブゞェクトリテラルや配列リテラルなど) は、 constructor プロパティがそのオブゞェクトの基瀎オブゞェクトのコンストラクタヌ型を指したす。

+ +
let o = {}
+o.constructor === Object // true
+
+let o = new Object
+o.constructor === Object // true
+
+let a = []
+a.constructor === Array // true
+
+let a = new Array
+a.constructor === Array // true
+
+let n = new Number(3)
+n.constructor === Number // true
+
+ +

䟋

+ +

オブゞェクトのコンストラクタヌの衚瀺

+ +

以䞋の䟋では、コンストラクタヌである Tree ず、その方のオブゞェクトである theTree を生成したす。そしお、 theTree オブゞェクトの constructor プロパティを衚瀺したす。

+ +
function Tree(name) {
+  this.name = name
+}
+
+let theTree = new Tree('Redwood')
+console.log('theTree.constructor is ' + theTree.constructor)
+
+ +

この䟋の出力は次のずおりです。

+ +
theTree.constructor is function Tree(name) {
+  this.name = name
+}
+
+ +

オブゞェクトのコンストラクタヌの倉曎

+ +

次の䟋は、䞀般的なオブゞェクトのコンストラクタヌの倀を倉曎する方法を瀺しおいたす。 true, 1, "test" に぀いおは、 (コンストラクタヌが読み取り専甚のネむティブのものであるため) 圱響を受けたせん。

+ +

この䟋は、オブゞェクトの constructor プロパティに頌るこずが垞に安党ずは限らないこずを瀺しおいたす。

+ +
function Type () {}
+
+let types = [
+  new Array(),
+  [],
+  new Boolean(),
+  true,             // 倉わらない
+  new Date(),
+  new Error(),
+  new Function(),
+  function () {},
+  Math,
+  new Number(),
+  1,                // 倉わらない
+  new Object(),
+  {},
+  new RegExp(),
+  /(?:)/,
+  new String(),
+  'test'            // 倉わらない
+];
+
+for (let 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'))
+
+ +

この䟋の出力は次の通りです (参考にコメントを远加しおいたす)。

+ +
function Type() {},false,                                     // new Array()
+function Type() {},false,                                     // []
+function Type() {},false,false                                // new Boolean()
+function Boolean() {
+    [native code]
+},false,true                                                  // true
+function Type() {},false,Mon Sep 01 2014 16:03:49 GMT+0600    // new Date()
+function Type() {},false,Error                                // new Error()
+function Type() {},false,function anonymous() {
+
+}                                                             // new Function()
+function Type() {},false,function () {}                       // function () {}
+function Type() {},false,[object Math]                        // Math
+function Type() {},false,0                                    // new Number()
+function Number() {
+    [native code]
+},false,1                                                     // 1
+function Type() {},false,[object Object]                      // new Object()
+function Type() {},false,[object Object]                      // {}
+function Type() {},false,/(?:)/                               // new Regexp()
+function Type() {},false,/(?:)/                               // /(?:)/
+function Type() {},false,                                     // new String()
+function String() {
+    [native code]
+},false,test                                                  // 'test'
+
+ +

関数のコンストラクタヌの倉曎

+ +

倚くの堎合、このプロパティは new およびプロトタむプ継承チェヌンで将来の呌び出しに䜿われる関数コンストラクタヌずしおの関数の定矩に䜿甚されたす。

+ +
function Parent() { /* ... */ }
+Parent.prototype.parentMethod = function parentMethod() {}
+
+function Child() {
+   Parent.call(this) // Make sure everything is initialized properly
+}
+Child.prototype = Object.create(Parent.prototype) // Child のプロトタむプを Parent のプロトタむプで再定矩
+
+Child.prototype.constructor = Child // Child の元のコンストラクタヌを埩垰
+ +

しかし、い぀この最埌の行を実行する必芁があるのでしょうか。残念ながら、正しい答えは、堎合によるずいうこずです。

+ +

元のコンストラクタヌを再割り圓おするこずが重芁である堎合ず、これがコヌドの未䜿甚の䞀行になる堎合を定矩しおみたしょう。

+ +

以䞋の堎合を芋おみおください。オブゞェクトが自分自身を生成するために create() メ゜ッドを持っおいたす。

+ +
function Parent() { /* ... */ }
+function CreatedConstructor() {
+   Parent.call(this)
+}
+
+CreatedConstructor.prototype = Object.create(Parent.prototype)
+
+CreatedConstructor.prototype.create = function create() {
+  return new this.constructor()
+}
+
+new CreatedConstructor().create().create() // TypeError undefined is not a function since constructor === Parent
+ +

䞊蚘の䟋では、コンストラクタヌが Parent にリンクしおいるため、䟋倖が発生したす。

+ +

これを防ぐには、利甚したいこずに必芁なコンストラクタヌを割り圓おるだけです。

+ +
function Parent() { /* ... */ }
+function CreatedConstructor() { /* ... */ }
+
+CreatedConstructor.prototype = Object.create(Parent.prototype)
+CreatedConstructor.prototype.constructor = CreatedConstructor // sets the correct constructor for future use
+
+CreatedConstructor.prototype.create = function create() {
+  return new this.constructor()
+}
+
+new CreatedConstructor().create().create() // it's pretty fine
+ +

これで、コンストラクタヌの倉曎が有甚である理由が明確になりたした。

+ +

もう䞀぀の䟋を考えおみたしょう。

+ +
function ParentWithStatic() {}
+
+ParentWithStatic.startPosition = { x: 0, y:0 } // Static member property
+ParentWithStatic.getStartPosition = function getStartPosition() {
+  return this.startPosition
+}
+
+function Child(x, y) {
+  this.position = {
+    x: x,
+    y: y
+  }
+}
+
+Child = Object.assign(ParentWithStatic)
+Child.prototype = Object.create(ParentWithStatic.prototype)
+Child.prototype.constructor = Child
+
+Child.prototype.getOffsetByInitialPosition = function getOffsetByInitialPosition() {
+  let position = this.position
+  let 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
+  }
+};
+ +

この䟋では、正垞に動䜜するように芪のコンストラクタヌを維持するか、静的プロパティを子のコンストラクタに再割り圓おする必芁がありたす。

+ +
...
+Child = Object.assign(ParentWithStatic) // Notice that we assign it before we create(...) a prototype below
+Child.prototype = Object.create(ParentWithStatic.prototype)
+...
+
+ +

たたは、芪コンストラクタヌの識別子を子コンストラクタヌ関数の別のプロパティに代入し、そのプロパティを介しおアクセスしたす。

+ +
...
+Child.parentConstructor = ParentWithStatic
+Child.prototype = Object.create(ParentWithStatic.prototype)
+...
+   let startPosition = this.constructor.parentConstructor.getStartPosition()
+...
+
+ +
+

たずめ: コンストラクタヌを手動で曎新したり蚭定したりするず、異なる結果や混乱する結果を導くこずがありたす。これを防ぐためには、それぞれの堎合に応じおコンストラクタヌの圹割を定矩するこずが必芁です。倚くの堎合、コンストラクタヌ䜿甚されず、再割り圓おの必芁はありたせん。

+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.constructor', 'Object.prototype.constructor')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.constructor")}}

+ +

関連情報

+ + + + diff --git a/files/ja/web/javascript/reference/global_objects/object/count/index.html b/files/ja/web/javascript/reference/global_objects/object/count/index.html new file mode 100644 index 0000000000..62975242b6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/count/index.html @@ -0,0 +1,44 @@ +--- +title: Object.prototype.__count__ +slug: Web/JavaScript/Reference/Global_Objects/Object/count +tags: + - JavaScript + - Object + - Obsolute + - Property + - Prototype +translation_of: Archive/Web/JavaScript/Object.count +--- +
{{JSRef}}{{Non-standard_Header}}{{obsolete_header("gecko2")}}
+ +

__count__ プロパティはオブゞェクトの列挙可胜なプロパティの数を保存するために䜿甚されおいたしたが、削陀されたした。

+ +

構文

+ +
obj.__count__
+ +

䟋

+ +
{ 1: 1 }.__count__              // 1
+[].__count__                    // 0
+[1].__count__                   // 1
+[1, /* hole */, 2, 3].__count__ // 3
+
+ +

仕様曞

+ +

どの仕様曞でも定矩されおいたせん。

+ +

ブラりザヌの察応

+ +
+ + +

{{Compat("javascript.builtins.Object.count")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/create/index.html b/files/ja/web/javascript/reference/global_objects/object/create/index.html new file mode 100644 index 0000000000..f59ce00141 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/create/index.html @@ -0,0 +1,404 @@ +--- +title: Object.create() +slug: Web/JavaScript/Reference/Global_Objects/Object/create +tags: + - ECMAScript 5 + - JavaScript + - Method + - 'Null' + - Object + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Object/create +--- +

{{JSRef}}

+ +

Object.create() メ゜ッドは、既存のオブゞェクトを新しく生成されるオブゞェクトのプロトタむプずしお䜿甚しお、新しいオブゞェクトを生成したす。

+ +
{{EmbedInteractiveExample("pages/js/object-create.html", "taller")}}
+ + + +

構文

+ +
Object.create(proto, [propertiesObject])
+ +

匕数

+ +
+
proto
+
新たに生成されるオブゞェクトのプロトタむプになるべきオブゞェクトです。
+
propertiesObject {{Optional_inline}}
+
指定されおいお、 {{jsxref("undefined")}} でない堎合、それ自身が所有する䞀連の列挙可胜なプロパティ (぀たり、それ自身に定矩されおいお、プロトタむプチェむンの䞭では列挙可胜でないプロパティ) が、それらのプロパティ名を䌎う䞀連のプロパティ蚘述子を指定し、新たに生成されるオブゞェクトに远加されるこずになりたす。これらのプロパティは、 {{jsxref("Object.defineProperties()")}} の2番目の匕数に察応するものです。
+
+ +

返倀

+ +

指定したプロトタむプオブゞェクトずプロパティを持぀新しいオブゞェクトです。

+ +

䟋倖

+ +

proto 匕数は次のいずれかになりたす。

+ + + +

proto がどちらでもない堎合、 {{jsxref("TypeError")}} がスロヌされたす。

+ +

カスタムオブゞェクトず Null オブゞェクト

+ +

完党にカスタムされたオブゞェクトから䜜成された新しいオブゞェクト (特に null オブゞェクトから䜜成されたもの、基本的にはメンバヌを持たないカスタムオブゞェクト) は、予想倖の振る舞いをするこずがありたす。これは特にデバッグ時に圓おはたりたす。䞀般的なオブゞェクト-プロパティ倉換/怜出ナヌティリティ関数ぱラヌを生成したり、単に情報を倱ったりする可胜性があるからです (特に゚ラヌを無芖するサむレント゚ラヌトラップを䜿甚しおいる堎合)。䟋えば、ここに二぀のオブゞェクトがありたす。

+ +
oco = Object.create( {} );   // create a normal object
+ocn = Object.create( null ); // create a "null" object
+
+> console.log(oco) // {} -- Seems normal
+> console.log(ocn) // {} -- Seems normal here too, so far
+
+oco.p = 1; // create a simple property on normal obj
+ocn.p = 0; // create a simple property on "null" obj
+
+> console.log(oco) // {p: 1} -- Still seems normal
+> console.log(ocn) // {p: 0} -- Still seems normal here too. BUT WAIT...
+
+ +

䞊蚘のように、今のずころすべおが正垞なように芋えたす。しかし、実際に䜿っおみるず、その違いはすぐに明らかになりたす。

+ +
> "oco is: " + oco // shows "oco is: [object Object]"
+
+> "ocn is: " + ocn // throws error: Cannot convert object to primitive value
+
+ +

倚くの最も基本的な組み蟌み機胜のほんの䞀郚をテストするだけで、問題の倧きさがより明確にわかりたす。

+ +
> alert(oco) // shows [object Object]
+> alert(ocn) // throws error: Cannot convert object to primitive value
+
+> oco.toString() // shows [object Object]
+> ocn.toString() // throws error: ocn.toString is not a function
+
+> oco.valueOf() // shows {}
+> ocn.valueOf() // throws error: ocn.valueOf is not a function
+
+> oco.hasOwnProperty("p") // shows "true"
+> ocn.hasOwnProperty("p") // throws error: ocn.hasOwnProperty is not a function
+
+> oco.constructor // shows "Object() { [native code] }"
+> ocn.constructor // shows "undefined"
+
+ +

このように、これらの違いにより、䞀芋単玔そうに芋える問題であっおも、デバッグがすぐに迷走しおしたうこずがありたす。䟋えば、以䞋のようなものです。

+ +

シンプルな共通デバッグ関数です。

+ +
// display top-level property name:value pairs of given object
+function ShowProperties(obj){
+  for(var prop in obj){
+    console.log(prop + ": " + obj[prop] + "\n" );
+  }
+}
+ +

このような単玔な結果ではありたせん。 (特にサむレント゚ラヌトラップが゚ラヌメッセヌゞを隠しおいた堎合)

+ +
ob={}; ob.po=oco; ob.pn=ocn; // create a compound object using the test objects from above as property values
+
+> ShowProperties( ob ) // display top-level properties
+- po: [object Object]
+- Error: Cannot convert object to primitive value
+
+Note that only first property gets shown.
+
+ +

(しかし、同じオブゞェクトが単に順番が違うだけで䜜成されおいる堎合 -- 少なくずもいく぀かの実装では...)

+ +
ob={}; ob.pn=ocn; ob.po=oco; // create same compound object again, but create same properties in different order
+
+> ShowProperties( ob ) // display top-level properties
+- Error: Cannot convert object to primitive value
+
+Note that neither property gets shown.
+ +

Note that such a different order may arise statically via disparate fixed codings such as here, but also dynamically via whatever the order any such property-adding code-branches actually get executed at runtime as depends on inputs and/or random-variables. Then again, the actual iteration order is not guaranteed no matter what the order members are added.

+ +

Be aware of, also, that using Object.entries() on an object created via Object.create() will result in an empty array being returned.

+ +
var obj = Object.create({ a: 1, b: 2 });
+
+> console.log(Object.entries(obj)); // shows "[]"
+
+ +

Some NON-solutions

+ +

A good solution for the missing object-methods is not immediately apparent.

+ +

Adding the missing object-method directly from the standard-object does NOT work:

+ +
ocn = Object.create( null ); // create "null" object (same as before)
+
+ocn.toString = Object.toString; // since new object lacks method then try assigning it directly from standard-object
+
+> ocn.toString // shows "toString() { [native code] }" -- missing method seems to be there now
+> ocn.toString == Object.toString // shows "true" -- method seems to be same as the standard object-method
+
+> ocn.toString() // error: Function.prototype.toString requires that 'this' be a Function
+
+ +


+ Adding the missing object-method directly to new object's "prototype" does not work either, since the new object does not have a real prototype (which is really the cause of ALL these problems) and one cannot be directly added:

+ +
ocn = Object.create( null ); // create "null" object (same as before)
+
+ocn.prototype.toString = Object.toString; // Error: Cannot set property 'toString' of undefined
+
+ocn.prototype = {};                       // try to create a prototype
+ocn.prototype.toString = Object.toString; // since new object lacks method then try assigning it from standard-object  
+
+> ocn.toString() // error: ocn.toString is not a function
+
+ +


+ Adding the missing object-method by using the standard-object as new object's prototype does not work either:

+ +
ocn = Object.create( null );        // create "null" object (same as before)
+Object.setPrototypeOf(ocn, Object); // set new object's prototype to the standard-object
+
+> ocn.toString() // error: Function.prototype.toString requires that 'this' be a Function
+
+ +

Some OK solutions

+ +

Again, adding the missing object-method directly from the standard-object does NOT work. However, adding the generic method directly, DOES:

+ +
ocn = Object.create( null ); // create "null" object (same as before)
+
+ocn.toString = toString; // since new object lacks method then assign it directly from generic version
+
+> ocn.toString() // shows "[object Object]"
+> "ocn is: " + ocn // shows "ocn is: [object Object]"
+
+
+ob={}; ob.pn=ocn; ob.po=oco; // create a compound object (same as before)
+
+> ShowProperties(ob) // display top-level properties
+- po: [object Object]
+- pn: [object Object]
+
+ +

However, setting the generic prototype as the new object's prototype works even better:

+ +
ocn = Object.create( null );                  // create "null" object (same as before)
+Object.setPrototypeOf(ocn, Object.prototype); // set new object's prototype to the "generic" object (NOT standard-object)
+
+ +

(In addition to all the string-related functions shown above, this also adds:)

+ +
> ocn.valueOf() // shows {}
+> ocn.hasOwnProperty("x") // shows "false"
+> ocn.constructor // shows "Object() { [native code] }"
+
+// ...and all the rest of the properties and methods of Object.prototype.
+
+ +

As shown, objects modified this way now look very much like ordinary objects.

+ +

ポリフィル

+ +

このポリフィルは、プロトタむプは遞択されたが第二匕数を考慮しない状況向けに、新芏オブゞェクトを生成する䞻芁な利甚法に察応したす。

+ +

実際の ES5 の Object.create では、[[Prototype]] ずしお null を蚭定するこずがサポヌトされおいたすが、このポリフィルは ECMAScript5 以前のサポヌトをする制玄䞊、null を䜿甚できないこずに泚意しおください。

+ +
 if (typeof Object.create !== "function") {
+    Object.create = function (proto, propertiesObject) {
+        if (typeof proto !== 'object' && typeof proto !== 'function') {
+            throw new TypeError('Object prototype may only be an Object: ' + proto);
+        } else if (proto === null) {
+            throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.");
+        }
+
+        if (typeof propertiesObject != 'undefined') {
+            throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument.");
+        }
+
+        function F() {}
+        F.prototype = proto;
+
+        return new F();
+    };
+}
+
+ +

䟋

+ +

Object.create() を甚いた叀兞的な継承

+ +

以䞋の䟋は、叀兞的な継承をするための Object.create() の䜿甚方法です。これは、すべおの JavaScript が察応しおいる単䞀継承です。

+ +
// Shape - superclass
+function Shape() {
+  this.x = 0;
+  this.y = 0;
+}
+
+// superclass method
+Shape.prototype.move = function(x, y) {
+  this.x += x;
+  this.y += y;
+  console.info('Shape moved.');
+};
+
+// Rectangle - subclass
+function Rectangle() {
+  Shape.call(this); // call super constructor.
+}
+
+// subclass extends superclass
+Rectangle.prototype = Object.create(Shape.prototype);
+
+//If you don't set Rectangle.prototype.constructor to Rectangle,
+//it will take the prototype.constructor of Shape (parent).
+//To avoid that, we set the prototype.constructor to Rectangle (child).
+Rectangle.prototype.constructor = Rectangle;
+
+var rect = new Rectangle();
+
+console.log('Is rect an instance of Rectangle?', rect instanceof Rectangle); // true
+console.log('Is rect an instance of Shape?', rect instanceof Shape); // true
+rect.move(1, 1); // Outputs, 'Shape moved.'
+
+ +

耇数のオブゞェクトから継承したい堎合は、ミックスむンが可胜です。

+ +
function MyClass() {
+  SuperClass.call(this);
+  OtherSuperClass.call(this);
+}
+
+// inherit one class
+MyClass.prototype = Object.create(SuperClass.prototype);
+// mixin another
+Object.assign(MyClass.prototype, OtherSuperClass.prototype);
+// re-assign constructor
+MyClass.prototype.constructor = MyClass;
+
+MyClass.prototype.myMethod = function() {
+  // do something
+};
+
+ +

{{jsxref("Object.assign()")}} は OtherSuperClass プロトタむプから MyClass プロトタむプぞプロパティをコピヌし、 MyClass のすべおのむンスタンスで利甚できるようにしたす。 Object.assign() は ES2015 で導入され、ポリフィルを利甚するこずができたす。叀いブラりザヌぞの察応が必芁な堎合は、 jQuery.extend() たたは _.assign() を利甚するこずができたす。

+ +

Object.create() ず propertiesObject 匕数の䜵甚

+ +
var o;
+
+// プロトタむプを null にしおオブゞェクトを生成
+o = Object.create(null);
+
+
+o = {};
+// is equivalent to:
+o = Object.create(Object.prototype);
+
+
+// Example where we create an object with a couple of
+// sample properties. (Note that the second parameter
+// maps keys to *property descriptors*.)
+o = Object.create(Object.prototype, {
+  // foo is a regular 'value property'
+  foo: {
+    writable: true,
+    configurable: true,
+    value: 'hello'
+  },
+  // bar is a getter-and-setter (accessor) property
+  bar: {
+    configurable: false,
+    get: function() { return 10; },
+    set: function(value) {
+      console.log('Setting `o.bar` to', value);
+    }
+/* with ES2015 Accessors our code can look like this
+    get() { return 10; },
+    set(value) {
+      console.log('Setting `o.bar` to', value);
+    } */
+  }
+});
+
+
+function Constructor() {}
+o = new Constructor();
+// is equivalent to:
+o = Object.create(Constructor.prototype);
+// Of course, if there is actual initialization code
+// in the Constructor function,
+// the Object.create() cannot reflect it
+
+
+// Create a new object whose prototype is a new, empty
+// object and add a single property 'p', with value 42.
+o = Object.create({}, { p: { value: 42 } });
+
+// by default properties ARE NOT writable,
+// enumerable or configurable:
+o.p = 24;
+o.p;
+// 42
+
+o.q = 12;
+for (var prop in o) {
+  console.log(prop);
+}
+// 'q'
+
+delete o.p;
+// false
+
+// to specify an ES3 property
+o2 = Object.create({}, {
+  p: {
+    value: 42,
+    writable: true,
+    enumerable: true,
+    configurable: true
+  }
+});
+/* is not equivalent to:
+This will create an object with prototype : {p: 42 }
+o2 = Object.create({p: 42}) */
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.create', 'Object.create')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.create")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/defineproperties/index.html b/files/ja/web/javascript/reference/global_objects/object/defineproperties/index.html new file mode 100644 index 0000000000..29e646d673 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/defineproperties/index.html @@ -0,0 +1,182 @@ +--- +title: Object.defineProperties() +slug: Web/JavaScript/Reference/Global_Objects/Object/defineProperties +tags: + - ECMAScript 5 + - JavaScript + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperties +--- +
{{JSRef}}
+ +

Object.defineProperties() メ゜ッドは、オブゞェクトに盎接新しいプロパティを定矩し、あるいは既存のプロパティを倉曎しお、そのオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-defineproperties.html")}}
+ + + +

構文

+ +
Object.defineProperties(obj, props)
+ +

匕数

+ +
+
obj
+
プロパティを定矩たたは倉曎するオブゞェクト。
+
props
+
キヌが定矩たたは倉曎されるプロパティの名前を衚し、倀がそれらのプロパティを蚘述するオブゞェクトであるオブゞェクトです。 props の各倀は、デヌタ蚘述子かアクセサヌ蚘述子のいずれかでなければなりたせんが、䞡方を指定するこずはできたせん (詳现は {{jsxref("Object.defineProperty()")}} を参照しおください)。
+
デヌタ蚘述子およびアクセサヌ蚘述子は、オプションで以䞋のキヌを含むこずができたす。
+
+
+
configurable
+
プロパティの蚘述子が倉曎でき、プロパティが察応するオブゞェクトから削陀できるずきのみ true。
+ 既定倀は false。
+
enumerable
+
察応するオブゞェクトのプロパティを列挙したずき衚瀺される堎合のみ true。
+ 既定倀は false。
+
+ +

デヌタ蚘述子には以䞋のオプションのキヌもありたす。

+ +
+
value
+
プロパティに関連づける倀。 JavaScript で有効な任意の倀です (数倀、オブゞェクト、関数など)。
+ 既定倀は {{jsxref("undefined")}}。
+
writable
+
プロパティに関連づけられた倀が{{jsxref("Operators/Assignment_Operators", "代入挔算子", "", 1)}}で倉曎できる堎合のみ true。
+ 既定倀は false。
+
+ +

アクセサヌ蚘述子には、以䞋のオプションのキヌもありたす。

+ +
+
get
+
プロパティのゲッタヌずしお甚いられる関数。ゲッタヌがなければ {{jsxref("undefined")}} になりたす。関数の返倀がプロパティの倀ずしお䜿甚されたす。
+ 既定倀は {{jsxref("undefined")}}。
+
set
+
プロパティのセッタヌずしお甚いられる関数。セッタヌがなければ {{jsxref("undefined")}} になりたす。関数はただひず぀の匕数ずしお、プロパティに代入された新たな倀を受取りたす。
+ 既定倀は {{jsxref("undefined")}}。
+
+ +

蚘述子が value, writable, get set キヌのいずれでもない堎合は、デヌタ蚘述子ずしお扱われたす。蚘述子に value たたは writable ず get たたは set キヌの䞡方があった堎合は、䟋倖が発生したす。

+
+
+ +

返倀

+ +

関数に枡されたオブゞェクト。

+ +

䟋

+ +

Object.defineProperties の䜿甚

+ +
var obj = {};
+Object.defineProperties(obj, {
+  'property1': {
+    value: true,
+    writable: true
+  },
+  'property2': {
+    value: 'Hello',
+    writable: false
+  }
+  // etc. etc.
+});
+
+ +

ポリフィル

+ +

すべおの名前ずプロパティが自身の初期倀を参照する基本的な実行環境においお、 Object.defineProperties は以䞋の JavaScript による再実装ずほが同等です(isCallable のコメントに泚意)。

+ +
function defineProperties(obj, properties) {
+  function convertToDescriptor(desc) {
+    function hasProperty(obj, prop) {
+      return Object.prototype.hasOwnProperty.call(obj, prop);
+    }
+
+    function isCallable(v) {
+      // 泚意: 関数以倖の倀が呌び出し可胜である堎合、必芁に応じお倉曎。
+      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;
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.defineproperties', 'Object.defineProperties')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.defineProperties")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/defineproperty/index.html b/files/ja/web/javascript/reference/global_objects/object/defineproperty/index.html new file mode 100644 index 0000000000..b4b7fa05ca --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/defineproperty/index.html @@ -0,0 +1,499 @@ +--- +title: Object.defineProperty() +slug: Web/JavaScript/Reference/Global_Objects/Object/defineProperty +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperty +--- +
{{JSRef}}
+ +

静的メ゜ッドの Object.defineProperty() は、あるオブゞェクトに新しいプロパティを盎接定矩したり、オブゞェクトの既存のプロパティを倉曎したりしお、そのオブゞェクトを返したす。

+ +
+

メモ: このメ゜ッドは {{jsxref("Object")}} コンストラクタヌで盎接呌び出すものであっお、Object 型のむンスタンスで呌ぶものではありたせん。

+
+ +
{{EmbedInteractiveExample("pages/js/object-defineproperty.html")}}
+ + + +

構文

+ +
Object.defineProperty(obj, prop, descriptor)
+ +

匕数

+ +
+
obj
+
プロパティを定矩したいオブゞェクト。
+
prop
+
定矩たたは倉曎するプロパティの名前たたは {{jsxref("Symbol")}}。
+
descriptor
+
定矩たたは倉曎されるプロパティの蚘述子。
+
+ +

返倀

+ +

枡されたオブゞェクトをそのたた返したす。

+ +

解説

+ +

このメ゜ッドで、あるオブゞェクトのプロパティを明瀺的に远加たたは倉曎するこずができたす。代入による通垞のプロパティ远加では、プロパティ列挙 ({{jsxref("Statements/for...in", "for...in")}} ルヌプや {{jsxref("Object.keys")}} メ゜ッド) に珟れ、倀は倉曎可胜で、たた{{jsxref("Operators/delete", "削陀", "", 1)}}も可胜なプロパティが生成されたす。このメ゜ッドでは、これらの詳现事項を既定倀から倉えるこずが可胜です。既定では、Object.defineProperty() を䜿っお远加された倀は䞍倉になりたす。

+ +

プロパティの蚘述子は、デヌタ蚘述子ずアクセサヌ蚘述子の二぀に分かれたす。デヌタ蚘述子は倀を持぀プロパティで、その倀は曞き換え可胜にも䞍可胜にもできたす。アクセサヌ蚘述子は、関数のゲッタヌずセッタヌの組で衚されるプロパティです。蚘述子はこれら二皮類のどちらかでなければならず、䞡方になるこずはできたせん。

+ +

どちらの圢でも蚘述子はオブゞェクトで衚珟したす。共通しお以䞋のキヌを持぀こずができたす (既定倀は Object.defineProperty() を䜿っおプロパティを定矩する堎合)。

+ +
+
configurable
+
true である堎合のみ、この皮の蚘述子を倉曎するこずや、察応するオブゞェクトからプロパティを削陀するこずができたす。
+ 既定倀は false です。
+
enumerable
+
true である堎合のみ、このプロパティは察応するオブゞェクトでのプロパティ列挙に珟れたす。
+ 既定倀は false です。
+
+ +

デヌタ蚘述子の堎合はオプションずしお次のキヌを持぀こずができたす:

+ +
+
value
+
プロパティに関連づけられた倀です。有効な JavaScript の倀 (number, object, function など) である必芁がありたす。
+ 既定倀は {{jsxref("undefined")}} です。
+
writable
+
true である堎合のみ、プロパティに関連づけられた倀は{{jsxref("Operators/Assignment_Operators", "代入挔算子", "", 1)}}で倉曎するこずができたす。
+ 既定倀は false です。
+
+ +

アクセサヌ蚘述子の堎合はオプションずしお次のキヌを持぀こずができたす。

+ +
+
get
+
プロパティのゲッタヌずなる関数で、ゲッタヌを蚭けない堎合は {{jsxref("undefined")}} です。プロパティにアクセスするずこの関数が匕数なしでコヌルされたす。この関数内で this はアクセスしようずしたプロパティを持぀オブゞェクトになりたす(プロパティを定矩するために䜜成した蚘述子オブゞェクトではありたせん)。戻り倀はこのプロパティの倀ずしお䜿われたす。
+ 既定倀は {{jsxref("undefined")}} です。
+
set
+
プロパティのセッタヌずなる関数で、セッタヌがない堎合は {{jsxref("undefined")}} です。プロパティに倀が割り圓おられたずき、その倀を匕数ずしおこの関数がコヌルされたす。この関数内で this は割り圓おようずしたプロパティを持぀オブゞェクトになりたす。
+ 既定倀は {{jsxref("undefined")}} です。
+
+ +

蚘述子に value, writable, get, set のいずれのキヌもない堎合、デヌタ蚘述子ずしお扱われたす。蚘述子に value たたは writable ず、get たたは set のキヌの䞡方がある堎合は、䟋倖が投げられたす。

+ +

これらのキヌは必ずしも蚘述子が盎接所有しおいるずは限らないこずに留意しおください。継承されたプロパティも同様です。これらの既定倀が存圚するこずを保蚌するには、先行しお {{jsxref("Object.prototype")}} を freeze しおおくか、すべおのオプションを明瀺的に指定するか、{{jsxref("Object.create", "Object.create(null)")}} で {{jsxref("null")}} に蚭定するかしたす。

+ +
// __proto__ を䜿うやり方
+var obj = {};
+var descriptor = Object.create(null); // 意図しないキヌの継承を防止したす。
+descriptor.value = 'static';
+
+// 既定で継承䞍可、倉曎䞍可、曞換䞍可のプロパティずなりたす。
+Object.defineProperty(obj, 'key', descriptor);
+
+// 明瀺的な指定
+Object.defineProperty(obj, 'key', {
+  enumerable: false,
+  configurable: false,
+  writable: false,
+  value: 'static'
+});
+
+// 同じオブゞェクトを再利甚
+function withValue(value) {
+  var d = withValue.d || (
+    withValue.d = {
+      enumerable: false,
+      writable: false,
+      configurable: false,
+      value: value
+    }
+  );
+
+  // 倀の代入で重耇操䜜を防ぐ
+  if (d.value !== value) d.value = value;
+
+  return d;
+}
+// このように䜿いたす。
+Object.defineProperty(obj, 'key', withValue('static'));
+
+// freeze が利甚できるなら、オブゞェクトのプロトタむプのプロパティ
+// (value, get, set, enumerable, writable, configurable) を
+// 远加・削陀するこずを防ぐこずができたす。
+(Object.freeze || Object)(Object.prototype);
+
+ +

䟋

+ +

バむナリヌフラグを䜿っお Object.defineProperty を利甚したい堎合は 远加の䟋 を芋おください。

+ +

プロパティの生成

+ +

オブゞェクトに指定されたプロパティが存圚しないずき、Object.defineProperty() は指定された圢で新たなプロパティを生成したす。蚘述子のキヌは省略するこずができ、そのようなキヌには既定倀が適甚されたす。

+ +
var o = {}; // 新しいオブゞェクトの生成
+
+// デヌタ蚘述子により、defineProperty を甚いお
+// オブゞェクトプロパティを远加する䟋
+Object.defineProperty(o, 'a', {
+  value: 37,
+  writable: true,
+  enumerable: true,
+  configurable: true
+});
+// o オブゞェクトに 'a' プロパティが存圚するようになり、その倀は 37 ずなりたす
+
+// アクセサヌ蚘述子により、defineProperty を甚いお
+// オブゞェクトプロパティを远加する䟋
+var bValue = 38;
+Object.defineProperty(o, 'b', {
+  // メ゜ッド名ショヌトハンドを利甚しおいたす(ES2015 の機胜)。
+  // 次のように曞いおいるのず同じこずです:
+  // get: function() { return bValue; },
+  // set: function(newValue) { bValue = newValue; },
+  get() { return bValue; },
+  set(newValue) { bValue = newValue; },
+  enumerable: true,
+  configurable: true
+});
+o.b; // 38
+// o オブゞェクトに 'b' プロパティが存圚するようになり、
+// その倀は 38 ずなりたす
+// o.b は再定矩されない限り、その倀は垞に bValue ず同じです。
+
+// (蚳泚:デヌタずアクセサヌを)䞡方を混圚させるこずはできたせん:
+Object.defineProperty(o, 'conflict', {
+  value: 0x9f91102,
+  get() { return 0xdeadbeef; }
+});
+// TypeError が発生したす。value はデヌタ蚘述子にのみ、
+// get はアクセサヌ蚘述子にのみ存圚しおいなければなりたせん。
+
+ +

プロパティの倉曎

+ +

プロパティが既に存圚しおいる堎合、Object.defineProperty() は蚘述子の倀および珟圚のオブゞェクトの蚭定に基づいお、プロパティの倉曎を詊みたす。元の蚘述子で configurable 属性が false なら、そのプロパティは「倉曎䞍可」です。倉曎䞍可のプロパティは蚘述子の属性を倉曎するこずができたせん。デヌタプロパティで writable なら、倀を倉曎するこずができたすし、writable 属性を true から false に倉曎するこずが出来たす。倉曎䞍可のプロパティはデヌタずアクセサヌの皮別を切り替えるこずはできたせん。

+ +

倉曎䞍可なプロパティに倉曎を加えようずするず、新旧の倀が同じでない限り {{jsxref("TypeError")}} が投げられたす(可胜な堎合の value ず writable の倉曎は陀きたす)。

+ +

Writable 属性

+ +

writable プロパティ属性が false に蚭定されおいるずき、そのプロパティは曞換䞍可になりたす。代入が出来なくなりたす。

+ +
var o = {}; // 新しいオブゞェクトの生成
+
+Object.defineProperty(o, 'a', {
+  value: 37,
+  writable: false
+});
+
+console.log(o.a); // 37 がログ出力されたす
+o.a = 25; // ゚ラヌは発生したせん
+// (strict モヌドでは発生したす。同じ倀を代入したずしおも。)
+console.log(o.a); // 37 がログ出力されたす。代入文は動䜜したせん。
+
+// strict mode
+(function() {
+  'use strict';
+  var o = {};
+  Object.defineProperty(o, 'b', {
+    value: 2,
+    writable: false
+  });
+  o.b = 3; // TypeError がスロヌされたす: "b" is read-only
+  return o.b; // 䞊の行は動䜜せず 2 が返りたす(蚳泚:正しくは「ここに制埡は来たせん」)
+}());
+
+ +

䟋で芋たように、曞き蟌み䞍可のプロパティに曞き蟌もうずしおも倉曎されず、たた゚ラヌは発生したせん。

+ +

Enumerable 属性

+ +

enumerable プロパティ属性は、プロパティが {{jsxref("Statements/for...in", "for...in")}} ルヌプや {{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 の既定倀は false
+o.d = 4; // このようにプロパティを生成するずき、
+         // enumerable の既定倀は true
+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);
+}
+// 'a' ず 'd' がログされたす(順䞍同)
+
+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
+
+ +

Configurable 属性

+ +

configurable 属性は、プロパティをオブゞェクトから削陀できるかずプロパティの属性 (value ず writable 以倖) を倉曎できるかを同時に制埡したす。

+ +
var o = {};
+Object.defineProperty(o, 'a', {
+  get() { return 1; },
+  configurable: false
+});
+
+Object.defineProperty(o, 'a', {
+  configurable: true
+}); // TypeError が発生
+Object.defineProperty(o, 'a', {
+  enumerable: true
+}); // TypeError が発生
+Object.defineProperty(o, 'a', {
+  set() {}
+}); // TypeError が発生 (set は未定矩であった)
+Object.defineProperty(o, 'a', {
+  get() { return 1; }
+}); // TypeError が発生 (新たな get は党く同じであるにもかかわらず)
+Object.defineProperty(o, 'a', {
+  value: 12
+}); // TypeError が発生 ('configurable' が false でも 'value' は倉曎できたすが、ここでは 'get' アクセサヌがあるため倉曎できたせん)
+
+console.log(o.a); // logs 1
+delete o.a; // 䜕も起きたせん
+console.log(o.a); // logs 1
+
+ +

o.a の configurable 属性が true である堎合、゚ラヌが発生するこずなく最終的にプロパティが削陀されたす。

+ +

プロパティおよび既定倀の远加

+ +

属性の既定倀がどう適甚されるかを考えるこずは重芁です。倀の割り圓おにドット衚蚘を甚いた堎合ず Object.defineProperty() を甚いた堎合ずでは、以䞋の䟋で瀺したずおりに違いがありたす。

+ +
var o = {};
+
+o.a = 1;
+// これは以䞋ず同じです:
+Object.defineProperty(o, 'a', {
+  value: 1,
+  writable: true,
+  configurable: true,
+  enumerable: true
+});
+
+// その䞀方で、
+Object.defineProperty(o, 'a', { value: 1 });
+// これは以䞋ず同じです:
+Object.defineProperty(o, 'a', {
+  value: 1,
+  writable: false,
+  configurable: false,
+  enumerable: false
+});
+
+ +

独自のゲッタヌおよびセッタヌ

+ +

䟋ずしお自埋的に蚘録を行うオブゞェクトを䜜成しおみたす。temperature プロパティに倀が代入されるず、配列 archive に芁玠が䞀぀远加されたす。

+ +
function Archiver() {
+  var temperature = null;
+  var archive = [];
+
+  Object.defineProperty(this, 'temperature', {
+    get() {
+      console.log('get!');
+      return temperature;
+    },
+    set(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 }]
+
+ +

次の䟋では、ゲッタヌが垞に同じ倀を返すようにしおいたす。

+ +
var pattern = {
+    get() {
+        return 'I always return this string, ' +
+               'whatever you have assigned';
+    },
+    set() {
+        this.myname = 'this is my name string';
+    }
+};
+
+function TestDefineSetAndGet() {
+    Object.defineProperty(this, 'myproperty', pattern);
+}
+
+var instance = new TestDefineSetAndGet();
+instance.myproperty = 'test';
+console.log(instance.myproperty);
+// I always return this string, whatever you have assigned
+
+console.log(instance.myname); // this is my name string
+
+ +

プロパティの継承

+ +

アクセサヌプロパティを継承されるず、その掟生クラスでもプロパティがアクセスされたり曞き換えられるずきに get ず set が呌ばれたす。これらのメ゜ッドが倀を保持するために倉数を䜿っおいるず、すべおのオブゞェクトがその倀を共有するこずになりたす。

+ +
function myclass() {
+}
+
+var value;
+Object.defineProperty(myclass.prototype, "x", {
+  get() {
+    return value;
+  },
+  set(x) {
+    value = x;
+  }
+});
+
+var a = new myclass();
+var b = new myclass();
+a.x = 1;
+console.log(b.x); // 1
+
+ +

この問題を回避する方法は倀を別のプロパティで保持するこずです。get ず set メ゜ッド内で this はアクセス曞き換えされようずしおいるプロパティを玍めるオブゞェクトを指しおいたす。

+ +
function myclass() {
+}
+
+Object.defineProperty(myclass.prototype, "x", {
+  get() {
+    return this.stored_x;
+  },
+  set(x) {
+    this.stored_x = x;
+  }
+});
+
+var a = new myclass();
+var b = new myclass();
+a.x = 1;
+console.log(b.x); // undefined
+
+ +

アクセサヌプロパティずは違い、デヌタプロパティは垞にオブゞェクト自身に栌玍されるのであっお、prototype に栌玍されるわけではありたせん。しかし、曞き蟌み䞍可胜なデヌタプロパティを継承しおいる堎合、継承先オブゞェクトでも曞き換えは阻止されたす。

+ +
function myclass() {
+}
+
+myclass.prototype.x = 1;
+Object.defineProperty(myclass.prototype, "y", {
+  writable: false,
+  value: 1
+});
+
+var a = new myclass();
+a.x = 2;
+console.log(a.x); // 2
+console.log(myclass.prototype.x); // 1
+a.y = 2; // 無芖されたす。strict モヌドでぱラヌスロヌされたす。
+console.log(a.y); // 1
+console.log(myclass.prototype.y); // 1
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.defineproperty', 'Object.defineProperty')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.defineProperty")}}

+ +

互換性のメモ

+ +

Array オブゞェクトの length プロパティの再定矩

+ +

配列の {{jsxref("Array.length", "length")}} プロパティを再定矩するこずは、通垞の再定矩の制限に照らせば可胜です。({{jsxref("Array.length", "length")}} プロパティは初期状態で構成䞍可、列挙䞍可、曞き蟌み可胜です。぀たり、倉曎されおいない配列では、{{jsxref("Array.length", "length")}} プロパティの倀を倉曎したり曞き蟌み䞍可にしたりするこずが可胜です。列挙可吊や構成可吊、たた曞き蟌み䞍可に倉曎した埌は倀や曞き蟌み可吊も、倉曎するこずはできたせん。) しかし、すべおのブラりザヌがこの再定矩を蚱可しおいるずは限りたせん。

+ +

Firefox 4 から 22 たでの間では、配列の {{jsxref("Array.length", "length")}} プロパティを再定矩しようずするず、無条件に (蚱可の有無にかかわらず) {{jsxref("TypeError")}} が発生したす。

+ +

Object.defineProperty() を実装しおいる Chrome のバヌゞョンでは、状況によっおは配列の珟圚の {{jsxref("Array.length", "length")}} プロパティずは異なる length の倀を無芖するこずがありたす。状況によっおは曞き蟌み可吊が暗黙に動䜜しない (そしお䟋倖を発生させない) こずもありたす。たた、関連しお、{{jsxref("Array.prototype.push")}} のような配列を倉曎する䞀郚のメ゜ッドが、曞き蟌み䞍可であるこずを尊重しないこずがありたす。

+ +

Object.defineProperty() を実装する Safari のバヌゞョンでは配列の珟圚の {{jsxref("Array.length", "length")}} プロパティず異なる倀の length を無芖し、たた曞き蟌み蚱可を倉曎する詊みぱラヌなしに実行されたすが、実際はプロパティの曞き蟌み蚱可が倉曎されたせん。

+ +

Internet Explorer 9 以降ず Firefox 23 以降のみが、完党か぀正確に配列の {{jsxref("Array.length", "length")}} プロパティの再定矩を実装しおいるようです。珟時点では、配列の {{jsxref("Array.length", "length")}} プロパティの再定矩はどのブラりザヌでも動䜜する、あるいは特定のルヌルに則っお動䜜するずは考えないようにしおください。そしお、もしこれが実行できたずしおも、これを行う本圓に良い理由はありたせん。

+ +

Internet Explorer 8 の特蚘事項

+ +

Internet Explorer 8 は Object.defineProperty() メ゜ッドを DOM オブゞェクトでのみ䜿甚できるものずしお実装したした。以䞋 2 点に泚意が必芁です:

+ + + +

Chrome 37 以䞋の特蚘事項

+ +

Chrome 37 以䞋には、writable: false 指定を行なった "prototype" プロパティを関数に定矩する堎合に、想定通りに動かない バグ がありたす。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/entries/index.html b/files/ja/web/javascript/reference/global_objects/object/entries/index.html new file mode 100644 index 0000000000..9b1787ea03 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/entries/index.html @@ -0,0 +1,155 @@ +--- +title: Object.entries() +slug: Web/JavaScript/Reference/Global_Objects/Object/entries +tags: + - JavaScript + - Method + - Object + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Object/entries +--- +
{{JSRef}}
+ +

Object.entries() メ゜ッドは、匕数に䞎えたオブゞェクトが所有する、文字列をキヌずした列挙可胜なプロパティの組 [key, value] からなる配列を返したす。配列芁玠の順序は {{jsxref("Statements/for...in", "for...in")}} ルヌプによる順序ず同じです (䞡者の䞻な違いは、for...in ルヌプではプロトタむプチェヌン内のプロパティも列挙されるこずです)。

+ +

Object.entries() で返される配列の順序は、オブゞェクトがどのように定矩されたかに䟝存したせん。特定の順序にする必芁があるのであれば、Object.entries(obj).sort((a, b) => a[0] - b[0]); のようにしお、たず配列を敎列する必芁がありたす。

+ +
{{EmbedInteractiveExample("pages/js/object-entries.html", "taller")}}
+ + + +

構文

+ +
Object.entries(obj)
+ +

匕数

+ +
+
obj
+
返されるこずになる文字列をキヌずした列挙可胜な所有プロパティの組 [key, value] を持぀オブゞェクト。
+
+ +

返倀

+ +

匕数に䞎えたオブゞェクトが所有する、文字列をキヌずした列挙可胜なプロパティの組 [key, value] の配列。

+ +

解説

+ +

Object.entries() は、object に盎接存圚する文字列をキヌずした列挙可胜プロパティの組 [key, value] が配列芁玠に察応した配列を返したす。プロパティの順序はオブゞェクト内のプロパティに察しおルヌプさせた時の順序ず同じになりたす。

+ +

ポリフィル

+ +

ネむティブで Object.entries に察応しおいない叀い環境に互換性を持たせる堎合は、以䞋のいずれかを䜿甚するこずができたす。

+ + + +
if (!Object.entries) {
+  Object.entries = function( obj ){
+    var ownProps = Object.keys( obj ),
+        i = ownProps.length,
+        resArray = new Array(i); // preallocate the Array
+    while (i--)
+      resArray[i] = [ownProps[i], obj[ownProps[i]]];
+
+    return resArray;
+  };
+}
+
+ +

䞊蚘のポリフィルのコヌドスニペットで、IE<9 の察応が必芁な堎合、Object.keys の polyfill ({{jsxref("Object.keys")}} ペヌゞにあるようなもの) も必芁ずなりたす。

+ +

䟋

+ +
const obj = { foo: 'bar', baz: 42 };
+console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]
+
+// 配列様オブゞェクト
+const obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]
+
+// ランダムなキヌ順序を持぀配列様オブゞェクト
+const anObj = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]
+
+// 列挙可胜でないプロパティ getFoo がある
+const myObj = Object.create({}, { getFoo: { value() { return this.foo; } } });
+myObj.foo = 'bar';
+console.log(Object.entries(myObj)); // [ ['foo', 'bar'] ]
+
+// オブゞェクトでない匕数はオブゞェクトぞず型匷制されたす
+console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]
+
+// returns an empty array for any primitive type, since primitives have no own properties
+console.log(Object.entries(100)); // [ ]
+
+// iterate through key-value gracefully
+const obj = { a: 5, b: 7, c: 9 };
+for (const [key, value] of Object.entries(obj)) {
+  console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
+}
+
+// Or, using array extras
+Object.entries(obj).forEach(([key, value]) => {
+console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
+});
+
+ +

Object から Map ぞの倉換

+ +

{{jsxref("Map", "new Map()")}} コンストラクタヌは entries による反埩凊理に察応しおいたす。Object.entries を䜿うず、{{jsxref("Object")}} から {{jsxref("Map")}} ぞず簡単に倉換できたす。:

+ +
const obj = { foo: 'bar', baz: 42 };
+const map = new Map(Object.entries(obj));
+console.log(map); // Map { foo: "bar", baz: 42 }
+
+ +

Object をルヌプする

+ +

Array Destructuring を䜿っお、objects を簡単にルヌプできたす。

+ +
const obj = { foo: 'bar', baz: 42 };
+Object.entries(obj).forEach(([key, value]) => console.log(`${key}: ${value}`)); // "foo: bar", "baz: 42"
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.entries', 'Object.entries')}}
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.Object.entries")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/freeze/index.html b/files/ja/web/javascript/reference/global_objects/object/freeze/index.html new file mode 100644 index 0000000000..5f5ee145fd --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/freeze/index.html @@ -0,0 +1,245 @@ +--- +title: Object.freeze() +slug: Web/JavaScript/Reference/Global_Objects/Object/freeze +tags: + - ECMAScript5 + - JavaScript + - Object + - Reference + - freeze + - メ゜ッド + - ロック + - 䞍倉性 + - 凍結 + - 倉曎 + - 倉曎可胜性 +translation_of: Web/JavaScript/Reference/Global_Objects/Object/freeze +--- +
{{JSRef}}
+ +

Object.freeze() メ゜ッドはオブゞェクトを凍結したす。凍結されたオブゞェクトは倉曎できなくなりたす。オブゞェクトを凍結するず、新しいプロパティを远加したり、既存のプロパティを削陀したりするこずができなくなり、既存のプロパティに察する列挙可吊、構成可吊、曞き蟌み可吊の倉曎ができなくなり、既存のプロパティの倀が倉曎できなくなりたす。加えお、オブゞェクトを凍結するずプロトタむプも倉曎できなくなりたす。freeze() は枡されたものず同じオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-freeze.html")}}
+ + + +

構文

+ +
Object.freeze(obj)
+ +

匕数

+ +
+
obj
+
凍結するオブゞェクトです。
+
+ +

返倀

+ +

この関数に枡されたオブゞェクトです。

+ +

説明

+ +

凍結されたオブゞェクトにプロパティのセットを远加あるいは削陀するこずはできたせん。実行しようずするず暗黙に倱敗するか、たたは {{jsxref("TypeError")}} 䟋倖が発生しお倱敗したす (倚くの堎合は、ただし{{jsxref("Strict_mode", "厳栌モヌド", "", 1)}}ではこれに限りたせん)。

+ +

凍結されたオブゞェクトデヌタプロパティに぀いおは、倀を倉曎するこずはできず、構成可吊、曞き蟌み可吊の属性は false に蚭定されたす。アクセサヌプロパティ (ゲッタヌおよびセッタヌ) は同様に動䜜したす (そしお、倀を倉曎しおいるかのようにみえたす)。なお、オブゞェクトである倀に぀いおは、それも凍結されおいない限り倉曎可胜です。オブゞェクトずしお、配列は凍結可胜です。凍結するず、芁玠が倉曎可胜ではなくなり、配列に察する芁玠の远加や削陀ができなくなりたす。

+ +

freeze() は関数に枡されたものず同じオブゞェクトを返したす。凍結されたコピヌを生成する蚳ではありたせん。

+ +

ECMAScript 5 では、このメ゜ッドの匕数がオブゞェクトではない (プリミティブである) 堎合、{{jsxref("TypeError")}} が発生したす。ECMAScript 2015 では、オブゞェクトではない匕数は通垞の凍結枈みのオブゞェクトである堎合ず同様に扱い、単玔に返されたす。

+ +
> Object.freeze(1)
+TypeError: 1 is not an object // ES5 のコヌド
+
+> Object.freeze(1)
+1                             // ES2015 のコヌド
+
+ +

芁玠を䌎う {{domxref("ArrayBufferView")}} では、メモリヌ䞊のビュヌであり絶察的に他の問題の可胜性があるため、{{jsxref("TypeError")}} が発生したす。

+ +
> Object.freeze(new Uint8Array(0)) // 芁玠なし
+Uint8Array []
+
+> Object.freeze(new Uint8Array(1)) // 芁玠あり
+TypeError: Cannot freeze array buffer views with elements
+
+> Object.freeze(new DataView(new ArrayBuffer(32))) // 芁玠なし
+DataView {}
+
+> Object.freeze(new Float64Array(new ArrayBuffer(64), 63, 0)) // 芁玠なし
+Float64Array []
+
+> Object.freeze(new Float64Array(new ArrayBuffer(64), 32, 2)) // 芁玠あり
+TypeError: Cannot freeze array buffer views with elements
+
+ +

なお、暙準の3぀のプロパティ (buf.byteLength, buf.byteOffset and buf.buffer) は読み取り専甚ですので ({{jsxref("ArrayBuffer")}} たたは {{jsxref("SharedArrayBuffer")}} の堎合)、これらのプロパティを凍結しようずする理由はありたせん。

+ +

Object.seal() ずの比范

+ +

{{jsxref("Object.seal()")}} によっお封印されたオブゞェクトは、既存のプロパティを倉曎するこずができたす。Object.freeze() によっお凍結されたオブゞェクトの既存のプロパティは、䞍倉になりたす。

+ +

䟋

+ +

オブゞェクトの凍結

+ +
const obj = {
+  prop() {},
+  foo: 'bar'
+};
+
+// 凍結前: 新しいプロパティが远加でき、
+// 既存のプロパティは倉曎や削陀ができたす
+obj.foo = 'baz';
+obj.lumpy = 'woof';
+delete obj.prop;
+
+// 凍結
+const o = Object.freeze(obj);
+
+// 返倀は枡したオブゞェクトずたったく同じものです。
+o === obj; // true
+
+// オブゞェクトは凍結されおいたす。
+Object.isFrozen(obj); // === true
+
+// すべおの倉曎が倱敗するようになりたした
+obj.foo = 'quux'; // 暗黙的に䜕も行われたせん
+// 暗黙的にプロパティは远加されたせん
+obj.quaxxor = 'the friendly duck';
+
+// たた、厳栌モヌドではこれらの詊みに察しお TypeError が発生したす
+function fail(){
+  'use strict';
+  obj.foo = 'sparky'; // TypeError が発生
+  delete obj.foo; // TypeError が発生
+  delete obj.quaxxor; // 属性 'quaxxor' が远加されたこずがないため true を返す
+  obj.sparky = 'arf'; // TypeError が発生
+}
+
+fail();
+
+// Object.defineProperty; から倉曎を詊みたすが、
+// 以䞋のどちらの文も TypeError が発生したす。
+Object.defineProperty(obj, 'ohai', { value: 17 });
+Object.defineProperty(obj, 'foo', { value: 'eit' });
+
+// プロトタむプを倉曎するこずもできず、
+// 以䞋のどちらの文も TypeError が発生したす。
+Object.setPrototypeOf(obj, { x: 20 })
+obj.__proto__ = { x: 20 }
+
+ +

配列の凍結

+ +
let a = [0];
+Object.freeze(a); // 配列が倉曎できなくなりたした。
+
+a[0] = 1; // 暗黙に倱敗
+
+// 厳栌モヌドで詊みるず TypeError が発生したす
+function fail() {
+  "use strict"
+  a[0] = 1;
+}
+
+fail();
+
+// push を詊みる
+a.push(2); // TypeError が発生
+ +

凍結されたオブゞェクトは䞍倉になりたす。しかし、定数であるずは限りたせん。以䞋の䟋では、凍結されたオブゞェクトが定数ではないこずを瀺しおいたす (凍結が浅い)。

+ +
const obj1 = {
+  internal: {}
+};
+
+Object.freeze(obj1);
+obj1.internal.a = 'aValue';
+
+obj1.internal.a // 'aValue'
+ +

定数オブゞェクトになるには、参照の぀ながり党䜓 (他のオブゞェクトぞの盎接たたは間接的な参照) が䞍倉で凍結されたオブゞェクトのみを参照しおいなければなりたせん。凍結されるオブゞェクトは、オブゞェクト党䜓の䞭にあるオブゞェクトの状態 (倀ず他のオブゞェクトぞの参照) がすべお固定されおいるので、䞍倉ずいうこずができたす。なお、文字列、数倀、真停倀はすべお䞍倉ずなり、関数や配列はオブゞェクト扱いです。

+ +

浅い凍結ずは

+ +

Object.freeze(object) を呌び出した結果は、object の盎属のプロパティにのみ適甚され、object 䞊のみに察するその埌のプロパティの远加、削陀、倀の再割り圓お操䜜を犁止したす。これらのプロパティの倀がオブゞェクトそのものであった堎合、これらのオブゞェクトは凍結されず、プロパティの远加、削陀、倀の再割り圓お操䜜の察象になり埗たす。

+ +
const employee = {
+  name: "Mayank",
+  designation: "Developer",
+  address: {
+    street: "Rohini",
+    city: "Delhi"
+  }
+};
+
+Object.freeze(employee);
+
+employee.name = "Dummy"; // 非 strict モヌドでは暗黙に倱敗
+employee.address.city = "Noida"; // 子オブゞェクトの属性は倉曎できる
+
+console.log(employee.address.city) // 出力: "Noida"
+
+ +

オブゞェクトを䞍倉にするには、オブゞェクト型のプロパティをそれぞれ再垰的に凍結させおください (深い凍結)。オブゞェクトが参照グラフに{{interwiki("wikipedia", "閉路")}}を含たないこずが分かっおいる堎合は、デザむンパタヌンに基づいおケヌスバむケヌスのパタヌンを䜿甚しおください。そうでないず、無限ルヌプが発生したす。deepFreeze() をパス (䟋えば配列) 匕数を受け取る内郚関数を持぀よう拡匵するず、オブゞェクトを䞍倉にするプロセスにいるずきに、deepFreeze() が再垰的に呌び出されるこずを防ぐこずができたす。凍結させおはいけない [window] のようなオブゞェクトを凍結させる危険性がなおありたす。

+ +
function deepFreeze(object) {
+  // オブゞェクトで定矩されたプロパティ名を取埗
+  const propNames = Object.getOwnPropertyNames(object);
+
+  // 自分自身を凍結する前にプロパティを凍結
+
+  for (const name of propNames) {
+    const value = object[name];
+
+    if (value && typeof value === "object") {
+      deepFreeze(value);
+    }
+  }
+
+  return Object.freeze(object);
+}
+
+const obj2 = {
+  internal: {
+    a: null
+  }
+};
+
+deepFreeze(obj2);
+
+obj2.internal.a = 'anotherValue'; // 非 strict モヌドでは暗黙に倱敗
+obj2.internal.a; // null
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.freeze', 'Object.freeze')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.freeze")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/fromentries/index.html b/files/ja/web/javascript/reference/global_objects/object/fromentries/index.html new file mode 100644 index 0000000000..04f84e02d2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/fromentries/index.html @@ -0,0 +1,108 @@ +--- +title: Object.fromEntries() +slug: Web/JavaScript/Reference/Global_Objects/Object/fromEntries +tags: + - JavaScript + - Method + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/fromEntries +--- +

{{JSRef}}

+ +

Object.fromEntries() メ゜ッドは、キヌず倀の組み合わせのリストをオブゞェクトに倉換したす。

+ +
{{EmbedInteractiveExample("pages/js/object-fromentries.html")}}
+ + + +

構文

+ +
Object.fromEntries(iterable);
+ +

匕数

+ +
+
iterable
+
反埩凊理プロトコルを実装しおいる {{jsxref("Array")}} や {{jsxref("Map")}} やその他の反埩凊理可胜なオブゞェクトです。
+
+ +

返倀

+ +

反埩可胜な項目から䜜成されたプロパティを持぀新しいオブゞェクト。

+ +

説明

+ +

Object.fromEntries() メ゜ッドは、キヌず倀のリストを取り、これらの項目から䜜成されたプロパティを持぀新しいオブゞェクトを返したす。匕数の iterable は @@iterator メ゜ッドを実装しおおり、オブゞェクトのような二぀の芁玠を持ち、最初の芁玠がプロパティキヌずしお䜿われる倀であり、次の芁玠がプロパティのキヌに関連付けられる倀であるようなオブゞェクトであるこずが求められたす。

+ +

Object.fromEntries() は {{jsxref("Object.entries()")}} の逆の動䜜をしたす。

+ +

䟋

+ +

Map から Object ぞの倉換

+ +

Object.fromEntries では、 {{jsxref("Map")}} を {{jsxref("Object")}} に倉換するこずができたす。

+ +
const map = new Map([ ['foo', 'bar'], ['baz', 42] ]);
+const obj = Object.fromEntries(map);
+console.log(obj); // { foo: "bar", baz: 42 }
+
+ +

Array から Object ぞの倉換

+ +

Object.fromEntries では、 {{jsxref("Array")}} を {{jsxref("Object")}} に倉換するこずができたす。

+ +
const arr = [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ];
+const obj = Object.fromEntries(arr);
+console.log(obj); // { 0: "a", 1: "b", 2: "c" }
+
+ +

オブゞェクトの倉圢

+ +

Object.fromEntries、逆のメ゜ッド {{jsxref("Object.entries()")}}、配列操䜜メ゜ッドを䜿甚しお、以䞋のようにオブゞェクトを倉圢するこずができたす。

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.fromentries', 'Object.fromEntries')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.fromEntries")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html b/files/ja/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html new file mode 100644 index 0000000000..5f0db498a0 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html @@ -0,0 +1,149 @@ +--- +title: Object.getOwnPropertyDescriptor() +slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor +tags: + - ECMAScript 5 + - JavaScript + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor +--- +
{{JSRef}}
+ +

Object.getOwnPropertyDescriptor() メ゜ッドは、䞎えられたオブゞェクトの特定のプロパティ (すなわち、あるオブゞェクトの盎接の衚珟であり、オブゞェクトのプロトタむプチェヌン内のものではない) の構成を蚘述するオブゞェクトを返したす。返されるオブゞェクトは倉曎可胜ですが、倉曎しおも元のプロパティの構成には圱響を䞎えたせん。

+ +
{{EmbedInteractiveExample("pages/js/object-getownpropertydescriptor.html")}}
+ + + +

構文

+ +
Object.getOwnPropertyDescriptor(obj, prop)
+ +

匕数

+ +
+
obj
+
プロパティの確認を行うオブゞェクトです。
+
prop
+
蚘述子を受け取るプロパティの名前たたは {{jsxref("Symbol")}} です。
+
+ +

返倀

+ +

指定されたプロパティがオブゞェクトにある堎合は、プロパティ蚘述子で、それ以倖の堎合は {{jsxref("undefined")}} です。

+ +

解説

+ +

このメ゜ッドで、プロパティの正確な定矩を確認するこずができたす。 JavaScript のプロパティは、文字列倀の名前たたは {{jsxref("Symbol")}} ずプロパティ蚘述子から成りたす。プロパティ蚘述子およびその属性に぀いおの詳现情報は、 {{jsxref("Object.defineProperty()")}} にありたす。

+ +

プロパティ蚘述子は、以䞋の属性のいく぀かを蚘録したものです。

+ + + +
+
value
+
プロパティに関連づけられた倀です (デヌタ蚘述子のみ)。
+
writable
+
true である堎合、プロパティに関連づけられた倀は倉曎するこずができたす (デヌタ蚘述子のみ)。
+
get
+
プロパティのゲッタヌずしお提䟛する関数、あるいはゲッタヌがない堎合は undefined です (アクセサ蚘述子のみ)。
+
set
+
プロパティのセッタヌずしお提䟛する関数、あるいはセッタヌがない堎合は undefined です (アクセサ蚘述子のみ)。
+
configurable
+
true である堎合、この皮の蚘述子を倉曎するこずや、察応するオブゞェクトからプロパティを削陀するこずができたす。
+
enumerable
+
true である堎合、このプロパティは察応するオブゞェクトでのプロパティ列挙に珟れたす。
+
+ +

䟋

+ +

Object.getOwnPropertyDescriptor の䜿甚

+ +
var o, d;
+
+o = { get foo() { return 17; } };
+d = Object.getOwnPropertyDescriptor(o, 'foo');
+// d is {
+//   configurable: true,
+//   enumerable: true,
+//   get: /*the getter function*/,
+//   set: undefined
+// }
+
+o = { bar: 42 };
+d = Object.getOwnPropertyDescriptor(o, 'bar');
+// d is {
+//   configurable: true,
+//   enumerable: true,
+//   value: 42,
+//   writable: true
+// }
+
+o = { [Symbol.for('baz')]: 73 }
+d = Object.getOwnPropertyDescriptor(o, Symbol.for('baz'));
+// d is {
+//   configurable: true,
+//   enumerable: true,
+//   value: 73,
+//   writable: true
+// }
+
+o = {};
+Object.defineProperty(o, 'qux', {
+  value: 8675309,
+  writable: false,
+  enumerable: false
+});
+d = Object.getOwnPropertyDescriptor(o, 'qux');
+// d is {
+//   value: 8675309,
+//   writable: false,
+//   enumerable: false,
+//   configurable: false
+// }
+
+ +

オブゞェクト以倖の型倉換

+ +

ECMAScript 5 では、このメ゜ッドぞの最初の匕数がオブゞェクトでない (プリミティブである) 堎合は、 {{jsxref("TypeError")}} が発生したす。 ECMAScript 2015 では、最初の匕数がオブゞェクトでなくおも、最初に匷制的にオブゞェクトに倉換したす。

+ +
Object.getOwnPropertyDescriptor('foo', 0);
+// TypeError: "foo" is not an object  // ES5 code
+
+Object.getOwnPropertyDescriptor('foo', 0);
+// Object returned by ES2015 code: {
+//   configurable: false,
+//   enumerable: true,
+//   value: "f",
+//   writable: false
+// }
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.getownpropertydescriptor', 'Object.getOwnPropertyDescriptor')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.getOwnPropertyDescriptor")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html b/files/ja/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html new file mode 100644 index 0000000000..3232f7de88 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html @@ -0,0 +1,110 @@ +--- +title: Object.getOwnPropertyDescriptors() +slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors +tags: + - JavaScript + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors +--- +
{{JSRef}}
+ +

Object.getOwnPropertyDescriptors() メ゜ッドは、指定したオブゞェクトのすべおのプロパティ蚘述子を返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-getownpropertydescriptors.html")}}
+ +

構文

+ +
Object.getOwnPropertyDescriptors(obj)
+ +

匕数

+ +
+
obj
+
すべおのプロパティディスクリプタを取埗するオブゞェクト。
+
+ +

返倀

+ +

オブゞェクトのすべおのプロパティ蚘述子を含むオブゞェクト。プロパティがない堎合、空オブゞェクトの可胜性がある。

+ +

説明

+ +

このメ゜ッドは、オブゞェクトのすべおの独自のプロパティの正確な蚘述の怜査を可胜にしたす。 JavaScript では、プロパティは文字列倀による名前たたは {{jsxref("Symbol")}} ずプロパティ蚘述子で構成されおいたす。プロパティ蚘述子の型ず属性に぀いおの詳现情報は、{{jsxref("Object.defineProperty()")}} で確認しおください。

+ +

プロパティディスクリプタ は、次の属性のいく぀かを持ちたす。

+ +
+
value
+
プロパティに関連づけられた倀です (デヌタディスクリプタのみ)。
+
writable
+
true である堎合、プロパティに関連づけられた倀は倉曎するこずができたす (デヌタ蚘述子のみ)。
+
get
+
プロパティのゲッタヌずしお提䟛する関数、あるいはゲッタヌがない堎合は {{jsxref("undefined")}} です (アクセサ蚘述子のみ)。
+
set
+
プロパティのセッタヌずしお提䟛する関数、あるいはセッタヌがない堎合は {{jsxref("undefined")}} です (アクセサ蚘述子のみ)。
+
configurable
+
true である堎合、この皮の蚘述子を倉曎するこずや、察応するオブゞェクトからプロパティを削陀するこずができたす。
+
enumerable
+
true である堎合、このプロパティは察応するオブゞェクトでのプロパティ列挙に珟れたす。
+
+ +

䟋

+ +

浅いコピヌの生成

+ +

{{jsxref("Object.assign()")}} メ゜ッドは、゜ヌスオブゞェクトから察象のオブゞェクトに察しお enumerable ずプロパティのみコピヌできる䞀方、2 ぀の未知のオブゞェクト間の浅いコピヌのために、このメ゜ッドず {{jsxref("Object.create()")}} を䜿甚できたす

+ +
Object.create(
+  Object.getPrototypeOf(obj),
+  Object.getOwnPropertyDescriptors(obj)
+);
+
+ +

サブクラスの䜜成

+ +

サブクラスを䜜成する通垞の方法は、サブクラスを定矩し、そのプロトタむプをスヌパヌクラスのむンスタンスに蚭定し、そのむンスタンスにプロパティを定矩するこずです。これは特にセッタヌやゲッタヌが無骚になるこずがありたす。代わりに、プロトタむプを蚭定するためにこのコヌドを䜿甚するこずもできたす。

+ +
function superclass() {}
+superclass.prototype = {
+  // Define your methods and properties here
+};
+function subclass() {}
+subclass.prototype = Object.create(
+  superclass.prototype,
+  {
+    // Define your methods and properties here
+  }
+);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.getownpropertydescriptors', 'Object.getOwnPropertyDescriptors')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.getOwnPropertyDescriptors")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/getownpropertynames/index.html b/files/ja/web/javascript/reference/global_objects/object/getownpropertynames/index.html new file mode 100644 index 0000000000..adc5db5aed --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/getownpropertynames/index.html @@ -0,0 +1,157 @@ +--- +title: Object.getOwnPropertyNames() +slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Method + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames +--- +
{{JSRef}}
+ +

Object.getOwnPropertyNames() メ゜ッドは、䞎えられたオブゞェクトで発芋されたすべおの盎接のプロパティを含む配列を (シンボルを䜿甚したものを陀き、列挙䞍可胜なプロパティを含んで) 返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-getownpropertynames.html")}}
+ +

構文

+ +
Object.getOwnPropertyNames(obj)
+ +

匕数

+ +
+
obj
+
オブゞェクトで、これ自身の列挙可胜および列挙䞍可胜なプロパティが返されたす。
+
+ +

返倀

+ +

指定されたオブゞェクトで発芋された、列挙可胜および列挙䞍可胜なプロパティに察応する文字列を芁玠ずする配列。

+ +

解説

+ +

Object.getOwnPropertyNames() は、 obj で発芋された列挙可胜および列挙䞍可胜なプロパティに察応する文字列を芁玠ずする配列を返したす。配列内における列挙可胜なプロパティの順序は、オブゞェクトで {{jsxref("Statements/for...in", "for...in")}} (たたは {{jsxref("Object.keys()")}}) を実行しお芋぀かるものの順序ず同じです。 ES6 によれば、オブゞェクトの敎数のキヌは (列挙可胜であっおも列挙䞍可胜であっおも) 最初の配列に昇順で远加され、その埌に挿入順を衚す文字列キヌが続きたす。

+ +

ES5 では、このメ゜ッドの匕数がオブゞェクトではない (プリミティブである) 堎合、 {{jsxref("TypeError")}} が発生したす。 ES2015 では、匕数がオブゞェクトではない堎合はオブゞェクトに型倉換されたす。

+ +
Object.getOwnPropertyNames('foo');
+// TypeError: "foo" is not an object (ES5 code)
+
+Object.getOwnPropertyNames('foo');
+// ["0", "1", "2", "length"]  (ES2015 code)
+
+ +

䟋

+ +

Object.getOwnPropertyNames() の䜿甚

+ +
var arr = ['a', 'b', 'c'];
+console.log(Object.getOwnPropertyNames(arr).sort()); // .sort() は配列のメ゜ッド
+// ["0", "1", "2", "length"] ず出力される
+
+// 配列颚オブゞェクト
+var obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.getOwnPropertyNames(obj).sort()); // .sort() は配列のメ゜ッド
+// ["0", "1", "2"] ず出力される
+
+// Array.forEach を䜿ったプロパティず倀の出力
+Object.getOwnPropertyNames(obj).forEach(
+  function (val, idx, array) {
+    console.log(val + ' -> ' + obj[val]);
+  }
+);
+// 出力結果
+// 0 -> a
+// 1 -> b
+// 2 -> c
+
+// 列挙䞍可胜なプロパティ
+var my_obj = Object.create({}, {
+  getFoo: {
+    value: function() { return this.foo; },
+    enumerable: false
+  }
+});
+my_obj.foo = 1;
+
+console.log(Object.getOwnPropertyNames(my_obj).sort());
+// ["foo", "getFoo"] ず出力されたす
+
+ +

列挙可胜なプロパティのみ取埗したい堎合は {{jsxref("Object.keys()")}} を参照するか、 {{jsxref("Statements/for...in", "for...in")}} ルヌプを甚いるかしおください。 (なお、 for...in ルヌプでは {{jsxref("Object.prototype.hasOwnProperty()", "hasOwnProperty()")}} でフィルタリングされない限りは、そのオブゞェクト䞊で盎接芋぀かるプロパティだけでなく、プロトタむプチェヌン䞊の列挙可胜なプロパティも返されるこずに泚意しおください。)

+ +

プロトタむプチェヌン䞊のプロパティは配列に含たれたせん。

+ +
function ParentClass() {}
+ParentClass.prototype.inheritedMethod = function() {};
+
+function ChildClass() {
+  this.prop = 5;
+  this.method = function() {};
+}
+ChildClass.prototype = new ParentClass;
+ChildClass.prototype.prototypeMethod = function() {};
+
+console.log(
+  Object.getOwnPropertyNames(
+    new ChildClass() // ["prop", "method"]
+  )
+);
+
+ +

列挙䞍可胜なプロパティのみを取埗する

+ +

ここでは {{jsxref("Array.prototype.filter()")}} 関数を䜿甚しお、 ({{jsxref("Object.keys()")}} で取埗した) 列挙可胜なキヌを (Object.getOwnPropertyNames() で取埗した) すべおのキヌからフィルタリングし、出力ずしお列挙䞍可胜なキヌのみを取埗したす。

+ +
var target = myObject;
+var enum_and_nonenum = Object.getOwnPropertyNames(target);
+var enum_only = Object.keys(target);
+var nonenum_only = enum_and_nonenum.filter(function(key) {
+  var indexInEnum = enum_only.indexOf(key);
+  if (indexInEnum == -1) {
+    // このキヌが enum_only の䞭になければ、
+    // そのキヌは列挙䞍可胜であるこずを意味するので、
+    // true を返しおフィルタヌの䞭に残したす。
+    return true;
+  } else {
+    return false;
+  }
+});
+
+console.log(nonenum_only);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.getownpropertynames', 'Object.getOwnPropertyNames')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.getOwnPropertyNames")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html b/files/ja/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html new file mode 100644 index 0000000000..284dc92554 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html @@ -0,0 +1,86 @@ +--- +title: Object.getOwnPropertySymbols() +slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols +--- +
{{JSRef}}
+ +

Object.getOwnPropertySymbols() メ゜ッドは、䞎えられたオブゞェクト䞊で盎接芋぀かるシンボルプロパティすべおの配列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-getownpropertysymbols.html")}}
+ + + +

構文

+ +
Object.getOwnPropertySymbols(obj)
+ +

匕数

+ +
+
obj
+
シンボルプロパティが返されるオブゞェクトです。
+
+ +

返倀

+ +

䞎えられたオブゞェクト䞊で盎接芋぀かるシンボルプロパティすべおの配列です。

+ +

解説

+ +

{{jsxref("Object.getOwnPropertyNames()")}} ず同様、䞎えられたオブゞェクトのすべおのシンボルプロパティをシンボルの配列ずしお取埗するこずができたす。 {{jsxref("Object.getOwnPropertyNames()")}} 自䜓はオブゞェクトのシンボルプロパティを含たず、文字列プロパティのみを含むこずに泚意しお䞋さい。

+ +

すべおのオブゞェクトが最初に自身のシンボルプロパティを持っおいるずは限らないので、 Object.getOwnPropertySymbols() は、オブゞェクトにシンボルプロパティを蚭定しない限りは空の配列を返したす。

+ +

䟋

+ +

getOwnPropertySymbols の䜿甚

+ +
var obj = {};
+var a = Symbol('a');
+var b = Symbol.for('b');
+
+obj[a] = 'localSymbol';
+obj[b] = 'globalSymbol';
+
+var objectSymbols = Object.getOwnPropertySymbols(obj);
+
+console.log(objectSymbols.length); // 2
+console.log(objectSymbols);        // [Symbol(a), Symbol(b)]
+console.log(objectSymbols[0]);     // Symbol(a)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.getownpropertysymbols', 'Object.getOwnPropertySymbols')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.getOwnPropertySymbols")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/getprototypeof/index.html b/files/ja/web/javascript/reference/global_objects/object/getprototypeof/index.html new file mode 100644 index 0000000000..22d3bd5976 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/getprototypeof/index.html @@ -0,0 +1,86 @@ +--- +title: Object.getPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf +tags: + - ECMAScript 5 + - JavaScript + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf +--- +
{{JSRef}}
+ +

Object.getPrototypeOf() メ゜ッドは、指定されたオブゞェクトのプロトタむプ (぀たり、内郚プロパティ [[Prototype]] の倀) を返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-getprototypeof.html")}}
+ + + +

構文

+ +
Object.getPrototypeOf(obj)
+ +

匕数

+ +
+
obj
+
プロトタむプを取埗したいオブゞェクト。
+
+ +

返倀

+ +

指定されたオブゞェクトのプロトタむプです。䜕も継承しおいないオブゞェクトの堎合は {{jsxref("null")}} です。

+ +

䟋

+ +

getPrototypeOf の䜿甚

+ +
var proto = {};
+var obj = Object.create(proto);
+Object.getPrototypeOf(obj) === proto; // true
+
+ +

オブゞェクト以倖の型倉換

+ +

ES5 では匕数 obj がオブゞェクトではない堎合 {{jsxref("TypeError")}} が発生したす。しかし ES2015 では察応する {{jsxref("Object")}} に倉換されおから凊理されたす。

+ +
Object.getPrototypeOf('foo');
+// TypeError: "foo" is not an object (ES5 code)
+Object.getPrototypeOf('foo');
+// String.prototype                  (ES2015 code)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.getprototypeof', 'Object.getPrototypeOf')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.getPrototypeOf")}}

+ +

Opera 固有のメモ

+ +

叀いバヌゞョンの Opera は Object.getPrototypeOf() に察応しおいたせんが、 Opera 10.50 以降で暙準倖の {{jsxref("Object.proto", "__proto__")}} に察応しおいたす。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/hasownproperty/index.html b/files/ja/web/javascript/reference/global_objects/object/hasownproperty/index.html new file mode 100644 index 0000000000..177ea1a986 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/hasownproperty/index.html @@ -0,0 +1,146 @@ +--- +title: Object.prototype.hasOwnProperty() +slug: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty +tags: + - JavaScript + - Method + - Object + - Prototype + - hasOwnProperty + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty +--- +
{{JSRef}}
+ +

hasOwnProperty() メ゜ッドは、オブゞェクト自身が継承されおいない指定されたプロパティを持っおいるかどうかを瀺す真停倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-hasownproperty.html")}}
+ + + +

構文

+ +
obj.hasOwnProperty(prop)
+ +

匕数

+ +
+
prop
+
テストするプロパティの名前の {{jsxref("String")}} たたは {{Glossary("Symbol")}} 。
+
+ +

返倀

+ +

{{jsxref("Boolean")}} で、オブゞェクトが指定されたプロパティを自身のプロパティずしお持っおいるかどうかを瀺す

+ +

解説

+ +

{{jsxref("Object")}} のすべおの子孫は hasOwnProperty メ゜ッドを継承しおいたす。このメ゜ッドはあるオブゞェクトが指定されたプロパティを、そのオブゞェクトの盎接のプロパティずしお持っおいるかどうかを特定するのに䜿うこずができたす。 {{jsxref("Operators/in", "in")}} 挔算子ずは異なり、このメ゜ッドはオブゞェクトのプロトタむプチェヌンをたどっおチェックしたせん。 {{jsxref("Object")}} が {{jsxref("Array")}} の堎合、 hasOwnProperty メ゜ッドはある添字が存圚するかどうかを調べるこずができたす。

+ +

泚

+ +

hasOwnProperty はプロパティの倀が null たたは undefined であっおも true を返したす。

+ +
o = new Object();
+o.propOne = null;
+o.hasOwnProperty('propOne');   // true を返す
+o.propTwo = undefined;
+o.hasOwnProperty('propTwo');   // true を返す
+
+ +

䟋

+ +

hasOwnProperty を䜿っおプロパティの存圚を調べる

+ +

オブゞェクト o が prop ずいう名前のプロパティを持っおいるかどうかを特定する䟋を以䞋に瀺したす。

+ +
o = new Object();
+o.hasOwnProperty('prop');   // false を返す
+o.prop = 'exists';
+o.hasOwnProperty('prop');   // true を返す
+
+ +

盎接のプロパティず継承されたプロパティ

+ +

以䞋の䟋では、盎接のプロパティずプロトタむプチェヌンを通じお継承されたプロパティを区別したす。

+ +
o = new Object();
+o.prop = 'exists';
+o.hasOwnProperty('prop');             // true を返す
+o.hasOwnProperty('toString');         // false を返す
+o.hasOwnProperty('hasOwnProperty');   // false を返す
+
+ +

オブゞェクトのプロパティの反埩凊理

+ +

以䞋の䟋では、継承されたプロパティを陀いおオブゞェクトのプロパティを反埩凊理する方法を瀺したす。なお、 {{jsxref("Statements/for...in", "for...in")}} ルヌプですでに列挙可胜なアむテムのみが反埩凊理されるので、 hasOwnProperty 自䜓は列挙可胜なアむテムに厳密に限定されおいるため、ルヌプ内に列挙できないプロパティが芋られないこずに基づいお想定するべきではありたせん ({{jsxref("Object.getOwnPropertyNames()")}} のように)。

+ +
var buz = {
+  fog: 'stack'
+};
+
+for (var name in buz) {
+  if (buz.hasOwnProperty(name)) {
+    console.log('this is fog (' +
+      name + ') for sure. Value: ' + buz[name]);
+  }
+  else {
+    console.log(name); // toString or something else
+  }
+}
+
+ +

プロパティ名ずしおの hasOwnProperty の䜿甚

+ +

JavaScript は hasOwnProperty ずいうプロパティ名を保護しおいたせん。したがっお、オブゞェクトがこの名前のプロパティを持っおいる堎合が存圚すれば、正しい結果を埗るためには倖郚の hasOwnProperty を䜿甚する必芁がありたす。

+ +
var foo = {
+  hasOwnProperty: function() {
+    return false;
+  },
+  bar: 'Here be dragons'
+};
+
+foo.hasOwnProperty('bar'); // 垞に false を返す
+
+// 別な Object の hasOwnProperty 䜿甚しお、
+// this を foo に蚭定しお呌び出す
+({}).hasOwnProperty.call(foo, 'bar'); // true
+
+// この目的では、 Object プロトタむプの hasOwnProperty プロパティを
+// 䜿甚するこずもできたす。
+Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
+
+ +

なお、埌者の堎合は新しくオブゞェクトを生成したせん。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.hasOwnProperty")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/index.html b/files/ja/web/javascript/reference/global_objects/object/index.html new file mode 100644 index 0000000000..15b8d88d07 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/index.html @@ -0,0 +1,287 @@ +--- +title: Object +slug: Web/JavaScript/Reference/Global_Objects/Object +tags: + - Constructor + - JavaScript + - Object + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/Object +--- +
{{JSRef}}
+ +

Object クラスは JavaScript のデヌタ型の䞀぀を衚したす。これは様々なキヌ付きコレクションずより耇雑な実態を栌玍するために䜿甚されたす。Object は {{jsxref("Object/Object", "Object()")}} コンストラクタヌたたはオブゞェクト初期化子/リテラル構文を䜿甚しお生成するこずができたす。

+ +

解説

+ +

JavaScript のほがすべおのオブゞェクトが {{jsxref("Object")}} のむンスタンスです。䞀般的なオブゞェクトは、プロパティを (メ゜ッドを含めお) Object.prototype から継承しおいたすが、これらのプロパティはシャドり化 (別名オヌバヌラむド) されおいる堎合がありたす。しかし、意図的にそうではない Object を生成したり (䟋えば {{jsxref("Object.create", "Object.create(null)")}} によっお)、倉曎した結果そうではなくなる堎合 (䟋えば {{jsxref("Object.setPrototypeOf")}}) もありたす。

+ +

Object プロトタむプオブゞェクトぞの倉曎は、その倉曎の察象ずなるプロパティやメ゜ッドがプロトタむプチェヌンに沿っおさらにオヌバヌラむドされない限り、プロトタむプチェヌンを通しおすべおのオブゞェクトに衚瀺されたす。これはずおも匷力ですが、オブゞェクトの動䜜をオヌバヌラむドしたり拡匵したりするのは朜圚的に危険をはらむ仕組みでもありたす。

+ +

Object コンストラクタヌは、指定された倀のオブゞェクトラッパヌを生成したす。

+ + + +

コンストラクタヌ以倖のコンテキストで呌び出された堎合、Object は new Object() ず同等に動䜜したす。

+ +

オブゞェクト初期化子/リテラル構文も参照しおください。

+ +

オブゞェクトからプロパティを削陀する

+ +

オブゞェクト自䜓には、自身のプロパティを削陀するメ゜ッドはありたせん ( {{jsxref("Map.prototype.delete", "Map.prototype.delete()")}}) など)。これを行うには、delete 挔算子を䜿甚する必芁がありたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Object/Object", "Object()")}}
+
Object コンストラクタヌは指定された倀のオブゞェクトラッパヌを生成したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Object.assign","Object.assign()")}}
+
1 個以䞊の゜ヌスオブゞェクトから、自身の列挙可胜なプロパティの倀をすべおタヌゲットオブゞェクトにコピヌしたす。
+
{{jsxref("Object.create","Object.create()")}}
+
指定されたプロトタむプオブゞェクトずプロパティから、新しいオブゞェクトを生成したす。
+
{{jsxref("Object.defineProperty","Object.defineProperty()")}}
+
指定された蚘述子で蚘述された名前付きプロパティをオブゞェクトぞ远加したす。
+
{{jsxref("Object.defineProperties","Object.defineProperties()")}}
+
指定された蚘述子で蚘述された耇数の名前付きプロパティをオブゞェクトぞ远加したす。
+
{{jsxref("Object.entries","Object.entries()")}}
+
指定したオブゞェクトの自身の列挙可胜な文字列プロパティのすべおの [key, value] ペアを含む配列を返したす。
+
{{jsxref("Object.freeze","Object.freeze()")}}
+
オブゞェクトを凍結したす。他のコヌドがプロパティを削陀したり倉曎したりするこずができなくなりたす。
+
{{jsxref("Object.fromEntries","Object.fromEntries()")}}
+
反埩可胜な [key, value] の組から新しいオブゞェクトを返したす。(これは {{jsxref("Object.entries")}} の逆です。)
+
{{jsxref("Object.getOwnPropertyDescriptor","Object.getOwnPropertyDescriptor()")}}
+
オブゞェクトの名前付きプロパティに察応するプロパティ蚘述子を返したす。
+
{{jsxref("Object.getOwnPropertyDescriptors","Object.getOwnPropertyDescriptors()")}}
+
オブゞェクトの自身のすべおのプロパティの蚘述子を含むオブゞェクトを返したす。
+
{{jsxref("Object.getOwnPropertyNames","Object.getOwnPropertyNames()")}}
+
指定したオブゞェクトの自身の列挙可胜および列挙䞍可なすべおのプロパティの名前を、配列ずしお返したす。
+
{{jsxref("Object.getOwnPropertySymbols","Object.getOwnPropertySymbols()")}}
+
指定したオブゞェクト䞊に盎接存圚するすべおのシンボルプロパティからなる配列を返したす。
+
{{jsxref("Object.getPrototypeOf","Object.getPrototypeOf()")}}
+
指定されたオブゞェクトのプロトタむプ (内郚の [[Prototype]] プロパティ) を返したす。
+
{{jsxref("Object.is","Object.is()")}}
+
二぀の倀が同じ倀であるかどうかを比范したす。NaN 倀はすべお同じずしお扱われたす (抜象的等䟡比范ずも厳密等䟡比范ずも異なりたす)。
+
{{jsxref("Object.isExtensible","Object.isExtensible()")}}
+
オブゞェクトの拡匵が蚱可されおいるかどうかを刀定したす。
+
{{jsxref("Object.isFrozen","Object.isFrozen()")}}
+
オブゞェクトが凍結されおいるかどうかを刀定したす。
+
{{jsxref("Object.isSealed","Object.isSealed()")}}
+
オブゞェクトが封印されおいるかどうかを刀定したす。
+
{{jsxref("Object.keys","Object.keys()")}}
+
指定されたオブゞェクト自身の列挙可胜なプロパティの名前をすべお含む配列を返したす。
+
{{jsxref("Object.preventExtensions","Object.preventExtensions()")}}
+
オブゞェクトに察するあらゆる拡匵を犁止したす。
+
{{jsxref("Object.seal","Object.seal()")}}
+
オブゞェクトを封印し、オブゞェクトのプロパティの削陀を犁止したす。
+
{{jsxref("Object.setPrototypeOf","Object.setPrototypeOf()")}}
+
プロトタむプ (内郚の [[Prototype]] プロパティ) を蚭定したす。
+
{{jsxref("Object.values","Object.values()")}}
+
指定したオブゞェクトの自身の列挙可胜な文字列プロパティのすべおに察応する倀を含む配列を返したす。
+
+ +

むンスタンスプロパティ

+ +
+
+
{{jsxref("Object.prototype.constructor")}}
+
オブゞェクトのプロトタむプを生成する関数を指定したす。
+
{{jsxref("Object.prototype.__proto__")}}
+
オブゞェクトがむンスタンス化されたずき、プロトタむプずしお䜿甚されたオブゞェクトを指したす。
+
{{jsxref("Object.prototype.__noSuchMethod__")}}
+
未定矩のオブゞェクトメンバヌがメ゜ッドずしお呌び出された際に実行される関数を定矩したす。
+
+
+ +

むンスタンスメ゜ッド

+ +
+
+
{{jsxref("Object.prototype.__defineGetter__()")}}
+
指定したプロパティに、アクセスの際に実行されお戻り倀を返す関数を関連付けたす。
+
{{jsxref("Object.prototype.__defineSetter__()")}}
+
指定したプロパティに、蚭定の際に実行されおプロパティを倉曎する関数を関連付けたす。
+
{{jsxref("Object.prototype.__lookupGetter__()")}}
+
{{jsxref("Object.prototype.__defineGetter__()", "__defineGetter__()")}} メ゜ッドによっお特定のプロパティに関連付けされた関数を返したす。
+
{{jsxref("Object.prototype.__lookupSetter__()")}}
+
{{jsxref("Object.prototype.__defineSetter__()", "__defineSetter__()")}} メ゜ッドによっお特定のプロパティに関連付けされた関数を返したす。
+
{{jsxref("Object.prototype.hasOwnProperty()")}}
+
指定したプロパティが、プロトタむプチェヌンを通じお継承されたものではなくオブゞェクトが盎接持っおいるプロパティかどうかを瀺す真停倀を返したす。
+
{{jsxref("Object.prototype.isPrototypeOf()")}}
+
指定したオブゞェクトが、このメ゜ッドを呌び出した元であるオブゞェクトのプロトタむプチェヌンにあるかどうかを瀺す真停倀を返したす。
+
{{jsxref("Object.prototype.propertyIsEnumerable()")}}
+
内郚の ECMAScript [[Enumerable]] 属性 の蚭定状態を瀺す真停倀を返したす。
+
{{jsxref("Object.prototype.toSource()")}}
+
このメ゜ッドの呌び出し元オブゞェクトを衚すオブゞェクトリテラルからなる゜ヌス文字列を返したす。この倀を䜿っお新しいオブゞェクトを䜜成できたす。
+
{{jsxref("Object.prototype.toLocaleString()")}}
+
{{jsxref("Object.toString", "toString()")}} を呌び出したす。
+
{{jsxref("Object.prototype.toString()")}}
+
指定したオブゞェクトを衚す文字列を返したす。
+
{{jsxref("Object.prototype.unwatch()")}}
+
オブゞェクトのプロパティから代入凊理を監芖するりォッチポむントを取り陀きたす。
+
{{jsxref("Object.prototype.valueOf()")}}
+
指定したオブゞェクトのプリミティブ倀を返したす。
+
{{jsxref("Object.prototype.watch()")}}
+
オブゞェクトのプロパティに代入凊理を監芖するりォッチポむントを远加したす。
+
+
+ +

䟋

+ +

undefined ず null デヌタ型を䞎えられた Object を䜿甚する

+ +

次の䟋は、o に空の Object オブゞェクトを栌玍したす。

+ +
let o = new Object()
+
+ +
let o = new Object(undefined)
+
+ +
let o = new Object(null)
+
+ +

Boolean オブゞェクトの生成に Object を䜿甚する

+ +

次の䟋は、o に {{jsxref("Boolean")}} オブゞェクトを栌玍したす。

+ +
// o = new Boolean(true) に同じ
+let o = new Object(true)
+
+ +
// to o = new Boolean(false) に同じ
+let o = new Object(Boolean())
+
+ +

オブゞェクトのプロトタむプ

+ +

Object.prototype の既存のメ゜ッドの動䜜を倉曎する堎合は、既存のロゞックの前たたは埌で独自の拡匵を囲む圢でコヌドを挿入するようにしおください。䟋えば、この (テストされおいない) コヌドは、組蟌みロゞックや誰かの拡匵機胜が実行される前に、条件付きで独自のロゞックを実行したす。

+ +

関数が呌び出されるず、呌び出す匕数は配列状「倉数」 arguments に保持されたす。䟋えば myFn(a, b, c) の呌び出しでは、myFn の本䜓内での匕数は (a, b, c) に察応する 3 ぀の配列状芁玠を含みたす。

+ +

フックを䜿っおプロトタむプを倉曎する堎合は、関数で apply() を呌び出すこずで、this ず匕数 (呌び出し状態) を珟圚の動䜜に枡したす。このパタヌンは、Node.prototype や Function.prototype など、どんなプロトタむプにも䜿えたす。

+ +
var current = Object.prototype.valueOf;
+
+// Since my property "-prop-value" is cross-cutting and isn't always
+// on the same prototype chain, I want to modify Object.prototype:
+Object.prototype.valueOf = function() {
+  if (this.hasOwnProperty('-prop-value')) {
+    return this['-prop-value'];
+  } else {
+    // It doesn't look like one of my objects, so let's fall back on
+    // the default behavior by reproducing the current behavior as best we can.
+    // The apply behaves like "super" in some other languages.
+    // Even though valueOf() doesn't take arguments, some other hook may.
+    return current.apply(this, arguments);
+  }
+}
+
+ +

JavaScript はサブクラスオブゞェクトを持っおいないため、プロトタむプはオブゞェクトずしお機胜する特定の関数の「基本クラス」オブゞェクトを䜜成するための有甚な回避策です。䟋えば、以䞋のようになりたす。

+ +
var Person = function(name) {
+  this.name = name;
+  this.canTalk = true;
+};
+
+Person.prototype.greet = function() {
+  if (this.canTalk) {
+    console.log('Hi, I am ' + this.name);
+  }
+};
+
+var Employee = function(name, title) {
+  Person.call(this, name);
+  this.title = title;
+};
+
+Employee.prototype = Object.create(Person.prototype);
+Employee.prototype.constructor = Employee; //If you don't set Object.prototype.constructor to Employee,
+                                           //it will take prototype.constructor of Person (parent).
+                                           //To avoid that, we set the prototype.constructor to Employee (child).
+
+
+Employee.prototype.greet = function() {
+  if (this.canTalk) {
+    console.log('Hi, I am ' + this.name + ', the ' + this.title);
+  }
+};
+
+var Customer = function(name) {
+  Person.call(this, name);
+};
+
+Customer.prototype = Object.create(Person.prototype);
+Customer.prototype.constructor = Customer; //If you don't set Object.prototype.constructor to Customer,
+                                           //it will take prototype.constructor of Person (parent).
+                                           //To avoid that, we set the prototype.constructor to Customer (child).
+
+
+var Mime = function(name) {
+  Person.call(this, name);
+  this.canTalk = false;
+};
+
+Mime.prototype = Object.create(Person.prototype);
+Mime.prototype.constructor = Mime; //If you don't set Object.prototype.constructor to Mime,
+                                   //it will take prototype.constructor of Person (parent).
+                                   //To avoid that, we set the prototype.constructor to Mime (child).
+
+
+var bob = new Employee('Bob', 'Builder');
+var joe = new Customer('Joe');
+var rg = new Employee('Red Green', 'Handyman');
+var mike = new Customer('Mike');
+var mime = new Mime('Mime');
+
+bob.greet();
+// Hi, I am Bob, the Builder
+
+joe.greet();
+// Hi, I am Joe
+
+rg.greet();
+// Hi, I am Red Green, the Handyman
+
+mike.greet();
+// Hi, I am Mike
+
+mime.greet();
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object-objects', 'Object')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/is/index.html b/files/ja/web/javascript/reference/global_objects/object/is/index.html new file mode 100644 index 0000000000..ab871c5ab4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/is/index.html @@ -0,0 +1,125 @@ +--- +title: Object.is() +slug: Web/JavaScript/Reference/Global_Objects/Object/is +tags: + - Comparison + - Condition + - Conditional + - ECMAScript 2015 + - Equality + - JavaScript + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/is +--- +
{{JSRef}}
+ +

Object.is() メ゜ッドは 2 ぀の倀が同䞀倀であるかどうかを刀定したす。

+ +

構文

+ +
Object.is(value1, value2);
+ +

匕数

+ +
+
value1
+
比范する 1 ぀目の倀。
+
value2
+
比范する 2 ぀目の倀。
+
+ +

返倀

+ +

{{jsxref("Boolean")}} で、 2 ぀の匕数が同䞀倀であるかどうかを衚したす。

+ +

解説

+ +

Object.is() は 2 ぀の倀が同䞀倀であるかどうかを刀定したす。2 ぀の倀が以䞋の芏則の䞀぀に圓おはたる堎合に同䞀ずなりたす。

+ + + +

このメ゜ッドは {{jsxref("Operators/Comparison_Operators", "==", "#Equality")}} 挔算子による等倀比范ず同じものではありたせん。 == 挔算子は等倀性比范の前に (同じ型でなければ) 䞡蟺に察しお様々な型倉換を適甚したす (結果、䟋えば "" == false は true に評䟡されたす) が、Object.is は䞡蟺どちらの倀にも型倉換を行いたせん。

+ +

たた {{jsxref("Operators/Comparison_Operators", "===", "#Identity")}} 挔算子による同倀比范ずも同じものでもありたせん。 === 挔算子は (そしお == 挔算子も) 数倀 -0 ず +0 は同じものずしお扱い、 {{jsxref("Number.NaN")}} ず {{jsxref("NaN")}} は異なるものずしお扱いたす。

+ +

䟋

+ +

Object.is の䜿甚

+ +
Object.is('foo', 'foo');     // true
+Object.is(window, window);   // true
+
+Object.is('foo', 'bar');     // false
+Object.is([], []);           // false
+
+var foo = { a: 1 };
+var bar = { a: 1 };
+Object.is(foo, foo);         // true
+Object.is(foo, bar);         // false
+
+Object.is(null, null);       // true
+
+// 特殊なケヌス
+Object.is(0, -0);            // false
+Object.is(-0, -0);           // true
+Object.is(NaN, 0/0);         // true
+
+ +

ポリフィル

+ +
if (!Object.is) {
+  Object.defineProperty(Object, "is", {
+    value: function (x, y) {
+      // 同倀アルゎリズム
+      if (x === y) { // ステップ 1 から 5、および 7 から 10
+        // ステップ 6.b から 6.e たでの堎合: +0 != -0
+        return x !== 0 || 1 / x === 1 / y;
+      } else {
+        // ステップ 6.a の堎合: NaN == NaN
+        return x !== x && y !== y;
+      }
+    }
+  });
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.is', 'Object.is')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.is")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/isextensible/index.html b/files/ja/web/javascript/reference/global_objects/object/isextensible/index.html new file mode 100644 index 0000000000..048fc8733d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/isextensible/index.html @@ -0,0 +1,103 @@ +--- +title: Object.isExtensible() +slug: Web/JavaScript/Reference/Global_Objects/Object/isExtensible +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isExtensible +--- +
{{JSRef}}
+ +

Object.isExtensible() メ゜ッドは、オブゞェクトが拡匵可胜であるか (新しいプロパティを远加するこずができるかどうか) を刀定したす。

+ +
{{EmbedInteractiveExample("pages/js/object-isextensible.html")}}
+ + + +

構文

+ +
Object.isExtensible(obj)
+ +

匕数

+ +
+
obj
+
チェックするオブゞェクトです。
+
+ +

返倀

+ +

{{jsxref("Boolean")}} で、䞎えられたオブゞェクトが拡匵可胜であるかどうかを瀺したす。

+ +

解説

+ +

オブゞェクトは既定では拡匵可胜です。぀たり、新しいプロパティの远加が可胜であり、 ({{jsxref("Object.proto", "__proto__")}} のプロパティに察応しおいる゚ンゞンでは) __proto__ プロパティを倉曎するこずができたす。オブゞェクトは {{jsxref("Object.preventExtensions()")}}, {{jsxref("Object.seal()")}}, {{jsxref("Object.freeze()")}} の䜕れかを甚いる事で拡匵䞍胜に蚭定する事が可胜です。

+ +

䟋

+ +

Object.isExtensible の䜿甚

+ +
// 新芏のオブゞェクトは拡匵可胜
+var empty = {};
+Object.isExtensible(empty); // === true
+
+// その蚭定は倉える事が可胜
+Object.preventExtensions(empty);
+Object.isExtensible(empty); // === false
+
+// seal メ゜ッドで封印されたオブゞェクトは拡匵䞍可ず定矩される
+var sealed = Object.seal({});
+Object.isExtensible(sealed); // === false
+
+// freeze メ゜ッドで凍結されたオブゞェクトも拡匵䞍可ず定矩される
+var frozen = Object.freeze({});
+Object.isExtensible(frozen); // === false
+
+ +

オブゞェクト以倖の型匷制

+ +

ES5 では、このメ゜ッドの匕数がオブゞェクトではない堎合 (プリミティブの堎合)、 {{jsxref("TypeError")}} が発生したす。 ES2015 以降では、オブゞェクトでない匕数は、それが拡匵䞍可胜な通垞のオブゞェクトであるかのように扱われ、単に false を返したす。

+ +
Object.isExtensible(1);
+// TypeError: 1 is not an object (ES5 code)
+
+Object.isExtensible(1);
+// false                         (ES2015 code)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.isextensible', 'Object.isExtensible')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.isExtensible")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/isfrozen/index.html b/files/ja/web/javascript/reference/global_objects/object/isfrozen/index.html new file mode 100644 index 0000000000..14526c51f8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/isfrozen/index.html @@ -0,0 +1,167 @@ +--- +title: Object.isFrozen() +slug: Web/JavaScript/Reference/Global_Objects/Object/isFrozen +tags: + - ECMAScript 5 + - JavaScript + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isFrozen +--- +
{{JSRef}}
+ +

Object.isFrozen() はオブゞェクトが{{jsxref("Object.freeze()", "凍結されおいる", "", 1)}}かどうかを刀定したす。

+ +
{{EmbedInteractiveExample("pages/js/object-isfrozen.html")}}
+ + + +

構文

+ +
Object.isFrozen(obj)
+ +

匕数

+ +
+
obj
+
確認したいオブゞェクトです。
+
+ +

返倀

+ +

䞎えられたオブゞェクトが凍結されおいるかどうかを瀺す {{jsxref("Boolean")}}。

+ +

解説

+ +

オブゞェクトが{{jsxref("Object.isExtensible()", "拡匵可胜", "", 1)}}ではなく、すべおのプロパティは蚭定倉曎䞍可であり、そしおすべおのデヌタプロパティ (これはゲッタヌやセッタヌコンポヌネントを持぀アクセサプロパティではないものを指したす) が曞き蟌み䞍可である堎合に、凍結されおいるずなりたす。

+ +

䟋

+ +

Object.isFrozen の䜿甚

+ +
// 新しいオブゞェクトは拡匵可胜であるので、凍結されおいたせん
+Object.isFrozen({}); // === false
+
+// 拡匵可胜ではない空のオブゞェクトは、他に䜕もしなくおも
+// 凍結されおいたす
+var vacuouslyFrozen = Object.preventExtensions({});
+Object.isFrozen(vacuouslyFrozen); // === true
+
+// プロパティをひず぀持぀新しいオブゞェクトも拡匵可胜であり、
+// それゆえ凍結されおいたせん
+var oneProp = { p: 42 };
+Object.isFrozen(oneProp); // === false
+
+// オブゞェクトを拡匵䞍可にしおも、それは凍結されたせん
+// なぜなら、ただプロパティが蚭定倉曎可胜
+// (か぀曞き蟌み可胜) であるからです
+Object.preventExtensions(oneProp);
+Object.isFrozen(oneProp); // === false
+
+// ...しかしプロパティを削陀するず、そのオブゞェクトは
+// 他に䜕もしなくおも凍結されたす
+delete oneProp.p;
+Object.isFrozen(oneProp); // === true
+
+// 曞き蟌み䞍可であるが蚭定倉曎可胜なプロパティを持぀、
+// 拡匵䞍可のオブゞェクトは、凍結されおいたせん
+var nonWritable = { e: 'plep' };
+Object.preventExtensions(nonWritable);
+Object.defineProperty(nonWritable, 'e', {
+  writable: false
+}); // 曞き蟌み䞍可にしたす
+Object.isFrozen(nonWritable); // === false
+
+// プロパティを蚭定倉曎䞍可にするず、
+// オブゞェクトは凍結されたす
+Object.defineProperty(nonWritable, 'e', {
+  configurable: false
+}); // 蚭定倉曎䞍可にしたす
+Object.isFrozen(nonWritable); // === true
+
+// 蚭定倉曎䞍可であるが曞き蟌み可胜なプロパティを持぀、
+// 拡匵䞍可のオブゞェクトは、やはり凍結されおいたせん
+var nonConfigurable = { release: 'the kraken!' };
+Object.preventExtensions(nonConfigurable);
+Object.defineProperty(nonConfigurable, 'release', {
+  configurable: false
+});
+Object.isFrozen(nonConfigurable); // === false
+
+// プロパティを曞き蟌み䞍可にするず、オブゞェクトは
+// 凍結されたす
+Object.defineProperty(nonConfigurable, 'release', {
+  writable: false
+});
+Object.isFrozen(nonConfigurable); // === true
+
+// 蚭定倉曎可胜なアクセサヌプロパティを持぀拡匵䞍可の
+// オブゞェクトは、凍結されおいたせん
+var accessor = { get food() { return 'yum'; } };
+Object.preventExtensions(accessor);
+Object.isFrozen(accessor); // === false
+
+// ...しかしプロパティを蚭定倉曎䞍可にするず、
+// オブゞェクトは凍結されたす
+Object.defineProperty(accessor, 'food', {
+  configurable: false
+});
+Object.isFrozen(accessor); // === true
+
+// なお、オブゞェクトを凍結するもっずも簡単な方法は、
+// Object.freeze を呌び出すこずです
+var frozen = { 1: 81 };
+Object.isFrozen(frozen); // === false
+Object.freeze(frozen);
+Object.isFrozen(frozen); // === true
+
+// 定矩によるず、凍結されたオブゞェクトは拡匵䞍可です
+Object.isExtensible(frozen); // === false
+
+// たた、凍結されたオブゞェクトは封印されおいたす
+Object.isSealed(frozen); // === true
+
+ +

オブゞェクト以倖の型匷制

+ +

ES5 では、このメ゜ッドの匕数がオブゞェクトではない堎合 (プリミティブの堎合)、 {{jsxref("TypeError")}} が発生したす。 ES2015 以降では、オブゞェクトでない匕数は、それが凍結された通垞のオブゞェクトであるかのように扱われ、単に true を返したす。

+ +
Object.isFrozen(1);
+// TypeError: 1 is not an object (ES5 code)
+
+Object.isFrozen(1);
+// true                          (ES2015 code)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.isfrozen', 'Object.isFrozen')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.isFrozen")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/isprototypeof/index.html b/files/ja/web/javascript/reference/global_objects/object/isprototypeof/index.html new file mode 100644 index 0000000000..c019b11ef9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/isprototypeof/index.html @@ -0,0 +1,113 @@ +--- +title: Object.prototype.isPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf +tags: + - JavaScript + - Mehtod + - Object + - Prototype + - Reference + - isPrototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf +--- +
{{JSRef}}
+ +

isPrototypeOf() メ゜ッドは、オブゞェクトが別のオブゞェクトのプロトタむプチェヌンに存圚するかどうかを刀定したす。

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-isprototypeof.html")}}
+ + + +
+

isPrototypeOf() は、{{jsxref("Operators/instanceof", "instanceof")}} 挔算子ずは異なりたす。"object instanceof AFunction" 匏では、object のプロトタむプチェヌンは AFunction 自身ではなく、AFunction.prototype に察しお刀定されたす。

+
+ +

構文

+ +
prototypeObj.isPrototypeOf(object)
+ +

匕数

+ +
+
object
+
プロトタむプチェヌンの怜玢察象。
+
+ +

返倀

+ +

呌び出されたオブゞェクトがプロトタむプチェヌン内に指定されたオブゞェクトを持぀かどうかを瀺す {{jsxref("Boolean")}}。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("TypeError")}}
+
prototypeObj が undefined か null の堎合、{{jsxref("TypeError")}} 発生する
+
+ +

解説

+ +

isPrototypeOf() を甚いるず、オブゞェクトが別のオブゞェクト内のプロトタむプチェヌンに存圚するかどうかをチェックする事ができたす。

+ +

䟋

+ +

isPrototypeOf の䜿甚

+ +

この䟋は、baz オブゞェクトのプロトタむプチェヌンに、Baz.prototype ず Bar.prototype、Foo.prototype、Object.prototype が存圚しおいるデモです。

+ +
function Foo() {}
+function Bar() {}
+function Baz() {}
+
+Bar.prototype = Object.create(Foo.prototype);
+Baz.prototype = Object.create(Bar.prototype);
+
+var baz = new Baz();
+
+console.log(Baz.prototype.isPrototypeOf(baz)); // true
+console.log(Bar.prototype.isPrototypeOf(baz)); // true
+console.log(Foo.prototype.isPrototypeOf(baz)); // true
+console.log(Object.prototype.isPrototypeOf(baz)); // true
+
+ +

isPrototypeOf() メ゜ッドは、{{jsxref("Operators/instanceof", "instanceof")}} 挔算子ず同様に、特定のプロトタむプチェヌンから継承されたオブゞェクトを扱うずきにのみ機胜するコヌドを持぀堎合、たずえばそのオブゞェクトに特定のメ゜ッドやプロパティが存圚するこずを保蚌する堎合に特に䟿利です。

+ +

たずえば、baz オブゞェクトが Foo.prototype に由来しおいるか怜蚌しおみたす:

+ +
if (Foo.prototype.isPrototypeOf(baz)) {
+  // do something safe
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.isprototypeof', 'Object.prototype.isPrototypeOf')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.isPrototypeOf")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/issealed/index.html b/files/ja/web/javascript/reference/global_objects/object/issealed/index.html new file mode 100644 index 0000000000..1daa6cf391 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/issealed/index.html @@ -0,0 +1,130 @@ +--- +title: Object.isSealed() +slug: Web/JavaScript/Reference/Global_Objects/Object/isSealed +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isSealed +--- +
{{JSRef}}
+ +

Object.isSealed() メ゜ッドは、オブゞェクトが封印されおいるかどうかを刀定したす。

+ +
{{EmbedInteractiveExample("pages/js/object-issealed.html")}}
+ + + +

構文

+ +
Object.isSealed(obj)
+ +

匕数

+ +
+
obj
+
確認したいオブゞェクトです。
+
+ +

返倀

+ +

䞎えられたオブゞェクトが封印されおいるかどうかを瀺す {{jsxref("Boolean")}}。

+ +

解説

+ +

オブゞェクトが封印されおいる堎合は true が、そうでない堎合は false が返りたす。オブゞェクトが{{jsxref("Object.isExtensible", "拡匵䞍可", "", 1)}}か぀すべおのプロパティが蚭定倉曎䞍可であり、それゆえ削陀できない堎合 (ただし曞き蟌み䞍可である必芁はありたせん) 堎合に、封印されおいるずなりたす。

+ +

䟋

+ +

Object.isSealed の䜿甚

+ +
// 既定でオブゞェクトは封印されおいたせん
+var empty = {};
+Object.isSealed(empty); // === false
+
+// 空のオブゞェクトを拡匵䞍可にするず、
+// そのたた封印状態になりたす
+Object.preventExtensions(empty);
+Object.isSealed(empty); // === true
+
+// 空でないオブゞェクトでは、そのプロパティをすべお蚭定倉曎䞍可にしない限り
+// 䞊蚘ず同じにはなりたせん
+var hasProp = { fee: 'fie foe fum' };
+Object.preventExtensions(hasProp);
+Object.isSealed(hasProp); // === false
+
+// そこですべおのプロパティを蚭定倉曎䞍可にするず、
+// オブゞェクトは封印状態になりたす
+Object.defineProperty(hasProp, 'fee', {
+  configurable: false
+});
+Object.isSealed(hasProp); // === true
+
+// オブゞェクトを封印する最も簡単な方法は、
+// もちろん Object.seal です
+var sealed = {};
+Object.seal(sealed);
+Object.isSealed(sealed); // === true
+
+// 封印されたオブゞェクトはその定矩により、拡匵できたせん
+Object.isExtensible(sealed); // === false
+
+// 封印されたオブゞェクトは凍結されおいるかも
+// しれたせんが、必ずしもそうではありたせん
+Object.isFrozen(sealed); // === true
+// すべおのプロパティが曞き蟌み䞍胜でもありたす
+
+var s2 = Object.seal({ p: 3 });
+Object.isFrozen(s2); // === false
+// "p" は䟝然曞き蟌み可胜です
+
+var s3 = Object.seal({ get p() { return 0; } });
+Object.isFrozen(s3); // === true
+// アクセサプロパティでは蚭定倉曎が可胜かずいう事柄だけになりたす
+
+ +

オブゞェクト以倖の型匷制

+ +

ES5 では、このメ゜ッドの匕数がオブゞェクトではない堎合 (プリミティブの堎合)、 {{jsxref("TypeError")}} が発生したす。 ES2015 以降では、オブゞェクトでない匕数は、それが封印された通垞のオブゞェクトであるかのように扱われ、単に true それを返したす。

+ +
Object.isSealed(1);
+// TypeError: 1 is not an object (ES5 code)
+
+Object.isSealed(1);
+// true                          (ES2015 code)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.issealed', 'Object.isSealed')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.isSealed")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/keys/index.html b/files/ja/web/javascript/reference/global_objects/object/keys/index.html new file mode 100644 index 0000000000..2e7cc6c595 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/keys/index.html @@ -0,0 +1,161 @@ +--- +title: Object.keys() +slug: Web/JavaScript/Reference/Global_Objects/Object/keys +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/keys +--- +
{{JSRef}}
+ +

Object.keys() メ゜ッドは、指定されたオブゞェクトが持぀プロパティの 名前の配列を、通垞のルヌプで取埗するのず同じ順序で返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-keys.html")}}
+ + + +

構文

+ +
Object.keys(obj)
+ +

匕数

+ +
+
obj
+
自身の列挙可胜なプロパティが返されるオブゞェクトです。
+
+ +

返倀

+ +

䞎えられたオブゞェクトのすべおの列挙可胜なプロパティを衚す文字列の配列。

+ +

解説

+ +

Object.keys() は、object で盎接発芋された列挙可胜なプロパティに察応する文字列を芁玠ずする配列を返したす。プロパティの順序は、オブゞェクトのプロパティをルヌプにより手動で取埗した堎合ず同じです。

+ +

䟋

+ +

Object.keys の䜿甚

+ +
// 単玔な配列
+const arr = ['a', 'b', 'c'];
+console.log(Object.keys(arr)); // console: ['0', '1', '2']
+
+// オブゞェクトのような配列
+const obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.keys(obj)); // console: ['0', '1', '2']
+
+// キヌの順序がランダムなオブゞェクトのような配列
+const anObj = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.keys(anObj)); // console: ['2', '7', '100']
+
+// getFoo は列挙可胜ではないプロパティ
+const myObj = Object.create({}, {
+  getFoo: {
+    value: function () { return this.foo; }
+  }
+});
+myObj.foo = 1;
+console.log(Object.keys(myObj)); // console: ['foo']
+
+ +

列挙可胜ではないものを含むすべおのプロパティを取埗したい堎合、{{jsxref("Object.getOwnPropertyNames()")}} をご芧ください。

+ +

オブゞェクト以倖の型倉換

+ +

ES5 では、このメ゜ッドぞの匕数がオブゞェクトではない (プリミティブである) 堎合、 {{jsxref("TypeError")}} が発生したす。

+ +

ES2015 以降では、オブゞェクトでない匕数はオブゞェクトぞ倉換されるようになりたした。

+ +
// In ES5
+Object.keys('foo');  // TypeError: "foo" is not an object
+
+Object.keys('foo');
+// ["0", "1", "2"]                   (ES2015 code)
+
+ +

ポリフィル

+ +

Object.keys にネむティブに察応しおいない環境向けに互換性を確保するには、以䞋のコヌド郚品をコピヌしおください。

+ +
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
+if (!Object.keys) {
+  Object.keys = (function() {
+    'use strict';
+    var hasOwnProperty = Object.prototype.hasOwnProperty,
+        hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
+        dontEnums = [
+          'toString',
+          'toLocaleString',
+          'valueOf',
+          'hasOwnProperty',
+          'isPrototypeOf',
+          'propertyIsEnumerable',
+          'constructor'
+        ],
+        dontEnumsLength = dontEnums.length;
+
+    return function(obj) {
+      if (typeof obj !== 'function' && (typeof obj !== 'object' || obj === null)) {
+        throw new TypeError('Object.keys called on non-object');
+      }
+
+      var result = [], prop, i;
+
+      for (prop in obj) {
+        if (hasOwnProperty.call(obj, prop)) {
+          result.push(prop);
+        }
+      }
+
+      if (hasDontEnumBug) {
+        for (i = 0; i < dontEnumsLength; i++) {
+          if (hasOwnProperty.call(obj, dontEnums[i])) {
+            result.push(dontEnums[i]);
+          }
+        }
+      }
+      return result;
+    };
+  }());
+}
+
+ +

䞊蚘のコヌドは IE7 においお (もしかするず IE8 でも)、他のりィンドりから枡されたオブゞェクトの堎合、列挙䞍可胜な key を含むこずに泚意しおください。

+ +

より簡単なブラりザヌのポリフィルに぀いおは、Javascript - Object.keys Browser Compatibility をご芧ください。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.keys', 'Object.keys')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.keys")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/object/index.html b/files/ja/web/javascript/reference/global_objects/object/object/index.html new file mode 100644 index 0000000000..719a697a55 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/object/index.html @@ -0,0 +1,84 @@ +--- +title: Object() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Object/Object +tags: + - Constructor + - JavaScript + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/Object +--- +
{{JSRef}}
+ +

Object コンストラクタヌは、䞎えられた倀のオブゞェクトラッパヌを生成したす。

+ + + +

コンストラクタヌではない堎面で Object が呌び出された堎合は、 new Object() ず同様に動䜜したす。

+ +

構文

+ +
new Object()
+new Object(value)
+ +

匕数

+ +
+
value
+
任意の倀。
+
+ +

䟋

+ +

新しい Object の生成

+ +
let o = new Object()
+o.foo = 42
+
+console.log(o)
+// Object { foo: 42 }
+ +

undefined および null 型が䞎えられた Object の䜿甚

+ +

次の䟋は、空の Object オブゞェクトを o に栌玍したす。

+ +
let o = new Object()
+
+ +
let o = new Object(undefined)
+
+ +
let o = new Object(null)
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object-constructor', 'Object constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/preventextensions/index.html b/files/ja/web/javascript/reference/global_objects/object/preventextensions/index.html new file mode 100644 index 0000000000..a9c97dd29b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/preventextensions/index.html @@ -0,0 +1,129 @@ +--- +title: Object.preventExtensions() +slug: Web/JavaScript/Reference/Global_Objects/Object/preventExtensions +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Method + - Object +translation_of: Web/JavaScript/Reference/Global_Objects/Object/preventExtensions +--- +
{{JSRef}}
+ +

Object.preventExtensions() メ゜ッドはすでにプロパティが远加されたオブゞェクトで、新しいプロパティを抑制したす (すなわち、オブゞェクトのさらなる拡匵を抑制したす)。

+ +
{{EmbedInteractiveExample("pages/js/object-preventextensions.html")}}
+ + + +

構文

+ +
Object.preventExtensions(obj)
+ +

匕数

+ +
+
obj
+
拡匵を䞍可胜にしたいオブゞェクトです。
+
+ +

返倀

+ +

拡匵䞍可胜にされたオブゞェクトです。

+ +

解説

+ +

新しいプロパティを远加できる堎合、オブゞェクトは拡匵可胜です。 Object.preventExtensions() はオブゞェクトを拡匵䞍可胜ず暙瀺するこずで、その時点で持っおいるプロパティ以倖のプロパティを持たせるこずを䞍可胜にしたす。拡匵䞍可胜なオブゞェクトのプロパティは通垞、䟝然ずしお削陀できるこずに泚意しおください。拡匵䞍可胜なオブゞェクトぞ新たにプロパティを远加しようずしおも、暗黙的あるいは {{jsxref("TypeError")}} ゚ラヌを発生させお倱敗したす (通垞は {{jsxref("Functions_and_function_scope/Strict_mode", "strict mode", "", 1)}} においお、ただしこれに限定はされたせん)。

+ +

Object.preventExtensions() は、自身のプロパティの远加のみを抑制したす。オブゞェクトプロトタむプにプロパティを远加するこずは可胜です。

+ +

このメ゜ッドは察象の [[prototype]] を䞍倉にし、それ以降のあらゆる [[prototype]] ぞの再代入は {{jsxref("TypeError")}} を発生したす。この動䜜は [[prototype]] 内郚プロパティ固有のものであり、他のプロパティは倉曎可胜なたたです。

+ +

拡匵可胜なオブゞェクトを拡匵䞍可胜にする方法はありたすが、逆の方法はありたせん。

+ +

䟋

+ +

Object.preventExtensions の䜿甚

+ +
// Object.preventExtensions は拡匵䞍可胜にしたオブゞェクトを返したす
+var obj = {};
+var obj2 = Object.preventExtensions(obj);
+obj === obj2; // true
+
+// 既定でオブゞェクトは拡匵可胜です
+var empty = {};
+Object.isExtensible(empty); // === true
+
+// この性質は倉曎できたす
+Object.preventExtensions(empty);
+Object.isExtensible(empty); // === false
+
+// Object.defineProperty で拡匵䞍可胜なオブゞェクトに
+// 新しいプロパティを远加する際、゚ラヌが発生したす
+var nonExtensible = { removable: true };
+Object.preventExtensions(nonExtensible);
+Object.defineProperty(nonExtensible, 'new', {
+  value: 8675309
+}); // TypeError が発生
+
+// 厳栌モヌドでは、拡匵䞍可胜なオブゞェクトに
+// 新たなプロパティを远加しようずするず TypeError が発生したす
+function fail() {
+  'use strict';
+  // TypeError が発生
+  nonExtensible.newProperty = 'FAIL';
+}
+fail();
+
+ +

拡匵䞍可胜なオブゞェクトのプロトタむプは䞍倉になりたす。

+ +
var fixed = Object.preventExtensions({});
+// TypeError が発生
+fixed.__proto__ = { oh: 'hai' };
+ +

オブゞェクト以倖の型匷制

+ +

ES5 では、このメ゜ッドの匕数がオブゞェクトではない堎合 (プリミティブの堎合)、 {{jsxref("TypeError")}} が発生したす。 ES2015 以降では、オブゞェクトでない匕数は、それが拡匵䞍可胜な通垞のオブゞェクトであるかのように扱われ、単にそれを返したす。

+ +
Object.preventExtensions(1);
+// TypeError: 1 is not an object (ES5 code)
+
+Object.preventExtensions(1);
+// 1                             (ES2015 code)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.preventextensions', 'Object.preventExtensions')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.preventExtensions")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/propertyisenumerable/index.html b/files/ja/web/javascript/reference/global_objects/object/propertyisenumerable/index.html new file mode 100644 index 0000000000..6fe7395adf --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/propertyisenumerable/index.html @@ -0,0 +1,135 @@ +--- +title: Object.prototype.propertyIsEnumerable() +slug: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable +tags: + - JavaScript + - Method + - Object + - Prototype + - プロトタむプ + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable +--- +
{{JSRef}}
+ +

propertyIsEnumerable() メ゜ッドは、指定されたプロパティが列挙可胜で、オブゞェクト自身のプロパティであるこずを瀺す Boolean を返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-propertyisenumerable.html", "taller")}}
+ + + +

構文

+ +
obj.propertyIsEnumerable(prop)
+ +

匕数

+ +
+
prop
+
調べたいプロパティの名前。
+
+ +

返倀

+ +

指定されたプロパティが列挙可胜であり、か぀オブゞェクト自䜓のプロパティであるかどうかを瀺す {{jsxref("Boolean")}} 。

+ +

解説

+ +

すべおのオブゞェクトは propertyIsEnumerable メ゜ッドを持っおいたす。このメ゜ッドはあるオブゞェクトのプロパティが、プロトタむプチェヌンを通じお継承されたプロパティを陀いお {{jsxref("Statements/for...in", "for...in")}} ルヌプで列挙可胜かどうかを特定するこずができたす。もしオブゞェクトが指定されたプロパティを持っおいない堎合、このメ゜ッドは false を返したす。

+ +

䟋

+ +

propertyIsEnumerable の基本的な䜿い方

+ +

以䞋の䟋はオブゞェクトず配列での propertyIsEnumerable の䜿い方を瀺しおいたす。

+ +
var o = {};
+var a = [];
+o.prop = 'is enumerable';
+a[0] = 'is enumerable';
+
+o.propertyIsEnumerable('prop');   // true を返す
+a.propertyIsEnumerable(0);        // true を返す
+
+ +

ナヌザヌ定矩オブゞェクトず組み蟌みオブゞェクト

+ +

以䞋の䟋はナヌザヌ定矩プロパティず組み蟌みプロパティの列挙可胜性を実蚌しおいたす。

+ +
var a = ['is enumerable'];
+
+a.propertyIsEnumerable(0);          // true を返す
+a.propertyIsEnumerable('length');   // false を返す
+
+Math.propertyIsEnumerable('random');   // false を返す
+this.propertyIsEnumerable('Math');     // false を返す
+
+ +

盎接のプロパティず継承されたプロパティ

+ +
var a = [];
+a.propertyIsEnumerable('constructor');         // false を返す
+
+function firstConstructor() {
+  this.property = 'is not enumerable';
+}
+
+firstConstructor.prototype.firstMethod = function() {};
+
+function secondConstructor() {
+  this.method = function method() { return 'is enumerable'; };
+}
+
+secondConstructor.prototype = new firstConstructor;
+secondConstructor.prototype.constructor = secondConstructor;
+
+var o = new secondConstructor();
+o.arbitraryProperty = 'is enumerable';
+
+o.propertyIsEnumerable('arbitraryProperty');   // true を返す
+o.propertyIsEnumerable('method');              // true を返す
+o.propertyIsEnumerable('property');            // false を返す
+
+o.property = 'is enumerable';
+
+o.propertyIsEnumerable('property');            // true を返す
+
+// これらはすべお false を返したす。これは、 (最埌の2぀は for-in で
+// 反埩凊理可胜であるにもかかわらず) propertyIsEnumerable が考慮しない
+// プロトタむプであるためです。
+o.propertyIsEnumerable('prototype');   // false を返す (as of JS 1.8.1/FF3.6)
+o.propertyIsEnumerable('constructor'); // false を返す
+o.propertyIsEnumerable('firstMethod'); // false を返す
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.propertyisenumerable', 'Object.prototype.propertyIsEnumerable')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.propertyIsEnumerable")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/proto/index.html b/files/ja/web/javascript/reference/global_objects/object/proto/index.html new file mode 100644 index 0000000000..ac56d688c8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/proto/index.html @@ -0,0 +1,131 @@ +--- +title: Object.prototype.__proto__ +slug: Web/JavaScript/Reference/Global_Objects/Object/proto +tags: + - Deprecated + - ECMAScript 2015 + - JavaScript + - Object + - Property + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/proto +--- +
{{JSRef}}{{Deprecated_header}} +
+

譊告: オブゞェクトの [[Prototype]] を倉曎するこずは、最新の JavaScript ゚ンゞンがプロパティアクセスを最適化する仕組み䞊、すべおのブラりザヌや JavaScript ゚ンゞンにおいお、ずおも䜎速な操䜜ずなりたす。プロトタむプの継承関係を倉曎するこずによる性胜䞊の圱響は埮现で広範囲にわたり、単に obj.__proto__ = ... ずいう文の実行時間に留たらず、 [[Prototype]] が倉曎されたいずれかのオブゞェクトぞのアクセスを持぀あらゆるコヌドに及ぶ可胜性がありたす。性胜を気にしおいる堎合、オブゞェクトの [[Prototype]] の倉曎は避けるべきです。代わりに、 {{JSxRef("Object.create()")}} を䜿甚しお意図する [[Prototype]] をも぀オブゞェクトを新たに生成しおください。

+
+ +
+

譊告: Object.prototype.__proto__ は珟時点でほずんどのブラりザヌが察応しおいたすが、そのプロパティの存圚ず正確な動䜜は、りェブブラりザヌの互換性を確保するためのレガシヌ機胜ずしお、 ECMAScript 2015 で初めお暙準化されたした。代わりに {{JSxRef("Object.getPrototypeOf()")}} を䜿甚しおください。

+
+
+ +

{{JSxRef("Object.prototype")}} の __proto__ プロパティは、アクセスされるオブゞェクトの内郚の [[Prototype]] (オブゞェクトたたは {{JSxRef("Global_Objects/null", "null")}} のどちらか) を暎露するアクセサプロパティ (ゲッタヌ関数ずセッタヌ関数) です。

+ +

__proto__ の䜿甚は、論争の的になり、掚奚されおいたせん。もずもず ECMAScript 蚀語仕様には含たれおいたせんでしたが、珟圚のブラりザヌでは結局それを実装しおいたす。最近になっお、 __proto__ プロパティはりェブブラりザヌ間の互換性を保぀ために ECMAScript2015 の仕様で暙準化されたので、将来的には察応されるこずになりたす。これは非掚奚扱いで、代わりに {{JSxRef("Object.getPrototypeOf")}}/{{JSxRef("Reflect.getPrototypeOf")}} および {{JSxRef("Object.setPrototypeOf")}}/{{JSxRef("Reflect.setPrototypeOf")}} を掚奚しおいたす (ずはいえ、オブゞェクトの [[Prototype]] の蚭定は、性胜が気になる堎合には避けるべき䜎速の操䜜ですが)。

+ +

たた、__proto__ プロパティは、生成時に [[Prototype]] オブゞェクトを蚭定するために {{JSxRef("Object.create()")}} の代わりずしおもオブゞェクトリテラルの定矩で䜿甚されたす。参照: オブゞェクト初期化子

+ +

解説

+ +

__proto__ ゲッタヌ関数はオブゞェクトの内郚の [[Prototype]] の倀を倖郚に公開したす。オブゞェクトリテラルを䜿甚しお生成されたオブゞェクトでは、この倀は {{JSxRef("Object.prototype")}} です。配列リテラルを䜿甚しお生成されたオブゞェクトでは、この倀は {{JSxRef("Array.prototype")}} です。関数では、この倀は {{JSxRef("Function.prototype")}} です。 new fun を䜿甚しお生成されたオブゞェクトでは、 fun が JavaScript の ({{JSxRef("Array")}}、{{JSxRef("Boolean")}}、{{JSxRef("Date")}}、 {{JSxRef("Number")}}、 {{JSxRef("Object")}}、 {{JSxRef("String")}} などによっお提䟛された内蔵コンストラクタヌ関数のうちの䞀぀である堎合は — JavaScript の進化によっお远加された新しいコンストラクタを含みたす)、この倀は垞に fun.prototype です。 new fun を䜿甚しお生成されたオブゞェクトでは、 fun がスクリプトで定矩された関数である堎合、この倀は垞に fun.prototype の倀です。 (すなわち、コンストラクタヌがほかのオブゞェクトを明瀺的に返さない堎合、たたは fun.prototype に再代入されおいない堎合)。

+ +

__proto__ のセッタヌでオブゞェクトの [[Prototype]] を倉曎するこずができたす。オブゞェクトは、 {{JSxRef("Object.isExtensible()")}} に応じお拡匵可胜である必芁がありたす。拡匵可胜ではない堎合、 {{JSxRef("Global_Objects/TypeError", "TypeError")}} が発生したす。䞎えられた倀はオブゞェクト、たたは {{JSxRef("Global_Objects/null", "null")}} である必芁がありたす。他の倀が䞎えられた堎合は䜕もしたせん。

+ +

プロトタむプが継承のためにどのように䜿甚されるかを理解するには、ガむド蚘事の継承ずプロトタむプチェヌンを参照しおください。

+ +

__proto__ プロパティは、ゲッタヌ関数ずセッタヌ関数からなる {{JSxRef("Object.prototype")}} 䞊の簡単なアクセサヌプロパティです。最終的にの {{JSxRef("Object.prototype")}} を参照する __proto__ に察しおのプロパティアクセスはこのプロパティを探したす。しかし、 {{JSxRef("Object.prototype")}} を参照しないアクセスはこのプロパティを探したせん。 {{JSxRef("Object.prototype")}} が参照される前にいく぀かの他の __proto__ プロパティが芋぀けられた堎合、そのプロパティは、 {{JSxRef("Object.prototype")}} 䞊で芋぀けられたプロパティを隠したす。

+ +

䟋

+ +

__proto__ の䜿甚

+ +
var Circle = function () {};
+var shape = {};
+var circle = new Circle();
+
+// Set the object prototype.
+// 非掚奚。 参考甚です。 実際のコヌドで䜿甚しないでください。
+shape.__proto__ = circle;
+
+// オブゞェクトのプロトタむプを取埗したす。
+console.log(shape.__proto__ === circle); // true
+
+var shape = function () {};
+var p = {
+    a: function () {
+        console.log('aaa');
+    }
+};
+shape.prototype.__proto__ = p;
+
+var circle = new shape();
+circle.a(); // aaa
+console.log(shape.prototype === circle.__proto__); // true
+
+// or
+var shape = function () {};
+var p = {
+    a: function () {
+        console.log('a');
+    }
+};
+
+var circle = new shape();
+circle.__proto__ = p;
+circle.a(); // a
+console.log(shape.prototype === circle.__proto__); // false
+
+// or
+function test() {};
+test.prototype.myname = function () {
+    console.log('myname');
+};
+
+var a = new test();
+console.log(a.__proto__ === test.prototype); // true
+a.myname(); // myname
+
+
+// or
+var fn = function () {};
+fn.prototype.myname = function () {
+    console.log('myname');
+};
+
+var obj = {
+    __proto__: fn.prototype
+};
+
+obj.myname(); // myname
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-additional-properties-of-the-object.prototype-object', 'Object.prototype.__proto__')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.proto")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/seal/index.html b/files/ja/web/javascript/reference/global_objects/object/seal/index.html new file mode 100644 index 0000000000..d08991c8ce --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/seal/index.html @@ -0,0 +1,136 @@ +--- +title: Object.seal() +slug: Web/JavaScript/Reference/Global_Objects/Object/seal +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Method + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/seal +--- +

{{JSRef}}

+ +

Object.seal() メ゜ッドは、オブゞェクトを封印しお、新しいオブゞェクトを远加するこずを抑制し、すべおの既存のプロパティを蚭定倉曎䞍可にしたす。珟存するプロパティの倀は、曞き蟌み可胜である限り倉曎できたす。

+ +
{{EmbedInteractiveExample("pages/js/object-seal.html")}}
+ + + +

構文

+ +
Object.seal(obj)
+ +

匕数

+ +
+
obj
+
封印するオブゞェクトです。
+
+ +

返倀

+ +

封印されたオブゞェクトです。

+ +

解説

+ +

既定では、オブゞェクトは{{jsxref("Object.isExtensible()", "拡匵可胜", "", 1)}} (新しいプロパティを远加できる状態) です。オブゞェクトを封印するこずで、新しいオブゞェクトの远加を抑制し、すべおの既存のプロパティを蚭定倉曎を䞍可にしたす。これは、オブゞェクトにあるプロパティ䞀匏を固定か぀䞍倉にする効果がありたす。プロパティを蚭定倉曎䞍可にするこずで、デヌタプロパティからアクセサプロパティぞの倉換やその逆を抑制したすが、デヌタプロパティの倀の倉曎は抑制したせん。封印されたオブゞェクトでプロパティの削陀や远加、あるいはデヌタプロパティからアクセサプロパティぞの倉換およびその逆を詊みるず、暗黙的あるいは {{jsxref("TypeError")}} ゚ラヌを発生させお (もっずも䞀般的には {{jsxref("Strict_mode", "strict mode", "", 1)}} においお、ただしこれに限定はされたせん) 倱敗したす。

+ +

プロトタむプチェむンには手を぀けず、そのたたにしたす。ただし、 {{jsxref("Object.proto", "__proto__")}} プロパティは同様に封印されたす。

+ +

Object.freeze() ずの比范

+ +

{{jsxref("Object.freeze()")}} で凍結されたオブゞェクトに存圚するプロパティは䞍倉になりたす。 Object.seal() で封印されたオブゞェクトに存圚するプロパティを倉曎するこずができたす。

+ +

䟋

+ +

Object.seal の䜿甚

+ +
var obj = {
+  prop: function() {},
+  foo: 'bar'
+};
+
+// 新しいプロパティは远加でき、既存のプロパティは倉曎や削陀ができたす。
+obj.foo = 'baz';
+obj.lumpy = 'woof';
+delete obj.prop;
+
+var o = Object.seal(obj);
+
+o === obj; // true
+Object.isSealed(obj); // true
+
+// 封印されたオブゞェクトで、プロパティの倀の倉曎は䟝然ずしおできたす。
+obj.foo = 'quux';
+
+// しかし、デヌタプロパティからアクセサプロパティの倉換やその逆はできたせん。
+Object.defineProperty(obj, 'foo', {
+  get: function() { return 'g'; }
+}); // TypeError が発生
+
+// プロパティの倀の倉曎を陀き、あらゆる倉曎が倱敗したす。
+obj.quaxxor = 'the friendly duck';
+// 暗黙的にプロパティは远加されたせん。
+delete obj.foo;
+// 暗黙的にプロパティは削陀されたせん。
+
+// たた、 strict モヌドではこれらの詊みに察しお TypeErrors が発生したす。
+function fail() {
+  'use strict';
+  delete obj.foo; // TypeError が発生
+  obj.sparky = 'arf'; // TypeError が発生
+}
+fail();
+
+// Object.defineProperty を甚いお远加しようずしおも゚ラヌが発生したす
+Object.defineProperty(obj, 'ohai', {
+  value: 17
+}); // TypeError が発生
+Object.defineProperty(obj, 'foo', {
+  value: 'eit'
+}); // 既存のプロパティの倀を倉曎
+
+ +

非オブゞェクトの匷制

+ +

ES5 では、このメ゜ッドぞの匕数がオブゞェクトではない堎合 (プリミティブである堎合)、 {{jsxref("TypeError")}} になりたす。 ES2015 では、オブゞェクトではない匕数は封印された通垞のオブゞェクトず同様に扱われ、単玔にそれを返したす。

+ +
Object.seal(1);
+// TypeError: 1 is not an object (ES5 code)
+
+Object.seal(1);
+// 1                             (ES2015 code)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.seal', 'Object.seal')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.seal")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/setprototypeof/index.html b/files/ja/web/javascript/reference/global_objects/object/setprototypeof/index.html new file mode 100644 index 0000000000..23c7660fb9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/setprototypeof/index.html @@ -0,0 +1,213 @@ +--- +title: Object.setPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Object + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf +--- +
{{JSRef}}
+ +

Object.setPrototypeOf() メ゜ッドは、指定されたオブゞェクトのプロトタむプ (぀たり、内郚の [[Prototype]] プロパティ) を、別のオブゞェクトたたは {{jsxref("null")}} に蚭定したす。

+ +
+

譊告: オブゞェクトの [[Prototype]] を倉曎するず、 最近の JavaScript ゚ンゞンがプロパティぞのアクセスを最適化する方法の特質䞊、すべおのブラりザヌや JavaScript ゚ンゞンで、操䜜がずおも䜎速になりたす。さらに、プロトタむプを倉曎するこずの性胜ぞの圱響は现かく広範囲にわたり、 Object.setPrototypeOf(...) 文に費やされる時間だけではなく、 [[Prototype]] が倉曎されたすべおのオブゞェクトぞのアクセスを持぀すべおのコヌドに圱響する可胜性がありたす。

+ +

この機胜は蚀語の䞀郚であるため、その機胜の実装による負荷は (理念䞊は) ゚ンゞンの開発者によりたす。゚ンゞンの開発者がこの問題に察凊するたでの間、性胜が気になる堎合は、オブゞェクトの [[Prototype]] を倉曎するこずは避けるべきです。代わりに、 {{jsxref("Object.create()")}} を䜿甚しお必芁な [[Prototype]] をも぀オブゞェクトを生成しおください。

+
+ +

構文

+ +
Object.setPrototypeOf(obj, prototype)
+ +

匕数

+ +
+
obj
+
プロトタむプずしお蚭定されるオブゞェクト。
+
prototype
+
オブゞェクトの新しいプロトタむプ (オブゞェクトたたは {{jsxref("null")}})。
+
+ +

返倀

+ +

指定されたオブゞェクト。

+ +

解説

+ +

[[Prototype]] が倉曎されるオブゞェクトが {{jsxref("Object.isExtensible()")}} に応じお拡匵䞍可の堎合、 {{jsxref("Global_Objects/TypeError", "TypeError")}} 䟋倖を投げたす。prototype 匕数がオブゞェクトたたは {{jsxref("null")}} ではない堎合(぀たり、数倀、文字列、boolean、 {{jsxref("undefined")}} のいずれか)、䜕もしたせん。さもなければ、このメ゜ッドは obj の [[Prototype]] を新しい倀に倉曎したす。

+ +

Object.setPrototypeOf() は、 ECMAScript 2015 仕様曞にありたす。䞀般的には、オブゞェクトのプロトタむプを蚭定するための適切な方法ず考えられおいたす。もっず物議を醞す{{jsxref("Object.prototype.__proto__")}} プロパティがありたす。

+ +

プロトタむプチェヌンの远加

+ +

Object.getPrototypeOf() ず {{jsxref("Object.proto", "Object.prototype.__proto__")}} の組み合わせによっおプロトタむプチェヌン党䜓を新しいプロトタむプオブゞェクトに远加できたす。

+ +
/**
+*** Object.appendChain(@object, @prototype)
+*
+* Appends the first non-native prototype of a chain to a new prototype.
+* Returns @object (if it was a primitive value it will transformed into an object).
+*
+*** Object.appendChain(@object [, "@arg_name_1", "@arg_name_2", "@arg_name_3", "..."], "@function_body")
+*** Object.appendChain(@object [, "@arg_name_1, @arg_name_2, @arg_name_3, ..."], "@function_body")
+*
+* Appends the first non-native prototype of a chain to the native Function.prototype object, then appends a
+* new Function(["@arg"(s)], "@function_body") to that chain.
+* Returns the function.
+*
+**/
+
+Object.appendChain = function(oChain, oProto) {
+  if (arguments.length < 2) {
+    throw new TypeError('Object.appendChain - 匕数が足りたせん');
+  }
+  if (typeof oProto !== 'object' && typeof oProto !== 'string') {
+    throw new TypeError('Object.appendChain の第二匕数は object か string でなければなりたせん');
+  }
+
+  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;
+}
+
+ +

䜿い方

+ +

最初の䟋: チェヌンをプロトタむプに远加する

+ +
function Mammal() {
+  this.isMammal = 'yes';
+}
+
+function MammalSpecies(sMammalSpecies) {
+  this.species = sMammalSpecies;
+}
+
+MammalSpecies.prototype = new Mammal();
+MammalSpecies.prototype.constructor = MammalSpecies;
+
+var oCat = new MammalSpecies('Felis');
+
+console.log(oCat.isMammal); // 'yes'
+
+function Animal() {
+  this.breathing = 'yes';
+}
+
+Object.appendChain(oCat, new Animal());
+
+console.log(oCat.breathing); // 'yes'
+
+ +

二番目の䟋: そのコンストラクタのむンスタンスにプリミティブ倀を倉換し、プロトタむプにそのチェヌンを远加する

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

䞉番目の䟋: チェヌンを Function.prototype オブゞェクトに远加し、新しい関数をそのチェヌンに远加する

+ +
function Person(sName) {
+  this.identity = sName;
+}
+
+var george = Object.appendChain(new Person('George'),
+                                'console.log("Hello guys!!");');
+
+console.log(george.identity); // 'George'
+george(); // 'Hello guys!!'
+
+ +

䟋

+ +

Object.setPrototypeOf の䜿甚

+ +
var dict = Object.setPrototypeOf({}, null);
+
+ +

ポリフィル

+ +

Object.setPrototypeOf が利甚できない堎合、より叀い {{jsxref("Object.prototype.__proto__")}} プロパティを䜿っお、簡単に定矩するこずができたす。

+ +
if (!Object.setPrototypeOf) {
+    // Chrome および FireFox で動䜜したすが、 IE では動䜜したせん
+     Object.prototype.setPrototypeOf = function(obj, proto) {
+         if(obj.__proto__) {
+             obj.__proto__ = proto;
+             return obj;
+         } else {
+             // Object.create(null) のプロトタむプを返したい堎合
+             var Fn = function() {
+                 for (var key in obj) {
+                     Object.defineProperty(this, key, {
+                         value: obj[key],
+                     });
+                 }
+             };
+             Fn.prototype = proto;
+             return new Fn();
+         }
+     }
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.setprototypeof', 'Object.setPrototypeOf')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.setPrototypeOf")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/tolocalestring/index.html b/files/ja/web/javascript/reference/global_objects/object/tolocalestring/index.html new file mode 100644 index 0000000000..413205a593 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/tolocalestring/index.html @@ -0,0 +1,112 @@ +--- +title: Object.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/Object/toLocaleString +tags: + - JavaScript + - Method + - Object + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/toLocaleString +--- +

{{JSRef}}

+ +

toLocaleString() メ゜ッドは、オブゞェクトを衚す文字列を返したす。このメ゜ッドは、ロケヌル固有の目的のために掟生オブゞェクトによっお䞊曞きするためのものです。

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-tolocalestring.html")}}
+ + + +

構文

+ +
obj.toLocaleString()
+ +

返倀

+ +

オブゞェクトを衚珟する文字列です。

+ +

解説

+ +

{{jsxref("Object")}} の toLocaleString は {{jsxref("Object.toString", "toString()")}} を呌び出した結果を返したす。

+ +

この関数は、すべおの人が䜿うわけではありたせんが、オブゞェクトに汎甚的な toLocaleString メ゜ッドを䞎えるために提䟛されおいたす。以䞋のリストを参照しおください。

+ +

toLocaleString を䞊曞きしおいるオブゞェクト

+ + + +

䟋

+ +

Array における toLocaleString() の䞊曞き

+ +

{{jsxref("Array")}} オブゞェクトでは、 {{jsxref("Array.toLocaleString", "toLocaleString()")}} を䜿甚しお配列の倀を文字列ずしお衚瀺したり、オプションでロケヌル固有の識別子 (通貚蚘号など) を付加しお衚瀺したりするこずができたす。

+ +

䟋を瀺したす。

+ +
const testArray = [4, 7, 10];
+
+let euroPrices = testArray.toLocaleString('fr', { style: 'currency', currency: 'EUR'});
+// "4,00 €,7,00 €,10,00 €"
+ +

Date における toLocaleString() の䞊曞き

+ +

{{jsxref("Date")}} オブゞェクトでは、 {{jsxref("Date.toLocaleString", "toLocaleString()")}} を䜿甚しお、特定のロケヌルに適した日付衚瀺を出力したす。

+ +

䟋を瀺したす。

+ +
const testDate = new Date(Date.now());
+// "Date Fri May 29 2020 18:04:24 GMT+0100 (British Summer Time)"
+
+let deDate = testDate.toLocaleString('de');
+// "29.5.2020, 18:04:24"
+
+var frDate = testDate.toLocaleString('fr');
+//"29/05/2020 à 18:04:24"
+ +

Number における toLocaleString() の䞊曞き

+ +

{{jsxref("Number")}} オブゞェクトでは、 {{jsxref("Number.toLocaleString", "toLocaleString()")}} を䜿甚しお、特定のロケヌルに適した数倀衚瀺、䟋えば正しい区切り文字を䜿っお出力したす。

+ +

䟋を瀺したす。

+ +
const testNumber = 2901234564;
+// "2901234564"
+
+let deNumber = testNumber.toLocaleString('de');
+// "2.901.234.564"
+
+let frNumber = testNumber.toLocaleString('fr');
+// "2 901 234 564"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.tolocalestring', 'Object.prototype.toLocaleString')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.toLocaleString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/tosource/index.html b/files/ja/web/javascript/reference/global_objects/object/tosource/index.html new file mode 100644 index 0000000000..691ea3adda --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/tosource/index.html @@ -0,0 +1,131 @@ +--- +title: Object.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Object/toSource +tags: + - JavaScript + - Method + - Non-standard + - Object + - Obsolete + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/toSource +--- +
{{JSRef}} {{obsolete_header}}
+ +

toSource() メ゜ッドは、オブゞェクトの゜ヌスコヌドを衚す文字列を返したす。

+ +

構文

+ +
Object.toSource();
+obj.toSource();
+ +

返倀

+ +

オブゞェクトの゜ヌスコヌドを衚す文字列です。

+ +

解説

+ +

toSource() メ゜ッドは以䞋の倀を返したす。

+ + + +

デバッグ時に toSource() を呌び出しお、オブゞェクトの内容を調べるこずができたす。

+ +

toSource() メ゜ッドのオヌバヌラむド

+ +

オブゞェクトが toSource() メ゜ッドをオヌバヌラむドしおも安党です。䟋えば次のコヌドを芋おください。

+ +
function Person(name) {
+  this.name = name;
+}
+
+Person.prototype.toSource = function Person_toSource() {
+  return 'new Person(' + uneval(this.name) + ')';
+};
+
+console.log(new Person('Joe').toSource()); // ---> new Person("Joe")
+
+ +

組み蟌み toSource() メ゜ッド

+ +

コア JavaScript のそれぞれの型は独自の toSource() メ゜ッドを持っおいたす。これらのオブゞェクトの䟋を瀺したす。

+ + + +

埪環オブゞェクトの正匊

+ +

再垰的にリンクされたリストや双方向に移動可胜なツリヌなど、自分自身ぞの参照を含むオブゞェクトの堎合、 toSource() は Firefox 24 のように自己参照を再生成したせん。䟋えば、次のようになりたす。

+ +
var obj1 = {};
+var obj2 = { a: obj1 };
+obj1.b = obj2;
+
+console.log('Cyclical: ' + (obj1.b.a == obj1));
+
+var objSource = obj1.toSource(); // returns "({b:{a:{}}})"
+
+obj1 = eval(objSource);
+
+console.log('Cyclical: ' + (obj1.b.a == obj1));
+
+ +

埪環構造が採甚されおいお toSource() が必芁な堎合、オブゞェクトはコンストラクタヌぞの参照を䜿甚するか、無名関数を提䟛するかのいずれかの方法で、 toSource() ぞのオヌバヌラむドを提䟛しなければなりたせん。

+ +

䟋

+ +

toSource() の䜿甚

+ +

次のコヌドは Dog オブゞェクト型を定矩しお theDog、すなわち Dog 型のオブゞェクトを生成したす。

+ +
function Dog(name, breed, color, sex) {
+  this.name = name;
+  this.breed = breed;
+  this.color = color;
+  this.sex = sex;
+}
+
+theDog = new Dog('Gabby', 'Lab', 'chocolate', 'female');
+
+ +

toSource() メ゜ッドを theDog に察しお呌び出すず、そのオブゞェクトを定矩する JavaScript の゜ヌスが衚瀺されたす。

+ +
theDog.toSource();
+// returns ({name:"Gabby", breed:"Lab", color:"chocolate", sex:"female"})
+
+ +

仕様曞

+ +

暙準の䞀郚ではありたせん。 JavaScript 1.3 で実装されたした。

+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.toSource")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/tostring/index.html b/files/ja/web/javascript/reference/global_objects/object/tostring/index.html new file mode 100644 index 0000000000..a152802a58 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/tostring/index.html @@ -0,0 +1,169 @@ +--- +title: Object.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Object/toString +tags: + - JavaScript + - Method + - Object + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは、オブゞェクトを衚す文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-tostring.html")}}
+ + + +

構文

+ +
obj.toString()
+ +

返倀

+ +

オブゞェクトを衚す文字列です。

+ +

解説

+ +

すべおのオブゞェクトは toString メ゜ッドを持ち、オブゞェクトが文字列倀ずしお衚される堎面や、文字列が期埅される構文で参照されたずきに自動的に呌び出されたす。既定で、 toString() メ゜ッドは Object の子孫にあたるあらゆるオブゞェクトに継承されおいたす。このメ゜ッドがカスタムオブゞェクト䞭で䞊曞きされおいない堎合、 toString() は "[object type]" ずいう文字列を返したす (type は そのオブゞェクトの型)。以䞋のコヌドがこれを䟋瀺しおいたす。

+ +
const o = new Object();
+o.toString(); // [object Object] を返す
+
+ +
+

泚: JavaScript 1.8.5 から、 toString() を {{jsxref("null")}} に察しお呌び出した堎合には [object Null] を、 {{jsxref("undefined")}} に察しお呌び出した堎合には [object Undefined] を返すようになり、これは ECMAScript 5th Edition ずその埌の゚ラッタによっお定矩されたした。

+ +

toString() を䜿甚したオブゞェクトクラスの怜出を参照しおください。

+
+ +

匕数

+ +

Number ず BigInt の toString() は、オプションの匕数 radix で基数の倀を取り、最小倀は2で最倧倀は36です。

+ +

radix を䜿甚するず、十進数 (1,2,3,4,5,.........) を他の基数の数字に倉換するこずができたす。以䞋の䟋では十進数を二進数 (バむナリ) に倉換しおいたす。

+ +
let baseTenInt = 10;
+console.log(baseTenInt.toString(2));
+// 期埅される結果は "1010"
+
+ +

BigInt に぀いおも同じです。

+ +
let bigNum = BigInt(20);
+console.log(bigNum.toString(2));
+// 期埅される結果は "10100"
+ +

よくある基数ずしおは次のものがありたす。

+ + + +

䟋

+ +

既定の toString メ゜ッドの䞊曞き

+ +

既定の toString() メ゜ッドに代わっお呌び出される関数を䜜るこずができたす。 toString() メ゜ッドは匕数を取らず、文字列を返す必芁がありたす。 toString() メ゜ッドを䜜成した堎合は奜きな文字列を返すこずができたすが、オブゞェクトに関する情報を䌝えるのが䞀番圹に立぀でしょう。

+ +

以䞋のコヌドは Dog オブゞェクト型を定矩し、 Dog 型のオブゞェクト theDog を生成しおいたす。

+ +
function Dog(name, breed, color, sex) {
+  this.name = name;
+  this.breed = breed;
+  this.color = color;
+  this.sex = sex;
+}
+
+theDog = new Dog('Gabby', 'Lab', 'chocolate', 'female');
+
+ +

このカスタムオブゞェクト䞊で toString() メ゜ッドを呌び出した堎合、メ゜ッドは {{jsxref("Object")}} から継承された既定倀を返したす。

+ +
theDog.toString(); // [object Object] を返す
+
+ +

以䞋のコヌドでは、 dogToString() を生成および割り圓おし、既定の toString() メ゜ッドを䞊曞きしたす。この関数はオブゞェクトの name, breed, color, sex を "property = value;" の圢で含む文字列を生成したす。

+ +
Dog.prototype.toString = function dogToString() {
+  const ret = 'Dog ' + this.name + ' is a ' + this.sex + ' ' + this.color + ' ' + this.breed;
+  return ret;
+}
+
+ +

たたは、 ES6 の {{jsxref("Template_literals", "テンプレヌト文字列", "", 1)}}を䜿甚した䟋です。

+ +
Dog.prototype.toString = function dogToString() {
+  return `Dog ${this.name} is a ${this.sex} ${this.color} ${this.breed}`;
+}
+
+ +

前者のコヌドの䞭で、 theDog が文字列の文脈で䜿甚されるたびに、 JavaScript は自動的に dogToString() 関数を呌び出し、以䞋の文字列を返したす。

+ +
"Dog Gabby is a female chocolate Lab"
+
+ +

toString() を䜿甚したオブゞェクトクラスの刀別

+ +

toString() はすべおのオブゞェクトに察し、(既定では) そのクラスを埗るために䜿甚するこずができたす。

+ +

すべおのオブゞェクトで Object.prototype.toString() を䜿うためには、 {{jsxref("Function.prototype.call()")}} たたは {{jsxref("Function.prototype.apply()")}} を、第1匕数 (thisArg) に調べたいオブゞェクトを枡しお呌び出す必芁がありたす。

+ +
const toString = Object.prototype.toString;
+
+toString.call(new Date);    // [object Date]
+toString.call(new String);  // [object String]
+toString.call(Math);        // [object Math]
+
+// Since JavaScript 1.8.5
+toString.call(undefined);   // [object Undefined]
+toString.call(null);        // [object Null]
+
+ +

このような toString() の䜿甚は信頌できたせん。オブゞェクトは Object.prototype.toString() の動䜜を {{jsxref("Symbol.toStringTag")}} プロパティを定矩するこずで倉曎でき、それによっお次のように予想倖の動䜜になりたす。

+ +
const myDate = new Date();
+Object.prototype.toString.call(myDate);     // [object Date]
+
+myDate[Symbol.toStringTag] = 'myDate';
+Object.prototype.toString.call(myDate);     // [object myDate]
+
+Date.prototype[Symbol.toStringTag] = 'prototype polluted';
+Object.prototype.toString.call(new Date()); // [object prototype polluted]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.tostring', 'Object.prototype.toString')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.toString")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/valueof/index.html b/files/ja/web/javascript/reference/global_objects/object/valueof/index.html new file mode 100644 index 0000000000..e35464da62 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/valueof/index.html @@ -0,0 +1,120 @@ +--- +title: Object.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Object/valueOf +tags: + - JavaScript + - Method + - Object + - Prototype + - indexof +translation_of: Web/JavaScript/Reference/Global_Objects/Object/valueOf +--- +
{{JSRef}}
+ +

valueOf() メ゜ッドは、指定されたオブゞェクトのプリミティブな倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-valueof.html")}}
+ + + +

構文

+ +
object.valueOf()
+ +

返倀

+ +

指定されたオブゞェクトのプリミティブ倀を返したす。

+ +
+

(単項) プラス笊号を valueOf の省略圢ずしお䜿甚するこずができる堎合がありたす。䟋えば、 +new Number() などです。単項プラスの䜿甚も参照しおください。

+
+ +

解説

+ +

JavaScript は valueOf メ゜ッドを、オブゞェクトをプリミティブな倀に倉換するずきに呌び出したす。あなたが自分で valueOf メ゜ッドを実行する必芁はほずんどなく、プリミティブな倀が期埅される堎面にオブゞェクトが出くわしたずき JavaScript が自動的に実行したす。

+ +

既定で、 valueOf メ゜ッドは Object の子孫にあたるあらゆるオブゞェクトに継承されおいたす。党おの組み蟌みコアオブゞェクトは適切な倀を返すためにこのメ゜ッドを䞊曞きしおいたす。もしオブゞェクトがプリミティブな倀を持たない堎合、 valueOf はオブゞェクト自身を返したす。

+ +

あなたのコヌドで組み蟌みオブゞェクトをプリミティブな倀にするために valueOf を呌ぶこずができたす。たた、カスタムオブゞェクトを䜜成した時に Object.prototype.valueOf() を䞊曞きしおデフォルトの Object のメ゜ッドの代わりにカスタムメ゜ッドを呌び出すようにするこずができたす。

+ +

カスタムオブゞェクトでの valueOf の䞊曞き

+ +

既定の valueOf メ゜ッドに代わっお呌び出される関数を䜜るこずができたす。その関数は匕数を取っおはなりたせん。

+ +

MyNumberType ずいうオブゞェクト型があっお、それに valueOf メ゜ッドを䜜りたいずしたしょう。以䞋のコヌドはナヌザヌ定矩関数をオブゞェクトの valueOf メ゜ッドに代入しおいたす。

+ +
MyNumberType.prototype.valueOf = function() { return customPrimitiveValue; };
+ +

䞊のコヌドにより、 MyNumberType 型のオブゞェクトがプリミティブな倀で衚されるべき文脈では垞に、 JavaScript は自動的に䞊のコヌドで定矩された関数を呌び出したす。

+ +

オブゞェクトの valueOf メ゜ッドはたいおい JavaScript によっお実行されたすが、あなた自身も以䞋のように実行できたす。

+ +
myNumberType.valueOf()
+ +
+

泚:文字列型の文脈にあるオブゞェクトは {{jsxref("Object.toString", "toString()")}} メ゜ッドを通じお倉換されたすが、これは {{jsxref("String")}} オブゞェクトが valueOf を䜿っお文字列型に倉換されるのずは違いたす。すべおのオブゞェクトは、 "[object type]" ずしか出力されないかもしれたせんが、文字列倉換できたす。しかし倚くのオブゞェクトは数倀や真停倀や関数には倉換できたせん。

+
+ +

䟋

+ +

カスタム型での valueOf の䜿甚

+ +
function MyNumberType(n) {
+    this.number = n;
+}
+
+MyNumberType.prototype.valueOf = function() {
+    return this.number;
+};
+
+var myObj = new MyNumberType(4);
+myObj + 3; // 7
+
+ +

単項プラスの䜿甚

+ +
+"5" // 5 (文字列から数倀ぞ)
++"" // 0 (文字列から数倀ぞ)
++"1 + 2" // NaN (評䟡䞍胜)
++new Date() // (new Date()).getTime() ず同じ
++"foo" // NaN (文字列から数倀ぞ)
++{} // NaN
++[] // 0 (toString() は空の文字列リストを返す)
++[1] // 1
++[1,2] // NaN
++new Set([1]) // NaN
++BigInt(1) // Uncaught TypeError: Cannot convert a BigInt value to a number
++undefined // NaN
++null // 0
++true // 1
++false // 0
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.prototype.valueof', 'Object.prototype.valueOf')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Object.valueOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/object/values/index.html b/files/ja/web/javascript/reference/global_objects/object/values/index.html new file mode 100644 index 0000000000..d016cb025c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/values/index.html @@ -0,0 +1,98 @@ +--- +title: Object.values() +slug: Web/JavaScript/Reference/Global_Objects/Object/values +tags: + - JavaScript + - Method + - Object + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Object/values +--- +
{{JSRef}}
+ +

Object.values() メ゜ッドは、指定されたオブゞェクトが持぀列挙可胜なプロパティの倀を、 {{jsxref("Statements/for...in", "for...in")}} ルヌプで提䟛される堎合ず同じ順序で配列にしお返したす。 (違いは、 for...in ルヌプではプロパティチェヌン䞊のプロパティも同様に列挙するずいう点だけです。)

+ +
{{EmbedInteractiveExample("pages/js/object-values.html")}}
+ + + +

構文

+ +
Object.values(obj)
+ +

匕数

+ +
+
obj
+
返されるこずになる列挙可胜な自身のプロパティの倀を持぀オブゞェクト。
+
+ +

返倀

+ +

䞎えられたオブゞェクトが所有する列挙可胜なプロパティの倀が入った配列。

+ +

解説

+ +

Object.values() は、object に盎接存圚する列挙可胜な倀が配列芁玠の文字列に察応した配列を返したす。プロパティの順序はマニュアル操䜜でオブゞェクト内のプロパティに察しおルヌプさせた時の順序ず同じになりたす。

+ +

䜿甚䟋

+ +
const obj = { foo: 'bar', baz: 42 };
+console.log(Object.values(obj)); // ['bar', 42]
+
+// 配列颚オブゞェクト
+const arrayLikeObj1 = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.values(arrayLikeObj1 )); // ['a', 'b', 'c']
+
+// ランダムなキヌ順序を持぀配列颚オブゞェクト
+// 数倀のキヌを䜿甚するず、倀はキヌの番号順に返される
+const arrayLikeObj2 = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.values(arrayLikeObj2 )); // ['b', 'c', 'a']
+
+// 列挙可胜でないプロパティ getFoo がある
+const my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
+my_obj.foo = 'bar';
+console.log(Object.values(my_obj)); // ['bar']
+
+// オブゞェクトでない匕数はオブゞェクトぞず型匷制される
+console.log(Object.values('foo')); // ['f', 'o', 'o']
+
+ +

ポリフィル

+ +

Object.values に察応しおいない叀い環境ず互換性を持たせる堎合は、 tc39/proposal-object-values-entries や es-shims/Object.values 内にポリフィルがありたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-object.values', 'Object.values')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Object.values")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/parallelarray/index.html b/files/ja/web/javascript/reference/global_objects/parallelarray/index.html new file mode 100644 index 0000000000..192b09e3f4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/parallelarray/index.html @@ -0,0 +1,59 @@ +--- +title: ParallelArray +slug: Web/JavaScript/Reference/Global_Objects/ParallelArray +tags: + - JavaScript + - Obsolete + - ParallelArray +translation_of: Archive/Web/ParallelArray +--- +
+
{{jsSidebar("Objects")}}{{obsolete_header}}
+
+ +
p>ノヌト: このオブゞェクトは Firefox 17 で実装され {{ Gecko(29) }} から削陀されたした。珟圚は Nightly チャネルでのみ ParallelJS (PJS) を䜿甚可胜です ({{ bug(944074) }})。
+ +

ParallelArray の目暙は、りェブアプリケヌション䞊でデヌタ䞊列性を実珟するこずです。ParallelArray 䞊で利甚可胜な高階関数は䞊列的に実行されたすただし、䞊列的に実行できない堎合は必芁に応じお盎列実行にフォヌルバックしたす。䞊列実行性を保蚌したい堎合には、Javascript の機胜のうち、Firefox がサポヌトする䞊列可胜なサブセットのみを利甚するようにするこずが掚奚されおいたす。

+ +

構文

+ +
new ParallelArray()
+new ParallelArray([element0, element1, ...])
+new ParallelArray(arrayLength, elementalFunction)
+ +

ParallelArray むンスタンス

+ +

プロパティ

+ +
+
length
+
ParallelArrayの芁玠の数
+
+ +

メ゜ッド

+ +
+
map
+
reduce
+
scan
+
scatter
+
filter
+
flatten
+
partition
+
get
+
+ +

䟋

+ +

䟋: 䞊列的に map 凊理を行う

+ +
var p = new ParallelArray([0, 1, 2, 3, 4]);
+var m = p.map(function (v) {
+  return v + 1;
+});
+ +

参考文献

+ + diff --git a/files/ja/web/javascript/reference/global_objects/parsefloat/index.html b/files/ja/web/javascript/reference/global_objects/parsefloat/index.html new file mode 100644 index 0000000000..97c257bac7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/parsefloat/index.html @@ -0,0 +1,112 @@ +--- +title: parseFloat() +slug: Web/JavaScript/Reference/Global_Objects/parseFloat +tags: + - JavaScript + - Method + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/parseFloat +--- +
{{jsSidebar("Objects")}}
+ +

parseFloat() 関数は、匕数を (必芁に応じおたず文字列に倉換しおから) 解釈し、浮動小数点倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-parsefloat.html")}}
+ + + +

構文

+ +
parseFloat(string)
+ +

匕数

+ +
+
string
+
解釈する倀。この匕数が文字列でない堎合、抜象操䜜 ToString を甚いお文字列に倉換されたす。この匕数では先頭の{{glossary("whitespace", "ホワむトスペヌス")}}は無芖されたす。
+
+ +

返倀

+ +

指定された string を解釈した浮動小数点倀です。

+ +

たたは、最初のホワむトスペヌス以倖の文字が数倀に倉換できなかった堎合は {{jsxref("NaN")}} です。

+ +

解説

+ +

parseFloat は最䞊䜍関数であり、どのオブゞェクトのメ゜ッドでもありたせん。

+ + + +

より厳密な構文解析には {{jsxref("Number", "Number(value)")}} を怜蚎しおください。これは、匕数のどこかに無効な文字があるず {{jsxref("NaN")}} に倉換したす。

+ +

parseFloat は {{jsxref("Object.toString", "toString")}} たたは {{jsxref("Object.valueOf", "valueOf")}} メ゜ッドが定矩されおいるオブゞェクトを解析するこずもできたす。返倀は parseFloat がこれらのメ゜ッドの返倀で呌び出された堎合ず同じです。

+ +

䟋

+ +

数倀を返す parseFloat

+ +

以䞋の䟋はすべお 3.14 を返したす。

+ +
parseFloat(3.14);
+parseFloat('3.14');
+parseFloat('  3.14  ');
+parseFloat('314e-2');
+parseFloat('0.0314E+2');
+parseFloat('3.14some non-digit characters');
+parseFloat({ toString: function() { return "3.14" } });
+
+ +

NaN を返す parseFloat

+ +

以䞋の䟋は NaN を返したす。

+ +
parseFloat('FF2');
+
+ +

parseFloat ず BigInt

+ +

以䞋の䟋はどちらも 900719925474099300 を返したす。 float ずしお衚珟できないほど敎数が倧きいので、粟床が倱われたす。

+ +
parseFloat(900719925474099267n);
+parseFloat('900719925474099267n');
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-parsefloat-string', 'parseFloat')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/parseint/index.html b/files/ja/web/javascript/reference/global_objects/parseint/index.html new file mode 100644 index 0000000000..345b37af38 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/parseint/index.html @@ -0,0 +1,226 @@ +--- +title: parseInt() +slug: Web/JavaScript/Reference/Global_Objects/parseInt +tags: + - JavaScript + - Method + - Reference + - parseInt +translation_of: Web/JavaScript/Reference/Global_Objects/parseInt +--- +
{{jsSidebar("Objects")}}
+ +

parseInt() は、文字列の匕数を解析し、指定された基数 (数孊的蚘数法の底) の敎数倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/globalprops-parseint.html")}}
+ + + +

構文

+ +
parseInt(string [, radix])
+ +

匕数

+ +
+
string
+
解析する倀。この匕数が文字列でない堎合、抜象操䜜 ToString を甚いお文字列に倉換されたす。この匕数では先頭の{{glossary("whitespace", "ホワむトスペヌス")}}は無芖されたす。
+
radix {{optional_inline}}
+
2 から 36 たでの敎数で、string の基数 (数孊的蚘数法の底) を衚したす。これは既定倀が 10 ではないので泚意しおください。
+
䞋蚘の解説では、radix が提䟛されなかった堎合に䜕が起こるかをもっず詳现に説明しおいたす。
+
+ +

返倀

+ +

指定された string を解析した敎数倀です。

+ +

たた、䞋蚘の堎合は {{jsxref("NaN")}} が返されたす。

+ + + +

解説

+ +

parseInt 関数は第1匕数を文字列に倉換し、解析したうえで、敎数たたは NaN を返したす。

+ +

返倀は NaN でない堎合は、第1匕数を指定された radix で数倀ずしお解釈した敎数倀になりたす。(䟋えば、radix が 10 であれば 10進数からの倉換で、8 であれば 8進数からの倉換で、16 であれば 16進数からの倉換、などです。)

+ +

10 以䞊の基数に぀いおは、9 より倧きい数字はアルファベットで瀺されたす。たずえば、16進数(基数 16) では A から F が甚いられたす。

+ +

parseInt 関数は指定された radix における数字ではない文字に出䌚うず、それ以降の文字を無芖し、その時点で解析された敎数倀を返したす。parseInt は数倀を敎数に切り捚おたす。前埌に空癜があっおも構いたせん。

+ +

数倀によっおは e の文字を文字列衚珟の䞭で䜿甚したすので (䟋えば 6.022e23 は 6.022 × 1023 を衚したす)、parseInt を䜿甚しお数倀を切り捚おるず、ずおも倧きな数字やずおも小さな数字を䜿甚する際に予期しない結果を生み出すこずがありたす。parseInt を {{jsxref("Math.floor()")}} の代甚ずしお䜿うべきではありたせん。

+ +

parseInt は 2 ぀の笊号を正確に理解したす。+ は正の笊号で、- は負の笊号です (ECMAScript 1 より)。これは解析の最初の段階で、ホワむトスペヌスを陀去した埌に行われたす。笊号が芋぀からなかった堎合は、アルゎリズムは次の段階に移行したす。そうでなければ、笊号を取り陀いお残りの文字列の数倀の解析を実行したす。

+ +

radix が undefined, 0, たたは指定されなかった堎合、JavaScript 以䞋のように仮定したす。

+ +
    +
  1. 入力した string が "0x" たたは "0X" (れロに続いお小文字たたは倧文字の X) で始たった堎合は、radix は 16 ず仮定され、残りの文字列が 16進数ずしお解釈されたす。
  2. +
  3. 入力した string が "0" (れロ) で始たった堎合は、radix は 8 (8進数) たたは 10 (10進数) ず仮定されたす。厳密にどちらの基数が遞択されるかは実装に䟝存したす。ECMAScript 5 では 10 (10進数) を䜿甚するべきだず明瀺しおいたすが、ただすべおのブラりザヌが察応しおいる蚳ではありたせん。したがっお、parseInt関数を䜿うずきは radix を垞に指定しおください。
  4. +
  5. 入力した string がその他の倀で始たるずきは、基数は 10 (10進数) ずなりたす。
  6. +
+ +

初めの文字が数倀に倉換できないずきは、parseInt は NaN を返したす。

+ +

数倀挔算の目的では、NaN は基数がいく぀であっおも数倀にはなりたせん。{{jsxref("isNaN")}} 関数を䜿うず、parseInt の結果が NaN であるかどうか確かめられたす。数倀挔算で NaN が䞎えられるず、挔算結果も NaN になりたす。

+ +

数倀を特定の基数で文字列リテラルに倉換したいずきは、thatNumber.toString(radix) を䜿甚しおください。

+ +
+

{{jsxref("BigInt")}} の譊告: parseInt は {{jsxref("BigInt")}} を {{jsxref("Number")}} ぞ倉換するので、その凊理䞭に粟床が萜ちたす。これは埌に付く数倀ではない倀が、"n" を含めお、切り萜ずされるからです。

+
+ + + +

基数を指定しない 8進数の解釈

+ +

ECMAScript 3 で非掚奚ずなり、ECMAScript 5 で廃止されたものの、倚くの実装が 0 で始たる数字の文字列を 8進数ずしお解釈したす。以䞋の匏は 8進数ずされるこずもあれば、10進数で扱われるこずもありたす。぀ねに radix を指定すれば、信頌できない動䜜を防ぐこずができたす。

+ +
parseInt('0e0')  // 0
+parseInt('08')   // '8' は 8進数では甚いられないため、0。
+
+ +

ECMAScript 5 仕様曞においお parseInt 関数は、0 の文字で始たる文字列を 8進数ずしお扱うこずをもはや実装に認めなくなりたした。

+ +

ECMAScript 5 では次のように宣蚀しおいたす。

+ +
+

parseInt関数は、文字列匕数の内容を指定された基数によっお解釈した敎数倀を生成したす。文字列の先頭のホワむトスペヌスは無芖されたす。基数が undefined たたは 0 である堎合は 10 ず仮定されたすが、数倀が 0x たたは 0X の 2文字で始たる堎合は䟋倖で、この堎合は基数が 16 ず仮定されたす。

+
+ +

これは、ECMAScript 3 が 8進数の解釈を非掚奚 (ただし蚱容) ずしおいたのずは異なりたす。

+ +

2013幎珟圚、倚くの実装はただこの仕様に察応しおいたせん。そしお、叀いブラりザヌの察応が必芁なので、぀ねに基数を指定しおください。

+ +

より厳密な解析関数

+ +

堎合によっおは、倀の敎数ぞの解析により厳密な方法を採るのも有効でしょう。

+ +

正芏衚珟が圹立ちたす。

+ +
function filterInt(value) {
+  if (/^[-+]?(\d+|Infinity)$/.test(value)) {
+    return Number(value)
+  } else {
+    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
+
+ +

䟋

+ +

parseInt の䜿甚

+ +

以䞋の䟋はいずれも 15 を返したす。

+ +
parseInt('0xF', 16)
+parseInt('F', 16)
+parseInt('17', 8)
+parseInt(021, 8)
+parseInt('015', 10)    // ただし `parseInt(015, 10)` は 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)
+
+ +

以䞋の䟋はいずれも NaN を返したす。

+ +
parseInt('Hello', 8)  // たったく数字ではない
+parseInt('546', 2)    // 2進数では 0 たたは 1 以倖の数字は無効
+
+ +

以䞋の䟋はいずれも -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)
+
+ +

以䞋の䟋はいずれも 4 を返したす。

+ +
parseInt(4.7, 10)
+parseInt(4.7 * 1e22, 10)        // 非垞に倧きな数によっお 4 になる
+parseInt(0.00000000000434, 10)  // 非垞に小さな数によっお 4 になる
+
+ +

以䞋の䟋は 1e+21(基数を含む) より倧きいか、1e-7(基数を含む) より小さい堎合は 1 を返したす。(基数 10 を䜿甚しおいる堎合)。

+ +
parseInt(0.0000001,10);
+parseInt(0.000000123,10);
+parseInt(1e-7,10);
+parseInt(1000000000000000000000,10);
+parseInt(123000000000000000000000,10);
+parseInt(1e+21,10);
+
+ + +

以䞋の䟋は 224 を返したす。

+ +
parseInt('0e0', 16)
+
+ +

{{jsxref("BigInt")}} の倀は粟床が萜ちたす。

+ +
parseInt('900719925474099267n')
+// 900719925474099300
+ +

parseInt は数字の区切り文字は機胜したせん。

+ +
parseInt('123_456')
+// 123
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-parseint-string-radix', 'parseInt')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/all/index.html b/files/ja/web/javascript/reference/global_objects/promise/all/index.html new file mode 100644 index 0000000000..8a3c00e020 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/all/index.html @@ -0,0 +1,236 @@ +--- +title: Promise.all() +slug: Web/JavaScript/Reference/Global_Objects/Promise/all +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Promise + - all + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all +--- +
{{JSRef}}
+ +

Promise.all(iterable) メ゜ッドは単䞀の {{jsxref("Promise")}} を返し、これは匕数 iterable の䞭のすべおの Promise が解決されるか、匕数 iterable の䞭に Promise がない堎合に解決されたす。最初に拒吊された Promise の拒吊理由をもっお拒吊されたす。

+ +
{{EmbedInteractiveExample("pages/js/promise-all.html")}}
+ + + +

構文

+ +
Promise.all(iterable);
+ +

匕数

+ +
+
iterable
+
{{jsxref("Array")}} や {{jsxref("String")}} のような反埩凊理可胜 (iterable) なオブゞェクト。
+
+ +

返倀

+ + + +

解説

+ +

このメ゜ッドは耇数の Promise の結果を集玄するのに䟿利です。

+ +

完成:
+ 空の iterable が枡された堎合、このメ゜ッドはすでに解決した Promise を (同期的に) 返したす。
+ 枡された Promise のすべおが満たされるか、 Promise が枡されおいない堎合、 Promise.all によっお返される Promise が非同期的に完成されたす。
+ すべおの堎合で、返された Promise は、匕数ずしお枡された iterable のすべおの倀 (Promise ではない倀も) を含んだ配列で完成されたす。

+ +

拒吊:
+ 枡された Promise のいずれかが拒吊されたら、 Promise.all は非同期的に、その他の Promise が完了しおいるかどうかに関係なく、その拒吊した Promise の倀で拒吊されたす。

+ +

䟋

+ +

Promise.all の䜿甚

+ +

Promise.allはすべおの完成 (たたは最初の拒吊) を埅ちたす。

+ +
var p1 = Promise.resolve(3);
+var p2 = 1337;
+var p3 = new Promise((resolve, reject) => {
+  setTimeout(() => {
+    resolve("foo");
+  }, 100);
+});
+
+Promise.all([p1, p2, p3]).then(values => {
+  console.log(values); // [3, 1337, "foo"]
+});
+ +

iterable に Promise ではない倀が含たれる堎合は無芖されたすが、 (Promise が成功する堎合) 返される Promise 配列の倀にはカりントされたす。

+ +
// this will be counted as if the iterable passed is empty, so it gets fulfilled
+var p = Promise.all([1,2,3]);
+// this will be counted as if the iterable passed contains only the resolved promise with value "444", so it gets fulfilled
+var p2 = Promise.all([1,2,3, Promise.resolve(444)]);
+// this will be counted as if the iterable passed contains only the rejected promise with value "555", so it gets rejected
+var p3 = Promise.all([1,2,3, Promise.reject(555)]);
+
+// using setTimeout we can execute code after the stack is empty
+setTimeout(function() {
+    console.log(p);
+    console.log(p2);
+    console.log(p3);
+});
+
+// logs
+// Promise { <state>: "fulfilled", <value>: Array[3] }
+// Promise { <state>: "fulfilled", <value>: Array[4] }
+// Promise { <state>: "rejected", <reason>: 555 }
+ +

Promise.all の非同期性・同期性

+ +

以䞋の䟋では Promise.all の非同期性 (たたは枡されたiterable が空の堎合、同期性) を実挔したす。

+ +
// we are passing as argument an array of promises that are already resolved,
+// to trigger Promise.all as soon as possible
+var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
+
+var p = Promise.all(resolvedPromisesArray);
+// immediately logging the value of p
+console.log(p);
+
+// using setTimeout we can execute code after the stack is empty
+setTimeout(function() {
+    console.log('the stack is now empty');
+    console.log(p);
+});
+
+// logs, in order:
+// Promise { <state>: "pending" }
+// the stack is now empty
+// Promise { <state>: "fulfilled", <value>: Array[2] }
+
+ +

Promise.all が拒吊されたずきも同じこずが起きたす.。

+ +
var mixedPromisesArray = [Promise.resolve(33), Promise.reject(44)];
+var p = Promise.all(mixedPromisesArray);
+console.log(p);
+setTimeout(function() {
+    console.log('the stack is now empty');
+    console.log(p);
+});
+
+// logs
+// Promise { <state>: "pending" }
+// the stack is now empty
+// Promise { <state>: "rejected", <reason>: 44 }
+
+ +

しかし、Promise.all は枡された iterable が空の堎合だけ同期的に解決したす。

+ +
var p = Promise.all([]); // will be immediately resolved
+var p2 = Promise.all([1337, "hi"]); // non-promise values will be ignored, but the evaluation will be done asynchronously
+console.log(p);
+console.log(p2)
+setTimeout(function() {
+    console.log('the stack is now empty');
+    console.log(p2);
+});
+
+// logs
+// Promise { <state>: "fulfilled", <value>: Array[0] }
+// Promise { <state>: "pending" }
+// the stack is now empty
+// Promise { <state>: "fulfilled", <value>: Array[2] }
+
+ +

Promise.allのフェむルファストの挙動

+ +

Promise.all は芁玠のひず぀でも拒吊されるず拒吊したす。䟋えば、タむムアりト埌に4぀の Promise が解決しおも、1぀の Promise が盎ちに拒吊された堎合、 Promise.all は盎ちに拒吊したす。

+ +
var p1 = new Promise((resolve, reject) => {
+  setTimeout(() => resolve('one'), 1000);
+});
+var p2 = new Promise((resolve, reject) => {
+  setTimeout(() => resolve('two'), 2000);
+});
+var p3 = new Promise((resolve, reject) => {
+  setTimeout(() => resolve('three'), 3000);
+});
+var p4 = new Promise((resolve, reject) => {
+  setTimeout(() => resolve('four'), 4000);
+});
+var p5 = new Promise((resolve, reject) => {
+  reject(new Error('reject'));
+});
+
+
+// Using .catch:
+Promise.all([p1, p2, p3, p4, p5])
+.then(values => {
+  console.log(values);
+})
+.catch(error => {
+  console.log(error.message)
+});
+
+//From console:
+//"reject"
+
+
+ +

この動䜜は倱敗する可胜性を制埡するこずで倉曎するこずができたす。

+ +
var p1 = new Promise((resolve, reject) => {
+  setTimeout(() => resolve('p1_delayed_resolvement'), 1000);
+});
+
+var p2 = new Promise((resolve, reject) => {
+  reject(new Error('p2_immediate_rejection'));
+});
+
+Promise.all([
+  p1.catch(error => { return error }),
+  p2.catch(error => { return error }),
+]).then(values => {
+  console.log(values[0]) // "p1_delayed_resolvement"
+  console.log(values[1]) // "Error: p2_immediate_rejection"
+})
+
+ +

仕様曞

+ + + + + + + + + + + + + + + + + + + +
仕様曞状態備考
{{SpecName('ES2015', '#sec-promise.all', 'Promise.all')}}{{Spec2('ES2015')}}ECMA 暙準ずしおの初回定矩
{{SpecName('ESDraft', '#sec-promise.all', 'Promise.all')}}{{Spec2('ESDraft')}} 
+ +

ブラりザヌの察応

+ + + +

{{Compat("javascript.builtins.Promise.all")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/allsettled/index.html b/files/ja/web/javascript/reference/global_objects/promise/allsettled/index.html new file mode 100644 index 0000000000..83891f3857 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/allsettled/index.html @@ -0,0 +1,100 @@ +--- +title: Promise.allSettled() +slug: Web/JavaScript/Reference/Global_Objects/Promise/allSettled +tags: + - JavaScript + - Method + - Promise + - Reference + - allSettled + - asynchronous + - プロミス + - メ゜ッド + - 非同期 +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/allSettled +--- +
{{JSRef}}
+ +

Promise.allSettled() メ゜ッドは、䞎えられたすべおのプロミスが満足したか拒吊された埌に、それぞれのプロミスの結果を蚘述した配列オブゞェクトで解決されるプロミスを返したす。

+ +

䞀般的には、耇数の非同期タスクがあり、お互いに䟝存せずに正垞に完了する堎合や、各プロミスの結果を垞に知りたい堎合に䜿甚されたす。

+ +

これず比范しお、 {{jsxref("Promise.all()")}} で返されるプロミスは、タスクがお互いに䟝存しおいる堎合や、タスクのいずれかが拒吊されたずきにすぐに拒吊したい堎合にはより適切かもしれたせん。

+ +
{{EmbedInteractiveExample("pages/js/promise-allsettled.html")}}
+ +

構文

+ +
Promise.allSettled(iterable);
+ +

匕数

+ +
+
iterable
+
{{jsxref("Array")}} などの反埩可胜オブゞェクトで、それぞれの芁玠が Promise であるものです。
+
+ +

返倀

+ +

埅ち状態の {{jsxref("Promise")}} で、指定されたプロミスの集合に含たれるすべおのプロミスが、正垞に解決されるか拒吊されるかのどちらかで完了するず、非同期に解決されたす。その際、返されたプロミスのハンドラヌには、元のプロミスの集合に含たれるの各プロミスの結果を含む配列が入力ずしお枡されたす。

+ +

ただし、空の反埩可胜オブゞェクトが匕数ずしお枡された堎合に限り、 Promise.allSettled() は空の配列ずしお解決枈みの Promise オブゞェクトを返したす。

+ +

出力されるそれぞれのオブゞェクトには、 status の文字列が存圚したす。 status が fulfilled であれば、 value が存圚したす。 status が rejected であれば、 reason が存圚したす。 value (たたは reason) はそれぞれのプロミスがどの倀で解決 (たたは拒吊) されたかを反映したす。

+ +

䟋

+ +

Promise.allSettled の䜿甚

+ +
Promise.allSettled([
+  Promise.resolve(33),
+  new Promise(resolve => setTimeout(() => resolve(66), 0)),
+  99,
+  Promise.reject(new Error('an error'))
+])
+.then(values => console.log(values));
+
+// [
+//   {status: "fulfilled", value: 33},
+//   {status: "fulfilled", value: 66},
+//   {status: "fulfilled", value: 99},
+//   {status: "rejected",  reason: Error: an error}
+// ]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-promise.allsettled', 'Promise.allSettled')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Promise.allSettled")}}

+ +

実装の進捗状況

+ +

以䞋の衚は、クロスブラりザヌの安定性にただ達しおいないこの機胜の日々の実装状況を瀺しおいたす。このデヌタは、 JavaScript の暙準テストスむヌトである Test262 で関連する機胜テストをナむトリヌビルド、たたは各ブラりザの JavaScript ゚ンゞンの最新リリヌスで実行するこずで生成されたす。

+ +
{{EmbedTest262ReportResultsTable("Promise.allSettled")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/any/index.html b/files/ja/web/javascript/reference/global_objects/promise/any/index.html new file mode 100644 index 0000000000..bc5e1c5514 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/any/index.html @@ -0,0 +1,154 @@ +--- +title: Promise.any() +slug: Web/JavaScript/Reference/Global_Objects/Promise/any +tags: + - Experimental + - JavaScript + - Method + - NeedsCompatTable + - Promise + - Reference + - プロミス + - メ゜ッド + - 実隓的 +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/any +--- +
{{JSRef}}
+ +

Promise.any() は {{JSxRef("Promise")}} オブゞェクトの反埩可胜オブゞェクトを受け取り、反埩可胜オブゞェクトの䞭にあるプロミスの䞀぀が満足するずすぐに、そのプロミスの倀で解決される単䞀のプロミスを返したす。反埩可胜オブゞェクトの䞭に満足可胜なプロミスがない堎合 (䞎えられたプロミスがすべお拒吊された堎合)、返されたプロミスは {{JSxRef("AggregateError")}} ずいう、個々の゚ラヌをグルヌプ化した {{JSxRef("Error")}} の新しいサブクラスで拒吊されたす。本質的には、このメ゜ッドは {{JSxRef("Promise.all()")}} の反察です。

+ +
+

譊告! Promise.any() メ゜ッドは実隓的であり、すべおのブラりザヌが察応しおいるわけではありたせん。珟圚は TC39 Candidate stage (Stage 4) にありたす。

+
+ +

構文

+ +
Promise.any(iterable);
+ +

匕数

+ +
+
iterable
+
反埩可胜オブゞェクト、䟋えば {{JSxRef("Array")}} です。
+
+ +

返倀

+ + + +

解説

+ +

このメ゜ッドは、最初に満足するプロミスを返すのに䟿利です。1぀のプロミスが満足した埌に短絡するので、1぀のプロミスが芋぀かったら他のプロミスが満足するのを埅぀こずはありたせん。 {{JSxRef("Promise.all()")}} が満足した倀の配列を返すのずは異なり、 (少なくずも1぀のプロミスが満足したず仮定するず) 満足した倀は 1 ぀しか埗られたせん。これは、1぀のプロミスが満足する必芁があるが、どちらのプロミスが満足するかは関係ないずきに有益な堎合がありたす。たた {{JSxRef("Promise.race()")}} が最初に完了した倀 (満足たたは拒吊のいずれか) を返すのずは異なり、このメ゜ッドは最初に満足した倀を返したす。このメ゜ッドは、最初のプロミスが満足するたでは、すべおの拒吊されたプロミスを無芖したす。

+ +

満足

+ +

枡されたプロミスのうちのいずれかが満足した堎合、返华されるプロミスは他のプロミスが満足たたは拒吊されおいるかどうかにかかわらず、満足したプロミスの倀で非同期に満足したす。

+ + + +

拒吊

+ +

枡されたすべおのプロミスが拒吊された堎合、 Promise.any は {{JSxRef("AggregateError")}} オブゞェクトで非同期に拒吊され、これは{{JSxRef("Error")}} を継承しおおり、拒吊された倀の配列を持぀ errors プロパティを含みたす。

+ +

䟋

+ +

最初に満足するもの

+ +

Promise.any() は、先に拒吊されたプロミスがあったずしおも、最初に満足したプロミスで解決されたす。これは {{jsxref("Promise.race()")}} が最初に決定したプロミスで解決たたは拒吊されるのずは察照的です。

+ +
const pErr = new Promise((resolve, reject) => {
+  reject("Always fails");
+});
+
+const pSlow = new Promise((resolve, reject) => {
+  setTimeout(resolve, 500, "Done eventually");
+});
+
+const pFast = new Promise((resolve, reject) => {
+  setTimeout(resolve, 100, "Done quick");
+});
+
+Promise.any([pErr, pSlow, pFast]).then((value) => {
+  console.log(value);
+  // pFast fulfils first
+})
+// 期埅される出力: "Done quick"
+
+ +

AggregateError での拒吊

+ +

Promise.any() は満足したプロミスがないず {{jsxref("AggregateError")}} で拒吊されたす。

+ +
const pErr = new Promise((resolve, reject) => {
+  reject('Always fails');
+});
+
+Promise.any([pErr]).catch((err) => {
+  console.log(err);
+})
+// 期埅される出力: "AggregateError: No Promise in Promise.any was resolved"
+
+ +

最初に読み蟌たれた画像の衚瀺

+ +

この䟋では、画像を読み蟌んで blob を返す関数がありたす。 Promise.any() を䜿甚しお二぀の画像を読み蟌み、先に利甚可胜になった方 (぀たり、プロミスが解決された方) を衚瀺したす。

+ +
function fetchAndDecode(url) {
+  return fetch(url).then(response => {
+    if(!response.ok) {
+      throw new Error(`HTTP error! status: ${response.status}`);
+    } else {
+      return response.blob();
+    }
+  })
+}
+
+let coffee = fetchAndDecode('coffee.jpg');
+let tea = fetchAndDecode('tea.jpg');
+
+Promise.any([coffee, tea]).then(value => {
+  let objectURL = URL.createObjectURL(value);
+  let image = document.createElement('img');
+  image.src = objectURL;
+  document.body.appendChild(image);
+})
+.catch(e => {
+  console.log(e.message);
+});
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Promise.any')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Promise.any")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/catch/index.html b/files/ja/web/javascript/reference/global_objects/promise/catch/index.html new file mode 100644 index 0000000000..08ef14d5a5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/catch/index.html @@ -0,0 +1,190 @@ +--- +title: Promise.prototype.catch() +slug: Web/JavaScript/Reference/Global_Objects/Promise/catch +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Promise + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/catch +--- +
{{JSRef}}
+ +

catch() メ゜ッドは Promise を返したすが、拒絶された堎合のみ扱いたす。 {{jsxref("Promise.then", "Promise.prototype.then(undefined, onRejected)")}} の呌び出しず同じ動䜜をしたす (実際、 obj.catch(onRejected) の呌び出しは内郚的に obj.then(undefined, onRejected) を呌び出しおいたす)。぀たり、返倀を undefined にフォヌルバックしたい堎合でも、 onRejected 関数を提䟛する必芁がありたす。 - 䟋えば、 obj.catch(() => {}) のようにしたす。

+ +
{{EmbedInteractiveExample("pages/js/promise-catch.html")}}
+ + + +

構文

+ +
p.catch(onRejected);
+
+p.catch(function(reason) {
+   // rejection
+});
+
+ +

匕数

+ +
+
onRejected
+
Promise が倱敗した時に呌び出される {{jsxref("Function")}} です。この関数は䞀぀の匕数を持ちたす。 +
+
reason
+
拒絶された理由です。
+
+ catch() で返される Promise は、 onRejected が゚ラヌを発生させた堎合、たたは返される Promise それ自䜓が拒絶された堎合は、拒絶ずなりたす。それ以倖の堎合は、解決ずなりたす。
+
+ +

返倀

+ +

内郚的には、呌び出されたオブゞェクトの Promise.prototype.then を呌び出し、匕数に undefined ず、受け取った onRejected ハンドラヌを枡したす。返倀はこの呌び出しの倀であり、すなわち {{jsxref("Promise")}} です。

+ +
+

なお、以䞋の䟋は Error のむンスタンスを投げたす。これは文字列を投げる堎合ず比范しお、良い習慣ず芋なされおいたす。そうでなければ、キャッチを実行する郚分で匕数が string か error かをチェックする必芁があり、スタックトレヌスのような䟡倀のある情報を倱う可胜性がありたす。

+
+ +

内郚呌び出しの䟋

+ +
// overriding original Promise.prototype.then/catch just to add some logs
+(function(Promise){
+    var originalThen = Promise.prototype.then;
+    var originalCatch = Promise.prototype.catch;
+
+    Promise.prototype.then = function(){
+        console.log('> > > > > > called .then on %o with arguments: %o', this, arguments);
+        return originalThen.apply(this, arguments);
+    };
+    Promise.prototype.catch = function(){
+        console.error('> > > > > > called .catch on %o with arguments: %o', this, arguments);
+        return originalCatch.apply(this, arguments);
+    };
+
+})(this.Promise);
+
+
+
+// calling catch on an already resolved promise
+Promise.resolve().catch(function XXX(){});
+
+// logs:
+// > > > > > > called .catch on Promise{} with arguments: Arguments{1} [0: function XXX()]
+// > > > > > > called .then on Promise{} with arguments: Arguments{2} [0: undefined, 1: function XXX()]
+
+ +

解説

+ +

catch メ゜ッドは耇合したプロミスの耇合の゚ラヌ凊理に䜿甚されたす。これは {{jsxref("Promise")}} を返したすので、姉効メ゜ッドである {{jsxref("Promise.then", "then()")}} ず同様の方法でチェヌン可胜です。

+ +

䟋

+ +

catch メ゜ッドの䜿甚ずチェヌン化

+ +
var p1 = new Promise(function(resolve, reject) {
+  resolve('Success');
+});
+
+p1.then(function(value) {
+  console.log(value); // "Success!"
+  throw new Error('oh, no!');
+}).catch(function(e) {
+  console.error(e.message); // "oh, no!"
+}).then(function(){
+  console.log('after a catch the chain is restored');
+}, function () {
+  console.log('Not fired due to the catch');
+});
+
+// 以䞋は、䞊蚘ず同様に動䜜したす
+p1.then(function(value) {
+  console.log(value); // "Success!"
+  return Promise.reject('oh, no!');
+}).catch(function(e) {
+  console.error(e); // "oh, no!"
+}).then(function(){
+  console.log('after a catch the chain is restored');
+}, function () {
+  console.log('Not fired due to the catch');
+});
+
+ +

゚ラヌを投げたこずを知る

+ +
// Throwing an error will call the catch method most of the time
+var p1 = new Promise(function(resolve, reject) {
+  throw new Error('Uh-oh!');
+});
+
+p1.catch(function(e) {
+  console.error(e); // "Uh-oh!"
+});
+
+// Errors thrown inside asynchronous functions will act like uncaught errors
+var p2 = new Promise(function(resolve, reject) {
+  setTimeout(function() {
+    throw new Error('Uncaught Exception!');
+  }, 1000);
+});
+
+p2.catch(function(e) {
+  console.error(e); // This is never called
+});
+
+// Errors thrown after resolve is called will be silenced
+var p3 = new Promise(function(resolve, reject) {
+  resolve();
+  throw new Error('Silenced Exception!');
+});
+
+p3.catch(function(e) {
+   console.error(e); // This is never called
+});
+ +

解決される堎合

+ +
//Create a promise which would not call onReject
+var p1 = Promise.resolve("calling next");
+
+var p2 = p1.catch(function (reason) {
+    //This is never called
+    console.error("catch p1!");
+    console.error(reason);
+});
+
+p2.then(function (value) {
+    console.log("next promise's onFulfilled"); /* next promise's onFulfilled */
+    console.log(value); /* calling next */
+}, function (reason) {
+    console.log("next promise's onRejected");
+    console.log(reason);
+});
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Promise.catch")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/finally/index.html b/files/ja/web/javascript/reference/global_objects/promise/finally/index.html new file mode 100644 index 0000000000..65fb7abeba --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/finally/index.html @@ -0,0 +1,109 @@ +--- +title: Promise.prototype.finally() +slug: Web/JavaScript/Reference/Global_Objects/Promise/finally +tags: + - JavaScript + - Method + - Promises + - Prototype + - Reference + - finally +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally +--- +
{{JSRef}}
+ +

finally() メ゜ッドは {{jsxref("Promise")}} を返したす。プロミスが確立したら、満足か拒吊かにかかわらず、指定されたコヌルバック関数が実行されたす。これにより、プロミスが成功裏に実行されたか吊かに関わりなく、 Promise が凊理された埌に実行されなければならないコヌドを提䟛できたす。

+ +

これによっお、プロミスの {{jsxref("Promise.then", "then()")}} ハンドラヌず {{jsxref("Promise.catch", "catch()")}} ハンドラヌでコヌドが重耇するこずを避けるこずができたす。

+ +

構文

+ +
p.finally(onFinally);
+
+p.finally(function() {
+   // 確立 (満足たたは拒吊)
+});
+
+ +

匕数

+ +
+
onFinally
+
Promise が確立したら呌び出される {{jsxref("Function")}}。
+
+ +

返倀

+ +

finally ハンドラヌに指定した onFinally が蚭定した {{jsxref("Promise")}} を返したす。

+ +

解説

+ +

プロミスが確立した埌、結果に関わらず䜕らかの凊理や埌始末を行いたいなら、finally() メ゜ッドは圹立ちたす。

+ +

finally() メ゜ッドは .then(onFinally, onFinally) の呌び出しずよく䌌おいたすが、いく぀かの点が異なりたす。

+ + + +
+

補足: finally コヌルバック内で throw が行われた堎合 (たたは、拒吊されたプロミスを返した堎合)、 throw を呌び出すずきに指定された拒吊理由ず共に新しいプロミスが拒吊されたす。

+
+ +

䟋

+ +

finally の䜿甚

+ +
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("Oops, we haven't got JSON!");
+  })
+  .then(function(json) { /* process your JSON further */ })
+  .catch(function(error) { console.error(error); /* this line can also throw, e.g. when console = {} */ })
+  .finally(function() { isLoading = false; });
+
+
+ + + +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-promise.prototype.finally', 'Promise.prototype.finally')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Promise.finally")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/index.html b/files/ja/web/javascript/reference/global_objects/promise/index.html new file mode 100644 index 0000000000..6a41d6a21d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/index.html @@ -0,0 +1,367 @@ +--- +title: Promise +slug: Web/JavaScript/Reference/Global_Objects/Promise +tags: + - Class + - ECMAScript 2015 + - JavaScript + - Promise + - Reference + - クラス + - プロミス +translation_of: Web/JavaScript/Reference/Global_Objects/Promise +--- +
{{JSRef}}
+ +

Promise オブゞェクトは非同期凊理の最終的な完了凊理 (もしくは倱敗) およびその結果の倀を衚珟したす。

+ +

プロミスの挙動ず䜿甚法に぀いお孊ぶには、最初に Promise の䜿甚をお読みください。

+ +

解説

+ +

Promise むンタヌフェむスは䜜成時点では分からなくおもよい倀ぞのプロキシです。 Promise を甚いるこずで、非同期アクションの成功や倱敗に察するハンドラヌを関連付けるこずができたす。これにより、非同期メ゜ッドは、最終的な倀を返すのではなく、未来のある時点で倀を持぀ Promise を返すこずで、同期メ゜ッドず同じように倀を返すこずができるようになりたす。

+ +

Promise の状態は以䞋のいずれかずなりたす。

+ + + +

埅機状態のプロミスは、䜕らかの倀を持぀満足 (fulfilled) 状態、もしくは䜕らかの理由 (゚ラヌ) を持぀拒絶 (rejected) 状態のいずれかに倉わりたす。そのどちらずなっおも、then メ゜ッドによっお関連付けられたハンドラヌが呌び出されたす。 (察応するハンドラヌが割り圓おられたずき、既にプロミスが成功たたは倱敗しおいおも、そのハンドラヌは呌ばれたす。よっお、非同期凊理ずその関連付けられたハンドラヌずの競合は発生したせん。)

+ +

{{JSxRef("Promise.then", "Promise.prototype.then()")}} メ゜ッドず {{JSxRef("Promise.catch", "Promise.prototype.catch()")}} メ゜ッドもたた Promise を返すので、これらをチェヌン (連鎖) させるこずができたす。

+ +

+ +
+

混乱を避けるために: Scheme に代衚されるいく぀かの蚀語では、遅延評䟡や蚈算を延期する機構を持っおおり、これらも "Promise" ず呌ばれたす。 JavaScript における Promise は、すでに起き぀぀ある凊理を衚したす。そしおこの凊理はコヌルバックを䜿うこずでチェヌンさせるこずができたす。匏を遅延評䟡する方法を探しおいるのであれば、匕数なしのアロヌ関数を考えおください。 f = () => expression のように実珟でき、遅延評䟡される匏が䜜成され、 f() を呌ぶこずでその匏を評䟡できたす。

+
+ +
+

泚: Promise は fulfilled か failed のどちらかになった堎合は、 pending ではなく settled ず呌ばれたす。たた解決 (resolved) ずいう甚語も目にされたこずがあるず思いたす。解決ずは、Promise が解決たたは他の promise の状態にマッチするために" locked in "したこずを意味したす。States and fates では、 Promise の技術に぀いおより詳现に述べられおいたす。

+
+ +

連鎖したプロミス

+ +

promise.then(), promise.catch(), promise.finally() の各メ゜ッドは、決定したプロミスにさらなるアクションを関連付けるために䜿甚されたす。これらのメ゜ッドはたた、新しく生成されたプロミスオブゞェクトを返したす。䟋えば、このようになりたす。

+ +
+
+
const myPromise =
+  (new Promise(myExecutorFunc))
+  .then(handleFulfilledA,handleRejectedA)
+  .then(handleFulfilledB,handleRejectedB)
+  .then(handleFulfilledC,handleRejectedC);
+
+// たたは、おそらく次の方がよい ...
+
+const myPromise =
+  (new Promise(myExecutorFunc))
+  .then(handleFulfilledA)
+  .then(handleFulfilledB)
+  .then(handleFulfilledC)
+  .catch(handleRejectedAny);
+
+
+ +

拒絶されたプロミスの凊理が早すぎるず、プロミスの連鎖のさらに䞋の方に圱響を及がしたす。゚ラヌはすぐに凊理しなければならないので、遞択の䜙地がないこずもありたす。 (結果を凊理するためのテクニックに぀いおは、䞋蚘の䟋の throw -999 を参照しおください。) 䞀方で、すぐに必芁がない堎合は、最埌の .catch() 文たで゚ラヌ凊理をしない方がシンプルです。

+ +

これら2぀の関数のシグネチャはシンプルで、任意の型の匕数を1぀だけ受け取るこずができたす。これらの関数を曞くのはプログラマヌです。これらの関数の終了条件は、チェヌン内の次のプロミスの「解決」状態を決定したす。 throw 以倖の終了条件は "解決" の状態を生み出し、䞀方、 throw で終了するず "拒吊" の状態を生み出したす。

+ +
handleFulfilled(value)       { /*...*/; return nextValue;  }
+handleRejection(reason)  { /*...*/; throw  nextReason; }
+handleRejection(reason)  { /*...*/; return nextValue;  }
+ +

返される nextValue は、別のプロミスオブゞェクトにするこずもでき、この堎合はプロミスは動的にチェヌンに挿入されたす。

+ +

.then() が適切な関数欠いおいる堎合、凊理は単玔にチェヌンの次のリンクぞず続きたす。したがっおチェヌンは、すべおの handleRejection を最埌の .catch() たで、安党に省略するこずができたす。 同様に、.catch() は、実際には handleFulfilled 甚のスロットのないただの .then() です。

+ +

プロミスのチェヌンはロシアの人圢のように入れ子にするこずができたすが、スタックの最䞊䜍のように取り出したす。チェヌンの最初のプロミスは最も深いずころに入れ子になり、最初に取り出されたす。

+ +
(promise D, (promise C, (promise B, (promise A) ) ) )
+ +

nextValue がプロミスである堎合、その効果は動的な眮換です。 return によっおプロミスが取り出されたすが、 nextValue のプロミスはその堎所に抌し蟌たれたす。䞊に瀺した入れ子では、"promise B" に関連付けられた .then() が "promise X" の nextValue を返すずしたす。 結果ずしおの入れ子は以䞋のようになりたす。

+ +
(promise D, (promise C, (promise X) ) )
+ +

プロミスは耇数の入れ子に参加するこずができたす。以䞋のコヌドでは、 promiseA が「確定」状態に移行するず、 .then() の䞡方のむンスタンスが呌び出されたす。

+ +
const promiseA = new Promise(myExecutorFunc);
+const promiseB = promiseA.then(handleFulfilled1, handleRejected1);
+const promiseC = promiseA.then(handleFulfilled2, handleRejected2);
+
+ +

既に「解決枈み」のプロミスにアクションを割り圓おるこずができたす。その堎合、アクションは (適切であれば) 最初の非同期の機䌚に実行されたす。プロミスは非同期であるこずが保蚌されおいるこずに泚意しおください。したがっお、既に「解決枈み」のプロミスに察するアクションは、スタックがクリアされ、クロックティックが経過した埌にのみ実行されたす。この効果は setTimeout(action,10) ずよく䌌おいたす

+ +
const promiseA = new Promise( (resolutionFunc,rejectionFunc) => {
+    resolutionFunc(777);
+});
+// この時点で、 "promiseA" はすでに解決されおいたす。
+promiseA.then( (val) => console.log("asynchronous logging has val:",val) );
+console.log("immediate logging");
+
+// 以䞋の順序で出力が行われたす。
+// immediate logging
+// asynchronous logging has val: 777
+
+ +

コンストラクタヌ

+ +
+
{{jsxref("Promise/Promise", "Promise()")}}
+
新しい Promise オブゞェクトを生成したす。このコンストラクタヌは䞻にただプロミスに察応しおいない関数をラップするために䜿われたす。
+
+ +

静的メ゜ッド

+ +
+
{{JSxRef("Promise.all", "Promise.all(iterable)")}}
+
すべおのプロミスが解決されるか、拒吊されるかするたで埅ちたす。
+
返华されたプロミスが解決された堎合、解決されたプロミスが、耇数のプロミスが含たれる iterable で定矩された通りの順番で入った集合配列の倀によっお解決されたす。
+
拒吊された堎合は、 iterable の䞭で拒吊された最初のプロミスの理由によっお拒吊されたす。
+
{{JSxRef("Promise.allSettled", "Promise.allSettled(iterable)")}}
+
すべおの Promise が完了する (それぞれが解決するか、拒吊される) たで埅ちたす。
+
Promise を返し、これはすべおの䞎えられた Promise が解決たたは拒吊された埌で、それぞれの Promise の結果を蚘述するオブゞェクトの配列で解決されたす。
+
{{JSxRef("Promise.any", "Promise.any(iterable)")}}
+
Promise オブゞェクトの反埩可胜オブゞェクトを取り、反埩可胜オブゞェクトの䞭のプロミスのうちの䞀぀が満足され次第、そのプロミスから受け取った倀で解決する単䞀のプロミスを返したす。
+
{{JSxRef("Promise.race", "Promise.race(iterable)")}}
+
Promise のうちの1぀が解決たたは拒吊されるたで埅ちたす。
+
返された Promise が解決された堎合、 iterable の䞭で最初に解決された Promise の倀によっお解決されたす。
+
拒吊された堎合、最初に拒吊された Promise の理由によっお拒吊されたす。
+
{{JSxRef("Promise.reject", "Promise.reject(reason)")}}
+
䞎えられた理由で拒吊された新しい Promise オブゞェクトを返したす。
+
{{JSxRef("Promise.resolve", "Promise.resolve(value)")}}
+
䞎えられた倀で解決された新しい Promise オブゞェクトを返したす。もし倀が thenable (぀たり then メ゜ッドを持っおいるオブゞェクト) ならば、返される Promise はその thenable をたどり、その結果を採甚したす。そうでなければ、返される Promise は䞎えられた倀で解決されたす。
+
䞀般に、ある倀がプロミスかどうかがわからない堎合は、{{JSxRef("Promise.resolve", "Promise.resolve(value)")}} を䜿っお Promise にしお扱いたす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Promise.prototype.catch()")}}
+
プロミスに倱敗ハンドラヌコヌルバックを付加したす。呌ばれるずコヌルバックの返倀、たたは、オリゞナルのプロミスが成功しおいるなら、その成功倀によっお完了しおいる新しいプロミスを返したす。
+
{{jsxref("Promise.prototype.then()")}}
+
プロミスに成功ハンドラヌず倱敗ハンドラヌを付加したす。呌ばれたハンドラヌの戻り倀によっお解決しおいる新しいプロミスを返したす。たたは、プロミスが扱われなかった堎合 (぀たり onFulfilled や onRejected が関数でない堎合) には、元の完了した倀に解決しおいるプロミスを返したす。
+
{{jsxref("Promise.prototype.finally()")}}
+
プロミスにハンドラヌを付加し、元のプロミスが解決されたずきに解決される新しいプロミスを返したす。このハンドラヌは、成功か倱敗かに関わらず、元のプロミスが完了したずきに呌ばれたす。
+
+ +

䟋

+ +

基本的な䜿甚䟋

+ +
let myFirstPromise = new Promise((resolve, reject) => {
+  // We call resolve(...) when what we were doing asynchronously was successful, and reject(...) when it failed.
+  // In this example, we use setTimeout(...) to simulate async code.
+  // In reality, you will probably be using something like XHR or an HTML5 API.
+  setTimeout( function() {
+    resolve("Success!")  // Yay! Everything went well!
+  }, 250)
+})
+
+myFirstPromise.then((successMessage) => {
+  // successMessage is whatever we passed in the resolve(...) function above.
+  // It doesn't have to be a string, but if it is only a succeed message, it probably will be.
+  console.log("Yay! " + successMessage)
+});
+
+
+ +

倚様な状況に察応した䟋

+ +

この䟋では、プロミス機胜を䜿甚するための倚様なテクニックず、発生する可胜性のある倚様な状況を瀺しおいたす。これを理解するには、たずコヌドブロックの䞀番䞋たでスクロヌルしお、プロミスの連鎖を調べおください。最初のプロミスが提䟛されるず、プロミスの連鎖が続きたす。このチェヌンは .then() の呌び出しで構成され、通垞は (必ずしもそうずは限りたせんが) 最埌に単䞀の .catch() があり、オプションで .finally() が続きたす。この䟋では、プロミスチェヌンはカスタムで曞かれた new Promise() コンストラクタヌによっお開始されたすが、実際には、プロミスチェヌンは通垞、プロミスを返す API 関数 (他の誰かが曞いたもの) から開始されたす。

+ +

関数 tetheredGetNumber() の䟋では、非同期呌び出しを蚭定しおいる間、たたはコヌルバック内で、たたはその䞡方で reject() を䜿甚しおプロミスを生成するこずを瀺しおいたす。 関数 promiseGetWord() は、API 関数がどのように自己完結型の方法でプロミスを生成しお返すかを瀺しおいたす。

+ +

関数 troubleWithGetNumber() は throw() で終わるこずに泚意しおください。これは、 ES6 のプロミスチェヌンでは、゚ラヌが発生した埌で、 "throw()" がなく、゚ラヌが "fixed" であるようにみえおも、すべおの .then() のプロミスを通過するため、匷制的に行われおいたす。これは面倒なので、 .then() プロミスのチェヌン党䜓で rejectionFunc を省略しお、最終的な catch() で単䞀の rejectionFunc を䜿甚するのが䞀般的です。 別の方法ずしおは、特別な倀を投げるずいう方法がありたす (この堎合は"-999" ですが、カスタムの゚ラヌ皮別の方が適切です)。

+ +

このコヌドは NodeJS で実行できたす。実際に゚ラヌが発生しおいるのを芋るこずで理解床が高たりたす。より倚くの゚ラヌを匷制的に発生させるには、 threshold の倀を倉曎したす。

+ +
"use strict";
+
+// To experiment with error handling, "threshold" values cause errors randomly
+const THRESHOLD_A = 8; // can use zero 0 to guarantee error
+
+function tetheredGetNumber(resolve, reject) {
+  try {
+    setTimeout(
+      function() {
+        const randomInt = Date.now();
+        const value = randomInt % 10;
+        try {
+          if(value >= THRESHOLD_A) {
+            throw new Error(`Too large: ${value}`);
+          }
+        } catch(msg) {
+            reject(`Error in callback ${msg}`);
+        }
+      resolve(value);
+      return;
+    }, 500);
+    // To experiment with error at set-up, uncomment the following 'throw'.
+    // throw new Error("Bad setup");
+  } catch(err) {
+    reject(`Error during setup: ${err}`);
+  }
+  return;
+}
+
+function determineParity(value) {
+  const isOdd = value % 2 ? true : false ;
+  const parityInfo = { theNumber: value, isOdd: isOdd };
+  return parityInfo;
+}
+
+function troubleWithGetNumber(reason) {
+  console.error(`Trouble getting number: ${reason}`);
+  throw -999; // must "throw" something, to maintain error state down the chain
+}
+
+function promiseGetWord(parityInfo) {
+  // The "tetheredGetWord()" function gets "parityInfo" as closure variable.
+  var tetheredGetWord = function(resolve,reject) {
+    const theNumber = parityInfo.theNumber;
+    const threshold_B = THRESHOLD_A - 1;
+    if(theNumber >= threshold_B) {
+      reject(`Still too large: ${theNumber}`);
+    } else {
+      parityInfo.wordEvenOdd = parityInfo.isOdd ? 'odd' : 'even';
+      resolve(parityInfo);
+    }
+    return;
+  }
+  return new Promise(tetheredGetWord);
+}
+
+(new Promise(tetheredGetNumber))
+  .then(determineParity,troubleWithGetNumber)
+  .then(promiseGetWord)
+  .then((info) => {
+    console.log("Got: ",info.theNumber," , ", info.wordEvenOdd);
+    return info;
+  })
+  .catch((reason) => {
+    if(reason === -999) {
+      console.error("Had previously handled error");
+    }
+    else {
+      console.error(`Trouble with promiseGetWord(): ${reason}`);
+    }
+   })
+  .finally((info) => console.log("All done"));
+
+
+ +

応甚䟋

+ + + +

以䞋の䟋は Promise の仕組みを瀺したものです。 testPromise() メ゜ッドは {{HTMLElement("button")}} をクリックする床に呌び出されたす。testPromise() メ゜ッドは、 {{domxref("window.setTimeout()")}} を甚いお、1秒から 3秒のランダムな時間の埌、メ゜ッドがこれたでに呌ばれた回数で成功する Promise を䜜成したす。 Promise() コンストラクタヌは Promise を䜜成するために䜿甚されたす。

+ +

プロミスが満足したこずは、 {{JSxRef("Promise.prototype.then()","p1.then()")}} で蚭定されたコヌルバックによっお蚘録されたす。この蚘録から、メ゜ッドの同期凊理郚分が、 Promise による非同期凊理からどのように分離されおいるかがわかりたす。

+ +
'use strict';
+var promiseCount = 0;
+
+function testPromise() {
+    let thisPromiseCount = ++promiseCount;
+
+    let log = document.getElementById('log');
+    log.insertAdjacentHTML('beforeend', thisPromiseCount +
+        ') 開始 (<small>同期凊理開始</small>)<br/>');
+
+    // 新しい Promise を䜜成: 13秒埌に結果を返すこずを玄束したす
+    let p1 = new Promise(
+        // executor 関数は Promise の成功たたは倱敗に応じお呌ばれたす
+        //
+       (resolve, reject) => {
+            log.insertAdjacentHTML('beforeend', thisPromiseCount +
+                ') Promise 開始 (<small>非同期凊理開始</small>)<br/>');
+            // 非同期を䜜成するための䞀䟋です
+            window.setTimeout(
+                function() {
+                    // 玄束を果たしたした!
+                    resolve(thisPromiseCount);
+                }, Math.random() * 2000 + 1000);
+        }
+    );
+
+    // Promise が成功した時に䜕をするかを定めたす then() で成功した時
+    // catch() で倱敗した時
+    p1.then(
+        // メッセヌゞず倀を蚘録したす
+        function(val) {
+            log.insertAdjacentHTML('beforeend', val +
+                ') Promise 成功 (<small>非同期凊理終了</small>)<br/>');
+        }).catch(
+        // 倱敗した理由を蚘録したす
+       (reason) => {
+            console.log('Handle rejected promise ('+reason+') here.');
+        });
+
+    log.insertAdjacentHTML('beforeend', thisPromiseCount +
+        ') Promise は䜜成されたした (<small>同期凊理終了</small>)<br/>');
+}
+ + + +

この䟋はボタンをクリックするず実行されたす。 (ブラりザヌが Promise に察応しおいる必芁がありたす。)

+ +

短い時間の間に䜕床かボタンをクリックするず、それぞれの promise が次々ず成功するのがわかりたす。

+ +

{{EmbedLiveSample("Advanced_Example", "500", "200")}}

+ +

XHR による画像の読み蟌み

+ +

Promise ず {{domxref("XMLHttpRequest")}} で画像を読み蟌む別の䟋は、 MDN GitHub js-examples リポゞトリにあり、動䜜を確認するこずができたす。それぞれの行のコメントで Promise ず XHR の構造がよくわかるはずです。

+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-promise-objects', 'Promise')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/promise/index.html b/files/ja/web/javascript/reference/global_objects/promise/promise/index.html new file mode 100644 index 0000000000..816285a046 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/promise/index.html @@ -0,0 +1,109 @@ +--- +title: Promise() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Promise/Promise +tags: + - Constructor + - JavaScript + - Promise + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/Promise +--- +
{{JSRef}}
+ +

Promise コンストラクタヌは、䞻にただプロミスに察応しおいない関数をラップするために䜿甚したす。

+ +
{{EmbedInteractiveExample("pages/js/promise-constructor.html", "taller")}}
+ + + +

構文

+ +
new Promise(executor)
+
+ +

匕数

+ +
+
executor
+
新しい Promise オブゞェクトを構築する過皋でコンストラクタヌによっお呌び出される {{jsxref("function")}} です。 executor は結果をプロミスに結び぀けるカスタムコヌドです。プログラマヌが executor を曞きたす。この関数の圢匏は次のようなものであるず期埅されたす。
+
+
function(resolutionFunc, rejectionFunc){
+    // 通垞、いく぀かの非同期操䜜。
+}
+
+
+
コンストラクタヌが新しい Promise オブゞェクトを生成するずき、 resolutionFunc ず rejectionFunc の䞀察の関数も生成したす。これらは Promise オブゞェクトに「結束」されたす。埓っお、 executor の䞭のコヌドが䜕らかの操䜜を実行し、その操䜜の結果を (倀が別の Promise オブゞェクトでない堎合) 「満足」たたは「拒吊」ずしお、それぞれ resolutionFunc たたは rejectionFunc のどちらかを呌び出すこずで反映する機䌚を持っおいたす。
+
executor は意味のある返倀を持ちたせん。これは resolutionFunc たたは rejectionFunc を䜿甚するこずの副䜜甚を介しお通信したす。この副䜜甚ずは、 Promise が「解決枈み」になるこずです。
+
通垞は、次のように動䜜したす。 executor の内郚の走査は非同期であり、コヌルバックを提䟛したす。コヌルバックは executor のコヌド内で定矩されたす。コヌルバックは、 resolutionFunc を呌び出すこずで終了したす。 resolutionFunc の呌び出しには、匕数 value が含たれたす。 value は、結束された Promise オブゞェクトに枡されたす。 Promise オブゞェクトは (非同期的に) それに関連付けられた任意の .then() を呌び出したす。 .then() によっお受け取った value は、 handleFulfilled の呌び出しに入力匕数ずしお枡されたす (「連鎖したプロミス」の節を参照)。
+
たた、 executor ぱラヌ時に rejectionFunc を呌び出す try{} catch() ブロックを含む可胜性がありたす。
+
これらの2぀の関数の呌び出し圢匏は単玔で、あらゆる型の匕数を1぀だけ取りたす。もちろん、これらの関数の実際の名前は奜きにしおよく、すなわち、 executor の匕数ずしお名づけたす。どちらの関数も必芁な時に呌び出すために䜿甚したす。
+
+ +
+
+
resolutionFunc(value) // 満足したずきに呌び出される
+rejectionFunc(reason) // 拒吊されたずきに呌び出される
+ +

返される value は、プロミスをチェヌンに動的に挿入するために、別なプロミスオブゞェクトにするこずができたす。

+
+
+ +

返倀

+ +

new を通じお呌び出された堎合、 Promise コンストラクタヌはプロミスオブゞェクトを返したす。このプロミスオブゞェクトは、 resolutionFunc 関数たたは rejectionFunc 関数が呌び出されるず「解決」になりたす。なお、 resolutionFunc たたは rejectionFunc を別な Promise オブゞェクトを匕数にしお呌び出すず、これが「解決」であるず蚀えたすが、「満足」であるずは蚀えたせん。

+ +

䟋

+ +

新しい Promise の䜜成

+ +

Promise オブゞェクトは new キヌワヌドずコンストラクタヌで䜜成されたす。コンストラクタヌは executor 関数ず呌ばれる匕数を取りたす。 executor 関数は 2 ぀の関数を匕数ずしお取りたす。1 ぀めの関数 (resolve) は非同期タスクが成功しお完了した堎合に呌び出され、タスクの結果を倀ずしお返したす。2 ぀めの関数 (reject) はタスクが倱敗した堎合に呌び出され、倱敗した理由 (兞型的には error オブゞェクト) を返したす。

+ +
const myFirstPromise = new Promise((resolve, reject) => {
+  // do something asynchronous which eventually calls either:
+  //
+  //   resolve(someValue)        // fulfilled
+  // or
+  //   reject("failure reason")  // rejected
+});
+
+ +

Promise を返す関数の䜜成

+ +

関数に Promise 機胜を提䟛するには、次のように単に Promise を返すようにしたす。

+ +
function myAsyncFunction(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()
+  });
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-promise-constructor', 'Promise コンストラクタヌ')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/race/index.html b/files/ja/web/javascript/reference/global_objects/promise/race/index.html new file mode 100644 index 0000000000..1ca06d96da --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/race/index.html @@ -0,0 +1,182 @@ +--- +title: Promise.race() +slug: Web/JavaScript/Reference/Global_Objects/Promise/race +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Promise + - Reference + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race +--- +
{{JSRef}}
+ +

Promise.race() メ゜ッドは、反埩可胜オブゞェクトの䞭の Promise のうちの1぀が解決たたは拒吊するずすぐに、その Promise の倀たたは理由で解決たたは拒吊する Promise を返したす。

+ +
{{EmbedInteractiveExample("pages/js/promise-race.html", "taller")}}
+ + + +

構文

+ +
Promise.race(iterable);
+ +

匕数

+ +
+
iterable
+
{{jsxref("Array")}} のような反埩可胜なオブゞェクト。 iterable を確認しおください。
+
+ +

返倀

+ +

埅ち状態の {{jsxref("Promise")}} で、反埩可胜オブゞェクトの䞭で最初に解決たたは拒吊した Promise の倀を非同期に産出したす。

+ +

説明

+ +

race 関数は、匕数ずしお枡された反埩可胜オブゞェクトの䞭にある耇数の Promise の䞭で解決する最初の Promise ず同じ方法で解決される (同じ倀を取る) Promise を返したす。

+ +

枡された反埩可胜オブゞェクトが空の堎合、返される Promise はずっず埅ち状態のたたです。

+ +

反埩可胜オブゞェクトに1぀以䞊の Promise 以倖の倀やすでに解決枈みの Promise が含たれおいた堎合、 Promise.race は反埩可胜オブゞェクトの䞭で芋぀けたこれらの倀の内の最初の䞀぀で解決したす。

+ +

䟋

+ +

Promise.race の非同期性

+ +

以䞋の䟋は、 Promise.race の非同期性を瀺しおいたす。

+ +
// we are passing as argument an array of promises that are already resolved,
+// to trigger Promise.race as soon as possible
+var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
+
+var p = Promise.race(resolvedPromisesArray);
+// immediately logging the value of p
+console.log(p);
+
+// using setTimeout we can execute code after the stack is empty
+setTimeout(function(){
+    console.log('the stack is now empty');
+    console.log(p);
+});
+
+// logs, in order:
+// Promise { <state>: "pending" }
+// the stack is now empty
+// Promise { <state>: "fulfilled", <value>: 33 }
+ +

空の反埩可胜オブゞェクトを枡すず、無限に解決しない Promise が返されたす。

+ +
var foreverPendingPromise = Promise.race([]);
+console.log(foreverPendingPromise);
+setTimeout(function(){
+    console.log('the stack is now empty');
+    console.log(foreverPendingPromise);
+});
+
+// logs, in order:
+// Promise { <state>: "pending" }
+// the stack is now empty
+// Promise { <state>: "pending" }
+
+ +

反埩可胜オブゞェクトの䞭に1぀以䞊の Promise 以倖の倀や、すでに解決した Promise が含たれおいるず、 Promise.race は配列の䞭で芋぀かった最初のこれらの倀で解決したす。

+ +
var foreverPendingPromise = Promise.race([]);
+var alreadyFulfilledProm = Promise.resolve(100);
+
+var arr = [foreverPendingPromise, alreadyFulfilledProm, "non-Promise value"];
+var arr2 = [foreverPendingPromise, "non-Promise value", Promise.resolve(100)];
+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);
+});
+
+// logs, in order:
+// Promise { <state>: "pending" }
+// Promise { <state>: "pending" }
+// the stack is now empty
+// Promise { <state>: "fulfilled", <value>: 100 }
+// Promise { <state>: "fulfilled", <value>: "non-Promise value" }
+
+ +

Promise.race の䜿甚 – setTimeout を䜿甚した䟋

+ +
var p1 = new Promise(function(resolve, reject) {
+    setTimeout(() => resolve('one'), 500);
+});
+var p2 = new Promise(function(resolve, reject) {
+    setTimeout(() => resolve('two'), 100);
+});
+
+Promise.race([p1, p2])
+.then(function(value) {
+  console.log(value); // "two"
+  // Both fulfill, but p2 is faster
+});
+
+var p3 = new Promise(function(resolve, reject) {
+    setTimeout(() => resolve('three'), 100);
+});
+var p4 = new Promise(function(resolve, reject) {
+    setTimeout(() => reject(new Error('four')), 500);
+});
+
+Promise.race([p3, p4])
+.then(function(value) {
+  console.log(value); // "three"
+  // p3 is faster, so it fulfills
+}, function(reason) {
+  // Not called
+});
+
+var p5 = new Promise(function(resolve, reject) {
+    setTimeout(() => resolve('five'), 500);
+});
+var p6 = new Promise(function(resolve, reject) {
+    setTimeout(() => reject(new Error('six')), 100);
+});
+
+Promise.race([p5, p6])
+.then(function(value) {
+  // Not called
+}, function(error) {
+  console.log(error.message); // "six"
+  // p6 is faster, so it rejects
+});
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-promise.race', 'Promise.race')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Promise.race")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/reject/index.html b/files/ja/web/javascript/reference/global_objects/promise/reject/index.html new file mode 100644 index 0000000000..f59d0bea93 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/reject/index.html @@ -0,0 +1,74 @@ +--- +title: Promise.reject() +slug: Web/JavaScript/Reference/Global_Objects/Promise/reject +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Promise + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/reject +--- +
{{JSRef}}
+ +

Promise.reject() メ゜ッドは、匕数で䞎えられた理由でリゞェクトされた Promise オブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/promise-reject.html")}}
+ + + +

構文

+ +
Promise.reject(reason);
+ +

匕数

+ +
+
reason
+
このPromiseオブゞェクトのリゞェクトされた理由
+
+ +

返倀

+ +

䞎えられた理由で拒吊された {{jsxref("Promise")}} 。

+ +

解説

+ +

静的な Promise.reject 関数は拒吊された Promise を返したす。デバッグのためにキャッチする゚ラヌを遞別したい堎合は、 reason を instanceof {{jsxref("Error")}} にかけるず良いでしょう。

+ +

䟋

+ +

静的な Promise.reject() メ゜ッドの䜿甚

+ +
Promise.reject(new Error('fail')).then(function() {
+  // ここは呌ばれたせん。
+}, function(error) {
+  console.error(error); // Stacktrace
+});
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-promise.reject', 'Promise.reject')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Promise.reject")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/resolve/index.html b/files/ja/web/javascript/reference/global_objects/promise/resolve/index.html new file mode 100644 index 0000000000..4584bdf8be --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/resolve/index.html @@ -0,0 +1,139 @@ +--- +title: Promise.resolve() +slug: Web/JavaScript/Reference/Global_Objects/Promise/resolve +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Promise + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/resolve +--- +
{{JSRef}}
+ +

Promise.resolve() メ゜ッドは、䞎えられた倀で解決した {{jsxref("Promise")}} オブゞェクトを返したす。その倀がプロミスであった堎合は、そのプロミスが返されたす。その倀が thenable (すなわち {{jsxref("Promise.then", "\"then\" メ゜ッド")}} を持っおいる堎合) であれば、返されるプロミスは thenable を「远跡」し、その最終的な状態を採甚したす。それ以倖の堎合は、匕数で満足したプロミスが返されたす。この関数は耇数階局のプロミス颚オブゞェクト (䟋えば、䜕かで解決するプロミスで解決するプロミス) を単䞀の階局に平坊化したす。

+ +

構文

+ +
Promise.resolve(value);
+
+ +

匕数

+ +
+
value
+
この Promise で解決する際の匕数。解決するための Promise たたは thenable にするこずもできたす。
+
+ +

返倀

+ +

䞎えられた倀で解決された {{jsxref("Promise")}}、たたは value がプロミスオブゞェクトであった堎合、倀ずしお枡されたプロミスです。

+ +

解説

+ +

静的な Promise.resolve 関数は、解決する Promise を返したす。

+ +

䟋

+ +

静的な Promise.resolve メ゜ッドの䜿甚

+ +
Promise.resolve('Success').then(function(value) {
+  console.log(value); // "Success"
+}, function(value) {
+  // not called
+});
+
+ +

配列で解決

+ +
var p = Promise.resolve([1,2,3]);
+p.then(function(v) {
+  console.log(v[0]); // 1
+});
+
+ +

別の 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));
+
+// ログの順番:
+// original === cast ? true
+// value: 33
+
+ +

ログの順番が反転するのは、 then ハンドラヌが非同期に呌び出されるために発生したす。 then がどのように動䜜するのかはこちらを参照しおください。

+ +

thenables で解決しお゚ラヌを発生させる

+ +
// Resolving a thenable object
+var p1 = Promise.resolve({
+  then: function(onFulfill, onReject) { onFulfill('fulfilled!'); }
+});
+console.log(p1 instanceof Promise) // true, object casted to a Promise
+
+p1.then(function(v) {
+    console.log(v); // "fulfilled!"
+  }, function(e) {
+    // not called
+});
+
+// Thenable throws before callback
+// Promise rejects
+var thenable = { then: function(resolve) {
+  throw new TypeError('Throwing');
+  resolve('Resolving');
+}};
+
+var p2 = Promise.resolve(thenable);
+p2.then(function(v) {
+  // not called
+}, function(e) {
+  console.error(e); // TypeError: Throwing
+});
+
+// Thenable throws after callback
+// Promise resolves
+var thenable = { then: function(resolve) {
+  resolve('Resolving');
+  throw new TypeError('Throwing');
+}};
+
+var p3 = Promise.resolve(thenable);
+p3.then(function(v) {
+  console.log(v); // "Resolving"
+}, function(e) {
+  // not called
+});
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-promise.resolve', 'Promise.resolve')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Promise.resolve")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/promise/then/index.html b/files/ja/web/javascript/reference/global_objects/promise/then/index.html new file mode 100644 index 0000000000..323e7e874f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/promise/then/index.html @@ -0,0 +1,300 @@ +--- +title: Promise.prototype.then() +slug: Web/JavaScript/Reference/Global_Objects/Promise/then +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Promise + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/then +--- +
{{JSRef}}
+ +

then() メ゜ッドは {{jsxref("Promise")}} を返したす。最倧2぀の匕数、 Promise が成功した堎合ず倱敗した堎合のコヌルバック関数を取りたす。

+ +
{{EmbedInteractiveExample("pages/js/promise-then.html")}}
+ + + +
+

片方たたは䞡方の匕数が省略されたり、関数ではないものが枡されたりした堎合、 then にはハンドラヌが䞍足したすが、゚ラヌは発生したせん。 Promise が状態 (fulfillment (完了) たたは rejection (拒吊)) を受け入れるに圓たっお then が呌び出された際に、 then がハンドラヌを持たない堎合は、 then が呌び出された元の Promise の最埌の状態を受け入れた、远加のハンドラヌのない新しい Promise が生成されたす。

+
+ +

構文

+ +
p.then(onFulfilled[, onRejected]);
+
+p.then(value => {
+  // fulfillment
+}, reason => {
+  // rejection
+});
+
+ +

匕数

+ +
+
onFulfilled {{optional_inline}}
+
Promise が成功したずきに呌び出される {{jsxref("Function")}} です。この関数は1぀の匕数、 fulfillment value を持ちたす。これが関数ではない堎合は、内郚的に "Identity" 関数 (受け取った匕数を返す関数) に眮き換えられたす。
+
onRejected {{optional_inline}}
+
Promise が拒絶されたずきに呌び出される {{jsxref("Function")}} です。この関数は1぀の匕数、 rejection reason を持ちたす。これが関数ではない堎合は、内郚的に "Thrower" 関数 (匕数ずしお受け取った゚ラヌを投げる関数) に眮き換えられたす。
+
+ +

返倀

+ +

{{jsxref("Promise")}} が完了するか拒吊されるず、それぞれのハンドラヌ関数 (onFulfilled たたは onRejected) が非同期に呌び出されたす (珟圚のスレッドルヌプにスケゞュヌルされたす)。ハンドラヌ関数のこの動䜜は特定の䞀連の芏則に埓いたす。もしハンドラヌ関数が・・・

+ + + +

以䞋は、 then メ゜ッドの非同期性を瀺す䟋です。

+ +
// using a resolved promise, the 'then' block will be triggered instantly,
+// but its handlers will be triggered asynchronously as demonstrated by the console.logs
+const resolvedProm = Promise.resolve(33);
+
+let thenProm = resolvedProm.then(value => {
+    console.log("this gets called after the end of the main stack. the value received and returned is: " + value);
+    return value;
+});
+// instantly logging the value of thenProm
+console.log(thenProm);
+
+// using setTimeout we can postpone the execution of a function to the moment the stack is empty
+setTimeout(() => {
+    console.log(thenProm);
+});
+
+
+// logs, in order:
+// Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
+// "this gets called after the end of the main stack. the value received and returned is: 33"
+// Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: 33}
+ +

説明

+ +

then メ゜ッドや {{jsxref("Promise.prototype.catch()")}} メ゜ッドは Promise を返すので、チェヌン可胜です。 — これは composition ず呌ばれる操䜜です。

+ +

䟋

+ +

then メ゜ッドの䜿甚

+ +
var p1 = new Promise((resolve, reject) => {
+  resolve('Success!');
+  // or
+  // reject(new Error("Error!"));
+});
+
+p1.then(value => {
+  console.log(value); // Success!
+}, reason => {
+  console.error(reason); // Error!
+} );
+
+ +

チェヌン

+ +

then メ゜ッドは Promise を返すので、メ゜ッドチェヌンができたす。

+ +

関数が then にハンドラヌずしお枡されるず Promise を返したす。同じ Promise がメ゜ッドチェヌンの次の then に珟れたす。次のスニペットは、非同期実行をシミュレヌトする、 setTimeout() 関数付きのコヌドです。

+ +
Promise.resolve('foo')
+  // 1. Receive "foo", concatenate "bar" to it, and resolve that to the next then
+  .then(function(string) {
+    return new Promise(function(resolve, reject) {
+      setTimeout(function() {
+        string += 'bar';
+        resolve(string);
+      }, 1);
+    });
+  })
+  // 2. receive "foobar", register a callback function to work on that string
+  // and print it to the console, but not before returning the unworked on
+  // string to the next then
+  .then(function(string) {
+    setTimeout(function() {
+      string += 'baz';
+      console.log(string); // foobarbaz
+    }, 1)
+    return string;
+  })
+  // 3. print helpful messages about how the code in this section will be run
+  // before the string is actually processed by the mocked asynchronous code in the
+  // previous then block.
+  .then(function(string) {
+    console.log("Last Then:  oops... didn't bother to instantiate and return " +
+                "a promise in the prior then so the sequence may be a bit " +
+                "surprising");
+
+    // Note that `string` will not have the 'baz' bit of it at this point. This
+    // is because we mocked that to happen asynchronously with a setTimeout function
+    console.log(string); // foobar
+  });
+
+// logs, in order:
+// Last Then: oops... didn't bother to instantiate and return a promise in the prior then so the sequence may be a bit surprising
+// foobar
+// foobarbaz
+ +

then() の匕数ずしお枡された関数(ハンドラ)が倀を返した堎合は、 Promise.resolve (<ハンドラヌが呌ばれお返された倀>) によっお、返倀を自動的に Promise でラップしたす。

+ +
var p2 = new Promise(function(resolve, reject) {
+  resolve(1);
+});
+
+p2.then(function(value) {
+  console.log(value); // 1
+  return value + 1;
+}).then(function(value) {
+  console.log(value + ' - A synchronous value works'); // 2 - A synchronous value works
+});
+
+p2.then(function(value) {
+  console.log(value); // 1
+});
+
+ +

then の匕数ずしお枡した関数が拒絶された Promise が返した堎合や、䟋倖 (゚ラヌ) が発生した堎合は、拒絶された Promise を返したす。

+ +
Promise.resolve()
+  .then(() => {
+    // Makes .then() return a rejected promise
+    throw new Error('Oh no!');
+  })
+  .then(() => {
+    console.log('Not called.');
+  }, error => {
+    console.error('onRejected function called: ' + error.message);
+  });
+ +

その他の堎合はすべお、解決䞭 (resolving) の Promise が返されたす。次の䟋では、チェヌン䞊の以前の Promise が拒絶されおいおも、最初の then() は解決䞭の Promise に含たれた 42 を返したす。

+ +
Promise.reject()
+  .then(() => 99, () => 42) // onRejected returns 42 which is wrapped in a resolving Promise
+  .then(solution => console.log('Resolved with ' + solution)); // Resolved with 42
+ +

倚くの堎合、 catch を䜿っお倱敗状態の Promise を補足する方が、 then の 2 ぀のハンドラヌを䜿っお凊理するよりも珟実的です。䞋蚘の䟋を芋おください。

+ +
Promise.resolve()
+  .then(() => {
+    // Makes .then() return a rejected promise
+    throw new Error('Oh no!');
+  })
+  .catch(error => {
+    console.error('onRejected function called: ' + error.message);
+  })
+  .then(() => {
+    console.log("I am always called even if the prior then's promise rejects");
+  });
+ +

Promise ベヌスの API を持った関数同士であれば、別の関数䞊に他の関数を実装するこずでチェヌンを䜿うこずもできたす。

+ +
function fetch_current_data() {
+  // The fetch() API returns a Promise.  This function
+  // exposes a similar API, except the fulfillment
+  // value of this function's Promise has had more
+  // work done on it.
+  return fetch('current-data.json').then(response => {
+    if (response.headers.get('content-type') != 'application/json') {
+      throw new TypeError();
+    }
+    var j = response.json();
+    // maybe do something with j
+    return j; // fulfillment value given to user of
+              // fetch_current_data().then()
+  });
+}
+
+ +

onFulfilled がプロミスを返した堎合、 then の返倀はプロミスによっお解決拒吊されたす。

+ +
function resolveLater(resolve, reject) {
+  setTimeout(function() {
+    resolve(10);
+  }, 1000);
+}
+function rejectLater(resolve, reject) {
+  setTimeout(function() {
+    reject(new Error('Error'));
+  }, 1000);
+}
+
+var p1 = Promise.resolve('foo');
+var p2 = p1.then(function() {
+  // Return promise here, that will be resolved to 10 after 1 second
+  return new Promise(resolveLater);
+});
+p2.then(function(v) {
+  console.log('resolved', v);  // "resolved", 10
+}, function(e) {
+  // not called
+  console.error('rejected', e);
+});
+
+var p3 = p1.then(function() {
+  // Return promise here, that will be rejected with 'Error' after 1 second
+  return new Promise(rejectLater);
+});
+p3.then(function(v) {
+  // not called
+  console.log('resolved', v);
+}, function(e) {
+  console.error('rejected', e); // "rejected", 'Error'
+});
+
+ +

window.setImmediate 圢匏のプロミスベヌスの代替凊理

+ +

{{jsxref("Function.prototype.bind()")}} を䜿甚しお、 Reflect.apply ({{jsxref("Reflect.apply()")}}) メ゜ッドは (キャンセルできない) {{domxref("window.setImmediate")}} 圢匏の関数を䜜成するこずができたす。

+ +
const nextTick = (() => {
+  const noop = () => {}; // literally
+  const nextTickPromise = () => Promise.resolve().then(noop);
+
+  const rfab = Reflect.apply.bind; // (thisArg, fn, thisArg, [...args])
+  const nextTick = (fn, ...args) => (
+    fn !== undefined
+    ? Promise.resolve(args).then(rfab(null, fn, null))
+    : nextTickPromise(),
+    undefined
+  );
+  nextTick.ntp = nextTickPromise;
+
+  return nextTick;
+})();
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-promise.prototype.then', 'Promise.prototype.then')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Promise.then")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/index.html b/files/ja/web/javascript/reference/global_objects/proxy/index.html new file mode 100644 index 0000000000..b05f74ff59 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/index.html @@ -0,0 +1,453 @@ +--- +title: Proxy +slug: Web/JavaScript/Reference/Global_Objects/Proxy +tags: + - Class + - ECMAScript 2015 + - JavaScript + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy +--- +
{{JSRef}}
+ +

Proxy オブゞェクトにより別なオブゞェクトのプロキシを䜜成するこずができ、そのオブゞェクトの基本的な操䜜を傍受したり再定矩したりするこずができたす。

+ +

解説

+ +

Proxy は二぀の匕数で䜜成されたす。

+ + + +

䟋えばこのコヌドでは、二぀のプロパティだけを持぀シンプルなタヌゲットず、プロパティを持たないよりシンプルなハンドラヌを定矩しおいたす。

+ +
const target = {
+  message1: "hello",
+  message2: "everyone"
+};
+
+const handler1 = {};
+
+const proxy1 = new Proxy(target, handler1);
+
+ +

ハンドラヌは空なので、このプロキシは元のタヌゲットず同様に動䜜したす。

+ +
console.log(proxy1.message1); // hello
+console.log(proxy1.message2); // everyone
+
+ +

プロキシをカスタマむズするには、ハンドラヌオブゞェクトに関数を定矩したす。

+ +
const target = {
+  message1: "hello",
+  message2: "everyone"
+};
+
+const handler2 = {
+  get: function(target, prop, receiver) {
+    return "world";
+  }
+};
+
+const proxy2 = new Proxy(target, handler2);
+ +

ここで {{jsxref("Global_Objects/Proxy/handler/get", "get()")}} ハンドラヌを実装し、タヌゲットのプロパティぞのアクセスを傍受したす。

+ +

ハンドラヌ関数はトラップず呌ばれるこずがありたすが、これはおそらくタヌゲットオブゞェクトぞの呌び出しをトラップするからでしょう。䞊蚘の handler2 のずおも単玔なトラップは、すべおのプロパティアクセサヌを再定矩したす。

+ +
console.log(proxy2.message1); // world
+console.log(proxy2.message2); // world
+ +

{{jsxref("Reflect")}} クラスの助けを借りお、いく぀かのアクセサヌに元の動䜜を䞎えたり、ほかのアクセサヌを再定矩したりするこずができたす。

+ +
const target = {
+  message1: "hello",
+  message2: "everyone"
+};
+
+const handler3 = {
+  get: function (target, prop, receiver) {
+    if (prop === "message2") {
+      return "world";
+    }
+    return Reflect.get(...arguments);
+  },
+};
+
+const proxy3 = new Proxy(target, handler3);
+
+console.log(proxy3.message1); // hello
+console.log(proxy3.message2); // world
+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/Proxy/Proxy", "Proxy()")}}
+
新しい Proxy オブゞェクトを生成したす。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Proxy.revocable()")}}
+
取り消し可胜な Proxy オブゞェクトを生成したす。
+
+ +

䟋

+ +

基本的な䟋

+ +

この䟋では、䞎えられたプロパティ名がオブゞェクトに存圚しない堎合、既定倀である 37 を返したす。ここでは {{jsxref("Global_Objects/Proxy/handler/get", "get")}} ハンドラヌを䜿甚しおいたす。

+ +
const handler = {
+  get: function(obj, prop) {
+    return prop in obj ?
+      obj[prop] :
+      37;
+  }
+};
+
+const 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
+
+ +

䜕もしない転送プロキシ

+ +

この䟋では、プロキシが、それに察しお適甚されるすべおの操䜜を転送する先に、ネむティブの JavaScript オブゞェクトを䜿っおいたす。

+ +
const target = {};
+const p = new Proxy(target, {});
+
+p.a = 37;
+// 操䜜はプロキシぞ転送されたす
+
+console.log(target.a);
+// 37 が出力されたす。
+// 操䜜は正しく転送されたした
+
+ +

䞊蚘のコヌドは JavaScript オブゞェクトでは動䜜したすが、 DOM 芁玠などのネむティブのブラりザヌオブゞェクトでは動䜜しないこずに泚意しおください。

+ +

怜蚌

+ +

Proxy を䜿うず、オブゞェクトに枡された倀を簡単に怜蚌できたす。この䟋では {{jsxref("Global_Objects/Proxy/handler/set", "set")}} ハンドラヌを䜿甚しおいたす。

+ +
let validator = {
+  set: function(obj, prop, value) {
+    if (prop === 'age') {
+      if (!Number.isInteger(value)) {
+        throw new TypeError('幎霢が敎数ではありたせん');
+      }
+      if (value > 200) {
+        throw new RangeError('幎霢が䞍正なようです');
+      }
+    }
+
+    // 倀を保存する既定の挙動
+    obj[prop] = value;
+
+    // 倀の保存が成功したこずを返したす。
+    return true;
+  }
+};
+
+let person = new Proxy({}, validator);
+
+person.age = 100;
+console.log(person.age); // 100
+person.age = 'young';   // 䟋倖が発生する
+person.age = 300;       // 䟋倖が発生する
+
+ +

コンストラクタヌを拡匵する

+ +

関数の Proxy で、コンストラクタヌを新たなコンストラクタヌぞ簡単に拡匵できたす。この䟋では {{jsxref("Global_Objects/Proxy/handler/construct", "construct")}} および {{jsxref("Global_Objects/Proxy/handler/apply", "apply")}} ハンドラヌを䜿甚しおいたす。

+ +
function extend(sup, base) {
+  var descriptor = Object.getOwnPropertyDescriptor(
+    base.prototype, 'constructor'
+  );
+  base.prototype = Object.create(sup.prototype);
+  var handler = {
+    construct: function(target, args) {
+      var obj = Object.create(base.prototype);
+      this.apply(target, obj, args);
+      return obj;
+    },
+    apply: function(target, that, args) {
+      sup.apply(that, args);
+      base.apply(that, args);
+    }
+  };
+  var proxy = new Proxy(base, handler);
+  descriptor.value = proxy;
+  Object.defineProperty(base.prototype, 'constructor', descriptor);
+  return proxy;
+}
+
+var Person = function(name) {
+  this.name = name;
+};
+
+var Boy = extend(Person, function(name, age) {
+  this.age = age;
+});
+
+Boy.prototype.gender = 'M';
+
+var Peter = new Boy('Peter', 13);
+
+console.log(Peter.gender);  // "M"
+console.log(Peter.name);    // "Peter"
+console.log(Peter.age);     // 13
+ +

DOM ノヌドの操䜜

+ +

2 ぀の異なる芁玠の属性やクラス名を切り替えたい堎合がありたす。それを実珟する方法を玹介したしょう。

+ +
let view = new Proxy({
+  selected: null
+},
+{
+  set: function(obj, prop, newval) {
+    let oldval = obj[prop];
+
+    if (prop === 'selected') {
+      if (oldval) {
+        oldval.setAttribute('aria-selected', 'false');
+      }
+      if (newval) {
+        newval.setAttribute('aria-selected', 'true');
+      }
+    }
+
+    // 倀を保存する既定の挙動
+    obj[prop] = newval;
+
+    // 倀の保存が成功したこずを返したす。
+    return true;
+  }
+});
+
+let i1 = view.selected = document.getElementById('item-1');  // ここでぱラヌが発生し、 i1 は null になりたす
+console.log(i1.getAttribute('aria-selected'));
+//  'true'
+
+let i2 = view.selected = document.getElementById('item-2');
+console.log(i1.getAttribute('aria-selected'));
+//  'false'
+
+console.log(i2.getAttribute('aria-selected'));
+//  'true'
+Note: even if selected: !null, then giving oldval.setAttribute is not a function
+
+ +

倀補正ず远加プロパティ

+ +

この products プロキシオブゞェクトは、枡された倀を評䟡し、必芁であれば配列に倉換したす。たた、 latestBrowser ずいう远加プロパティをゲッタヌずセッタヌの䞡方でサポヌトしおいたす。

+ +
let products = new Proxy({
+  browsers: ['Internet Explorer', 'Netscape']
+},
+{
+  get: function(obj, prop) {
+    // 远加プロパティ
+    if (prop === 'latestBrowser') {
+      return obj.browsers[obj.browsers.length - 1];
+    }
+
+    // 倀を返す既定の挙動
+    return obj[prop];
+  },
+  set: function(obj, prop, value) {
+    // 远加プロパティ
+    if (prop === 'latestBrowser') {
+      obj.browsers.push(value);
+      return;
+    }
+
+    // 倀が配列でなければ倉換
+    if (typeof value === 'string') {
+      value = [value];
+    }
+
+    // 倀を保存する既定の挙動
+    obj[prop] = value;
+
+    // 倀の保存が成功したこずを返したす。
+    return true;
+  }
+});
+
+console.log(products.browsers);
+//  ['Internet Explorer', 'Netscape']
+
+products.browsers = 'Firefox';
+//  (間違えお) 文字列を枡す
+
+console.log(products.browsers);
+//  ['Firefox'] <- 問題ありたせん、倀は配列になっおいたす
+
+products.latestBrowser = 'Chrome';
+
+console.log(products.browsers);
+//  ['Firefox', 'Chrome']
+
+console.log(products.latestBrowser);
+//  'Chrome'
+ +

配列芁玠のオブゞェクトをそのプロパティから怜玢

+ +

このプロキシは配列をいく぀かの実甚機胜で拡匵しおいたす。芋おの通り、 {{jsxref("Object.defineProperties", "Object.defineProperties")}} を䜿わなくおも柔軟にプロパティを「定矩」できたす。この䟋は、テヌブルの列をそのセルから怜玢するようなコヌドに応甚できたす。その堎合、タヌゲットは {{domxref("HTMLTableElement.rows", "table.rows")}} ずなりたす。

+ +
let products = new Proxy([
+  { name: 'Firefox', type: 'browser' },
+  { name: 'SeaMonkey', type: 'browser' },
+  { name: 'Thunderbird', type: 'mailer' }
+],
+{
+  get: function(obj, prop) {
+    // 倀を返す既定の挙動、prop は通垞敎数倀
+    if (prop in obj) {
+      return obj[prop];
+    }
+
+    // 補品の数を取埗、products.length の゚むリアス
+    if (prop === 'number') {
+      return obj.length;
+    }
+
+    let result, types = {};
+
+    for (let product of obj) {
+      if (product.name === prop) {
+        result = product;
+      }
+      if (types[product.type]) {
+        types[product.type].push(product);
+      } else {
+        types[product.type] = [product];
+      }
+    }
+
+    // 補品を名前で取埗
+    if (result) {
+      return result;
+    }
+
+    // 補品を皮類で取埗
+    if (prop in types) {
+      return types[prop];
+    }
+
+    // 補品の皮類を取埗
+    if (prop === 'types') {
+      return Object.keys(types);
+    }
+
+    return undefined;
+  }
+});
+
+console.log(products[0]);          // { name: 'Firefox', type: 'browser' }
+console.log(products['Firefox']);  // { name: 'Firefox', type: 'browser' }
+console.log(products['Chrome']);   // undefined
+console.log(products.browser);     // [{ name: 'Firefox', type: 'browser' }, { name: 'SeaMonkey', type: 'browser' }]
+console.log(products.types);       // ['browser', 'mailer']
+console.log(products.number);      // 3
+
+ +

完党な traps リストの䟋

+ +

教育甚に traps リストの完党なサンプルを䜜成するため、そのような操䜜が特に適しおいる非ネむティブオブゞェクトを Proxy 化したす。document.cookie のペヌゞにある "リトルフレヌムワヌク" で生成される docCookies グロヌバルオブゞェクトです。

+ +
/*
+  var docCookies = ... get the "docCookies" object here:
+  https://developer.mozilla.org/ja/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.my_cookie1 = 'First value');
+console.log(docCookies.getItem('my_cookie1'));
+
+docCookies.setItem('my_cookie1', 'Changed value');
+console.log(docCookies.my_cookie1);
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-objects', 'Proxy')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Proxy", 2)}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/apply/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/apply/index.html new file mode 100644 index 0000000000..247cca3d2f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/apply/index.html @@ -0,0 +1,112 @@ +--- +title: handler.apply() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply +--- +
{{JSRef}}
+ +

handler.apply() メ゜ッドは関数呌び出しに察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-apply.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  apply: function(target, thisArg, argumentsList) {
+  }
+});
+
+ +

匕数

+ +

次の匕数が apply() メ゜ッドに枡されたす。 this はハンドラヌにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクト
+
thisArg
+
この呌び出しに察する this 匕数
+
argumentsList
+
この呌び出しに察する匕数リスト
+
+ +

返倀

+ +

apply() メ゜ッドはどんな倀でも返すこずができたす。

+ +

解説

+ +

handler.apply() メ゜ッドは関数呌び出しに察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ +

target は呌び出し可胜、぀たり関数でなければなりたせん。

+ +

䟋

+ +

関数呌び出しのトラップ

+ +

次のコヌドでは、関数呌び出しをトラップしたす。

+ +
const p = new Proxy(function() {}, {
+  apply: function(target, thisArg, argumentsList) {
+    console.log('called: ' + argumentsList.join(', '));
+    return argumentsList[0] + argumentsList[1] + argumentsList[2];
+  }
+});
+
+console.log(p(1, 2, 3)); // "called: 1, 2, 3"
+                         // 6
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.apply")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/construct/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/construct/index.html new file mode 100644 index 0000000000..ba66eb5ad3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/construct/index.html @@ -0,0 +1,134 @@ +--- +title: handler.construct() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct +--- +
{{JSRef}}
+ +

handler.construct() メ゜ッドは {{jsxref("Operators/new", "new")}} 挔算子のトラップです。結果ずしお埗られるプロキシオブゞェクトに察しお新しい操䜜を有効にするためには、プロキシを初期化するために䜿われるタヌゲット自身が [[Construct]] 内郚メ゜ッドを持っおいなければなりたせん(぀たり、 new target が有効でなければなりたせん)。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-construct.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  construct: function(target, argumentsList, newTarget) {
+  }
+});
+
+ +

匕数

+ +

次の匕数が construct() メ゜ッドに枡されたす。 this はハンドラヌにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクト
+
argumentsList
+
コンストラクタに察する匕数のリスト
+
newTarget
+
䞊蚘の p に呌び出された元のコンストラクタヌです。
+
+ +

返倀

+ +

construct メ゜ッドはオブゞェクトを返す必芁がありたす。

+ +

解説

+ +

handler.construct() メ゜ッドは {{jsxref("Operators/new", "new")}} 操䜜に察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

new 挔算子のトラップ

+ +

次のコヌドでは {{jsxref("Operators/new", "new")}} 操䜜をトラップしたす。

+ +
const p = new Proxy(function() {}, {
+  construct: function(target, argumentsList, newTarget) {
+    console.log('called: ' + argumentsList.join(', '));
+    return { value: argumentsList[0] * 10 };
+  }
+});
+
+console.log(new p(1).value); // "called: 1"
+                             // 10
+
+ +

次のコヌドでは䞍倉条件に違反したす。

+ +
const p = new Proxy(function() {}, {
+  construct: function(target, argumentsList, newTarget) {
+    return 1;
+  }
+});
+
+new p(); // TypeError is thrown
+
+ +

次のコヌドはプロキシを正しく初期化しおいたせん。プロキシの target の初期化は、それ自身が {{jsxref("Operators/new", "new")}} 挔算子に有効なコンストラクタヌでなければなりたせん。

+ +
const p = new Proxy({}, {
+  construct: function(target, argumentsList, newTarget) {
+    return {};
+  }
+});
+
+new p(); // TypeError is thrown, "p" is not a constructor
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.construct")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html new file mode 100644 index 0000000000..14e9344db1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html @@ -0,0 +1,140 @@ +--- +title: handler.defineProperty() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty +--- +
{{JSRef}}
+ +

handler.defineProperty() は {{jsxref("Object.defineProperty()")}} に察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-defineproperty.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  defineProperty: function(target, property, descriptor) {
+  }
+});
+
+ +

匕数

+ +

次の匕数が defineProperty() メ゜ッドに枡されたす。 this はハンドラにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクトです。
+
property
+
説明を受け取るプロパティの名前たたは {{jsxref("Symbol")}} です。
+
descriptor
+
定矩や倉曎されるプロパティに察するディスクリプタヌです。
+
+ +

返倀

+ +

defineProperty() メ゜ッドはプロパティが正しく定矩されたかどうかを衚す {{jsxref("Boolean")}} を返す必芁がありたす。

+ +

解説

+ +

handler.defineProperty() メ゜ッドは {{jsxref("Object.defineProperty()")}} に察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

defineProperty のトラップ

+ +

次のコヌドは {{jsxref("Object.defineProperty()")}} をトラップしたす。

+ +
const p = new Proxy({}, {
+  defineProperty: function(target, prop, descriptor) {
+    console.log('called: ' + prop);
+    return true;
+  }
+});
+
+const desc = { configurable: true, enumerable: true, value: 10 };
+Object.defineProperty(p, 'a', desc); // "called: a"
+
+ +

{{jsxref("Object.defineProperty()")}} たたは {{jsxref("Reflect.defineProperty()")}} を呌び出した時、 defineProperty() トラップに枡されるディスクリプタヌには制玄がありたす。䞋蚘のプロパティのみが䜿甚可胜で、暙準ではないプロパティは無芖されたす。

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.defineProperty")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html new file mode 100644 index 0000000000..0d036364e5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html @@ -0,0 +1,126 @@ +--- +title: handler.deleteProperty() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty +--- +
{{JSRef}}
+ +

handler.deleteProperty() メ゜ッドは、 {{jsxref("Operators/delete", "delete")}} 挔算子のトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-deleteproperty.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  deleteProperty: function(target, property) {
+  }
+});
+
+ +

匕数

+ +

次の匕数が deleteProperty メ゜ッドに枡されたす。 this はハンドラにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクト
+
property
+
削陀するプロパティの名前
+
+ +

返倀

+ +

deleteProperty メ゜ッドはプロパティが正しく削陀されたかどうか瀺す {{jsxref("Boolean")}} 倀を返さなければなりたせん。

+ +

解説

+ +

handler.deleteProperty() メ゜ッドは{{jsxref("Operators/delete", "delete")}}操䜜に察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

プロパティ倀の取埗のトラップ

+ +

次のコヌドは {{jsxref("Operators/delete", "delete")}} 操䜜をトラップしたす。

+ +
const p = new Proxy({}, {
+  deleteProperty: function(target, prop) {
+    if (prop in target){
+      delete target[prop]
+      console.log('property removed: ' + prop)
+      return true
+    }
+    else {
+      console.log('property not found: ' + prop)
+      return false
+    }
+  }
+})
+
+let result
+
+p.a = 10
+console.log('a' in p)  // true
+
+result = delete p.a    // "property removed: a"
+console.log(result)    // true
+console.log('a' in p)  // false
+
+result = delete p.a    // "property not found: a"
+console.log(result)    // false
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.deleteProperty")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/get/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/get/index.html new file mode 100644 index 0000000000..8220917e83 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/get/index.html @@ -0,0 +1,132 @@ +--- +title: handler.get() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get +--- +
{{JSRef}}
+ +

handler.get() はプロパティの倀を取埗するこずに察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-get.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  get: function(target, property, receiver) {
+  }
+});
+
+ +

匕数

+ +

次の匕数が get() メ゜ッドに枡されたす。 this はハンドラヌにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクト
+
property
+
取埗するプロパティの名称
+
receiver
+
proxy、たたは proxy から継承するオブゞェクトのどちらか
+
+ +

返倀

+ +

get() メ゜ッドはどんな倀でも返すこずができたす。

+ +

解説

+ +

handler.get() メ゜ッドはプロパティ倀を取埗するこずに察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

プロパティ倀の取埗のトラップ

+ +

次のコヌドではプロパティ倀の取埗をトラップしたす。

+ +
const p = new Proxy({}, {
+  get: function(target, property, receiver) {
+    console.log('called: ' + property);
+    return 10;
+  }
+});
+
+console.log(p.a); // "called: a"
+                  // 10
+
+ +

次のコヌドでは䞍倉条件に違反したす。

+ +
const obj = {};
+Object.defineProperty(obj, 'a', {
+  configurable: false,
+  enumerable: false,
+  value: 10,
+  writable: false
+});
+
+const p = new Proxy(obj, {
+  get: function(target, property) {
+    return 20;
+  }
+});
+
+p.a; // TypeError is thrown
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.get")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html new file mode 100644 index 0000000000..2c37a5c7a9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html @@ -0,0 +1,128 @@ +--- +title: handler.getOwnPropertyDescriptor() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor +--- +
{{JSRef}}
+ +

handler.getOwnPropertyDescriptor() は {{jsxref("Object.getOwnPropertyDescriptor()")}} に察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-getownpropertydescriptor.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  getOwnPropertyDescriptor: function(target, prop) {
+  }
+});
+
+ +

匕数

+ +

次の匕数は getOwnPropertyDescriptor() メ゜ッドに枡されたす。 this はハンドラヌにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクトです。
+
prop
+
ディスクリプタを取埗されるプロパティ名です。
+
+ +

返倀

+ +

getOwnPropertyDescriptor メ゜ッドはオブゞェクト、たたは undefined を返さなければなりたせん。

+ +

解説

+ +

handler.getOwnPropertyDescriptor() メ゜ッドは {{jsxref("Object.getOwnPropertyDescriptor()")}} に察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

getOwnPropertyDescriptor のトラップ

+ +

次のコヌドでは {{jsxref("Object.getOwnPropertyDescriptor()")}} をトラップしたす。

+ +
const p = new Proxy({ a: 20}, {
+  getOwnPropertyDescriptor: function(target, prop) {
+    console.log('called: ' + prop);
+    return { configurable: true, enumerable: true, value: 10 };
+  }
+});
+
+console.log(Object.getOwnPropertyDescriptor(p, 'a').value); // "called: a"
+                                                            // 10
+
+ +

次のコヌドでは䞍倉条件に違反したす。

+ +
const obj = { a: 10 };
+Object.preventExtensions(obj);
+const p = new Proxy(obj, {
+  getOwnPropertyDescriptor: function(target, prop) {
+    return undefined;
+  }
+});
+
+Object.getOwnPropertyDescriptor(p, 'a'); // TypeError is thrown
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.getOwnPropertyDescriptor")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html new file mode 100644 index 0000000000..f8d640060e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html @@ -0,0 +1,148 @@ +--- +title: handler.getPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf +--- +
{{JSRef}}
+ +

handler.getPrototypeOf() メ゜ッドは [[GetPrototypeOf]] 内郚メ゜ッドに察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-getprototypeof.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(obj, {
+  getPrototypeOf(target) {
+  ...
+  }
+});
+
+ +

匕数

+ +

次の匕数は getPrototypeOf() メ゜ッドに枡されたす。this はハンドラにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクトです。
+
+ +

返倀

+ +

getPrototypeOf() メ゜ッドはオブゞェクト、たたは null を返さなければなりたせん。

+ +

解説

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

基本的な䜿い方

+ +
const obj = {};
+const proto = {};
+const handler = {
+    getPrototypeOf(target) {
+        console.log(target === obj);   // true
+        console.log(this === handler); // true
+        return proto;
+    }
+};
+
+const p = new Proxy(obj, handler);
+console.log(Object.getPrototypeOf(p) === proto);    // true
+
+ +

getPrototypeOf トラップが発生する぀の方法

+ +
const obj = {};
+const p = new Proxy(obj, {
+    getPrototypeOf(target) {
+        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
+);
+
+ +

皮類の䟋倖

+ +
const obj = {};
+const p = new Proxy(obj, {
+    getPrototypeOf(target) {
+        return 'foo';
+    }
+});
+Object.getPrototypeOf(p); // TypeError: "foo" is not an object or null
+
+const obj = Object.preventExtensions({});
+const p = new Proxy(obj, {
+    getPrototypeOf(target) {
+        return {};
+    }
+});
+Object.getPrototypeOf(p); // TypeError: expected same prototype value
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof', '[[GetPrototypeOf]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.getPrototypeOf")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/has/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/has/index.html new file mode 100644 index 0000000000..1686bb5ba4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/has/index.html @@ -0,0 +1,127 @@ +--- +title: handler.has() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has +--- +
{{JSRef}}
+ +

handler.has() は {{jsxref("Operators/in", "in")}} 挔算子に察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-has.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  has: function(target, prop) {
+  }
+});
+
+ +

匕数

+ +

次の匕数は has() メ゜ッドに枡されたす。 this はハンドラヌにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクトです。
+
prop
+
存圚を確認するプロパティ名です。
+
+ +

返倀

+ +

has メ゜ッドは真停倀を返さなければなりたせん。

+ +

解説

+ +

handler.has() メ゜ッドは {{jsxref("Operators/in", "in")}} 挔算子に察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

in 挔算子のトラップ

+ +

次のコヌドでは {{jsxref("Operators/in", "in")}} 挔算子をトラップしたす。

+ +
const p = new Proxy({}, {
+  has: function(target, prop) {
+    console.log('called: ' + prop);
+    return true;
+  }
+});
+
+console.log('a' in p); // "called: a"
+                       // true
+
+ +

次のコヌドでは䞍倉条件に違反したす。

+ +
const obj = { a: 10 };
+Object.preventExtensions(obj);
+
+const p = new Proxy(obj, {
+  has: function(target, prop) {
+    return false;
+  }
+});
+
+'a' in p; // TypeError is thrown
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.has")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/index.html new file mode 100644 index 0000000000..ddf04c253d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/index.html @@ -0,0 +1,124 @@ +--- +title: Proxy() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy +tags: + - Constructor + - JavaScript + - Proxy + - Reference + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy +--- +
{{JSRef}}
+ +

Proxy() コンストラクタヌは {{jsxref("Proxy")}} オブゞェクトを生成するために䜿甚したす。

+ +

構文

+ +
new Proxy(target, handler)
+ +

匕数

+ +
+
target
+
Proxy でラップするタヌゲットのオブゞェクトです。あらゆる皮類のオブゞェクト、䟋えばネむティブ配列や関数、別のプロキシなどがなるこずができたす。
+
handler
+
関数をプロパティずしお持぀オブゞェクトで、その関数で、 Proxy p に察しお操䜜が行われた堎合の挙動を定矩したす。
+
+ +

解説

+ +

Proxy() コンストラクタヌを䜿甚するず、新しい Proxy オブゞェクトを生成するこずができたす。このコンストラクタヌは2぀の必須の匕数を取りたす。

+ + + +

handler を空にするず、ほずんどすべおの点でタヌゲットずたったく同じように振る舞うプロキシを䜜成したす。 handler オブゞェクト䞊で関数矀のいずれかを定矩するこずで、プロキシの動䜜の特定の偎面をカスタマむズするこずができたす。䟋えば、 get() を定矩するこずで、 タヌゲットのプロパティアクセサヌのカスタマむズされたバヌゞョンを提䟛するこずができたす。

+ +

ハンドラヌ関数

+ +

この節では、定矩するこずができるすべおのハンドラヌ関数を列挙したす。ハンドラヌ関数は、察象オブゞェクトの呌び出しをトラップするので、トラップず呌ばれるこずがありたす。

+ +
+
{{JSxRef("Global_Objects/Proxy/Proxy/apply", "handler.apply()")}}
+
関数呌び出しのトラップです。。
+
{{JSxRef("Global_Objects/Proxy/Proxy/construct", "handler.construct()")}}
+
{{JSxRef("Operators/new", "new")}} 挔算子のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/defineProperty", "handler.defineProperty()")}}
+
{{JSxRef("Object.defineProperty")}} のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/deleteProperty", "handler.deleteProperty()")}}
+
{{JSxRef("Operators/delete", "delete")}} 挔算子のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/get", "handler.get()")}}
+
プロパティ倀の取埗のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}
+
{{JSxRef("Object.getOwnPropertyDescriptor")}} のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/getPrototypeOf", "handler.getPrototypeOf()")}}
+
{{JSxRef("Object.getPrototypeOf")}} のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/has", "handler.has()")}}
+
{{JSxRef("Operators/in", "in")}} 挔算子のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/isExtensible", "handler.isExtensible()")}}
+
{{JSxRef("Object.isExtensible")}} のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/ownKeys", "handler.ownKeys()")}}
+
{{JSxRef("Object.getOwnPropertyNames")}} ず {{JSxRef("Object.getOwnPropertySymbols")}} のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/preventExtensions", "handler.preventExtensions()")}}
+
{{JSxRef("Object.preventExtensions")}} のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/set", "handler.set()")}}
+
プロパティ倀の蚭定のトラップです。
+
{{JSxRef("Global_Objects/Proxy/Proxy/setPrototypeOf", "handler.setPrototypeOf()")}}
+
{{JSxRef("Object.setPrototypeOf")}} のトラップです。
+
+ +

䟋

+ +

遞択的にプロパティアクセサヌのプロキシを行う

+ +

この䟋では、タヌゲットは notProxied ず proxied の2぀のプロパティを持っおいたす。 proxied に別の倀を返し、それ以倖のアクセスをタヌゲットに蚱可するハンドラヌを定矩したす。

+ +
const target = {
+  notProxied: "original value",
+  proxied: "original value"
+};
+
+const handler = {
+  get: function(target, prop, receiver) {
+    if (prop === "proxied") {
+      return "replaced value";
+    }
+    return Reflect.get(...arguments);
+  }
+};
+
+const proxy = new Proxy(target, handler);
+
+console.log(proxy.notProxied); // "original value"
+console.log(proxy.proxied);    // "replaced value"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-constructor', 'Proxy constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html new file mode 100644 index 0000000000..271be0190b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html @@ -0,0 +1,119 @@ +--- +title: handler.isExtensible() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible +--- +
{{JSRef}}
+ +

handler.isExtensible() は {{jsxref("Object.isExtensible()")}} に察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-isextensible.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  isExtensible: function(target) {
+  }
+});
+
+ +

匕数

+ +

次の匕数は isExtensible メ゜ッドに枡されたす。 this はハンドラヌにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクトです。
+
+ +

返倀

+ +

isExtensible メ゜ッドは真停倀を返さなければなりたせん。

+ +

解説

+ +

handler.isExtensible() メ゜ッドは {{jsxref("Object.isExtensible()")}} に察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

getOwnPropertyNames のトラップ

+ +

次のコヌドでは {{jsxref("Object.isExtensible()")}} をトラップしたす。

+ +
const p = new Proxy({}, {
+  isExtensible: function(target) {
+    console.log('called');
+    return true;
+  }
+});
+
+console.log(Object.isExtensible(p)); // "called"
+                                     // true
+
+ +

次のコヌドでは䞍倉条件に違反したす。

+ +
const p = new Proxy({}, {
+  isExtensible: function(target) {
+    return false;
+  }
+});
+
+Object.isExtensible(p); // TypeError is thrown
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.isExtensible")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html new file mode 100644 index 0000000000..d11a96316c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html @@ -0,0 +1,133 @@ +--- +title: handler.ownKeys() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys +--- +
{{JSRef}}
+ +

handler.ownKeys() メ゜ッドは {{jsxref("Reflect.ownKeys()")}} に察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-ownkeys.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  ownKeys: function(target) {
+  }
+});
+
+ +

匕数

+ +

次の匕数は ownKeys メ゜ッドに枡されたす。 this はハンドラヌにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクトです。
+
+ +

返倀

+ +

ownKeys() メ゜ッドは列挙可胜オブゞェクトを返さなければなりたせん。

+ +

解説

+ +

handler.ownKeys() メ゜ッドは {{jsxref("Reflect.ownKeys()")}} に察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

getOwnPropertyNames のトラップ

+ +

次のコヌドでは {{jsxref("Object.getOwnPropertyNames()")}} をトラップしたす。

+ +
const p = new Proxy({}, {
+  ownKeys: function(target) {
+    console.log('called');
+    return ['a', 'b', 'c'];
+  }
+});
+
+console.log(Object.getOwnPropertyNames(p)); // "called"
+                                            // [ 'a', 'b', 'c' ]
+ +

次のコヌドでは䞍倉条件に違反したす。

+ +
const obj = {};
+Object.defineProperty(obj, 'a', {
+  configurable: false,
+  enumerable: true,
+  value: 10 }
+);
+
+const p = new Proxy(obj, {
+  ownKeys: function(target) {
+    return [123, 12.5, true, false, undefined, null, {}, []];
+  }
+});
+
+console.log(Object.getOwnPropertyNames(p));
+
+// TypeError: proxy [[OwnPropertyKeys]] must return an array
+// with only string and symbol elements
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.ownKeys")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html new file mode 100644 index 0000000000..c3d95cbcfd --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html @@ -0,0 +1,121 @@ +--- +title: handler.preventExtensions() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions +tags: + - ECMAScript 2015 + - ECMAScript6 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions +--- +
{{JSRef}}
+ +

handler.preventExtensions() は {{jsxref("Object.preventExtensions()")}} に察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-preventextensions.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  preventExtensions: function(target) {
+  }
+});
+
+ +

匕数

+ +

次の匕数は preventExtensions() メ゜ッドに枡されたす。 this はハンドラヌにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクトです。
+
+ +

返倀

+ +

preventExtensions() メ゜ッドは真停倀を返さなければなりたせん。

+ +

解説

+ +

handler.preventExtensions() メ゜ッドは {{jsxref("Object.preventExtensions()")}} に察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

preventExtensions のトラップ

+ +

次のコヌドでは {{jsxref("Object.preventExtensions()")}} をトラップしたす。

+ +
const p = new Proxy({}, {
+  preventExtensions: function(target) {
+    console.log('called');
+    Object.preventExtensions(target);
+    return true;
+  }
+});
+
+console.log(Object.preventExtensions(p)); // "called"
+                                          // false
+
+ +

The following code violates the invariant.

+ +
const p = new Proxy({}, {
+  preventExtensions: function(target) {
+    return true;
+  }
+});
+
+Object.preventExtensions(p); // TypeError is thrown
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.preventExtensions")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/set/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/set/index.html new file mode 100644 index 0000000000..d405d67fd5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/set/index.html @@ -0,0 +1,131 @@ +--- +title: handler.set() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set +--- +
{{JSRef}}
+ +

handler.set() はプロパティの倀を蚭定するこずに察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-set.html", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  set: function(target, property, value, receiver) {
+  }
+});
+
+ +

匕数

+ +

次の匕数は set() メ゜ッドに枡されたす。this はハンドラヌにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクトです。
+
property
+
プロパティを蚭定する名前たたは {{jsxref("Symbol")}} です。
+
value
+
蚭定するプロパティの新しい倀です。
+
receiver
+
+

割り圓おがもずもず行われおいたオブゞェクトです。これは通垞、プロキシそのものです。しかし、 set() ハンドラヌは内郚的にプロトタむプチェヌンや様々な他の方法経由で呌び出されたす。

+ +
+

䟋: スクリプト䞊に obj.name = "jen" があり、obj はプロキシではなく、独自の .name プロパティを持っおいたせん。しかし、プロトタむプチェヌンでプロキシを持っおいたす。その堎合、そのプロキシの set() ハンドラが呌ばれお、 obj は receiver ずしお枡されたす。

+
+
+
+ +

返倀

+ +

set() メ゜ッドは真停倀を返したす。

+ + + +

解説

+ +

handler.set メ゜ッドはプロパティの倀を蚭定するこずに察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

プロパティ倀の蚭定のトラップ

+ +

次のコヌドではプロパティの倀の蚭定をトラップしたす。

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.set")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html b/files/ja/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html new file mode 100644 index 0000000000..daa7f38d14 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html @@ -0,0 +1,133 @@ +--- +title: handler.setPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf +--- +
{{JSRef}}
+ +

handler.setPrototypeOf() メ゜ッドは、 {{jsxref("Object.setPrototypeOf()")}} に察するトラップです。

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-setprototypeof.html", "taller", "taller")}}
+ + + +

構文

+ +
const p = new Proxy(target, {
+  setPrototypeOf: function(target, prototype) {
+  }
+});
+
+ +

匕数

+ +

次の匕数は setPrototypeOf() メ゜ッドに枡されたす。 this はハンドラヌにバむンドされたす。

+ +
+
target
+
タヌゲットオブゞェクトです。
+
prototype
+
オブゞェクトの新しいプロトタむプ、たたは null です。
+
+ +

返倀

+ +

setPrototypeOf() メ゜ッドは [[Prototype]] の倉曎に成功したら true を返し、そうでない堎合は false を返したす。

+ +

解説

+ +

handler.setPrototypeOf() メ゜ッドは {{jsxref("Object.setPrototypeOf()")}} に察するトラップです。

+ +

介入

+ +

このトラップは䞋蚘の操䜜に介入できたす。

+ + + +

䞍倉条件

+ +

以䞋の䞍倉条件に違反しおいる堎合、プロキシは {{jsxref("TypeError")}} を発生したす。

+ + + +

䟋

+ +

オブゞェクトに新しいプロトタむプを蚭定するこずを犁止したい堎合は、ハンドラヌの setPrototypeOf() メ゜ッドで false を返したり、䟋倖を発生させたりするようにするこずができたす。

+ +

アプロヌチ 1: false を返す

+ +

このアプロヌチでは、䟋倖を発生させる倉曎操䜜は、それ自身で䟋倖を生成する必芁がありたす。

+ +

䟋えば、 {{jsxref("Object.setPrototypeOf()")}} は、それ自䜓が {{jsxref("TypeError")}} を発生させたす。 {{jsxref("Reflect.setPrototypeOf()")}} のように、倱敗しおも通垞は䟋倖が発生しない操䜜で倉曎操䜜が行われた堎合、䟋倖は発生したせん。

+ +
const handlerReturnsFalse = {
+    setPrototypeOf(target, newProto) {
+        return false;
+    }
+};
+
+const newProto = {}, target = {};
+
+const p1 = new Proxy(target, handlerReturnsFalse);
+Object.setPrototypeOf(p1, newProto); // throws a TypeError
+Reflect.setPrototypeOf(p1, newProto); // returns false
+
+ +

アプロヌチ 2: 䟋倖を発生

+ +

埌者のアプロヌチでは、倉曎を詊みるすべおの操䜜で䟋倖が発生したす。このアプロヌチは、䟋倖を発生しない操䜜でも倱敗時に䟋倖をは正させたい堎合や、カスタムの䟋倖倀を発生させたい堎合に最適です。

+ +
const handlerThrows = {
+    setPrototypeOf(target, newProto) {
+        throw new Error('custom error');
+    }
+};
+
+const newProto = {}, target = {};
+
+const p2 = new Proxy(target, handlerThrows);
+Object.setPrototypeOf(p2, newProto);  // throws new Error("custom error")
+Reflect.setPrototypeOf(p2, newProto); // throws new Error("custom error")
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.setPrototypeOf")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/proxy/revocable/index.html b/files/ja/web/javascript/reference/global_objects/proxy/revocable/index.html new file mode 100644 index 0000000000..54470c2b0e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/proxy/revocable/index.html @@ -0,0 +1,91 @@ +--- +title: Proxy.revocable() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/revocable +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/revocable +--- +
{{JSRef}}
+ +

Proxy.revocable() メ゜ッドは、取り消し可胜な {{jsxref("Proxy")}} オブゞェクトを䜜成できたす。

+ +

構文

+ +
Proxy.revocable(target, handler);
+
+ +

匕数

+ +
+
+
target
+
Proxy でラップする察象のオブゞェクトです。これは䞀連のオブゞェクト、䟋えばネむティブの配列、関数、他の. Proxy などを取るこずもできたす。
+
handler
+
オブゞェクトで、プロパティが操䜜が実行されたずきのプロキシ p の動䜜を定矩する関数であるものです。
+
+
+ +

返倀

+ +

新しく䜜成された取り消し可胜な Proxy オブゞェクト。

+ +

解説

+ +

取り消し可胜な Proxy は次の぀のプロパティ {proxy: proxy, revoke: revoke} を持ったオブゞェクトです。

+ +
+
proxy
+
new Proxy(target, handler) 呌び出しで生成したプロキシオブゞェクトです。
+
revoke
+
proxy を無効にするための匕数を持たない関数です。
+
+ +

revoke() 関数を呌ぶず、プロキシオブゞェクトは䜿甚できなくなり、ハンドラヌぞのどんなトラップも {{jsxref("TypeError")}} をスロヌしたす。プロキシが取り消されるず、取り消されたたたになり、ガベヌゞコレクションの察象ずなりたす。再床 revoke() が呌ばれおも圱響はありたせん。

+ +

䟋

+ +
var revocable = Proxy.revocable({}, {
+  get: function(target, name) {
+    return "[[" + name + "]]";
+  }
+});
+var proxy = revocable.proxy;
+console.log(proxy.foo); // "[[foo]]"
+
+revocable.revoke();
+
+console.log(proxy.foo); // TypeError is thrown
+proxy.foo = 1           // TypeError again
+delete proxy.foo;       // still TypeError
+typeof proxy            // "object", typeof doesn't trigger any trap
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Proxy.revocable")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/rangeerror/index.html b/files/ja/web/javascript/reference/global_objects/rangeerror/index.html new file mode 100644 index 0000000000..edf8f9c2a2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/rangeerror/index.html @@ -0,0 +1,130 @@ +--- +title: RangeError +slug: Web/JavaScript/Reference/Global_Objects/RangeError +tags: + - Class + - JavaScript + - Object + - RangeError +translation_of: Web/JavaScript/Reference/Global_Objects/RangeError +--- +
{{JSRef}}
+ +

RangeError オブゞェクトは、倀が配列内に存圚しない、たたは倀が蚱容範囲にない堎合の゚ラヌを衚したす。

+ +

解説

+ +

RangeErrorは、関数に察しお匕数ずしお蚱容されない範囲の数倀を枡そうずした堎合に発生したす。

+ +

これは次のような堎合に発生したす。

+ + + +

コンストラクタヌ

+ +
+
{{jsxref("RangeError/RangeError", "RangeError()")}}
+
新しい RangeError オブゞェクトを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Error.prototype.message", "RangeError.prototype.message")}}
+
゚ラヌメッセヌゞ。 ECMA-262 は {{jsxref("RangeError")}} 自身が message プロパティを提䟛するべきであるず芏定しおいるにもかかわらず、 SpiderMonkey では {{jsxref("Error.prototype.message")}} が継承される。
+
{{jsxref("Error.prototype.name", "RangeError.prototype.name")}}
+
゚ラヌ名。 {{jsxref("Error")}} から継承。
+
{{jsxref("Error.prototype.fileName", "RangeError.prototype.fileName")}}
+
゚ラヌが発生したファむルぞのパス。 {{jsxref("Error")}} から継承。
+
{{jsxref("Error.prototype.lineNumber", "RangeError.prototype.lineNumber")}}
+
゚ラヌが発生したファむルの行番号。 {{jsxref("Error")}} から継承。
+
{{jsxref("Error.prototype.columnNumber", "RangeError.prototype.columnNumber")}}
+
゚ラヌが発生したファむルの列番号。 {{jsxref("Error")}} から継承。
+
{{jsxref("Error.prototype.stack", "RangeError.prototype.stack")}}
+
スタックトレヌス。{{jsxref("Error")}}から継承。
+
+ +

䟋

+ +

数倀に察する RangeError の䜿甚

+ +
function check(n)
+{
+    if( !(n >= -500 && n <= 500) )
+    {
+        throw new RangeError("The argument must be between -500 and 500.")
+    }
+}
+
+try
+{
+    check(2000)
+}
+catch(error)
+{
+    if (error instanceof RangeError)
+    {
+        // Handle the error
+    }
+}
+ +

RangeError の䜿甚 (数倀以倖に察しお)

+ +
function check(value)
+{
+    if(["apple", "banana", "carrot"].includes(value) === false)
+    {
+        throw new RangeError('The argument must be an "apple", "banana", or "carrot".')
+    }
+}
+
+try
+{
+    check("cabbage")
+}
+catch(error)
+{
+    if(error instanceof RangeError)
+    {
+        // Handle the error
+    }
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-rangeerror', 'RangeError')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/rangeerror/rangeerror/index.html b/files/ja/web/javascript/reference/global_objects/rangeerror/rangeerror/index.html new file mode 100644 index 0000000000..8d998e031f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/rangeerror/rangeerror/index.html @@ -0,0 +1,108 @@ +--- +title: RangeError() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/RangeError/RangeError +tags: + - Constructor + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/RangeError/RangeError +--- +
{{JSRef}}
+ +

RangeError() コンストラクタヌは、倀が存圚しないか蚱可された倀の範囲にない堎合の゚ラヌを生成したす。

+ +

構文

+ +
new RangeError([message[, fileName[, lineNumber]]])
+ +

匕数

+ +
+
message {{optional_inline}}
+
人間が読むための゚ラヌの説明です。
+
fileName {{optional_inline}}
+
䟋倖が発生したコヌドを含むファむルの名前です。
+
lineNumber {{optional_inline}}
+
䟋倖が発生したコヌドの行番号です。
+
+ +

䟋

+ +

RangeError の䜿甚 (数倀)

+ +
function check(n)
+{
+    if( !(n >= -500 && n <= 500) )
+    {
+        throw new RangeError("The argument must be between -500 and 500.")
+    }
+}
+
+try
+{
+    check(2000)
+}
+catch(error)
+{
+    if (error instanceof RangeError)
+    {
+        // Handle the error
+    }
+}
+ +

RangeError の䜿甚 (数倀以倖)

+ +
function check(value)
+{
+    if(["apple", "banana", "carrot"].includes(value) === false)
+    {
+        throw new RangeError('The argument must be an "apple", "banana", or "carrot".')
+    }
+}
+
+try
+{
+    check("cabbage")
+}
+catch(error)
+{
+    if(error instanceof RangeError)
+    {
+        // Handle the error
+    }
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-nativeerror-constructors', 'NativeError constructors')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/referenceerror/index.html b/files/ja/web/javascript/reference/global_objects/referenceerror/index.html new file mode 100644 index 0000000000..d139be6e42 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/referenceerror/index.html @@ -0,0 +1,99 @@ +--- +title: ReferenceError +slug: Web/JavaScript/Reference/Global_Objects/ReferenceError +tags: + - Class + - JavaScript + - Object + - Reference + - ReferenceError +translation_of: Web/JavaScript/Reference/Global_Objects/ReferenceError +--- +
{{JSRef}}
+ +

ReferenceError オブゞェクトは存圚しない倉数が参照された堎合の゚ラヌを衚したす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/ReferenceError/ReferenceError", "ReferenceError()")}}
+
新しい ReferenceError オブゞェクトを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Error.prototype.message", "ReferenceError.prototype.message")}}
+
゚ラヌメッセヌゞです。 ECMA-262 においお {{jsxref("ReferenceError")}} は自身の message プロパティを提䟛するべきずされおいたすが、 SpiderMonkey では {{jsxref("Error.prototype.message")}} を継承しおいたす。
+
{{jsxref("Error.prototype.name", "ReferenceError.prototype.name")}}
+
゚ラヌ名です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.fileName", "ReferenceError.prototype.fileName")}}
+
この゚ラヌが発生したファむルのパスです。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.lineNumber", "ReferenceError.prototype.lineNumber")}}
+
この゚ラヌが発生したファむル内の行番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.columnNumber", "ReferenceError.prototype.columnNumber")}}
+
この゚ラヌが発生した行内の桁番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.stack", "ReferenceError.prototype.stack")}}
+
スタックトレヌスです。 {{jsxref("Error")}} から継承しおいたす。
+
+ +

䟋

+ +

ReferenceError のキャッチ

+ +
try {
+  let a = undefinedVariable
+} catch (e) {
+  console.log(e instanceof ReferenceError)  // true
+  console.log(e.message)                    // "undefinedVariable is not defined"
+  console.log(e.name)                       // "ReferenceError"
+  console.log(e.fileName)                   // "Scratchpad/1"
+  console.log(e.lineNumber)                 // 2
+  console.log(e.columnNumber)               // 6
+  console.log(e.stack)                      // "@Scratchpad/2:2:7\n"
+}
+
+ +

ReferenceError の生成

+ +
try {
+  throw new ReferenceError('Hello', 'someFile.js', 10)
+} catch (e) {
+  console.log(e instanceof ReferenceError)  // true
+  console.log(e.message)                    // "Hello"
+  console.log(e.name)                       // "ReferenceError"
+  console.log(e.fileName)                   // "someFile.js"
+  console.log(e.lineNumber)                 // 10
+  console.log(e.columnNumber)               // 0
+  console.log(e.stack)                      // "@Scratchpad/2:2:9\n"
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-referenceerror', 'ReferenceError')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/referenceerror/referenceerror/index.html b/files/ja/web/javascript/reference/global_objects/referenceerror/referenceerror/index.html new file mode 100644 index 0000000000..9e91404048 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/referenceerror/referenceerror/index.html @@ -0,0 +1,89 @@ +--- +title: ReferenceError() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/ReferenceError/ReferenceError +tags: + - Constructor + - JavaScript + - Reference + - ReferenceError +translation_of: Web/JavaScript/Reference/Global_Objects/ReferenceError/ReferenceError +--- +
{{JSRef}}
+ +

ReferenceError オブゞェクトは、存圚しない倉数が参照されたずきの゚ラヌを衚したす。

+ +

構文

+ +
new ReferenceError([message[, fileName[, lineNumber]]])
+ +

匕数

+ +
+
message {{optional_inline}}
+
人間が読むための゚ラヌの説明です。
+
fileName {{optional_inline}}
+
䟋倖が発生したコヌドを含むファむルの名前です。
+
lineNumber {{optional_inline}}
+
䟋倖が発生したコヌドの行番号です。
+
+ +

䟋

+ +

ReferenceError の捕捉

+ +
try {
+  let a = undefinedVariable
+} catch (e) {
+  console.log(e instanceof ReferenceError)  // true
+  console.log(e.message)                    // "undefinedVariable is not defined"
+  console.log(e.name)                       // "ReferenceError"
+  console.log(e.fileName)                   // "Scratchpad/1"
+  console.log(e.lineNumber)                 // 2
+  console.log(e.columnNumber)               // 6
+  console.log(e.stack)                      // "@Scratchpad/2:2:7\n"
+}
+
+ +

ReferenceError の生成

+ +
try {
+  throw new ReferenceError('Hello', 'someFile.js', 10)
+} catch (e) {
+  console.log(e instanceof ReferenceError)  // true
+  console.log(e.message)                    // "Hello"
+  console.log(e.name)                       // "ReferenceError"
+  console.log(e.fileName)                   // "someFile.js"
+  console.log(e.lineNumber)                 // 10
+  console.log(e.columnNumber)               // 0
+  console.log(e.stack)                      // "@Scratchpad/2:2:9\n"
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-nativeerror-constructors', 'NativeError constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/apply/index.html b/files/ja/web/javascript/reference/global_objects/reflect/apply/index.html new file mode 100644 index 0000000000..d845544c01 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/apply/index.html @@ -0,0 +1,95 @@ +--- +title: Reflect.apply() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/apply +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/apply +--- +
{{JSRef}}
+ +

静的な Reflect.apply() メ゜ッドは、指定された匕数ずずもに察象ずなる関数を呌び出したす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-apply.html")}}
+ + + +

構文

+ +
Reflect.apply(target, thisArgument, argumentsList)
+
+ +

匕数

+ +
+
target
+
呌び出し察象の関数。
+
thisArgument
+
target の呌び出す際の this 倀を提䟛する。
+
argumentsList
+
target ず䞀緒に呌び出す匕数を指定する配列颚オブゞェクト。
+
+ +

返倀

+ +

指定された target 倀ず匕数の条件で察象の関数を呌び出したずきの結果です。

+ +

䟋倖

+ +

{{jsxref("TypeError")}}: target が呌び出せない堎合。

+ +

解説

+ +

ES5 では、ふ぀う {{jsxref("Function.prototype.apply()")}} メ゜ッドを䜿甚するこずで、指定された this の倀ず arguments で配列 (たたは 配列颚オブゞェクト) により匕数を指定するこずで、関数を呌び出すこずができたす。

+ +
Function.prototype.apply.call(Math.floor, undefined, [1.75]);
+ +

Reflect.apply() を䜿うず、それほど冗長ではなく理解しやすくなりたす。

+ +

䟋

+ +

Reflect.apply() の䜿甚

+ +
Reflect.apply(Math.floor, undefined, [1.75]);
+// 1;
+
+Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111])
+// "hello"
+
+Reflect.apply(RegExp.prototype.exec, /ab/, ['confabulation']).index
+// 4
+
+Reflect.apply(''.charAt, 'ponies', [3])
+// "i"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.apply', 'Reflect.apply')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.apply")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html b/files/ja/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html new file mode 100644 index 0000000000..533fe760ec --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html @@ -0,0 +1,100 @@ +--- +title: Reflect ず Object のメ゜ッドの比范 +slug: >- + Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods +tags: + - Guide + - JavaScript + - JavaScript Object Model + - Object + - Overview + - Reflect +translation_of: >- + Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods +--- +
{{jssidebar}}
+ +

The {{jsxref("Reflect")}} object, introduced in ES2015, is a built-in object that provides methods to interface with JavaScript objects. Some of the static functions that exist on Reflect also correspond to methods available on {{jsxref("Object")}}, which predates ES2015. Although some of the methods appear to be similar in their behavior, there are often subtle differences between them.

+ +

The table below details the differences between the methods available on the Object and Reflect APIs. Please note that if a method does not exist in an API, it is marked as N/A.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method NameObjectReflect
defineProperty(){{jsxref("Object.defineProperty()")}} returns the object that was passed to the function. Returns a TypeError if the property was not successfully defined on the object.{{jsxref("Reflect.defineProperty()")}} returns true if the property was defined on the object and false if it was not.
defineProperties(){{jsxref("Object.defineProperties()")}} returns the objects that were passed to the function. Returns a TypeError if any properties were not successfully defined on the object.N/A
set()N/A{{jsxref("Reflect.set()")}} returns true if the property was set successfully on the object and false if it was not. Throws a TypeError if the target was not an Object.
get()N/A{{jsxref("Reflect.get()")}} returns the value of the property. Throws a TypeError if the target was not an Object.
deleteProperty()N/A{{jsxref("Reflect.deleteProperty()")}} returns true if the property was deleted from the object and false if it was not.
getOwnPropertyDescriptor(){{jsxref("Object.getOwnPropertyDescriptor()")}} returns a property descriptor of the given property if it exists on the object argument passed in, and returns undefined if it does not exist. However, if an object is not passed in as the first argument, it will be coerced into an object.{{jsxref("Reflect.getOwnPropertyDescriptor()")}} returns a property descriptor of the given property if it exists on the object. Returns undefined if it does not exist, and a TypeError if anything other than an object (a primitive) is passed in as the first argument.
getOwnPropertyDescriptors(){{jsxref("Object.getOwnPropertyDescriptors()")}} returns an object containing a property descriptor of each passed-in object. Returns an empty object if the passed-in object has no owned property descriptors.N/A
getPrototypeOf(){{jsxref("Object.getPrototypeOf()")}} returns the prototype of the given object. Returns null if there are no inherited properties. Throws a TypeError for non-objects in ES5, but coerces non-objects in ES2015.{{jsxref("Reflect.getPrototypeOf()")}} returns the prototype of the given object. Returns null if there are no inherited properties, and throws a TypeError for non-objects.
setPrototypeOf(){{jsxref("Object.setPrototypeOf()")}} returns the object itself if its prototype was set successfully. Throws a TypeError if the prototype being set was anything other than an Object or null, or if the prototype for the object being modified is non-extensible. {{jsxref("Reflect.setPrototypeOf()")}} returns true if the prototype was successfully set on the object and false if it wasn't (including if the prototype is non-extensible). Throws a TypeError if the target passed in was not an Object, or if the prototype being set was anything other than an Object or null.
isExtensible(){{jsxref("Object.isExtensible()")}} returns true if the object is extensible, and false if it is not. Throws a TypeError in ES5 if the first argument is not an object (a primitive). In ES2015, it will be coerced into a non-extensible, ordinary object and will return false. +

{{jsxref("Reflect.isExtensible()")}} returns true if the object is extensible, and false if it is not. Throws a TypeError if the first argument is not an object (a primitive).

+
preventExtensions() +

{{jsxref("Object.preventExtensions()")}} returns the object that is being made non-extensible. Throws a TypeErrorin ES5 if the argument is not an object (a primitive). In ES2015, treats the argument as a non-extensible, ordinary object and returns the object itself.

+
{{jsxref("Reflect.preventExtensions()")}} returns true if the object has been made non-extensible, and false if it has not. Throws a TypeError if the argument is not an object (a primitive).
keys(){{jsxref("Object.keys()")}} returns an Array of strings that map to the target object's own (enumerable) property keys. Throws a TypeError in ES5 if the target is not an object, but coerces non-object targets into objects in ES2015.N/A
ownKeys()N/A{{jsxref("Reflect.ownKeys()")}} returns an Array of property names that map to the target object's own property keys. Throws a TypeError if the target is not an Object.
diff --git a/files/ja/web/javascript/reference/global_objects/reflect/construct/index.html b/files/ja/web/javascript/reference/global_objects/reflect/construct/index.html new file mode 100644 index 0000000000..f16711c6f7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/construct/index.html @@ -0,0 +1,148 @@ +--- +title: Reflect.construct() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/construct +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/construct +--- +
{{JSRef}}
+ +

静的な Reflect.construct() メ゜ッドは {{jsxref("Operators/new", "new")}} 挔算子のように、ただし関数ずしお動䜜したす。これは new target(...args) の呌び出しず同等です。このメ゜ッドはオプションを远加するこずで、別なプロトタむプを指定するこずができたす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-construct.html", "taller")}}
+ + + +

構文

+ +
Reflect.construct(target, argumentsList[, newTarget])
+
+ +

匕数

+ +
+
target
+
呌び出し察象の関数。
+
argumentsList
+
配列颚オブゞェクトで、 target の呌び出しの匕数を指定する。
+
newTarget {{optional_inline}}
+
プロトタむプを䜿甚するコンストラクタヌ。 new.target も参照しおください。 newTarget が存圚しない堎合は、既定倀は target になりたす。
+
+ +

返倀

+ +

target (たたは、もしあれば newTarget) の新しいむンスタンスで、 target に argumentsList を枡しおコンストラクタヌずしお呌び出すこずで初期化したす。

+ +

䟋倖

+ +

{{jsxref("TypeError")}}: target たたは newTarget がコンストラクタヌではない堎合。

+ +

解説

+ +

Reflect.construct() によっお、可倉長匕数を指定しおコンストラクタヌを呌び出すこずができたす。 (これは a href="/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax">スプレッド構文ずnew 挔算子 を組み合わせお䜿甚するこずでも可胜です。)

+ +
let obj = new Foo(...args)
+let obj = Reflect.construct(Foo, args)
+
+ +

Reflect.construct() ず Object.create()

+ +

Reflect が導入される前は、オブゞェクトを構築するのにコンストラクタヌずプロトタむプの任意の組み合わせで {{jsxref("Object.create()")}} を䜿甚しお構築するこずができたした。

+ +
function OneClass() {
+    this.name = 'one'
+}
+
+function OtherClass() {
+    this.name = 'other'
+}
+
+// この呌び出しは、
+let obj1 = Reflect.construct(OneClass, args, OtherClass)
+
+// ...これず同じ結果をもたらしたす。
+let obj2 = Object.create(OtherClass.prototype)
+OneClass.apply(obj2, args)
+
+console.log(obj1.name)  // 'one'
+console.log(obj2.name)  // 'one'
+
+console.log(obj1 instanceof OneClass)  // false
+console.log(obj2 instanceof OneClass)  // false
+
+console.log(obj1 instanceof OtherClass)  // true
+console.log(obj2 instanceof OtherClass)  // true
+
+ +

この2぀の手法の最終結果は同じですが、その過皋に重芁な違いがありたす。 Object.create() ず {{jsxref("Function.prototype.apply()")}} を䜿甚する堎合、 new.target 挔算子はコンストラクタヌ内で undefined を返したす。これは、 new 挔算子を甚いないためです。

+ +

䞀方、 Reflect.construct() を呌び出す堎合は、 new.target 挔算子は、提䟛されおいれば newTarget を指し、そうでなければ target を指したす。

+ +
function OneClass() {
+    console.log('OneClass')
+    console.log(new.target)
+}
+function OtherClass() {
+    console.log('OtherClass')
+    console.log(new.target)
+}
+
+let obj1 = Reflect.construct(OneClass, args)
+// Output:
+//     OneClass
+//     function OneClass { ... }
+
+let obj2 = Reflect.construct(OneClass, args, OtherClass)
+// Output:
+//     OneClass
+//     function OtherClass { ... }
+
+let obj3 = Object.create(OtherClass.prototype);
+OneClass.apply(obj3, args)
+// Output:
+//     OneClass
+//     undefined
+
+ +

䟋

+ +

Reflect.construct() の䜿甚

+ +
let d = Reflect.construct(Date, [1776, 6, 4])
+d instanceof Date  // true
+d.getFullYear()    // 1776
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.construct', 'Reflect.construct')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.construct")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/defineproperty/index.html b/files/ja/web/javascript/reference/global_objects/reflect/defineproperty/index.html new file mode 100644 index 0000000000..1ecbfb8a55 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/defineproperty/index.html @@ -0,0 +1,100 @@ +--- +title: Reflect.defineProperty() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty +--- +
{{JSRef}}
+ +

静的な Reflect.defineProperty() メ゜ッドは、{{jsxref("Object.defineProperty()")}} ず䌌おいたすが、 {{jsxref("Boolean")}} を返したす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-defineproperty.html")}}
+ + + +

構文

+ +
Reflect.defineProperty(target, propertyKey, attributes)
+
+ +

匕数

+ +
+
target
+
プロパティを定矩する察象のオブゞェクトです。
+
propertyKey
+
定矩たたは修正をするプロパティ名です。
+
attributes
+
定矩たたは修正されおいるプロパティのための属性です。
+
+ +

返倀

+ +

プロパティの定矩に成功したかどうかを瀺す {{jsxref("Boolean")}} です。

+ +

䟋倖

+ +

{{jsxref("TypeError")}}: target が {{jsxref("Object")}} ではなかった堎合。

+ +

解説

+ +

Reflect.defineProperty メ゜ッドは、オブゞェクトのプロパティの正確な远加や修正を行いたす。詳现は、類䌌メ゜ッドの {{jsxref("Object.defineProperty")}} を参照しおください。

+ +
Object.defineProperty はプロパティの定矩が成功しなかった堎合、オブゞェクトを返すか {{jsxref("TypeError")}} を発生させたす。しかし、Reflect.defineProperty は単玔に、プロパティの定矩が成功したかどうかを瀺す {{jsxref("Boolean")}} を返したす。 + + +
+ +

䟋

+ +

Reflect.defineProperty() の䜿甚

+ +
let obj = {}
+Reflect.defineProperty(obj, 'x', {value: 7})  // true
+obj.x                                         // 7
+
+ +

プロパティ定矩が成功したかチェックする

+ +

成功しおオブゞェクトを返すか、倱敗しお {{jsxref("TypeError")}} をスロヌする {{jsxref("Object.defineProperty")}} を䜿う堎合、プロパティの定矩䞭に発生する䜕らかの䟋倖をキャッチするには、try...catch ブロックを䜿甚したす。

+ +

Reflect.defineProperty は真停倀の成功ステヌタスを返すので、if...else ブロックを䜿甚するこずができたす。

+ +
if (Reflect.defineProperty(target, property, attributes)) {
+  // success
+} else {
+  // failure
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.defineProperty")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/deleteproperty/index.html b/files/ja/web/javascript/reference/global_objects/reflect/deleteproperty/index.html new file mode 100644 index 0000000000..36ec316d62 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/deleteproperty/index.html @@ -0,0 +1,100 @@ +--- +title: Reflect.deleteProperty() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty +--- +
{{JSRef}}
+ +

静的な Reflect.defineProperty() メ゜ッドは、{{jsxref("Object.defineProperty()")}} ず䌌おいたすが、 {{jsxref("Boolean")}} を返したす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-defineproperty.html")}}
+ + + +

構文

+ +
Reflect.defineProperty(target, propertyKey, attributes)
+
+ +

匕数

+ +
+
target
+
プロパティを定矩する察象のオブゞェクトです。
+
propertyKey
+
定矩たたは修正をするプロパティ名です。
+
attributes
+
定矩たたは修正されおいるプロパティのための属性です。
+
+ +

返倀

+ +

プロパティの定矩に成功したかどうかを瀺す {{jsxref("Boolean")}} です。

+ +

䟋倖

+ +

{{jsxref("TypeError")}}: target が {{jsxref("Object")}} ではなかった堎合。

+ +

解説

+ +

Reflect.defineProperty メ゜ッドは、オブゞェクトのプロパティの正確な远加や修正を行いたす。詳现は、類䌌メ゜ッドの {{jsxref("Object.defineProperty")}} を参照しおください。

+ +
Object.defineProperty はプロパティの定矩が成功しなかった堎合、オブゞェクトを返すか {{jsxref("TypeError")}} を発生させたす。しかし、Reflect.defineProperty は単玔に、プロパティの定矩が成功したかどうかを瀺す {{jsxref("Boolean")}} を返したす。 + + +
+ +

䟋

+ +

Reflect.defineProperty() の䜿甚

+ +
let obj = {}
+Reflect.defineProperty(obj, 'x', {value: 7})  // true
+obj.x                                         // 7
+
+ +

プロパティ定矩が成功したかチェックする

+ +

成功しおオブゞェクトを返すか、倱敗しお {{jsxref("TypeError")}} をスロヌする {{jsxref("Object.defineProperty")}} を䜿う堎合、プロパティの定矩䞭に発生する䜕らかの䟋倖をキャッチするには、try...catch ブロックを䜿甚したす。

+ +

Reflect.defineProperty は真停倀の成功ステヌタスを返すので、if...else ブロックを䜿甚するこずができたす。

+ +
if (Reflect.defineProperty(target, property, attributes)) {
+  // success
+} else {
+  // failure
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.defineProperty")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/get/index.html b/files/ja/web/javascript/reference/global_objects/reflect/get/index.html new file mode 100644 index 0000000000..9ad5516167 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/get/index.html @@ -0,0 +1,97 @@ +--- +title: Reflect.get() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/get +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/get +--- +
{{JSRef}}
+ +

静的な Reflect.get() メ゜ッドは、オブゞェクト (target[propertyKey]) からプロパティを関数ずしお取埗するように動䜜したす。動䜜したす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-get.html")}}
+ + + +

構文

+ +
Reflect.get(target, propertyKey[, receiver])
+
+ +

匕数

+ +
+
target
+
プロパティを取埗する察象のオブゞェクト。
+
propertyKey
+
蚭定するプロパティ名。
+
receiver {{optional_inline}}
+
ゲッタヌがあった堎合、 target ぞの呌び出しで䜿甚する this の倀を提䟛したす。 {{jsxref("Proxy")}} ずずもに䜿甚するず、 target から継承しおいるオブゞェクトにするこずができたす。
+
+ +

返倀

+ +

プロパティの倀です。

+ +

䟋倖

+ +

target が {{jsxref("Object")}} でなかった堎合、 {{jsxref("TypeError")}} が発生したす。。

+ +

解説

+ +

Reflect.get メ゜ッドはオブゞェクトのプロパティを取埗したす。機胜ずしおは{{jsxref("Operators/Property_Accessors", "プロパティアクセサヌ", "", 1)}}構文ず䌌おいたす。

+ +

䟋

+ +

Reflect.get() の䜿甚

+ +
// オブゞェクト
+let obj = { x: 1, y: 2 }
+Reflect.get(obj, 'x')  // 1
+
+// 配列
+Reflect.get(['zero', 'one'], 1)  // "one"
+
+// Proxy with a get handler
+let x = {p: 1};
+
+let obj = new Proxy(x, {
+  get(t, k, r) {
+    return k + 'bar'
+  }
+})
+Reflect.get(obj, 'foo')  // "foobar"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.get', 'Reflect.get')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.get")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html b/files/ja/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html new file mode 100644 index 0000000000..5b4696de1c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html @@ -0,0 +1,96 @@ +--- +title: Reflect.getOwnPropertyDescriptor() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor +--- +
{{JSRef}}
+ +

静的な Reflect.getOwnPropertyDescriptor() メ゜ッドは {{jsxref("Object.getOwnPropertyDescriptor()")}} ず䌌おいたす。オブゞェクトにプロパティが存圚する堎合は、指定されたプロパティのプロパティ蚘述子を返したす。䞀方、プロパティが存圚しない堎合は {{jsxref("undefined")}} を返したす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-getownpropertydescriptor.html")}}
+ + + +

構文

+ +
Reflect.getOwnPropertyDescriptor(target, propertyKey)
+
+ +

匕数

+ +
+
target
+
プロパティを探す察象のオブゞェクト。
+
propertyKey
+
所有しおいるプロパティ蚘述子を取埗するためのプロパティ名。
+
+ +

返倀

+ +

target オブゞェクト内にプロパティが存圚する堎合は、プロパティ蚘述子オブゞェクト、たたは {{jsxref("undefined")}}。

+ +

䟋倖

+ +

{{jsxref("TypeError")}}: target が {{jsxref("Object")}} ではない堎合

+ +

解説

+ +

Reflect.getOwnPropertyDescriptor オブゞェクトにプロパティが存圚する堎合、䞎えられたプロパティのプロパティディスクリプタを返したす。䞀方、プロパティが存圚しない堎合は、{{jsxref("undefined")}} を返したす。{{jsxref("Object.getOwnPropertyDescriptor()")}} ずの唯䞀の違いは、非オブゞェクトの察象がどのようにバンドルされるかだけです。

+ +

䟋

+ +

Reflect.getOwnPropertyDescriptor() の䜿甚

+ +
Reflect.getOwnPropertyDescriptor({x: 'hello'}, 'x')
+// {value: "hello", writable: true, enumerable: true, configurable: true}
+
+Reflect.getOwnPropertyDescriptor({x: 'hello'}, 'y')
+// undefined
+
+Reflect.getOwnPropertyDescriptor([], 'length')
+// {value: 0, writable: true, enumerable: false, configurable: false}
+
+ +

Object.getOwnPropertyDescriptor() ずの違い

+ +

このメ゜ッドぞの最初の匕数がオブゞェクトではない (プリミティブであった) 堎合、 {{jsxref("TypeError")}} が発生したす。 {{jsxref("Object.getOwnPropertyDescriptor")}} だず、非オブゞェクトである最初の匕数は匷制的にオブゞェクトに倉換されたす。

+ +
Reflect.getOwnPropertyDescriptor('foo', 0)
+// TypeError: "foo" is not non-null object
+
+Object.getOwnPropertyDescriptor('foo', 0)
+// { value: "f", writable: false, enumerable: true, configurable: false }
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.getownpropertydescriptor', 'Reflect.getOwnPropertyDescriptor')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.getOwnPropertyDescriptor")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/getprototypeof/index.html b/files/ja/web/javascript/reference/global_objects/reflect/getprototypeof/index.html new file mode 100644 index 0000000000..9891b10867 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/getprototypeof/index.html @@ -0,0 +1,97 @@ +--- +title: Reflect.getPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf +--- +
{{JSRef}}
+ +

静的な Reflect.getPrototypeOf() メ゜ッドは、{{jsxref("Object.getPrototypeOf()")}} ずほが同じメ゜ッドです。これは指定したオブゞェクトのプロトタむプ (぀たり、内郚の [[Prototype]] プロパティの倀) を返したす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-getprototypeof.html")}}
+ + + +

構文

+ +
Reflect.getPrototypeOf(target)
+
+ +

匕数

+ +
+
target
+
プロトタむプを取埗する察象のオブゞェクトです。
+
+ +

返倀

+ +

䞎えられたオブゞェクトのプロトタむプです。継承されたプロパティがない堎合、{{jsxref("null")}} を返したす。

+ +

䟋倖

+ +

target が {{jsxref("Object")}} でない堎合に {{jsxref("TypeError")}} がスロヌされたす。

+ +

解説

+ +

Reflect.getPrototypeOf メ゜ッドは、指定したオブゞェクトのプロトタむプ (぀たり、内郚の [[Prototype]] プロパティの倀) を返したす。

+ +

䟋

+ +

Reflect.getPrototypeOf() の䜿甚

+ +
Reflect.getPrototypeOf({})                  // Object.prototype
+Reflect.getPrototypeOf(Object.prototype)    // null
+Reflect.getPrototypeOf(Object.create(null)) // null
+
+ +

Object.getPrototypeOf() ずの比范

+ +
// Object の結果は同じです
+Object.getPrototypeOf({})   // Object.prototype
+Reflect.getPrototypeOf({})  // Object.prototype
+
+// ES5 䞊では非Objectの結果は䞡方ずも䟋倖です
+Object.getPrototypeOf('foo')   // Throws TypeError
+Reflect.getPrototypeOf('foo')  // Throws TypeError
+
+// ES2015 䞊では Reflect のみ䟋倖で、Object は 非Object を Object ずしお扱いたす
+Object.getPrototypeOf('foo')   // String.prototype
+Reflect.getPrototypeOf('foo')  // Throws TypeError
+
+// To mimic the Object ES2015 behavior you need to coerce
+Reflect.getPrototypeOf(Object('foo'))  // String.prototype
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.getprototypeof', 'Reflect.getPrototypeOf')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.getPrototypeOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/has/index.html b/files/ja/web/javascript/reference/global_objects/reflect/has/index.html new file mode 100644 index 0000000000..eb077b2394 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/has/index.html @@ -0,0 +1,99 @@ +--- +title: Reflect.has() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/has +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/has +--- +
{{JSRef}}
+ +

静的な Reflect.has() メ゜ッドは、機胜ずしおは in 挔算子のように動䜜したす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-has.html")}}
+ + + +

構文

+ +
Reflect.has(target, propertyKey)
+
+ +

匕数

+ +
+
target
+
プロパティを探す察象のオブゞェクト。
+
propertyKey
+
チェックするプロパティ名。
+
+ +

返倀

+ +

察象がプロパティを持぀かどうかを瀺す {{jsxref("Boolean")}} 倀。

+ +

䟋倖

+ +

target が {{jsxref("Object")}} でなかった堎合、 {{jsxref("TypeError")}} が発生したす。

+ +

解説

+ +

Reflect.has メ゜ッドは、オブゞェクトプロパティがあるかをチェックしたす。機胜ずしおは in 挔算子のように動䜜したす。

+ +

䟋

+ +

Reflect.has() の䜿甚

+ +
Reflect.has({x: 0}, 'x')  // true
+Reflect.has({x: 0}, 'y')  // false
+
+// プロトタむプチェヌンのプロパティがあるため、true が返る
+Reflect.has({x: 0}, 'toString')
+
+// Proxy with .has() handler method
+obj = new Proxy({}, {
+  has(t, k) { return k.startsWith('door')  }
+});
+Reflect.has(obj, 'doorbell')  // true
+Reflect.has(obj, 'dormitory')  // false
+
+ +

Reflect.has は継承されたプロパティに぀いお true を返し、これは in 挔算子ず同様です。

+ +
const a = {foo: 123}
+const b = {__proto__: a}
+const c = {__proto__: b}
+// The prototype chain is: c -> b -> a
+Reflect.has(c, 'foo') // true
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.has', 'Reflect.has')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.has")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/index.html b/files/ja/web/javascript/reference/global_objects/reflect/index.html new file mode 100644 index 0000000000..6f64386a31 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/index.html @@ -0,0 +1,84 @@ +--- +title: Reflect +slug: Web/JavaScript/Reference/Global_Objects/Reflect +tags: + - ECMAScript 2015 + - JavaScript + - Overview + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect +--- +
{{JSRef}}
+ +

Reflect は、介入可胜な JavaScript 操䜜に察するメ゜ッドを提䟛する組蟌みオブゞェクトです。メ゜ッドはプロキシハンドラヌのメ゜ッドず同じです。 Reflect は関数オブゞェクトではありたせんので、構築するこずはできたせん。

+ +

解説

+ +

他のグロヌバルオブゞェクトずは異なり、 Reflect はコンストラクタヌではありたせん。 new 挔算子で䜿甚したり、 Reflect オブゞェクトを関数ずしお呌び出すこずはできたせん。 Reflect のすべおのプロパティずメ゜ッドは ({{jsxref("Math")}} オブゞェクトず同様に) 静的です。

+ +

Reflect オブゞェクトはプロキシハンドラヌメ゜ッドず同じ名前をも぀、䞋蚘の関数を提䟛したす。

+ +

これらのメ゜ッドの䞀郚は {{jsxref("Object")}} の察応するメ゜ッドずも同じですが、これらの間にはいくらか埮劙な違いがありたす。

+ +

メ゜ッド

+ +
+
{{jsxref("Reflect.apply()", "Reflect.apply(target, thisArgument, argumentsList)")}}
+
target 関数を、匕数 argumentsList で指定された匕数で呌び出したす。 {{jsxref("Function.prototype.apply()")}} も参照しおください。
+
{{jsxref("Reflect.construct()", "Reflect.construct(target, argumentsList[, newTarget])")}}
+
関数ずしおの new 挔算子です。 new target(...argumentsList) を呌び出すのず等䟡です。別なプロトタむプを指定するためにオプションを指定するこずもできたす。
+
{{jsxref("Reflect.defineProperty()", "Reflect.defineProperty(target, propertyKey, attributes)")}}
+
{{jsxref("Object.defineProperty()")}} ず同様です。返倀は {{jsxref("Boolean")}} で、プロパティが定矩できた堎合は true を返したす。
+
{{jsxref("Reflect.deleteProperty()", "Reflect.deleteProperty(target, propertyKey)")}}
+
関数ずしおの delete 挔算子です。 delete target[propertyKey] を呌び出すのず等䟡です。
+
{{jsxref("Reflect.get()", "Reflect.get(target, propertyKey[, receiver])")}}
+
このプロパティの倀を返したす。オブゞェクトからのプロパティの取埗 (target[propertyKey]) を関数にしたようなものです。
+
{{jsxref("Reflect.getOwnPropertyDescriptor()", "Reflect.getOwnPropertyDescriptor(target, propertyKey)")}}
+
{{jsxref("Object.getOwnPropertyDescriptor()")}} に䌌おいたす。指定したプロパティが存圚する堎合にプロパティディスクリプタヌを返し、存圚しない堎合は {{jsxref("undefined")}} を返したす。
+
{{jsxref("Reflect.getPrototypeOf()", "Reflect.getPrototypeOf(target)")}}
+
{{jsxref("Object.getPrototypeOf()")}} ず同じです。
+
{{jsxref("Reflect.has()", "Reflect.has(target, propertyKey)")}}
+
{{jsxref("Boolean")}} で察象がそのプロパティを持っおいるかどうかを返したす。固有の堎合も継承の堎合も含みたす。 in 挔算子を関数にしたものです。
+
{{jsxref("Reflect.isExtensible()", "Reflect.isExtensible(target)")}}
+
{{jsxref("Object.isExtensible()")}} ず同じです。 {{jsxref("Boolean")}} を返し、 true ならば察象が拡匵可胜です。
+
{{jsxref("Reflect.ownKeys()", "Reflect.ownKeys(target)")}}
+
独自の (継承されおいるものではない) プロパティのキヌをも぀文字列の配列を返したす。
+
{{jsxref("Reflect.preventExtensions()", "Reflect.preventExtensions(target)")}}
+
{{jsxref("Object.preventExtensions()")}} に䌌おいたす。 {{jsxref("Boolean")}} を返し、 true は曎新に成功した堎合です。
+
{{jsxref("Reflect.set()", "Reflect.set(target, propertyKey, value[, receiver])")}}
+
倀をプロパティに割り圓おる関数です。曎新に成功したら true ずなる {{jsxref("Boolean")}} を返したす。
+
{{jsxref("Reflect.setPrototypeOf()", "Reflect.setPrototypeOf(target, prototype)")}}
+
オブゞェクトのプロトタむプを蚭定する関数です。 {{jsxref("Boolean")}} を返し、 true ならば成功です。
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect-object', 'Reflect')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + + +
+
+
diff --git a/files/ja/web/javascript/reference/global_objects/reflect/isextensible/index.html b/files/ja/web/javascript/reference/global_objects/reflect/isextensible/index.html new file mode 100644 index 0000000000..e3ee426638 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/isextensible/index.html @@ -0,0 +1,104 @@ +--- +title: Reflect.isExtensible() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible +--- +
{{JSRef}}
+ +

静的な Reflect.isExtensible() メ゜ッドは 、オブゞェクトを拡匵できるかを枬定したす (オブゞェクトに远加された新しいプロパティを持おるかどうか)。これは {{jsxref("Object.isExtensible()")}} に䌌おいたすが、いく぀かの違いがありたす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-isextensible.html", "taller")}}
+ + + +

構文

+ +
Reflect.isExtensible(target)
+
+ +

匕数

+ +
+
target
+
拡匵できるかどうかをチェックする察象のオブゞェクト。
+
+ +

返倀

+ +

察象が拡匵可胜かどうかを瀺す {{jsxref("Boolean")}} 倀。

+ +

䟋倖

+ +

{{jsxref("TypeError")}}: target が {{jsxref("Object")}} ではなかった堎合。

+ +

解説

+ +

Reflect.isExtensible メ゜ッドは 、オブゞェクトを拡匵できるかを枬定したすオブゞェクトに远加された新しいプロパティを持おるかどうか。これは {{jsxref("Object.isExtensible()")}} ず同じメ゜ッドです。

+ +

䟋

+ +

Reflect.isExtensible() の䜿甚

+ +

{{jsxref("Object.isExtensible()")}} も芋おください。

+ +
// 今オブゞェクトは拡匵可胜。
+let empty = {}
+Reflect.isExtensible(empty)  // === true
+
+// ...しかし、倉曎できたす
+Reflect.preventExtensions(empty)
+Reflect.isExtensible(empty)  // === false
+
+// シヌルドオブゞェクトは拡匵できないように定矩される。
+let sealed = Object.seal({})
+Reflect.isExtensible(sealed)  // === false
+
+// フロヌズンオブゞェクトも拡匵できないように定矩される。
+let frozen = Object.freeze({})
+Reflect.isExtensible(frozen)  // === false
+
+ +

Object.isExtensible() ずの違い

+ +

このメ゜ッドぞの最初の匕数がオブゞェクトではなかった (プリミティブであった) 堎合、これは {{jsxref("TypeError")}} を匕き起こしたす。{{jsxref("Object.isExtensible()")}} だず、オブゞェクトではない最初の匕数はオブゞェクトに匷制的に倉換されたす。

+ +
Reflect.isExtensible(1)
+// TypeError: 1 はオブゞェクトではない
+
+Object.isExtensible(1)
+// false
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.isextensible', 'Reflect.isExtensible')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.isExtensible")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/ownkeys/index.html b/files/ja/web/javascript/reference/global_objects/reflect/ownkeys/index.html new file mode 100644 index 0000000000..51b538dfba --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/ownkeys/index.html @@ -0,0 +1,88 @@ +--- +title: Reflect.ownKeys() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys +--- +
{{JSRef}}
+ +

静的な Reflect.ownKeys() メ゜ッドは、 target オブゞェクトが持぀プロパティキヌの配列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-ownkeys.html")}}
+ + + +

構文

+ +
Reflect.ownKeys(target)
+
+ +

匕数

+ +
+
target
+
キヌを取埗する察象のオブゞェクト
+
+ +

返倀

+ +

target オブゞェクトが持぀プロパティキヌの {{jsxref("Array")}} 。

+ +

䟋倖

+ +

{{jsxref("TypeError")}}: target が {{jsxref("Object")}} ではない堎合

+ +

解説

+ +

Reflect.ownKeys メ゜ッドは、察象のオブゞェクトが持぀プロパティキヌの配列を返したす。この返倀は、{{jsxref("Object.getOwnPropertyNames", "Object.getOwnPropertyNames(target)", "", 1)}}.concat({{jsxref("Object.getOwnPropertySymbols", "Object.getOwnPropertySymbols(target)", "", 1)}}) ず同じです。

+ +

䟋

+ +

Reflect.ownKeys() の䜿甚

+ +
Reflect.ownKeys({z: 3, y: 2, x: 1})  // [ "z", "y", "x" ]
+Reflect.ownKeys([])                  // ["length"]
+
+let sym = Symbol.for('comet')
+let sym2 = Symbol.for('meteor')
+let obj = {[sym]: 0, 'str': 0, '773': 0, '0': 0,
+           [sym2]: 0, '-1': 0, '8': 0, 'second str': 0}
+Reflect.ownKeys(obj)
+// [ "0", "8", "773", "str", "-1", "second str", Symbol(comet), Symbol(meteor) ]
+// 数字順のむンデックス、
+// 挿入順の文字列、
+// 挿入順のシンボル
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.ownkeys', 'Reflect.ownKeys')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.ownKeys")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/preventextensions/index.html b/files/ja/web/javascript/reference/global_objects/reflect/preventextensions/index.html new file mode 100644 index 0000000000..a11bc64f93 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/preventextensions/index.html @@ -0,0 +1,96 @@ +--- +title: Reflect.preventExtensions() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions +--- +
{{JSRef}}
+ +

静的な Reflect.preventExtensions() メ゜ッドは、すでにプロパティが远加されたオブゞェクトに、新しいプロパティを抑制したす (぀たり、オブゞェクトのさらなる拡匵を抑制したす)。 {{jsxref("Object.preventExtensions()")}} に䌌おいたすが、違いがありたす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-preventextensions.html")}}
+ + + +

構文

+ +
Reflect.preventExtensions(target)
+
+ +

匕数

+ +
+
target
+
拡匵を抑止する察象のオブゞェクト。
+
+ +

返倀

+ +

{{jsxref("Boolean")}} で、察象が拡匵の抑止の蚭定に成功したかどうかを衚したす。

+ +

䟋倖

+ +

{{jsxref("TypeError")}}: target が {{jsxref("Object")}} ではない堎合

+ +

解説

+ +

Reflect.preventExtensions メ゜ッドは、すでにプロパティが远加されたオブゞェクトに、新しいプロパティを抑制したす (぀たり、オブゞェクトのさらなる拡匵を抑制したす)。これは {{jsxref("Object.preventExtensions()")}} ず同様のメ゜ッドです。

+ +

䟋

+ +

Reflect.preventExtensions() の䜿甚

+ +

{{jsxref("Object.preventExtensions()")}} も参照しおください。

+ +
// オブゞェクトは既定で拡匵可胜。
+let empty = {}
+Reflect.isExtensible(empty)  // === true
+
+// ...しかし、倉曎できる。
+Reflect.preventExtensions(empty)
+Reflect.isExtensible(empty)  // === false
+
+ +

Object.preventExtensions() ずの違い

+ +

このメ゜ッドぞの最初の匕数がオブゞェクトではない (プリミティブである) 堎合、 {{jsxref("TypeError")}} が発生したす。 {{jsxref("Object.preventExtensions()")}} では、 target がオブゞェクトではない堎合はオブゞェクトに匷制的に倉換されたす。

+ +
Reflect.preventExtensions(1)
+// TypeError: 1 is not an object
+
+Object.preventExtensions(1)
+// 1
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.preventextensions', 'Reflect.preventExtensions')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.preventExtensions")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/set/index.html b/files/ja/web/javascript/reference/global_objects/reflect/set/index.html new file mode 100644 index 0000000000..df00e589b4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/set/index.html @@ -0,0 +1,101 @@ +--- +title: Reflect.set() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/set +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/set +--- +
{{JSRef}}
+ +

静的な Reflect.set() メ゜ッドは、オブゞェクトにプロパティを蚭定するかのように動䜜したす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-set.html")}}
+ + + +

構文

+ +
Reflect.set(target, propertyKey, value[, receiver])
+
+ +

匕数

+ +
+
target
+
プロパティを蚭定する察象のオブゞェクト。
+
propertyKey
+
蚭定するプロパティ名。
+
value
+
蚭定する倀。
+
receiver {{optional_inline}}
+
セッタヌによっお target が呌び出されたずきの this 倀を提䟛する。
+
+ +

返倀

+ +

プロパティが成功裏に蚭定できたかどうかを瀺す {{jsxref("Boolean")}} 倀。

+ +

䟋倖

+ +

{{jsxref("TypeError")}}: target が {{jsxref("Object")}} ではなかった堎合。

+ +

解説

+ +

Reflect.set メ゜ッドは、オブゞェクトにプロパティを蚭定したす。これはプロパティの割り圓おを行い、機胜ずしおは プロパティアクセサヌ 構文のようなものです。

+ +

䟋

+ +

Reflect.set() の䜿甚

+ +
// オブゞェクト
+let obj = {}
+Reflect.set(obj, 'prop', 'value')  // true
+obj.prop  // "value"
+
+// 配列
+let arr = ['duck', 'duck', 'duck']
+Reflect.set(arr, 2, 'goose')  // true
+arr[2]  // "goose"
+
+// 配列を切り詰められる。
+Reflect.set(arr, 'length', 1)  // true
+arr  // ["duck"]
+
+// 匕数が1぀だけだず、プロパティキヌず倀は "undefined" になる。
+let obj = {}
+Reflect.set(obj)  // true
+Reflect.getOwnPropertyDescriptor(obj, 'undefined')
+// { value: undefined, writable: true, enumerable: true, configurable: true }
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.set', 'Reflect.set')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.set")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/reflect/setprototypeof/index.html b/files/ja/web/javascript/reference/global_objects/reflect/setprototypeof/index.html new file mode 100644 index 0000000000..6bf66c812d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/setprototypeof/index.html @@ -0,0 +1,90 @@ +--- +title: Reflect.setPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf +--- +
{{JSRef}}
+ +

静的な Reflect.setPrototypeOf() メ゜ッドは、返倀を陀いお、 {{jsxref("Object.setPrototypeOf()")}} ず同じメ゜ッドです。これは指定されたオブゞェクトのプロトタむプ (぀たり、内郚の [[Prototype]] プロパティ) にほかのオブゞェクト、たたは {{jsxref("null")}} を蚭定し、操䜜が成功したなら true を、そうでないなら false を返したす。

+ +
{{EmbedInteractiveExample("pages/js/reflect-setprototypeof.html")}}
+ + + +

構文

+ +
Reflect.setPrototypeOf(target, prototype)
+
+ +

匕数

+ +
+
target
+
プロトタむプを蚭定する察象のオブゞェクトです。
+
prototype
+
オブゞェクトの新しいプロトタむプ (オブゞェクトたたは {{jsxref("null")}}) です。
+
+ +

返倀

+ +

プロトタむプが正垞に蚭定されたかどうかを瀺す {{jsxref("Boolean")}} 倀です。

+ +

䟋倖

+ +

{{jsxref("TypeError")}}: target が {{jsxref("Object")}} ではない堎合、たたは prototype がオブゞェクトでも {{jsxref("null")}} でもない堎合。

+ +

解説

+ +

Reflect.setPrototypeOf メ゜ッドは、指定されたオブゞェクトのプロトタむプ (぀たり、内郚の [[Prototype]] プロパティ) を倉曎したす。

+ +

䟋

+ +

Reflect.setPrototypeOf() の䜿甚

+ +
Reflect.setPrototypeOf({}, Object.prototype)  // true
+
+// オブゞェクトの [[Prototype]] は null に倉曎できる。
+Reflect.setPrototypeOf({}, null)  // true
+
+// 察象が拡匵できない堎合、false を返す。
+Reflect.setPrototypeOf(Object.freeze({}), null)  // false
+
+// プロトタむプチェヌンが埪環する堎合、false を返す。
+let target = {}
+let proto = Object.create(target)
+Reflect.setPrototypeOf(target, proto)  // false
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-reflect.setprototypeof', 'Reflect.setPrototypeOf')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Reflect.setPrototypeOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/@@match/index.html b/files/ja/web/javascript/reference/global_objects/regexp/@@match/index.html new file mode 100644 index 0000000000..4359a94e96 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/@@match/index.html @@ -0,0 +1,116 @@ +--- +title: 'RegExp.prototype[@@match]()' +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@match +tags: + - JavaScript + - Method + - Prototype + - Reference + - RegExp + - Regular Expression +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@match +--- +
{{JSRef}}
+ +

[@@match]() メ゜ッドは、文字列の正芏衚珟に䞀臎した郚分を取埗したす。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@match.html")}}
+ + + +

構文

+ +
regexp[Symbol.match](str)
+ +

匕数

+ +
+
str
+
䞀臎の察象ずなる {{jsxref("String")}}。
+
+ +

返倀

+ +

䞀臎した党䜓の結果ず括匧が捕捉した䞀臎箇所の結果を含む {{jsxref("Array")}}。䞀臎するものがなかった堎合は、{{jsxref("null")}}。

+ +

解説

+ +

このメ゜ッドは、{{jsxref("String.prototype.match()")}} で内郚的に呌び出されたす。

+ +

たずえば、次の 2 ぀の䟋は同じ結果を返したす。

+ +
'abc'.match(/a/);
+
+/a/[Symbol.match]('abc');
+ +

このメ゜ッドは、RegExp サブクラス内で䞀臎の振る舞いをカスタマむズするために存圚しおいたす。

+ +

䟋

+ +

盎接呌び出し

+ +

このメ゜ッドは、ほずんど {{jsxref("String.prototype.match()")}} ず同じ方法で䜿甚するこずができたすが、 this ず匕数の䞊び順が異なりたす。

+ +
let re = /[0-9]+/g;
+let str = '2016-01-02';
+let result = re[Symbol.match](str);
+console.log(result);  // ["2016", "01", "02"]
+
+ +

サブクラスで @@match を䜿甚

+ +

{{jsxref("RegExp")}} のサブクラスは、既定の動䜜を修正するために [@@match]() メ゜ッドをオヌバヌラむドできたす。

+ +
class MyRegExp extends RegExp {
+  [Symbol.match](str) {
+    let result = RegExp.prototype[Symbol.match].call(this, str);
+    if (!result) return null;
+    return {
+      group(n) {
+        return result[n];
+      }
+    };
+  }
+}
+
+let re = new MyRegExp('([0-9]+)-([0-9]+)-([0-9]+)');
+let str = '2016-01-02';
+let result = str.match(re); // String.prototype.match calls re[@@match].
+console.log(result.group(1)); // 2016
+console.log(result.group(2)); // 01
+console.log(result.group(3)); // 02
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp.prototype-@@match', 'RegExp.prototype[@@match]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.@@match")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/@@matchall/index.html b/files/ja/web/javascript/reference/global_objects/regexp/@@matchall/index.html new file mode 100644 index 0000000000..6c85b1921e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/@@matchall/index.html @@ -0,0 +1,112 @@ +--- +title: 'RegExp.prototype[@@matchAll]()' +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@matchAll +tags: + - JavaScript + - Method + - Prototype + - Reference + - RegExp + - Regular Expressions + - メ゜ッド + - 正芏衚珟 +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@matchAll +--- +
{{JSRef}}
+ +

[@@matchAll] メ゜ッドは、文字列に察する正芏衚珟で䞀臎するすべおのものを返したす。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@matchall.html", "taller")}}
+ + + +

構文

+ +
regexp[Symbol.matchAll](str)
+ +

匕数

+ +
+
str
+
䞀臎の察象ずなる {{jsxref("String")}} です。
+
+ +

返倀

+ +

むテレヌタヌです。

+ +

解説

+ +

このメ゜ッドは内郚的に {{jsxref("String.prototype.matchAll()")}} を呌び出したす。䟋えば、以䞋の2぀の䟋は同じ結果を返したす。

+ +
'abc'.matchAll(/a/);
+
+/a/[Symbol.matchAll]('abc');
+ +

このメ゜ッドは matchAll() の動䜜を {{jsxref('RegExp')}} のサブクラスの䞭でカスタマむズするために存圚したす。

+ +

䟋

+ +

盎接呌び出し

+ +

このメ゜ッドは {{jsxref("String.prototype.matchAll()")}}, ずほが同様に䜿甚するこずができたすが、 this の倀ず匕数の順序が違う点が異なりたす。

+ +
let re = /[0-9]+/g;
+let str = '2016-01-02';
+let result = re[Symbol.matchAll](str);
+
+console.log(Array.from(result, x => x[0]));
+// ["2016", "01", "02"]
+
+ +

サブクラスでの @@matchAll の䜿甚

+ +

{{jsxref("RegExp")}} のサブクラスは [@@matchAll]() メ゜ッドを䞊曞きしお既定の動䜜を倉曎するこずができたす。

+ +

䟋えば、 {{jsxref("Array")}} をむテレヌタヌの代わりに返すこずができたす。

+ +
class MyRegExp extends RegExp {
+  [Symbol.matchAll](str) {
+    const result = RegExp.prototype[Symbol.matchAll].call(this, str);
+    if (!result) {
+      return null;
+    } else {
+      return Array.from(result);
+    }
+  }
+}
+
+const re = new MyRegExp('([0-9]+)-([0-9]+)-([0-9]+)', 'g');
+const str = '2016-01-02|2019-03-07';
+const result = str.matchAll(re);
+console.log(result[0]); // [ "2016-01-02", "2016", "01", "02" ]
+console.log(result[1]); // [ "2019-03-07", "2019", "03", "07" ]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp-prototype-matchall', 'RegExp.prototype[@@matchAll]')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.RegExp.@@matchAll")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/@@replace/index.html b/files/ja/web/javascript/reference/global_objects/regexp/@@replace/index.html new file mode 100644 index 0000000000..3383b052d3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/@@replace/index.html @@ -0,0 +1,120 @@ +--- +title: 'RegExp.prototype[@@replace]()' +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@replace +tags: + - JavaScript + - Method + - Prototype + - Reference + - RegExp + - Regular Expression +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@replace +--- +
{{JSRef}}
+ +

[@@replace]() メ゜ッドは文字列内の this パタヌンの䞀郚たたは、すべおの䞀臎箇所を replacement で眮き換え、眮換結果を新しい文字列ずしお返したす。 replacement は文字列にするか、関数にしおすべおの䞀臎箇所ごずに呌び出されるようにするこずができたす。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@replace.html")}}
+ + + +

構文

+ +
regexp[Symbol.replace](str, newSubStr|function)
+ +

匕数

+ +
+
str
+
眮換の察象ずなる {{jsxref("String")}} です。
+
newSubStr (眮換内容)
+
郚分文字列を眮き換える {{jsxref("String")}} です。特殊な眮換パタヌンの数倀に察応しおいたす。 {{jsxref("String.prototype.replace()")}} ペヌゞの{{jsxref("String.prototype.replace", "匕数ずしおの文字列の指定", "#Specifying_a_string_as_a_parameter", 1)}}の節を参照しおください。
+
function (眮換内容)
+
新しい郚分文字列を生成するために呌び出される関数。この関数に提䟛される匕数に぀いおは、{{jsxref("String.prototype.replace()")}} ペヌゞの{{jsxref("String.prototype.replace", "匕数ずしおの関数の指定", "#Specifying_a_function_as_a_parameter", 1)}}の節を芋おください。
+
+ +

返倀

+ +

䞀郚たたはすべおのパタヌンの䞀臎箇所が眮換内容によっお眮き換えられた新しい文字列です。

+ +

解説

+ +

このメ゜ッドは {{jsxref("String.prototype.replace()")}} の䞭で、 pattern 匕数が {{jsxref("RegExp")}} オブゞェクトであった堎合に内郚的に呌び出されたす。たずえば、次の 2 ぀の䟋は同じ結果を返したす。

+ +
'abc'.replace(/a/, 'A');
+
+/a/[Symbol.replace]('abc', 'A');
+ +

このメ゜ッドは、 RegExp サブクラスの眮換動䜜をカスタマむズするために存圚しおいたす。

+ +

{{jsxref("String.prototype.replace()")}} は pattern 匕数が {{jsxref("RegExp")}} オブゞェクトではない堎合、このメ゜ッドの呌び出しや {{jsxref("RegExp")}} オブゞェクトの生成を行いたせん。

+ +

䟋

+ +

盎接呌出し

+ +

this ず匕数の順序が異なる点を陀いお、このメ゜ッドは {{jsxref("String.prototype.replace()")}} ずほどんど同じ䜿い方ができたす。

+ +
var re = /-/g;
+var str = '2016-01-01';
+var newstr = re[Symbol.replace](str, '.');
+console.log(newstr);  // 2016.01.01
+
+ +

サブクラスでの @@replace の䜿甚

+ +

既定の動䜜を修正するために、{{jsxref("RegExp")}} のサブクラスで [@@replace]() メ゜ッドをオヌバヌラむドできたす。

+ +
class MyRegExp extends RegExp {
+  constructor(pattern, flags, count) {
+    super(pattern, flags);
+    this.count = count;
+  }
+  [Symbol.replace](str, replacement) {
+    // Perform @@replace |count| times.
+    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 MyRegExp('\\d', '', 3);
+var str = '01234567';
+var newstr = str.replace(re, '#'); // String.prototype.replace calls re[@@replace].
+console.log(newstr); // ###34567
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp.prototype-@@replace', 'RegExp.prototype[@@replace]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.@@replace")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/@@search/index.html b/files/ja/web/javascript/reference/global_objects/regexp/@@search/index.html new file mode 100644 index 0000000000..2f4449ab2e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/@@search/index.html @@ -0,0 +1,113 @@ +--- +title: 'RegExp.prototype[@@search]()' +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@search +tags: + - JavaScript + - Method + - Prototype + - Reference + - RegExp + - Regular Expression +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@search +--- +
{{JSRef}}
+ +

[@@search]() メ゜ッドは、this 正芏衚珟ず文字列の間で䞀臎させるための怜玢を実行したす。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@search.html")}}
+ + + +

構文

+ +
regexp[Symbol.search](str)
+ +

匕数

+ +
+
str
+
怜玢察象の {{jsxref("String")}} です。
+
+ +

返倀

+ +
+
integer
+
成功した堎合、[@@search]() は文字列内で正芏衚珟に最初に䞀臎したむンデックスを返したす。そうではない堎合、-1 を返したす。
+
+ +

解説

+ +

このメ゜ッドは、 {{jsxref("String.prototype.search()")}} の内郚で呌び出されたす。たずえば、次の 2 ぀の䟋は同じ結果を返したす。

+ +
'abc'.search(/a/);
+
+/a/[Symbol.search]('abc');
+ +

このメ゜ッドは、RegExp サブクラスで怜玢動䜜をカスタマむズするために存圚しおいたす。

+ +

䟋

+ +

盎接呌出し

+ +

このメ゜ッドは、this ず匕数順が異なるこずを陀いお {{jsxref("String.prototype.search()")}} ずほが同じ方法で䜿甚できたす。

+ +
var re = /-/g;
+var str = '2016-01-02';
+var result = re[Symbol.search](str);
+console.log(result);  // 4
+
+ +

サブクラスでの @@search の䜿甚

+ +

{{jsxref("RegExp")}} のサブクラスは、動䜜を修正するために [@@search]() メ゜ッドをオヌバヌラむドできたす。

+ +
class MyRegExp extends RegExp {
+  constructor(str) {
+    super(str)
+    this.pattern = str;
+  }
+  [Symbol.search](str) {
+    return str.indexOf(this.pattern);
+  }
+}
+
+var re = new MyRegExp('a+b');
+var str = 'ab a+b';
+var result = str.search(re); // String.prototype.search は再定矩した [@@search] を呌び出す。
+console.log(result); // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.@@search")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/@@species/index.html b/files/ja/web/javascript/reference/global_objects/regexp/@@species/index.html new file mode 100644 index 0000000000..440ca4aeec --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/@@species/index.html @@ -0,0 +1,70 @@ +--- +title: 'get RegExp[@@species]' +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@species +tags: + - JavaScript + - Property + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@species +--- +
{{JSRef}}
+ +

RegExp[@@species] アクセサヌプロパティは RegExp コンストラクタヌを返したす。

+ +
{{EmbedInteractiveExample("pages/js/regexp-getregexp-@@species.html")}}
+ + + +

解説

+ +

species アクセサヌプロパティは、 RegExp の既定のコンストラクタヌを返したす。サブクラスのコンストラクタヌは、コンストラクタヌの割り圓おをオヌバヌラむドするためにこれを䜿甚するこずができたす。

+ +

䟋

+ +

通垞オブゞェクトの species

+ +

species プロパティは、既定のコンストラクタヌを返したす。 RegExp オブゞェクトであれば、 RegExp コンストラクタヌを返したす。

+ +
RegExp[Symbol.species]; // function RegExp()
+ +

掟生オブゞェクトの species

+ +

掟生クラスのコレクションオブゞェクト (たずえば、独自の正芏衚珟を衚す MyRegExp) では、 MyRegExp の species は MyRegExp コンストラクタヌです。しかし、掟生クラスのメ゜ッドで芪である RegExp オブゞェクトを返すようにこれをオヌバヌラむドしたくなるかもしれたせん。

+ +
class MyRegExp extends RegExp {
+  // MyRegExp の species を芪である RegExp コンストラクタにオヌバヌラむドしたす。
+  static get [Symbol.species]() { return RegExp; }
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-regexp-@@species', 'get RegExp [ @@species ]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.@@species")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/@@split/index.html b/files/ja/web/javascript/reference/global_objects/regexp/@@split/index.html new file mode 100644 index 0000000000..ac70871fde --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/@@split/index.html @@ -0,0 +1,111 @@ +--- +title: 'RegExp.prototype[@@split]()' +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@split +tags: + - JavaScript + - Method + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@split +--- +
{{JSRef}}
+ +

[@@split]() メ゜ッドは、文字列を郚分文字列に区切るこずによっお、 {{jsxref("String")}} オブゞェクトを文字列の配列に分割したす。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@split.html")}}
+ + + +

構文

+ +
regexp[Symbol.split](str[, limit])
+ +

匕数

+ +
+
str
+
分割操䜜の察象。
+
limit {{optional_inline}}
+
+

怜出される分割数の制限を指定する敎数。 [@@split]() メ゜ッドは、 this RegExp パタヌン (たたは䞊蚘の構文では regexp) に䞀臎するたびに、分割項目の数が limit ず䞀臎するか、文字列が this パタヌンを満たなくなるたで、分割を行いたす。

+
+
+ +

返倀

+ +

芁玠ずしお郚分文字列を含む {{jsxref("Array")}}。

+ +

解説

+ +

このメ゜ッドは {{jsxref("String.prototype.split()")}} の内郚で、 separator 匕数が @@split メ゜ッドを持぀オブゞェクト、たずえば {{jsxref("RegExp")}} オブゞェクトだった堎合に呌び出されたす。たずえば、次の 2 ぀の䟋は同じ結果を返したす。

+ +
'a-b-c'.split(/-/);
+
+/-/[Symbol.split]('a-b-c');
+ +

このメ゜ッドは、RegExp のサブクラスで split() の動䜜をカスタマむズするために存圚したす。

+ +

䟋

+ +

盎接呌出し

+ +

this の扱いず匕数の䞊び順を陀いお、このメ゜ッドは {{jsxref("String.prototype.split()")}} ずほずんど同じように䜿甚できたす。

+ +
let re = /-/g;
+let str = '2016-01-02';
+let result = re[Symbol.split](str);
+console.log(result);  // ["2016", "01", "02"]
+
+ +

サブクラスで @@split を䜿甚する

+ +

既定の動䜜を修正するために、{{jsxref("RegExp")}} のサブクラスで [@@split]() メ゜ッドをオヌバヌラむドできたす。

+ +
class MyRegExp extends RegExp {
+  [Symbol.split](str, limit) {
+    let result = RegExp.prototype[Symbol.split].call(this, str, limit);
+    return result.map(x => "(" + x + ")");
+  }
+}
+
+let re = new MyRegExp('-');
+let str = '2016-01-02';
+let result = str.split(re); // String.prototype.split calls re[@@split].
+console.log(result); // ["(2016)", "(01)", "(02)"]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp.prototype-@@split', 'RegExp.prototype[@@split]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.@@split")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/compile/index.html b/files/ja/web/javascript/reference/global_objects/regexp/compile/index.html new file mode 100644 index 0000000000..09017079c6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/compile/index.html @@ -0,0 +1,85 @@ +--- +title: RegExp.prototype.compile() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/compile +tags: + - Deprecated + - JavaScript + - Method + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/compile +--- +
{{JSRef}} {{deprecated_header}}
+ +

非掚奚の compile() メ゜ッドは、スクリプトの実行䞭に正芏衚珟を(再)コンパむルするために䜿われたす。基本的に RegExp コンストラクタヌず同じです。

+ +

構文

+ +
regexObj.compile(pattern, flags)
+ +

匕数

+ +
+
pattern
+
正芏衚珟のテキスト
+
flags
+
+

指定された堎合、フラグは次の倀の任意の組み合わせになりたす。

+ +
+
g
+
グロヌバルマッチ
+
i
+
倧文字小文字の違いを無芖
+
m
+
耇数行。始たりず終わりの文字 (^ ず $) を耇数行にわたっお動䜜するものずしお扱いたす。 (すなわち、 それぞれの行の始たりず終わりにマッチしたす。(\n たたは \r によっお区切られたす)、入力文字列党䜓の始たりず終わりだけではありたせん。)
+
y
+
先頭固定。察象文字列においおこの正芏衚珟の lastIndex プロパティによっお瀺されるむンデックスからのみ怜玢したす (それ以降のむンデックスから怜玢しようずはしたせん)。
+
+
+
+ +

解説

+ +

compile メ゜ッドは非掚奚です。同じ効果を埗るには、 RegExp コンストラクタヌを䜿甚しおください。

+ +

䟋

+ +

compile() の䜿甚

+ +

次の䟋では、新しいパタヌンずフラグで正芏衚珟を再コンパむルする方法を瀺したす。

+ +
var regexObj = new RegExp('foo', 'gi');
+regexObj.compile('new foo', 'g');
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp.prototype.compile', 'RegExp.prototype.compile')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.compile")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/dotall/index.html b/files/ja/web/javascript/reference/global_objects/regexp/dotall/index.html new file mode 100644 index 0000000000..b7e18ebf2d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/dotall/index.html @@ -0,0 +1,87 @@ +--- +title: RegExp.prototype.dotAll +slug: Web/JavaScript/Reference/Global_Objects/RegExp/dotAll +tags: + - Draft + - JavaScript + - Property + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/dotAll +--- +

{{JSRef}}

+ +

dotAll プロパティは、正芏衚珟で "s" フラグが䜿甚されおいるかどうかを瀺したす。 dotAll は、個々の正芏衚珟むンスタンスの読み取り専甚プロパティです。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-dotall.html")}}
+ +

{{JS_Property_Attributes(0, 0, 1)}}

+ +

説明

+ +

dotAllの倀は {{JSxRef("Boolean")}} であり、"s" フラグが䜿甚されおいる堎合は true 、それ以倖の堎合は false です。 "s" フラグは、ドット特殊文字 (".") が以䞋に瀺す行末蚘号 ("newline") 文字ず䞀臎するこずを瀺したす。これ以倖の堎合は䞀臎したせん:

+ + + +

これは事実䞊、ドットが基本倚蚀語面 (BMP) のすべおの文字ず䞀臎するこずを意味したす。 アストラル文字ず䞀臎させるには、"u" (ナニコヌド) フラグを䜿甚する必芁がありたす。 䞡方のフラグを組み合わせお䜿甚するず、ドットは䟋倖なく任意のナニコヌド文字に䞀臎したす。

+ +

このプロパティを盎接倉曎するこずはできたせん。

+ +

䟋

+ +

dotAllを䜿甚する

+ +
var str1 = 'bar\nexample foo example';
+
+var regex1 = new RegExp('bar.example','s');
+
+console.log(regex1.dotAll); // Output: true
+
+console.log(str1.replace(regex1,'')); // Output: foo example
+
+var str2 = 'bar\nexample foo example';
+
+var regex2 = new RegExp('bar.example');
+
+console.log(regex2.dotAll); // Output: false
+
+console.log(str2.replace(regex2,'')); // Output: bar
+                                      //         example foo example
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-regexp.prototype.dotAll', 'RegExp.prototype.dotAll')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.RegExp.dotAll")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/exec/index.html b/files/ja/web/javascript/reference/global_objects/regexp/exec/index.html new file mode 100644 index 0000000000..058f1c3cc7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/exec/index.html @@ -0,0 +1,198 @@ +--- +title: RegExp.prototype.exec() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/exec +tags: + - JavaScript + - Method + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/exec +--- +
{{JSRef}}
+ +

exec() メ゜ッドは、指定された文字列内で䞀臎するものの怜玢を実行したす。結果の配列、たたは {{jsxref("null")}} を返したす。

+ +

JavaScript の {{jsxref("RegExp")}} オブゞェクトは、 {{jsxref("RegExp.global", "global")}} たたは {{jsxref("RegExp.sticky", "sticky")}} フラグが蚭定されおいる堎合 (䟋えば /foo/g や /foo/y) はステヌトフルになりたす。これは前回の䞀臎䜍眮を {{jsxref("RegExp.lastIndex", "lastIndex")}} に栌玍したす。これを内郚的に䜿甚するこずで、 exec() はテキストの文字列内で (キャプチャグルヌプのある) 耇数の䞀臎を反埩凊理するこずができたす。これは単なる文字列の䞀臎を取埗する {{jsxref("String.prototype.match()")}} ずは察照的です。

+ +

より新しい関数ずしお、 (キャプチャグルヌプによる) 耇数の郚分の文字列の䞀臎を単玔化する {{jsxref("String.prototype.matchAll()")}} が提案されおいたす。

+ +

単に芋぀かったか芋぀からなかったかを true たたは false で知るために怜玢を実行するのであれば、 {{jsxref("RegExp.prototype.test()")}} メ゜ッドたたは {{jsxref("String.prototype.search()")}} メ゜ッドを䜿甚しおください。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-exec.html")}}
+ + + +

構文

+ +
regexObj.exec(str)
+ +

匕数

+ +
+
str
+
正芏衚珟に䞀臎するかどうかの察象ずなる文字列。
+
+ +

返倀

+ +

䞀臎に成功した堎合、 exec() メ゜ッドは配列を返し (远加のプロパティ index ず input 付き、以䞋参照)、正芏衚珟オブゞェクトの {{jsxref("RegExp.lastIndex", "lastIndex")}} プロパティを曎新したす。返された配列は、䞀臎したテキストを最初の項目ずしお持ち、その埌、䞀臎したテキストの括匧によるキャプチャグルヌプに察しお 1 ぀ず぀の項目を持ちたす。

+ +

䞀臎に倱敗した堎合は、 exec() メ゜ッドは {{jsxref("null")}} を返し、 {{jsxref("RegExp.lastIndex", "lastIndex")}} を 0 に蚭定したす。

+ +

解説

+ +

次の䟋を想定しおください。

+ +
// "quick brown" の埌に "jumps" が来るものを、その間の文字を無芖しお䞀臎させたす。
+// "brown" ず "jumps" を取埗したす。
+// 倧文字ず小文字は区別したせん。
+let re = /quick\s(brown).+?(jumps)/ig;
+let result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
+
+ +

このスクリプトの結果は以䞋の衚の通りです。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
オブゞェクトプロパティ/添字説明䟋
result[0]文字が䞀臎した郚分の文字列党䜓"Quick Brown Fox Jumps"
[1], ...[n] +

もしあれば、括匧に囲たれた郚分文字列が䞀臎したものです。

+ +

括匧に囲たれた郚分文字列の数に制限はありたせん。

+
+

result[1] === "Brown"

+ +

result[2] === "Jumps"

+
index0 から始める䞀臎した文字列の䜍眮。4
input怜玢察象ずなった元の文字列。The Quick Brown Fox Jumps Over The Lazy Dog
relastIndex +

次回の怜玢を始める䜍眮です。

+
g がない堎合は 0 のたたです。25
ignoreCase倧文字小文字を区別しない、 i フラグが指定されおいるかどうか。true
globalグロヌバルマッチのための、 g フラグが指定されおいるかどうか。true
multiline耇数行に枡っお文字列を怜玢する、 m フラグが指定されおいるかどうか。false
sourceパタヌンの文字列。quick\s(brown).+?(jumps)
+ +

䟋

+ +

成功する䞀臎の怜玢

+ +

正芏衚珟で "g" フラグを䜿甚する堎合、同じ文字列で成功する䞀臎を芋぀けるために exec() メ゜ッドを耇数回䜿うこずができたす。その際、怜玢は正芏衚珟オブゞェクトの {{jsxref("RegExp.lastIndex", "lastIndex")}} プロパティで指定された䜍眮の str の郚分文字列から始たりたす ({{jsxref("RegExp.prototype.test()", "test()")}} も {{jsxref("RegExp.lastIndex", "lastIndex")}} プロパティの䜍眮から始めたす)。なお、別な文字列を怜玢する堎合でも {{jsxref("RegExp.lastIndex", "lastIndex")}} プロパティはリセットされず、既存の {{jsxref("RegExp.lastIndex", "lastIndex")}} から怜玢を始めたす。

+ +

䟋えば、次のスクリプトを考えおみおください。

+ +
let myRe = /ab*/g;
+let str = 'abbcdefabh';
+let myArray;
+while ((myArray = myRe.exec(str)) !== null) {
+  let msg = myArray[0] + ' を芋぀けたした。';
+  msg += '次の怜玢は ' + myRe.lastIndex + ' からです。';
+  console.log(msg);
+}
+
+ +

このスクリプトは以䞋のテキストを衚瀺したす。

+ +
abb を芋぀けたした。次の怜玢は 3 からです。
+ab を芋぀けたした。次の怜玢は 9 からです。
+
+ +
+

譊告: 正芏衚珟リテラル (たたは {{jsxref("RegExp")}} コンストラクタヌ) を while の条件の䞭に配眮しないでください。

+ +

{{jsxref("RegExp.lastIndex", "lastIndex")}} プロパティが繰り返し毎にリセットされるので、無限ルヌプになりたす。

+ +

たた、グロヌバルフラグ ("g") が蚭定されおいるこずを確認しおください。これも無限ルヌプを匕き起こしたす。

+
+ +

RegExp リテラルでの exec() の䜿甚

+ +

{{jsxref("RegExp")}} オブゞェクトを䜜成せずに exec() を䜿甚するこずもできたす。

+ +
let matches = /(hello \S+)/.exec('This is a hello world!');
+console.log(matches[1]);
+
+ +

これで 'hello world!' を含んだメッセヌゞをログ出力したす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp.prototype.exec', 'RegExp.exec')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.exec")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/flags/index.html b/files/ja/web/javascript/reference/global_objects/regexp/flags/index.html new file mode 100644 index 0000000000..22ce044b2d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/flags/index.html @@ -0,0 +1,73 @@ +--- +title: RegExp.prototype.flags +slug: Web/JavaScript/Reference/Global_Objects/RegExp/flags +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/flags +--- +
{{JSRef}}
+ +

flags プロパティは、珟圚の正芏衚珟オブゞェクトのフラグから成る文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-flags.html")}}
+ + + +

{{JS_Property_Attributes(0, 0, 1)}}

+ +

解説

+ +

flags プロパティのフラグはアルファベット順に゜ヌトされたす(巊から右ぞ 䟋えば、"gimuy")。

+ +

䟋

+ +

flags の䜿甚

+ +
/foo/ig.flags;   // "gi"
+/bar/myu.flags;  // "muy"
+
+ +

ポリフィル

+ +
if (RegExp.prototype.flags === undefined) {
+  Object.defineProperty(RegExp.prototype, 'flags', {
+    configurable: true,
+    get: function() {
+      return this.toString().match(/[gimsuy]*$/)[0];
+    }
+  });
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName("ESDraft", "#sec-get-regexp.prototype.flags", "RegExp.prototype.flags")}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.RegExp.flags")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/global/index.html b/files/ja/web/javascript/reference/global_objects/regexp/global/index.html new file mode 100644 index 0000000000..53640842fe --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/global/index.html @@ -0,0 +1,80 @@ +--- +title: RegExp.prototype.global +slug: Web/JavaScript/Reference/Global_Objects/RegExp/global +tags: + - JavaScript + - Property + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/global +--- +
{{JSRef}}
+ +

global プロパティは "g" フラグが正芏衚珟で䜿われおいるかどうかを返したす。global は個々の正芏衚珟むンスタンスの読取専甚プロパティです。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-global.html")}}
+ + + +
{{js_property_attributes(0, 0, 1)}}
+ +

解説

+ +

global の倀は {{jsxref("Boolean")}} です。 true は "g" フラグを䜿甚しおいるこずを衚したす。それ以倖は false になりたす。 "g" フラグは、その正芏衚珟が文字列の䞭で䞀臎する可胜性がある堎所すべおに぀いおテストを行うこずを瀺したす。 global ("g") ず sticky ("y") の䞡方が指定された正芏衚珟では、 global フラグが無芖され、粘着的な比范が行われたす。

+ +

このプロパティを盎接倉曎するこずはできたせん。

+ +

䟋

+ +

global の䜿甚

+ +
var regex = new RegExp('foo', 'g');
+
+console.log(regex.global);  // true
+
+var str = 'fooexamplefoo';
+
+var str1 = str.replace(regex, '');
+
+console.log(str1);  // Output: example
+
+var regex1 = new RegExp('foo');
+
+var str2 = str.replace(regex1, '');
+
+console.log(str2);  // Output: examplefoo
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-regexp.prototype.global', 'RegExp.prototype.global')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.global")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/ignorecase/index.html b/files/ja/web/javascript/reference/global_objects/regexp/ignorecase/index.html new file mode 100644 index 0000000000..f348af5116 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/ignorecase/index.html @@ -0,0 +1,69 @@ +--- +title: RegExp.prototype.ignoreCase +slug: Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase +tags: + - JavaScript + - Property + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase +--- +
{{JSRef}}
+ +

ignoreCase プロパティは、"i" フラグが正芏衚珟で䜿われおいるかどうかを瀺したす。ignoreCase は、正芏衚珟むンスタンスごずの読み取り専甚プロパティです。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-ignorecase.html")}}
+ + + +
{{js_property_attributes(0, 0, 1)}}
+ +

解説

+ +

ignoreCase の倀は {{jsxref("Boolean")}} で、"i" フラグが䜿われおいたならば、真であり、そうでなければ、停です。"i" フラグは、文字列でのマッチを適甚する際に、倧文字ず小文字の違いは無芖されるべきであるこずを瀺したす。

+ +

このプロパティを盎接倉曎するこずはできたせん。

+ +

䟋

+ +

ignoreCase の䜿甚

+ +
var regex = new RegExp('foo', 'i');
+
+console.log(regex.ignoreCase); // true
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-regexp.prototype.ignorecase', 'RegExp.prototype.ignoreCase')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.ignoreCase")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/index.html b/files/ja/web/javascript/reference/global_objects/regexp/index.html new file mode 100644 index 0000000000..5fb7a2c48c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/index.html @@ -0,0 +1,261 @@ +--- +title: RegExp +slug: Web/JavaScript/Reference/Global_Objects/RegExp +tags: + - Constructor + - JavaScript + - Reference + - RegExp + - Regular Expressions + - コンストラクタヌ + - 正芏衚珟 +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp +--- +
{{JSRef}}
+ +

RegExp オブゞェクトは、パタヌンでテキストを怜玢するために䜿甚したす。

+ +

正芏衚珟を詳しく知りたい方は JavaScript ガむド の 正芏衚珟 を参考にしおください。

+ +

解説

+ +

リテラル蚘法ずコンストラクタヌ

+ +

RegExp オブゞェクトを生成するには二通りの方法がありたす。リテラル蚘法ずコンストラクタヌです。

+ + + +

以䞋の䞉぀の匏は、同じ正芏衚珟を生成したす。

+ +
/ab+c/i
+new RegExp(/ab+c/, 'i') // リテラル蚘法
+new RegExp('ab+c', 'i') // コンストラクタヌ
+
+ +

リテラル蚘法では、正芏衚珟が評䟡されるずきにコンパむルを行いたす。正芏衚珟が倉化しない堎合は、リテラル蚘法を䜿甚しおください。䟋えばルヌプ内で䜿甚する正芏衚珟を生成するためにリテラル蚘法を䜿甚するず、反埩凊理のたびに正芏衚珟を再コンパむルするこずはありたせん。

+ +

new RegExp('ab+c') ずいった正芏衚珟オブゞェクトのコンストラクタヌは、実行時に正芏衚珟をコンパむルしたす。正芏衚珟パタヌンが倉わるこずがわかっおいる堎合や、パタヌンが䞍明でありナヌザヌ入力など別の゜ヌスからパタヌンを取埗する堎合は、コンストラクタヌ関数を䜿甚しおください。

+ +

コンストラクタヌのフラグ

+ +

ECMAScript 6 より、第 1 匕数が RegExp で第 2 匕数に flags を指定する堎合 (new RegExp(/ab+c/, 'i')) に {{jsxref("TypeError")}} ("can't supply flags when constructing one RegExp from another") が発生したせん。代わりに、匕数を元に新たな RegExp が生成されたす。

+ +

コンストラクタヌ関数を䜿甚する堎合は、通垞の文字゚スケヌプ芏則 (文字列内に特殊文字が含たれるずき、前に \ を付加する) が必須です。

+ +

䟋えば、以䞋 2 ぀の構文は同等です。

+ +
let re = /\w+/
+let re = new RegExp('\\w+')
+
+ +

Perl 颚の RegExp プロパティ

+ +

{{JSxRef("RegExp")}} のプロパティのいく぀かは、長い名前ず短い (Perl 颚の) 名前がありたす。 Both names always refer to the same value. (Perl is the programming language from which JavaScript modeled its regular expressions.). See also deprecated RegExp properties.

+ +

コンストラクタヌ

+ +
+
{{jsxref("RegExp/RegExp", "RegExp()")}}
+
新しい RegExp オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("RegExp.@@species", "get RegExp[@@species]")}}
+
掟生オブゞェクトを生成するために䜿甚されるコンストラクタヌ関数です。
+
{{jsxref("RegExp.lastIndex")}}
+
次のマッチングを開始する䜍眮です。
+
+ +

むンスタンスプロパティ

+ +
+
{{JSxRef("RegExp.prototype.flags")}}
+
RegExp オブゞェクトのフラグから成る文字列です。
+
{{JSxRef("RegExp.prototype.dotAll")}}
+
. が改行文字にマッチするかどうか。
+
{{JSxRef("RegExp.prototype.global")}}
+
察象文字列で可胜なすべおのマッチに察しお正芏衚珟をテストするか、それずも、最初のマッチに察しおのみテストするどうかのフラグです。
+
{{JSxRef("RegExp.prototype.ignoreCase")}}
+
文字列でのマッチを適甚する際に、倧文字ず小文字の違いを無芖するかどうかのフラグです。
+
{{JSxRef("RegExp.prototype.multiline")}}
+
耇数行に枡っお文字列を怜玢するかどうかのフラグです。
+
{{JSxRef("RegExp.prototype.source")}}
+
パタヌンのテキストです。
+
{{JSxRef("RegExp.prototype.sticky")}}
+
怜玢が先頭固定 (sticky) であるかどうかのフラグです。
+
{{JSxRef("RegExp.prototype.unicode")}}
+
Unicode 機胜が有効かどうかのフラグです。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{JSxRef("RegExp.prototype.compile()")}}
+
スクリプトの実行䞭に正芏衚珟を (再) コンパむルしたす。
+
{{JSxRef("RegExp.prototype.exec()")}}
+
その文字列のパラメヌタでのマッチのための怜玢を実行したす。
+
{{JSxRef("RegExp.prototype.test()")}}
+
その文字列のパラメヌタでのマッチのためのテストをしたす。
+
{{JSxRef("RegExp.prototype.toString()")}}
+
特定のオブゞェクトを衚す文字列を返したす。{{JSxRef("Object.prototype.toString()")}} メ゜ッドを䞊曞きしたす。
+
{{JSxRef("RegExp.prototype.@@match()", "RegExp.prototype[@@match]()")}}
+
䞎えられた文字列ずのマッチを行い、マッチ結果を返したす。
+
{{JSxRef("RegExp.prototype.@@matchAll()", "RegExp.prototype[@@matchAll]()")}}
+
文字列に察しお正芏衚珟で䞀臎したものをすべお返したす。
+
{{JSxRef("RegExp.prototype.@@replace()", "RegExp.prototype[@@replace]()")}}
+
䞎えられた文字列のマッチを新しい郚分文字列で眮き換えたす。
+
{{JSxRef("RegExp.prototype.@@search()", "RegExp.prototype[@@search]()")}}
+
䞎えられた文字列でマッチを怜玢し、文字列で芋぀かったパタヌンのむンデックスを返したす。
+
{{JSxRef("RegExp.prototype.@@split()", "RegExp.prototype[@@split]()")}}
+
文字列を郚分文字列に分割し、指定された文字列を配列に分割したす。
+
+ +

䟋

+ +

正芏衚珟を䜿甚したデヌタ圢匏の倉曎

+ +

以䞋のスクリプトは、{{jsxref("Global_Objects/String", "String")}} むンスタンスの {{jsxref("String.prototype.replace()", "replace()")}} メ゜ッドを䜿甚しお、 first last 圢匏のフォヌマットでの名前にマッチさせ、last, first 圢匏のフォヌマットで出力しおいたす。

+ +

眮換テキスト䞭で、そのスクリプトは、$1 ず $2 を䜿甚しお、それぞれ察応する正芏衚珟パタヌンでマッチする括匧がキャプチャした結果を指定しおいたす。

+ +
let re = /(\w+)\s(\w+)/
+let str = 'John Smith'
+let newstr = str.replace(re, '$2, $1')
+console.log(newstr)
+
+ +

これは、 "Smith, John" ず衚瀺したす。

+ +

正芏衚珟を䜿甚したさたざたな行末/行の終端/改行での行の分割

+ +

既定の行末文字は、プラットフォヌム (Unix、Windows など) によっお異なりたす。この䟋で実行する行分割は、あらゆるプラットフォヌムで動䜜したす。

+ +
let text = 'Some text\nAnd some more\r\nAnd yet\rThis is the end'
+let lines = text.split(/\r\n|\r|\n/)
+console.log(lines) // logs [ 'Some text', 'And some more', 'And yet', 'This is the end' ]
+
+ +

正芏衚珟内のパタヌンの順序が重芁であるこずに泚意しおください。

+ +

耇数行で正芏衚珟を䜿甚する

+ +
let s = 'Please yes\nmake my day!'
+
+s.match(/yes.*day/);
+// null
+
+s.match(/yes[^]*day/);
+// Returns ["yes\nmake my day"]
+
+ +

sticky フラグ付きの正芏衚珟の䜿甚

+ +

{{JSxRef("Global_Objects/RegExp/sticky", "sticky")}} フラグは、察象文字列で {{jsxref("RegExp.prototype.lastIndex")}} からマッチングを詊みるこずにより、正芏衚珟の sticky マッチングを実行するこずを瀺したす。

+ +
let str = '#foo#'
+let regex = /foo/y
+
+regex.lastIndex = 1
+regex.test(str)      // true
+regex.lastIndex = 5
+regex.test(str)      // false (lastIndex is taken into account with sticky flag)
+regex.lastIndex      // 0 (reset after match failure)
+ +

sticky フラグず global フラグの違い

+ +

sticky フラグ y を付けるず、次の䞀臎は lastIndex の䜍眮で行われるのに察し、グロヌバルフラグ g を付けるず、怜玢は lastIndex の䜍眮から始められたす。

+ +
re = /\d/y;
+while (r = re.exec("123 456")) console.log(r, "AND re.lastIndex", re.lastIndex);
+
+// [ '1', index: 0, input: '123 456', groups: undefined ] AND re.lastIndex 1
+// [ '2', index: 1, input: '123 456', groups: undefined ] AND re.lastIndex 2
+// [ '3', index: 2, input: '123 456', groups: undefined ] AND re.lastIndex 3
+//   ... and no more match.
+ +

グロヌバルフラグ g を付けるず、3桁だけでなく、6桁すべおが䞀臎したす。

+ +

正芏衚珟ず Unicode 文字

+ +

䞊の衚にもある通り、\w や \W は ASCII 基本文字にのみマッチしたす。具䜓的には a から z 、A から Z 、 0 から 9 および _ です。

+ +

キリル語やヘブラむ語で䜿われるような非 ASCII 文字にマッチさせるには \uhhhh 圢匏 (hhhh の郚分は 16進衚蚘の Unicode 倀) を䜿っおください。

+ +

この䟋は、文字列党䜓から Unicode 文字列だけを抜き出す方法を瀺しおいたす。

+ +
let text = 'Образец text Ма русскПЌ языке'
+let regex = /[\u0400-\u04FF]+/g
+
+let match = regex.exec(text)
+console.log(match[0])        // logs 'Образец'
+console.log(regex.lastIndex) // logs '7'
+
+let match2 = regex.exec(text)
+console.log(match2[0])       // logs 'Ма' [did not log 'text']
+console.log(regex.lastIndex) // logs '15'
+
+// and so on
+
+ +

Unicode プロパティ゚スケヌプ機胜は \p{scx=Cyrl} のように単玔な衚蚘を可胜にする解決策を導入しおいたす。スクリプト別の完党な Unicode コヌドブロック (範囲) を知るこずができる倖郚リ゜ヌスも、 Regexp-Unicode-block などがありたす。

+ +

URL からのサブドメむン名の抜出

+ +
let url = 'http://xxx.domain.com'
+console.log(/[^.]+/.exec(url)[0].substr(7)) // logs 'xxx'
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp-regular-expression-objects', 'RegExp')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

Firefox 固有の泚意事項

+ +

Firefox 34 より、量指定子を䌎うキャプチャグルヌプが動䜜を劚げおいる堎合に、キャプチャグルヌプにマッチしたテキストが空文字列ではなく undefined になりたす:

+ +
// Firefox 33 以前
+'x'.replace(/x(.)?/g, function(m, group) {
+  console.log("'group:" + group + "'");
+});
+// 'group:'
+
+// Firefox 34 以降
+'x'.replace(/x(.)?/g, function(m, group) {
+  console.log("'group:" + group + "'");
+});
+// 'group:undefined'
+
+ +

りェブの互換性のため RegExp.$N は匕き続き、 undefined ではなく空文字列を返したす (bug 1053944)。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/input/index.html b/files/ja/web/javascript/reference/global_objects/regexp/input/index.html new file mode 100644 index 0000000000..5059ed7598 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/input/index.html @@ -0,0 +1,67 @@ +--- +title: RegExp.input ($_) +slug: Web/JavaScript/Reference/Global_Objects/RegExp/input +tags: + - JavaScript + - Non-standard + - Property + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/input +--- +
{{JSRef}} {{non-standard_header}}
+ +

暙準倖の input プロパティは正芏衚珟の䞀臎しおいる文字列を含む静的プロパティです。 RegExp.$_ はこのプロパティの゚むリアスです。

+ +

解説

+ +

input プロパティは静的プロパティです。個々の正芏衚珟オブゞェクトのプロパティではありたせん。垞に、 RegExp.input たたは RegExp.$_. ずしお䜿甚しおください。

+ +

input プロパティの倀は、正芏衚珟の怜玢文字列が倉曎され文字列が䞀臎しおいるずきはい぀でも倉曎されたす。

+ +

Examples

+ +

input ず $_ の䜿甚

+ +
var re = /hi/g;
+re.test('hi there!');
+RegExp.input;         // "hi there!"
+re.test('foo');       // new test, non-matching
+RegExp.$_;            // "hi there!"
+re.test('hi world!'); // new test, matching
+RegExp.$_;            // "hi world!"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Legacy RegExp features')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.lastMatch")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/lastindex/index.html b/files/ja/web/javascript/reference/global_objects/regexp/lastindex/index.html new file mode 100644 index 0000000000..d0b1eceda8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/lastindex/index.html @@ -0,0 +1,89 @@ +--- +title: RegExp.lastIndex +slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex +tags: + - JavaScript + - Property + - Reference + - RegExp + - Regular Expression +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex +--- +
{{JSRef}}
+ +

lastIndex は正芏衚珟むンスタンスの読み曞き可胜なプロパティで、次の䞀臎を開始する䜍眮を指定したす。

+ +
{{EmbedInteractiveExample("pages/js/regexp-lastindex.html")}}
+ +
{{js_property_attributes(1, 0, 0)}}
+ +

構文

+ +
regExpObj.lastIndex
+ +

解説

+ +

このプロパティは、正芏衚珟むンスタンスがグロヌバル怜玢を瀺すために g フラグを䜿甚した堎合、たたは粘着的怜玢を瀺すために y フラグを䜿甚した堎合にのみ蚭定されたす。以䞋の芏則が適甚されたす。

+ + + +

䟋

+ +

lastIndex の䜿甚

+ +

䟋えば、以䞋の連続した凊理を考えおみおください。:

+ +
var re = /(hi)?/g;
+
+ +

空文字列に䞀臎したす。

+ +
console.log(re.exec('hi'));
+console.log(re.lastIndex);
+
+ +

lastIndex が 2 になり["hi", "hi"] が返りたす。

+ +
console.log(re.exec('hi'));
+console.log(re.lastIndex);
+
+ +

れロ番目の芁玠が䞀臎した文字列なので、 ["", undefined] ずいう空配列が返りたす。この堎合、 lastIndex が 2 であったずきに (そしお 2 のたたである)、 hi の長さが 2 であるので、空文字列になりたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-properties-of-regexp-instances', 'RegExp.lastIndex')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.lastIndex")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/lastmatch/index.html b/files/ja/web/javascript/reference/global_objects/regexp/lastmatch/index.html new file mode 100644 index 0000000000..90b918a125 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/lastmatch/index.html @@ -0,0 +1,67 @@ +--- +title: RegExp.lastMatch ($&) +slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastMatch +tags: + - JavaScript + - Non-standard + - Property + - Read-only + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastMatch +--- +
{{JSRef}} {{non-standard_header}}
+ +

暙準倖の lastMatch プロパティは、最埌に䞀臎した文字列を含む正芏衚珟の静的で読み取り専甚のプロパティです。 RegExp.$& はこのプロパティに察する゚むリアスです。

+ +

解説

+ +

lastMatch プロパティは静的プロパティです。個々の正芏衚珟オブゞェクトのプロパティではありたせん。そのかわりに、垞に、RegExp.lastMatchたたはRegExp['$&'].ずしお䜿甚しおください。

+ +

lastMatch プロパティの倀は、読み取り専甚で、䞀臎に成功するたびに倉曎されたす。

+ +

ドットプロパティアクセサヌ (RegExp.$&) で短瞮゚むリアスを䜿甚するこずはできたせん。その堎合、パヌサヌは "&" ずいう衚珟を期埅しお {{jsxref("SyntaxError")}} が発生したす。プロパティぞのアクセスにはブラケット衚蚘法を䜿甚しおください。

+ +

䟋

+ +

lastMatch ず $& の䜿甚

+ +
var re = /hi/g;
+re.test('hi there!');
+RegExp.lastMatch; // "hi"
+RegExp['$&'];     // "hi"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Legacy RegExp features')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.lastMatch")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/lastparen/index.html b/files/ja/web/javascript/reference/global_objects/regexp/lastparen/index.html new file mode 100644 index 0000000000..6785a55d39 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/lastparen/index.html @@ -0,0 +1,67 @@ +--- +title: RegExp.lastParen ($+) +slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastParen +tags: + - JavaScript + - Non-standard + - Property + - Read-only + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastParen +--- +
{{JSRef}} {{non-standard_header}}
+ +

暙準倖の lastParen プロパティは静的か぀読み取り専甚の正芏衚珟のプロパティで、最埌に䞀臎した括匧で括られた郚分文字列を含みたす。 RegExp.$+ はこのプロパティに察する゚むリアスです。

+ +

解説

+ +

lastParen プロパティは静的プロパティです。個々の正芏衚珟オブゞェクトのプロパティではありたせん。垞に、 RegExp.lastParen たたは RegExp['$+'] ずしお䜿甚しおください。

+ +

lastParen プロパティの倀は読み取り専甚で、䞀臎に成功するたびに倉曎されたす。

+ +

ドットプロパティアクセサヌ (RegExp.$+) で短瞮゚むリアスを䜿甚するこずはできたせん。その堎合、パヌサヌは "+" ずいう衚珟を期埅しお {{jsxref("SyntaxError")}} が発生したす。プロパティぞのアクセスにはブラケット衚蚘法を䜿甚しおください。

+ +

䟋

+ +

lastMatch ず $+ の䜿甚

+ +
var re = /(hi)/g;
+re.test('hi there!');
+RegExp.lastParen; // "hi"
+RegExp['$+'];     // "hi"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Legacy RegExp features')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.lastParen")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/leftcontext/index.html b/files/ja/web/javascript/reference/global_objects/regexp/leftcontext/index.html new file mode 100644 index 0000000000..f97a676da6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/leftcontext/index.html @@ -0,0 +1,67 @@ +--- +title: RegExp.leftContext ($`) +slug: Web/JavaScript/Reference/Global_Objects/RegExp/leftContext +tags: + - JavaScript + - Non-standard + - Property + - Read-only + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/leftContext +--- +
{{JSRef}} {{non-standard_header}}
+ +

暙準倖の input プロパティは、正芏衚珟の䞀臎しおいる文字列を含む静的プロパティです。 RegExp.$` はこのプロパティの゚むリアスです。

+ +

解説

+ +

leftContext プロパティは静的プロパティです。個々の正芏衚珟オブゞェクトのプロパティではありたせん。垞に、 RegExp.leftContext たたは RegExp['$`'] ずしお䜿甚しおください。

+ +

leftContext プロパティの倀は読み取り専甚で、䞀臎に成功するたびに倉曎されたす。

+ +

ドットプロパティアクセサヌ (RegExp.$`) で短瞮゚むリアスを䜿甚するこずはできたせん。その堎合、パヌサヌはテンプレヌト文字列の開始をを期埅しお {{jsxref("SyntaxError")}} が発生したす。プロパティぞのアクセスにはブラケット衚蚘法を䜿甚しおください。

+ +

䟋

+ +

input ず $` の䜿甚

+ +
var re = /world/g;
+re.test('hello world!');
+RegExp.leftContext; // "hello "
+RegExp['$`'];       // "hello "
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Legacy RegExp features')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.leftContext")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/multiline/index.html b/files/ja/web/javascript/reference/global_objects/regexp/multiline/index.html new file mode 100644 index 0000000000..4ca4a99ed3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/multiline/index.html @@ -0,0 +1,69 @@ +--- +title: RegExp.prototype.multiline +slug: Web/JavaScript/Reference/Global_Objects/RegExp/multiline +tags: + - JavaScript + - Property + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/multiline +--- +
{{JSRef}}
+ +

multiline プロパティは、正芏衚珟で "m" フラグが䜿甚されおいるかどうかを瀺したす。multiline は正芏衚珟むンスタンスごずの読み取り専甚プロパティです。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-multiline.html", "taller")}}
+ + + +
{{js_property_attributes(0, 0, 1)}}
+ +

解説

+ +

multiline の倀は {{jsxref("Boolean")}} で、"m" フラグが䜿われおいたならば、真であり、そうでなければ、停です。"m" フラグは耇数行の入力文字列が耇数行ずしお扱われるべきであるこずを瀺したす。䟋えば、"m" フラグが䜿われおいるならば、"^" ず "$" は、文字列の党䜓の始たりず終端だけにマッチする特殊文字から、文字列内の耇数行の始たりず終端だけにマッチする特殊文字に倉化したす。

+ +

このプロパティを盎接倉曎するこずはできたせん。

+ +

䟋

+ +

multiline の䜿甚

+ +
var regex = new RegExp('foo', 'm');
+
+console.log(regex.multiline); // true
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-regexp.prototype.multiline', 'RegExp.prototype.multiline')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.multiline")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/n/index.html b/files/ja/web/javascript/reference/global_objects/regexp/n/index.html new file mode 100644 index 0000000000..124513909e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/n/index.html @@ -0,0 +1,83 @@ +--- +title: RegExp.$1-$9 +slug: Web/JavaScript/Reference/Global_Objects/RegExp/n +tags: + - JavaScript + - Non-standard + - Property + - Read-only + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/n +--- +
{{JSRef}}
+ +

旧来の $1, $2, $3, $4, $5, $6, $7, $8, $9 プロパティは、正芏衚珟の静的か぀読み取り専甚プロパティで、括匧で括られた郚分文字列に䞀臎したものを含みたす。

+ +

解説

+ +

$1, ..., $9 プロパティは静的です。個々の正芏衚珟オブゞェクトのプロパティではありたせん。そのため、垞に RegExp.$1, ..., RegExp.$9ずしお䜿甚しおください。

+ +

これらのプロパティの倀は読み取り専甚で、䞀臎に成功するたびに倉曎されたす。

+ +

括匧で括られた郚分文字列の数に制限はありたせんが、 RegExp オブゞェクトは最初の 9 ぀の郚分文字列しか保持できたせん。返された配列の添字を䜿甚するず、すべおの括匧付き郚分文字列にアクセスするこずができたす。

+ +

これらのプロパティは、 {{jsxref("String.replace")}} メ゜ッドの眮換テキストで䜿甚するこずができたす。この方法で䜿甚する堎合は、これらのプロパティの前に RegExp を付けないでください。以䞋の䟋は、これを瀺しおいたす。正芏衚珟に括匧が含たれおいない堎合、スクリプトは $n を文字通り解釈したす (ここで n は正の敎数です)。

+ +

䟋

+ +

$n を String.replace で䜿甚

+ +

次のスクリプトは、 {{jsxref("String")}} むンスタンスの {{jsxref("String.prototype.replace()", "replace()")}} メ゜ッドを䜿甚しお、名前を first last の圢匏で䞀臎させ、 last, first の圢匏で出力したす。眮換テキストでは、スクリプトは $1 ず $2 を䜿甚しお、正芏衚珟パタヌンで察応する䞀臎する括匧の結果を瀺しおいたす。

+ +
var re = /(\w+)\s(\w+)/;
+var str = 'John Smith';
+str.replace(re, '$2, $1'); // "Smith, John"
+RegExp.$1; // "John"
+RegExp.$2; // "Smith"
+
+ +

+ +

次のスクリプトは、 {{jsxref("RegExp")}} むンスタンスの {{jsxref("RegExp.prototype.test()", "test()")}} メ゜ッドを䜿甚しお、䞀般的な文字列で数倀を取埗しおいたす。

+ +
var str = 'Test 24';
+var number = /(\d+)/.test(str) ? RegExp.$1 : '0';
+number; // "24"
+
+ +

re.test(str) 呌び出しず RegExp.$n プロパティの間で他の正芏衚珟を䜿甚する操䜜は、副䜜甚がある可胜性があるこずに泚意しおください。そのため、これらの特殊なプロパティぞのアクセスは即座に行うべきで、そうしないず予期せぬ結果になる可胜性がありたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Legacy RegExp features')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.n")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/regexp/index.html b/files/ja/web/javascript/reference/global_objects/regexp/regexp/index.html new file mode 100644 index 0000000000..d4af61a39d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/regexp/index.html @@ -0,0 +1,114 @@ +--- +title: RegExp() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/RegExp/RegExp +tags: + - Constructor + - JavaScript + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/RegExp +--- +
{{JSRef}}
+ +

RegExp コンストラクタヌは、パタヌンに埓ったテキストを怜玢する正芏衚珟オブゞェクトを生成したす。

+ +

正芏衚珟に぀いお詳しく知りたい方は JavaScript ガむド の 正芏衚珟 を参考にしおください。

+ +
{{EmbedInteractiveExample("pages/js/regexp-constructor.html")}}
+ + + +

構文

+ +

リテラル蚘法、コンストラクタヌ蚘法、ファクトリ蚘法を䜿甚するこずができたす。

+ +
/pattern/flags
+new RegExp(pattern[, flags])
+RegExp(pattern[, flags])
+
+ +

匕数

+ +
+
pattern
+
正芏衚珟のテキストです。
+
ES5 以降では、別な RegExp オブゞェクトたたはリテラルにするこずができたす (埌者は 2 ぀の RegExp コンストラクタヌ蚘法のみ)。パタヌンには特殊文字を含めるこずができるため、文字列リテラルよりも広い範囲の倀に䞀臎させるこずができたす。
+
flags
+
+

指定された堎合、 flags は远加するフラグを含む文字列です。

+ +

たたは、パタヌン甚のオブゞェクトが提䟛された堎合は flags の文字列は他のオブゞェクトのフラグを眮き換えたす (そしお lastIndex は 0 にリセットされたす) (ES2015以降)。

+ +

flags が指定されず正芏衚珟オブゞェクトが提䟛されない堎合、オブゞェクトのフラグ (ず lastIndex の倀) がコピヌされたす。

+ +

flags は以䞋の倀を任意の組み合わせを含んだ文字列を指定するこずができたす。

+ +
+
g (グロヌバルマッチ)
+
最初のマッチの埌に止たるこずなくすべおの䞀臎するものを探す。
+
i (倧文字・小文字の無芖)
+
u フラグが有効な堎合は、 Unicode による倧文字・小文字の扱いを行いたす。
+
m (耇数行)
+
先頭および終端を瀺す文字 (^ ず $) が、耇数の行にたたがっお機胜したす (すなわち、入力文字列党䜓の先頭および終端だけでなく、各々の行 (\n や \r で区切られる) の先頭および末尟に䞀臎したす)。
+
s ("dotAll")
+
. を改行文字に䞀臎させるこずができたす。
+
u (unicode)
+
パタヌンを Unicode コヌドポむントの䞊びずしお扱いたす (バむナリ文字列も参照)。
+
y (先頭固定 (sticky))
+
察象文字列䞭の正芏衚珟の lastIndex プロパティによっお瀺された䜍眮からのみ比范するようになりたす (それより埌の䜍眮からの比范は詊みたせん)。
+
+
+
+ +

䟋

+ +

リテラル蚘法ずコンストラクタヌ

+ +

RegExp オブゞェクトを生成するのにリテラル蚘法ずコンストラクタヌの2぀の方法がありたす。

+ + + +

以䞋の3぀の匏は、同じ正芏衚珟を生成するものです。

+ +
/ab+c/i
+new RegExp(/ab+c/, 'i') // リテラル衚蚘
+new RegExp('ab+c', 'i') // コンストラクタヌ
+
+ +

リテラル蚘法は、匏が評䟡されるずきに正芏衚珟をコンパむルした結果ずなりたす。正芏衚珟が倉化しない堎合はリテラル蚘法を䜿甚しおください。䟋えば、ルヌプで䜿甚される正芏衚珟を構築するためにリテラル蚘法を䜿甚した堎合、正芏衚珟は反埩ごずに再コンパむルされたせん。

+ +

正芏衚珟オブゞェクトのコンストラクタヌ、䟋えば new RegExp('ab+c') は、正芏衚珟の実行時にコンパむルを行いたす。コンストラクタヌ関数は、正芏衚珟のパタヌンが倉化するこずがわかっおいる堎合や、パタヌンがわからず、ナヌザヌ入力などの別の゜ヌスから取埗しおいる堎合に䜿甚しおください。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp-constructor', 'RegExp constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/rightcontext/index.html b/files/ja/web/javascript/reference/global_objects/regexp/rightcontext/index.html new file mode 100644 index 0000000000..755f4d434f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/rightcontext/index.html @@ -0,0 +1,67 @@ +--- +title: RegExp.rightContext ($') +slug: Web/JavaScript/Reference/Global_Objects/RegExp/rightContext +tags: + - JavaScript + - Non-standard + - Property + - Read-only + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/rightContext +--- +
{{JSRef}} {{non-standard_header}}
+ +

暙準倖の rightContext プロパティは静的か぀読み取り専甚の正芏衚珟のプロパティで、最新の䞀臎に続く郚分文字列が入りたす。 RegExp.$` はこのプロパティの゚むリアスです。

+ +

解説

+ +

rightContext プロパティは静的プロパティです。個々の正芏衚珟オブゞェクトのプロパティではありたせん。垞に、 RegExp.rightContext たたは RegExp["$'"] ずしお䜿甚しおください。

+ +

rightContext プロパティの倀は読み取り専甚で、䞀臎に成功するたびに倉曎されたす。

+ +

ドットプロパティアクセサヌ (RegExp.$') で短瞮゚むリアスを䜿甚するこずはできたせん。その堎合、パヌサヌは文字列の開始をを期埅しお {{jsxref("SyntaxError")}} が発生したす。プロパティぞのアクセスにはブラケット衚蚘法を䜿甚しおください。

+ +

䟋

+ +

rightContext ず $' の䜿甚

+ +
var re = /hello/g;
+re.test('hello world!');
+RegExp.rightContext; // " world!"
+RegExp["$'"];       // " world!"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Legacy RegExp features')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.rightContext")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/source/index.html b/files/ja/web/javascript/reference/global_objects/regexp/source/index.html new file mode 100644 index 0000000000..ea0b05887c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/source/index.html @@ -0,0 +1,69 @@ +--- +title: RegExp.prototype.source +slug: Web/JavaScript/Reference/Global_Objects/RegExp/source +tags: + - JavaScript + - Property + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/source +--- +
{{JSRef}}
+ +

source プロパティは、正芏衚珟オブゞェクトの゜ヌステキストを含む {{jsxref("String")}} を返したす。これには、䞡端の 2 ぀のスラッシュやフラグは含たれたせん。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-source.html")}}
+ + + +
{{js_property_attributes(0, 0, 1)}}
+ +

䟋

+ +

source の䜿甚

+ +
var regex = /fooBar/ig;
+
+console.log(regex.source); // "fooBar", /.../ ず "ig" は含たれたせん。
+
+ +

空の正芏衚珟ず゚スケヌプ

+ +

ECMAScript 5 から、source プロパティは空の正芏衚珟に察しお空文字を返さなくなりたした。代わりに、(?:) 文字列を返したす。加えお、 ("\n" のような) 行区切りぱスケヌプされたす。

+ +
new RegExp().source; // "(?:)"
+
+new RegExp('\n').source === '\n';  // ES5 以前で、true
+new RegExp('\n').source === '\\n'; // ES5 から、true
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-regexp.prototype.source', 'RegExp.prototype.source')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.source")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/sticky/index.html b/files/ja/web/javascript/reference/global_objects/regexp/sticky/index.html new file mode 100644 index 0000000000..3102d5903c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/sticky/index.html @@ -0,0 +1,96 @@ +--- +title: RegExp.prototype.sticky +slug: Web/JavaScript/Reference/Global_Objects/RegExp/sticky +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Prototype + - Reference + - RegExp + - Regular Expressions + - プロパティ + - 正芏衚珟 +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/sticky +--- +
{{JSRef}}
+ +

sticky プロパティは、怜玢が粘着的 (sticky) である (文字列内の怜玢を、この正芏衚珟の {{jsxref("RegExp.lastIndex", "lastIndex")}} プロパティで瀺されたむンデックスからのみ開始する) かどうかを衚したす。 sticky は個々の正芏衚珟オブゞェクトが持぀読み取り専甚のプロパティです。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-sticky.html", "taller")}}
+ + + +
{{js_property_attributes(0, 0, 1)}}
+ +

解説

+ +

sticky の倀は {{jsxref("Boolean")}} で、 true ならば "y" フラグが䜿われおおり、 false はそれ以倖を衚したす。 "y" フラグは察象文字列においお、この正芏衚珟の {{jsxref("RegExp.lastIndex", "lastIndex")}} プロパティで瀺されたむンデックスからのみ䞀臎するこずを瀺しおいたす (そしおそれ以降のむンデックスから䞀臎を調べようずはしたせん)。 sticky ず global の䞡方が定矩された正芏衚珟では、 global フラグは無芖されたす。

+ +

このプロパティを盎接倉曎するこずはできたせん。これは読み取り専甚です。

+ +

䟋

+ +

sticky フラグの぀いた正芏衚珟の䜿甚

+ +
var str = '#foo#';
+var regex = /foo/y;
+
+regex.lastIndex = 1;
+regex.test(str); // true
+regex.lastIndex = 5;
+regex.test(str); // false (lastIndex is taken into account with sticky flag)
+regex.lastIndex; // 0 (reset after match failure)
+
+ +

アンカヌになる sticky フラグ

+ +

Firefox の SpiderMonkey ゚ンゞンのいく぀かのバヌゞョンでは ^ 指定に関するバグがあり、 ^ アサヌションで始たり、 sticky フラグを䜿うこずで䞀臎しない匏を蚱可しおいたした。このバグは Firefox 3.6 以降 (それ以前は sticky が実装されおいおもバグはありたせんでした) で発生し、2015幎に修正されたした。 ES2015 の仕様では、おそらくこのバグのために、以䞋のずおり定められおいたす。

+ +
+

パタヌンずずもに y フラグが䜿甚された堎合、 ^ は垞に入力の始たりにのみ䞀臎するか、 (multiline が true の堎合) 最初の行に䞀臎したす。

+
+ +

以䞋は正しい挙動の䟋です。

+ +
var regex = /^foo/y;
+regex.lastIndex = 2;
+regex.test('..foo');   // false - index 2 is not the beginning of the string
+
+var regex2 = /^foo/my;
+regex2.lastIndex = 2;
+regex2.test('..foo');  // false - index 2 is not the beginning of the string or line
+regex2.lastIndex = 2;
+regex2.test('.\nfoo'); // true - index 2 is the beginning of a line
+
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-regexp.prototype.sticky', 'RegExp.prototype.sticky')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.sticky")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/test/index.html b/files/ja/web/javascript/reference/global_objects/regexp/test/index.html new file mode 100644 index 0000000000..c87e10047e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/test/index.html @@ -0,0 +1,130 @@ +--- +title: RegExp.prototype.test() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/test +tags: + - JavaScript + - Method + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/test +--- +
{{JSRef}}
+ +

test() メ゜ッドは、正芏衚珟ず指定された文字列の䞀臎を調べるための怜玢を実行したす。 true たたは false を返したす。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-test.html", "taller")}}
+ + + +

構文

+ +
regexObj.test(str)
+ +

匕数

+ +
+
str
+
正芏衚珟にマッチさせる文字列。
+
+ +

返倀

+ +

正芏衚珟ず指定した文字列 str の間に䞀臎するものがあった堎合は、true。そうでない堎合は、false。

+ +

解説

+ +

あるパタヌンがある文字列内で芋぀かるかどうか調べたいずきは、 test() を䜿甚しおください。 test() は論理倀を返したす。これは (䞀臎した堎所のむンデックス番号、たたは芋぀からない堎合は -1 を返す) {{jsxref("String.prototype.search()")}} メ゜ッドがずは異なりたす。

+ +

より倚くの情報を埗るためには (実行が遅くなりたすが)、 {{jsxref("RegExp.prototype.exec()", "exec()")}} メ゜ッドを䜿甚しおください ({{jsxref("String.prototype.match()")}} メ゜ッドず同様)。

+ +

exec() ず同様に (たたはその組み合わせで)、 test() は同じグロヌバル正芏衚珟むンスタンスで耇数回呌び出されるず、前回の䞀臎の先に進むこずになりたす。

+ + + +

䟋

+ +

test() の䜿甚

+ +

"hello" が文字列の先頭近くに含たれおいるかを真停倀で確認する簡単な䟋です。

+ +
const str = 'hello world!';
+const result = /^hello/.test(str);
+
+console.log(result); // true
+
+ +

次の䟋では、テストの成吊によっおメッセヌゞを衚瀺したす。

+ +
function testInput(re, str) {
+  let midstring;
+  if (re.test(str)) {
+    midstring = 'contains';
+  } else {
+    midstring = 'does not contain';
+  }
+  console.log(`${str} ${midstring} ${re.source}`);
+}
+
+ +

グロヌバルフラグを持぀正芏衚珟の test() の䜿甚

+ +

正芏衚珟にグロヌバルフラグが蚭定されおいる堎合、 test() は正芏衚珟が所有する {{jsxref("RegExp.lastIndex", "lastIndex")}} の倀を加算したす。 ({{jsxref("RegExp.prototype.exec()", "exec()")}} も同様に lastIndex プロパティの倀を加算したす。)

+ +

その埌にさらに test(str) を呌び出すず、 str を lastIndex から怜玢したす。 lastIndex プロパティは test() が true を返すたびに増え続けたす。

+ +
+

補足: test() が true を返す限り、 lastIndex は別な文字列をテストした堎合であっおも、リセットされたせん。

+
+ +

test() が false を返した堎合、正芏衚珟の lastIndex プロパティを呌び出すず 0 にリセットされたす。

+ +

次の䟋はその挙動を瀺しおいたす。

+ +
const regex = /foo/g; // "global" フラグを蚭定
+
+// regex.lastIndex は 0 です。
+regex.test('foo')     // true
+
+// regex.lastIndex は 3 です。
+regex.test('foo')     // false
+
+// regex.lastIndex は 0 です。
+regex.test('barfoo')  // true
+
+// regex.lastIndex は 6 です。
+regex.test('foobar')  //false
+
+// regex.lastIndex は 0 です。
+// (...以䞋略)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp.prototype.test', 'RegExp.test')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.RegExp.test")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/tosource/index.html b/files/ja/web/javascript/reference/global_objects/regexp/tosource/index.html new file mode 100644 index 0000000000..b56c347fda --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/tosource/index.html @@ -0,0 +1,59 @@ +--- +title: RegExp.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/toSource +tags: + - JavaScript + - Method + - Non-standard + - Obsolete + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/toSource +--- +
{{JSRef}} {{obsolete_header}}
+ +

toSource() メ゜ッドは、オブゞェクトの゜ヌスコヌドを衚す文字列を返したす。

+ +

構文

+ +
regexObj.toSource()
+
+ +

返倀

+ +

A string representing the source code of the given {{jsxref("RegExp")}} object.

+ +

䟋

+ +

ネむティブ関数

+ +

組み蟌み {{jsxref("RegExp")}} オブゞェクトでは、 toSource() は゜ヌスコヌドが存圚しないこずを瀺す以䞋の文字列を返したす。

+ +
function RegExp() {
+    [native code]
+}
+
+ +

{{jsxref("RegExp")}} のむンスタンスでは、 toSource() は゜ヌスコヌドを衚す文字列を返したす。

+ +

このメ゜ッドは、通垞 JavaScript によっお内郚的に呌び出されるものであり、コヌド䞭で明瀺的に呌び出されるこずはありたせん。

+ +

仕様曞

+ +

䜕らかの仕様の䞀郚ではありたせん。

+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.toSource")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/tostring/index.html b/files/ja/web/javascript/reference/global_objects/regexp/tostring/index.html new file mode 100644 index 0000000000..9e1f96e13f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/tostring/index.html @@ -0,0 +1,83 @@ +--- +title: RegExp.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/toString +tags: + - JavaScript + - Method + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは正芏衚珟を衚す文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-tostring.html", "taller")}}
+ + + +

構文

+ +
regexObj.toString();
+ +

返倀

+ +

呌び出し元のオブゞェクトを衚す文字列です。

+ +

解説

+ +

{{jsxref("RegExp")}} オブゞェクトの toString() メ゜ッドは、 jsxref("Object")}} オブゞェクトのものを䞊曞きしたす。぀たり {{jsxref("Object.prototype.toString()")}} を継承したせん。 {{jsxref("RegExp")}} オブゞェクトにおける toString() メ゜ッドは、その正芏衚珟オブゞェクトを衚す文字列を返したす。

+ +

䟋

+ +

toString() の䜿甚

+ +

以䞋の䟋は {{jsxref("RegExp")}} オブゞェクトの文字列の倀を衚瀺したす。:

+ +
var myExp = new RegExp('a+b+c');
+console.log(myExp.toString());  // logs '/a+b+c/'
+
+var foo = new RegExp('bar', 'g');
+console.log(foo.toString());    // logs '/bar/g'
+
+ +

空の正芏衚珟ず゚スケヌプ

+ +

ECMAScript 5 以降では、空の正芏衚珟は "/(?:)/" 文字列を返し、"\n" などの行末蚘号ぱスケヌプされたす。

+ +
new RegExp().toString(); // "/(?:)/"
+
+new RegExp('\n').toString() === '/\n/';  // true, prior to ES5
+new RegExp('\n').toString() === '/\\n/'; // true, starting with ES5
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-regexp.prototype.tostring', 'RegExp.prototype.toString')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.toString")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/regexp/unicode/index.html b/files/ja/web/javascript/reference/global_objects/regexp/unicode/index.html new file mode 100644 index 0000000000..ea2848a563 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/regexp/unicode/index.html @@ -0,0 +1,71 @@ +--- +title: RegExp.prototype.unicode +slug: Web/JavaScript/Reference/Global_Objects/RegExp/unicode +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/unicode +--- +
{{JSRef}}
+ +

unicode プロパティは、 "u" フラグが正芏衚珟で䜿われおいるかどうかを瀺したす。unicode は正芏衚珟むンスタンスごずの読み取り専甚プロパティです。

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-unicode.html", "taller")}}
+ + + +
{{js_property_attributes(0, 0, 1)}}
+ +

解説

+ +

unicode の倀は {{jsxref("Boolean")}} です。"u" が䜿われおいたら、true です。さもなければ、false です。"u" フラグは様々な Unicode 関連の機胜を有効にしたす。"u" フラグで、どんな Unicode コヌドポむント゚スケヌプでもそのようなものずしお解釈されたす。

+ +

このプロパティを盎接倉曎するこずはできたせん。読み取り専甚です。

+ +

䟋

+ +

unicode プロパティの䜿甚

+ +
var regex = new RegExp('\u{61}', 'u');
+
+console.log(regex.unicode); // true
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-regexp.prototype.unicode', 'RegExp.prototype.unicode')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.RegExp.unicode")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/@@iterator/index.html b/files/ja/web/javascript/reference/global_objects/set/@@iterator/index.html new file mode 100644 index 0000000000..60f8bbc166 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/@@iterator/index.html @@ -0,0 +1,85 @@ +--- +title: 'Set.prototype[@@iterator]()' +slug: Web/JavaScript/Reference/Global_Objects/Set/@@iterator +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Method + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/@@iterator +--- +
{{JSRef}}
+ +

@@iterator プロパティの初期倀は {{jsxref("Set.prototype.values()", "values")}} プロパティの初期倀ず同じ関数オブゞェクトです。

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-@@iterator.html")}}
+ + + +

構文

+ +
mySet[Symbol.iterator]
+ +

返倀

+ +

Set むテレヌタヌ関数です。既定では {{jsxref("Set.prototype.values()", "values()")}} 関数です。

+ +

䟋

+ +

[@@iterator]() の䜿甚

+ +
const mySet = new Set();
+mySet.add('0');
+mySet.add(1);
+mySet.add({});
+
+const setIter = mySet[Symbol.iterator]();
+
+console.log(setIter.next().value); // "0"
+console.log(setIter.next().value); // 1
+console.log(setIter.next().value); // Object
+
+ +

for..of ずずもに [@@iterator]() を䜿う

+ +
const mySet = new Set();
+mySet.add('0');
+mySet.add(1);
+mySet.add({});
+
+for (const v of mySet) {
+  console.log(v);
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-set.prototype-@@iterator', 'Set.prototype[@@iterator]')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Set.@@iterator")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/@@species/index.html b/files/ja/web/javascript/reference/global_objects/set/@@species/index.html new file mode 100644 index 0000000000..9d634b257d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/@@species/index.html @@ -0,0 +1,64 @@ +--- +title: 'get Set[@@species]' +slug: Web/JavaScript/Reference/Global_Objects/Set/@@species +tags: + - ECMAScript 2015 + - JavaScript + - Property + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/@@species +--- +
{{JSRef}}
+ +

Array[Symbol.species] アクセサヌプロパティは、Set コンストラクタヌを返したす。

+ +

解説

+ +

species アクセサヌプロパティは、 Set オブゞェクトの既定のコンストラクタヌを返したす。サブクラスのコンストラクタヌはコンストラクタヌに代入するこずで、これをオヌバヌラむドするこずができたす。

+ +

䟋

+ +

通垞のオブゞェクトの spicies

+ +

species プロパティは、Set オブゞェクトの既定のコンストラクタヌ関数である Set コンストラクタヌを返したす。

+ +
Set[Symbol.species]; // Set() 関数
+ +

掟生オブゞェクトの spicies

+ +

掟生コレクションオブゞェクト (たずえば、独自の配列である MySet) では、MySet の species は MySet コンストラクタヌです。しかし、掟生クラスのメ゜ッドで、芪である Set オブゞェクトを返すためにこれをオヌバヌラむドしたいかもしれたせん。

+ +
class MySet extends Set {
+  // MySet species を芪である Set コンストラクタヌにオヌバヌラむド。
+  static get [Symbol.species]() { return Set; }
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-set-@@species', 'get Set [ @@species ]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Set.@@species")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/add/index.html b/files/ja/web/javascript/reference/global_objects/set/add/index.html new file mode 100644 index 0000000000..61106d4cd7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/add/index.html @@ -0,0 +1,76 @@ +--- +title: Set.prototype.add() +slug: Web/JavaScript/Reference/Global_Objects/Set/add +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/add +--- +
{{JSRef}}
+ +

add() メ゜ッドは、特定の value をも぀新しい芁玠を Set オブゞェクトの最埌に远加したす。

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-add.html")}}
+ + + +

構文

+ +
mySet.add(value);
+ +

匕数

+ +
+
value
+
Set オブゞェクトに远加する芁玠の倀です。
+
+ +

返倀

+ +

Set オブゞェクトです。

+ +

䟋

+ +

add() メ゜ッドの䜿甚

+ +
var mySet = new Set();
+
+mySet.add(1);
+mySet.add(5).add('some text'); // メ゜ッドチェヌン
+
+console.log(mySet);
+// Set [1, 5, "some text"]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-set.prototype.add', 'Set.prototype.add')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Set.add")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/clear/index.html b/files/ja/web/javascript/reference/global_objects/set/clear/index.html new file mode 100644 index 0000000000..5899f06c3d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/clear/index.html @@ -0,0 +1,72 @@ +--- +title: Set.prototype.clear() +slug: Web/JavaScript/Reference/Global_Objects/Set/clear +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/clear +--- +
{{JSRef}}
+ +

clear() メ゜ッドは、Set オブゞェクトからすべおの芁玠を取り陀きたす。

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-clear.html")}}
+ + + +

構文

+ +
mySet.clear();
+ +

返倀

+ +

{{jsxref("undefined")}} です。

+ +

䟋

+ +

clear() メ゜ッドの䜿甚

+ +
var mySet = new Set();
+mySet.add(1);
+mySet.add('foo');
+
+mySet.size;       // 2
+mySet.has('foo'); // true
+
+mySet.clear();
+
+mySet.size;       // 0
+mySet.has('bar')  // false
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-set.prototype.clear', 'Set.prototype.clear')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Set.clear")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/delete/index.html b/files/ja/web/javascript/reference/global_objects/set/delete/index.html new file mode 100644 index 0000000000..818f0f7b7b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/delete/index.html @@ -0,0 +1,91 @@ +--- +title: Set.prototype.delete() +slug: Web/JavaScript/Reference/Global_Objects/Set/delete +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/delete +--- +
{{JSRef}}
+ +

delete() メ゜ッドは、Set オブゞェクトから指定された芁玠を取り陀きたす。

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-delete.html")}}
+ + + +

構文

+ +
mySet.delete(value);
+ +

匕数

+ +
+
value
+
mySet から取り陀く芁玠の倀です。
+
+ +

返倀

+ +

mySet から value が正垞に削陀されたら true を返したす。さもなければ、false を返したす。

+ +

䟋

+ +

delete() メ゜ッドの䜿甚

+ +
const mySet = new Set();
+mySet.add('foo');
+
+mySet.delete('bar'); // 削陀するべき芁玠が芋぀からなければ false を返す
+mySet.delete('foo'); // 正垞に芁玠を削陀出来れば true を返す
+
+mySet.has('foo');    // 存圚しない芁玠を確認するず false を返す
+
+ +

Set から Objectを削陀する方法を以䞋で確認しおみたしょう。

+ +
const setObj = new Set(); // 新しいセットを䜜成
+
+setObj.add({x: 10, y: 20}); // セットにオブゞェクトを远加
+
+setObj.add({x: 20, y: 30}); // セットにオブゞェクトを远加
+
+// `x > 10` のポむントを削陀
+setObj.forEach(function(point){
+  if(point.x > 10){
+    setObj.delete(point)
+  }
+})
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-set.prototype.delete', 'Set.prototype.delete')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Set.delete")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/entries/index.html b/files/ja/web/javascript/reference/global_objects/set/entries/index.html new file mode 100644 index 0000000000..641a865ad0 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/entries/index.html @@ -0,0 +1,71 @@ +--- +title: Set.prototype.entries() +slug: Web/JavaScript/Reference/Global_Objects/Set/entries +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Method + - Prototype + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/entries +--- +
{{JSRef}}
+ +

entries() メ゜ッドは、Set オブゞェクトの各芁玠を挿入順に [value, value] の配列を含む新しいむテレヌタヌオブゞェクトを返したす。Set オブゞェクトは、Map オブゞェクトのように key を持぀こずはありたせん。しかしながら、Map オブゞェクトず䌌た API をも぀ために、各 entry は key ず value に察しお同じ倀を持ちたす。そのため、配列 [value, value] が返されたす。

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-entries.html")}}
+ + + +

構文

+ +
mySet.entries()
+ +

返倀

+ +

Set オブゞェクトの各芁玠を挿入順に [value, value] の配列を含む新しい Iterator オブゞェクトです。

+ +

䟋

+ +

entries() を䜿う

+ +
var mySet = new Set();
+mySet.add('foobar');
+mySet.add(1);
+mySet.add('baz');
+
+var setIter = mySet.entries();
+
+console.log(setIter.next().value); // ["foobar", "foobar"]
+console.log(setIter.next().value); // [1, 1]
+console.log(setIter.next().value); // ["baz", "baz"]
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-set.prototype.entries', 'Set.prototype.entries')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Set.entries")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/foreach/index.html b/files/ja/web/javascript/reference/global_objects/set/foreach/index.html new file mode 100644 index 0000000000..440ace97e7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/foreach/index.html @@ -0,0 +1,110 @@ +--- +title: Set.prototype.forEach() +slug: Web/JavaScript/Reference/Global_Objects/Set/forEach +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/forEach +--- +
{{JSRef}}
+ +

forEach() メ゜ッドは、䞎えられた関数を Set オブゞェクトの各倀に察しお䞀回ず぀、挿入順で実行したす。

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-foreach.html")}}
+ + + +

構文

+ +
mySet.forEach(callback[, thisArg])
+ +

匕数

+ +
+
callback
+
各芁玠に察しお実行する関数で、 3぀の匕数を受け付けたす。
+
+
+
currentValue, currentKey
+
Setで珟圚 凊理されおいる芁玠。 Set にはキヌ(key)がないため倀(value)が䞡方に枡されたす。
+
set
+
forEach() が呌ばれおいる Set オブゞェクト
+
+
+
thisArg
+
callback を実行するずき、this ずしお䜿甚する倀です。
+
+ +

返倀

+ +

{{jsxref("undefined")}} です。

+ +

解説

+ +

forEach() メ゜ッドは Set オブゞェクトに実際に存圚する各倀に察しお䞀回、䞎えられた callback を実行したす。削陀された倀に察しおは呌び出されたせん。ですが、undefined の倀をも぀芁玠に察しおは実行されたす。

+ +

callback は぀の匕数で呌び出されたす。

+ + + +

Set オブゞェクトにキヌはありたせん。しかし、最初の 2 ぀の匕数は、䞡方ずも {{jsxref("Set")}} に含たれる倀です。そのため callback 関数は {{jsxref("Map.foreach", "Map")}} や {{jsxref("Array.forEach","Array")}} の forEach() メ゜ッドず矛盟がありたせん。

+ +

thisArg 匕数が forEach() に䞎えられた堎合、呌び出されたずきに this 倀ずしお䜿甚するために callback に枡されたす。さもなければ、this 倀ずしお䜿甚するために undefined 倀が枡されたす。callback によっお最終的に芳枬可胜な this 倀は関数から芋た this を決定するための通垞のルヌルに応じお決定されたす。

+ +

各倀は䞀床だけ蚪問されたすが、 forEach() が終了する前に削陀・再远加された堎合は䟋倖です。 到達する前に削陀された倀に察しおは callback は実行されたせん。 forEach() が終了する前に远加された新芏の倀は蚪問されたす。

+ +

forEach() は Set オブゞェクト内の各芁玠に察しお䞀回 callback 関数を実行したす。forEach() は倀を返したせん。

+ +

䟋

+ +

Set オブゞェクトの内容を出力する

+ +

次のコヌドでは、Set オブゞェクト内の各芁玠に察しおログを出力したす。

+ +
function logSetElements(value1, value2, set) {
+    console.log('s[' + value1 + '] = ' + value2);
+}
+
+new Set(['foo', 'bar', undefined]).forEach(logSetElements);
+
+// logs:
+// "s[foo] = foo"
+// "s[bar] = bar"
+// "s[undefined] = undefined"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-set.prototype.foreach', 'Set.prototype.forEach')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Set.forEach")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/has/index.html b/files/ja/web/javascript/reference/global_objects/set/has/index.html new file mode 100644 index 0000000000..7de9558ad6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/has/index.html @@ -0,0 +1,85 @@ +--- +title: Set.prototype.has() +slug: Web/JavaScript/Reference/Global_Objects/Set/has +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/has +--- +
{{JSRef}}
+ +

has() メ゜ッドは、特定の倀をも぀芁玠が Set オブゞェクト内に存圚するかどうかを瀺す真停倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-has.html")}}
+ + + +

構文

+ +
mySet.has(value);
+ +

匕数

+ +
+
value
+
Set オブゞェクトに存圚するかテストする倀です。
+
+ +

返倀

+ +

Set オブゞェクト内に特定の倀をも぀芁玠が存圚しおいたら true を返したす。さもなければ false を返したす。

+ +
+

泚: 技術的に蚀えば、has() は Same-value-zero アルゎリズムを䜿甚しお、指定された芁玠が芋぀かったかどうかを刀断したす。

+
+ +

䟋

+ +

has() メ゜ッドの䜿甚

+ +
var mySet = new Set();
+mySet.add('foo');
+
+mySet.has('foo');  // returns true
+mySet.has('bar');  // returns false
+
+var set1 = new Set();
+var obj1 = {'key1': 1};
+set1.add(obj1);
+
+set1.has(obj1);        // returns true
+set1.has({'key1': 1}); // オブゞェクト参照が異なるため false を返す
+set1.add({'key1': 1}); // set1 には2぀の゚ントリが含たれるようになる
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-set.prototype.has', 'Set.prototype.has')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Set.has")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/index.html b/files/ja/web/javascript/reference/global_objects/set/index.html new file mode 100644 index 0000000000..f487e97bfb --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/index.html @@ -0,0 +1,283 @@ +--- +title: Set +slug: Web/JavaScript/Reference/Global_Objects/Set +tags: + - Class + - ECMAScript 2015 + - Global Objects + - JavaScript + - Object + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set +--- +
{{JSRef}}
+ +

Set オブゞェクトは、{{Glossary("Primitive", "プリミティブ倀")}}やオブゞェクト参照を問わず、あらゆる型で䞀意の倀を栌玍できたす。

+ +

解説

+ +

Set オブゞェクトは倀のコレクションです。挿入順に芁玠を反埩するこずができたす。Set に重耇する倀は栌玍出来たせん。Set 内の倀はコレクション内で䞀意ずなりたす。

+ +

倀の等䟡性

+ +

Set オブゞェクト内の各倀は䞀意でなければならないので、倀の等䟡性が調べられたす。初期の ECMAScript では === 挔算子ずは違うアルゎリズムが甚いられおいたした。特に +0 (厳密に蚀えば -0 ず等䟡です) ず -0 が区別されおいた点は重芁です。しかしこの振る舞いは ECMAScript 2015 で倉曎されたした。ブラりザヌの互換性の「-0 ず +0 の等䟡性」を参照しおください。

+ +

たた、 {{jsxref("NaN")}} ず {{jsxref("undefined")}} も Set 内に栌玍できたす。NaN は (NaN !== NaN ずしお扱われたすが) NaN ず同じず扱われたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/Set/Set", "Set()")}}
+
新しい Set オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("Set.@@species", "get Set[@@species]")}}
+
掟生オブゞェクトを生成するために䜿甚されるコンストラクタヌ関数。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Set.prototype.size")}}
+
Set オブゞェクト内の倀の数を返したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Set.add", "Set.prototype.add(value)")}}
+
value を Set オブゞェクトに远加したす。Set オブゞェクトを返したす。
+
{{jsxref("Set.prototype.clear()")}}
+
すべおの芁玠を Set オブゞェクトから取り陀きたす。
+
{{jsxref("Set.delete", "Set.prototype.delete(value)")}}
+
value に関連した芁玠を取り陀き、Set.prototype.has(value) が以前に返しおいたはずの倀を返したす。Set.prototype.has(value) はその埌に false を返したす。
+
{{jsxref("Set.has", "Set.prototype.has(value)")}}
+
Set オブゞェクト内に匕数で䞎えられた倀をも぀芁玠が存圚するかどうかを瀺す真停倀を返したす。
+
+ +

反埩凊理メ゜ッド

+ +
+
{{jsxref("Set.prototype.@@iterator()", "Set.prototype[@@iterator]()")}}
+
挿入順に Set オブゞェクト内の各芁玠に察する values を生み出す新しい Iterator オブゞェクトを返したす。
+
{{jsxref("Set.prototype.keys()")}}
+
挿入順に Set オブゞェクト内の各芁玠に察する倀を含む新しい Iterator オブゞェクトを返したす。 (Set においおは、これはvalues() メ゜ッドず同じです。)
+
{{jsxref("Set.prototype.values()")}}
+
挿入順に Set オブゞェクト内の各芁玠に察する values を含む新しい Iterator オブゞェクトを返したす。 (Set においおは、これは keys() メ゜ッドず同じです。
+
{{jsxref("Set.prototype.entries()")}}
+
+

挿入順に Set オブゞェクト内の各芁玠に察しお [value, value] の配列を含む新しい Iterator オブゞェクトを返したす。

+ +

これは {{jsxref("Map")}} オブゞェクトに䌌させおいたす。そのため、 Set においおは各項目が key ず value が同じ倀になりたす。

+
+
{{jsxref("Set.forEach", "Set.prototype.forEach(callbackFn[, thisArg])")}}
+
挿入順に Set オブゞェクト内に存圚する各倀に察しお䞀床 callbackFn を呌びたす。thisArg 匕数が forEach に枡されたら、各コヌルバックに察しお this 倀ずしお䜿甚されたす。
+
+ +

䟋

+ +

Set オブゞェクトの䜿甚

+ +
let mySet = new Set()
+
+mySet.add(1)           // Set [ 1 ]
+mySet.add(5)           // Set [ 1, 5 ]
+mySet.add(5)           // Set [ 1, 5 ]
+mySet.add('some text') // Set [ 1, 5, 'some text' ]
+let o = {a: 1, b: 2}
+mySet.add(o)
+
+mySet.add({a: 1, b: 2})   // o is referencing a different object, so this is okay
+
+mySet.has(1)              // true
+mySet.has(3)              // 3 は集合にないため、false
+mySet.has(5)              // true
+mySet.has(Math.sqrt(25))  // true
+mySet.has('Some Text'.toLowerCase()) // true
+mySet.has(o)       // true
+
+mySet.size         // 5
+
+mySet.delete(5)    // Set から 5 を削陀
+mySet.has(5)       // 5 が削陀されおいるため false
+
+mySet.size         // 芁玠を 1 ぀削陀しおいるため 4
+
+console.log(mySet)
+// logs Set(4) [ 1, "some text", {
}, {
} ] in Firefox
+// logs Set(4) { 1, "some text", {
}, {
} } in Chrome
+
+ +

Set の反埩操䜜

+ +
// iterate over items in set
+// logs the items in the order: 1, "some text", {"a": 1, "b": 2}, {"a": 1, "b": 2}
+for (let item of mySet) console.log(item)
+
+// logs the items in the order: 1, "some text", {"a": 1, "b": 2}, {"a": 1, "b": 2}
+for (let item of mySet.keys()) console.log(item)
+
+// logs the items in the order: 1, "some text", {"a": 1, "b": 2}, {"a": 1, "b": 2}
+for (let item of mySet.values()) console.log(item)
+
+// logs the items in the order: 1, "some text", {"a": 1, "b": 2}, {"a": 1, "b": 2}
+// (key and value are the same here)
+for (let [key, value] of mySet.entries()) console.log(key)
+
+// convert Set object to an Array object, with Array.from
+let myArr = Array.from(mySet) // [1, "some text", {"a": 1, "b": 2}, {"a": 1, "b": 2}]
+
+// the following will also work if run in an HTML document
+mySet.add(document.body)
+mySet.has(document.querySelector('body')) // true
+
+// converting between Set and Array
+mySet2 = new Set([1, 2, 3, 4])
+mySet2.size                    // 4
+[...mySet2]                    // [1, 2, 3, 4]
+
+// intersect can be simulated via
+let intersection = new Set([...set1].filter(x => set2.has(x)))
+
+// difference can be simulated via
+let difference = new Set([...set1].filter(x => !set2.has(x)))
+
+// Iterate set entries with forEach()
+mySet.forEach(function(value) {
+  console.log(value)
+})
+
+// 1
+// 2
+// 3
+// 4
+ +

基本的な集合挔算の実装

+ +
function isSuperset(set, subset) {
+    for (let elem of subset) {
+        if (!set.has(elem)) {
+            return false
+        }
+    }
+    return true
+}
+
+function union(setA, setB) {
+    let _union = new Set(setA)
+    for (let elem of setB) {
+        _union.add(elem)
+    }
+    return _union
+}
+
+function intersection(setA, setB) {
+    let _intersection = new Set()
+    for (let elem of setB) {
+        if (setA.has(elem)) {
+            _intersection.add(elem)
+        }
+    }
+    return _intersection
+}
+
+function symmetricDifference(setA, setB) {
+    let _difference = new Set(setA)
+    for (let elem of setB) {
+        if (_difference.has(elem)) {
+            _difference.delete(elem)
+        } else {
+            _difference.add(elem)
+        }
+    }
+    return _difference
+}
+
+function difference(setA, setB) {
+    let _difference = new Set(setA)
+    for (let elem of setB) {
+        _difference.delete(elem)
+    }
+    return _difference
+}
+
+// Examples
+let setA = new Set([1, 2, 3, 4])
+let setB = new Set([2, 3])
+let 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]
+symmetricDifference(setA, setC) // => Set [1, 2, 5, 6]
+difference(setA, setC)          // => Set [1, 2]
+
+
+ +

Array オブゞェクトずの関係

+ +
let myArray = ['value1', 'value2', 'value3']
+
+// Use the regular Set constructor to transform an Array into a Set
+let mySet = new Set(myArray)
+
+mySet.has('value1')     // returns true
+
+// Use the spread operator to transform a set into an Array.
+console.log([...mySet]) // Will show you exactly the same Array as myArray
+
+ +

配列から重耇した芁玠を取り陀く

+ +
// Use to remove duplicate elements from the array
+
+const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
+
+console.log([...new Set(numbers)])
+
+// [2, 3, 4, 5, 6, 7, 32]
+ +

String ずの関係

+ +
let text = 'India'
+
+let mySet = new Set(text)  // Set ['I', 'n', 'd', 'i', 'a']
+mySet.size  // 5
+
+//case sensitive & duplicate ommision
+new Set("Firefox")  // Set(7) [ "F", "i", "r", "e", "f", "o", "x" ]
+new Set("firefox")  // Set(6) [ "f", "i", "r", "e", "o", "x" ]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-set-objects', 'Set')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/set/index.html b/files/ja/web/javascript/reference/global_objects/set/set/index.html new file mode 100644 index 0000000000..8837271c36 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/set/index.html @@ -0,0 +1,76 @@ +--- +title: Set() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Set/Set +tags: + - Constructor + - JavaScript + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/Set +--- +
{{JSRef}}
+ +

Set コンストラクタヌは、あらゆる型の䞀意なプリミティブ倀やオブゞェクト参照を栌玍する Set オブゞェクトを生成したす。

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-constructor.html")}}
+ + + +

構文

+ +
new Set([iterable])
+ +

パラメヌタヌ

+ +
+
iterable {{optional_inline}}
+
+

反埩可胜オブゞェクトが枡された堎合は、そのすべおの芁玠が新しい Set に加えられたす。

+ +

このパラメヌタヌを指定しなかった堎合、たたは倀が null だった堎合、新しい Set は空になりたす。

+
+
+ +

戻り倀

+ +

新しい Set オブゞェクト。

+ +

䟋

+ +

Set オブゞェクトの䜿甚

+ +
let mySet = new Set()
+
+mySet.add(1)           // Set [ 1 ]
+mySet.add(5)           // Set [ 1, 5 ]
+mySet.add(5)           // Set [ 1, 5 ]
+mySet.add('some text') // Set [ 1, 5, 'some text' ]
+let o = {a: 1, b: 2}
+mySet.add(o)
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-set-constructor', 'Set constructor')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/size/index.html b/files/ja/web/javascript/reference/global_objects/set/size/index.html new file mode 100644 index 0000000000..3a286970fe --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/size/index.html @@ -0,0 +1,61 @@ +--- +title: Set.prototype.size +slug: Web/JavaScript/Reference/Global_Objects/Set/size +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Prototype + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/size +--- +
{{JSRef}}
+ +

size アクセサヌプロパティは {{jsxref("Set")}} オブゞェクト内の芁玠の数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-size.html")}}
+ + + +

解説

+ +

size の倀は、Set オブゞェクトがいく぀の芁玠を持぀かを衚す敎数倀です。size に察するセットアクセサヌ関数は undefined です。よっお、このプロパティは倉曎できたせん。

+ +

䟋

+ +

size の䜿甚

+ +
var mySet = new Set();
+mySet.add(1);
+mySet.add(5);
+mySet.add('some text')
+
+mySet.size; // 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-set.prototype.size', 'Set.prototype.size')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Set.size")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/set/values/index.html b/files/ja/web/javascript/reference/global_objects/set/values/index.html new file mode 100644 index 0000000000..6fe969853f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/set/values/index.html @@ -0,0 +1,73 @@ +--- +title: Set.prototype.values() +slug: Web/JavaScript/Reference/Global_Objects/Set/values +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Method + - Prototype + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/values +--- +
{{JSRef}}
+ +

values() メ゜ッドは、挿入順で Set オブゞェクト内の各芁玠の倀を含んだ、新しいむテレヌタヌオブゞェクトを返したす。

+ +
+

泚: keys() メ゜ッドは ({{jsxref("Map")}} オブゞェクトずの類䌌性のため) このメ゜ッドに察する゚むリアスです。たったく同じように動䜜し、Set の各芁玠の倀を返したす。

+
+ +
{{EmbedInteractiveExample("pages/js/set-prototype-values.html")}}
+ + + +

構文

+ +
mySet.values();
+ +

返倀

+ +

挿入順で Set オブゞェクト内の各芁玠の倀を含んだ、新しいむテレヌタヌオブゞェクトです。

+ +

䟋

+ +

values() の䜿甚

+ +
var mySet = new Set();
+mySet.add('foo');
+mySet.add('bar');
+mySet.add('baz');
+
+var setIter = mySet.values();
+
+console.log(setIter.next().value); // "foo"
+console.log(setIter.next().value); // "bar"
+console.log(setIter.next().value); // "baz"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-set.prototype.values', 'Set.prototype.values')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.Set.values")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html b/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html new file mode 100644 index 0000000000..c5c80111ca --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html @@ -0,0 +1,55 @@ +--- +title: SharedArrayBuffer.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength +tags: + - JavaScript + - Property + - Shared Memory + - SharedArrayBuffer + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength +--- +
{{JSRef}}
+ +

byteLength アクセサヌプロパティは 、{{jsxref("SharedArrayBuffer")}} の長さをバむト単䜍で衚したす。

+ +
{{EmbedInteractiveExample("pages/js/sharedarraybuffer-bytelength.html","shorter")}}
+ + + +

解説

+ +

byteLength プロパティは、セットアクセサヌ関数が undefined であるアクセサヌプロパティです。぀たり、このプロパティは読み取り専甚です。倀は共有配列が生成されたずきに決定され、倉曎できたせん。

+ +

䟋

+ +

byteLength の䜿甚

+ +
var sab = new SharedArrayBuffer(1024);
+sab.byteLength; // 1024
+
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-sharedarraybuffer.prototype.bytelength', 'SharedArrayBuffer.prototype.byteLength')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.SharedArrayBuffer.byteLength")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/index.html b/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/index.html new file mode 100644 index 0000000000..2603ebfbd1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/index.html @@ -0,0 +1,135 @@ +--- +title: SharedArrayBuffer +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer +tags: + - Constructor + - JavaScript + - Shared Memory + - SharedArrayBuffer + - TypesdArrays +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer +--- +
{{JSRef}}
+ +

SharedArrayBuffer オブゞェクトは、ゞェネリックで固定長の生バむナリデヌタバッファヌを衚すために䜿甚されたす。{{jsxref("ArrayBuffer")}} オブゞェクトず䌌おいたすが、これらは共有メモリヌ䞊にビュヌを生成するために䜿甚されたす。ArrayBuffer ず異なり、SharedArrayBuffer は分離できたせん。

+ +
+

SharedArrayBuffer はすべおの䞻芁なブラりザヌで 2018 幎 1 月 5 日に、Spectre ぞの察応ずしお無効化されたしたので泚意しおください。Chrome では、Spectre 型脆匱性から保護するためのサむト分離機胜が有効にされたプラットフォヌムにおいお、v67 に再床有効化されおいたす。

+
+ +
{{EmbedInteractiveExample("pages/js/sharedarraybuffer-constructor.html")}}
+ + + +

構文

+ +
new SharedArrayBuffer(length)
+
+ +

パラメヌタヌ

+ +
+
length
+
array buffer を生成するバむト単䜍のサむズ。
+
+ +

戻り倀

+ +

指定したサむズの新しい SharedArrayBuffer。コンテンツは 0 に初期化されおいる。

+ +

説明

+ +

メモリヌの割り圓おず共有

+ +

クラスタヌ内のある゚ヌゞェントから別の゚ヌゞェント (゚ヌゞェントずは、りェブペヌゞのメむンプログラムたたはその web worker のひず぀) ぞ、{{jsxref("SharedArrayBuffer")}} オブゞェクトを䜿甚しおメモリヌを共有するために、postMessage ず structured cloning を䜿甚したす。

+ +

structured clone アルゎリズムは SharedArrayBuffers ず、SharedArrayBuffers にマッピングされた TypedArrays を受け入れたす。どちらの堎合も SharedArrayBuffer オブゞェクトは受信者に転送されお、受信偎の゚ヌゞェントで新たなプラむベヌトの SharedArrayBuffer オブゞェクトになりたす ({{jsxref("ArrayBuffer")}} ず同じように)。しかし、2 ぀の SharedArrayBuffer オブゞェクトから参照される共有デヌタブロックは同䞀のデヌタブロックであり、ある゚ヌゞェントによるブロックぞの副䜜甚は、結果的に他方の゚ヌゞェントからも芋えたす。

+ +
var sab = new SharedArrayBuffer(1024);
+worker.postMessage(sab);
+
+ +

Atomic 操䜜で共有メモリを曎新、同期する

+ +

共有メモリヌは、worker 内でもメむンスレッド内でも同時に生成や曎新ができたす。システムCPU や OS、ブラりザヌによっおは、倉曎がすべおのコンテキストに通知されるたでに少々時間がかかりたす。同期するためには、{{jsxref("Atomics", "atomic", "", 1)}} 操䜜が必芁です。

+ +

SharedArrayBuffer オブゞェクトを受け付ける API

+ + + +

SharedArrayBuffer の生成には new 挔算子が必芁

+ +

SharedArrayBuffer コンストラクタヌは、{{jsxref("Operators/new", "new")}} 挔算子で呌び出される必芁がありたす。new 挔算子なしで関数ずしお SharedArrayBuffer コンストラクタヌを呌び出すず、{{jsxref("TypeError")}} をスロヌしたす。

+ +
var sab = SharedArrayBuffer(1024);
+// TypeError: calling a builtin SharedArrayBuffer constructor
+// without new is forbidden
+ +
var sab = new SharedArrayBuffer(1024);
+ +

プロパティ

+ +
+
SharedArrayBuffer.length
+
SharedArrayBuffer コンストラクタヌの length プロパティの倀は 1。
+
{{jsxref("SharedArrayBuffer.prototype")}}
+
すべおの SharedArrayBuffer オブゞェクトにプロパティ远加を蚱可する。
+
+ +

SharedArrayBuffer プロトタむプオブゞェクト

+ +

すべおの SharedArrayBuffer むンスタンスは {{jsxref("SharedArrayBuffer.prototype")}} を継承しおいたす。

+ +

プロパティ

+ +

{{page('ja/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','プロパティ')}}

+ +

メ゜ッド

+ +

{{page('ja/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','メ゜ッド')}}

+ +

仕様

+ + + + + + + + + + + + + + + + + + + +
仕様状態コメント
{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}{{Spec2('ESDraft')}}ES2017 で初期定矩。
{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}{{Spec2('ES8')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/sharedarraybuffer/index.html b/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/sharedarraybuffer/index.html new file mode 100644 index 0000000000..05237e368a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/sharedarraybuffer/index.html @@ -0,0 +1,77 @@ +--- +title: SharedArrayBuffer() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer +tags: + - Constructor + - JavaScript + - Reference + - SharedArrayBuffer +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer +--- +
{{JSRef}}
+ +
+

Spectre の察策ずしお、 SharedArrayBuffer は2018幎1月5日にすべおの䞻芁ブラりザヌで既定で無効化されたこずに泚意しおください。 Chrome は、 Spectre スタむルの脆匱性から保護するためにサむトアむ゜レヌション機胜が有効になっおいるプラットフォヌムでは、 v67 で再有効化したした。

+
+ +

SharedArrayBuffer() コンストラクタヌは {{jsxref("SharedArrayBuffer")}} オブゞェクトを生成し、これは {{jsxref("ArrayBuffer")}} オブゞェクトず䌌た、汎甚的な、固定長の生のバむナリデヌタバッファヌを衚したす。

+ +
{{EmbedInteractiveExample("pages/js/sharedarraybuffer-constructor.html","shorter")}}
+ + + +

構文

+ +
new SharedArrayBuffer([length])
+ +

匕数

+ +
+
length
+
生成する配列バッファヌの長さをバむト数で指定したす。
+
+ +

返倀

+ +

指定された長さの新しい SharedArrayBuffer オブゞェクトです。䞭身は 0 で初期化されたす。

+ +

䟋

+ +

SharedArrayBuffer を生成するには垞に new 挔算子を䜿甚する

+ +

SharedArrayBuffer コンストラクタヌは {{jsxref("Operators/new", "new")}} 挔算子で構築する必芁がありたす。 SharedArrayBuffer コンストラクタヌを new なしで呌び出すず、 {{jsxref("TypeError")}} が発生したす。

+ +
var sab = SharedArrayBuffer(1024);
+// TypeError: calling a builtin SharedArrayBuffer constructor
+// without new is forbidden
+ +
var sab = new SharedArrayBuffer(1024);
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-sharedarraybuffer-constructor', 'SharedArrayBuffer constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html b/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html new file mode 100644 index 0000000000..e283d7605a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html @@ -0,0 +1,80 @@ +--- +title: SharedArrayBuffer.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice +tags: + - JavaScript + - Method + - Prototype + - Shared Memory + - SharedArrayBuffer + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice +--- +
{{JSRef}}
+ +

SharedArrayBuffer.prototype.slice() メ゜ッドは、新しい {{jsxref("SharedArrayBuffer")}} を生成し、その内容にこの SharedArrayBuffer のバむトを先頭䜍眮 (含む) から末尟䜍眮 (含たない) たでをコピヌしお返したす。先頭たたは末尟が負の倀であった堎合は、配列の先頭からではなく、末尟からのむンデックスになりたす。このメ゜ッドは {{jsxref("Array.prototype.slice()")}} ず同じアルゎリズムです。

+ +
{{EmbedInteractiveExample("pages/js/sharedarraybuffer-slice.html")}}
+ + + +

構文

+ +
sab.slice()
+sab.slice(begin)
+sab.slice(begin, end)
+ +

匕数

+ +
+
begin {{optional_inline}}
+
取り出す先頭䜍眮を衚す 0 から始たるむンデックスです。
+
負のむンデックスを䜿甚しお、配列の末尟からのオフセットを瀺すこずが可胜です。 slice(-2) は䞊びの最埌の2぀の芁玠を取り出したす。
+
If begin が undefined であった堎合は、 slice はむンデックス 0 から取り出し始めたす。
+
end {{optional_inline}}
+
0 から始たるむンデックスで、取り出す範囲の末尟の前を瀺したす。 slice はここたでを取り出したすが、 end は含めたせん。
+
䟋えば、 slice(1,4) は2番目から4番目たでの芁玠を取り出したす (添字が 1, 2, 3 の芁玠)。
+
負のむンデックスを䜿甚しお、配列の末尟からのオフセットを瀺すこずが可胜です。 slice(2,-1) は3番目から、䞊びの最埌から2番目たでの芁玠を取り出したす。
+
end が省略されるず、 slice は䞊びの最埌たでの範囲を取り出したす。 (sab.byteLength).
+
+ +

返倀

+ +

取り出した芁玠をが入った新しい {{jsxref("SharedArrayBuffer")}} です。

+ +

䟋

+ +

slice() の䜿甚

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

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-sharedarraybuffer.prototype.slice', 'SharedArrayBuffer.prototype.slice')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.SharedArrayBuffer.slice")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/stopiteration/index.html b/files/ja/web/javascript/reference/global_objects/stopiteration/index.html new file mode 100644 index 0000000000..79972224a8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/stopiteration/index.html @@ -0,0 +1,66 @@ +--- +title: StopIteration +slug: Web/JavaScript/Reference/Global_Objects/StopIteration +tags: + - JavaScript + - Legacy Iterator + - Non-standard + - Reference + - StopItaration +translation_of: Archive/Web/StopIteration +--- +
{{jsSidebar("Objects")}}
+ +
非暙準。 StopIteration オブゞェクトはSpiderMonkey特有の機胜です。将来向きの甚途に察しお、for..of ルヌプずiterator protocolを䜿甚するこずを怜蚎しおください。
+ +

抂芁

+ +

StopIteration オブゞェクトはレガシヌむテレヌタプロトコルにおける反埩の終了を通知するために䜿甚したす。

+ +

構文

+ +
StopIteration
+ +

説明

+ +

䜿甚法の抂芁は、Iterators and Generators ペヌゞ䞊で利甚可胜です

+ +

䟋

+ +

StopIterationはIteratorによっおスロヌされたす。

+ +
var a = {
+  x: 10,
+  y: 20,
+};
+var iter = Iterator(a);
+console.log(iter.next()); // ["x", 10]
+console.log(iter.next()); // ["y", 20]
+console.log(iter.next()); // throws StopIteration
+
+ +

StopIterationをスロヌする。

+ +
function f() {
+  yield 1;
+  yield 2;
+  throw StopIteration;
+  yield 3; // this is not executed.
+}
+
+for (var n in f()) {
+  console.log(n);   // 1
+                    // 2
+}
+
+ +

仕様

+ +

非暙準。すべおの珟圚の暙準仕様でサポヌトされおいたせん。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/@@iterator/index.html b/files/ja/web/javascript/reference/global_objects/string/@@iterator/index.html new file mode 100644 index 0000000000..23cab0baec --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/@@iterator/index.html @@ -0,0 +1,82 @@ +--- +title: 'String.prototype[@@iterator]()' +slug: Web/JavaScript/Reference/Global_Objects/String/@@iterator +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/@@iterator +--- +
{{JSRef}}
+ +

[@@iterator]() メ゜ッドは、文字列倀のコヌドポむントを走査し、それぞれのコヌドポむントを文字列倀ずしお返すむテレヌタヌオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-iterator.html")}}
+ + + +

構文

+ +
str[Symbol.iterator]
+ +

返倀

+ +

新しいむテレヌタヌオブゞェクトです。

+ +

䟋

+ +

[@@iterator]() の䜿甚

+ +
var str = 'A\uD835\uDC68';
+
+var strIter = str[Symbol.iterator]();
+
+console.log(strIter.next().value); // "A"
+console.log(strIter.next().value); // "\uD835\uDC68"
+
+ +

[@@iterator]() ず for..of の䜿甚

+ +
var str = 'A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A';
+
+for (var v of str) {
+  console.log(v);
+}
+// "A"
+// "\uD835\uDC68"
+// "B"
+// "\uD835\uDC69"
+// "C"
+// "\uD835\uDC6A"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype-@@iterator', 'String.prototype[@@iterator]()')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.@@iterator")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/anchor/index.html b/files/ja/web/javascript/reference/global_objects/string/anchor/index.html new file mode 100644 index 0000000000..b64cfb7f0a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/anchor/index.html @@ -0,0 +1,80 @@ +--- +title: String.prototype.anchor() +slug: Web/JavaScript/Reference/Global_Objects/String/anchor +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/anchor +--- +
{{JSRef}} {{deprecated_header}}
+ +

anchor() メ゜ッドは、 <a name="..."> 開始タグで始たり、いくらかのテキストが続き、 </a> 終了タグで終わる文字列を生成したす。

+ +
+

このメ゜ッドを䜿甚しないでください。代わりに DOM API を䜿甚しおください。たた、 HTML 仕様曞では {{HTMLElement("a")}} 芁玠に name 属性を蚭定するこずを蚱容しなくなりたしたので、このメ゜ッドが生成するものは劥圓なマヌクアップにもなりたせん。

+
+ +

構文

+ +
str.anchor(name)
+ +

匕数

+ +
+
name
+
name 倀を衚す文字列で、 <a name="..."> 開始タグに入れられたす。
+
+ +

返倀

+ +

<a name="name"> 開始タグで始たり、 str のテキストが続き、 </a> 終了タグで終わる文字列です。

+ +

解説

+ +

このメ゜ッドを䜿甚しないでください。代わりに DOM API を䜿甚しおください。たた、 HTML 仕様曞では {{HTMLElement("a")}} 芁玠に name 属性を蚭定するこずを蚱容しなくなりたしたので、このメ゜ッドが生成するものは劥圓なマヌクアップにもなりたせん。

+ +

䟋

+ +

anchor() の䜿甚

+ +
var myString = 'Table of Contents';
+
+document.body.innerHTML = myString.anchor('contents_anchor');
+
+ +

以䞋の HTML が生成されたす。

+ +
<a name="contents_anchor">Table of Contents</a>
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.anchor', 'String.prototype.anchor')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.anchor")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/big/index.html b/files/ja/web/javascript/reference/global_objects/string/big/index.html new file mode 100644 index 0000000000..2d7d0c816d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/big/index.html @@ -0,0 +1,78 @@ +--- +title: String.prototype.big() +slug: Web/JavaScript/Reference/Global_Objects/String/big +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/big +--- +
{{JSRef}} {{deprecated_header}}
+ +

big() メ゜ッドは、文字列が倧きなフォントで衚瀺されるように HTML の {{HTMLElement("big")}} 芁玠を生成したす。

+ +
+

䜿甚䞊の泚意: <big> 芁玠は HTML5 で廃止されおおり、今埌䜿甚するべきではありたせん。代わりにりェブ開発者は CSS プロパティを䜿甚しおください。

+
+ +

構文

+ +
str.big()
+ +

返倀

+ +

HTML の {{HTMLElement("big")}} 芁玠を含む文字列です。

+ +

解説

+ +

big() メ゜ッドは、文字列を <big> 芁玠の䞭に、 "<big>str</big>" のように埋め蟌みたす。

+ +

䟋

+ +

big() の䜿甚

+ +

以䞋の䟋では文字列のメ゜ッドを䜿甚しお、文字列の倧きさを倉曎しおいたす。

+ +
var worldString = 'Hello, world';
+
+console.log(worldString.small());     // <small>Hello, world</small>
+console.log(worldString.big());       // <big>Hello, world</big>
+console.log(worldString.fontsize(7)); // <fontsize=7>Hello, world</fontsize>
+
+ +

{{domxref("ElementCSSInlineStyle/style", "element.style")}} オブゞェクトを䜿甚するず、芁玠の style 属性を䜿甚しお、次のようにもっず汎甚的に操䜜するこずができたす。

+ +
document.getElementById('yourElemId').style.fontSize = '2em';
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.big', 'String.prototype.big')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.big")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/blink/index.html b/files/ja/web/javascript/reference/global_objects/string/blink/index.html new file mode 100644 index 0000000000..129a8c764f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/blink/index.html @@ -0,0 +1,74 @@ +--- +title: String.prototype.blink() +slug: Web/JavaScript/Reference/Global_Objects/String/blink +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/blink +--- +
{{JSRef}} {{deprecated_header}}
+ +

blink() メ゜ッドは、文字列を点滅させる HTML の {{HTMLElement("blink")}} 芁玠を生成したす。

+ +
+

譊告: 文字列の点滅はアクセシビリティの芳点から奜たしくありたせん。たた、<blink> 芁玠は非暙準であり非掚奚です

+
+ +

構文

+ +
str.blink()
+ +

返倀

+ +

HTML の {{HTMLElement("blink")}} 芁玠を含む文字列です。

+ +

解説

+ +

blink() メ゜ッドは、文字列を <blink> 芁玠の䞭に、 "<blink>str</blink>" のように埋め蟌みたす。

+ +

䟋

+ + + +

以䞋の䟋では文字列のメ゜ッドを䜿甚しお、文字列の敎圢方法を倉化させおいたす。

+ +
var worldString = 'Hello, world';
+
+console.log(worldString.blink());   // <blink>Hello, world</blink>
+console.log(worldString.bold());    // <b>Hello, world</b>
+console.log(worldString.italics()); // <i>Hello, world</i>
+console.log(worldString.strike());  // <strike>Hello, world</strike>
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.blink', 'String.prototype.blink')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.blink")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/bold/index.html b/files/ja/web/javascript/reference/global_objects/string/bold/index.html new file mode 100644 index 0000000000..c916d60ea0 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/bold/index.html @@ -0,0 +1,70 @@ +--- +title: String.prototype.bold() +slug: Web/JavaScript/Reference/Global_Objects/String/bold +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/bold +--- +
{{JSRef}} {{deprecated_header}}
+ +

bold() メ゜ッドは、文字列を倪字で衚瀺させる HTML の {{HTMLElement("b")}} 芁玠を生成したす。

+ +

構文

+ +
str.bold()
+ +

返倀

+ +

HTML の {{HTMLElement("b")}} 芁玠を含む文字列です。

+ +

解説

+ +

bold() メ゜ッドは、文字列を <b> 芁玠の䞭に、 "<b>str</b>" のように埋め蟌みたす。

+ +

䟋

+ +

bold() の䜿甚

+ +

䞋蚘の䟋は、 fixed メ゜ッドを䜿甚しお文字列の衚瀺方法を倉曎したす。

+ +
var worldString = 'Hello, world';
+
+console.log(worldString.blink());   // <blink>Hello, world</blink>
+console.log(worldString.bold());    // <b>Hello, world</b>
+console.log(worldString.italics()); // <i>Hello, world</i>
+console.log(worldString.strike());  // <strike>Hello, world</strike>
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.bold', 'String.prototype.bold')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.bold")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/charat/index.html b/files/ja/web/javascript/reference/global_objects/string/charat/index.html new file mode 100644 index 0000000000..30d708cad3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/charat/index.html @@ -0,0 +1,244 @@ +--- +title: String.prototype.charAt() +slug: Web/JavaScript/Reference/Global_Objects/String/charAt +tags: + - JavaScript + - Method + - Reference + - String + - String Methods +translation_of: Web/JavaScript/Reference/Global_Objects/String/charAt +--- +
{{JSRef}}
+ +

{{jsxref("String")}} オブゞェクトの charAt() メ゜ッドは、文字列の䞭の指定された䜍眮にある単䞀の UTF-16 コヌドナニットからなる新しい文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-charat.html", "shorter")}}
+ + + +

構文

+ +
let character = str.charAt(index)
+ +

匕数

+ +
+
index
+
0 から str.length - 1 たでの間の敎数です。 index が敎数に倉換できない堎合や index が指定されなかった堎合、既定倀は 0 ずなり、 str の最初の文字が返されたす。
+
+ +

返倀

+ +

䞎えられた index の䜍眮にあるコヌドポむント倀を衚す数倀です。 index の䜍眮に芁玠がない堎合は {{jsxref("Global_Objects/NaN", "NaN")}} を返したす。

+ +

解説

+ +

文字列の䞭の文字は、巊から右に向けおむンデックス付けされおいたす。最初の文字の添字は 0 であり、最埌の文字の添字は— stringName ずいう名前の文字列であれば— stringName.length - 1 です。提䟛した index がこの範囲を倖れおいた堎合、 JavaScript は空文字列を返したす。

+ +

index が charAt() に提䟛されなかった堎合の既定倀は 0 です。

+ +

䟋

+ +

文字列の䞭の様々な䜍眮の文字の衚瀺

+ +

次の䟋は、 "Brave new world" ずいう文字列の䞭の様々な䜍眮の文字を衚瀺したす。

+ +
var anyString = 'Brave new world';
+console.log("The character at index 0   is '" + anyString.charAt()   + "'");
+// index が提䟛されなかった堎合は、既定倀ずしお 0 が䜿われる
+
+console.log("The character at index 0   is '" + anyString.charAt(0)   + "'");
+console.log("The character at index 1   is '" + anyString.charAt(1)   + "'");
+console.log("The character at index 2   is '" + anyString.charAt(2)   + "'");
+console.log("The character at index 3   is '" + anyString.charAt(3)   + "'");
+console.log("The character at index 4   is '" + anyString.charAt(4)   + "'");
+console.log("The character at index 999 is '" + anyString.charAt(999) + "'");
+
+ +

これらの行は以䞋のように衚瀺されたす。

+ +
The character at index 0   is 'B'
+
+The character at index 0   is 'B'
+The character at index 1   is 'r'
+The character at index 2   is 'a'
+The character at index 3   is 'v'
+The character at index 4   is 'e'
+The character at index 999 is ''
+
+ +

文字党䜓の取埗

+ +

以䞋の䟋では、文字列に基本倚蚀語面にない文字が含たれおいた堎合でも、ルヌプで垞に文字党䜓を取埗するこずを保蚌する方法を玹介したす。

+ +
var str = 'A \uD87E\uDC04 Z'; // We could also use a non-BMP character directly
+for (var i = 0, chr; i < str.length; i++) {
+  if ((chr = getWholeChar(str, i)) === false) {
+    continue;
+  }
+  // Adapt this line at the top of each loop, passing in the whole string and
+  // the current iteration and returning a variable to represent the
+  // individual character
+
+  console.log(chr);
+}
+
+function getWholeChar(str, i) {
+  var code = str.charCodeAt(i);
+
+  if (Number.isNaN(code)) {
+    return ''; // Position not found
+  }
+  if (code < 0xD800 || code > 0xDFFF) {
+    return str.charAt(i);
+  }
+
+  // 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);
+  }
+  // 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';
+  }
+  // We can pass over low surrogates now as the second component
+  // in a pair which we have already processed
+  return false;
+}
+
+ +

ECMAScript 2016 環境では分割代入が利甚できるため、倉数を自動的に増加させるこずができるもっず簡朔で柔軟な代替案を利甚するこずができたす (その文字がサロゲヌトペアであるこずを保蚌しおいる堎合)。

+ +
let str = 'A\uD87E\uDC04Z'  // We could also use a non-BMP character directly
+for (let 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) {
+  let 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'
+    }
+    let 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'
+  }
+
+  let 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]
+}
+
+ +

charAt() を修正しお、基本倚蚀語面 (BMP) 以倖の文字に察応させる

+ +

前述の䟋は、 BMP 以倖の文字に察応しなければならないプログラムの方が有甚かもしれたせんが (呌び出し元が BMP 以倖の文字の出珟堎所を知る必芁がないので)、むンデックスで文字を遞択する際に、文字列内のサロゲヌトペアをそれらが衚す単䞀の文字ずしお扱いたい堎合には、以䞋のようにしお䜿甚できたす。

+ +
function fixedCharAt(str, idx) {
+  let ret = ''
+  str += ''
+  let end = str.length
+
+  let surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g
+  while ((surrogatePairs.exec(str)) != null) {
+    let lastIdx = surrogatePairs.lastIndex
+    if (lastIdx - 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))) {
+    // Go one further, since one of the "characters" is part of a surrogate pair
+    ret += str.charAt(idx + 1)
+  }
+  return ret
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.charat', 'String.prototype.charAt')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.charAt")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/charcodeat/index.html b/files/ja/web/javascript/reference/global_objects/string/charcodeat/index.html new file mode 100644 index 0000000000..18dcb608de --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/charcodeat/index.html @@ -0,0 +1,164 @@ +--- +title: String.prototype.charCodeAt() +slug: Web/JavaScript/Reference/Global_Objects/String/charCodeAt +tags: + - JavaScript + - Method + - Reference + - String + - Unicode +translation_of: Web/JavaScript/Reference/Global_Objects/String/charCodeAt +--- +
{{JSRef}}
+ +

charCodeAt() メ゜ッドは、指定された䜍眮にある UTF-16 コヌドナニットを衚す 0 から 65535 たでの敎数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-charcodeat.html", "shorter")}}
+ + + +

単䞀の UTF-16 コヌドナニットで衚珟可胜なコヌドポむントであれば、 UTF-16 コヌドナニットは Unicode コヌドポむントず䞀臎したす。 Unicode コヌドポむントが単䞀の UTF-16 コヌドナニットで衚珟できない堎合 (倀が 0xFFFF を超える堎合)、返されるコヌドナニットはそのコヌドポむントのサロゲヌトペアの最初の郚分になりたす。コヌドポむント倀党䜓を取埗したい堎合は、 {{jsxref("Global_Objects/String/codePointAt", "codePointAt()")}} を䜿甚しおください。

+ +

構文

+ +
str.charCodeAt(index)
+ +

匕数

+ +
+
index
+
敎数で、 0 以䞊、文字列の length 未満の倀です。 index が数倀でない堎合は、既定で 0 になりたす。
+
+ +

返倀

+ +

䞎えられた index の䜍眮にあるコヌドポむント倀を衚す数倀です。 index の䜍眮に芁玠がない堎合は {{jsxref("Global_Objects/NaN", "NaN")}} を返したす。

+ +

解説

+ +

Unicode コヌドポむントの範囲は、 0 から 1114111 (0x10FFFF) です。最初の 128 の Unicode コヌドポむントは、 ASCII 文字゚ンコヌディングに盎接察応しおいたす。 (Unicode に぀いおの詳现は、Java Script ガむドを参照しおください。)

+ +
+

泚: charCodeAt() は垞に 65536 より小さい倀を返すこずに泚意しおください。これは、より高いコヌドポむントは、実際の文字を含むように䜿甚されおいる (䞋の倀) の "代理" 擬䌌文字のペアで衚されおいるためです。

+ +

これにより、 65536 以䞊の倀の個々の文字に぀いお完党な文字を怜蚌したり再珟したりするためには、 charCodeAt(i) だけではなく、 charCodeAt(i+1) (2 文字の文字列を怜蚌/再珟する堎合) か codePointAt(i) を代わりに䜿甚する必芁がありたす。䞋蚘の䟋 2 ず 3 を芋おください。

+
+ +

䞎えられたむンデックスが 0 ず文字列の長さの間にない堎合、charCodeAt() は {{jsxref("Global_Objects/NaN", "NaN")}} を返したす。

+ +

埌方互換: (JavaScript 1.2 などの) 過去のバヌゞョンでは、 charCodeAt() メ゜ッドは、䞎えられた䜍眮の文字の ISO-Latin-1 コヌドセットの倀を瀺す数を返したす。 ISO-Latin-1 コヌドセットの範囲は 0 から 255 です。最初の 0 から 127 たでは ASCII 文字セットに盎接察応しおいたす。

+ +

䟋

+ +

charCodeAt() の䜿甚

+ +

以䞋の䟋では、 Unicode 文字の A である 65 を返したす。

+ +
'ABC'.charCodeAt(0)  // returns 65
+
+ +

基本倚蚀語面以倖の文字が文字列の前方に存圚するかどうか䞍明な堎合に扱えるように charCodeAt() を修正

+ +

このバヌゞョンは、指定された䜍眮の前に BMP 以倖の文字が存圚するかどうかが䞍明な堎合に、 for ルヌプなどで䜿甚されるこずがありたす。

+ +
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;
+
+  // High surrogate (could change last hex to 0xDB7F
+  // to treat high private surrogates
+  // as single characters)
+  if (0xD800 <= code && code <= 0xDBFF) {
+    hi = code;
+    low = str.charCodeAt(idx + 1);
+    if (isNaN(low)) {
+      throw 'High surrogate not followed by ' +
+        'low surrogate in fixedCharCodeAt()';
+    }
+    return (
+      (hi - 0xD800) * 0x400) +
+      (low - 0xDC00) + 0x10000;
+  }
+  if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate
+    // We return false to allow loops to skip
+    // this iteration since should have already handled
+    // high surrogate above in the previous iteration
+    return false;
+    // hi = str.charCodeAt(idx - 1);
+    // low = code;
+    // return ((hi - 0xD800) * 0x400) +
+    //   (low - 0xDC00) + 0x10000;
+  }
+  return code;
+}
+
+ +

文字列の前方に基本倚蚀語面以倖の文字が存圚するこずが分かっおいる堎合に扱えるように charCodeAt() を修正

+ +
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);
+    // Go one further, since one of the "characters"
+    // is part of a surrogate pair
+    return ((hi - 0xD800) * 0x400) +
+      (low - 0xDC00) + 0x10000;
+  }
+  return code;
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.charcodeat', 'String.prototype.charCodeAt')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.charCodeAt")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/codepointat/index.html b/files/ja/web/javascript/reference/global_objects/string/codepointat/index.html new file mode 100644 index 0000000000..1c01aac633 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/codepointat/index.html @@ -0,0 +1,146 @@ +--- +title: String.prototype.codePointAt() +slug: Web/JavaScript/Reference/Global_Objects/String/codePointAt +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/codePointAt +--- +
{{JSRef}}
+ +

codePointAt() メ゜ッドは、 Unicode コヌドポむント倀である負ではない敎数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-codepointat.html","shorter")}}
+ + + +

構文

+ +
str.codePointAt(pos)
+ +

匕数

+ +
+
pos
+
コヌドポむント倀を返す str の䞭の芁玠の䜍眮です。
+
+ +

返倀

+ +

䞎えられた pos の䜍眮にあるコヌドポむント倀を衚す数倀です。 pos の䜍眮に芁玠がない堎合は {{jsxref("undefined")}} を返したす。

+ +

解説

+ +

指定された䜍眮に芁玠が存圚しない堎合は {{jsxref("undefined")}} を返したす。 pos の䜍眮から UTF-16 サロゲヌトペアが始たらない堎合は、 pos の䜍眮のコヌドナニットを返したす。

+ +

䟋

+ +

codePointAt() の䜿甚

+ +
'ABC'.codePointAt(1)           // 66
+'\uD800\uDC00'.codePointAt(0)  // 65536
+
+'XYZ'.codePointAt(42)          // undefined
+
+ +

codePointAt() の繰り返し

+ +
for (let codePoint of '\ud83d\udc0e\ud83d\udc71\u2764') {
+   console.log(codePoint.codePointAt(0).toString(16))
+}
+// '1f40e', '1f471', '2764'
+
+ +

ポリフィル

+ +

次のプログラムは、 ECMAScript 2015 で定矩された codePointAt() をネむティブで察応しおいないブラりザヌで利甚できるよう String を拡匵したす。

+ +
/*! 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;
+    }
+  }());
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.codepointat', 'String.prototype.codePointAt')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.codePointAt")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/concat/index.html b/files/ja/web/javascript/reference/global_objects/string/concat/index.html new file mode 100644 index 0000000000..70bcf90e76 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/concat/index.html @@ -0,0 +1,93 @@ +--- +title: String.prototype.concat() +slug: Web/JavaScript/Reference/Global_Objects/String/concat +tags: + - JavaScript + - Prototype + - Reference + - String + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/String/concat +--- +
{{JSRef}}
+ +

concat() メ゜ッドは、文字列匕数を呌び出し文字列に連結しお、新しい文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-concat.html")}}
+ + + +

構文

+ +
str.concat(str2 [, ...strN])
+ +

匕数

+ +
+
str2 [, ...strN]
+
str に連結する文字列。
+
+ +

返倀

+ +

提䟛された文字列を結合したテキストを含む新しい文字列。

+ +

解説

+ +

concat() 関数は、文字列匕数を呌び出し文字列に連結し、新しい文字列を返したす。元の文字列たたは返された文字列の倉曎は、他の文字列には圱響したせん。

+ +

匕数が文字列型でない堎合は、連結前に文字列倀に倉換されたす。

+ +

性胜

+ +

concat() メ゜ッドの代わりに {{jsxref("Operators/Assignment_Operators", "代入挔算子", "", 1)}} (+ たたは +=) を䜿甚する事を匷くお勧めしたす。
+ この性胜詊隓によれば、{{jsxref("Operators/Assignment_Operators", "代入挔算子", "", 1)}}のほうが数倍高速です。

+ +

䟋

+ +

concat() の䜿甚

+ +

耇数の文字列を連結しおコン゜ヌルに衚瀺する䟋を以䞋に瀺したす。

+ +
let hello = 'こんにちは、'
+console.log(hello.concat('鈎朚さん', '。よい1日を。'))
+/* こんにちは、鈎朚さん。よい1日を。*/
+
+let greetList = ['こんにちは', ' ', '䜐藀さん', '!']
+"".concat(...greetList)  // "こんにちは 䜐藀さん!"
+
+"".concat({})    // [object Object]
+"".concat([])    // ""
+"".concat(null)  // "null"
+"".concat(true)  // "true"
+"".concat(4, 5)  // "45"
+
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.concat', 'String.prototype.concat')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.concat")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/endswith/index.html b/files/ja/web/javascript/reference/global_objects/string/endswith/index.html new file mode 100644 index 0000000000..3020f5c05c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/endswith/index.html @@ -0,0 +1,94 @@ +--- +title: String.prototype.endsWith() +slug: Web/JavaScript/Reference/Global_Objects/String/endsWith +tags: + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/endsWith +--- +
{{JSRef}}
+ +

endsWith() メ゜ッドは文字列が匕数で指定された文字列で終わるかを刀定しお true か false を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-endswith.html")}}
+ + + +

構文

+ +
str.endsWith(searchString[, length])
+ +

匕数

+ +
+
searchString
+
str の末尟で怜玢される文字の集合です。
+
length {{optional_inline}}
+
指定された堎合、 str の長さずしお䜿甚されたす。既定倀は str.length です。
+
+ +

返倀

+ +

文字列が指定された文字列で終わる堎合は true、それ以倖の堎合は false です。

+ +

解説

+ +

文字列が特定の文字列で終わるかどうかを刀断できたす。このメ゜ッドでは (英文字の) 倧文字・小文字は区別されたす。

+ +

䟋

+ +

endsWith() の䜿甚

+ +
let str = 'To be, or not to be, that is the question.'
+
+console.log(str.endsWith('question.'))  // true
+console.log(str.endsWith('to be'))      // false
+console.log(str.endsWith('to be', 19))  // true
+
+ +

ポリフィル

+ +

このメ゜ッドは ECMAScript 6 で远加されたした。すべおの JavaScript の実装でただ利甚可胜ではないかもしれたせん。しかしながら、次のコヌドで String.prototype.endsWith() を゚ミュレヌトできたす。

+ +
if (!String.prototype.endsWith) {
+  String.prototype.endsWith = function(search, this_len) {
+    if (this_len === undefined || this_len > this.length) {
+      this_len = this.length;
+    }
+    return this.substring(this_len - search.length, this_len) === search;
+  };
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.endswith', 'String.prototype.endsWith')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.endsWith")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/fixed/index.html b/files/ja/web/javascript/reference/global_objects/string/fixed/index.html new file mode 100644 index 0000000000..ed7e2d2576 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/fixed/index.html @@ -0,0 +1,67 @@ +--- +title: String.prototype.fixed() +slug: Web/JavaScript/Reference/Global_Objects/String/fixed +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/fixed +--- +
{{JSRef}} {{deprecated_header}}
+ +

fixed() メ゜ッドは、文字列を等幅フォントで衚瀺させる HTML の {{HTMLElement("tt")}} 芁玠を生成したす。

+ +

構文

+ +
str.fixed()
+ +

返倀

+ +

HTML の {{HTMLElement("tt")}} 芁玠を含む文字列です。

+ +

解説

+ +

fixed() メ゜ッドは、文字列を <tt> 芁玠の䞭に、 "<tt>str</tt>" のように埋め蟌みたす。

+ +

䟋

+ +

fixed() の䜿甚

+ +

䞋蚘の䟋は、 fixed メ゜ッドを䜿甚しお文字列の衚瀺方法を倉曎したす。

+ +
var worldString = '䞖界のみなさん、こんにちは';
+console.log(worldString.fixed()); // "<tt>䞖界のみなさん、こんにちは</tt>"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.fixed', 'String.prototype.fixed')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.fixed")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/fontcolor/index.html b/files/ja/web/javascript/reference/global_objects/string/fontcolor/index.html new file mode 100644 index 0000000000..aa768ff89c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/fontcolor/index.html @@ -0,0 +1,86 @@ +--- +title: String.prototype.fontcolor() +slug: Web/JavaScript/Reference/Global_Objects/String/fontcolor +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/fontcolor +--- +
{{JSRef}} {{deprecated_header}}
+ +

fontcolor() メ゜ッドは、文字列を指定された色で衚瀺させる HTML の {{HTMLElement("font")}} 芁玠を生成したす。

+ +
+

䜿甚䞊の泚意: <font> 芁玠は HTML5 で廃止されおおり、今埌䜿甚するべきではありたせん。代わりにりェブ開発者は CSS プロパティを䜿甚しおください。

+
+ +

構文

+ +
str.fontcolor(color)
+ +

匕数

+ +
+
color
+
16進数の RGB 倀たたは文字列リテラルで色を衚す文字列です。 CSS 色リファレンスに、色名の文字列リテラルの䞀芧がありたす。
+
+ +

返倀

+ +

HTML の {{HTMLElement("font")}} 芁玠を含む文字列です。

+ +

解説

+ +

色を16進数の RGB 倀で衚珟する堎合は、 rrggbb の曞匏を䜿甚する必芁がありたす。䟋えば、サヌモン色は red=FA, green=80, blue=72 であるため、サヌモン色の RGB 倀は "FA8072" です。

+ +

䟋

+ +

fontcolor() の䜿甚

+ +

以䞋の䟋は fontcolor() メ゜ッドを䜿甚しお、 HTML の <font> 芁玠を䌎う文字列を生成するこずで文字列の色を倉曎しおいたす。

+ +
var worldString = 'Hello, world';
+
+console.log(worldString.fontcolor('red') +  ' is red in this line');
+// '<font color="red">Hello, world</font> is red in this line'
+
+console.log(worldString.fontcolor('FF00') + ' is red in hexadecimal in this line');
+// '<font color="FF00">Hello, world</font> is red in hexadecimal in this line'
+
+ +

{{domxref("ElementCSSInlineStyle/style", "element.style")}} オブゞェクトを䜿甚するず、芁玠の style 属性を䜿甚しお、次のようにもっず汎甚的に操䜜するこずができたす。

+ +
document.getElementById('yourElemId').style.color = 'red';
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.fontcolor', 'String.prototype.fontcolor')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.fontcolor")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/fontsize/index.html b/files/ja/web/javascript/reference/global_objects/string/fontsize/index.html new file mode 100644 index 0000000000..244c332279 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/fontsize/index.html @@ -0,0 +1,85 @@ +--- +title: String.prototype.fontsize() +slug: Web/JavaScript/Reference/Global_Objects/String/fontsize +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/fontsize +--- +
{{JSRef}} {{deprecated_header}}
+ +

fontsize() メ゜ッドは、文字列を指定された倧きさで衚瀺させる HTML の {{HTMLElement("font")}} 芁玠を生成したす。

+ +
+

䜿甚䞊の泚意: <font> 芁玠は HTML5 で廃止されおおり、今埌䜿甚するべきではありたせん。代わりにりェブ開発者は CSS プロパティを䜿甚しおください。

+
+ +

構文

+ +
str.fontsize(size)
+ +

匕数

+ +
+
size
+
1  7 の敎数、 1  7 の笊号付き敎数を衚す文字列です。
+
+ +

返倀

+ +

HTML の {{HTMLElement("font")}} 芁玠を含む文字列です。

+ +

解説

+ +

倧きさを敎数で指定した堎合は、 str のフォントの倧きさを7぀の定矩枈みの倧きさで蚭定したす。 size を "-2" のような文字列で指定するず、 str のフォントの倧きさを {{HTMLElement("basefont")}} 芁玠からの盞察的な倧きさを蚭定したす。

+ +

䟋

+ +

fontsize() の䜿甚

+ +

以䞋の䟋では文字列のメ゜ッドを䜿甚しお、文字列の倧きさを倉曎しおいたす。

+ +
var worldString = 'Hello, world';
+
+console.log(worldString.small());     // <small>Hello, world</small>
+console.log(worldString.big());       // <big>Hello, world</big>
+console.log(worldString.fontsize(7)); // <font size="7">Hello, world</fontsize>
+
+ +

{{domxref("ElementCSSInlineStyle/style", "element.style")}} オブゞェクトを䜿甚するず、芁玠の style 属性を䜿甚しお、次のようにもっず汎甚的に操䜜するこずができたす。

+ +
document.getElementById('yourElemId').style.fontSize = '0.7em';
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.fontsize', 'String.prototype.fontsize')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.fontsize")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/fromcharcode/index.html b/files/ja/web/javascript/reference/global_objects/string/fromcharcode/index.html new file mode 100644 index 0000000000..82829c8cd7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/fromcharcode/index.html @@ -0,0 +1,98 @@ +--- +title: String.fromCharCode() +slug: Web/JavaScript/Reference/Global_Objects/String/fromCharCode +tags: + - JavaScript + - Method + - Reference + - String + - UTF-16 + - Unicode +translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCharCode +--- +
{{JSRef}}
+ +

String.fromCharCode() 静的メ゜ッドは、指定された UTF-16 コヌドナニットの䞊びから生成された文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-fromcharcode.html","shorter")}}
+ + + +

構文

+ +
String.fromCharCode(num1[, ...[, numN]])
+ +

匕数

+ +
+
num1, ..., numN
+
UTF-16 コヌドナニットを衚す数倀の䞊びです。範囲は 0 から 65535 (0xFFFF) たでです。数倀が 0xFFFF を超えた堎合は切り捚おられたす。劥圓性チェックは行われたせん。
+
+ +

返倀

+ +

指定された N 個の UTF-16 コヌドナニットから生成された、長さ N の文字列です。

+ +

解説

+ +

このメ゜ッドは {{jsxref("String")}} オブゞェクトではなく文字列を返したす。

+ +

fromCharCode() は {{jsxref("String")}} の静的メ゜ッドなので、自分で生成した {{jsxref("String")}} オブゞェクトのメ゜ッドではなく、垞に、 String.fromCharCode() ずしお䜿甚するようにしおください。

+ +

補助文字の返华

+ +

UTF-16 では、もっずも䞀般的な文字は単䞀の 16 ビット倀 (すなわちコヌドナニット) で衚珟するこずができたす。しかし、この皮の文字は、基本倚蚀語面 (BMP) ず呌ばれおいたすが、党䜓で指すこずができる Unicode コヌドポむントの 1/17 でしかありたせん。残りのコヌドポむント、 65536 (0x010000) から 1114111 (0x10FFFF) たでは、補助文字ず呌ばれおいたす。 UTF-16 では、補助文字はサロゲヌトず呌ばれる 2 ぀の 16 ビットコヌドナニットで衚珟され、この目的のために予玄されおいたした。2぀のサロゲヌトの劥圓な組み合わせを䜿甚しお、サロゲヌトペアず呌ばれる補助文字を衚珟したす。

+ +

fromCharCode() は 16 ビット倀のみで動䜜するため (\u ゚スケヌプシヌケンスず同様)、補助文字を返すためにはサロゲヌトペアが必芁です。䟋えば、 String.fromCharCode(0xD83C, 0xDF03) ず \uD83C\uDF03 はコヌドポむント U+1F303 "Night with Stars" です。

+ +

補助コヌドポむントの倀 (䟋: 0x1F303) ずそれを衚す䞡方のサロゲヌト倀 (䟋: 0xD83C や 0xDF03) ずの間には数孊的な関係がありたすが、補助コヌドポむントを䜿甚するたびにサロゲヌトペアの倀を蚈算したり参照したりする、䜙分なステップが必芁になりたす。このため、実際のコヌドポむント倀に基づいお補助文字を返すこずができる {{jsxref("String.fromCodePoint()")}} (ES2015 暙準の䞀郚) を䜿甚した方が䟿利です。䟋えば、 String.fromCodePoint(0x1F303) はコヌドポむント U+1F303 "Night with Stars" を返したす。

+ +

䟋

+ +

fromCharCode() の䜿甚

+ +

BMP 文字は、 UTF-16 では単䞀のコヌドナニットを䜿甚したす。

+ +
String.fromCharCode(65, 66, 67);   // returns "ABC"
+String.fromCharCode(0x2014);       // returns "—"
+String.fromCharCode(0x12014);      // also returns "—"; the digit 1 is truncated and ignored
+String.fromCharCode(8212);         // also returns "—"; 8212 is the decimal form of 0x2014
+
+ +

補助文字は、 UTF-16 では、 2 ぀のコヌドナニット (すなわちサロゲヌトペア) を必芁ずしたす。

+ +
String.fromCharCode(0xD83C, 0xDF03); // Code Point U+1F303 "Night with
+String.fromCharCode(55356, 57091);   // Stars" == "\uD83C\uDF03"
+
+String.fromCharCode(0xD834, 0xDF06, 0x61, 0xD834, 0xDF07); // "\uD834\uDF06a\uD834\uDF07"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.fromcharcode', 'String.fromCharCode')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.fromCharCode")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/fromcodepoint/index.html b/files/ja/web/javascript/reference/global_objects/string/fromcodepoint/index.html new file mode 100644 index 0000000000..c8bcbf6ae3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/fromcodepoint/index.html @@ -0,0 +1,149 @@ +--- +title: String.fromCodePoint() +slug: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint +--- +
{{JSRef}}
+ +

String.fromCodePoint() 静的メ゜ッドは指定されたコヌドポむントのシヌケンスを䜿っお生成された文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-fromcodepoint.html")}}
+ + + +

構文

+ +
String.fromCodePoint(num1[, ...[, numN]])
+ +

匕数

+ +
+
num1, ..., numN
+
コヌドポむントのシヌケンスです。
+
+ +

戻り倀

+ +

指定されたコヌドポむントのシヌケンスを䜿っお生成された文字列です。

+ +

䟋倖

+ + + +

説明

+ +

このメ゜ッドは {{jsxref("String")}} オブゞェクトではなく文字列を返したす。

+ +

fromCodePoint() メ゜ッドは {{jsxref("String")}} の静的なメ゜ッドなので、自ら生成した {{jsxref("String")}} オブゞェクトのメ゜ッドずしおではなく、垞に String.fromCodePoint() ずしお䜿甚しおください。

+ +

䟋

+ +

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
+
+ +
// String.fromCharCode() alone cannot get the character at such a high code point
+// The following, on the other hand, can return a 4-byte character as well as the
+// usual 2-byte ones (i.e., it can return a single character which actually has
+// a string length of 2 instead of 1!)
+console.log(String.fromCodePoint(0x2F804)); // or 194564 in decimal
+
+ +

ポリフィル

+ +

String.fromCodePoint メ゜ッドは ECMAScript 2015 で远加されたした。ただすべおの Web ブラりザヌや環境でサポヌトされおいないかもしれたせん。互換性のために次のコヌドを䜿甚しおください。

+ +
if (!String.fromCodePoint) (function(stringFromCharCode) {
+    var fromCodePoint = function(_) {
+      var codeUnits = [], codeLen = 0, result = "";
+      for (var index=0, len = arguments.length; index !== len; ++index) {
+        var codePoint = +arguments[index];
+        // correctly handles all cases including `NaN`, `-Infinity`, `+Infinity`
+        // The surrounding `!(...)` is required to correctly handle `NaN` cases
+        // The (codePoint>>>0) === codePoint clause handles decimals and negatives
+        if (!(codePoint < 0x10FFFF && (codePoint>>>0) === codePoint))
+          throw RangeError("Invalid code point: " + codePoint);
+        if (codePoint <= 0xFFFF) { // BMP code point
+          codeLen = codeUnits.push(codePoint);
+        } else { // Astral code point; split in surrogate halves
+          // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+          codePoint -= 0x10000;
+          codeLen = codeUnits.push(
+            (codePoint >> 10) + 0xD800,  // highSurrogate
+            (codePoint % 0x400) + 0xDC00 // lowSurrogate
+          );
+        }
+        if (codeLen >= 0x3fff) {
+          result += stringFromCharCode.apply(null, codeUnits);
+          codeUnits.length = 0;
+        }
+      }
+      return result + stringFromCharCode.apply(null, codeUnits);
+    };
+    try { // IE 8 only supports `Object.defineProperty` on DOM elements
+      Object.defineProperty(String, "fromCodePoint", {
+        "value": fromCodePoint, "configurable": true, "writable": true
+      });
+    } catch(e) {
+      String.fromCodePoint = fromCodePoint;
+    }
+}(String.fromCharCode));
+
+ +

仕様

+ + + + + + + + + + + + + + + + + + + +
仕様状況コメント
{{SpecName('ES2015', '#sec-string.fromcodepoint', 'String.fromCodePoint')}}{{Spec2('ES2015')}}初期定矩
{{SpecName('ESDraft', '#sec-string.fromcodepoint', 'String.fromCodePoint')}}{{Spec2('ESDraft')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.String.fromCodePoint")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/includes/index.html b/files/ja/web/javascript/reference/global_objects/string/includes/index.html new file mode 100644 index 0000000000..c705c8f454 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/includes/index.html @@ -0,0 +1,123 @@ +--- +title: String.prototype.includes() +slug: Web/JavaScript/Reference/Global_Objects/String/includes +tags: + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/includes +--- +
{{JSRef}}
+ +

includes() メ゜ッドは、1 ぀の文字列を別の文字列の䞭に芋出すこずができるかどうかを刀断し、必芁に応じお true か false を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-includes.html", "shorter")}}
+ + + +

構文

+ +
str.includes(searchString[, position])
+ +

匕数

+ +
+
searchString
+
str 内で怜玢される文字列。
+
position {{optional_inline}}
+
文字列内で searchString を怜玢し始める䜍眮。既定倀は 0 です。
+
+ +

返倀

+ +

文字列が怜玢倀を含む堎合、true。含たなければ、false。

+ +

解説

+ +

このメ゜ッドによっおある文字列内に別の文字列を含んでいるかどうか刀断できたす。

+ +

倧文字・小文字の区別

+ +

includes() メ゜ッドは倧文字ず小文字が区別したす。䟋えば、次のコヌドでは false を返したす:

+ +
'Blue Whale'.includes('blue')  // returns false
+
+ +

䟋

+ +

includes()を䜿う

+ +
const str = 'To be, or not to be, that is the question.'
+
+console.log(str.includes('To be'))        // true
+console.log(str.includes('question'))     // true
+console.log(str.includes('nonexistent'))  // false
+console.log(str.includes('To be', 1))     // false
+console.log(str.includes('TO BE'))        // false
+console.log(str.includes(''))             // true
+
+ +

ポリフィル

+ +

このメ゜ッドは ECMAScript 2015 で远加されたした。ただ、すべおの JavaScript の実装で利甚できるずは限りたせん。

+ +

しかしながら、このメ゜ッドを簡単に゚ミュレヌトできたす。

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.includes', 'String.prototype.includes')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.includes")}}

+ +

String.prototype.contains

+ +

Firefox 18–39 では、このメ゜ッドの名称は contains() でした。以䞋の理由により、 bug 1102219 で includes() に名称が倉曎されたした。

+ +

報告されたずころによるず、 MooTools 1.2 を䜿甚したいく぀かのりェブサむトが Firefox 17 で壊れたした。この版の MooTools は、 String.prototype.contains() が存圚するかどうか調べ、存圚しない堎合は MooTools が独自の関数を远加するようになっおいたす。

+ +

この関数が Firefox 17 で導入されたこずで、このチェックの動䜜が倉わり、 MooTools の String.prototype.contains() の実装に基づくコヌドが壊れるこずになりたした。結果的に、 Firefox 17 では実装が無効化され、 String.prototype.contains() が利甚できるようになったのは䞀぀埌のバヌゞョンである Firefox 18 で、 MooTools ぞの働きかけによっお MooTools バヌゞョン 1.2.6 がリリヌスされおからでした。

+ +

MooTools 1.3 では String.prototype.contains() を匷制的に自分自身のものに匷制したため、これに䟝存するりェブサむトは壊れたせん。しかし、このメ゜ッドに察する MooTools 1.3 のシグニチャ ず ECMAScript 2015 のシグニチャでは (第 2 匕数に) 違いがあるこずに泚意しお䞋さい。埌に、 MooTools 1.5 以降で ES2015 仕様に䞀臎させるためにシグニチャを倉曎したした。

+ +

Firefox 48 で、String.prototype.contains() は削陀されたした。 String.prototype.includes() だけを䜿甚しおください。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/index.html b/files/ja/web/javascript/reference/global_objects/string/index.html new file mode 100644 index 0000000000..d9932e4302 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/index.html @@ -0,0 +1,384 @@ +--- +title: String +slug: Web/JavaScript/Reference/Global_Objects/String +tags: + - Class + - ECMAScript 2015 + - JavaScript + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String +--- +
{{JSRef}}
+ +

String オブゞェクトは文字の䞊びを衚したり操䜜したりするために䜿甚されたす。

+ +

解説

+ +

文字列は、テキスト圢匏で衚珟可胜なデヌタを保持するのに䟿利です。最もよく䜿われる操䜜ずしお、文字列の長さをチェックする {{jsxref("String.length", "length")}} プロパティ、 文字列に察する + および += 挔算子を甚いた文字列の連結、文字列の䞭の郚分文字列の存圚や䜍眮をチェックする {{jsxref("String.prototype.indexOf()", "indexOf()")}} メ゜ッド、郚分文字列を取り出す {{jsxref("String.prototype.substring()", "substring()")}} メ゜ッドが挙げられたす。

+ +

文字列の生成

+ +

文字列は文字列リテラルからプリミティブずしお、たたは {{jsxref("String/String", "String()")}} コンストラクタヌを䜿甚しお文字列ずしお生成するこずができたす。

+ +
const string1 = "文字列プリミティブ";
+const string2 = 'これも文字列プリミティブ';
+const string3 = `別な文字列プリミティブ`;
+ +
const string4 = new String("文字列オブゞェクト");
+
+ +

文字列プリミティブず文字列オブゞェクトは、ほずんどの堎合は亀換しお䜿甚するこずができたす。䞋蚘の「文字列プリミティブず String オブゞェクト」を参照しおください。

+ +

文字列リテラルは単䞀匕甚笊たたは二重匕甚笊を䜿甚しお指定するこずができ、どちらでも同様に扱われたすが、逆匕甚笊文字 ` を䜿甚するこずもできたす。最埌の圢はテンプレヌトリテラルを指定し、この圢匏では匏を補完するこずができたす。

+ +

文字ぞのアクセス

+ +

文字列内の個々の文字ぞのアクセス方法には、二通りの方法がありたす。そのひず぀は {{jsxref("String.prototype.charAt()", "charAt()")}} メ゜ッドです。

+ +
return 'ねこ'.charAt(1)  // "こ" が返される
+
+ +

そしおもうひず぀は、文字列を配列のようなオブゞェクトずしお扱い、数倀の添字を甚いる方法です。 (ECMAScript 5 で導入)

+ +
return 'ねこ'[1]  // "こ" が返される。
+
+ +

ブラケット蚘法を䜿甚した文字アクセスでは、これらのプロパティに倀を蚭定したり削陀したりするこずはできたせん。関連したプロパティを曞き蟌んだり蚭定したりするこずもできたせん。 (より詳现な情報は {{jsxref("Object.defineProperty()")}} を参照しおください。)

+ +

文字列の比范

+ +

C 蚀語では 文字列の比范の為に strcmp() 関数を甚いたす。 JavaScript では単玔に 小なり / 倧なり挔算子を甚いたす。

+ +
let a = 'a'
+let b = 'b'
+if (a < b) { // true
+  console.log(a + ' は ' + b + ' より小さい')
+} else if (a > b) {
+  console.log(a + ' は ' + b + ' より倧きい')
+} else {
+  console.log(a + ' ず ' + b + ' は等しい')
+}
+
+ +

String むンスタンスから継承される {{jsxref("String.prototype.localeCompare()", "localeCompare()")}} メ゜ッドを䜿甚しお同等の結果を埗るこずもできたす。

+ +

なお、 a == b は a ず b の文字列が等しいかどうかを、通垞の倧文字小文字を区別しお比范したす。倧文字小文字に関係なく比范したい堎合は、次のように関数を䜿甚しおください。

+ +
function isEqual(str1, str2)
+{
+    return str1.toUpperCase() === str2.toUpperCase()
+} // isEqual
+
+ +

この関数では、特定の UTF-8 文字の倉換に問題があるため、小文字の代わりに倧文字を䜿甚したす。

+ +

文字列プリミティブず String オブゞェクト

+ +

JavaScript では、 String オブゞェクトず{{Glossary("Primitive", "プリミティブ文字列")}}は区別されるこずに泚意しおください。 ({{jsxref("Boolean")}} や {{jsxref("Global_Objects/Number", "Number")}} にも同じこずが蚀えたす。)

+ +

文字列リテラル (二重匕甚笊たたは単䞀匕甚笊で瀺されたす)、および String 関数をコンストラクタヌ以倖の堎面で (すなわち {{jsxref("Operators/new", "new")}} キヌワヌドを䜿わずに) 呌び出した堎合はプリミティブの文字列になりたす。 JavaScript では、必芁に応じおプリミティブの文字列が自動的に String オブゞェクトに倉換されるので、プリミティブの文字列に察しお String オブゞェクトのメ゜ッドを䜿甚するこずができたす。プリミティブの文字列に察しお、メ゜ッドの呌び出しやプロパティの参照が行われようずした堎合、 JavaScript は自動的にプリミティブの文字列をオブゞェクトでラップし、メ゜ッドを呌び出したりプロパティの参照を行ったりしたす。

+ +
let s_prim = 'foo'
+let s_obj = new String(s_prim)
+
+console.log(typeof s_prim) // Logs "string"
+console.log(typeof s_obj)  // Logs "object"
+
+ +

プリミティブの文字列ず String オブゞェクトは {{jsxref("Global_Objects/eval", "eval()")}} を䜿甚するず異なる結果ずなりたす。 eval に枡されたプリミティブは、゜ヌスコヌドずしお扱われたす。 String オブゞェクトは他のオブゞェクトず同様に、オブゞェクトずしおそのたたの文字列を返したす。

+ +
let s1 = '2 + 2'              // 文字列プリミティブを生成
+var s2 = new String('2 + 2')  // String オブゞェクトを生成
+console.log(eval(s1))         // 数倀の 4 を返す
+console.log(eval(s2))         // 文字列の "2 + 2" を返す
+
+ +

こういった理由から、プリミティブの文字列を期埅しお実装されたコヌドは String オブゞェクトでうたく動䜜しないこずがありたす。しかし、䞀般的にはこれらの違いを考慮しなければならないこずはあたりありたせん。

+ +

なお、 String オブゞェクトは {{jsxref("String.prototype.valueOf()", "valueOf()")}} メ゜ッドを甚いるこずで、プリミティブの文字列に倉換するこずができたす。

+ +
console.log(eval(s2.valueOf()))  // 数倀の 4 を返す
+
+ +

゚スケヌプ衚蚘

+ +

通垞の文字列ずは異なる特殊な文字を衚瀺するためには、゚スケヌプ衚蚘を䜿甚したす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
コヌド出力
\XXX
+ (XXX = 13桁の8進数、 0377 の範囲)
ISO-8859-1 の文字たたは U+0000 から U+00FF の間の Unicode コヌドポむントです。
\'単䞀匕甚笊
\"二重匕甚笊
\\バックスラッシュ (\文字)
\n改行
\r埩垰
\v垂盎タブ
\t氎平タブ
\bバックスペヌス
\fペヌゞ送り
\uXXXX (XXXX = 4桁の16進数、 0x00000xFFFF の範囲)UTF-16 のコヌド単䜍 / U+0000 から U+FFFF の間の Unicode コヌドポむント
\u{X} ... \u{XXXXXX}
+ (X
XXXXXX = 16桁の16進数、 0x0–0x10FFFF の範囲)
UTF-32 のコヌド単䜍 / U+0000 から U+10FFFF の間の Unicode コヌドポむント
\xXX
+ (XX = 2桁の16進数、 0x000xFF の範囲)
ISO-8859-1 の文字 / U+0000 から U+00FF の間の Unicode コヌドポむント
+ +

長い文字列リテラル

+ +

時には、コヌドに非垞に長い文字列が含たれる堎合がありたす。行を延々ず長くしたり、゚ディタヌに任せお折り返したりするよりも、実際の文字列の内容に圱響を䞎えずに文字列を゜ヌスコヌド内で耇数行に分割したいこずがありたす。これを行うには2぀の方法がありたす。

+ +

方法 1

+ +

+ 挔算子を䜿甚しお、次のように耇数の文字列を远加するこずができたす。

+ +
let longString = "This is a very long string which needs " +
+                 "to wrap across multiple lines because " +
+                 "otherwise my code is unreadable."
+
+ +

方法 2

+ +

各行の末尟にバックスラッシュ文字 (\) を䜿甚しお、文字列が次の行に続くこずを瀺すこずができたす。バックスラッシュの埌に、 (改行を陀いお) 空癜やその他の文字を眮いたり、むンデントを眮いたりしおいないか確認しおください。さもないず動䜜したせん。

+ +

この圢匏は以䞋のようになりたす。

+ +
let longString = "This is a very long string which needs \
+to wrap across multiple lines because \
+otherwise my code is unreadable."
+
+ +

これらの結果はずもに同じ文字列が生成されたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("String/String", "String()")}}
+
新しい String オブゞェクトを生成するために䜿甚したす。コンストラクタヌではなく関数ずしお呌び出されたずきは型倉換を行うので、普通はより有甚です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("String.fromCharCode()", "String.fromCharCode(num1 [, ...[, numN]])")}}
+
指定された Unicode 倀の列から生成した文字列を返したす。
+
{{jsxref("String.fromCodePoint()", "String.fromCodePoint(num1 [, ...[, numN)")}}
+
指定された Unicode コヌドポむントの列から生成した文字列を返したす。
+
{{jsxref("String.raw()")}}
+
生のテンプレヌト文字列から生成した文字列を返したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("String.prototype.length")}}
+
文字列の length を反映したす。読み取り専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("String.prototype.charAt()", "String.prototype.charAt(index)")}}
+
index で指定された䜍眮の文字 (UTF-16 コヌド 1 ぀から成りたす) を返したす。
+
{{jsxref("String.prototype.charCodeAt()", "String.prototype.charCodeAt(index)")}}
+
index で䞎えられた䜍眮の文字の UTF-16 の倀を瀺す数を返したす。
+
{{jsxref("String.prototype.codePointAt()", "String.prototype.codePointAt(pos)")}}
+
pos で指定された䜍眮から始たる UTF-16 ゚ンコヌドされた際のコヌドポむントの、コヌドポむントの倀である正の敎数を返したす。
+
{{jsxref("String.prototype.concat()", "String.prototype.concat(str [, ...strN ])")}}
+
2 ぀ (以䞊) の文字列を連結し、新しい文字列を返したす。
+
{{jsxref("String.prototype.includes()", "String.prototype.includes(searchString [, position])")}}
+
文字列䞭に searchString が含たれおいるかを返したす。
+
{{jsxref("String.prototype.endsWith()", "String.prototype.endsWith(searchString [, length])")}}
+
文字列の末尟に指定された文字列 searchString が含たれおいるかを返したす。
+
{{jsxref("String.prototype.indexOf()", "String.prototype.indexOf(searchValue [, fromIndex])")}}
+
呌び出す {{jsxref("String")}} オブゞェクト䞭で、 searchValue が最初に珟れる䜍眮を返したす。芋぀からなかった堎合は -1 を返したす。
+
{{jsxref("String.prototype.lastIndexOf()", "String.prototype.lastIndexOf(searchValue [, fromIndex])")}}
+
呌び出す {{jsxref("String")}} オブゞェクト䞭で、 searchValue が最埌に珟れる䜍眮を返したす。芋぀からない堎合は -1 を返したす。
+
{{jsxref("String.prototype.localeCompare()", "String.prototype.localeCompare(compareString [, locales [, options]])")}}
+
参照文字列 compareString が、䞊べ替え順においお、䞎えられた文字列の前になるか埌になるか、あるいは、同じかどうかを瀺す数倀を返したす。
+
{{jsxref("String.prototype.match()", "String.prototype.match(regexp)")}}
+
文字列に察しお正芏衚珟 regexp を䞀臎させるために䜿甚されたす。
+
{{jsxref("String.prototype.matchAll()", "String.prototype.matchAll(regexp)")}}
+
regexp が䞀臎するものすべおのむテレヌタヌを返したす。
+
{{jsxref("String.prototype.normalize()", "String.prototype.normalize([form])")}}
+
呌び出された文字列の倀の Unicode 正芏化圢匏を返したす。
+
{{jsxref("String.prototype.padEnd()", "String.prototype.padEnd(targetLength [, padString])")}}
+
珟圚の文字列の末尟から指定された文字列で埋めた、長さ targetLength 文字の新たな文字列を返したす。
+
{{jsxref("String.prototype.padStart()", "String.prototype.padStart(targetLength [, padString])")}}
+
珟圚の文字列の先頭から指定した文字列で埋めた、長さ targetLength 文字の新たな文字列を䜜成したす。
+
{{jsxref("String.prototype.repeat()", "String.prototype.repeat(count)")}}
+
オブゞェクトの芁玠を count 回繰り返した文字列を返したす。
+
{{jsxref("String.prototype.replace()" , "String.prototype.replace(searchFor, replaceWith)")}}
+
searchFor が珟れたずころを replaceWith で眮換するために䜿甚したす。 searchFor は文字列たたは正芏衚珟であり、 replaceWith は文字列たたは関数です。
+
{{jsxref("String.prototype.replaceAll()" , "String.prototype.replaceAll(searchFor, replaceWith)")}}
+
searchFor が珟れたずころすべおを replaceWith で眮換するために䜿甚したす。 searchFor は文字列たたは正芏衚珟であり、 replaceWith は文字列たたは関数です。
+
{{jsxref("String.prototype.search()", "String.prototype.search(regexp)")}}
+
正芏衚珟 regexp ず呌び出された文字列が䞀臎するずころを怜玢したす。
+
{{jsxref("String.prototype.slice()", "String.prototype.slice(beginIndex[, endIndex])")}}
+
文字列の䞀区間を取り出し、新しい文字列を返したす。
+
{{jsxref("String.prototype.split()", "String.prototype.split([sep [, limit] ])")}}
+
呌び出した文字列を、郚分文字列 sep が珟れるずころで分割し、文字列の配列を生成しお返したす。
+
{{jsxref("String.prototype.startsWith()", "String.prototype.startsWith(searchString [, length])")}}
+
呌び出した文字列が文字列 searchString で開始されおいるかを刀断したす。
+
{{jsxref("String.prototype.substr()")}}
+
文字列においお、指定された䜍眮から指定された文字数の文字を返したす。
+
{{jsxref("String.prototype.substring()", "String.prototype.substring(indexStart [, indexEnd])")}}
+
呌び出した文字列の指定された䜍眮以降 (たたは区間) にある文字が入った新しい文字列を返したす。
+
{{jsxref("String.prototype.toLocaleLowerCase()", "String.prototype.toLocaleLowerCase( [locale, ...locales])")}}
+
+

文字列内の文字が、珟圚のロケヌルに沿っお小文字に倉換されたす。

+ +

ほずんどの蚀語では、これは {{jsxref("String.prototype.toLowerCase()", "toLowerCase()")}} ず同じものを返したす。

+
+
{{jsxref("String.prototype.toLocaleUpperCase()", "String.prototype.toLocaleUpperCase( [locale, ...locales])")}}
+
+

文字列内の文字が、珟圚のロケヌルに沿っお倧文字に倉換されたす。

+ +

ほずんどの蚀語では、これは {{jsxref("String.prototype.toUpperCase()", "toUpperCase()")}} ず同じものを返したす。

+
+
{{jsxref("String.prototype.toLowerCase()")}}
+
小文字に倉換された文字列の倀を呌び出しお返したす。
+
{{jsxref("String.prototype.toString()")}}
+
指定されたオブゞェクトの文字列を返したす。{{jsxref("Object.prototype.toString()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("String.prototype.toUpperCase()")}}
+
倧文字に倉換された文字列の倀を呌び出しお返したす。
+
{{jsxref("String.prototype.trim()")}}
+
文字列の先頭ず末尟にある空癜を削陀したす。 ECMAScript 5 暙準の䞀郚です。
+
{{jsxref("String.prototype.trimStart()")}}
+
文字列の先頭にある空癜を削陀したす。
+
{{jsxref("String.prototype.trimEnd()")}}
+
文字列の末尟にある空癜を削陀したす。
+
{{jsxref("String.prototype.valueOf()")}}
+
指定されたオブゞェクトのプリミティブ倀を返したす。 {{jsxref("Object.prototype.valueOf()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("String.prototype.@@iterator()")}}
+
文字列倀のコヌドポむントを反埩凊理し、文字列倀ずしお各コヌドポむントを返す、新しい Iterator オブゞェクトを返したす。
+
+ +

HTML ラッパヌメ゜ッド

+ +
+
+

非掚奚です。これらのメ゜ッドは避けおください。

+ +

以䞋のメ゜ッドは、それぞれ、特定の HTML タグでラップされた文字列のコピヌを返したす。

+
+ +
+
{{jsxref("String.prototype.anchor()")}}
+
{{htmlattrxref("name", "a", "<a name=\"name\">")}} (ハむパヌテキストのタヌゲット)
+
{{jsxref("String.prototype.big()")}}
+
{{HTMLElement("big")}}
+
{{jsxref("String.prototype.blink()")}}
+
{{HTMLElement("blink")}}
+
{{jsxref("String.prototype.bold()")}}
+
{{HTMLElement("b")}}
+
{{jsxref("String.prototype.fixed()")}}
+
{{HTMLElement("tt")}}
+
{{jsxref("String.prototype.fontcolor()")}}
+
{{htmlattrxref("color", "font", "<font color=\"color\">")}}
+
{{jsxref("String.prototype.fontsize()")}}
+
{{htmlattrxref("size", "font", "<font size=\"size\">")}}
+
{{jsxref("String.prototype.italics()")}}
+
{{HTMLElement("i")}}
+
{{jsxref("String.prototype.link()")}}
+
{{htmlattrxref("href", "a", "<a href=\"url\">")}} (URL ぞのリンク)
+
{{jsxref("String.prototype.small()")}}
+
{{HTMLElement("small")}}
+
{{jsxref("String.prototype.strike()")}}
+
{{HTMLElement("strike")}}
+
{{jsxref("String.prototype.sub()")}}
+
{{HTMLElement("sub")}}
+
{{jsxref("String.prototype.sup()")}}
+
{{HTMLElement("sup")}}
+
+
+ +

䟋

+ +

文字列倉換

+ +

String を䜿甚するず、 {{jsxref("String.prototype.toString()", "toString()")}} よりも信頌性の高い代替手段ずなり、 {{jsxref("null")}}, {{jsxref("undefined")}}, {{jsxref("Symbol", "symbols")}} に察しお䜿甚するこずもできたす。

+ +
let outputStrings = []
+for (let i = 0, n = inputValues.length; i < n; ++i) {
+  outputStrings.push(String(inputValues[i]));
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string-objects', 'String')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/indexof/index.html b/files/ja/web/javascript/reference/global_objects/string/indexof/index.html new file mode 100644 index 0000000000..a2db982f65 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/indexof/index.html @@ -0,0 +1,169 @@ +--- +title: String.prototype.indexOf() +slug: Web/JavaScript/Reference/Global_Objects/String/indexOf +tags: + - JavaScript + - Method + - Prototype + - Reference + - String + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/String/indexOf +--- +
{{JSRef}}
+ +

indexOf() メ゜ッドは、呌び出す {{jsxref("String")}} オブゞェクト䞭で、 fromIndex から怜玢を始め、指定された倀が最初に珟れたむンデックスを返したす。倀が芋぀からない堎合は -1 を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-indexof.html")}}
+ + + +
メモ: 配列メ゜ッドに぀いおは {{jsxref("Array.prototype.indexOf()")}} を参照しおください。
+ +

構文

+ +
str.indexOf(searchValue [, fromIndex])
+
+ +

匕数

+ +
+
searchValue
+
+

怜玢する倀を衚す文字列です。

+ +

文字列が明瀺的に提䟛されなかった堎合は、 searchValue は "undefined" ずなり、この倀が str の䞭から怜玢されたす。

+ +

ですから、䟋えば 'undefined'.indexOf() は undefined が undefined ずいう文字列の䞭の 0 の䜍眮に芋぀かるため、 0 を返したす。しかし、 'undefine'.indexOf() は undefined が undefine ずいう文字列の䞭で芋぀からないため、 -1 を返したす。

+
+
fromIndex {{optional_inline}}
+
+

敎数倀で、怜玢を始める䜍眮を衚したす。既定倀は 0 です。

+ +

fromIndex の倀が 0 より小さい堎合や str.length より倧きい堎合は、それぞれ 0 の䜍眮、 str.length の䜍眮から怜玢を始めたす。

+ +

䟋えば、 'hello world'.indexOf('o', -5) は、 0 の䜍眮から怜玢を始め、 o が 4 の䜍眮にあるので 4 を返したす。䞀方、 'hello world'.indexOf('o', 11) (および fromIndex の倀が 11 よりも倧きな堎合) は、 11 が文字列の末尟よりも埌の䜍眮であるため、 -1 を返したす。

+
+
+ +

返倀

+ +

searchValue が初めお出珟した䜍眮です。芋぀からなかった堎合は、 -1 になりたす。

+ +

searchValue が空文字列であった堎合は奇劙な結果になりたす。 fromIndex の倀がなかった堎合や、 fromIndex の倀が文字列の length よりも小さかった堎合は、返倀は fromIndex ず同じになりたす。

+ +
'hello world'.indexOf('') // 0 を返す
+'hello world'.indexOf('', 0) // 0 を返す
+'hello world'.indexOf('', 3) // 3 を返す
+'hello world'.indexOf('', 8) // 8 を返す
+ +

しかし、 fromIndex の倀が文字列の length 以䞊であった堎合、返倀は文字列の length になりたす。

+ +
'hello world'.indexOf('', 11) // 11 を返す
+'hello world'.indexOf('', 13) // 11 を返す
+'hello world'.indexOf('', 22) // 11 を返す
+ +

前者の䟋では、 JS は指定された䜍眮の盎埌に空文字列を芋぀けおいるようです。埌者の䟋では、 JS は怜玢される文字列の末尟で空文字列を芋぀けおいるようです。

+ +

解説

+ +

文字列における文字は巊から右にむンデックス化されたす。䞀番最初の文字の䜍眮は 0 で、 stringName ずしお呌び出された文字列における䞀番最埌の文字は stringName.length - 1 です。

+ +
'Blue Whale'.indexOf('Blue')      // 0 を返したす
+'Blue Whale'.indexOf('Blute')     // -1 を返したす
+'Blue Whale'.indexOf('Whale', 0)  // 5 を返したす
+'Blue Whale'.indexOf('Whale', 5)  // 5 を返したす
+'Blue Whale'.indexOf('Whale', 7)  // -1 を返したす
+'Blue Whale'.indexOf('')          // 0 を返したす
+'Blue Whale'.indexOf('', 9)       // 9 を返したす
+'Blue Whale'.indexOf('', 10)      // 10 を返したす
+'Blue Whale'.indexOf('', 11)      // 10 を返したす
+
+ +

indexOf() メ゜ッドは倧文字ず小文字を区別したす。䟋えば、以䞋の匏は -1 を返したす。

+ +
'Blue Whale'.indexOf('blue')  // -1 を返したす
+
+ +

出珟のチェック

+ +

0 は true ず評䟡されず、 -1 は false ず評䟡されないこずに泚意しおください。そのため、特定の文字列がほかの文字列に含たれおいるかをチェックする正確な方法は次のようになりたす。

+ +
'Blue Whale'.indexOf('Blue') !== -1  // true
+'Blue Whale'.indexOf('Bloe') !== -1  // false
+~('Blue Whale'.indexOf('Bloe')) // 0, which is falsy
+
+ +

䟋

+ +

indexOf() を䜿う

+ +

以䞋の䟋は、"Brave new world" ずいう文字列においお、䞎えられた倀の䜍眮を求めるために、indexOf() を䜿甚しおいたす。

+ +
const str = 'Brave new world'
+
+console.log('Index of first w from start is ' + str.indexOf('w'))   // 8 を衚瀺
+console.log('Index of "new" from start is ' + str.indexOf('new'))   // 6 を衚瀺
+
+ +

indexOf() ず 倧文字ず小文字の区別

+ +

以䞋の䟋は 2 ぀の文字列の倉数を定矩しおいたす。

+ +

それらの倉数は、2 番目の文字列が倧文字を含んでいるこずを陀けば、同じ文字列を含んでいたす。1 番目の {{domxref("console.log()")}} メ゜ッドは 19 を衚瀺したす。しかし、 indexOf() メ゜ッドは倧文字ず小文字を区別するので、 "cheddar" ずいう文字列は myCapString では芋぀けられたせん。ですから、 console.log() メ゜ッドは -1 を衚瀺したす。

+ +
const myString    = 'brie, pepper jack, cheddar'
+const myCapString = 'Brie, Pepper Jack, Cheddar'
+
+console.log('myString.indexOf("cheddar") is ' + myString.indexOf('cheddar'))
+// 19 を衚瀺したす
+console.log('myCapString.indexOf("cheddar") is ' + myCapString.indexOf('cheddar'))
+// -1 を衚瀺したす
+
+ +

indexOf() を䜿っお文字列䞭である文字が珟れる回数を数える

+ +

以䞋の䟋は、 count に、 str ずいう文字列䞭で e ずいう文字が出珟する回数を蚭定したす。

+ +
const str = 'To be, or not to be, that is the question.'
+let count = 0
+let position = str.indexOf('e')
+
+while (position !== -1) {
+  count++
+  position = str.indexOf('e', position + 1)
+}
+
+console.log(count)  // 4 を衚瀺
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.indexof', 'String.prototype.indexOf')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.indexOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/italics/index.html b/files/ja/web/javascript/reference/global_objects/string/italics/index.html new file mode 100644 index 0000000000..41fb0f5202 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/italics/index.html @@ -0,0 +1,69 @@ +--- +title: String.prototype.italics() +slug: Web/JavaScript/Reference/Global_Objects/String/italics +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/italics +--- +
{{JSRef}} {{deprecated_header}}
+ +

italics() メ゜ッドは、文字列がむタリックになるように HTML の {{HTMLElement("i")}} 芁玠を生成したす。

+ +

構文

+ +
str.italics()
+ +

返倀

+ +

HTML の {{HTMLElement("i")}} 芁玠を含む文字列です。

+ +

解説

+ +

italics() メ゜ッドは、文字列を <i> 芁玠の䞭に、 "<i>str</i>" のように埋め蟌みたす。

+ +

䟋

+ +

italics() の䜿甚

+ +

以䞋の䟋では文字列のメ゜ッドを䜿甚しお、文字列を敎圢しおいたす。

+ +
var worldString = 'Hello, world';
+console.log(worldString.blink());  // <blink>Hello, world</blink>
+console.log(worldString.bold());  // <b>Hello, world</b>
+console.log(worldString.italics()); // <i>Hello, world</i>
+console.log(worldString.strike());  // <strike>Hello, world</strike>
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.italics', 'String.prototype.italics')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.italics")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/lastindexof/index.html b/files/ja/web/javascript/reference/global_objects/string/lastindexof/index.html new file mode 100644 index 0000000000..d9ae2f8260 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/lastindexof/index.html @@ -0,0 +1,110 @@ +--- +title: String.prototype.lastIndexOf() +slug: Web/JavaScript/Reference/Global_Objects/String/lastIndexOf +tags: + - JavaScript + - Method + - Prototype + - Reference + - String + - lastIndexOf +translation_of: Web/JavaScript/Reference/Global_Objects/String/lastIndexOf +--- +
{{JSRef}}
+ +

lastIndexOf() メ゜ッドは、呌び出した {{jsxref("String")}} オブゞェクトの䞭で、 fromIndex から前方向に怜玢を始め、指定された倀が最埌に珟れたむンデックスを返したす。倀が芋぀からない堎合は -1 を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-lastindexof.html", "shorter")}}
+ + + +

構文

+ +
str.lastIndexOf(searchValue[, fromIndex])
+ +

匕数

+ +
+
searchValue
+
怜玢する倀を衚す文字列です。 searchValue が空文字列であった堎合は、 fromIndex を返したす。 +
fromIndex {{optional_inline}}
+
比范の先頭ずみなされる文字列の最埌の文字の䜍眮です。既定倀は +Infinity です。 fromIndex >= str.length の堎合、文字列党䜓が怜玢されたす。 fromIndex < 0 の堎合は、 0 の堎合ず同じ動䜜になりたす。 +
+ +

返倀

+ +

searchValue が最埌に出珟した䜍眮です。芋぀からなかった堎合は、 -1 になりたす。

+ +

解説

+ +

文字列における文字は巊から右にむンデックス化されたす。䞀番最初の文字の䜍眮は 0 で、䞀番最埌の文字は str.length - 1 です。

+ +
'canal'.lastIndexOf('a');     // returns 3
+'canal'.lastIndexOf('a', 2);  // 1 を返す
+'canal'.lastIndexOf('a', 0);  // -1 を返す
+'canal'.lastIndexOf('x');     // -1 を返す
+'canal'.lastIndexOf('c', -5); // 0 を返す
+'canal'.lastIndexOf('c', 0);  // 0 を返す
+'canal'.lastIndexOf('');      // 5 を返す
+'canal'.lastIndexOf('', 2);   // 2 を返す
+
+ +
+

泚: 'abab'.lastIndexOf('ab', 2) は 2 を返し、 0 にはなりたせん。 fromIndex は怜玢の開始䜍眮を制玄するものだからです。

+
+ +

倧文字ず小文字の区別

+ +

lastIndexOf() メ゜ッドは倧文字ず小文字を区別したす。䟋えば、以䞋の匏は -1 を返したす。

+ +
'Blue Whale, Killer Whale'.lastIndexOf('blue'); // -1 を返す
+
+ +

䟋

+ +

indexOf() ず lastIndexOf() の䜿甚

+ +

以䞋の䟋は、 {{jsxref("String.prototype.indexOf()", "indexOf()")}} ず lastIndexOf() を䜿甚しお文字列 "Brave new world" の䞭の倀の䜍眮を瀺したす。

+ +
let anyString = 'Brave new world';
+
+console.log('先頭から芋お最初に w が出珟する䜍眮: ' + anyString.indexOf('w'));
+// 8 ず出力
+console.log('末尟から芋お最初に w が出珟する䜍眮: ' + anyString.lastIndexOf('w'));
+// 10 ず出力
+console.log('先頭から芋た "new" の䜍眮: ' + anyString.indexOf('new'));
+// 6 ず出力
+console.log('末尟から芋た "new" の䜍眮: ' + anyString.lastIndexOf('new'));
+// 6 ず出力
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.lastindexof', 'String.prototype.lastIndexOf')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.lastIndexOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/length/index.html b/files/ja/web/javascript/reference/global_objects/string/length/index.html new file mode 100644 index 0000000000..62c3016f34 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/length/index.html @@ -0,0 +1,103 @@ +--- +title: String length +slug: Web/JavaScript/Reference/Global_Objects/String/length +tags: + - JavaScript + - Property + - Prototype + - Reference + - String + - String Length + - length +translation_of: Web/JavaScript/Reference/Global_Objects/String/length +--- +
{{JSRef}}
+ +

length プロパティは {{jsxref("String")}} オブゞェクトの文字列長を UTF-16 コヌドナニットの数で衚したす。 length は、 string むンスタンスの読み取り専甚デヌタプロパティです。

+ +
{{EmbedInteractiveExample("pages/js/string-length.html", "shorter")}}
+ +

解説

+ +

このプロパティは、文字列内のコヌド単䜍の数を返したす。 JavaScript で䜿甚される文字列曞匏である {{interwiki("wikipedia", "UTF-16")}} は、ほずんどの䞀般の文字は単䞀の16ビットコヌドナニットで衚したすが、あたり䜿われない文字に察しおは2぀のコヌドナニットを䜿甚する必芁があり、 length で返される倀が文字列の実際の文字数ず䞀臎しなくなる可胜性がありたす。

+ +

ECMAScript 2016 (ed. 7) では最倧長が 2^53 - 1 芁玠ず制定されたした。それ以前は最倧長は定たっおいたせんでした。 Firefox 内にある文字列の最倧長は 2**30 - 2 (~1GB) です。Firefox 65 以前での最倧長は 2**28 - 1 (~256MB) でした。

+ +

空の文字列の堎合、length は 0 になりたす。

+ +

静的プロパティの String.length は文字列の長さずは関係なく、 String 関数のアリティ (ゆるく蚀えば、それが持぀圢匏的な匕数の数) であり、 1 です。

+ +

Unicode

+ +

`length` は文字数ではなくコヌドナニットの数を数えるため、文字数を知りたい堎合はこのようなこずをする必芁がありたす。

+ +
function getCharacterLength (str) {
+  // The string iterator that is used here iterates over characters,
+  //  not mere code units
+  return [...str].length;
+}
+
+console.log(getCharacterLength('A\uD87E\uDC04Z')); // 3
+
+// While not recommended, you could add this to each string as follows:
+
+Object.defineProperty(String.prototype, 'charLength', {
+  get () {
+    return getCharacterLength(this);
+  }
+});
+
+console.log('A\uD87E\uDC04Z'.charLength); // 3
+
+ +

䟋

+ +

基本的な䜿い方

+ +
let x = 'Mozilla';
+let empty = '';
+
+console.log(x + ' の文字数' + x.length + ' 文字(コヌド個数)' );
+/* "Mozilla の文字数7 文字(コヌド個数)" */
+
+console.log('空文字の文字数' + empty.length + ' 文字' );
+/* "空文字の文字数0 文字" */
+ +

length プロパティぞの代入

+ +
let myString = "bluebells";
+
+// Attempting to assign a value to a string's .length property has no observable effect.
+myString.length = 4;
+console.log(myString);
+// expected output: "bluebells"
+console.log(myString.length);
+// expected output: 9
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-properties-of-string-instances-length')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.length")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/link/index.html b/files/ja/web/javascript/reference/global_objects/string/link/index.html new file mode 100644 index 0000000000..0401a2f8f6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/link/index.html @@ -0,0 +1,77 @@ +--- +title: String.prototype.link() +slug: Web/JavaScript/Reference/Global_Objects/String/link +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/link +--- +
{{JSRef}} {{deprecated_header}}
+ +

link() メ゜ッドは、他の URL ぞのハむパヌテキストリンクずしお䜿甚される HTML の {{HTMLElement("a")}} 芁玠を生成したす。

+ +

構文

+ +
str.link(url)
+ +

匕数

+ +
+
url
+
<a> 芁玠の href 属性を指定する任意の文字列です。これは劥圓な (盞察たたは絶察) URL を、すべおの & の文字を &amp; で゚スケヌプし、すべおの " の文字を &quot; で゚スケヌプしたものにしおください。
+
+ +

返倀

+ +

HTML の {{HTMLElement("a")}} 芁玠を含む文字列です。

+ +

解説

+ +

link() メ゜ッドを䜿甚するず、ハむパヌリンクを衚す HTML スニペットを生成するこずができたす。返倀の文字列はその埌、 {{domxref("document.write()")}} たたは {{domxref("element.innerHTML")}} を通しお文曞に远加するこずができたす。

+ +

link() メ゜ッドで生成したリンクは、 document オブゞェクトの links 配列の芁玠になりたす。 {{domxref("document.links")}} を参照しおください。

+ +

䟋

+ +

small() の䜿甚

+ +

以䞋の䟋では文字列のメ゜ッドを䜿甚しお、文字列の倧きさを倉曎しおいたす。

+ +
var hotText = 'MDN';
+var URL = 'https://developer.mozilla.org/';
+
+console.log('Click to return to ' + hotText.link(URL));
+// Click to return to <a href="https://developer.mozilla.org/">MDN</a>
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.link', 'String.prototype.link')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.link")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/localecompare/index.html b/files/ja/web/javascript/reference/global_objects/string/localecompare/index.html new file mode 100644 index 0000000000..58a9b5d692 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/localecompare/index.html @@ -0,0 +1,170 @@ +--- +title: String.prototype.localeCompare() +slug: Web/JavaScript/Reference/Global_Objects/String/localeCompare +tags: + - Internationalization + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare +--- +
{{JSRef("Global_Objects", "String")}}
+ +

localeCompare() メ゜ッドは参照文字列が゜ヌト順で匕数で䞎えられた文字列ず倧なり、小なり、等しいずなるかどうかを瀺す数倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-localecompare.html")}}
+ + + +

新しいlocales ず options 匕数によっおアプリケヌションは゜ヌト順で䜿われる蚀語を指定し関数の振る舞いをカスタマむズできたす。叀い実装では、locales匕数ずoptions匕数は無芖されたす。䜿甚されるロヌケルず゜ヌト順は完党に実装䟝存しおいたす。

+ +

構文

+ +
referenceStr.localeCompare(compareString[, locales[, options]])
+ +

匕数

+ +
+
compareString
+
+

referenceStr ず比范される文字列。

+
+
locales 、 options
+
+

これらの匕数は関数の振る舞いをカスタマむズし、䜿甚されるべきフォヌマット芏玄の蚀語をアプリケヌションに決めさせたす。匕数 locales 、 options を無芖する実装においおは、䜿甚されるロケヌルず返华される文字列の曞匏は完党に実装䟝存ずなりたす。

+ +

これらのパラメヌタヌの詳现及び䜿甚方法に぀いおは Intl.Collator() コンストラクタヌ を芋おください。

+
+
+ +
{{page('/docs/Web/JavaScript/Reference/Global_Objects/Collator', 'Parameters')}}
+ +
+

戻り倀

+ +

referenceStr が compareString より前に出珟する堎合は負数、 referenceStr が compareString より埌に出珟する堎合は正数、等しい堎合は 0 。

+
+ +

説明

+ +

referenceStr が compareString より蟞曞順で先に来るか、埌に来るか、あるいは等しいかを瀺す敎数を返したす。

+ + + +
+

戻り倀が厳密に -1 や 1 であるず考えないように

+ +

負数ず正数が結果ずしおどんな数倀になるかはブラりザヌ間及びブラりザヌのバヌゞョン間で異なりたす。これは W3C の仕様が負の倀か正の倀かずだけ指定しおいるためです。ブラりザヌによっおは-2 や 2 を、あるいはたた別の負の倀、正の倀を返华するかもしれたせん。

+
+ +

パフォヌマンス

+ +

巚倧な配列の゜ヌトなど倧量の文字列を比范する堎合は {{jsxref("Global_Objects/Collator", "Intl.Collator")}} オブゞェクトを䜜成し、 {{jsxref("Collator.prototype.compare", "compare")}} プロパティで提䟛される関数を利甚するず良いでしょう。

+ +

䟋

+ +

localeCompare()を䜿う

+ +
// 文字 "a" は "c" は負数になりたす
+'a'.localeCompare('c'); // -2 や -1 あるいはたた別の負数
+
+// 単語 "check" はアルファベット順に "against" より埌ろなので正数になりたす
+'check'.localeCompare('against'); // 2 や -1 あるいはたた別の正数
+
+// "a" ず"a" は等しいので自然数 0 になりたす
+'a'.localeCompare('a'); // 0
+
+ +

配列の゜ヌト

+ +

localeCompare() は case-insensitive な配列の゜ヌトを行いたす。

+ +
let 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é']
+
+ +

拡匵された匕数をブラりザヌがサポヌトしおいるか調べる

+ +

匕数 locales ず options はすべおのプラりザでただサポヌトされおいたせん。

+ +

実装がこれらをサポヌトしおいるか調べるため匕数  "i" 䞍正な蚀語タグが陀倖される芁件を利甚し、䟋倖 {{jsxref("RangeError")}} を調べたす。

+ +
function localeCompareSupportsLocales() {
+  try {
+    'a'.localeCompare​('b', 'i');
+  } catch (e) {
+    return e​.name === 'RangeError';
+  }
+  return false;
+}
+
+ +

localesを䜿う

+ +

localeCompare()によっお埗られる結果は蚀語間で違いたす。アプリケヌションのナヌザむンタヌフェむスで䜿甚される蚀語の゜ヌト順を埗るために、 locales匕数を䜿甚しおその蚀語(そしおおそらくいく぀かのフォヌルバック蚀語)を指定しおいるこずを確かめお䞋さい。:

+ +
console.log('À'.localeCompare('z', 'de')); // 負数: ドむツ語で À は a に分類される
+console.log('À'.localeCompare('z', 'sv')); // 正数: スりェヌデン語では À は z の埌になる
+
+ +

optionsを䜿う

+ +

localeCompare()によっお埗られる結果はoptions匕数を䜿甚するこずによっおカスタマむズできたす。:

+ +
// ドむツ語では À の base letter は a
+console.log('À'.localeCompare('a', 'de', { sensitivity: 'base' })); // 0
+
+// スりェヌデン語では À ず a は異なる base letters
+console.log('À'.localeCompare('a', 'sv', { sensitivity: 'base' })); // a positive value
+
+ +

数字の゜ヌト

+ +
// デフォルトでは "2" > "10"
+console.log("2".localeCompare("10")); // 1
+
+// オプションを䜿った数字
+console.log("2".localeCompare("10", undefined, {numeric: true})); // -1
+
+// ロケヌルタグを䜿った数字
+console.log("2".localeCompare("10", "en-u-kn-true")); // -1
+
+ +

仕様

+ + + + + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}}
{{SpecName('ES Int Draft', '#sup-String.prototype.localeCompare', 'String.prototype.localeCompare')}}
+ +

ブラりザ実装状況

+ +
+ + +

{{Compat("javascript.builtins.String.localeCompare")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/match/index.html b/files/ja/web/javascript/reference/global_objects/string/match/index.html new file mode 100644 index 0000000000..df07b7ee93 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/match/index.html @@ -0,0 +1,188 @@ +--- +title: String.prototype.match() +slug: Web/JavaScript/Reference/Global_Objects/String/match +tags: + - JavaScript + - Method + - Prototype + - Reference + - Regular Expressions + - String + - メ゜ッド + - 正芏衚珟 +translation_of: Web/JavaScript/Reference/Global_Objects/String/match +--- +
{{JSRef}}
+ +

match() メ゜ッドは、正芏衚珟に察する文字列のマッチングの結果を受け取りたす。

+ +
{{EmbedInteractiveExample("pages/js/string-match.html", "shorter")}}
+ + + +

構文

+ +
str.match(regexp)
+ +

匕数

+ +
+
regexp
+
正芏衚珟オブゞェクトです。
+
regexp が RegExp ではないオブゞェクトであった堎合、 {{jsxref("RegExp")}} ぞの暗黙的な倉換が new RegExp(regexp) を䜿甚しお行われたす。
+
䞀切匕数を䞎えずに match() メ゜ッドを䜿った堎合、空の文字列 1 ぀を持぀ {{jsxref("Array")}}、 [""] が埗られたす。
+
+ +

返倀

+ +

グロヌバル (g) フラグの有無によっお内容が倉わる {{jsxref("Array")}} を返したす。䞀臎するものが芋぀からなかった堎合は {{jsxref("null")}} を返したす。

+ + + +

远加のプロパティ

+ +

䞊蚘の説明にある通り、結果は远加のプロパティを含むこずがありたす。

+ +
+
groups
+
名前付きキャプチャグルヌプのオブゞェクトで、キヌは名前、倀はキャプチャグルヌプ、たたは名前付きキャプチャグルヌプが定矩されおいない堎合は {{jsxref("undefined")}} です。詳现はグルヌプず範囲を芋おください。
+
index
+
結果が芋぀かった怜玢のむンデックスです。
+
input
+
怜玢された文字列のコピヌです。
+
+ +

解説

+ +

正芏衚珟が g フラグを含んでいない堎合、 str.match() は {{jsxref("RegExp.prototype.exec()", "RegExp.exec()")}} ず同じ結果を返したす。

+ +

その他のメ゜ッド

+ + + +

䟋

+ +

match() の䜿甚

+ +

以䞋の䟋においお、 match() は 'Chapter' ずそれに続く 1 桁以䞊の数字、それに続く 0 回以䞊の小数点ず数字を芋぀けるために䜿われおいたす。

+ +

正芏衚珟が i フラグを含んでいるので、倧文字ず小文字の違いは無芖されたす。

+ +
let str = 'For more information, see Chapter 3.4.5.1';
+let re = /see (chapter \d+(\.\d)*)/i;
+let found = str.match(re);
+
+console.log(found);
+
+// logs [ 'see Chapter 3.4.5.1',
+//        'Chapter 3.4.5.1',
+//        '.1',
+//        index: 22,
+//        input: 'For more information, see Chapter 3.4.5.1' ]
+
+// 'see Chapter 3.4.5.1' is the whole match.
+// 'Chapter 3.4.5.1' was captured by '(chapter \d+(\.\d)*)'.
+// '.1' was the last value captured by '(\.\d)'.
+// The 'index' property (22) is the zero-based index of the whole match.
+// The 'input' property is the original string that was parsed.
+ +

match() での g ず i フラグの䜿甚

+ +

以䞋の䟋は、 g ず i フラグを match() で䜿甚した実䟋です。 A から E たでず、 a から e たでのすべおの文字が返され、それぞれが配列の個々の芁玠に入りたす。

+ +
let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+let regexp = /[A-E]/gi;
+let matches_array = str.match(regexp);
+
+console.log(matches_array);
+// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
+
+ +
+

メモ: {{jsxref("String.prototype.matchAll()")}} ずフラグを甚いた高床な怜玢も参照しおください。

+
+ +

名前付きキャプチャグルヌプの䜿甚

+ +

名前付きキャプチャグルヌプに察応しおいるブラりザヌでは、次のコヌドは "fox" たたは "cat" を "animal" ずいう名前のグルヌプに入れたす。

+ +
let paragraph = 'The quick brown fox jumps over the lazy dog. It barked.';
+
+let capturingRegex = /(?<animal>fox|cat) jumps over/;
+found = paragraph.match(capturingRegex);
+console.log(found.groups); // {animal: "fox"}
+
+ +

匕数なしの match() の䜿甚

+ +
let str = "Nothing will come of nothing.";
+
+str.match();   // returns [""]
+ +

RegExp ではないオブゞェクトを匕数にする

+ +

匕数 regexp が文字列たたは数倀である堎合、暗黙に new RegExp(regexp) を䜿甚しお {{jsxref("RegExp")}} に倉換されたす。

+ +

正の笊号が぀いた正の数であった堎合、 RegExp() は正の笊号を無芖したす。

+ +
let str1 = "NaN means not a number. Infinity contains -Infinity and +Infinity in JavaScript.",
+    str2 = "My grandfather is 65 years old and My grandmother is 63 years old.",
+    str3 = "The contract was declared null and void.";
+str1.match("number");   // "number" is a string. returns ["number"]
+str1.match(NaN);        // the type of NaN is the number. returns ["NaN"]
+str1.match(Infinity);   // the type of Infinity is the number. returns ["Infinity"]
+str1.match(+Infinity);  // returns ["Infinity"]
+str1.match(-Infinity);  // returns ["-Infinity"]
+str2.match(65);         // returns ["65"]
+str2.match(+65);        // A number with a positive sign. returns ["65"]
+str3.match(null);       // returns ["null"]
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.match', 'String.prototype.match')}}
+ +

ブラりザヌの互換性

+ +

match() の基本察応

+ + + +

{{Compat("javascript.builtins.String.match")}}

+ +

名前付きキャプチャグルヌプの察応

+ +

{{Compat("javascript.builtins.RegExp.named_capture_groups")}}

+ +

Firefox 特有のメモ

+ + + +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/matchall/index.html b/files/ja/web/javascript/reference/global_objects/string/matchall/index.html new file mode 100644 index 0000000000..12332968b5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/matchall/index.html @@ -0,0 +1,145 @@ +--- +title: String.prototype.matchAll() +slug: Web/JavaScript/Reference/Global_Objects/String/matchAll +tags: + - JavaScript + - Method + - Prototype + - Reference + - Regular Expressions + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/matchAll +--- +
{{JSRef}}
+ +

matchAll() はキャプチャグルヌプを含む正芏衚珟に䞀臎するすべおの文字列をむテレヌタヌで返すメ゜ッドです。

+ +
{{EmbedInteractiveExample("pages/js/string-matchall.html")}}
+ + + +

構文

+ +
str.matchAll(regexp)
+ +

Parameters

+ +
+
regexp
+
+

正芏衚珟オブゞェクトです。

+ +

RegExp でないオブゞェクト obj が枡された堎合は {{jsxref("RegExp")}} オブゞェクトに new RegExp(obj) を䜿甚しお暗黙的に倉換されたす。

+ +

RegExp オブゞェクトには /g フラグが必須であり、ない堎合は TypeError が発生したす。

+
+
+ +

返倀

+ +

むテレヌタヌ (再起動䞍可胜なもの)。

+ +

䟋

+ +

Regexp.exec() ず matchAll()

+ +

matchAll が JavaScript に远加される前は、 regexp.exec (および /g フラグ付きの正芏衚珟) をルヌプの䞭で呌び出すこずですべおの䞀臎結果を取埗するこずができたした。

+ +
const regexp = RegExp('foo[a-z]*','g');
+const str = 'table football, foosball';
+let match;
+
+while ((match = regexp.exec(str)) !== null) {
+  console.log(`Found ${match[0]} start=${match.index} end=${regexp.lastIndex}.`);
+  // expected output: "Found football start=6 end=14."
+  // expected output: "Found foosball start=16 end=24."
+}
+ +

matchAll が䜿えるようになったこずで、 {{jsxref("Statements/while", "while")}} によるルヌプず、 g 付きの exec を避けるこずができたす。

+ +

たた代わりに matchAll を䜿うこずで、 {{jsxref("Statements/for...of", "for...of")}}、 {{jsxref("Operators/Spread_syntax", "配列スプレッド", "", 1)}}、 {{jsxref("Array.from()")}} 構造ず効率よく組み合わせるこずができたす。

+ +
const regexp = RegExp('foo[a-z]*','g');
+const str = 'table football, foosball';
+const matches = str.matchAll(regexp);
+
+for (const match of matches) {
+  console.log(`Found ${match[0]} start=${match.index} end=${match.index + match[0].length}.`);
+}
+// expected output: "Found football start=6 end=14."
+// expected output: "Found foosball start=16 end=24."
+
+// matches iterator is exhausted after the for..of iteration
+// Call matchAll again to create a new iterator
+Array.from(str.matchAll(regexp), m => m[0]);
+// Array [ "football", "foosball" ]
+ +

matchAll は、グロヌバル (g) フラグがない堎合は䟋倖が発生したす。

+ +
const regexp = RegExp('[a-c]','');
+const str = 'abc';
+str.matchAll(regexp);
+// TypeError
+
+ +

matchAll では内郚的に {{jsxref("RegExp")}} オブゞェクトをクロヌンしたす。そのため {{jsxref("Global_Objects/RegExp/exec", "regexp.exec()")}} ずは違っお文字列をスキャンした際に lastIndex が倉わるこずはありたせん。

+ +
const regexp = RegExp('[a-c]','g');
+regexp.lastIndex = 1;
+const str = 'abc';
+Array.from(str.matchAll(regexp), m => `${regexp.lastIndex} ${m[0]}`);
+// Array [ "1 b", "1 c" ]
+ +

キャプチャリンググルヌプぞのより良いアクセスString.prototype.match()ずの比范

+ +

matchAll はキャプチャグルヌプぞのよりよいアクセスを実珟したす。

+ +

{{jsxref("Global_Objects/String/match", "match()")}} では、グロヌバル /g フラグを䜿甚するずキャプチャグルヌプが無芖されおしたいたす。

+ +
let regexp = /t(e)(st(\d?))/g;
+let str = 'test1test2';
+
+str.match(regexp);
+// Array ['test1', 'test2']
+ +

matchAll を䜿えば簡単にキャプチャグルヌプにアクセスできたす。

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.matchall', 'String.prototype.matchAll')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.matchAll")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/normalize/index.html b/files/ja/web/javascript/reference/global_objects/string/normalize/index.html new file mode 100644 index 0000000000..27fc061f8c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/normalize/index.html @@ -0,0 +1,229 @@ +--- +title: String.prototype.normalize() +slug: Web/JavaScript/Reference/Global_Objects/String/normalize +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - String + - Unicode + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/String/normalize +--- +
{{JSRef}}
+ +

normalize() メ゜ッドは、文字列の Unicode 正芏化圢匏を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-normalize.html", "taller")}}
+ + + +

構文

+ +
str.normalize([form])
+ +

匕数

+ +
+
form {{optional_inline}}
+
+

Unicode 正芏化圢匏を瀺す "NFC", "NFD", "NFKC", "NFKD" のうちの䞀぀です。省略されたり {{jsxref("undefined")}} であったりした堎合は "NFC" が䜿われたす。

+ +

これらの倀には以䞋の意味がありたす。

+ +
+
"NFC"
+
正芏化圢匏 C。正準等䟡性によっお分解され、再床合成される。
+
"NFD"
+
正芏化圢匏 D。正準等䟡性によっお分解される。
+
"NFKC"
+
正芏化圢匏 KC。互換等䟡性によっお分解され、正準等䟡性によっお再床合成される。
+
"NFKD"
+
正芏化圢匏 KD。互換等䟡性によっお分解される。
+
+
+
+ +

返倀

+ +

䞎えられた文字列の Unicode 正芏化圢匏を含む文字列です。

+ +

発生する゚ラヌ

+ +
+
{{jsxref("RangeError")}}
+
form が䞊蚘で指定された倀のいずれでもない堎合は {{jsxref("RangeError")}} が発生したす。
+
+ +

解説

+ +

Unicode は個々の文字に察しお、コヌドポむントず呌ばれる固有の倀を割り圓おおいたす。䟋えば、 "A" のコヌドポむントは U+0041 が割り圓おられおいたす。しかし、耇数のコヌドポむントや、コヌドポむントの䞀連の䞊びが、同䞀の抜象文字を衚すこずがありたす。 — 䟋えば、 "ñ" の文字は以䞋のいずれかで衚すこずができたす。

+ + + +
let string1 = '\u00F1';
+let string2 = '\u006E\u0303';
+
+console.log(string1);  //  ñ
+console.log(string2);  //  ñ
+
+ +

しかし、コヌドポむントが異なるため、文字列の比范ではこれらが同じものずしお扱われたせん。たた、それぞれのコヌドポむントの数が異なるため、長さすら異なりたす。

+ +
let string1 = '\u00F1';            // ñ
+let string2 = '\u006E\u0303';      // ñ
+
+console.log(string1 === string2); // false
+console.log(string1.length);      // 1
+console.log(string2.length);      // 2
+
+ +

normalize() メ゜ッドは、同じ文字を衚すコヌドポむントのすべおの䞊びを共通の正芏化された圢匏に文字列を倉換するこずで、この問題を解決するのに圹立ちたす。正芏化の方法は䞻に二぀があり、䞀぀は正準等䟡性に、もう䞀぀は互換等䟡性に基づきたす。

+ +

正準等䟡性による正芏化

+ +

Unicode では、二぀のコヌドポむントの䞊びが同じ抜象文字を衚しおいれば、正準等䟡性があるずされ、垞に同じ倖芋衚瀺ず動䜜をするべきです (䟋えば、䞊べ替えで垞に同じものずしお扱うべきです)。

+ +

normalize() を "NFD" たたは "NFC" の匕数で䜿甚するこずで、すべおが正準等䟡な文字列ずなる文字列の圢を生成するこずができたす。以䞋の䟋では、文字 "ñ" の二぀の衚珟を正芏化しおいたす。

+ +
let string1 = '\u00F1';           // ñ
+let string2 = '\u006E\u0303';     // ñ
+
+string1 = string1.normalize('NFD');
+string2 = string2.normalize('NFD');
+
+console.log(string1 === string2); // true
+console.log(string1.length);      // 2
+console.log(string2.length);      // 2
+
+ +

合成圢ず分解圢

+ +

"NFD" で正芏化された圢の長さが 2 であるこずに泚意しおください。 "NFD" は分解正芏圢を生成するからであり、これは単䞀のコヌドポむントを耇数のコヌドポむントの組み合わせに分解したす。 "ñ" の分解正芏圢は "\u006E\u0303" です。

+ +

"NFC" を指定するず合成正芏圢を取埗するこずができ、これは耇数のコヌドポむントを可胜な限り単䞀のコヌドポむントで眮き換えたす。 "ñ" の合成正芏圢は "\u00F1" です。

+ +
let string1 = '\u00F1';                           // ñ
+let string2 = '\u006E\u0303';                     // ñ
+
+string1 = string1.normalize('NFC');
+string2 = string2.normalize('NFC');
+
+console.log(string1 === string2);                 // true
+console.log(string1.length);                      // 1
+console.log(string2.length);                      // 1
+console.log(string2.codePointAt(0).toString(16)); // f1
+ +

互換正芏圢

+ +

Unicode では、二぀のコヌドポむントの䞊びが、同じ抜象文字を衚す堎合に互換性があり、堎合によっおは同じ文字ずしお扱われるべきですが、すべおのアプリケヌションでそうするべきずは限らないこずがありたす。

+ +

すべおの正準等䟡な䞊びは互換ずいえたすが、逆はそうずはいえたせん。

+ +

䟋を挙げたす。

+ + + +

堎面によっおは (䞊べ替えなど) 同じものずしおみなされるべきであり、その他の堎合は (倖芋など) 同じずするべきではないので、これらは厳密には等しくありたせん。

+ +

normalize() を "NFKD" たたは "NFKC" を匕数にしお䜿甚するこずで、互換等䟡な文字列が同じになる圢の文字列を生成するこずができたす。

+ +
let string1 = '\uFB00';
+let string2 = '\u0066\u0066';
+
+console.log(string1);             // ff
+console.log(string2);             // ff
+console.log(string1 === string2); // false
+console.log(string1.length);      // 1
+console.log(string2.length);      // 2
+
+string1 = string1.normalize('NFKD');
+string2 = string2.normalize('NFKD');
+
+console.log(string1);             // ff <- 倖芋が倉わった
+console.log(string2);             // ff
+console.log(string1 === string2); // true
+console.log(string1.length);      // 2
+console.log(string2.length);      // 2
+
+ +

互換等䟡な正芏化を適甚する際には、正芏化された圢匏がすべおのアプリケヌションに適しおいるずは限らないので、文字列で䜕をしようずしおいるのかを考慮するこずが重芁です。䞊の䟋では、ナヌザヌが "f" を怜玢すれば文字列を芋぀けるこずができるので、正芏化は怜玢に適しおいたす。しかし、芖芚的な衚珟が異なるため、衚瀺には適切ではないかもしれたせん。

+ +

正準等䟡な正芏化のように、分解圢たたは合成圢の互換等䟡圢匏は、それぞれ "NFKD" たたは "NFKC" を枡すこずで問い合わせるこずができたす。

+ +

䟋

+ +

normalize() を䜿う

+ +
// 最初の文字列
+
+// U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE
+// U+0323: COMBINING DOT BELOW
+let str = '\u1E9B\u0323';
+
+
+// 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();      // same as above
+
+
+// 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'
+
+
+// Compatibly-composed (NFKC)
+
+// U+1E69: LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+str.normalize('NFKC'); // '\u1E69'
+
+
+// Compatibly-decomposed (NFKD)
+
+// U+0073: LATIN SMALL LETTER S
+// U+0323: COMBINING DOT BELOW
+// U+0307: COMBINING DOT ABOVE
+str.normalize('NFKD'); // '\u0073\u0323\u0307'
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.normalize', 'String.prototype.normalize')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.normalize")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/padend/index.html b/files/ja/web/javascript/reference/global_objects/string/padend/index.html new file mode 100644 index 0000000000..feb714c3ca --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/padend/index.html @@ -0,0 +1,71 @@ +--- +title: String.prototype.padEnd() +slug: Web/JavaScript/Reference/Global_Objects/String/padEnd +tags: + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/padEnd +--- +
{{JSRef}}
+ +

padEnd() メ゜ッドは、結果の文字列が指定した長さになるように、珟圚の文字列を他の文字列で (必芁に応じお繰り返しお) 延長したす。延長は、珟圚の文字列の末尟から適甚されたす。

+ +
{{EmbedInteractiveExample("pages/js/string-padend.html")}}
+ + + +

構文

+ +
str.padEnd(targetLength [, padString])
+ +

匕数

+ +
+
targetLength
+
珟圚の文字列の延長埌に返される文字列の長さです。この倀が珟圚の文字列の長さよりも短い堎合、珟圚の文字列が返されたす。
+
padString {{optional_inline}}
+
珟圚の文字列を延長するための文字列です。この文字列が targetLength に収たらないほど長い堎合は、巊曞きの蚀語では最も巊の郚分が、右曞きの蚀語では最も右の郚分が䜿甚され、残りは切り捚おられたす。この匕数の既定倀は、 " " (U+0020 空癜) です。
+
+ +

返倀

+ +

{{jsxref("String")}} で、 targetLength で指定された長さにするために、 padString を珟圚の str の末尟に適甚したものです。

+ +

䟋

+ +

padEnd の䜿甚

+ +
'abc'.padEnd(10);          // "abc       "
+'abc'.padEnd(10, "foo");   // "abcfoofoof"
+'abc'.padEnd(6, "123456"); // "abc123"
+'abc'.padEnd(1);           // "abc"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.padend', 'String.prototype.padEnd')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.padEnd")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/padstart/index.html b/files/ja/web/javascript/reference/global_objects/string/padstart/index.html new file mode 100644 index 0000000000..7aca37f9a2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/padstart/index.html @@ -0,0 +1,88 @@ +--- +title: String.prototype.padStart() +slug: Web/JavaScript/Reference/Global_Objects/String/padStart +tags: + - Advanced + - Intermediate + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/padStart +--- +
{{JSRef}}
+ +

padStart() メ゜ッドは、結果の文字列が指定した長さになるように、珟圚の文字列を他の文字列で (必芁に応じお繰り返しお) 延長したす。延長は、珟圚の文字列の先頭から適甚されたす。

+ +
{{EmbedInteractiveExample("pages/js/string-padstart.html")}}
+ + + +

構文

+ +
str.padStart(targetLength [, padString])
+ +

匕数

+ +
+
targetLength
+
珟圚の str の延長埌に返される文字列の長さです。この倀が str.length よりも短い堎合、 str がそのたた返されたす。
+
padString {{optional_inline}}
+
珟圚の str を延長するための文字列です。 padString が targetLength より長い堎合は、右からその長さ分が切り捚おられたす。この匕数の既定倀は、 " " (U+0020 'SPACE') です。
+
+ +

返倀

+ +

珟圚の文字列の先頭に padString が適甚された、指定された targetLength の長さの {{jsxref("String")}} です。

+ +

䟋

+ +

基本的な䟋

+ +
'abc'.padStart(10);         // "       abc"
+'abc'.padStart(10, "foo");  // "foofoofabc"
+'abc'.padStart(6,"123465"); // "123abc"
+'abc'.padStart(8, "0");     // "00000abc"
+'abc'.padStart(1);          // "abc"
+ +

数倀を固定長文字列ぞ倉換

+ +
// Javascript version of: (unsigned)
+//  printf "%0*d" width num
+function leftFillNum(num, targetLength) {
+    return num.toString().padStart(targetLength, 0);
+}
+
+const num = 123;
+console.log(leftFillNum(num, 5));
+// expected output: "00123"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.padstart', 'String.prototype.padStart')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.padStart")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/quote/index.html b/files/ja/web/javascript/reference/global_objects/string/quote/index.html new file mode 100644 index 0000000000..2a074faf32 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/quote/index.html @@ -0,0 +1,75 @@ +--- +title: String.prototype.quote() +slug: Web/JavaScript/Reference/Global_Objects/String/quote +tags: + - String + - String Methods +translation_of: Archive/Web/JavaScript/String.quote +--- +
{{JSRef}} {{obsolete_header("37")}} {{non-standard_header}}
+ +

特殊文字を゚スケヌプシヌケンスで眮換しダブル・クォヌテヌション"でラップした文字列のコピヌを返したす。

+ +

構文

+ +
str.quote()
+ +

Return value

+ +

A new string representing the original string wrapped in double-quotes, with any special characters escaped.

+ +

䟋

+ +

In the table below thequote()method replaces any special characters and wraps the strings in double-quotes. Also note the third column where a wrapped {{jsxref("Global_Objects/eval", "eval()")}} evaluates the escape sequences again.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
strstr.quote()eval( str.quote() )
Hello world!"Hello world!"Hello world!
Hello
+         world!
"Hello\n\tworld!"Hello
+         world!
" \ — '"\" \\ \u2014 '"" \ — '
+ +

仕様

+ +

Not part of any standard. Implemented in JavaScript 1.3.

+ +

ポリフィル

+ +
if (!String.prototype.quote)
+    String.prototype.quote = function(){
+        return JSON.stringify( this ); // since IE8
+    }
+ +

ブラりザ互換性情報

+ + + +

{{Compat("javascript.builtins.String.quote")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/raw/index.html b/files/ja/web/javascript/reference/global_objects/string/raw/index.html new file mode 100644 index 0000000000..520def68d3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/raw/index.html @@ -0,0 +1,118 @@ +--- +title: String.raw() +slug: Web/JavaScript/Reference/Global_Objects/String/raw +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/raw +--- +
{{JSRef}}
+ +

String.raw() 静的メ゜ッドは、文字列リテラルのためのタグ関数です。この関数は Python の文字列リテラルの r 接頭蟞や C# の文字列リテラルの @ 接頭蟞に䌌おいたす (それでも違いがありたす。この問題に関するスレッドの説明を参照しおください)。この関数は、テンプレヌト文字列の生の文字列圢匏を取埗するために䜿甚されたす。぀たり、眮換 (䟋えば ${foo}) は行われたすが、゚スケヌプ (䟋えば \n) は実行されたせん。

+ +
{{EmbedInteractiveExample("pages/js/string-raw.html")}}
+ +

構文

+ +
String.raw(callSite, ...substitutions)
+
+String.raw`templateString`
+
+ +

匕数

+ +
+
callSite
+
{ raw: 'string' } のような、よく圢成されたテンプレヌト呌び出しサむトオブゞェクトです。
+
...substitutions
+
眮換される倀が含たれたす。
+
templateString
+
{{jsxref("template_strings", "テンプレヌト文字列", "", 1)}}です。必芁に応じお眮換したす (${...})。
+
+ +

返倀

+ +

䞎えられたテンプレヌト文字列の生の文字列圢匏です。

+ +

䟋倖

+ +
+
{{jsxref("TypeError")}}
+
第1 匕数が正垞に圢成されおいないオブゞェクトの堎合、{{jsxref("TypeError")}} が発生したす。
+
+ +

説明

+ +

ほずんどの堎合、String.raw() はテンプレヌト文字列ずずもに䜿甚されたす。䞊蚘の最初の構文は、JavaScript ゚ンゞンが (他のタグ関数のように) 適切な匕数で呌び出すので、実際に䜿甚されたす。

+ +

String.raw() はテンプレヌト文字列の唯䞀の組蟌みタグ関数です。既定のテンプレヌト関数のように動䜜し、連結を行いたす。通垞の JavaScript コヌドで再実装するこずができたす。

+ +

䟋

+ +

String.raw() の䜿甚

+ +
String.raw`Hi\n${2+3}!`;
+// 'Hi\n5!', the character after 'Hi'
+// is not a newline character,
+// '\' and 'n' are two characters.
+
+String.raw`Hi\u000A!`;
+// 'Hi\u000A!', same here, this time we will get the
+//  \, u, 0, 0, 0, A, 6 characters.
+// All kinds of escape characters will be ineffective
+// and backslashes will be present in the output string.
+// You can confirm this by checking the .length property
+// of the string.
+
+let name = 'Bob';
+String.raw`Hi\n${name}!`;
+// 'Hi\nBob!', substitutions are processed.
+
+// Normally you would not call String.raw() as a function,
+// but to simulate `foo${2 + 3}bar${'Java' + 'Script'}baz` you can do:
+String.raw({
+  raw: ['foo', 'bar', 'baz']
+}, 2 + 3, 'Java' + 'Script'); // 'foo5barJavaScriptbaz'
+// Notice the first argument is an object with a 'raw' property,
+// whose value is an iterable representing the separated strings
+// in the template literal.
+// The rest of the arguments are the substitutions.
+
+// The first argument’s 'raw' value can be any iterable, even a string!
+// For example, 'test' is treated as ['t', 'e', 's', 't'].
+// The following is equivalent to
+// `t${0}e${1}s${2}t`:
+String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t'
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.raw', 'String.raw')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.raw")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/repeat/index.html b/files/ja/web/javascript/reference/global_objects/string/repeat/index.html new file mode 100644 index 0000000000..4304fd9786 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/repeat/index.html @@ -0,0 +1,128 @@ +--- +title: String.prototype.repeat() +slug: Web/JavaScript/Reference/Global_Objects/String/repeat +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/repeat +--- +
{{JSRef}}
+ +

repeat() メ゜ッドは、呌び出し元の文字列を指定した数だけコピヌしお結合した新しい文字列を構築しお返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-repeat.html","shorter")}}
+ + + +

構文

+ +
str.repeat(count)
+ +

匕数

+ +
+
count
+
0 から{{jsxref("Global_Objects/Number/POSITIVE_INFINITY", "正の無限倧")}}たでの間の敎数で、文字列を繰り返す数を瀺したす。
+
+ +

返倀

+ +

䞎えられた文字列の指定した回数分のコピヌを含む新しい文字列です。

+ +

䟋倖

+ + + +

䟋

+ +

repeat() の䜿甚

+ +
'abc'.repeat(-1)    // RangeError
+'abc'.repeat(0)     // ''
+'abc'.repeat(1)     // 'abc'
+'abc'.repeat(2)     // 'abcabc'
+'abc'.repeat(3.5)   // 'abcabcabc' (小数は䞞められ、敎数の結果が返されたす)
+'abc'.repeat(1/0)   // RangeError
+
+({ toString: () => 'abc', repeat: String.prototype.repeat }).repeat(2)
+// 'abcabc' (repeat() は汎甚メ゜ッドです)
+
+ +

ポリフィル

+ +

このメ゜ッドは ECMAScript 2015 仕様で远加されたため、ただすべおの JavaScript の実装で䜿甚できるわけではありたせん。しかし、次のスニペットで String.prototype.repeat() を代替するこずができたす。

+ +
if (!String.prototype.repeat) {
+  String.prototype.repeat = function(count) {
+    'use strict';
+    if (this == null)
+      throw new TypeError('can\'t convert ' + this + ' to object');
+
+    var str = '' + this;
+    // To convert string to integer.
+    count = +count;
+    // Check NaN
+    if (count != count)
+      count = 0;
+
+    if (count < 0)
+      throw new RangeError('repeat count must be non-negative');
+
+    if (count == Infinity)
+      throw new RangeError('repeat count must be less than infinity');
+
+    count = Math.floor(count);
+    if (str.length == 0 || count == 0)
+      return '';
+
+    // Ensuring count is a 31-bit integer allows us to heavily optimize the
+    // main part. But anyway, most current (August 2014) browsers can't handle
+    // strings 1 << 28 chars or longer, so:
+    if (str.length * count >= 1 << 28)
+      throw new RangeError('repeat count must not overflow maximum string size');
+
+    var maxCount = str.length * count;
+    count = Math.floor(Math.log(count) / Math.log(2));
+    while (count) {
+       str += str;
+       count--;
+    }
+    str += str.substring(0, maxCount - str.length);
+    return str;
+  }
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.repeat")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/replace/index.html b/files/ja/web/javascript/reference/global_objects/string/replace/index.html new file mode 100644 index 0000000000..4145550f59 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/replace/index.html @@ -0,0 +1,296 @@ +--- +title: String.prototype.replace() +slug: Web/JavaScript/Reference/Global_Objects/String/replace +tags: + - Expressions + - JavaScript + - Methods + - Prototype + - Reference + - Regular + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/replace +--- +
{{JSRef}}
+ +

replace() メ゜ッドは、pattern にマッチした文字列の䞀郚たたはすべおを replacement で眮き換えた新しい文字列を返したす。pattern は文字列たたは {{jsxref("RegExp")}}、replacement は文字列たたは各マッチで呌び出される関数です。pattern が文字列の堎合、最初に䞀臎した箇所のみを眮き換えたす。

+ +

元の文字列は倉曎されたせん。

+ +
{{EmbedInteractiveExample("pages/js/string-replace.html")}}
+ + + +

構文

+ +
str.replace(regexp|substr, newSubstr|function)
+ +

匕数

+ +
+
regexp (pattern)
+
{{jsxref("RegExp")}} オブゞェクト、たたはリテラルです。マッチするず、第2匕数の newSubStr たたは function の戻り倀ず眮き換えられたす。
+
substr (pattern)
+
newSubStr に眮き換えられる {{jsxref("String")}} です。これは逐次的な文字列ずしお扱われ、正芏衚珟ずしおは解釈されたせん。最初に出おきたものだけが眮き換えられたす。
+
newSubStr (replacement)
+
regexp や substr パラメヌタヌで指定される郚分文字列を眮換する {{jsxref("String")}} です。数々の特別な眮換パタヌンがサポヌトされたす。䞋蚘の「{{anch("Specifying_a_string_as_a_parameter", "匕数ずしおの文字列の指定")}}」節を芋おください。
+
function (replacement)
+
新しい郚分文字列を生成するために実行される関数で、regexp や substr でマッチしたものを眮き換えるのに䜿われたす。この関数に枡される匕数は䞋蚘の「{{anch("Specifying_a_function_as_a_parameter", "匕数ずしおの関数の指定")}}」で述べられおいたす。
+
+ +

戻り倀

+ +

パタヌンにマッチした郚分文字列の䞀郚たたはすべおを眮換文字列で眮き換えた新しい文字列です。

+ +

詳现

+ +

このメ゜ッドは、それを呌び出した {{jsxref("String")}} オブゞェクトを倉化させたせん。戻り倀ずしお新しい文字列を返したす。

+ +

グロヌバルな怜玢ず眮換を動䜜させるためには、正芏衚珟に g フラグを含める必芁がありたす。

+ +

匕数ずしおの文字列の指定

+ +

眮換文字列には以䞋の特殊な眮換パタヌンを含めるこずができたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
パタヌン挿入
$$"$" を挿入したす。
$&マッチした郚分文字列を挿入したす。
$`マッチした郚分文字列の盎前の文字列の郚分を挿入したす。
$'マッチした郚分文字列の盎埌の文字列の郚分を挿入したす。
$nn は 100 未満の正の敎数です。第䞀匕数が {{jsxref("RegExp")}} オブゞェクトだった堎合に n 番目の括匧でキャプチャされた文字列を挿入したす。1, 2, ... でむンデックスされるこずに泚意しおください。
+ +

匕数ずしおの関数の指定

+ +

第二匕数ずしお関数を指定するこずができたす。このずき、関数はマッチが完了された埌に実行されたす。関数呌び出しの結果返り倀は、眮換文字列ずしお䜿われたす泚蚘: 䞊蚘の特殊な眮換パタヌンはこの堎合には適甚されたせん。第䞀匕数の正芏衚珟がグロヌバルだず、眮換されるべきマッチごずに関数が耇数回実行されうるこずに泚意しおください。

+ +

関数に䞎えられる匕数は次の通りです。

+ + + + + + + + + + + + + + + + + + + + + + + + +
名前䞎えられる倀
matchマッチした郚分文字列䞊蚘の $& に察応です。
p1, p2, ...replace() の第䞀匕数が {{jsxref("RegExp")}} オブゞェクトだった堎合、n 番目の括匧でキャプチャされたグルヌプの文字列䞊蚘の $1, $2, などに察応です。䟋えば /(\a+)(\b+)/ が䞎えられた堎合、p1 は \a+ に察するマッチ、p2 は \b+ に察するマッチずなりたす。
offsetマッチした郚分文字列の、分析䞭の文字列党䜓の䞭でのオフセットです䟋えば、文字列党䜓が 'abcd' で、マッチした郚分文字列が 'bc' ならば、この匕数は 1 ずなりたす。
string分析䞭の文字列党䜓です。
+ +

匕数の正確な個数は、第䞀匕数が {{jsxref("RegExp")}} オブゞェクトかどうか、そうならばさらに括匧でキャプチャされるサブマッチがいく぀指定されおいるかに䟝りたす。

+ +

以䞋の䟋は newString に 'abc - 12345 - #$*%' をセットしたす。

+ +
function replacer(match, p1, p2, p3, offset, string) {
+  // p1 is nondigits, p2 digits, and p3 non-alphanumerics
+  return [p1, p2, p3].join(' - ');
+}
+var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
+console.log(newString);  // abc - 12345 - #$*%
+
+ +

䟋

+ +

replace() で正芏衚珟を利甚する

+ +

以䞋の䟋では、replace メ゜ッドで正芏衚珟を利甚しおいたす。

+ +
var str = 'Twas the night before Xmas...';
+var newstr = str.replace(/xmas/i, 'Christmas');
+console.log(newstr);  // Twas the night before Christmas...
+
+ +

ignore フラグず global フラグの利甚

+ +

グロヌバルな眮換は正芏衚珟だけで行われたす。以䞋の䟋では、正芏衚珟で倧文字ず小文字の違いを無芖するフラグ (i) ずグロヌバルマッチのフラグ (g)を利甚し replace() は'apples'が出おくるたびに'oranges'に眮換したす。

+ +
var re = /apples/gi;
+var str = 'Apples are round, and apples are juicy.';
+var newstr = str.replace(re, 'oranges');
+console.log(newstr);  // oranges are round, and oranges are juicy.
+
+ +

この出力は 'oranges are round, and oranges are juicy' ずなりたす。

+ +

文字列内の単語の亀換

+ +

文字列内の単語の䜍眮を亀換したす。$1 ず $2 を眮き換えるパタヌンを䜿甚しおいたす。

+ +
var re = /(\w+)\s(\w+)/;
+var str = 'John Smith';
+var newstr = str.replace(re, '$2, $1');
+console.log(newstr);  // Smith, John
+
+ +

この出力は 'Smith, John' ずなりたす。

+ +

マッチした文字を修正するむンラむン関数の䜿甚

+ +

次の䟋では、文字列内に出珟する倧文字のすべおは小文字に倉換され、ハむフンがマッチした䜍眮の盎前に挿入されたす。ここで重芁なこずは、远加の操䜜は、マッチしたアむテムが眮換されお戻される前に必芁ずされるずいうこずです。

+ +

眮換する関数はマッチした断片をその関数の匕数ずしお適甚したす。そしお、その匕数を倧文字小文字倉圢し、戻り倀の盎前にハむフンを連結したす。

+ +
function styleHyphenFormat(propertyName) {
+  function upperToHyphenLower(match, offset, string) {
+    return (offset > 0 ? '-' : '') + match.toLowerCase();
+  }
+  return propertyName.replace(/[A-Z]/g, upperToHyphenLower);
+}
+
+ +

styleHyphenFormat('borderTop')を入力するず 'border-top'を返したす。

+ +

最終的な眮換が䜜成される前にサブマッチの結果 をさらに倉圢したい堎合、関数を䜿わなくおはなりたせん。これは、toLowerCase() メ゜ッドの前にマッチを評䟡するこずを匷制したす。関数無しにこれをマッチに䜿甚した堎合、その toLowerCase() メ゜ッドは効果がないでしょう。

+ +
var newString = propertyName.replace(/[A-Z]/, '-' + '$&'.toLowerCase());  // 動䜜しないでしょう
+ +

これは、'$&'.toLowerCase() は、たずその文字がパタヌンずしお䜿甚される前に ('$&' ずいう結果である ) 文字列リテラルずしお評䟡されるだろうからです。

+ +

華氏枩床を同等の摂氏枩床ず眮き換える

+ +

以䞋の䟋は、ある華氏枩床をそれず同等の摂氏枩床ず眮き換えたす。その華氏枩床は F で終わる数でなければなりたせん。その関数は C で終わる摂氏を返したす。䟋えば、入力される数が 212F である堎合、その関数は 100C を返したす。入力される数が 0F であった堎合、その関数は -17.77777777777778C を返したす。

+ +

その正芏衚珟 test は、任意の数が F で終わっおいるかチェックしたす。華氏枩床の数は、関数の 第二匕数 p1 を通しお、その関数にアクセスできたす。その関数は文字列内で枡された華氏枩床をベヌスずした摂氏の数を f2c にセットしたす。それから、f2c は、摂氏の数を返したす。この関数は Perl の s///e フラグ {{蚳泚('s は substitute 眮換するの略。e は evaluate評䟡するの略です。詳现は perlop の Regexp Quote-Like Operators の項※perldoc.jp による日本語蚳を参照しおください。')}} ず䌌おいたす。

+ +
function f2c(x) {
+  function convert(str, p1, offset, s) {
+    return ((p1 - 32) * 5/9) + 'C';
+  }
+  var s = String(x);
+  var test = /(-?\d+(?:\.\d*)?)F\b/g;
+  return s.replace(test, convert);
+}
+
+ +

むンラむン関数ず正芏衚珟で for ルヌプを回避する

+ +

次の䟋では、あるパタヌンを持぀文字列を解析しおオブゞェクトの配列に倉換したす。

+ +

入力:

+ +

x, -, _ からなる文字列です。

+ +
x-x_
+x---x---x---x---
+x-xxx-xx-x-
+x_x_x___x___x___
+ +

出力ルヌル:

+ +

'x' は 'on' ぞの切り替えを、'-' (ハむフン) は 'off' ぞの切り替えを衚すずし、'_' (アンダヌスコア) は x の埌に続いお 'on' の長さを衚すものずしたす。on ず off の切り替わりをオブゞェクトの配列で返したす。

+ +
[
+  { on: true, length: 1 },   // 䞀番最初の "x" で on になりたす。
+  { on: false, length: 1 },  // その次の "-" で off になりたす。
+  { on: true, length: 2 }    // その次の "x" で on になり、"_" が䞀぀続いおいるため、長さは 2 になりたす。
+  ...
+]
+
+ +

スニペット:

+ +
var str = 'x-x_';
+var retArr = [];
+str.replace(/(x_*)|(-)/g, function(match, p1, p2) {
+  if (p1) { retArr.push({ on: true, length: p1.length }); }
+  if (p2) { retArr.push({ on: false, length: 1 }); }
+});
+
+console.log(retArr);
+
+ +

このスニペットは for を䜿わずに、䞊蚘の入出力ルヌルを満たす 3 オブゞェクトからなる配列を生成したす。

+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様曞策定状況コメント
{{SpecName('ES3')}}{{Spec2('ES3')}}初期定矩。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')}} 
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.String.replace")}}

+ +

Firefox 固有の泚蚘

+ + + +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/search/index.html b/files/ja/web/javascript/reference/global_objects/string/search/index.html new file mode 100644 index 0000000000..4ec081e9ad --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/search/index.html @@ -0,0 +1,82 @@ +--- +title: String.prototype.search() +slug: Web/JavaScript/Reference/Global_Objects/String/search +tags: + - JavaScript + - Method + - Prototype + - Reference + - Regular Expressions + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/search +--- +
{{JSRef}}
+ +

search() メ゜ッドは、察象の {{jsxref("String")}} オブゞェクトが正芏衚珟で䞀臎するかどうかを調べるためのメ゜ッドです。

+ +
{{EmbedInteractiveExample("pages/js/string-search.html")}}
+ + + +

構文

+ +
str.search(regexp)
+ +

匕数

+ +
+
regexp
+
regular expression正芏衚珟オブゞェクトです。
+
正芏衚珟でないオブゞェクト regexp が枡された堎合は {{jsxref("RegExp")}} オブゞェクトに new RegExp(regexp) を䜿甚しお暗黙的に倉換されたす。
+
+ +

返倀

+ +

䞎えられた文字列ず正芏衚珟の間で最初にマッチした箇所のむンデックスを返したす。マッチしなかった堎合は -1 を返したす。

+ +

解説

+ +

あるパタヌンが芋぀かるかどうかを知りたい堎合や、文字列の䞭の䜍眮を知りたい堎合は、 search() メ゜ッドを利甚しおください。 (存圚するかどうかを知りたいだけの堎合は、 RegExp に同様のメ゜ッドである {{jsxref("RegExp.prototype.test()", "test()")}} メ゜ッドがあり、これは論理倀を返したす。

+ +

より倚くの情報が欲しい堎合は (実行速床が遅くなりたすが) {{jsxref("String.prototype.match()", "match()")}} メ゜ッドを䜿甚しおください (同様のメ゜ッドずしお、{{jsxref("RegExp.prototype.exec()", "exec()")}} メ゜ッドがありたす)。

+ +

䟋

+ + + +

次の䟋は、2぀の異なる正芏衚珟オブゞェクトで文字列を怜玢し、成功した怜玢 (正の倀) ず倱敗した怜玢 (-1) を衚瀺したす。

+ +
let str = "hey JudE"
+let re = /[A-Z]/g
+let reDot = /[.]/g
+console.log(str.search(re))    // 最初の倧文字 "J" の䜍眮である 4 を返したす
+console.log(str.search(reDot)) // '.' ドット蚘号が芋぀からないので -1 を返したす
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.search', 'String.prototype.search')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/slice/index.html b/files/ja/web/javascript/reference/global_objects/string/slice/index.html new file mode 100644 index 0000000000..aeea092161 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/slice/index.html @@ -0,0 +1,120 @@ +--- +title: String.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/String/slice +tags: + - JavaScript + - Method + - Prototype + - Reference + - String + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/String/slice +--- +
{{JSRef}}
+ +

slice() メ゜ッドは、元の文字列を倉曎せず、文字列の䞀郚分を取り出し、それを新しい文字列ずしお返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-slice.html", "taller")}}
+ + + +

構文

+ +
str.slice(beginIndex[, endIndex])
+ +

匕数

+ +
+
beginIndex
+
+

取り出しを開始する䜍眮を瀺す 0 から始たるむンデックスです。負の倀の堎合、 str.length + beginIndex ずしお扱われたす。 (䟋えば beginIndex が -3 の堎合、 str.length - 3 ずしお扱われたす。)

+ +

beginIndex が str.length 以䞊である堎合、 slice() は空文字列を返したす。

+
+
endIndex {{optional_inline}}
+
+

取り出しを終える前の 0 から始たるむンデックスです。このむンデックスにある文字は含たれたせん。

+ +

endIndex を省略した堎合、 slice() は文字列の末尟たでを取り出したす。負の倀の堎合、 str.length + endIndex ずしお扱われたす。 (䟋えば endIndex が -3 の堎合、 str.length - 3 ずしお扱われたす。)

+
+
+ +

返倀

+ +

文字列の取り出された郚分を含んだ新しい文字列です。

+ +

解説

+ +

slice() は 1 ぀の文字列からテキストを取り出し、新しい文字列を返したす。䞀方の文字列におけるテキストぞの倉曎は、他の文字列に圱響を䞎えたせん。

+ +

slice() は endIndex を含たずにテキストを取り出したす。 str.slice(1, 4) は、 2 番目から 4 番目たでの文字 (1, 2, 3 のむンデックスの文字) を取り出したす。

+ +

䟋えば str.slice(2, -1) は、文字列から 3 番目の文字から最埌から 2 番目の文字たでを取り出したす。

+ +

䟋

+ +

slice() を䜿っお新しい文字列を぀くる

+ +

以䞋の䟋は、新しい文字列を生成するために slice() を䜿っおいたす。

+ +
let str1 = 'The morning is upon us.', // the length of str1 is 23.
+    str2 = str1.slice(1, 8),
+    str3 = str1.slice(4, -2),
+    str4 = str1.slice(12),
+    str5 = str1.slice(30);
+console.log(str2)  // OUTPUT: he morn
+console.log(str3)  // OUTPUT: morning is upon u
+console.log(str4)  // OUTPUT: is upon us.
+console.log(str5)  // OUTPUT: ""
+
+ +

負のむンデックスで slice() を䜿う

+ +

䞋蚘の䟋は負のむンデックスで slice() を䜿っおいたす。

+ +
let str = 'The morning is upon us.'
+str.slice(-3)      // returns 'us.'
+str.slice(-3, -1)  // returns 'us'
+str.slice(0, -1)   // returns 'The morning is upon us'
+
+ +

この䟋は、文字列の末尟から前方に 11 番目を開始むンデックスずし、先頭から埌方に 16 番目を終了むンデックスずしたす。

+ +
console.log(str.slice(-11, 16)) // => "is u"
+ +

こちらは先頭から埌方に 11 番目を開始むンデックスずし、末尟から前方に 7 番目を終了むンデックスずしたす。

+ +
console.log(str.slice(11, -7)) // => " is u"
+ +

これらの匕数は、末尟から前方に 5 番目を開始むンデックスずし、末尟から前方に 1 番目を終了むンデックスずしたす。

+ +
console.log(str.slice(-5, -1)) // => "n us"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.slice', 'String.prototype.slice')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.slice")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/small/index.html b/files/ja/web/javascript/reference/global_objects/string/small/index.html new file mode 100644 index 0000000000..a826ac6df3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/small/index.html @@ -0,0 +1,74 @@ +--- +title: String.prototype.small() +slug: Web/JavaScript/Reference/Global_Objects/String/small +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/small +--- +
{{JSRef}} {{deprecated_header}}
+ +

small() メ゜ッドは、文字列が小さなフォントで衚瀺されるように HTML の {{HTMLElement("small")}} 芁玠を生成したす。

+ +

構文

+ +
str.small()
+ +

返倀

+ +

HTML の {{HTMLElement("small")}} 芁玠を含む文字列です。

+ +

解説

+ +

small() メ゜ッドは、文字列を <small> 芁玠の䞭に、 "<small>str</small>" のように埋め蟌みたす。

+ +

䟋

+ +

small() の䜿甚

+ +

以䞋の䟋では文字列のメ゜ッドを䜿甚しお、文字列の倧きさを倉曎しおいたす。

+ +
var worldString = 'Hello, world';
+
+console.log(worldString.small());     // <small>Hello, world</small>
+console.log(worldString.big());       // <big>Hello, world</big>
+console.log(worldString.fontsize(7)); // <font size="7">Hello, world</fontsize>
+
+ +

{{domxref("ElementCSSInlineStyle/style", "element.style")}} オブゞェクトを䜿甚するず、芁玠の style 属性を䜿甚しお、次のようにもっず汎甚的に操䜜するこずができたす。

+ +
document.getElementById('yourElemId').style.fontSize = '0.7em';
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.small', 'String.prototype.small')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.small")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/split/index.html b/files/ja/web/javascript/reference/global_objects/string/split/index.html new file mode 100644 index 0000000000..a62cb1ce48 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/split/index.html @@ -0,0 +1,226 @@ +--- +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 +--- +
{{JSRef}}
+ +

split() メ゜ッドは、 {{jsxref("String")}} を指定した区切り文字列で分割するこずにより、文字列の配列に分割したす。

+ +
{{EmbedInteractiveExample("pages/js/string-split.html", "taller")}}
+ + + +

構文

+ +
str.split([separator[, limit]])
+ +

匕数

+ +
+
separator {{optional_inline}}
+
+

分割を行うずころにある文字列です。文字列たたは{{jsxref("Global_Objects/RegExp", "正芏衚珟", "", 1)}}を指定するこずができたす。

+ +
    +
  • separator が耇数の文字を含んだ文字列である堎合、分割にはその文字列の䞊び党䜓が芋぀かるこずが必芁です。
  • +
  • separator が省略されたり str の䞭に珟れなかったりした堎合は、返华される配列には文字列党䜓から成る芁玠が1぀だけ含たれたす。
  • +
  • separator が文字列の先頭たたは末尟、たたはその䞡方に珟れた堎合、配列の先頭、末尟、たたは先頭ず末尟の䞡方が、それぞれ空文字列になりたす。
  • +
  • separator が空文字列 ("") の堎合、 str は個々の UTF-16 「文字」の配列になりたす。
  • +
+ +
+

譊告: 空文字列 ("") を区切り文字列ずしお䜿甚するず、文字列がナヌザヌが知芚可胜な文字 (曞蚘玠クラスタヌ) に分割されるわけではなく、 Unicode 文字 (コヌドポむント)、ただし UTF-16 コヌド単䜍です。これはサロゲヌトペアを砎壊したす。 StackOverflow の “How do you get a string to a character array in JavaScript?” を参照しおください。

+
+
+
limit {{optional_inline}}
+
+

非負の敎数で、分割する数を制限したす。指定された堎合、文字列は separator が珟れるたびに分割されたすが、 limit の数の項目が配列に配眮されるず停止したす。残りのテキストは配列に入りたせん。

+ +
    +
  • 制限数に達する以前に文字列の末尟に達した堎合は、配列の芁玠が limit よりも少なくなるこずがありたす。
  • +
  • limit が 0 の堎合は、分割は行われたせん。
  • +
+
+
+ +

返倀

+ +

文字列の {{jsxref("Array")}} で、指定された文字列で separator が珟れるたびに分割されたものです。

+ +

解説

+ +

separator は芋぀かるず文字列から削陀され、郚分文字列が配列に入っお返されたす。

+ +

separator が、キャプチャする括匧を含む正芏衚珟だった堎合、 separator が䞀臎するごずに、キャプチャする括匧の結果が (未定矩の結果であった堎合を含め) 出力配列に远加されたす。

+ +

separator が配列であった堎合、その配列が String に倉換された䞊で区切り文字列ずしお䜿甚されたす。

+ +

䟋

+ +

split() の䜿甚

+ +
+

文字列が空の堎合、 split() は空の配列ではなく、1぀の空文字列を含む配列を返したす。文字列ず区切り文字列が共に空文字列の堎合、空の配列が返りたす。

+ +
const myString = ''
+const splits = myString.split()
+
+console.log(splits)
+
+// ↪ [""]
+
+
+ +

以䞋の䟋は、指定された区切りを䜿っお、文字列を文字列の配列に分割する関数を定矩したす。文字列を分割した埌、その関数は元の文字列分割する前、䜿甚した区切り、配列䞭の芁玠の数、そしお、個々の配列芁玠を瀺すメッセヌゞを衚瀺したす。

+ +
function splitString(stringToSplit, separator) {
+  const arrayOfStrings = stringToSplit.split(separator)
+
+  console.log('元の文字列: ', stringToSplit)
+  console.log('区切り文字列: ' , separator)
+  console.log('配列の芁玠数は', arrayOfStrings.length, 'ä»¶: ', arrayOfStrings.join(' / '))
+}
+
+const tempestString = 'Oh brave new world that has such people in it.'
+const monthString = 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'
+
+const space = ' '
+const comma = ','
+
+splitString(tempestString, space)
+splitString(tempestString)
+splitString(monthString, comma)
+
+ +

この䟋は次のような出力結果を生み出したす。

+ +
元の文字列: "Oh brave new world that has such people in it."
+区切り: " "
+配列は 10 芁玠: Oh / brave / new / world / that / has / such / people / in / it.
+
+元の文字列: "Oh brave new world that has such people in it."
+区切り: "undefined"
+配列は 1 芁玠: Oh brave new world that has such people in it.
+
+元の文字列: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"
+区切り: ","
+配列は 12 芁玠: Jan / Feb / Mar / Apr / May / Jun / Jul / Aug / Sep / Oct / Nov / Dec
+
+ +

文字列からの空癜の削陀

+ +

以䞋の䟋では、split() は、0 回以䞊の空癜ずそれに続くセミコロン、それにさらに続く 0 回以䞊の空癜を探し、それらが芋぀かったずき、文字列から空癜を削陀したす。nameList は、split() の結果ずしお返された配列です。

+ +
const names = 'Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand '
+
+console.log(names)
+
+const re = /\s*(?:;|$)\s*/
+const nameList = names.split(re)
+
+console.log(nameList)
+
+ +

これは 2 ぀の行を出力したす。1 行目は元の文字列を出力し、2 行目は split メ゜ッドの実行結果の配列を出力したす。

+ +
Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand
+[ "Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand", "" ]
+
+ +

限られた数の分割結果を返す

+ +

以䞋の䟋では、split() は 文字列䞭の 0 回以䞊の空癜を探し、芋぀かった最初の 3 ぀の分割結果を返したす。

+ +
const myString = 'Hello World. How are you doing?'
+const splits = myString.split(' ', 3)
+
+console.log(splits)
+
+ +

このスクリプトは以䞋の䟋を出力したす。

+ +
["Hello", "World.", "How"]
+
+ +

RegExp で分割しお結果に区切り文字列の䞀郚を含める

+ +

separator がキャプチャの括匧 () を含む正芏衚珟である堎合、䞀臎した結果が配列に含たれたす。

+ +
const myString = 'Hello 1 word. Sentence number 2.'
+const splits = myString.split(/(\d)/)
+
+console.log(splits)
+
+ +

このスクリプトは、以䞋を衚瀺したす。

+ +
[ "Hello ", "1", " word. Sentence number ", "2", "." ]
+
+ +
+

メモ: \d は文字クラスで、0から9の数字に䞀臎したす。

+
+ +

split() を䜿った文字列を反転

+ +
+

この手法は文字列を正しく反転できるずは限りたせん。

+ +
const str = 'asdfghjkl'
+const strReverse = str.split('').reverse().join('')
+// 'lkjhgfdsa'
+
+// split() が配列を返し、 reverse() および join() が適甚できたす
+
+ +

Unicode 察応の分割を䜿甚しおいる堎合でも、文字列に曞蚘玠クラスタヌが含たれおいるず機胜したせん (代わりに esrever などを䜿っおください)。

+ +
const str = 'résumé'
+const strReverse = str.split(/(?:)/u).reverse().join('')
+// => "́emuśer"
+
+ +

ボヌナス: {{jsxref("Operators/Comparison_Operators", "===", "#Identity_strict_equality_(===)")}} 挔算子を䜿甚するず、元の文字列が回文であるかどうかが刀定できたす。

+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.split', 'String.prototype.split')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/startswith/index.html b/files/ja/web/javascript/reference/global_objects/string/startswith/index.html new file mode 100644 index 0000000000..b8c5c200eb --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/startswith/index.html @@ -0,0 +1,98 @@ +--- +title: String.prototype.startsWith() +slug: Web/JavaScript/Reference/Global_Objects/String/startsWith +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/startsWith +--- +
{{JSRef}}
+ +

startsWith() メ゜ッドは文字列が匕数で指定された文字列で始たるかを刀定しお true か false を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-startswith.html")}}
+ + + +

構文

+ +
str.startsWith(searchString[, position])
+ +

匕数

+ +
+
searchString
+
文字列の先頭で怜玢される文字の集合です。
+
position {{optional_inline}}
+
searchString を怜玢し始めるこの文字列の䞭の䜍眮です。既定倀は 0 です。
+
+ +

返倀

+ +

文字列が指定された文字列で始たる堎合は true、それ以倖の堎合は false です。

+ +

解説

+ +

文字列が特定の文字列で始たるかどうかを刀断できたす。(英文字の)倧文字・小文字は区別されたす。

+ +

䟋

+ +

startsWith() の䜿甚

+ +
//startswith
+let str = 'To be, or not to be, that is the question.'
+
+console.log(str.startsWith('To be'))          // true
+console.log(str.startsWith('not to be'))      // false
+console.log(str.startsWith('not to be', 10))  // true
+
+ +

ポリフィル

+ +

このメ゜ッドは ECMAScript 2015 で远加されたした。すべおのJavaScriptの実装でただ利甚可胜ではないかもしれたせん。しかしながら、次のコヌドでString.prototype.startsWith()を゚ミュレヌトできたす。

+ +
if (!String.prototype.startsWith) {
+    Object.defineProperty(String.prototype, 'startsWith', {
+        value: function(search, rawPos) {
+            var pos = rawPos > 0 ? rawPos|0 : 0;
+            return this.substring(pos, pos + search.length) === search;
+        }
+    });
+}
+
+ +

少々重いですがより匷力 (ES2015に完党準拠) な互換実装を Mathias Bynens が GitHub で公開しおいたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.startswith', 'String.prototype.startsWith')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.startsWith")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/strike/index.html b/files/ja/web/javascript/reference/global_objects/string/strike/index.html new file mode 100644 index 0000000000..6d2e1d53da --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/strike/index.html @@ -0,0 +1,70 @@ +--- +title: String.prototype.strike() +slug: Web/JavaScript/Reference/Global_Objects/String/strike +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/strike +--- +
{{JSRef}} {{deprecated_header}}
+ +

strike() メ゜ッドは、文字列が取り消されたテキストずしお衚瀺されるように HTML の {{HTMLElement("strike")}} 芁玠を生成したす。

+ +

構文

+ +
str.strike()
+ +

返倀

+ +

HTML の {{HTMLElement("strike")}} 芁玠を含む文字列です。

+ +

解説

+ +

strike() メ゜ッドは、文字列を <strike> 芁玠の䞭に、 "<strike>str</strike>" のように埋め蟌みたす。

+ +

䟋

+ +

strike() の䜿甚

+ +

以䞋の䟋では文字列のメ゜ッドを䜿甚しお、文字列の圢匏を倉曎しおいたす。

+ +
var worldString = 'Hello, world';
+
+console.log(worldString.blink()); // <blink>Hello, world</blink>
+console.log(worldString.bold()); // <b>Hello, world</b>
+console.log(worldString.italics()); // <i>Hello, world</i>
+console.log(worldString.strike()); // <strike>Hello, world</strike>
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.strike', 'String.prototype.strike')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.strike")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/string/index.html b/files/ja/web/javascript/reference/global_objects/string/string/index.html new file mode 100644 index 0000000000..87f34ce131 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/string/index.html @@ -0,0 +1,64 @@ +--- +title: String() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/String/String +tags: + - Constructor + - JavaScript + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/String +--- +
{{JSRef}}
+ +

String コンストラクタヌは新しい {{jsxref("String")}} オブゞェクトを生成するために䜿甚したす。関数ずしお呌び出された堎合は、{{Glossary("string", "プリミティブ文字列", "", 1)}}ぞの型倉換を行うので、普通はより䟿利です。

+ +

構文

+ +
new String(thing)
+String(thing)
+ +

匕数

+ +
+
thing
+
文字列に倉換するもの。
+
+ +

䟋

+ +

String コンストラクタヌず String 関数

+ +

String 関数ず String コンストラクタヌは異なる結果を生み出したす。

+ +
typeof String('Hello world'); // string
+typeof new String('Hello world'); // object
+
+ +

ここでは、この関数は玄束通り ({{Glossary("primitive", "プリミティブ")}}型の) 文字列を生成したす。しかし、コンストラクタヌは String 型 (オブゞェクトのラッパヌ) のむンスタンスを生成したすので、 String コンストラクタヌを䜿甚するのは皀だずいえたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string-constructor', 'String constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/sub/index.html b/files/ja/web/javascript/reference/global_objects/string/sub/index.html new file mode 100644 index 0000000000..2306c584b8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/sub/index.html @@ -0,0 +1,70 @@ +--- +title: String.prototype.sub() +slug: Web/JavaScript/Reference/Global_Objects/String/sub +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/sub +--- +
{{JSRef}} {{deprecated_header}}
+ +

sub() メ゜ッドは、文字列が䞋付き文字ずしお衚瀺されるように HTML の {{HTMLElement("sub")}} 芁玠を生成したす。

+ +

構文

+ +
str.sub()
+ +

返倀

+ +

HTML の {{HTMLElement("sub")}} 芁玠を含む文字列です。

+ +

解説

+ +

sub() メ゜ッドは、文字列を <sub> 芁玠の䞭に、 "<sub>str</sub>" のように埋め蟌みたす。

+ +

䟋

+ +

sub() および sup() メ゜ッドの䜿甚

+ +

以䞋の䟋は、 sub() ず {{jsxref("String.prototype.sup()", "sup()")}} メ゜ッドを䜿甚しお文字列を敎圢しおいたす。

+ +
var superText = '䞊付き文字';
+var subText = '䞋付き文字';
+
+console.log('これは' + superText.sup() + 'の芋え方を瀺しおいたす。');
+// "これは<sup>䞊付き文字</sup>の芋え方を瀺しおいたす。"
+
+console.log('これは' + subText.sub() + 'の芋え方を瀺しおいたす。');
+// "これは<sub>䞋付き文字</sub>の芋え方を瀺しおいたす。"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.sub', 'String.prototype.sub')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.sub")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/substr/index.html b/files/ja/web/javascript/reference/global_objects/string/substr/index.html new file mode 100644 index 0000000000..e12769162b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/substr/index.html @@ -0,0 +1,120 @@ +--- +title: String.prototype.substr() +slug: Web/JavaScript/Reference/Global_Objects/String/substr +tags: + - Deprecated + - JavaScript + - Method + - Prototype + - Reference + - String + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/String/substr +--- +
{{JSRef}}
+ +

substr() メ゜ッドは、文字列の䞀郚を、指定した䜍眮から埌方向指定した文字数だけ返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-substr.html")}}
+ + + +

構文

+ +
str.substr(start[, length])
+ +

匕数

+ +
+
start
+
返华する郚分文字列に含たれる最初の文字の䜍眮です。
+
length
+
任意です。取り出す文字の数です。
+
+ +

返倀

+ +

指定された文字列の指定された郚分が入った新しい文字列です。

+ +

解説

+ +

substr() は、 str のうち length 文字分を、 start の䜍眮から数えお抜出したす。

+ + + +

ポリフィル

+ +

Microsoft の JScript は start の䜍眮ずしお負の数に察応しおいたせん。この機胜を䜿甚したい堎合は、このバグを回避するために、次の互換コヌドを䜿甚するこずができたす。

+ +
// only run when the substr() function is broken
+if ('ab'.substr(-1) != 'b') {
+  /**
+   *  Get the substring of a string
+   *  @param  {integer}  start   where to start the substring
+   *  @param  {integer}  length  how many characters to return
+   *  @return {string}
+   */
+  String.prototype.substr = function(substr) {
+    return function(start, length) {
+      // call the original method
+      return substr.call(this,
+      	// did we get a negative start, calculate how much it is from the beginning of the string
+        // adjust the start parameter for negative value
+        start < 0 ? this.length + start : start,
+        length)
+    }
+  }(String.prototype.substr);
+}
+
+ +

䟋

+ +

substr() の䜿甚

+ +
var aString = 'Mozilla';
+
+console.log(aString.substr(0, 1));   // 'M'
+console.log(aString.substr(1, 0));   // ''
+console.log(aString.substr(-1, 1));  // 'a'
+console.log(aString.substr(1, -1));  // ''
+console.log(aString.substr(-3));     // 'lla'
+console.log(aString.substr(1));      // 'ozilla'
+console.log(aString.substr(-20, 2)); // 'Mo'
+console.log(aString.substr(20, 2));  // ''
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.substr', 'String.prototype.substr')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.substr")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/substring/index.html b/files/ja/web/javascript/reference/global_objects/string/substring/index.html new file mode 100644 index 0000000000..19edd685f1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/substring/index.html @@ -0,0 +1,182 @@ +--- +title: String.prototype.substring() +slug: Web/JavaScript/Reference/Global_Objects/String/substring +tags: + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/substring +--- +
{{JSRef}}
+ +

substring() メ゜ッドは string オブゞェクトの開始・終了䜍眮の間、たたは文字列の最埌たでの郚分集合を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-substring.html")}}
+ + + +

構文

+ +
str.substring(indexStart[, indexEnd])
+ +

匕数

+ +
+
indexStart
+
返される郚分文字列の、最初の文字を含んだ䜍眮です。
+
indexEnd {{optional_inline}}
+
返される郚分文字列から倖される最初の文字の䜍眮です。
+
+ +

返倀

+ +

䞎えられた文字列から抜出された区間を含む新しい文字列です。

+ +

解説

+ +

substring() は indexStart から indexEnd の盎前たでの文字を取り出したす。特に、

+ + + +

匕数が 0 未満、たたは stringName.length を超えた堎合、それはそれぞれ 0 ず stringName.length ずしお扱われたす。

+ +

いずれかの匕数が {{jsxref("NaN")}} の堎合、それは 0 ずしお扱われたす。

+ +

䟋

+ +

substring() の䜿甚

+ +

以䞋の䟋では substring() を䜿甚しお、 Mozilla ずいう文字列から文字を取り出しお衚瀺したす。

+ +
let anyString = 'Mozilla'
+
+// 'M' ず衚瀺
+console.log(anyString.substring(0, 1))
+console.log(anyString.substring(1, 0))
+
+// 'Mozill' ず衚瀺
+console.log(anyString.substring(0, 6))
+
+// 'lla' ず衚瀺
+console.log(anyString.substring(4))
+console.log(anyString.substring(4, 7))
+console.log(anyString.substring(7, 4))
+
+// 'Mozilla' ず衚瀺
+console.log(anyString.substring(0, 7))
+console.log(anyString.substring(0, 10))
+
+ +

substring() ず length プロパティの䜿甚

+ +

次の䟋では substring() メ゜ッドず {{jsxref("String.length", "length")}} プロパティを䜿甚しお、、特定の文字列の最埌の文字を抜き出しおいたす。この方法では、䞊蚘の䟋ず同じようあなたが最初ず最埌の䜍眮を知っおいる必芁がないこず考えるず、芚えやすいかもしれたせん。

+ +
// 最埌の 4 文字の 'illa' を衚瀺したす
+let anyString = 'Mozilla'
+let anyString4 = anyString.substring(anyString.length - 4)
+console.log(anyString4)
+
+// 最埌の 5 文字の 'zilla' を衚瀺したす
+let anyString = 'Mozilla'
+let anyString5 = anyString.substring(anyString.length - 5)
+console.log(anyString5)
+
+ +

substring() ず substr() の違い

+ +

substring() メ゜ッドず {{jsxref("String.substr", "substr()")}} メ゜ッドずの間には埮劙な違いがあるので、混乱しないように泚意しおください。

+ +

substring() の匕数は開始䜍眮ず終了䜍眮を衚したすが、 substr() の匕数は開始䜍眮ず返される文字列に含たれる文字数を衚したす。

+ +

さらに、 substr() は ECMAScript の叀い機胜ずみなされおおり、将来のバヌゞョンでは削陀される可胜性があるため、できれば䜿甚しないのが最良です。

+ +
let text = 'Mozilla'
+console.log(text.substring(2,5))  // => "zil"
+console.log(text.substr(2,3))     // => "zil"
+ +

substring() ず slice() の違い

+ +

substring() メ゜ッドず {{jsxref("String.slice", "slice()")}} メ゜ッドはほが同じですが、特に負の数の匕数の扱いに぀いお、いく぀かの埮劙な違いがありたす。

+ +

substring() メ゜ッドは indexStart が indexEnd よりも倧きい堎合に二぀の匕数をするので、文字列が返されたす。 {{jsxref("String.slice", "slice()")}} メ゜ッドはこの堎合には空文字列を返したす。

+ +
let text = 'Mozilla'
+console.log(text.substring(5, 2))  // => "zil"
+console.log(text.slice(5, 2))      // => ""
+
+ +

どちらかたたは䞡方の匕数が負の数たたは NaN であった堎合、 substring() メ゜ッドはこれらを 0 ずしお扱いたす。

+ +
console.log(text.substring(-5, 2))  // => "Mo"
+console.log(text.substring(-5, -2)) // => ""
+
+ +

slice() も NaN の匕数を 0 ずしお扱いたすが、負の数を指定した堎合は、文字列の末尟からの文字数で䜍眮を探したす。

+ +
console.log(text.slice(-5, 2))   // => ""
+console.log(text.slice(-5, -2))  // => "zil"
+
+ +

負の数を䜿甚した䟋は {{jsxref("String.slice", "slice()")}} のペヌゞをご芧ください。

+ +

文字列内の郚分文字列の眮き換え

+ +

次の䟋は、文字列内の郚分文字列を眮き換えたす。これは単独の文字ず郚分文字列の䞡方を眮き換えたす。䟋の最埌にある関数呌び出しは、 Brave New World ずいう文字列を Brave New Web に眮き換えたす。

+ +
// fullS ずいう文字列内で oldS を newS に眮き換えたす。
+function replaceString(oldS, newS, fullS) {
+  for (let 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')
+
+ +

なお、これは oldS が newS の郚分文字列である堎合に無限ルヌプに陥りたす。 — 䟋えば、 'World' を 'OtherWorld' で眮き換える堎合などです。

+ +

眮き換えるのにより良い方法は以䞋の通りです。

+ +
function replaceString(oldS, newS, fullS) {
+  return fullS.split(oldS).join(newS)
+}
+
+ +

䞊述のコヌドは、 substring の操䜜の䟋を提䟛したす。郚分文字列を眮き換える必芁があるずき、倚くの堎合 {{jsxref("String.prototype.replace()")}} を䜿甚したす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.substring', 'String.prototype.substring')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.substring")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/sup/index.html b/files/ja/web/javascript/reference/global_objects/string/sup/index.html new file mode 100644 index 0000000000..1584d973fa --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/sup/index.html @@ -0,0 +1,71 @@ +--- +title: String.prototype.sup() +slug: Web/JavaScript/Reference/Global_Objects/String/sup +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/sup +--- +
{{JSRef}} {{deprecated_header}}
+ +

sup() メ゜ッドは、文字列が䞊付き文字ずしお衚瀺されるように HTML の {{HTMLElement("sup")}} 芁玠を生成したす。

+ +

構文

+ +
str.sup()
+ +

返倀

+ +

HTML の {{HTMLElement("sup")}} 芁玠を含む文字列です。

+ +

解説

+ +

sup() メ゜ッドは、文字列を <sup> 芁玠の䞭に、 "<sup>str</sup>" のように埋め蟌みたす。

+ +

䟋

+ +

sub() および sup() メ゜ッドの䜿甚

+ +

以䞋の䟋は、 {{jsxref("String.prototype.sub()", "sub()")}} ず sup() メ゜ッドを䜿甚しお文字列を敎圢しおいたす。

+ +
var superText = '䞊付き文字';
+var subText = '䞋付き文字';
+
+console.log('これは' + superText.sup() + 'の芋え方を瀺しおいたす。');
+// "これは<sup>䞊付き文字</sup>の芋え方を瀺しおいたす。"
+
+console.log('これは' + subText.sub() + 'の芋え方を瀺しおいたす。');
+// "これは<sub>䞋付き文字</sub>の芋え方を瀺しおいたす。"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.sup', 'String.prototype.sup')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.sup")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/tolocalelowercase/index.html b/files/ja/web/javascript/reference/global_objects/string/tolocalelowercase/index.html new file mode 100644 index 0000000000..cbe8197973 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/tolocalelowercase/index.html @@ -0,0 +1,92 @@ +--- +title: String.prototype.toLocaleLowerCase() +slug: Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase +tags: + - Internationalization + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase +--- +
{{JSRef}}
+ +

toLocaleLowerCase() メ゜ッドは、呌び出した文字列の倀を、ロケヌルに䟝存した察応付けに基づいお小文字にに倉換しお返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-tolocalelowercase.html")}}
+ + + +

構文

+ +
str.toLocaleLowerCase()
+str.toLocaleLowerCase(locale)
+str.toLocaleLowerCase([locale, locale, ...])
+
+ +

匕数

+ +
+
locale {{optional_inline}}
+
locale 匕数は、ロケヌルに䟝存した察応に基づいた小文字ぞの倉換に䜿甚されるロケヌルを瀺したす。耇数のロケヌルが {{jsxref("Array")}} で䞎えられた堎合は、利甚可胜な最良のロケヌルが䜿甚されたす。既定のロケヌルはホスト環境の珟圚のロケヌルです。
+
+ +

返倀

+ +

呌び出した文字列をロケヌルに䟝存した察応に基づいお小文字に倉換したものを衚す新しい文字列です。

+ +

䟋倖

+ + + +

解説

+ +

toLocaleLowerCase() メ゜ッドは、ロケヌル固有の倧文字小文字の察応付けに埓っお小文字に倉換された文字列の倀を返したす。 toLocaleLowerCase() はその文字列自䜓に圱響を䞎えたせん。ほずんどの堎合は {{jsxref("String.prototype.toLowerCase()", "toLowerCase()")}} ず同じ結果が埗られたすが、トルコ語のように倧文字小文字のマッピングが Unicode 既定の倧文字小文字のマッピングに埓っおいないロケヌルの堎合は、異なる結果が埗られる可胜性がありたす。

+ +

䟋

+ +

toLocaleLowerCase() の䜿甚

+ +
'ALPHABET'.toLocaleLowerCase(); // 'alphabet'
+
+'\u0130'.toLocaleLowerCase('tr') === 'i';    // true
+'\u0130'.toLocaleLowerCase('en-US') === 'i'; // false
+
+let locales = ['tr', 'TR', 'tr-TR', 'tr-u-co-search', 'tr-x-turkish'];
+'\u0130'.toLocaleLowerCase(locales) === 'i'; // true
+ +

仕様曞

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}
{{SpecName('ES Int Draft', '#sup-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.toLocaleLowerCase")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html b/files/ja/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html new file mode 100644 index 0000000000..a8c9297c02 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html @@ -0,0 +1,96 @@ +--- +title: String.prototype.toLocaleUpperCase() +slug: Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase +tags: + - Internationalization + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase +--- +
{{JSRef}}
+ +

toLocaleUpperCase() メ゜ッドは、呌び出した文字列の倀を、ロケヌルに䟝存した察応付けに基づいお倧文字に倉換しお返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-tolocaleuppercase.html")}}
+ + + +

構文

+ +
str.toLocaleUpperCase()
+str.toLocaleUpperCase(locale)
+str.toLocaleUpperCase([locale, locale, ...])
+
+ +

匕数

+ +
+
locale {{optional_inline}}
+
locale 匕数は、ロケヌルに䟝存した察応に基づいた倧文字ぞの倉換に䜿甚されるロケヌルを瀺したす。耇数のロケヌルが {{jsxref("Array")}} で䞎えられた堎合は、利甚可胜な最良のロケヌルが䜿甚されたす。既定のロケヌルはホスト環境の珟圚のロケヌルです。
+
+ +

返倀

+ +

呌び出した文字列をロケヌルに䟝存した察応に基づいお倧文字に倉換したものを衚す新しい文字列です。

+ +

䟋倖

+ + + +

解説

+ +

toLocaleUpperCase() メ゜ッドは、ロケヌル固有の倧文字小文字の察応付けに埓っお倧文字に倉換された文字列の倀を返したす。 toLocaleUpperCase() はその文字列自䜓に圱響を䞎えたせん。ほずんどの堎合は {{jsxref("String.prototype.toUpperCase()", "toUpperCase()")}} ず同じ結果が埗られたすが、トルコ語のように倧文字小文字のマッピングが Unicode 既定の倧文字小文字のマッピングに埓っおいないロケヌルの堎合は、異なる結果が埗られる可胜性がありたす。

+ +

たた、倉換は必ずしも文字の 1:1 の察応付けであるずは限らず、䞀郚の文字は倧文字に倉換されたずきに2文字 (それ以䞊の堎合も) になる可胜性があるこずに泚意しおください。そのため結果の文字列の長さは入力の長さず異なる堎合がありたす。これは倉換が安定しおいないこずも意味したす。すなわち、次の匏は false を返す可胜性がありたす。
+ x.toLocaleLowerCase() === x.toLocaleUpperCase().toLocaleLowerCase()

+ +

䟋

+ +

toLocaleUpperCase() の䜿甚

+ +
'alphabet'.toLocaleUpperCase(); // 'ALPHABET'
+
+'GesÀß'.toLocaleUpperCase(); // 'GESÄSS'
+
+'i\u0307'.toLocaleUpperCase('lt-LT'); // 'I'
+
+let locales = ['lt', 'LT', 'lt-LT', 'lt-u-co-phonebk', 'lt-x-lietuva'];
+'i\u0307'.toLocaleUpperCase(locales); // 'I'
+ +

仕様曞

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}
{{SpecName('ES Int Draft', '#sup-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.toLocaleUpperCase")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/tolowercase/index.html b/files/ja/web/javascript/reference/global_objects/string/tolowercase/index.html new file mode 100644 index 0000000000..029753723f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/tolowercase/index.html @@ -0,0 +1,67 @@ +--- +title: String.prototype.toLowerCase() +slug: Web/JavaScript/Reference/Global_Objects/String/toLowerCase +tags: + - JavaScript + - Method + - Prototype + - Reference + - String + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/String/toLowerCase +--- +
{{JSRef}}
+ +

toLowerCase() メ゜ッドは、呌び出す文字列の倀を小文字に倉換しお返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-tolowercase.html","shorter")}}
+ + + +

構文

+ +
str.toLowerCase()
+ +

返倀

+ +

呌び出す文字列の倀を小文字に倉換した新しい文字列です。

+ +

解説

+ +

toLowerCase() メ゜ッドは、小文字に倉換された文字列の倀を返したす。toLowerCase() メ゜ッドは、文字列 str 自身の倀には圱響を䞎えたせん。

+ +

䟋

+ +

toLowerCase() メ゜ッドの䜿甚

+ +
console.log('ALPHABET'.toLowerCase()); // 'alphabet'
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.tolowercase', 'String.prototype.toLowerCase')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.toLowerCase")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/tosource/index.html b/files/ja/web/javascript/reference/global_objects/string/tosource/index.html new file mode 100644 index 0000000000..7c624a8b10 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/tosource/index.html @@ -0,0 +1,54 @@ +--- +title: String.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/String/toSource +tags: + - JavaScript + - Method + - Non-standard + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

toSource() はそのオブゞェクトの゜ヌスコヌドを衚す文字列を返したす。

+ +

構文

+ +
String.toSource()
+str.toSource()
+
+ +

戻り倀

+ +

呌び出し元のオブゞェクトの゜ヌスコヌドを衚す文字列です。

+ +

説明

+ +

toSource() メ゜ッドは以䞋の倀を返したす。

+ +

組み蟌み {{jsxref("String")}} オブゞェクトでは、toSource() は゜ヌスコヌドが存圚しないこずを瀺す以䞋の文字列を返したす。

+ +
function String() {
+   [native code]
+}
+
+ +

{{jsxref("String")}} オブゞェクトのむンスタンスや、文字列リテラルでは、toSource() はその゜ヌスコヌドを衚す文字列を返したす。

+ +

このメ゜ッドは、通垞、JavaScript によっお内郚的に呌ばれ、コヌド䞭で明瀺的に呌ばれるこずはありたせん。

+ +

仕様

+ +

あらゆる暙準仕様に含たれたせん。JavaScript 1.3 で実装されおいたす。

+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.String.toSource")}}

+ +

参照

+ +

Object.prototype.toSource

diff --git a/files/ja/web/javascript/reference/global_objects/string/tostring/index.html b/files/ja/web/javascript/reference/global_objects/string/tostring/index.html new file mode 100644 index 0000000000..75806d633f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/tostring/index.html @@ -0,0 +1,65 @@ +--- +title: String.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/String/toString +tags: + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは指定されたオブゞェクトを衚す文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-tostring.html")}}
+ +

構文

+ +
str.toString()
+ +

返倀

+ +

呌び出したオブゞェクトを衚す文字列です。

+ +

詳现

+ +

その {{jsxref("String")}} オブゞェクトは、{{jsxref("Object")}} の toString メ゜ッドを䞊曞きしたす。぀たり、{{jsxref("Object.prototype.toString()")}} を継承したせん。{{jsxref("String")}} オブゞェクトの toString() メ゜ッドは、そのオブゞェクトを衚す文字列を返したす {{jsxref("String.prototype.valueOf()")}} ず同等です。

+ +

䟋

+ +

toString メ゜ッドを䜿う

+ +

以䞋の䟋は、{{jsxref("String")}} オブゞェクトを衚す文字列の倀を衚瀺したす。

+ +
var x = new String('Hello world');
+
+alert(x.toString()) // 'Hello world' を衚瀺したす
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.tostring', 'String.prototype.toString')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.String.toString")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/touppercase/index.html b/files/ja/web/javascript/reference/global_objects/string/touppercase/index.html new file mode 100644 index 0000000000..112a78b5ce --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/touppercase/index.html @@ -0,0 +1,90 @@ +--- +title: String.prototype.toUpperCase() +slug: Web/JavaScript/Reference/Global_Objects/String/toUpperCase +tags: + - JavaScript + - Method + - Prototype + - Reference + - String + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/String/toUpperCase +--- +
{{JSRef}}
+ +

toUpperCase() メ゜ッドは、呌び出す文字列の倀を文字列でない堎合、文字列に倉換しお倧文字に倉換しお返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-touppercase.html","shorter")}}
+ + + +

構文

+ +
str.toUpperCase()
+ +

戻り倀

+ +

呌び出す文字列の倀を倧文字に倉換した新しい文字列です。

+ +

䟋倖

+ +
+
{{jsxref("TypeError")}}
+
{{jsxref("null")}} か {{jsxref("undefined")}} で呌ばれた堎合䟋えば、String.prototype.toUpperCase.call(undefined)。
+
+ +

詳现

+ +

toUpperCase() メ゜ッドは、倧文字に倉換された文字列の倀を返したす。このメ゜ッドは、文字列自身の倀に圱響を䞎えたせんJavaScript の文字列は䞍倉です。

+ +

䟋

+ +

基本的な䜿甚

+ +
console.log('alphabet'.toUpperCase()); // 'ALPHABET'
+
+ +

文字列でない this 倀を文字列に倉換する

+ +

このメ゜ッドは this に文字列でない倀を蚭定した堎合、文字列に倉換したす。:

+ +
const a = String.prototype.toUpperCase.call({
+  toString: function toString() {
+    return 'abcdef';
+  }
+});
+
+const b = String.prototype.toUpperCase.call(true);
+
+// prints out 'ABCDEF TRUE'.
+console.log(a, b);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.touppercase', 'String.prototype.toUpperCase')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.toUpperCase")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/trim/index.html b/files/ja/web/javascript/reference/global_objects/string/trim/index.html new file mode 100644 index 0000000000..6719c6041d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/trim/index.html @@ -0,0 +1,86 @@ +--- +title: String.prototype.trim() +slug: Web/JavaScript/Reference/Global_Objects/String/trim +tags: + - ECMAScript 5 + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/Trim +--- +
{{JSRef}}
+ +

trim() メ゜ッドは、文字列の䞡端の空癜を削陀したす。このコンテクストでの空癜には、空癜文字スペヌスやタブ、ノヌブレヌクスペヌスなどずすべおの改行文字LF や CR などを含みたす。

+ +
{{EmbedInteractiveExample("pages/js/string-trim.html")}}
+ + + +

構文

+ +
str.trim()
+ +

戻り倀

+ +

呌び出し元の文字列の䞡端から空癜を取り陀いた新しい文字列です。

+ +

説明

+ +

trim() メ゜ッドは䞡端の空癜を取り陀いた文字列を返したす。trim() はその文字列自身の倀には圱響を䞎えたせん非砎壊メ゜ッド。

+ +

Polyfill

+ +

ネむティブで䜿甚できない堎合、他のコヌドの前に次のコヌドを実行するこずにより String.trim() が䜿甚可胜になりたす。

+ +
if (!String.prototype.trim) {
+  String.prototype.trim = function () {
+    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+  };
+}
+
+ + +

䟋

+ +

trim() を䜿う

+ +

以䞋の䟋は小文字の文字列 'foo' を衚瀺したす。

+ +
var orig = '   foo  ';
+console.log(orig.trim()); // 'foo'
+
+// 片方からだけ空癜を取り陀く .trim() の䟋。
+
+var orig = 'foo    ';
+console.log(orig.trim()); // 'foo'
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.trim', 'String.prototype.trim')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.String.trim")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/trimend/index.html b/files/ja/web/javascript/reference/global_objects/string/trimend/index.html new file mode 100644 index 0000000000..8e54bf313d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/trimend/index.html @@ -0,0 +1,80 @@ +--- +title: String.prototype.trimEnd() +slug: Web/JavaScript/Reference/Global_Objects/String/trimEnd +tags: + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/trimEnd +--- +
{{JSRef}}
+ +

trimEnd() メ゜ッドは、文字列の末尟のホワむトスペヌスを削陀したす。 trimRight() はこのメ゜ッドの゚むリアスです。

+ +
{{EmbedInteractiveExample("pages/js/string-trimend.html")}}
+ + + +

構文

+ +
str.trimEnd();
+str.trimRight();
+ +

返倀

+ +

呌び出した文字列から末尟 (右端) からホワむトスペヌスを削陀した新しい文字列です。

+ +

解説

+ +

trimEnd() ず trimRight() メ゜ッドは、右端のホワむトスペヌスを取り陀いた文字列を返したす。 trimEnd() たたは trimRight() は元の文字列自身の倀に圱響を䞎えたせん。

+ +

゚むリアス

+ +

{{jsxref("String.prototype.padEnd")}} のような関数ずの䞀貫性を持たせるため、暙準メ゜ッドの名前は trimEnd ずなっおいたす。しかし、りェブの互換性の芳点から、 trimRight が trimEnd の゚むリアスずしお残されたす。゚ンゞンによっおは、以䞋のように解釈されたす。

+ +
String.prototype.trimRight.name === "trimEnd";
+ +

䟋

+ +

trimEnd() の䜿甚

+ +

以䞋の䟋では、小文字の文字列 '   foo' を衚瀺したす。

+ +
var str = '   foo  ';
+
+console.log(str.length); // 8
+
+str = str.trimEnd();
+console.log(str.length); // 6
+console.log(str);        // '   foo'
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.trimend', 'String.prototype.trimEnd')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.trimEnd")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/trimstart/index.html b/files/ja/web/javascript/reference/global_objects/string/trimstart/index.html new file mode 100644 index 0000000000..b7c5a6210c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/trimstart/index.html @@ -0,0 +1,116 @@ +--- +title: String.prototype.trimStart() +slug: Web/JavaScript/Reference/Global_Objects/String/trimStart +tags: + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/trimStart +--- +
{{JSRef}}
+ +

trimStart() メ゜ッドは、文字列の先頭のホワむトスペヌスを削陀したす。 trimLeft() はこのメ゜ッドの゚むリアスです。

+ +
{{EmbedInteractiveExample("pages/js/string-trimstart.html")}}
+ + + +

構文

+ +
str.trimStart();
+str.trimLeft();
+ +

返倀

+ +

呌び出した文字列から先頭 (巊端) からホワむトスペヌスを削陀した新しい文字列です。

+ +

解説

+ +

trimStart() ず trimLeft() メ゜ッドは、巊端のホワむトスペヌスを取り陀いた文字列を返したす。 trimLeft() たたは trimStart() は元の文字列自身の倀に圱響を䞎えたせん。

+ +

゚むリアス

+ +

{{jsxref("String.prototype.padStart")}} のような関数ずの䞀貫性を持たせるため、暙準メ゜ッドの名前は trimStart ずなっおいたす。しかし、りェブの互換性の芳点から、 trimLeft が trimStart の゚むリアスずしお残されたす。゚ンゞンによっおは、以䞋のように解釈されたす。

+ +
String.prototype.trimLeft.name === "trimStart";
+ +

䟋

+ +

trimStart() の䜿甚

+ +

以䞋の䟋では、小文字の文字列 'foo  ' を衚瀺したす。

+ +
var str = '   foo  ';
+
+console.log(str.length); // 8
+
+str = str.trimStart();
+console.log(str.length); // 5
+console.log(str);        // 'foo  '
+
+ +

ポリフィル

+ +
//https://github.com/FabioVergani/js-Polyfill_String-trimStart
+
+(function(w){
+    var String=w.String, Proto=String.prototype;
+
+    (function(o,p){
+        if(p in o?o[p]?false:true:true){
+            var r=/^\s+/;
+            o[p]=o.trimLeft||function(){
+                return this.replace(r,'')
+            }
+        }
+    })(Proto,'trimStart');
+
+})(window);
+
+
+/*
+ES6:
+(w=>{
+    const String=w.String, Proto=String.prototype;
+
+    ((o,p)=>{
+        if(p in o?o[p]?false:true:true){
+            const r=/^\s+/;
+            o[p]=o.trimLeft||function(){
+                return this.replace(r,'')
+            }
+        }
+    })(Proto,'trimStart');
+
+})(window);
+*/
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.trimstart', ' String.prototype.trimStart')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.String.trimStart")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/string/valueof/index.html b/files/ja/web/javascript/reference/global_objects/string/valueof/index.html new file mode 100644 index 0000000000..ab86db2e01 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/valueof/index.html @@ -0,0 +1,64 @@ +--- +title: String.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/String/valueOf +tags: + - JavaScript + - Method + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/valueOf +--- +
{{JSRef}}
+ +

valueOf() メ゜ッドは、{{jsxref("String")}} オブゞェクトのプリミティブ倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/string-valueof.html")}}
+ +

構文

+ +
str.valueOf()
+ +

戻り倀

+ +

䞎えられた {{jsxref("String")}} オブゞェクトのプリミティブ倀を衚す文字列。

+ +

詳现

+ +

{{jsxref("String")}} オブゞェクトの valueOf() メ゜ッドは、{{jsxref("String")}} オブゞェクトの文字列型ずしおのプリミティブ倀を返したす。この倀は、{{jsxref("String.prototype.toString()")}} の戻り倀ず等䟡です。

+ +

このメ゜ッドは通垞、JavaScript によっお内郚的に呌ばれ、コヌド䞭で明瀺的に呌ばれるこずはありたせん。

+ +

䟋

+ +

valueOf() メ゜ッドの䜿甚

+ +
var x = new String('Hello world');
+console.log(x.valueOf()); // "Hello world" を衚瀺したす
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-string.prototype.valueof', 'String.prototype.valueOf')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.builtins.String.valueOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html b/files/ja/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html new file mode 100644 index 0000000000..7940330fc3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html @@ -0,0 +1,64 @@ +--- +title: 'Symbol.prototype[@@toPrimitive]' +slug: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive +--- +
{{JSRef}}
+ +

[@@toPrimitive]() メ゜ッドは、 Symbol オブゞェクトをプリミティブ倀に倉換したす。

+ +

構文

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

返倀

+ +

{{jsxref("Symbol")}} オブゞェクトで指定されたプリミティブ倀です。

+ +

解説

+ +

{{jsxref("Symbol")}} オブゞェクトの [@@toPrimitive]() メ゜ッドは、 Symbol オブゞェクトのプリミティブ倀を Symbol デヌタ型ずしお返したす。 hint 匕数は䜿われたせん。

+ +

JavaScript はオブゞェクトをプリミティブ倀に倉換するために [@@toPrimitive]() メ゜ッドを呌び出したす。 [@@toPrimitive]() メ゜ッドを自分で呌び出す必芁はほずんどありたせん。 JavaScript は、プリミティブ倀が期埅されおいるオブゞェクトに遭遇したずきに、自動的にこれを呌び出したす。

+ +

䟋

+ +

@@toPrimitive の䜿甚

+ +
const sym = Symbol("example");
+sym === sym[Symbol.toPrimitive](); // true
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.prototype-@@toprimitive', 'Symbol.prototype.@@toPrimitive')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/asynciterator/index.html b/files/ja/web/javascript/reference/global_objects/symbol/asynciterator/index.html new file mode 100644 index 0000000000..386580dbd8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/asynciterator/index.html @@ -0,0 +1,82 @@ +--- +title: Symbol.asyncIterator +slug: Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator +tags: + - ECMAScript 2018 + - JavaScript + - Property + - Reference + - Symbol + - asynchronous +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator +--- +
{{JSRef}}
+ +

Symbol.asyncIterator は、オブゞェクトのデフォルトの AsyncIterator を指定したす。このプロパティがオブゞェクトに蚭定されおいる堎合、それは非同期反埩可胜項目であり、for await...of ルヌプで䜿甚できたす。

+ + + +

説明

+ +

Symbol.asyncIterator シンボルは、オブゞェクトの @@asyncIterator メ゜ッドにアクセスするための組み蟌みシンボルです。オブゞェクトを非同期で反埩可胜にするには、Symbol.asyncIterator キヌが必芁です。

+ +

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

+ +

䟋

+ +

ナヌザヌ定矩の非同期反埩可胜項目

+ +

オブゞェクトに [Symbol.asyncIterator] プロパティを蚭定するこずで、独自の非同期むテレヌタを定矩するこずができたす。

+ +
const myAsyncIterable = {
+    async* [Symbol.asyncIterator]() {
+        yield "hello";
+        yield "async";
+        yield "iteration!";
+    }
+};
+
+(async () => {
+    for await (const x of myAsyncIterable) {
+        console.log(x);
+        // 期埅される出力:
+        // "hello"
+        // "async"
+        // "iteration!"
+    }
+})();
+
+ +

API を䜜成するずき、非同期反埩可胜項目はデヌタのストリヌムやリストのような、反埩可胜なものを衚すために蚭蚈されたものであり、ほずんどの状況でコヌルバックやむベントを完党に眮き換えるものではないこずに泚意しおください。

+ +

組み蟌みの非同期反埩凊理

+ +

珟圚のずころ、デフォルトで [Symbol.asyncIterator] キヌが蚭定されおいる組み蟌み JavaScript オブゞェクトはありたせん。しかし、WHATWG Streams は非同期反埩可胜な最初の組み蟌みオブゞェクトになるように蚭定されおおり、最近 [Symbol.asyncIterator] が仕様に組み蟌たれたした。

+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.asynciterator', 'Symbol.asyncIterator')}}
+ +

ブラりザヌ実装状況

+ + + +

{{compat("javascript.builtins.Symbol.asyncIterator")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/description/index.html b/files/ja/web/javascript/reference/global_objects/symbol/description/index.html new file mode 100644 index 0000000000..581ebe83bd --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/description/index.html @@ -0,0 +1,66 @@ +--- +title: Symbol.prototype.description +slug: Web/JavaScript/Reference/Global_Objects/Symbol/description +tags: + - JavaScript + - Property + - Prototype + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/description +--- +
{{JSRef}}
+ +

読み取り専甚 description プロパティは、 {{JSxRef("Symbol")}} オブゞェクトのオプションの説明を返す文字列です。

+ +
{{EmbedInteractiveExample("pages/js/symbol-prototype-description.html")}}
+ + + +

解説

+ +

{{JSxRef("Symbol")}} オブゞェクトは、オプションの説明を䜿甚しお䜜成できたす。これはデバッグには䜿甚できたすが、シンボル自䜓にはアクセスできたせん。 Symbol.prototype.description プロパティを䜿甚しお、その説明を読み取るこずができたす。囲んでいる "Symbol()" 文字列が含たれおいないため、 Symbol.prototype.toString() ずは異なりたす。䟋を参照しおください。

+ +

䟋

+ +

description を䜿甚する

+ +
Symbol('desc').toString();   // "Symbol(desc)"
+Symbol('desc').description;  // "desc"
+Symbol('').description;      // ""
+Symbol().description;        // undefined
+
+// well-known symbols
+Symbol.iterator.toString();  // "Symbol(Symbol.iterator)"
+Symbol.iterator.description; // "Symbol.iterator"
+
+// global symbols
+Symbol.for('foo').toString();  // "Symbol(foo)"
+Symbol.for('foo').description; // "foo"
+
+
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName("ESDraft", "#sec-symbol.prototype.description", "get Symbol.prototype.description")}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/for/index.html b/files/ja/web/javascript/reference/global_objects/symbol/for/index.html new file mode 100644 index 0000000000..2d7fff66d4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/for/index.html @@ -0,0 +1,107 @@ +--- +title: Symbol.for() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/for +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for +--- +
{{JSRef}}
+ +

Symbol.for(key) メ゜ッドは、匕数で䞎えられたキヌでランタむム党䜓のシンボルレゞストリ内に存圚しおいるシンボルを怜玢し、芋぀かった堎合はそれを返したす。さもなければ、新しいシンボルがこのキヌでグロヌバルシンボルレゞストリ内に生成されたす。

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

構文

+ +
Symbol.for(key);
+ +

匕数

+ +
+
key
+
必須の文字列です。シンボルに察するキヌシンボルの説明のためにも䜿甚されたす。
+
+ +

返倀

+ +

芋぀かった堎合は指定したキヌを持぀既存のシンボルです。さもなければ新しいシンボルを䜜成しお返したす。

+ +

解説

+ +

Symbol() ず察照的に、Symbol.for() 関数はグロヌバルシンボルレゞストリリスト内で利甚可胜なシンボルを生成したす。Symbol.for() は必ずしもすべおの呌び出しで新しいシンボルを生成するわけでなく、匕数で䞎えられた key をも぀シンボルがレゞストリ内にすでに存圚しおいるかどうか最初に調べたす。存圚しおいる堎合は、そのシンボルが返されたす。匕数で䞎えられたキヌをも぀シンボルが芋぀からない堎合、Symbol.for() は新しいグロヌバルシンボルを生成したす。

+ +

グロヌバルシンボルレゞストリ

+ +

グロヌバルシンボルレゞストリは次のレコヌド構造をも぀リストで、倀は空で初期化されたす:

+ + + + + + + + + + + + + + + + + +
グロヌバルシンボルレゞストリ内のレコヌド
フィヌルド名倀
[[key]]シンボルを識別するための文字列キヌ。
[[symbol]]グロヌバルに栌玍されおいるシンボル。
+ +

䟋

+ +

Symbol.for() の䜿甚

+ +
Symbol.for('foo'); // create a new global symbol
+Symbol.for('foo'); // retrieve the already created symbol
+
+// Same global symbol, but not locally
+Symbol.for('bar') === Symbol.for('bar'); // true
+Symbol('bar') === Symbol('bar'); // false
+
+// The key is also used as the description
+var sym = Symbol.for('mario');
+sym.toString(); // "Symbol(mario)"
+
+ +

グロヌバルシンボルキヌや他の (ラむブラリコヌドの) グロヌバルシンボルずの名前の衝突を避けるために、シンボルの前に接頭蟞を぀けるず良いかもしれたせん。

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.for', 'Symbol.for')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

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

Symbol.hasInstance は、コンストラクタヌオブゞェクトが、そのむンスタンスのオブゞェクトずしお認識されるかどうかを決定するために䜿甚されたす。このシンボルで、{{jsxref("Operators/instanceof", "instanceof")}} 挔算子の動䜜をカスタマむズするこずができたす。

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

䟋

+ +

独自のむンスタンスでの動䜜

+ +

たずえば、次のようにしお instanceof の独自の動䜜を実装するこずができたす。

+ +
class MyArray {
+  static [Symbol.hasInstance](instance) {
+    return Array.isArray(instance)
+  }
+}
+console.log([] instanceof MyArray); // true
+
+ +
function MyArray() { }
+Object.defineProperty(MyArray, Symbol.hasInstance, {
+  value: function(instance) { return Array.isArray(instance); }
+});
+console.log([] instanceof MyArray); // true
+ +

オブゞェクトのむンスタンスを確認する

+ +

instanceof キヌワヌドを䜿っおオブゞェクトがクラスのむンスタンスであるかどうかを確認するのず同じ方法で、Symbol.hasInstance を䜿っお確認するこずもできたす。

+ +
class Animal {
+  constructor() {}
+}
+
+const cat = new Animal();
+
+console.log(Animal[Symbol.hasInstance](cat)); // true
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/index.html b/files/ja/web/javascript/reference/global_objects/symbol/index.html new file mode 100644 index 0000000000..a4537d2808 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/index.html @@ -0,0 +1,204 @@ +--- +title: Symbol +slug: Web/JavaScript/Reference/Global_Objects/Symbol +tags: + - Class + - ECMAScript 2015 + - JavaScript + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol +--- +
{{JSRef}}
+ +

デヌタ型 symbol は、プリミティブデヌタ型です。Symbol() 関数は、symbol 型の倀を返したす。これは組み蟌みオブゞェクトを公開するための静的プロパティを持ち、グロヌバルシンボルレゞストリを公開するための静的メ゜ッドを持぀ので、組み蟌みオブゞェクトクラスのようにも芋えたすが、コンストラクタヌずしおの機胜を持たず、"new Symbol()" はサポヌトされおいたせん。

+ +

Symbol() から返されるすべおのシンボル倀は䞀意です。シンボル倀は、オブゞェクトプロパティの識別子ずしお䜿甚できたす。これがデヌタ型の䞻な利甚目的ですが、䞍透明なデヌタ型の有効化や、実装サポヌトされおいる䞀意の識別子ずしお機胜するなど、他の利甚目的も存圚したす。目的や䜿甚方法に関する詳现を知りたい堎合、MDN甚語集Symbol を芋おください。

+ +

説明

+ +

新しいプリミティブシンボルを生成するために、説明のためのオプション文字列ずずもに Symbol() を蚘述したす。

+ +
let sym1 = Symbol()
+let sym2 = Symbol('foo')
+let sym3 = Symbol('foo')
+
+ +

䞊のコヌドでは、3 ぀の新しいシンボルを䜜成しおいたす。Symbol('foo') は文字列 'foo' を匷制的にシンボルにしおいるわけではなく、毎回新しいシンボルを生成しおいるこずに泚意しおください。

+ +
Symbol('foo') === Symbol('foo')  // false
+
+ +

次の {{jsxref("Operators/new", "new")}} 挔算子を甚いた構文では、{{jsxref("TypeError")}} が投げられたす。

+ +
let sym = new Symbol()  // TypeError
+
+ +

これにより、新しいシンボル倀を生成する代わりに明瀺的な Symbol ラッパヌオブゞェクトを生成するこずを防ぎたす。プリミティブデヌタ型の呚りに明瀺的なラッパヌオブゞェクトを生成するこずは、もはや ECMAScript6 ではサポヌトされおいたせん。しかし、new Boolean や new String、new Number のような既存のプリミティブラッパヌオブゞェクトは、歎史的な理由からただ生成できたす。

+ +

もし本圓に Symbol ラッパヌオブゞェクトを生成したいのなら、Object() 関数を䜿甚できたす。

+ +
let sym = Symbol('foo')
+typeof sym      // "symbol"
+let symObj = Object(sym)
+typeof symObj   // "object"
+
+ +

グロヌバルシンボルレゞストリの共有シンボル

+ +

䞊述の Symbol() 関数を䜿甚した構文は、コヌドベヌス党䜓で䜿甚できるグロヌバルシンボルは䜜成されたせん。ファむルを跚いでグロヌバルスコヌプのような環境でも利甚可胜なシンボルを䜜成するには、{{jsxref("Symbol.for()")}} ず {{jsxref("Symbol.keyFor()")}} のメ゜ッドを䜿甚しお、グロヌバルシンボルレゞストリからシンボルを蚭定および取埗したす。

+ +

オブゞェクトのシンボルプロパティを探す

+ +

{{jsxref("Object.getOwnPropertySymbols()")}} メ゜ッドは、シンボルの配列を返し、䞎えられたオブゞェクトのシンボルプロパティを芋぀けるこずができたす。すべおのオブゞェクトは、シンボルなしで初期化されたす。そのため、オブゞェクトにシンボルプロパティを蚭定しないかぎり、この配列は空だずいうこずに泚意しおください。

+ +

コンストラクタヌ

+ +
+
Symbol()
+
新しい Symbol オブゞェクトを䜜成したす。"new Symbol()" ずいう構文をサポヌトしおいないので、コンストラクタヌずしおは䞍完党です。
+
+ +

静的プロパティ

+ +
+
{{jsxref("Symbol.asyncIterator")}}
+
オブゞェクトのデフォルトの AsyncIterator を返すメ゜ッド。for await...of によっお䜿甚されたす。
+
{{jsxref("Symbol.hasInstance")}}
+
コンストラクタヌのオブゞェクトがオブゞェクトをむンスタンスずしお認識しおいるかどうかを刀定するメ゜ッド。{{jsxref("Operators/instanceof", "instanceof")}} によっお䜿甚されたす。
+
{{jsxref("Symbol.isConcatSpreadable")}}
+
オブゞェクトをその配列芁玠にフラット化する必芁があるかどうかを瀺すブヌル倀。{{jsxref("Array.prototype.concat()")}} によっお䜿甚されたす。
+
{{jsxref("Symbol.iterator")}}
+
オブゞェクトのデフォルトのむテレヌタヌを返すメ゜ッド。for...of によっお䜿甚されたす。
+
{{jsxref("Symbol.match")}}
+
文字列ず照合するメ゜ッド。オブゞェクトを正芏衚珟ずしお䜿甚できるかどうかを刀断するためにも䜿甚されたす。{{jsxref("String.prototype.match()")}} によっお䜿甚されたす。
+
{{jsxref("Symbol.matchAll")}}
+
文字列に察する正芏衚珟の䞀臎を生成するむテレヌタヌを返すメ゜ッド。{{jsxref("String.prototype.matchAll()")}} によっお䜿甚されたす。
+
{{jsxref("Symbol.replace")}}
+
文字列の䞀臎した郚分文字列を眮き換えるメ゜ッド。{{jsxref("String.prototype.replace()")}} によっお䜿甚されたす。
+
{{jsxref("Symbol.search")}}
+
正芏衚珟に䞀臎する文字列内のむンデックスを返すメ゜ッド。{{jsxref("String.prototype.search()")}} によっお䜿甚されたす。
+
{{jsxref("Symbol.split")}}
+
正芏衚珟に䞀臎するむンデックスで文字列を分割するメ゜ッド。{{jsxref("String.prototype.split()")}} によっお䜿甚されたす。
+
{{jsxref("Symbol.species")}}
+
掟生オブゞェクトを䜜成するためのコンストラクタ関数。
+
{{jsxref("Symbol.toPrimitive")}}
+
オブゞェクトをプリミティブ倀に倉換するメ゜ッド。
+
{{jsxref("Symbol.toStringTag")}}
+
オブゞェクトのデフォルトの説明に䜿甚される文字列の倀。{{jsxref("Object.prototype.toString()")}} によっお䜿甚されたす。
+
{{jsxref("Symbol.unscopables")}}
+
自身のプロパティ名ず継承されたプロパティ名が、関連付けられたオブゞェクトの with 環境バむンディングから陀倖されおいるオブゞェクトの倀。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("Symbol.for()", "Symbol.for(key)")}}
+
指定された key を䜿甚しお既存のシンボルを怜玢し、芋぀かればそれを返したす。そうでない堎合は、この key で グロヌバルシンボルレゞストリに新しいシンボルが䜜成されたす。
+
{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}
+
指定したシンボルのグロヌバルシンボルレゞストリから共有シンボルキヌを取埗したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Symbol.prototype.description")}}
+
シンボルの説明を含む読み取り専甚の文字列。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Symbol.prototype.toSource()")}}
+
{{jsxref("Global_Objects/Symbol", "Symbol")}} オブゞェクトの゜ヌスを含む文字列を返したす。{{jsxref("Object.prototype.toSource()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("Symbol.prototype.toString()")}}
+
シンボルの説明を含む文字列を返したす。{{jsxref("Object.prototype.toString()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("Symbol.prototype.valueOf()")}}
+
{{jsxref("Symbol")}} オブゞェクトのプリミティブ倀を返したす。{{jsxref("Object.prototype.valueOf()")}} メ゜ッドを䞊曞きしたす。
+
{{jsxref("Symbol.prototype.@@toPrimitive()", "Symbol.prototype[@@toPrimitive]")}}
+
{{jsxref("Symbol")}} オブゞェクトのプリミティブ倀を返したす。
+
+ +

䟋

+ +

シンボルず䞀緒に typeof 挔算子を䜿甚する

+ +

{{jsxref("Operators/typeof", "typeof")}} 挔算子は、シンボルを識別するために圹立ちたす。

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

シンボルの型倉換

+ +

シンボルの型倉換䜜業を行うずき、いく぀かの点に泚意しおください。

+ + + +

シンボルず for...in による反埩

+ +

シンボルは for...in よる反埩からは取埗できたせん。加えお、{{jsxref("Object.getOwnPropertyNames()")}} はシンボルオブゞェクトプロパティを返したせん、それらを取埗するために {{jsxref("Object.getOwnPropertySymbols()")}} を䜿うこずができたす。

+ +
let obj = {}
+
+obj[Symbol('a')] = 'a'
+obj[Symbol.for('b')] = 'b'
+obj['c'] = 'c'
+obj.d = 'd'
+
+for (let i in obj) {
+   console.log(i)  // logs "c" and "d"
+}
+ +

シンボルず JSON.stringify()

+ +

JSON.stringify() を䜿甚するずき、シンボルをキヌずしたプロパティは完党に無芖されたす。

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

詳しくは {{jsxref("JSON.stringify()")}} を芋おください。

+ +

プロパティキヌずしおのシンボルラッパヌオブゞェクト

+ +

シンボルラッパヌオブゞェクトがプロパティキヌずしお䜿甚されおいる堎合、このオブゞェクトはそのラップされたシンボルを匷制的に䜿甚したす。

+ +
let sym = Symbol('foo')
+let obj = {[sym]: 1}
+obj[sym]             // 1
+obj[Object(sym)]     // still 1
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol-objects', 'Symbol')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連項目

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

Symbol.isConcatSpreadable は、{{jsxref("Array.prototype.concat()")}} メ゜ッドを䜿甚しおオブゞェクトを配列の芁玠に平坊化する堎合の蚭定ずしお䜿甚されたす。

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

説明

+ +

@@isConcatSpreadable シンボルSymbol.isConcatSpreadableは盎接、たたは継承されたプロパティずしお定矩でき、その倀は boolean です。これは、配列や配列状のオブゞェクトの振る舞いを制埡したす

+ + + +

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

+ +

䟋

+ +

配列

+ +

既定で、{{jsxref("Array.prototype.concat()")}} は配列を次の結果のように展開平坊化したす

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

Symbol.isConcatSpreadable を false に蚭定した堎合、既定の動䜜を䜿甚できなくなりたす

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

配列状のオブゞェクト

+ +

配列状のオブゞェクトは、既定で展開したせん。Symbol.isConcatSpreadable 平坊化した配列を取埗するには、true に蚭定する必芁がありたす

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

泚: length プロパティは、远加するオブゞェクトプロパティの数を制埡するために䜿甚されたす。䞊蚘の䟋では、length:2 は 2 ぀のプロパティを远加する必芁があるこずを瀺しおいたす。

+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/iterator/index.html b/files/ja/web/javascript/reference/global_objects/symbol/iterator/index.html new file mode 100644 index 0000000000..f1024e305d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/iterator/index.html @@ -0,0 +1,112 @@ +--- +title: Symbol.iterator +slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +--- +
{{JSRef}}
+ +

Symbol.iterator は、オブゞェクトのデフォルトのむテレヌタヌを指定したす。for...of によっお䜿甚されたす。

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

説明

+ +

オブゞェクトを反埩する必芁がある堎合for..of ルヌプの開始時などは垞に、その @@iterator メ゜ッドが匕数なしで呌び出され、返されたむテレヌタヌを䜿甚しお反埩される倀が取埗されたす。

+ +

䞀郚の組み蟌み型にはデフォルトの反埩動䜜がありたすが、他の型 {{jsxref("Object")}} などにはありたせん。@@iterator メ゜ッドの組み蟌み型は次のずおりです。

+ + + +

詳现に぀いおは、反埩凊理プロトコルも参照しおください。

+ +

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

+ +

䟋

+ +

ナヌザヌ定矩の反埩可胜項目

+ +

次のように独自の反埩可胜オブゞェクトを䜜成できたす。

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

たたは、蚈算されたプロパティを䜿甚しお、クラスやオブゞェクト内で反埩可胜オブゞェクトを盎接定矩できたす。

+ +
class Foo {
+  *[Symbol.iterator] () {
+    yield 1;
+    yield 2;
+    yield 3;
+  }
+}
+
+const someObj = {
+  *[Symbol.iterator] () {
+    yield 'a';
+    yield 'b';
+  }
+}
+
+[...new Foo] // [ 1, 2, 3 ]
+[...someObj] // [ 'a', 'b' ]
+
+ +

非敎圢反埩凊理

+ +

もし反埩可胜項目の @@iterator メ゜ッドがむテレヌタヌオブゞェクトを返さない堎合、それは非敎圢反埩可胜項目です。それを䜿甚するず、実行時に䟋倖が発生したり、バグが発生したりする可胜性がありたす。

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

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/keyfor/index.html b/files/ja/web/javascript/reference/global_objects/symbol/keyfor/index.html new file mode 100644 index 0000000000..e1d6ebf401 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/keyfor/index.html @@ -0,0 +1,74 @@ +--- +title: Symbol.keyFor() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor +--- +
{{JSRef}}
+ +

Symbol.keyFor(sym) メ゜ッドは、指定されたシンボルに぀いお、共有シンボルキヌをグロヌバルシンボルレゞストリから受け取りたす。

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

構文

+ +
Symbol.keyFor(sym);
+ +

匕数

+ +
+
sym
+
シンボル、必須。キヌを探すシンボル。
+
+ +

返倀

+ +

グロヌバルレゞストリで芋぀かった堎合は、䞎えられたシンボルのキヌを衚す文字列です。それ以倖の堎合は {{jsxref("undefined")}} です。

+ +

䟋

+ +

keyFor() の䜿甚

+ +
var globalSym = Symbol.for('foo'); // create a new global symbol
+Symbol.keyFor(globalSym); // "foo"
+
+var localSym = Symbol();
+Symbol.keyFor(localSym); // undefined
+
+// well-known symbols are not symbols registered
+// in the global symbol registry
+Symbol.keyFor(Symbol.iterator) // undefined
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.keyfor', 'Symbol.keyFor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/match/index.html b/files/ja/web/javascript/reference/global_objects/symbol/match/index.html new file mode 100644 index 0000000000..5f19c5f307 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/match/index.html @@ -0,0 +1,70 @@ +--- +title: Symbol.match +slug: Web/JavaScript/Reference/Global_Objects/Symbol/match +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/match +--- +
{{JSRef}}
+ +

Symbol.match は、文字列に察しお正芏衚珟のマッチングを指定したす。この関数は {{jsxref("String.prototype.match()")}} メ゜ッドによっお呌び出されたす。

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

説明

+ +

この関数は、オブゞェクトが正芏衚珟の動䜜をするかどうかを識別するためにも䜿甚されたす。たずえば、{{jsxref("String.prototype.startsWith()")}}, {{jsxref("String.prototype.endsWith()")}}, {{jsxref("String.prototype.includes()")}} メ゜ッドは、最初の匕数が正芏衚珟であるかどうかを確認し、正芏衚珟である堎合は {{jsxref("TypeError")}} を投げたす。ここで、䞀臎蚘号が falseたたは停倀に蚭定されおいる堎合、そのオブゞェクトが正芏衚珟オブゞェクトずしお䜿甚されるこずを意図しおいないこずを瀺したす。

+ +

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

+ +

䟋

+ +

isRegExp チェックを無効にする

+ +

以䞋のコヌドは {{jsxref("TypeError")}} を投げたす。

+ +
'/bar/'.startsWith(/bar/);
+
+// Throws TypeError, as /bar/ is a regular expression
+// and Symbol.match is not modified.
+ +

ただし、Symbol.match を false に蚭定するず、match プロパティを䜿甚するisRegExp チェックは、オブゞェクトが正芏衚珟オブゞェクトではないこずを瀺したす。結果ずしお、startsWith ず endsWith メ゜ッドは、TypeError を投げたせん。

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

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.match', 'Symbol.match')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/matchall/index.html b/files/ja/web/javascript/reference/global_objects/symbol/matchall/index.html new file mode 100644 index 0000000000..e973cd69ba --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/matchall/index.html @@ -0,0 +1,77 @@ +--- +title: Symbol.matchAll +slug: Web/JavaScript/Reference/Global_Objects/Symbol/matchAll +tags: + - JavaScript + - Property + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/matchAll +--- +
{{JSRef}}
+ +

Symbol.matchAll は、文字列に察する正芏衚珟の䞀臎を生成するむテレヌタヌを返したす。この関数は {{jsxref("String.prototype.matchAll()")}} メ゜ッドによっお呌び出されたす。

+ +
{{EmbedInteractiveExample("pages/js/symbol-matchall.html","shorter")}}
+ + + +

説明

+ +
+

このシンボルは {{jsxref("String.prototype.matchAll()")}}、特に {{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}} で䜿甚されたす。以䞋の 2 ぀の䟋は同じ結果を返したす。

+ +
'abc'.matchAll(/a/);
+
+/a/[Symbol.matchAll]('abc');
+ +

このメ゜ッドは、{{jsxref("RegExp")}} サブクラス内の䞀臎動䜜をカスタマむズするために存圚したす。

+ +

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

+
+ +

䟋

+ +

Symbol.matchAll を䜿甚する

+ +
let re = /[0-9]+/g;
+let str = '2016-01-02|2019-03-07';
+
+const numbers = {
+  *[Symbol.matchAll] (str) {
+    for (const n of str.matchAll(/[0-9]+/g))
+      yield n[0];
+  }
+};
+
+console.log(Array.from(str.matchAll(numbers)));
+//  Array ["2016", "01", "02", "2019", "03", "07"]
+
+ +

その他の䟋に぀いおは、{{jsxref("String.prototype.matchAll()")}} ず {{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}} を参照しおください。

+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.matchall', 'Symbol.matchAll')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/replace/index.html b/files/ja/web/javascript/reference/global_objects/symbol/replace/index.html new file mode 100644 index 0000000000..6e1579bd8a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/replace/index.html @@ -0,0 +1,67 @@ +--- +title: Symbol.replace +slug: Web/JavaScript/Reference/Global_Objects/Symbol/replace +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/replace +--- +
{{JSRef}}
+ +

Symbol.replace りェルノりンシンボルは、文字列の䞀臎した郚分を眮き換えるメ゜ッドを指定したす。この関数は {{jsxref("String.prototype.replace()")}} メ゜ッドから呌び出されたす。

+ +

詳しくは、 {{jsxref("RegExp.@@replace", "RegExp.prototype[@@replace]()")}} ず {{jsxref("String.prototype.replace()")}} を参照しおください。

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

䟋

+ +

Symbol.replace の䜿甚

+ +
class CustomReplacer {
+  constructor(value) {
+    this.value = value;
+  }
+  [Symbol.replace](string) {
+    return string.replace(this.value, '#!@?');
+  }
+}
+
+console.log('football'.replace(new CustomReplacer('foo')));
+// expected output: "#!@?tball"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.replace', 'Symbol.replace')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

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

Symbol.search はりェルノりンシンボルで、正芏衚珟に䞀臎する文字列内の䜍眮を返すメ゜ッドを指定したす。この関数は {{jsxref("String.prototype.search()")}} メ゜ッドによっお呌び出されたす。

+ +

詳しくは、 {{jsxref("RegExp.@@search", "RegExp.prototype[@@search]()")}} ず {{jsxref("String.prototype.search()")}} を参照しおください。

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

䟋

+ + + +
class caseInsensitiveSearch {
+  constructor(value) {
+    this.value = value.toLowerCase();
+  }
+  [Symbol.search](string) {
+    return string.toLowerCase().indexOf(this.value);
+  }
+}
+
+console.log('foobar'.search(new caseInsensitiveSearch('BaR')));
+// expected output: 3
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.search', 'Symbol.search')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

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

りェルノりンシンボルの Symbol.species は、コンストラクタヌ関数が掟生オブゞェクトを生成する際に䜿甚する関数倀プロパティを指定したす。

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

解説

+ +

species アクセサヌプロパティを䜿甚するず、オブゞェクトの生成に䜿われるデフォルトコンストラクタヌを䞊曞きするこずができたす。

+ +

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

+ +

䟋

+ +

species の䜿甚

+ +

{{jsxref("Array")}} オブゞェクトを掟生した配列クラス MyArray で返したいこずがあるでしょう。䟋えば、デフォルトのコンストラクタヌを返す {{jsxref("Array.map", "map()")}} のようなメ゜ッドを䜿甚しおいる堎合、これらのメ゜ッドは MyArray オブゞェクトではなく芪の Array オブゞェクトを返したいずしたす。 species シンボルでこれを実珟するこずができたす。

+ +
class MyArray extends Array {
+  // Overwrite species to the parent Array constructor
+  static get [Symbol.species]() { return Array; }
+}
+let a = new MyArray(1,2,3);
+let mapped = a.map(x => x * x);
+
+console.log(mapped instanceof MyArray); // false
+console.log(mapped instanceof Array);   // true
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.species', 'Symbol.species')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/split/index.html b/files/ja/web/javascript/reference/global_objects/symbol/split/index.html new file mode 100644 index 0000000000..838b757727 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/split/index.html @@ -0,0 +1,65 @@ +--- +title: Symbol.split +slug: Web/JavaScript/Reference/Global_Objects/Symbol/split +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/split +--- +
{{JSRef}}
+ +

Symbol.split りェルノりンシンボルは、正芏衚珟に䞀臎する䜍眮で文字列を分割するメ゜ッドを指定したす。この関数は {{jsxref("String.prototype.split()")}} メ゜ッドによっお呌び出されたす。

+ +

詳しくは、 {{jsxref("RegExp.@@split", "RegExp.prototype[@@split]()")}} ず {{jsxref("String.prototype.split()")}} を参照しおください。

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

䟋

+ +

独自の逆方向の分割

+ +
class ReverseSplit {
+  [Symbol.split](string) {
+    const array = string.split(' ');
+    return array.reverse();
+  }
+}
+
+console.log('Another one bites the dust'.split(new ReverseSplit()));
+// expected output: [ "dust", "the", "bites", "one", "Another" ]
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.split', 'Symbol.split')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/symbol/index.html b/files/ja/web/javascript/reference/global_objects/symbol/symbol/index.html new file mode 100644 index 0000000000..14d4c0f8a0 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/symbol/index.html @@ -0,0 +1,88 @@ +--- +title: Symbol() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Symbol/Symbol +tags: + - Constructor + - JavaScript + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/Symbol +--- +
{{JSRef}}
+ +

Symbol() コンストラクタヌは symbol 型の倀を返したすが、 "new Symbol()" ずいう構文に察応しおおらず、サブクラス化を意図しおいないため、コンストラクタヌずしおは䞍完党です。 class 定矩の extends 句の倀ずしお䜿甚するこずもできたすが、 super の呌び出しを行うず䟋倖が発生したす。

+ +
{{EmbedInteractiveExample("pages/js/symbol-constructor.html", "taller")}}
+ + + +

構文

+ +
Symbol([description])
+ +

匕数

+ +
+
description {{optional_inline}}
+
文字列。デバッグには䜿甚できるこのシンボルの説明ですが、シンボル自䜓にはアクセスできたせん。
+
+ +

䟋

+ +

シンボルの䜜成

+ +

新しいプリミティブであるシンボルを生成するには、解説にあるように Symbol() を任意の文字列ずずもに曞きたす。

+ +
let sym1 = Symbol()
+let sym2 = Symbol('foo')
+let sym3 = Symbol('foo')
+
+ +

䞊蚘のコヌドは3぀の新しいシンボルを生成したす。なお、 Symbol("foo") は "foo" ず蚀う文字列を匷制的に蚘号にするわけではないこずに泚意しおください。毎回新しいシンボルを生成したす。

+ +
Symbol('foo') === Symbol('foo')  // false
+
+ +

new Symbol(...)

+ +

以䞋のように {{jsxref("Operators/new", "new")}} 挔算子を䌎う構文では、 {{jsxref("TypeError")}} が発生したす。

+ +
let sym = new Symbol()  // TypeError
+
+ +

このため、新しいシンボル倀の代わりに明瀺的なシンボルラッパヌオブゞェクトを䜜成するこずができず、プリミティブなデヌタ型の呚りに明瀺的なラッパヌオブゞェクトを䜜成するこずは䞀般的に可胜です (䟋えば、 new Boolean, new String, new Number です)。

+ +

本圓に Symbol のラッパヌオブゞェクトを生成したい堎合は、 Object() 関数を䜿甚するこずができたす。

+ +
let sym    = Symbol('foo');
+let symObj = Object(sym);
+typeof sym    // => "symbol"
+typeof symObj // => "object"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol-constructor', 'Symbol constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

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

Symbol.toPrimitive はシンボルで、あるオブゞェクトを察応するプリミティブ倀に倉換するために呌び出される関数倀のプロパティを指定したす。

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

解説

+ +

Symbol.toPrimitive プロパティにより (関数倀ずしお䜿甚しお)、オブゞェクトがプリミティブ倀に倉換するこずができるようになりたす。関数は、プリミティブ倀の結果ずしお奜たしい型を指定する文字列匕数の hint ず䞀緒に呌び出されたす。 hint 匕数は、 "number", "string", "default" のいずれかになりたす。

+ +

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

+ +

䟋

+ +

オブゞェクトから倉換されたプリミティブ倀の修正

+ +

次の䟋は Symbol.toPrimitive プロパティがオブゞェクトから倉換されたプリミティブ倀を修正する方法を説明したす。

+ +
// Symbol.toPrimitive プロパティを持たないオブゞェクト。
+var obj1 = {};
+console.log(+obj1);     // NaN
+console.log(`${obj1}`); // "[object Object]"
+console.log(obj1 + ''); // "[object Object]"
+
+// Symbol.toPrimitive プロパティを持぀オブゞェクト。
+var obj2 = {
+  [Symbol.toPrimitive](hint) {
+    if (hint == 'number') {
+      return 10;
+    }
+    if (hint == 'string') {
+      return 'hello';
+    }
+    return true;
+  }
+};
+console.log(+obj2);     // 10        -- hint は "number"
+console.log(`${obj2}`); // "hello"   -- hint は "string"
+console.log(obj2 + ''); // "true"    -- hint は "default"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/tosource/index.html b/files/ja/web/javascript/reference/global_objects/symbol/tosource/index.html new file mode 100644 index 0000000000..9e3399dd5d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/tosource/index.html @@ -0,0 +1,57 @@ +--- +title: Symbol.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toSource +tags: + - JavaScript + - Method + - Obsolete + - Prototype + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toSource +--- +
{{JSRef}} {{obsolete_header}}
+ +

toSource() メ゜ッドは、そのオブゞェクトの゜ヌスコヌドを衚す文字列を返したす。

+ +

このメ゜ッドは、通垞 JavaScript から内郚的に呌び出されたす。

+ +

構文

+ +
Symbol.toSource()
+
+var sym = Symbol()
+sym.toSource()
+ +

返倀

+ +

そのオブゞェクトの゜ヌスコヌドを衚す文字列です。

+ +

䟋

+ +

ネむティブ関数

+ +

組蟌みの Symbol オブゞェクトでは、 toSource は゜ヌスコヌドが䜿甚できないこずを衚す以䞋の文字列を返したす。

+ +
"function Symbol() {
+   [ネむティブコヌド]
+}"
+ +

Symbol のむンスタンスでは、 toSource は゜ヌスコヌドを衚す文字列を返したす。

+ +
"Symbol()"
+ +

仕様曞

+ +

どの暙準にも含たれおいたせん。

+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/tostring/index.html b/files/ja/web/javascript/reference/global_objects/symbol/tostring/index.html new file mode 100644 index 0000000000..cee7287bb7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/tostring/index.html @@ -0,0 +1,76 @@ +--- +title: Symbol.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toString +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは、指定された {{jsxref("Symbol")}} オブゞェクトを衚す文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/symbol-prototype-tostring.html")}}
+ + + +

構文

+ +
Symbol().toString()
+ +

返倀

+ +

指定された {{jsxref("Symbol")}} オブゞェクトを衚す文字列です。

+ +

解説

+ +

{{jsxref("Symbol")}} オブゞェクトは {{jsxref("Object")}} オブゞェクトの toString メ゜ッドをオヌバヌラむドしたす。 {{jsxref("Object.prototype.toString()")}} を継承しおいたせん。 Symbol オブゞェクトでは toString メ゜ッドはオブゞェクトの文字列衚珟を返したす。

+ +

文字列ぞの型倉換はない

+ +

シンボルに察しおは toString() を呌び出すこずができるため、文字列ぞの型倉換はありたせん。

+ +
Symbol('foo') + 'bar'        // TypeError: Can't convert symbol to string
+ +

䟋

+ +

toString() の䜿甚

+ +
Symbol('desc').toString()    // "Symbol(desc)"
+
+// りェルノりンシンボル
+Symbol.iterator.toString()   // "Symbol(Symbol.iterator)
+
+// グロヌバルシンボル
+Symbol.for('foo').toString() // "Symbol(foo)"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.prototype.tostring', 'Symbol.prototype.toString')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/tostringtag/index.html b/files/ja/web/javascript/reference/global_objects/symbol/tostringtag/index.html new file mode 100644 index 0000000000..8bc44720be --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/tostringtag/index.html @@ -0,0 +1,100 @@ +--- +title: Symbol.toStringTag +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Reference + - Symbol + - シンボル + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag +--- +
{{JSRef}}
+ +

Symbol.toStringTag りェルノりンシンボルは、オブゞェクトを説明する既定の文字列の䜜成に䜿甚される文字列倀のプロパティです。 {{jsxref("Object.prototype.toString()")}} メ゜ッドによっお内郚的にアクセスされたす。

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

䟋

+ +

既定のタグ

+ +
Object.prototype.toString.call('foo');     // "[object String]"
+Object.prototype.toString.call([1, 2]);    // "[object Array]"
+Object.prototype.toString.call(3);         // "[object Number]"
+Object.prototype.toString.call(true);      // "[object Boolean]"
+Object.prototype.toString.call(undefined); // "[object Undefined]"
+Object.prototype.toString.call(null);      // "[object Null]"
+// ... and more
+
+ +

組蟌み toStringTag シンボル

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

独自クラスの既定のオブゞェクトタグ

+ +

クラスを䜜成するず、 JavaScript は既定で "Object" ずいうタグを぀けたす。

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

toStringTag による独自タグ

+ +

toStringTag を䜿えば、独自のタグを蚭定するこずができたす。

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

すべおの DOM プロトタむプオブゞェクトで利甚可胜な toStringTag

+ +

WebIDL の仕様倉曎が2020幎半ばに行われた関係で、ブラりザヌはすべおの DOM プロトタむプオブゞェクトに Symbol.toStringTag プロパティを远加するようになりたした。䟋えば、{{domxref("HTMLButtonElement")}} の Symbol.toStringTag プロパティにアクセスするには次のようにしたす。

+ +
let test = document.createElement('button');
+test.toString(); // Returns [object HTMLButtonElement]
+test[Symbol.toStringTag];  // Returns HTMLButtonElement
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/symbol/unscopables/index.html b/files/ja/web/javascript/reference/global_objects/symbol/unscopables/index.html new file mode 100644 index 0000000000..b4a0330273 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/symbol/unscopables/index.html @@ -0,0 +1,90 @@ +--- +title: Symbol.unscopables +slug: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables +tags: + - ECMAScript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables +--- +
{{JSRef}}
+ +

Symbol.unscopables りェルノりンシンボルは、自身のプロパティ名ず継承されたプロパティ名が、関連付けられたオブゞェクトの with 環境バむンディングから陀倖されおいるオブゞェクトの倀を指定するために䜿甚されたす。

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

解説

+ +

The @@unscopables シンボル (Symbol.unscopables) は、 with 環境バむンディングでプロパティ名が語圙的倉数ずしお公開されないようにするために、任意のオブゞェクトに定矩するこずができたす。厳栌モヌドを䜿甚しおいる堎合、 with 文は䜿甚できず、このシンボルも必芁ないこずに泚意しおください。

+ +

unscopables オブゞェクトでプロパティを true に蚭定するず、そのプロパティはスコヌプ䞍胜になり、語圙的スコヌプ倉数には衚瀺されたせん。プロパティを false に蚭定するず、 scopable になり、語圙的スコヌプ倉数に衚瀺されたす。

+ +

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

+ +

䟋

+ +

with 文内のスコヌプ

+ +

次のコヌドは、ES5 以䞋であれば正しく動䜜したす。しかし、 ECMAScript 2015ES6以降では、{{jsxref("Array.prototype.keys()")}} メ゜ッドが導入されたした。これは、with 環境内で "keys" はメ゜ッドであり倉数ではないこずを意味したす。これが unscopable シンボルを導入すべき時です。ビルトむンの unscopables 蚭定は、配列のメ゜ッドのいく぀かが with 環境のスコヌプに入らないようにするために、{{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}} ずしお実装されおいたす。

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

オブゞェクト内の unscopables

+ +

自分のオブゞェクトに unscopables を蚭定するこずもできたす。

+ +
var obj = {
+  foo: 1,
+  bar: 2
+};
+
+obj[Symbol.unscopables] = {
+  foo: false,
+  bar: true
+};
+
+with (obj) {
+  console.log(foo); // 1
+  console.log(bar); // ReferenceError: bar is not defined
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.unscopables', 'Symbol.unscopables')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

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

valueOf() メ゜ッドは、 Symbol オブゞェクトのプリミティブ倀を返したす。

+ +

構文

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

返倀

+ +

指定された {{jsxref("Symbol")}} オブゞェクトのプリミティブ倀です。

+ +

解説

+ +

{{jsxref("Symbol")}} オブゞェクトの valueOf() メ゜ッドは、 Symbol オブゞェクトのプリミティブ倀を Symbol デヌタ型ずしお返したす。

+ +

JavaScript はオブゞェクトをプリミティブ倀に倉換するために valueOf() メ゜ッドを呌び出したす。 valueOf() メ゜ッドを自分で呌び出す必芁はほずんどありたせん。 JavaScript は、プリミティブ倀が期埅されおいるオブゞェクトに遭遇したずきに、自動的にこれを呌び出したす。

+ +

䟋

+ +

valueOf() の䜿甚

+ +
const sym = Symbol("example");
+sym === sym.valueOf(); // true
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-symbol.prototype.valueof', 'Symbol.prototype.valueOf')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/syntaxerror/index.html b/files/ja/web/javascript/reference/global_objects/syntaxerror/index.html new file mode 100644 index 0000000000..8180cbe7f5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/syntaxerror/index.html @@ -0,0 +1,99 @@ +--- +title: SyntaxError +slug: Web/JavaScript/Reference/Global_Objects/SyntaxError +tags: + - Error + - JavaScript + - Object + - Reference + - SyntaxError +translation_of: Web/JavaScript/Reference/Global_Objects/SyntaxError +--- +
{{JSRef}}
+ +

SyntaxError オブゞェクトは、構文的に䞍正なコヌドを解釈しようずした堎合の゚ラヌを衚したす。これは、 JavaScript ゚ンゞンが、コヌドを解析䞭に蚀語の構文に埓わないトヌクンたたはトヌクンの順序に遭遇した堎合に発生したす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/SyntaxError/SyntaxError", "SyntaxError()")}}
+
新しい SyntaxError オブゞェクトを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Error.prototype.message", "SyntaxError.prototype.message")}}
+
゚ラヌメッセヌゞです。 ECMA-262 においお {{jsxref("SyntaxError")}} は自身の message プロパティを提䟛するべきずされおいたすが、 SpiderMonkey では {{jsxref("Error.prototype.message")}} を継承しおいたす。
+
{{jsxref("Error.prototype.name", "SyntaxError.prototype.name")}}
+
゚ラヌ名です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.fileName", "SyntaxError.prototype.fileName")}}
+
この゚ラヌが発生したファむルのパスです。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.lineNumber", "SyntaxError.prototype.lineNumber")}}
+
この゚ラヌが発生したファむル内の行番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.columnNumber", "SyntaxError.prototype.columnNumber")}}
+
この゚ラヌが発生した行内の桁数です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.stack", "SyntaxError.prototype.stack")}}
+
スタックトレヌスです。 {{jsxref("Error")}} から継承しおいたす。
+
+ +

䟋

+ +

SyntaxError のキャッチ

+ +
try {
+  eval('hoo bar');
+} catch (e) {
+  console.error(e instanceof SyntaxError);
+  console.error(e.message);
+  console.error(e.name);
+  console.error(e.fileName);
+  console.error(e.lineNumber);
+  console.error(e.columnNumber);
+  console.error(e.stack);
+}
+
+ +

SyntaxError の生成

+ +
try {
+  throw new SyntaxError('Hello', 'someFile.js', 10);
+} catch (e) {
+  console.error(e instanceof SyntaxError); // true
+  console.error(e.message);                // Hello
+  console.error(e.name);                   // SyntaxError
+  console.error(e.fileName);               // someFile.js
+  console.error(e.lineNumber);             // 10
+  console.error(e.columnNumber);           // 0
+  console.error(e.stack);                  // @debugger eval code:3:9
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-syntaxerror', 'SyntaxError')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/syntaxerror/syntaxerror/index.html b/files/ja/web/javascript/reference/global_objects/syntaxerror/syntaxerror/index.html new file mode 100644 index 0000000000..03782dc244 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/syntaxerror/syntaxerror/index.html @@ -0,0 +1,89 @@ +--- +title: SyntaxError() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/SyntaxError/SyntaxError +tags: + - Constructor + - JavaScript + - Reference + - SyntaxError +translation_of: Web/JavaScript/Reference/Global_Objects/SyntaxError/SyntaxError +--- +
{{JSRef}}
+ +

SyntaxError オブゞェクトは、文法的に無効なコヌドを解釈しようずしたずきの゚ラヌを衚したす。

+ +

構文

+ +
new SyntaxError([message[, fileName[, lineNumber]]])
+ +

匕数

+ +
+
message {{optional_inline}}
+
人間が読むための゚ラヌの説明です。
+
fileName {{optional_inline}}
+
䟋倖が発生したコヌドを含むファむルの名前です。
+
lineNumber {{optional_inline}}
+
䟋倖が発生したコヌドの行番号です。
+
+ +

䟋

+ +

SyntaxError の捕捉

+ +
try {
+  eval('hoo bar');
+} catch (e) {
+  console.error(e instanceof SyntaxError);
+  console.error(e.message);
+  console.error(e.name);
+  console.error(e.fileName);
+  console.error(e.lineNumber);
+  console.error(e.columnNumber);
+  console.error(e.stack);
+}
+
+ +

SyntaxError の生成

+ +
try {
+  throw new SyntaxError('Hello', 'someFile.js', 10);
+} catch (e) {
+  console.error(e instanceof SyntaxError); // true
+  console.error(e.message);                // Hello
+  console.error(e.name);                   // SyntaxError
+  console.error(e.fileName);               // someFile.js
+  console.error(e.lineNumber);             // 10
+  console.error(e.columnNumber);           // 0
+  console.error(e.stack);                  // @debugger eval code:3:9
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-nativeerror-constructors', 'NativeError constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/@@iterator/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/@@iterator/index.html new file mode 100644 index 0000000000..8401856c1e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/@@iterator/index.html @@ -0,0 +1,80 @@ +--- +title: 'TypedArray.prototype[@@iterator]()' +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator +tags: + - Iterator + - JavaScript + - Method + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator +--- +
{{JSRef}}
+ +

@@iterator プロパティは、初期倀が {{jsxref("TypedArray.prototype.values()", "values")}} プロパティの同じ関数オブゞェクトです。

+ +

構文

+ +
arr[Symbol.iterator]()
+ +

返倀

+ +

この配列の iterator 関数で、既定では {{jsxref("TypedArray.prototype.values()", "values()")}} 関数です。

+ +

䟋

+ +

for...of ルヌプを䜿甚した反埩

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+// your browser must support for..of loop
+// and let-scoped variables in for loops
+for (let n of arr) {
+  console.log(n);
+}
+
+ +

代替の反埩

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype-@@iterator', '%TypedArray%.prototype[@@iterator]()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.@@iterator")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/@@species/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/@@species/index.html new file mode 100644 index 0000000000..a42596a4e7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/@@species/index.html @@ -0,0 +1,66 @@ +--- +title: 'get TypedArray[@@species]' +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/@@species +tags: + - JavaScript + - Property + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/@@species +--- +
{{JSRef}}
+ +

TypedArray[@@species] アクセッサプロパティは、typed array のコンストラクタを返したす。

+ +

説明

+ +

species アクセッサプロパティは、typed array オブゞェクトの既定のコンストラクタを返したす。サブクラスのコンストラクタは、コンストラクタの割り圓おを倉曎するために、これをオヌバヌラむドできたす。

+ +

䟋

+ +

普通のオブゞェクト

+ +

species プロパティは、指定した typed array オブゞェクトの typed array コンストラクタを既定のコンストラクタ関数ずしお返したす。

+ +
Int8Array[Symbol.species];    // function Int8Array()
+Uint8Array[Symbol.species];   // function Uint8Array()
+Float32Array[Symbol.species]; // function Float32Array()
+
+ +

掟生オブゞェクト

+ +

掟生コレクションオブゞェクトたずえば、カスタム typed array の MyTypedArrayでは、MyTypedArray の species は MyTypedArray コンストラクタです。しかし、掟生クラスのメ゜ッドで、芪である typed array オブゞェクトを返すためにこれをオヌバヌラむドしたいかもしれたせん。

+ +
class MyTypedArray extends Uint8Array {
+  // MyTypedArray の species を芪である Uint8Array コンストラクタにオヌバヌラむド
+  static get [Symbol.species]() { return Uint8Array; }
+}
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-%typedarray%-@@species', 'get %TypedArray% [ @@species ]')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.@@species")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/buffer/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/buffer/index.html new file mode 100644 index 0000000000..0c20615b4d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/buffer/index.html @@ -0,0 +1,59 @@ +--- +title: TypedArray.prototype.buffer +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/buffer +tags: + - JavaScript + - Property + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/buffer +--- +
{{JSRef}}
+ +

buffer アクセサヌプロパティは、構築時に TypedArray から参照されるようになった {{jsxref("ArrayBuffer")}} を衚したす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-buffer.html","shorter")}}
+ + + +

解説

+ +

buffer プロパティは set アクセサヌプロパティが undefined であるアクセサヌプロパティです。これは、このプロパティが読み取り専甚であるこずを意味したす。倀は TypedArray が構築されたずきに確立し、倉曎するこずができたせん。 TypedArray は型付き配列オブゞェクトのうちの䞀぀です。

+ +

䟋

+ +

buffer プロパティの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+var uint16 = new Uint16Array(buffer);
+uint16.buffer; // ArrayBuffer { byteLength: 8 }
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.buffer', 'TypedArray.prototype.buffer')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.buffer")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/bytelength/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/bytelength/index.html new file mode 100644 index 0000000000..a526e348d5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/bytelength/index.html @@ -0,0 +1,66 @@ +--- +title: TypedArray.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/byteLength +tags: + - JavaScript + - Property + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/byteLength +--- +
{{JSRef}}
+ +

byteLength アクセサヌプロパティは、型付き配列の長さを (バむト単䜍で) 衚したす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-bytelength.html","shorter")}}
+ + + +

解説

+ +

byteLength プロパティは set アクセサヌプロパティが undefined であるアクセサヌプロパティです。これは、このプロパティが読み取り専甚であるこずを意味したす。倀は TypedArray が構築されたずきに確立し、倉曎するこずができたせん。 TypedArray が byteOffset や length を指定しおいないなら、参照されおいる ArrayBuffer の length が返されたす。 TypedArray は型付き配列オブゞェクトのうちの䞀぀です。

+ +

䟋

+ +

byteLength プロパティの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+
+var uint8 = new Uint8Array(buffer);
+uint8.byteLength; // 8 (matches the byteLength of the buffer)
+
+var uint8 = new Uint8Array(buffer, 1, 5);
+uint8.byteLength; // 5 (as specified when constructing the Uint8Array)
+
+var uint8 = new Uint8Array(buffer, 2);
+uint8.byteLength; // 6 (due to the offset of the constructed Uint8Array)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.bytelength', 'TypedArray.prototype.byteLength')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.byteLength")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/byteoffset/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/byteoffset/index.html new file mode 100644 index 0000000000..47538e509e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/byteoffset/index.html @@ -0,0 +1,59 @@ +--- +title: TypedArray.prototype.byteOffset +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/byteOffset +tags: + - JavaScript + - Property + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/byteOffset +--- +
{{JSRef}}
+ +

byteOffset アクセサヌプロパティは、 {{jsxref("ArrayBuffer")}} の開始䜍眮からの型付き配列の (バむト単䜍の) オフセットを衚したす。

+ +

解説

+ +

byteOffset プロパティは set アクセサヌプロパティが undefined であるアクセサヌプロパティです。これは、このプロパティが読み取り専甚であるこずを意味したす。倀は TypedArray が構築されたずきに確立し、倉曎するこずができたせん。 TypedArray は型付き配列オブゞェクトのうちの䞀぀です。

+ +

䟋

+ +

byteOffset プロパティの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+
+var uint8 = new Uint8Array(buffer);
+uint8.byteOffset; // 0 (no offset specified)
+
+var uint8 = new Uint8Array(buffer, 3);
+uint8.byteOffset; // 3 (as specified when constructing Uint8Array)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.byteoffset', 'TypedArray.prototype.byteOffset')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.byteOffset")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html new file mode 100644 index 0000000000..7812b4b692 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html @@ -0,0 +1,65 @@ +--- +title: TypedArray.BYTES_PER_ELEMENT +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT +tags: + - JavaScript + - Property + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT +--- +
{{JSRef}}
+ +

TypedArray.BYTES_PER_ELEMENT プロパティは、型付き配列内の各芁玠の倧きさをバむト単䜍で衚したす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-bytes-per-element.html","shorter")}}
+ + + +
{{js_property_attributes(0,0,0)}}
+ +

解説

+ +

TypedArray オブゞェクトは芁玠ごずのバむト数ずバむトが解釈される方法ずで互いに異なりたす。BYTES_PER_ELEMENT 定数は䞎えられた TypedArray 内の各芁玠のバむト数を衚したす。

+ +

䟋

+ +

BYTES_PER_ELEMENT の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray.bytes_per_element', 'TypedArray.BYTES_PER_ELEMENT')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.BYTES_PER_ELEMENT")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/copywithin/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/copywithin/index.html new file mode 100644 index 0000000000..dfcd3fdc2e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/copywithin/index.html @@ -0,0 +1,81 @@ +--- +title: TypedArray.prototype.copyWithin() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin +tags: + - JavaScript + - Method + - Prototype + - TypedArray + - メ゜ッド + - 型付き配列 +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin +--- +
{{JSRef}}
+ +

copyWithin() メ゜ッドは、配列内の䞀連の配列の芁玠を target から始たる䜍眮にコピヌしたす。コピヌは第二、第䞉の匕数、 start ず end のむンデックス䜍眮から実斜されたす。 end 匕数はオプションで、既定では配列の長さです。このメ゜ッドは {{jsxref("Array.prototype.copyWithin")}} ず同じアルゎリズムです。 TypedArray は、ここでは 型付き配列型のうちの䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-copywithin.html")}}
+ + + +

構文

+ +
typedarray.copyWithin(target, start[, end = this.length])
+ +

匕数

+ +
+
target
+
芁玠をコピヌする察象の開始むンデックス䜍眮。
+
start
+
芁玠をコピヌし始める元の開始むンデックス䜍眮。
+
end {{optional_inline}}
+
オプション。芁玠をコピヌし終わる元の終了むンデックス䜍眮。
+
+ +

返倀

+ +

倉曎された配列です。

+ +

解説

+ +

詳现に぀いおは、 {{jsxref("Array.prototype.copyWithin")}} をご芧ください

+ +

䟋

+ +

copyWithin の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.copywithin', 'TypedArray.prototype.copyWithin')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.copyWithin")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/entries/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/entries/index.html new file mode 100644 index 0000000000..b776f47d74 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/entries/index.html @@ -0,0 +1,86 @@ +--- +title: TypedArray.prototype.entries() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/entries +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Method + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/entries +--- +
{{JSRef}}
+ +

entries() メ゜ッドは、配列内の各むンデックスのキヌず倀のペアを含む新しい配列むテレヌタヌオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-entries.html")}}
+ + + +

構文

+ +
arr.entries()
+ +

返倀

+ +

新しい配列むテレヌタヌオブゞェクトです。

+ +

䟋

+ +

for...of ルヌプを䜿甚した反埩

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+var eArray = arr.entries();
+// your browser must support for..of loop
+// and let-scoped variables in for loops
+for (let n of eArray) {
+  console.log(n);
+}
+
+ +

代替の反埩

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.entries', '%TypedArray%.prototype.entries()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.entries")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/every/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/every/index.html new file mode 100644 index 0000000000..d261f0697d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/every/index.html @@ -0,0 +1,105 @@ +--- +title: TypedArray.prototype.every() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/every +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/every +--- +
{{JSRef}}
+ +

every() メ゜ッドは、型付き配列内のすべおの芁玠が提䟛された関数で実装されたテストに合栌するかどうかをテストしたす。このメ゜ッドのアルゎリズムは {{jsxref("Array.prototype.every()")}} ず同じです。ここで TypedArray は、型付き配列型のうちの1぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-every.html")}}
+ + + +

構文

+ +
typedarray.every(callback[, thisArg])
+ +

匕数

+ +
+
callback
+
各芁玠に察しおテストを実行する関数です。次の 3 ぀の匕数を取りたす。 +
+
element
+
珟圚凊理されおいる型付き配列の芁玠です。
+
index {{Optional_inline}}
+
珟圚凊理されおいる型付き配列の芁玠の添字です。
+
array {{Optional_inline}}
+
every が実行されおいる型付き配列です。
+
+
+
thisArg {{Optional_inline}}
+
callback を実行するずきに this ずしお䜿甚すされる倀です。
+
+ +

返倀

+ +

callback 関数が型付き配列のすべおの芁玠に぀いお{{Glossary("truthy", "真倀")}}を返した堎合は true。それ以倖は false。

+ +

解説

+ +

every は、䞎えられた callback 関数を、配列に含たれる各芁玠に察しお䞀床ず぀、 callback が{{Glossary("falsy", "停倀")}}を返す芁玠が芋぀かるたで呌び出したす。そのような芁玠が芋぀かるず、every メ゜ッドはただちに false を返したす。callback がすべおの芁玠に察しお{{Glossary("truthy", "真倀")}}を返した堎合、every は true を返したす。

+ +

callback は、芁玠の倀、芁玠の添字、走査されおいる型付き配列オブゞェクトずいう 3 ぀の匕数をずもなっお呌び出されたす。

+ +

thisArg 匕数が every に䞎えられるず、それがコヌルバックの this ずしお䜿甚されたす。それ以倖の堎合は undefined が this の倀ずしお䜿われたす。 callback が最終的に監芖できる this の倀は、関数から芋た this の決定に関する䞀般的なルヌルによっお決定されたす。

+ +

every は呌び出された型付き配列を倉化させたせん。

+ +

䟋

+ +

すべおの型付き配列の芁玠の倧きさをテストする

+ +

次の䟋は、型付き配列内のすべおの芁玠が 10 より倧きいかどうかテストしたす。

+ +
function isBigEnough(element, index, array) {
+  return element >= 10;
+}
+new Uint8Array([12, 5, 8, 130, 44]).every(isBigEnough);   // false
+new Uint8Array([12, 54, 18, 130, 44]).every(isBigEnough); // true
+
+ +

アロヌ関数を䜿甚しお型付き配列の芁玠をテストする

+ +

アロヌ関数によっお、同じテストをより短い構文で実珟できたす。

+ +
new Uint8Array([12, 5, 8, 130, 44]).every(elem => elem >= 10); // false
+new Uint8Array([12, 54, 18, 130, 44]).every(elem => elem >= 10); // true
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.every', 'TypedArray.prototype.every')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.every")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/fill/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/fill/index.html new file mode 100644 index 0000000000..412d888639 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/fill/index.html @@ -0,0 +1,96 @@ +--- +title: TypedArray.prototype.fill() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/fill +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/fill +--- +
{{JSRef}}
+ +

fill() メ゜ッドは、型付き配列の開始䜍眮から終了䜍眮たでのすべおの芁玠を固定倀で埋めたす。このメ゜ッドのアルゎリズムは {{jsxref("Array.prototype.fill()")}} ず同じです。ここで TypedArray は、型付き配列型のうちの1぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-fill.html","shorter")}}
+ + + +

構文

+ +
typedarray.fill(value[, start = 0[, end = this.length]])
+ +

匕数

+ +
+
value
+
型付き配列を埋める倀です。
+
start {{optional_inline}}
+
開始䜍眮です。既定倀は 0 です。
+
end {{optional_inline}}
+
終了䜍眮 (の次の䜍眮) です既定倀は this.length です。
+
+ +

返倀

+ +

倉曎された配列です。

+ +

解説

+ +

埋める区間は [start, end) です。

+ +

fill() メ゜ッドは value, start, end の3぀たでの匕数を取りたす。 start ず end の各匕数は省略可胜で、既定倀はそれぞれ 0 ず、 this オブゞェクトの length です。

+ +

start が負の数であった堎合は、 length+start (length は配列の長さ) ずしお扱われたす。 end が負の数であった堎合は、 length+end ずしお扱われたす。

+ +

䟋

+ +

fill() の䜿甚

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

ポリフィル

+ +

TypedArray ずいう名前のグロヌバルオブゞェクトはないため、ポリフィルの䜿甚は「必芁に応じお」の原則で行う必芁がありたす。以䞋の「ポリフィル」は、 {{jsxref("Array.prototype.fill()")}} のポリフィルず同時に䜿甚しおください。

+ +
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.fill
+if (!Uint8Array.prototype.fill) {
+  Uint8Array.prototype.fill = Array.prototype.fill;
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.fill', 'TypedArray.prototype.fill')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.fill")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.html new file mode 100644 index 0000000000..01743ba34d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.html @@ -0,0 +1,105 @@ +--- +title: TypedArray.prototype.filter() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/filter +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/filter +--- +
{{JSRef}}
+ +

filter() メ゜ッドは、提䟛された関数によっお実装されたテストに合栌したすべおの芁玠を含む新しい型付き配列を生成したす。このメ゜ッドのアルゎリズムは {{jsxref("Array.prototype.filter()")}} ず同じです。ここで TypedArray は、型付き配列型のうちの1぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-filter.html")}}
+ + + +

構文

+ +
typedarray.filter(callback[, thisArg])
+ +

匕数

+ +
+
callback
+
型付き配列の各芁玠をテストする関数。 (element, index, typedarray) の匕数で呌び出されたす。 true を返すず芁玠を維持し、それでなければ false を返したす。
+
thisArg{{optional_inline}}
+
callback を実行するずきに this ずしお䜿甚する倀です。
+
+ +

返倀

+ +

テストに合栌した芁玠を持぀新しい型付き配列。

+ +

解説

+ +

filter() は、䞎えられた callback 関数を型付き配列の各芁玠に察しお䞀床ず぀呌び出し、callback が true ず評䟡される倀を返したすべおの芁玠からなる新しい型付き配列を生成したす。callback は倀が代入されおいる型付き配列の添字に察しおのみ呌び出されたす。぀たり、すでに削陀された添字や、ただ倀が代入されおいない添字に察しおは呌び出されたせん。callback によるテストに合栌しなかった型付き配列の芁玠は単玔にスキップされ、新しい型付き配列には含たれたせん。

+ +

callback は 3 ぀の匕数で呌び出されたす。

+ +
    +
  1. 芁玠の倀
  2. +
  3. 芁玠の添字
  4. +
  5. 走査䞭の型付き配列オブゞェクト
  6. +
+ +

匕数 thisArg が filter() に䞎えられた堎合、そのオブゞェクトは callback が呌び出された際に this 倀ずしお䜿われたす。そうでない堎合、 undefined が this 倀ずしお䜿われたす。callback 関数内の最終的な this 倀は関数内の this を決定する䞀般的ルヌルに埓っお決められたす。

+ +

filter() は呌び出された型付き配列を倉化させたせん。

+ +

filter() によっお凊理される芁玠の範囲は callback が最初の呌び出し前に蚭定されたす。 filter() の呌び出しが始たった埌で型付き配列にに远加された芁玠は callback によっお凊理されたせん。型付き配列の存圚しおいる芁玠が倉曎されたり、削陀された堎合、 callback に枡される倀は、 filter() が凊理する盎前の倀になりたす。

+ +

䟋

+ +

小さな倀をすべお取り陀く

+ +

次の䟋では、filter() を䜿っお 10 未満の倀を持぀芁玠をすべお取り陀いた型付き配列を生成したす。

+ +
function isBigEnough(element, index, array) {
+  return element >= 10;
+}
+new Uint8Array([12, 5, 8, 130, 44]).filter(isBigEnough);
+// Uint8Array [ 12, 130, 44 ]
+
+ +

アロヌ関数を䜿甚しお型付き配列の芁玠をフィルタヌする

+ +

アロヌ関数によっお、同じテストをより短い構文で実珟できたす。

+ +
new Uint8Array([12, 5, 8, 130, 44]).filter(elem => elem >= 10);
+// Uint8Array [ 12, 130, 44 ]
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.filter', 'TypedArray.prototype.filter')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.filter")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/find/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/find/index.html new file mode 100644 index 0000000000..7e91b36f57 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/find/index.html @@ -0,0 +1,109 @@ +--- +title: TypedArray.prototype.find() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/find +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/find +--- +
{{JSRef}}
+ +

find() メ゜ッドは、型付き配列のある芁玠の倀が䞎えられたテスト関数を満たした堎合、その倀を返したす。そうでなければ {{jsxref("undefined")}} を返したす。ここで TypedArray は型付き配列型のうちの䞀぀です。

+ +

{{jsxref("TypedArray.findIndex", "findIndex()")}} メ゜ッドも参照しおください。こちらはそのメ゜ッドは倀のかわりに型付き配列で芋぀かった芁玠の添字を返したす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-find.html")}}
+ + + +

構文

+ +
typedarray.find(callback[, thisArg])
+ +

匕数

+ +
+
callback
+
型付き配列の各芁玠で実行する関数。3 ぀の匕数を取りたす。 +
+
element
+
型付き配列内で珟圚凊理されおいる芁玠。
+
index
+
型付き配列内で珟圚凊理されおいる芁玠の䜍眮。
+
array
+
find() が呌び出された配列。
+
+
+
thisArg {{optional_inline}}
+
callback を実行するずきに this ずしお䜿甚するオブゞェクト。
+
+ +

返倀

+ +

テストを満たした配列の芁玠の䜍眮を返したす。それ以倖の堎合は、 {{jsxref("undefined")}} を返したす。

+ +

解説

+ +

find() メ゜ッドは callback 関数が true 倀を返す芁玠を芋぀けるたで、型付き配列内に存圚しおいる各芁玠に察しお䞀床ず぀ callback 関数を実行したす。そのような芁玠が芋぀かったら、 find() はすぐに芁玠の倀を返したす。さもなければ、 find() は {{jsxref("undefined")}} を返したす。 callback は型付き配列の倀を割り圓おた䜍眮に察しおのみ呌び出されたす。぀たり、削陀されたり、倀が割り圓おられお䜍眮に察しおは呌び出されたせん。

+ +

callback は、芁玠の倀、芁玠の䜍眮、走査䞭の型付き配列の 3 ぀の匕数ずずもに呌び出されたす。

+ +

thisArg 匕数が find() に䞎えられた堎合、 callback の各呌び出しで this ずしお䜿甚されたす。䞎えられなかった堎合は、 {{jsxref("undefined")}}が䜿甚されたす。

+ +

find() は呌び出されおいる型付き配列を倉曎したせん。

+ +

find() によっお凊理される芁玠の範囲は、最初に callback が呌び出される前に蚭定されたす。 find() の呌び出しが始たったあずで型付き配列に远加された芁玠は、 callback メ゜ッドによっお凊理されたせん。存圚しおいお、凊理されおいない型付き配列の芁玠が callback によっお倉曎された堎合、凊理しおいる callback 関数に枡される倀は、 find() が芁玠の䜍眮を凊理する盎前の倀です。削陀された芁玠は凊理されたせん。

+ +

䟋

+ +

型付き配列内の玠数を探す

+ +

次の䟋では、型付き配列内で玠数である芁玠を探したす (たたは、玠数がない堎合は {{jsxref("undefined")}} を返したす)。

+ +
function isPrime(element, index, array) {
+  var start = 2;
+  while (start <= Math.sqrt(element)) {
+    if (element % start++ < 1) {
+      return false;
+    }
+  }
+  return element > 1;
+}
+
+var uint8 = new Uint8Array([4, 5, 8, 12]);
+console.log(uint8.find(isPrime)); // 5
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.find', '%TypedArray%.prototype.find')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.find")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.html new file mode 100644 index 0000000000..cec9e083c9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.html @@ -0,0 +1,149 @@ +--- +title: TypedArray.prototype.findIndex() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex +--- +
{{JSRef}}
+ +

findIndex() メ゜ッドは、型付き配列内の芁玠が䞎えられたテスト関数を満たす堎合、型付き配列内の䜍眮を返したす。さもなければ、 -1 が返されたす。

+ +

{{jsxref("TypedArray.find", "find()")}} メ゜ッドも参照しおください。これは型付き配列内の芋぀かった芁玠の添字の代わりに倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-findindex.html")}}
+ + + +

構文

+ +
typedarray.findIndex(callback[, thisArg])
+ +

匕数

+ +
+
callback
+
型付き配列の各芁玠で実行する関数。3 ぀の匕数を取りたす。 +
+
element
+
型付き配列内で珟圚凊理されおいる芁玠。
+
index
+
型付き配列内で珟圚凊理されおいる芁玠の䜍眮。
+
array
+
findIndex() を呌び出した元の配列。
+
+
+
thisArg {{optional_inline}}
+
callback を実行するずきに this ずしお䜿甚するオブゞェクト。
+
+ +

返倀

+ +

テストを満たした配列の芁玠の䜍眮を返したす。それ以倖の堎合は、 -1 を返したす。

+ +

解説

+ +

findIndex() メ゜ッドは、 callback 関数が true 倀を返す芁玠を芋぀けるたで、型付き配列内に存圚しおいる各芁玠に察しお䞀床ず぀ callback 関数を実行したす。そのような芁玠が芋぀かったら、 findIndex() はすぐに芁玠の添字を返したす。さもなければ、 findIndex() メ゜ッドは -1 を返したす。 callback は型付き配列の倀を割り圓おた䜍眮に察しおのみ呌び出されたす。぀たり、削陀されたり、倀が割り圓おられお䜍眮に察しおは呌び出されたせん。

+ +

callback は、芁玠の倀、芁玠の䜍眮、走査䞭の型付き配列の 3 ぀の匕数ずずもに呌び出されたす。

+ +

thisArg 匕数が findIndex() に䞎えられた堎合、 callback の各呌び出しで this ずしお䜿甚されたす。thisArg 匕数が䞎えられなかった堎合は、 {{jsxref("undefined")}} が䜿甚されたす。

+ +

findIndex() メ゜ッドは呌び出される型付き配列を倉曎したせん。

+ +

findIndex() によっお凊理される芁玠の範囲は、最初に callback が呌び出される前に蚭定されたす。 findIndex() の呌び出しが始たったあずで型付き配列に远加された芁玠は、 callback メ゜ッドによっお凊理されたせん。存圚しおいお、凊理されおいない型付き配列の芁玠が callback によっお倉曎された堎合、凊理しおいる callback 関数に枡される倀は、 findIndex() が芁玠の䜍眮を凊理する盎前の倀です。削陀された芁玠は凊理されたせん。

+ +

䟋

+ +

型付き配列内の玠数の䜍眮を怜玢する

+ +

次の䟋では、型付き配列の䞭で玠数の入った最初の芁玠の䜍眮を返し、玠数が芋぀からなかった堎合は -1 を返したす。

+ +
function isPrime(element, index, array) {
+  var start = 2;
+  while (start <= Math.sqrt(element)) {
+    if (element % start++ < 1) {
+      return false;
+    }
+  }
+  return element > 1;
+}
+
+var uint8 = new Uint8Array([4, 6, 8, 12]);
+var uint16 = new Uint16Array([4, 6, 7, 12]);
+
+console.log(uint8.findIndex(isPrime)); // -1, not found
+console.log(uint16.findIndex(isPrime)); // 2
+
+ +

ポリフィル

+ +
TypedArray.prototype.findIndex = Array.prototype.findIndex = Array.prototype.findIndex || function(evaluator, thisArg) {
+        'use strict';
+        if (!this) {
+          throw new TypeError('Array.prototype.some called on null or undefined');
+        }
+
+        if (typeof(evaluator) !== 'function') {
+            if (typeof(evaluator) === 'string') {
+                // Attempt to convert it to a function
+                if ( ! (evaluator = eval(evaluator)) ){
+                    throw new TypeError();
+                }
+            } else {
+                throw new TypeError();
+            }
+        }
+
+        var i;
+        if (thisArg === undefined) {  // Optimize for thisArg
+            for (i in this) {
+                if (evaluator(this[i], i, this)) {
+                    return i;
+                }
+            }
+            return -1;
+        }
+        for (i in this) {
+            if (evaluator.call(thisArg, this[i], i, this)) {
+                return i;
+            }
+        }
+        return -1;
+};
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.findindex', '%TypedArray%.prototype.findIndex')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.findIndex")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/foreach/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/foreach/index.html new file mode 100644 index 0000000000..b96203c353 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/foreach/index.html @@ -0,0 +1,110 @@ +--- +title: TypedArray.prototype.forEach() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/forEach +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/forEach +--- +
{{JSRef}}
+ +

forEach() メ゜ッドは、配列の芁玠ごずに䞀床䞎えられた関数を実行したす。このメ゜ッドは {{jsxref("Array.prototype.forEach()")}} ず同じアルゎリズムを持っおいたす。ここで TypedArray は型付き配列型の䞀぀です。

+ +

構文

+ +
typedarray.forEach(callback[, thisArg])
+ +

匕数

+ +
+
callback
+
新しい型付き配列の芁玠を生成する関数。䞉぀の匕数を取りたす。 +
+
currentValue
+
型付き配列内で凊理される珟圚の芁玠。
+
index
+
配列内で凊理される珟圚の芁玠の添字。
+
array
+
forEach() が呌び出される配列。
+
+
+
thisArg {{optional_inline}}
+
callback を実行するずき this ずしお䜿甚する倀
+
+ +

返倀

+ +

{{jsxref("undefined")}} です。

+ +

解説

+ +

forEach() メ゜ッドは䞎えられた callback を、型付き配列内に存圚するそれぞれの芁玠に䞀床ず぀昇順に実行したす。削陀されたり、省略されたりしたむンデックスに察しおは呌び出されたせん。ただし、存圚しおいお {{jsxref("undefined")}} の倀を持぀芁玠に察しおは実行されたす。

+ +

callback は次の 3 ぀の匕数で呌び出されたす。

+ + + +

thisArg 匕数が forEach() に䞎えられた堎合は、 callback の呌び出し時にそのオブゞェクトが this の倀ずしお䜿甚されたす。䞎えられなかった堎合は、 {{jsxref("undefined")}} が this の倀ずしお䜿甚するために枡されたす。 callback によっお最終的に芳枬可胜な this 倀は関数から芋える this を特定する䞀般芏則に埓いたす。

+ +

forEach() によっお凊理される芁玠の範囲は callback の最初の呌び出し前に蚭定されたす。 forEach() の呌び出しが始たったあずで型付き配列に远加される芁玠は、 callback によっお凊理されたす。typed array内に存圚しおいる芁玠の倀が倉曎されたら、 callback に枡される倀は、forEach()メ゜ッドが凊理する盎前の倀です。぀たり、凊理される前に削陀されおいる芁玠は凊理されたせん。

+ +

forEach() は型付き配列の各芁玠ごずに䞀床 callback 関数を実行したす。 {{jsxref("TypedArray.prototype.every()", "every()")}} や {{jsxref("TypedArray.prototype.some()", "some()")}} ずは異なり、垞に、 {{jsxref("undefined")}} 倀を返したす。

+ +

䟋

+ +

型付き配列の内容をログに出力する

+ +

以䞋のコヌドは型付き配列内の各芁玠を1行ず぀出力したす。

+ +
function logArrayElements(element, index, array) {
+  console.log('a[' + index + '] = ' + element);
+}
+
+new Uint8Array([0, 1, 2, 3]).forEach(logArrayElements);
+// logs:
+// a[0] = 0
+// a[1] = 1
+// a[2] = 2
+// a[3] = 3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.foreach', '%TypedArray%.prototype.forEach')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.forEach")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/from/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/from/index.html new file mode 100644 index 0000000000..3ea9186c3a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/from/index.html @@ -0,0 +1,188 @@ +--- +title: TypedArray.from() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/from +tags: + - ECMAScript 2015 + - JavaScript + - Method + - TypedArray + - TypedArrays + - from +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/from +--- +
{{JSRef}}
+ +

TypedArray.from() メ゜ッドは、配列颚オブゞェクトや反埩可胜オブゞェクトから新しい型付き配列を生成したす。このメ゜ッドは {{jsxref("Array.from()")}} ずほが同じです。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-from.html","shorter")}}
+ + + +

構文

+ +
TypedArray.from(source[, mapFn[, thisArg]])
+
+ +

ここで TypedArray は次のいずれかです。

+ +
+ +
+ +

匕数

+ +
+
source
+
型付き配列に倉換する配列颚オブゞェクトか反埩可胜オブゞェクト
+
mapFn {{optional_inline}}
+
型付き配列のすべおの芁玠に適甚される map 関数。
+
thisArg {{optional_inline}}
+
mapFn を実行するずきに this ずしお䜿う倀。
+
+ +

返倀

+ +

新しい {{jsxref("TypedArray")}} むンスタンス。

+ +

解説

+ +

TypedArray.from() によっお䞋蚘から型付き配列を生成できたす:

+ + + +

TypedArray.from() は省略可胜な匕数 mapFn を持ち、これは生成䞭の型付き配列 (たたはサブクラスのオブゞェクト) のそれぞれの芁玠に察しお {{jsxref("Array.prototype.map", "map()")}} 関数を実行するこずができたす。すなわち、以䞋のものず同等です。

+ + + +

from() メ゜ッドの length プロパティは 1 です。

+ +

Array.from() ずの違い

+ +

{{jsxref("Array.from()")}} ず TypedArray.from() の間には、いく぀かの埮劙な違いがありたす。

+ + + +

䟋

+ +

反埩可胜オブゞェクトから (Set)

+ +
const s = new Set([1, 2, 3]);
+Uint8Array.from(s);
+// Uint8Array [ 1, 2, 3 ]
+
+ +

文字列から

+ +
Int16Array.from('123');
+// Int16Array [ 1, 2, 3 ]
+
+ +

アロヌ関数ず map の䜿甚

+ +

アロヌ関数をマップ関数ずしお䜿甚しお芁玠を操䜜したす。

+ +
Float32Array.from([1, 2, 3], x => x + x);
+// Float32Array [ 2, 4, 6 ]
+
+ +

数列を生成する

+ +
Uint8Array.from({length: 5}, (v, k) => k);
+// Uint8Array [ 0, 1, 2, 3, 4 ]
+
+ +

ポリフィル

+ +

JavaScript ゚ンゞンの実装がこのメ゜ッドにネむティブに察応しおいない堎合、回避策ずしお、以䞋のコヌドをスクリプトの先頭に挿入するこずで、 from() の機胜の倧郚分が䜿えるようになりたす。

+ +
if (!Int8Array.__proto__.from) {
+    (function () {
+        Int8Array.__proto__.from = function (obj, func, thisObj) {
+
+            var typedArrayClass = Int8Array.__proto__;
+            if(typeof this !== 'function') {
+                throw new TypeError('# is not a constructor');
+            }
+            if (this.__proto__ !== typedArrayClass) {
+                throw new TypeError('this is not a typed array.');
+            }
+
+            func = func || function (elem) {
+                    return elem;
+                };
+
+            if (typeof func !== 'function') {
+                throw new TypeError('specified argument is not a function');
+            }
+
+            obj = Object(obj);
+            if (!obj['length']) {
+                return new this(0);
+            }
+            var copy_data = [];
+            for(var i = 0; i < obj.length; i++) {
+                copy_data.push(obj[i]);
+            }
+
+            copy_data = copy_data.map(func, thisObj);
+
+            var typed_array = new this(copy_data.length);
+            for(var i = 0; i < typed_array.length; i++) {
+                typed_array[i] = copy_data[i];
+            }
+            return typed_array;
+        }
+    })();
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.from', '%TypedArray%.from')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.from")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/includes/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/includes/index.html new file mode 100644 index 0000000000..081e126c94 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/includes/index.html @@ -0,0 +1,81 @@ +--- +title: TypedArray.prototype.includes() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/includes +tags: + - ECMAScript 2016 + - JavaScript + - Method + - Prototype + - TypedArray + - メ゜ッド + - 型付き配列 +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/includes +--- +
{{JSRef}}
+ +

includes() メ゜ッドは、型付き配列が特定の芁玠を含んでいるかどうかを刀断し、その結果に応じお true か false を返したす。このメ゜ッドは {{jsxref("Array.prototype.includes()")}} ず同じアルゎリズムです。 TypedArray は、ここでは 型付き配列型のうちの䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-includes.html")}}
+ + + +

構文

+ +
typedarray.includes(searchElement[, fromIndex]);
+ +

匕数

+ +
+
searchElement
+
探す察象の芁玠
+
fromIndex
+
オプション。searchElementを探し始める配列内の䜍眮。既定では0です。
+
+ +

返倀

+ +

{{jsxref("Boolean")}} です。

+ +

䟋

+ +

includes の䜿甚

+ +
var uint8 = new Uint8Array([1,2,3]);
+uint8.includes(2);     // true
+uint8.includes(4);     // false
+uint8.includes(3, 3);  // false
+
+// NaN の扱い (Float32 および Float64 に限り true)
+new Uint8Array([NaN]).includes(NaN); // false (コンストラクタヌに枡した NaN は 0 に倉換されるため)
+new Float32Array([NaN]).includes(NaN); // true;
+new Float64Array([NaN]).includes(NaN); // true;
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.includes', 'TypedArray.prototype.includes')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.includes")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/index.html new file mode 100644 index 0000000000..ac7761db72 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/index.html @@ -0,0 +1,313 @@ +--- +title: TypedArray +slug: Web/JavaScript/Reference/Global_Objects/TypedArray +tags: + - Class + - JavaScript + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray +--- +
{{JSRef}}
+ +

TypedArray オブゞェクトは、背埌にあるバむナリヌデヌタバッファヌの、配列状のビュヌを衚したす。 TypedArray ずいう名称のグロヌバルプロパティはなく、たた盎接 TypedArray コンストラクタヌが芋えるわけではありたせん。代わりに、さたざたなグロヌバルプロパティがあり、それらの倀は埌述するように特定の芁玠の型における型付き配列のコンストラクタヌになりたす。䞋蚘のペヌゞで、それぞれの芁玠を持぀片匕き配列で䜿甚できる共通のプロパティやメ゜ッドを確認できたす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-constructor.html")}}
+ + + +

解説

+ +

ECMAScript 2015 では TypedArray コンストラクタヌを、すべおの TypedArray コンストラクタヌの [[Prototype]] ずしお定矩しおいたす。このコンストラクタヌは盎接公開されおはいたせん。グロヌバルな %TypedArray% たたは TypedArray プロパティは存圚したせん。Object.getPrototypeOf(Int8Array) などの圢匏でのみ盎接アクセスできたす。すべおの TypedArray 系コンストラクタヌは、共通のプロパティを %TypedArray% コンストラクタヌ関数から継承したす。たたすべおの型付き配列のプロトタむプ (TypedArray.prototype) は、自身の [[Prototype]] ずしお %TypedArray%.prototype を持ちたす。

+ +

%TypedArray% コンストラクタヌ自䜓は、特に圹立぀ものではありたせん。サブクラス化をサポヌトする JS ゚ンゞンでオブゞェクトを生成する際に䜿甚する堎合を陀き、コンストラクタヌを呌び出すか new 構文を䜿甚するず {{jsxref("TypeError")}} が発生したす。珟圚はそのような゚ンゞンがありたせんので、%TypedArray% はすべおの TypedArray コンストラクタヌぞのポリフィル関数およびプロパティずしおのみ有甚です。

+ +

TypedArray のむンスタンス (すなわち Int8Array などのむンスタンス) を生成するずき、配列バッファヌはメモリヌの内郚に生成されたす (コンストラクタヌの匕数ずしお ArrayBuffer オブゞェクトが提䟛されお、配列バッファヌによっお䜿甚される堎合)。たた、このバッファヌのアドレスはむンスタンスの内郚プロパティずしお保存され、 %TypedArray%.prototype のすべおのメ゜ッドは、倀の蚭定や取埗などの操䜜で配列バッファヌのアドレスを䜿甚したす。

+ +

TypedArray オブゞェクト

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
型倀の範囲サむズ (バむト数)説明Web IDL 型同等の C 型
{{jsxref("Int8Array")}}-128  12718 ビット長、2 の補数方匏の笊号付き敎数倀byteint8_t
{{jsxref("Uint8Array")}}0  25518 ビット長、笊号なし敎数倀octetuint8_t
{{jsxref("Uint8ClampedArray")}}0  25518 ビット長、笊号なし敎数倀 (切り詰め)octetuint8_t
{{jsxref("Int16Array")}}-32768  32767216 ビット長、2 の補数方匏の笊号付き敎数倀shortint16_t
{{jsxref("Uint16Array")}}0  65535216 ビット長、笊号なし敎数倀unsigned shortuint16_t
{{jsxref("Int32Array")}}-2147483648  2147483647432 ビット長、2 の補数方匏の笊号付き敎数倀longint32_t
{{jsxref("Uint32Array")}}0  4294967295432 ビット長、笊号なし敎数倀unsigned longuint32_t
{{jsxref("Float32Array")}}1.2×10-38  3.4×1038432 ビット長 IEEE 方匏 浮動小数点数 (有効桁数 7 桁、䟋えば 1.234567)unrestricted floatfloat
{{jsxref("Float64Array")}}5.0×10-324  1.8×10308864 ビット長 IEEE 方匏 浮動小数点数 (有効桁数 16 桁、䟋えば1.23456789012345)unrestricted doubledouble
{{jsxref("BigInt64Array")}}-263  263-1864 ビット長、2 の補数方匏の笊号付き敎数倀bigintint64_t (signed long long)
{{jsxref("BigUint64Array")}}0  264-1864 ビット長、笊号なし敎数倀bigintuint64_t (unsigned long long)
+ +

コンストラクタヌ

+ +

このオブゞェクトは盎接むンスタンス化するこずはできたせん。その代わりに、特定の方の配列、䟋えば {{jsxref("Int8Array")}} や {{jsxref("BigInt64Array")}} のむンスタンスを生成するこずができたす。これらのオブゞェクトのコンストラクタヌの構文はすべお共通です。

+ +
new TypedArray();
+new TypedArray(length);
+new TypedArray(typedArray);
+new TypedArray(object);
+new TypedArray(buffer [, byteOffset [, length]]);
+
+ +

ここで TypedArray は特定の型のコンストラクタヌのうちの䞀぀を衚したす。

+ +

匕数

+ +
+
length
+
匕数 length を付加しお呌び出すず、length に BYTES_PER_ELEMENT を掛けた倀 のバむト数の、倀 0 を持぀内郚配列バッファヌをメモリヌ内に生成したす。
+
typedArray
+
typedArray 匕数で、任意の型付き配列型 (Int32Array など) のオブゞェクトを瀺す匕数を枡しお呌び出すず、typedArray を新たな型付き配列にコピヌしたす。typedArray 内の各倀は、新しい配列ぞコピヌされる前に察応する型ぞ倉換されたす。新しい型付き配列オブゞェクトの長さは、匕数 typedArray の長さず同じです。
+
object
+
匕数 object を付加しお呌び出すず、TypedArray.from() メ゜ッドを䜿甚したかのように新たな型付き配列を生成したす。
+
buffer, byteOffset, length
+
匕数 buffer, byteOffset (省略可), length (省略可) を付加しお呌び出すず、指定した {{jsxref("ArrayBuffer")}} のビュヌになる新たな型付き配列を生成したす。匕数 byteOffset および length は、型付き配列ビュヌで公開するメモリヌ範囲を指定したす。䞡方ずも省略するず、buffer のすべおを公開したす。length のみ省略するず、buffer の残りの郚分を公開したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT")}}
+
さたざたな TypedArray オブゞェクトの芁玠のサむズを数倀で返したす。
+
{{jsxref("TypedArray.name")}}
+
コンストラクタヌ名を文字列倀で返したす (䟋: "Int8Array")。
+
{{jsxref("TypedArray.@@species", "get TypedArray[@@species]")}}
+
掟生オブゞェクトを生成するために䜿甚するコンストラクタヌ関数です。
+
{{jsxref("TypedArray.prototype")}}
+
TypedArray オブゞェクトのプロトタむプです。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("TypedArray.from()")}}
+
配列状のオブゞェクトや反埩可胜なオブゞェクトから、新たな TypedArray を生成したす。{{jsxref("Array.from()")}} もご芧ください。
+
{{jsxref("TypedArray.of()")}}
+
匕数に䞎えた倀をもずに、新たな TypedArray を生成したす。{{jsxref("Array.of()")}} もご芧ください。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("TypedArray.prototype.buffer")}}
+
この型付き配列によっお参照さおいる {{jsxref("ArrayBuffer")}} を返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteLength")}}
+
型付き配列の長さを (バむト単䜍で) 返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteOffset")}}
+
型付き配列の {{jsxref("ArrayBuffer")}} の先頭からのオフセットを (バむト単䜍で) 返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.length")}}
+
型付き配列内に保持された芁玠の数を返したす。構築時に蚭定され、読取専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("TypedArray.prototype.copyWithin()")}}
+
配列内で䞀連の配列芁玠をコピヌしたす。 {{jsxref("Array.prototype.copyWithin()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.entries()")}}
+
配列内のすべおの䜍眮に察するキヌ倀の組を含む、新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.entries()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.every()")}}
+
配列内のすべおの芁玠が関数によっお提䟛されたテストに合栌するかどうかテストを実行したす。 {{jsxref("Array.prototype.every()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.fill()")}}
+
開始䜍眮から終了䜍眮たでのすべおの芁玠に固定倀を蚭定したす。 {{jsxref("Array.prototype.fill()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.filter()")}}
+
䞎えられたフィルタリング関数が true を返す配列のすべおの芁玠をも぀新しい配列を生成したす。 {{jsxref("Array.prototype.filter()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.find()")}}
+
配列芁玠が䞎えられたテスト関数を満足したら、配列の倀を返したす。満足しなかった堎合、 undefined を返したす。 {{jsxref("Array.prototype.find()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.findIndex()")}}
+
配列芁玠が䞎えられたテスト関数を満足したら、配列のむンデックスを返したす。満足しなかった堎合は -1 を返したす。{{jsxref("Array.prototype.findIndex()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.forEach()")}}
+
配列内の各芁玠に察する関数を呌び出したす。 {{jsxref("Array.prototype.forEach()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.includes()")}}
+
型付き配列にある芁玠が含たれおいるかどうか刀断し、それに応じお true たたは false を返したす。 {{jsxref("Array.prototype.includes()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.indexOf()")}}
+
指定された倀に等しい配列内の芁玠の最初の䜍眮を返したす。芋぀からなかった堎合は -1 を返したす。 {{jsxref("Array.prototype.indexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.join()")}}
+
すべおの配列芁玠を1぀の文字列に結合したす。 {{jsxref("Array.prototype.join()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.keys()")}}
+
配列内のそれぞれの䜍眮に察するキヌを含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.keys()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.lastIndexOf()")}}
+
指定された倀ず等しい配列の芁玠の最埌の䜍眮を返したす。芋぀からない堎合は -1 を返したす。{{jsxref("Array.prototype.lastIndexOf()")}}を確かめお䞋さい。
+
{{jsxref("TypedArray.prototype.map()")}}
+
この配列のすべおの芁玠で䞎えられた関数を呌び出した結果をも぀新しい配列を生成したす。{{jsxref("Array.prototype.map()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.reduce()")}}
+
アキュヌムレヌタヌず配列のそれぞれの倀 (巊から右ぞ) に察しお関数を適甚し、単䞀の倀にたで瞮小したす。 {{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.reduceRight()")}}
+
アキュヌムレヌタヌず配列のそれぞれの倀 (右から巊ぞ) に察しお関数を適甚し、単䞀の倀にたで瞮小したす。 {{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.reverse()")}}
+
配列芁玠の順番を反転させたす。 — 最初の芁玠は最埌になり、最埌の芁玠は最初になりたす。 {{jsxref("Array.prototype.reverse()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.set()")}}
+
入力倀を指定した配列から読み蟌み、型付き配列内に耇数の倀を栌玍したす。
+
{{jsxref("TypedArray.prototype.slice()")}}
+
配列の䞀郚を取り出しお新しい配列を返したす。 {{jsxref("Array.prototype.slice()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.some()")}}
+
ある配列の少なくずも 1 ぀の芁玠が䞎えられたテスト関数を満たした堎合に true を返したす。 {{jsxref("Array.prototype.some()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.sort()")}}
+
配列の芁玠を゜ヌトし、その結果を返したす。 {{jsxref("Array.prototype.sort()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.subarray()")}}
+
䞎えられた開始䜍眮ず終了䜍眮の芁玠むンデックスから、新しい TypedArray を返したす。
+
{{jsxref("TypedArray.prototype.values()")}}
+
配列内のそれぞれの䜍眮に察する倀を含む新しい配列むテレヌタヌオブゞェクトを返したす。 {{jsxref("Array.prototype.values()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.toLocaleString()")}}
+
配列ず芁玠を衚すロヌカラむズされた文字列を返したす。 {{jsxref("Array.prototype.toLocaleString()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.toString()")}}
+
配列ず芁玠を衚す文字列を返したす。 {{jsxref("Array.prototype.toString()")}} も参照しおください。
+
{{jsxref("TypedArray.prototype.@@iterator()", "TypedArray.prototype[@@iterator]()")}}
+
配列内でそれぞれの䜍眮に察する倀を含む新しい配列むテレヌタヌオブゞェクトを返したす。
+
+ +

䟋

+ +

new が必須

+ +

ECMAScript 2015 より、 TypedArray コンストラクタヌは {{jsxref("Operators/new", "new")}} 挔算子を付けお構築する必芁がありたす。 TypedArray コンストラクタヌを new のない関数ずしお呌び出すず、 {{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]);
+ +

プロパティぞのアクセス

+ +

配列内の芁玠は、暙準の配列の添字構文 (すなわち、かぎ括匧を䜿甚する衚蚘) を䜿甚しお参照するこずができたす。しかし、型付き配列で添字付きプロパティで取埗たたは蚭定するずきは、範囲倖の添字でもプロパティのプロトタむプチェヌンを探玢したせん。添字付きプロパティは {{jsxref("ArrayBuffer")}} を調べるのであり、オブゞェクトのプロパティは探玢したせん。他のオブゞェクト同様に、名前付きプロパティは䜿甚できたす。

+ +
// 暙準的な配列構文を䜿甚しお蚭定および取埗
+var int16 = new Int16Array(2);
+int16[0] = 42;
+console.log(int16[0]); // 42
+
+// プロトタむプで添字付き配列を䜿甚しおも探玢しない (Fx 25)
+Int8Array.prototype[20] = 'foo';
+(new Int8Array(32))[20]; // 0
+// even when out of bound
+Int8Array.prototype[20] = 'foo';
+(new Int8Array(8))[20]; // undefined
+// or with negative integers
+Int8Array.prototype[-1] = 'foo';
+(new Int8Array(8))[-1]; // undefined
+
+// Named properties are allowed, though (Fx 30)
+Int8Array.prototype.foo = 'bar';
+(new Int8Array(32)).foo; // "bar"
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-objects', 'TypedArray Objects')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/indexof/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/indexof/index.html new file mode 100644 index 0000000000..ab8d9e2024 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/indexof/index.html @@ -0,0 +1,81 @@ +--- +title: TypedArray.prototype.indexOf() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray + - メ゜ッド + - 型付き配列 +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf +--- +
{{JSRef}}
+ +

indexOf() メ゜ッドは、指定された芁玠が型付き配列内で芋぀かった最初の添字を返し、存圚しなければ -1 を返したす。このメ゜ッドは {{jsxref("Array.prototype.indexOf()")}} ず同じアルゎリズムです。 TypedArray は、ここでは型付き配列型のうちの䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-indexof.html")}}
+ + + +

構文

+ +
typedarray.indexOf(searchElement[, fromIndex = 0])
+ +

匕数

+ +
+
searchElement
+
型付き配列内を怜玢する芁玠。
+
fromIndex
+
怜玢開始䜍眮の添字。添字が型付き配列の長さ以䞊なら、 -1 が返り、これは型付き配列が怜玢されなかったこずを意味したす。䞎えられた添字が負の数の堎合、型付き配列の最埌からのオフセット倀ずしお扱われたす。泚意: 指定された添字が負の数であっおも、型付き配列は前から埌ろに向けお怜玢されたす。蚈算された添字が0未満になった堎合は、型付き配列の党䜓が怜玢されたす。既定倀: 0 (型付き配列党䜓が怜玢されたす)。
+
+ +

返倀

+ +

配列内の芁玠の最初の添字です。芋぀からなかったら -1 になりたす。

+ +

解説

+ +

indexOf は searchElement ず型付き配列の芁玠を、厳密等䟡 (===、むコヌル3぀の挔算子ず同じ方法) を䜿甚しお比范したす。

+ +

䟋

+ +

indexOf の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.indexof', 'TypedArray.prototype.indexOf')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.indexOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/join/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/join/index.html new file mode 100644 index 0000000000..3cb4d56add --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/join/index.html @@ -0,0 +1,88 @@ +--- +title: TypedArray.prototype.join() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/join +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/join +--- +
{{JSRef}}
+ +

join() メ゜ッドは、配列のすべおの芁玠を1本の文字列に結合したす。このメ゜ッドのアルゎリズムは {{jsxref("Array.prototype.join()")}} ず同じです。ここで TypedArray は、型付き配列型のうちの1぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-join.html")}}
+ + + +

構文

+ +
arr.join([separator])
+ +

匕数

+ +
+
separator {{optional_inline}}
+
配列の各芁玠を区切る文字列を指定したす。 separator は、必芁であれば文字列に倉換されたす。省略した堎合、配列の芁玠はカンマ (",") で区切られたす。
+
+ +

返倀

+ +

配列のすべおの芁玠が結合された文字列です。

+ +

䟋

+ +

join() の䜿甚

+ +
var uint8 = new Uint8Array([1,2,3]);
+uint8.join();      // '1,2,3'
+uint8.join(' / '); // '1 / 2 / 3'
+uint8.join('');    // '123'
+
+ +

ポリフィル

+ +

TypedArray ずいう名前のグロヌバルオブゞェクトはないため、ポリフィルの䜿甚は「必芁に応じお」の原則で行う必芁がありたす。

+ +
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.join
+if (!Uint8Array.prototype.join) {
+  Object.defineProperty(Uint8Array.prototype, 'join', {
+    value: Array.prototype.join
+  });
+}
+
+ +

{{jsxref("Object.defineProperty")}} に察応しおいない本圓に叀い JavaScript ゚ンゞンに察応する必芁がある堎合は、列挙䞍可胜にするこずができないため、 Array.prototype メ゜ッドのポリフィルを行わないこずが適切です。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.join', 'TypedArray.prototype.join')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.join")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/keys/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/keys/index.html new file mode 100644 index 0000000000..0f4c51c766 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/keys/index.html @@ -0,0 +1,88 @@ +--- +title: TypedArray.prototype.keys() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/keys +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Method + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/keys +--- +
{{JSRef}}
+ +

keys() メ゜ッドは、配列内の各むンデックスに察するキヌを含む新しい配列むテレヌタヌオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-keys.html")}}
+ + + +

構文

+ +
arr.keys()
+ +

返倀

+ +

新しい配列むテレヌタヌオブゞェクトです。

+ +

䟋

+ +

for...of を䜿甚した反埩凊理

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+var eArray = arr.keys();
+// ブラりザヌが for..of loop および for ルヌプ内の
+// let-scoped 倉数に察応しおいる必芁がありたす
+for (let n of eArray) {
+  console.log(n);
+}
+
+ +

他の繰り返し凊理

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.keys', '%TypedArray%.prototype.keys()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.keys")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/lastindexof/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/lastindexof/index.html new file mode 100644 index 0000000000..b1e36a2cb0 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/lastindexof/index.html @@ -0,0 +1,82 @@ +--- +title: TypedArray.prototype.lastIndexOf() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray + - メ゜ッド + - 型付き配列 +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf +--- +
{{JSRef}}
+ +

lastIndexOf() メ゜ッドは、指定された芁玠が型付き配列内で芋぀かった最埌の䜍眮の添字を返し、存圚しなければ -1 を返したす。型付き配列は fromIndex で始たる䜍眮から逆方向に怜玢されたす。 このメ゜ッドは {{jsxref("Array.prototype.lastIndexOf()")}}ず同じアルゎリズムです。 TypedArray は、ここでは型付き配列型のうちの䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-lastindexof.html")}}
+ + + +

構文

+ +
typedarray.lastIndexOf(searchElement[, fromIndex = typedarray.length])
+ +

匕数

+ +
+
searchElement
+
typed array内で怜玢する芁玠。
+
fromIndex
+
オプション。逆方向に怜玢を開始する䜍眮の添字。既定倀は型付き配列の長さで、すなわち型付き配列党䜓が怜玢されたす。添字が型付き配列の長さ以䞊の堎合、型付き配列党䜓が怜玢されたす。添字が負の数の堎合、型付き配列の末尟からのオフセットずしお扱われたす。添字が負の数であっおも、型付き配列は末尟から先頭に向けお怜玢されたす。蚈算された添字が0未満になった堎合は、 -1 が返され、すなわち型付き配列は怜玢されたせん。
+
+ +

返倀

+ +

配列内の芁玠の最埌の添字です。芋぀からなかったら -1 になりたす。

+ +

解説

+ +

lastIndexOf は searchElement ず型付き配列の芁玠を、厳密等䟡 (===、むコヌル3぀の挔算子ず同じ方法) を䜿甚しお比范したす。

+ +

䟋

+ +

lastIndexOf の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.lastindexof', 'TypedArray.prototype.lastIndexOf')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.lastIndexOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/length/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/length/index.html new file mode 100644 index 0000000000..ea6b441a2f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/length/index.html @@ -0,0 +1,66 @@ +--- +title: TypedArray.prototype.length +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/length +tags: + - JavaScript + - Property + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/length +--- +
{{JSRef}}
+ +

length アクセサヌプロパティは、型付き配列の長さを (芁玠数で) 衚したす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-length.html","shorter")}}
+ + + +

解説

+ +

length プロパティは set アクセサヌプロパティが undefined であるアクセサヌプロパティです。これは、このプロパティが読み取り専甚であるこずを意味したす。倀は TypedArray が構築されたずきに確立し、倉曎するこずができたせん。 TypedArray に byteOffset たたは length が指定されおいない堎合、参照される {{jsxref("ArrayBuffer")}} の長さが返されたす。 TypedArray は型付き配列オブゞェクトのうちの䞀぀です。

+ +

䟋

+ +

length プロパティの䜿甚

+ +
var buffer = new ArrayBuffer(8);
+
+var uint8 = new Uint8Array(buffer);
+uint8.length; // 8 (matches the length of the buffer)
+
+var uint8 = new Uint8Array(buffer, 1, 5);
+uint8.length; // 5 (as specified when constructing the Uint8Array)
+
+var uint8 = new Uint8Array(buffer, 2);
+uint8.length; // 6 (due to the offset of the constructed Uint8Array)
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.length', 'TypedArray.prototype.length')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.length")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/map/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/map/index.html new file mode 100644 index 0000000000..a5257973c9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/map/index.html @@ -0,0 +1,115 @@ +--- +title: TypedArray.prototype.map() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/map +tags: + - ECMAScript6 + - JavaScript + - Method + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/map +--- +
{{JSRef}}
+ +

map() メ゜ッドは、䞎えられた関数を型付き配列のすべおの芁玠に察しお呌び出し、その結果からなる新しい配列を生成したす。このメ゜ッドは、{{jsxref("Array.prototype.map()")}}ず同じアルゎリズムです。 TypedArray は、ここでは型付き配列型の䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/array-map.html")}}
+ + + +

構文

+ +
typedArray.map(mapFn[, thisArg])
+ +

匕数

+ +
+
mapFn
+
+

新しい型付き配列の芁玠を生み出すコヌルバック関数で、3぀の匕数を取りたす。

+ +
+
currentValue
+
珟圚凊理䞭の芁玠の倀です。
+
index {{optional_inline}}
+
珟圚凊理䞭の芁玠の型付き配列内における添字です。
+
array {{optional_inline}}
+
map() が実行されおいる型付き配列です。
+
+
+
thisArg {{optional_inline}}
+
mapFn を実行するずきに this ずしお䜿う倀です。
+
+ +

返倀

+ +

新しい型付き配列です。

+ +

解説

+ +

map() は、䞎えられたコヌルバック関数 (mapFn) を型付き配列の各芁玠に察しお、順番通りに䞀床ず぀呌び出し、その結果から新しい配列を生成したす。

+ +

mapFn は型付き配列のむンデックスのうち、倀が割り圓おられおいるものにのみ呌び出しす。 undefined であるむンデックス、すなわち削陀されたか倀が割り圓おられたこずがないむンデックスには呌び出したせん。

+ +

mapFn は、芁玠の倀、芁玠の添字、走査䞭の型付き配列オブゞェクトずいう 3 ぀の匕数をずもなっお呌び出されたす。

+ +

thisArg 匕数が map() に䞎えられた堎合は、それが mapFn の呌び出し時に枡され、 this ずしお䜿甚されたす。そうでない堎合は、 {{jsxref("undefined")}} が this の倀ずしお䜿甚されたす。 mapFn から最終的に芋える this の倀は、関数における通垞の this を決定するルヌルに埓っお決たりたす。

+ +

map() は呌び出された型付き配列を倉化させたせん (ただし、 mapFn が呌び出されたあ愛は、倉曎する可胜性はありたす)。

+ +

map() によっお凊理される芁玠の範囲は、 mapFn が最初に呌び出される前に蚭定されたす。 map() の呌び出しが開始された埌に远加された芁玠に察しおは、 mapFn は実行されたせん。既存の配列芁玠が倉曎されたり、削陀された堎合、 mapFn に枡される倀は map() がそれらを蚪れた時点での倀になり、削陀された芁玠を蚪問するこずはありたせん。

+ +

䟋

+ +

型付き配列を平方根の型付き配列にマッピング

+ +

次のコヌドは型付き配列を取り、最初の型付き配列にある数倀の平方根からなる新しい型付き配列を生成したす。

+ +
const numbers = new Uint8Array([1, 4, 9]);
+const roots = numbers.map(Math.sqrt);
+// roots の内容は [1, 2, 3] ずなる
+// numbers の内容は [1, 4, 9] のたた
+
+ +

匕数を含む関数を䜿甚しお型付き配列をマッピングする

+ +

次のコヌドは、1 ぀の匕数を必芁ずする関数を䜿甚するずきに map() がどのように動䜜するかを瀺しおいたす。匕数は元の配列を通した map() ルヌプずしお、配列の各芁玠に自動的に割り圓おられたす。

+ +
const numbers = new Uint8Array([1, 4, 9]);
+const doubles = numbers.map(function(num) {
+  return num * 2;
+});
+// doubles is now Uint8Array [2, 8, 18]
+// numbers is still Uint8Array [1, 4, 9]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.map', 'TypedArray.prototype.map')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.map")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/name/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/name/index.html new file mode 100644 index 0000000000..06017bddc2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/name/index.html @@ -0,0 +1,65 @@ +--- +title: TypedArray.name +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/name +tags: + - JavaScript + - Property + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/name +--- +
{{JSRef}}
+ +

TypedArray.name プロパティは、型付き配列のコンストラクタヌの名称を文字列倀で衚したす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-name.html","shorter")}}
+ + + +
{{js_property_attributes(0,0,0)}}
+ +

解説

+ +

TypedArray オブゞェクトは芁玠ごずのバむト数ずそのバむト列が解釈される方法ずでお互いに異なりたす。 name プロパティによっお配列がどのデヌタ型からなるのかが説明されたす。最初の郚分は Int が "integer" に察しお、 Uint が "unsigned integer" に察しお、 Float が "floating point" に察しお䜿甚されたす。第二の郚分は配列のビット長を説明する数倀です。最埌に、オブゞェクト型は Array になりたすが、特殊な堎合は ClampedArray になりたす。詳现に぀いおは、 {{jsxref("Uint8ClampedArray")}} をご芧ください。

+ +

䟋

+ +

name の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-properties-of-the-typedarray-constructors', 'TypedArray.name')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.name")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/of/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/of/index.html new file mode 100644 index 0000000000..8f78c64c48 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/of/index.html @@ -0,0 +1,101 @@ +--- +title: TypedArray.of() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/of +tags: + - ECMAScript 2015 + - JavaScript + - Method + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/of +--- +
{{JSRef}}
+ +

TypedArray.of() メ゜ッドは、様々な数の匕数をも぀新しい型付き配列を生成したす。このメ゜ッドは {{jsxref("Array.of()")}} ずほが同じです。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-of.html","shorter")}}
+ + + +

構文

+ +
TypedArray.of(element0[, element1[, ...[, elementN]]])
+
+ +

ここで TypedArray は次のいずれかです。

+ +
+ +
+ +

匕数

+ +
+
elementN
+
型付き配列を生成するずきの構成する芁玠。
+
+ +

返倀

+ +

新しい {{jsxref("TypedArray")}} のむンスタンスです。

+ +

解説

+ +

{{jsxref("Array.of()")}} ず TypedArray.of() ずの間にいく぀かの埮劙な違いがありたす。

+ + + +

䟋

+ +

of() の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.of', '%TypedArray%.of')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.of")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/reduce/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/reduce/index.html new file mode 100644 index 0000000000..3e74bd367e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/reduce/index.html @@ -0,0 +1,99 @@ +--- +title: TypedArray.prototype.reduce() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/reduce +tags: + - JavaScript + - Method + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/reduce +--- +
{{JSRef}}
+ +

reduce() メ゜ッドは、アキュヌムレヌタヌず型付き配列のそれぞれの倀に察しお (巊から右ぞ) 関数を適甚しおいき、単䞀の倀にたずめたす。このメ゜ッドは、{{jsxref("Array.prototype.reduce()")}}ず同じアルゎリズムです。 TypedArray は、ここでは型付き配列型の䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-reduce.html")}}
+ + + +

構文

+ +
typedarray.reduce(callback[, initialValue])
+ +

匕数

+ +
+
callback
+
型付き配列内の各倀に察しお実行する関数です。4 ぀の匕数を取りたす。 +
+
previousValue
+
前回のコヌルバック関数の呌び出しで返された倀。たたは、提䟛された堎合は initialValue (䞋蚘参照)。
+
currentValue
+
珟圚凊理されおいる型付き配列の芁玠。
+
index
+
珟圚凊理されおいる型付き配列芁玠の添字。
+
array
+
reduce() が呌び出された型付き配列。
+
+
+
initialValue
+
任意。 callback 関数の最初の呌び出しの最初の匕数ずしお䜿甚するオブゞェクト。
+
+ +

返倀

+ +

畳み蟌みによっお埗られた 1 ぀の倀です。

+ +

解説

+ +

reduce メ゜ッドは、型付き配列に存圚するそれぞれの芁玠に察しお (型付き配列の䞭の穎は陀く) callback 関数を䞀床ず぀実行したす。この関数は、初期倀 (たたは盎前の callback 呌び出し)、珟圚の芁玠の倀、珟圚の添字、反埩凊理䞭の型付き配列の 4 ぀の匕数を受け取りたす。

+ +

最初にコヌルバック関数が呌び出されたずきは、 previousValue ず currentValue は、二぀の倀を䞀぀にたずめたす。 reduce の呌び出し時に initialValue が䞎えられた堎合、 previousValue は initialValue に等しくなり、 currentValue は、型付き配列の最初の倀ず等しくなりたす。 initialValue が䞎えられなかった堎合、 previousValue は、型付き配列の最初の倀ず等しくなり、 currentValue は 2 番目の倀ず等しくなりたす。

+ +

型付き配列が空で、 initialValue が䞎えられなかった堎合、 {{jsxref("TypeError")}} が発生したす。型付き配列が (䜍眮に関係なく) 䞀぀の芁玠しか持たず、 initialValue が䞎えられなかった堎合、もしくは、 initialValue が䞎えられたが型付き配列が空の堎合、 callback 関数の呌び出しなしで、単独の倀が返されるこずになりたす。

+ +

䟋

+ +

配列内のすべおの倀を合蚈する

+ +
var total = new Uint8Array([0, 1, 2, 3]).reduce(function(a, b) {
+  return a + b;
+});
+// total == 6
+
+ +

ポリフィル

+ +

このメ゜ッドは {{jsxref("Array.prototype.reduce()")}} ず同じアルゎリズムを䜿甚したすので、同じポリフィルを䜿甚するこずができたす。単玔に Array.prototype.reduce を TypedArray.prototype.reduce で眮き換えおください。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.reduce', '%TypedArray%.prototype.reduce')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.reduce")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/reduceright/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/reduceright/index.html new file mode 100644 index 0000000000..b35d37a4ab --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/reduceright/index.html @@ -0,0 +1,98 @@ +--- +title: TypedArray.prototype.reduceRight() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight +tags: + - JavaScript + - Method + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight +--- +
{{JSRef}}
+ +

reduceRight() メ゜ッドは、アキュヌムレヌタヌず型付きのそれぞれの倀に察しお (右から巊ぞ) 関数を適甚しおいき、単䞀の倀にたずめたす。このメ゜ッドは、{{jsxref("Array.prototype.reduceRight()")}}ず同じアルゎリズムです。 TypedArray は、ここでは型付き配列型の䞀぀です。

+ +

構文

+ +
typedarray.reduceRight(callback[, initialValue])
+ +

匕数

+ +
+
callback
+
型付き配列内の各倀に察しお実行する関数です。4 ぀の匕数を取りたす。 +
+
previousValue
+
前回のコヌルバック関数の呌び出しで返された倀。たたは、提䟛された堎合は initialValue (䞋蚘参照)。
+
currentValue
+
珟圚凊理されおいる型付き配列の芁玠。
+
index
+
珟圚凊理されおいる型付き配列芁玠の添字。
+
array
+
reduceRight() が呌び出された型付き配列
+
+
+
initialValue
+
任意。 callback 関数の最初の呌び出しの最初の匕数ずしお䜿甚するオブゞェクト。
+
+ +

返倀

+ +

畳み蟌みによっお埗られた 1 ぀の倀です。

+ +

解説

+ +

reduceRight メ゜ッドは、型付き配列に存圚するそれぞれの芁玠に察しお (型付き配列の䞭の穎は陀く) callback 関数を䞀床ず぀実行したす。この関数は、初期倀 (たたは盎前の callback 呌び出し)、珟圚の芁玠の倀、珟圚の添字、反埩凊理䞭の型付き配列の 4 ぀の匕数を受け取りたす。

+ +

reduceRight のコヌルバックの呌び出しは、䞋蚘のようになりたす。

+ +
typedarray.reduceRight(function(previousValue, currentValue, index, typedarray) {
+  // ...
+});
+
+ +

最初にコヌルバック関数が呌び出されたずきは、 previousValue ず currentValue は、二぀の倀を䞀぀にたずめたす。 reduceRight の呌び出し時に initialValue が䞎えられた堎合、 previousValue は initialValue に等しくなり、 currentValue は、型付き配列の最埌の倀ず等しくなりたす。 initialValue が䞎えられなかった堎合、 previousValue は、型付き配列の最埌の倀ず等しくなり、 currentValue は最埌から数えお 2 番目の倀ず等しくなりたす。

+ +

型付き配列が空で、 initialValue が䞎えられなかった堎合、 {{jsxref("TypeError")}} が発生したす。型付き配列が (䜍眮に関係なく) 䞀぀の芁玠しか持たず、 initialValue が䞎えられなかった堎合、もしくは、 initialValue が䞎えられたが型付き配列が空の堎合、 callback 関数の呌び出しなしで、単独の倀が返されるこずになりたす。

+ +

䟋

+ +

配列内のすべおの倀を合蚈する

+ +
var total = new Uint8Array([0, 1, 2, 3]).reduceRight(function(a, b) {
+  return a + b;
+});
+// total == 6
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.reduceright', '%TypedArray%.prototype.reduceRight')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.reduceRight")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/reverse/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/reverse/index.html new file mode 100644 index 0000000000..3d226e080e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/reverse/index.html @@ -0,0 +1,65 @@ +--- +title: TypedArray.prototype.reverse() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/reverse +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray + - メ゜ッド + - 型付き配列 +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/reverse +--- +
{{JSRef}}
+ +

reverse() メ゜ッドは、その堎で型付き配列を反転したす。型付き配列の先頭の芁玠は末尟になり、末尟の芁玠は先頭になりたす。このメ゜ッドは {{jsxref("Array.prototype.reverse()")}} ず同じアルゎリズムです。 TypedArray は、ここでは 型付き配列型のうちの䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-reverse.html","shorter")}}
+ + + +

構文

+ +
typedarray.reverse();
+ +

返倀

+ +

反転された配列です。

+ +

䟋

+ +

reverse の䜿甚

+ +
var uint8 = new Uint8Array([1, 2, 3]);
+uint8.reverse();
+
+console.log(uint8); // Uint8Array [3, 2, 1]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.reverse', 'TypedArray.prototype.reverse')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.reverse")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/set/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/set/index.html new file mode 100644 index 0000000000..1ba7c7b703 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/set/index.html @@ -0,0 +1,81 @@ +--- +title: TypedArray.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/set +tags: + - JavaScript + - Method + - Prototype + - TypedArray + - メ゜ッド + - 型付き配列 +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/set +--- +
{{JSRef}}
+ +

set() メ゜ッドは、耇数の倀を指定した配列から入力倀を読み蟌み、型付き配列に栌玍したす。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-set.html")}}
+ + + +

構文

+ +
typedarray.set(array[, offset])
+typedarray.set(typedarray[, offset])
+
+ +

匕数

+ +
+
array
+
倀のコピヌする配列です。コピヌ元の配列からのすべおの倀がコピヌ先の配列にコピヌされたす。ただし、コピヌ元の配列の長さにオフセットを加えた長さがコピヌ先の配列の長さを超えた堎合は、䟋倖が発生したす。
+
typedarray
+
コピヌ元の配列が型付き配列の堎合、2぀の配列は同じ {{jsxref("ArrayBuffer")}} を共有するこずができたす。 JavaScript ゚ンゞンは、バッファのコピヌ元の範囲をコピヌ先の範囲にむンテリゞェントに copy したす。
+
offset {{optional_inline}}
+
コピヌ先の配列ぞのオフセットで、コピヌ元の配列からの倀の曞き蟌みを開始する䜍眮です。この倀を省略した堎合は 0 ず芋なされたす (぀たり、コピヌ元の配列はむンデックス 0 から始たるコピヌ先配列の倀を䞊曞きしたす)。
+
+ +

䟋倖

+ +

{{jsxref("RangeError")}}: offset が型付けされた配列の最埌を超えお栌玍されるように蚭定されおいた堎合。

+ +

䟋

+ +

set() の䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.set-array-offset', 'TypedArray.prototype.set')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.set")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/slice/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/slice/index.html new file mode 100644 index 0000000000..09c2dbfc8e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/slice/index.html @@ -0,0 +1,103 @@ +--- +title: TypedArray.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/slice +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/slice +--- +
{{JSRef}}
+ +

slice() メ゜ッドは、元の型付き配列の郚分的なコピヌを含む新しい型付き配列 (新しいバッファヌによる) を返したす。このメ゜ッドは {{jsxref("Array.prototype.slice()")}} ず同じアルゎリズムを持ちたす。 TypedArray は、ここでは型付き配列型の䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-slice.html","shorter")}}
+ + + +

構文

+ +
typedarray.slice([begin[, end]])
+ +

匕数

+ +
+
begin {{optional_inline}}
+
抜出範囲の先頭の䜍眮を瀺す 0 から始たる添字です。
+
負の添字を䜿っお、配列の末尟からの盞察䜍眮を衚すこずができたす。 slice(-2) は配列の最埌から 2 番目の芁玠ず最埌の芁玠を抜出したす。
+
begin を省略した堎合、 slice は 0 番目の芁玠から開始したす。
+
end {{optional_inline}}
+
抜出範囲の末尟の盎前の䜍眮を瀺す 0 から始たる添字です。 slice は end 自䜓は含めず、その盎前たで抜出したす。
+
slice(1,4) は 2 番目の芁玠から 4 番目の芁玠たで (添字が 1, 2, 3 の芁玠) を取り出したす。
+
負の添字を䜿っお、配列の末尟からの盞察䜍眮を衚すこずができたす。 slice(2,-1) は配列の 3 番目の芁玠から、最埌から 2 番目の芁玠たで取り出したす。
+
end が省略された堎合、 slice は配列の最埌 (typedarray.length) たで取り出したす。
+
+ +

返倀

+ +

抜出された芁玠が入った新しい型付き配列。

+ +

解説

+ +

slice メ゜ッドは元の配列を倉曎したせん。元の配列から取り出された芁玠のコピヌを含む浅いコピヌを返したす。

+ +

䞀方の型付き配列に新しい芁玠が远加されおも、他方の型付き配列に圱響はしたせん。

+ +

䟋

+ +

䟋: 既存の配列の䞀郚を返す

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

ポリフィル

+ +

TypedArray ずいう名前のグロヌバルオブゞェクトはないため、ポリフィルの䜿甚は「必芁に応じお」の原則で行う必芁がありたす。

+ +
if (!Uint8Array.prototype.slice) {
+  Object.defineProperty(Uint8Array.prototype, 'slice', {
+    value: function (begin, end)
+     {
+        return new Uint8Array(Array.prototype.slice.call(this, begin, end));
+     }
+  });
+}
+
+ +

{{jsxref("Object.defineProperty")}} に察応しおいない本圓に叀い JavaScript ゚ンゞンに察応する必芁がある堎合は、列挙䞍可胜にするこずができないため、 Array.prototype メ゜ッドのポリフィルを行わないこずが適切です。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.slice', '%TypedArray%.prototype.slice')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.slice")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/some/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/some/index.html new file mode 100644 index 0000000000..0d579721cb --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/some/index.html @@ -0,0 +1,119 @@ +--- +title: TypedArray.prototype.some() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/some +tags: + - ECMAScript6 + - JavaScript + - Method + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/some +--- +
{{JSRef}}
+ +

some() メ゜ッドは、䞎えられた関数によっお実行されるテストに合栌する芁玠が型付き配列の䞭にあるかどうかをテストしたす。このメ゜ッドは、{{jsxref("Array.prototype.some()")}}ず同じアルゎリズムを持ちたす。ここで TypedArray は型付き配列のうちの䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-some.html")}}
+ + + +

構文

+ +
typedarray.some(callback[, thisArg])
+ +

匕数

+ +
+
callback
+
各芁玠に察しおテストを実行する関数。䞉぀の匕数を取りたす。 +
+
currentValue
+
型付き配列内で凊理されおいる珟圚の芁玠。
+
index
+
型付き配列内で凊理されおいる珟圚の芁玠のむンデックス。
+
array
+
some が呌び出されおいる型付き配列。
+
+
+
thisArg
+
オプション。 callback を実行するずきに this ずしお䜿甚する倀。
+
+ +

返倀

+ +

配列内のいずれかの芁玠でコヌルバック関数が{{Glossary("truthy", "真ず解釈される")}}倀を返した堎合は <true です。それ以倖は false です。

+ +

解説

+ +

some()メ゜ッドは、 callback 関数を、型付き配列に含たれる各芁玠に察しお䞀床ず぀、 callback が真の倀を返す芁玠が芋぀かるたで呌び出したす。真の倀を返す芁玠が芋぀かるず、 some() メ゜ッドはただちに true を返したす。芋぀からなかった堎合、 false を返したす。

+ +

callback は、芁玠の倀、芁玠の添字、走査䞭の配列オブゞェクトの3぀の匕数で呌び出されたす。

+ +

thisArg 匕数が some() に䞎えられるず、 callback が呌び出される際に this ずしお䜿甚されたす。さもなければ、 undefined 倀が this ずしお䜿甚されるために枡されたす。最終的に callback によっお芳枬される this の倀は、関数から芋える this を特定するための通垞のルヌルに応じお決定されたす。

+ +

some は呌び出された型付き配列を倉曎したせん。

+ +

䟋

+ +

型付き配列のすべおの芁玠の倧きさをテストする

+ +

次の䟋では、型付き配列の䞭に 10 よりも倧きい芁玠があるかどうかをテストしたす。

+ +
function isBiggerThan10(element, index, array) {
+  return element > 10;
+}
+
+new Uint8Array([2, 5, 8, 1, 4]).some(isBiggerThan10); // false
+new Uint8Array([12, 5, 8, 1, 4]).some(isBiggerThan10); // true
+ +

アロヌ関数を䜿甚しお型付き配列をテストする

+ +

アロヌ関数は同じテストを短い構文で行うこずができたす。

+ +
new Uint8Array([2, 5, 8, 1, 4]).some(elem => elem > 10); // false
+new Uint8Array([12, 5, 8, 1, 4]).some(elem => elem > 10); // true
+ +

ポリフィル

+ +

TypedArray ず蚀う名前のグロヌバルオブゞェクトは存圚しないため、ポリフィルは「必芁に応じお」の原則で行う必芁がありたす。

+ +
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.some
+if (!Uint8Array.prototype.some) {
+  Object.defineProperty(Uint8Array.prototype, 'some', {
+    value: Array.prototype.some
+  });
+}
+
+ +

もし {{jsxref("Object.defineProperty")}} にも察応しおいないような本圓に叀い JavaScript ゚ンゞンに察応する必芁がある堎合は、 Array.prototype メ゜ッドは列挙可胜にするこずができないので、ポリフィルを行わないのが最良です。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.some', 'TypedArray.prototype.some')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.some")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/sort/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/sort/index.html new file mode 100644 index 0000000000..942c3df513 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/sort/index.html @@ -0,0 +1,83 @@ +--- +title: TypedArray.prototype.sort() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/sort +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray + - メ゜ッド + - 型付き配列 +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/sort +--- +
{{JSRef}}
+ +

sort() メ゜ッドは、型付き配列の芁玠をその堎で数倀的に䞊べ替え、その型付き配列を返したす。このメ゜ッドは {{jsxref("Array.prototype.sort()")}} ず同じアルゎリズムです。 TypedArray は、ここでは型付き配列型のうちの䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-reverse.html","shorter")}}
+ + + +

構文

+ +
typedarray.sort([compareFunction])
+ +

匕数

+ +
+
compareFunction {{optional_inline}}
+
゜ヌト順を定矩する関数を指定したす。
+
+ +

返倀

+ +

䞊べ替えた型付き配列です。

+ +

䟋

+ +

sort の䜿甚

+ +

他の䟋は、 {{jsxref("Array.prototype.sort()")}} メ゜ッドです。

+ +
let numbers = new Uint8Array([40, 1, 5, 200]);
+numbers.sort();
+// Uint8Array [ 1, 5, 40, 200 ]
+// ふ぀うの配列ずは異なり、数倀的に数倀を䞊べ替えるためには
+// 比范関数は必芁ありたせん。
+
+// ふ぀うの配列は数倀で䞊べ替えるために比范関数を必芁ずしたす。
+numbers = [40, 1, 5, 200];
+numbers.sort();
+// [1, 200, 40, 5]
+
+numbers.sort((a, b) => a - b); // 数倀を比范
+// [ 1, 5, 40, 200 ]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.sort', 'TypedArray.prototype.sort')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.indexOf")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/subarray/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/subarray/index.html new file mode 100644 index 0000000000..7d28235f7b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/subarray/index.html @@ -0,0 +1,86 @@ +--- +title: TypedArray.prototype.subarray() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/subarray +tags: + - JavaScript + - Method + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/subarray +--- +
{{JSRef}}
+ +

subarray() メ゜ッドは、同じ {{jsxref("ArrayBuffer")}} ストアで、この TypedArray オブゞェクトず同じ芁玠の型をも぀新しい TypedArray を返したす。先頭のオフセットは含み、末尟のオフセットは含みたせん。 TypedArray は型付き配列型の䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-subarray.html")}}
+ + + +

構文

+ +
typedarray.subarray([begin[, end]])
+
+ +

匕数

+ +
+
begin {{optional_inline}}
+
先頭の芁玠です。この䜍眮は含たれたす。この倀が指定されおいない堎合、配列党䜓が新しいビュヌに含たれたす。
+
end {{optional_inline}}
+
末尟の芁玠です。この䜍眮は含たれたせん。この倀が指定されおいない堎合、 begin によっお指定された芁玠から配列の最埌たですべおの芁玠が新しいビュヌに含たれたす。
+
+ +

返倀

+ +

新しい {{jsxref("TypedArray")}} オブゞェクトです。

+ +

解説

+ +

begin ず end によっお指定される範囲は、珟圚の配列に察しお有効なむンデックスの範囲に䞞められたす。すなわち、新しい範囲の蚈算された長さがマむナスなら、れロに瞮められたす。 begin か end のどちらかがマむナスなら、配列の最初からではなく、最埌からむンデックスを参照したす。

+ +

既存のバッファ䞊に新しいビュヌを䜜っおいるこずにも泚意しお䞋さい。すなわち、新しいオブゞェクトの内容ぞの倉曎は、元のオブゞェクトに匷い圱響を䞎えたす。逆もたた同様です。

+ +

䟋

+ +

subarray() メ゜ッドの䜿甚

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.subarray', 'TypedArray.prototype.subarray')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.TypedArray.subarray")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/tolocalestring/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/tolocalestring/index.html new file mode 100644 index 0000000000..769097ffec --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/tolocalestring/index.html @@ -0,0 +1,78 @@ +--- +title: TypedArray.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString +--- +
{{JSRef}}
+ +

toLocaleString() メ゜ッドは、型付き配列の芁玠を衚す文字列を返したす。芁玠は文字列に倉換され、ロケヌル固有の文字列 (カンマ "," など) で区切られたす。このメ゜ッドは {{jsxref("Array.prototype.toLocaleString()")}} ず同じアルゎリズムを持ち、型付き配列の芁玠は数倀なので、各芁玠に察しお {{jsxref("Number.prototype.toLocaleString()")}} ず同じアルゎリズムが適甚されたす。ここで TypedArray は型指定された配列型の1぀です。

+ +

構文

+ +
typedarray.toLocaleString([locales [, options]]);
+ +

匕数

+ +
+

locales ず options の匕数は、関数の動䜜をカスタマむズし、アプリケヌションがフォヌマット芏則を䜿甚する蚀語を指定できるようにしたす。 locales ず options の匕数を無芖する実装では、䜿甚されるロケヌルず返される文字列の圢匏は完党に実装に䟝存したす。

+ +
これらの匕数の詳现および䜿甚方法に぀いおは、 {{jsxref("Intl/NumberFormat/NumberFormat", "Intl.NumberFormat()")}} コンストラクタヌを参照しおください。
+
+ +

返倀

+ +

型付き配列の芁玠を衚す文字列。

+ +

䟋

+ +

toLocaleString の䜿甚

+ +
var uint = new Uint32Array([2000, 500, 8123, 12, 4212]);
+
+uint.toLocaleString();
+// if run in a de-DE locale
+// "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"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.tolocalestring', 'TypedArray.prototype.toLocaleString')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.toLocaleString")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/tostring/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/tostring/index.html new file mode 100644 index 0000000000..c374a3f8f5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/tostring/index.html @@ -0,0 +1,73 @@ +--- +title: TypedArray.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/toString +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/toString +--- +
{{JSRef}}
+ +

toString() メ゜ッドは、指定された配列ずその芁玠を衚す文字列を返したす。このメ゜ッドは、{{jsxref("Array.prototype.toString()")}} ず同じアルゎリズムを持ちたす。ここで TypedArray は TypedArray オブゞェクトのうちの䞀぀です。

+ +
{{EmbedInteractiveExample("pages/js/typedarray-tostring.html","shorter")}}
+ + + +

構文

+ +
typedarray.toString()
+ +

返倀

+ +

型付き配列の芁玠を衚す文字列です。

+ +

解説

+ +

{{jsxref("TypedArray")}} オブゞェクトは {{jsxref("Object")}} の toString メ゜ッドをオヌバヌラむドしおいたす。 TypedArray オブゞェクトでは、 toString メ゜ッドは配列を぀ないで、配列のそれぞれの芁玠がカンマで区切られた 1 ぀の文字列を返したす。たずえば、次のコヌドは型付き配列を生成した埌、 toString を䜿甚しお配列を文字列に倉換しおいたす。

+ +
var numbers = new Uint8Array([2, 5, 8, 1, 4])
+numbers.toString(); // "2,5,8,1,4"
+
+ +

型付き配列が文字列倀ずしお衚される必芁がある堎合や、配列が文字列の結合の䞭で参照された時、 JavaScript は toString メ゜ッドを自動的に呌び出したす。

+ +

互換性

+ +

ブラりザヌが TypedArray.prototype.toString() メ゜ッドに察応しおいない堎合は、 JavaScript は {{jsxref("Object")}} の toString メ゜ッドを呌び出したす。

+ +
var numbers = new Uint8Array([2, 5, 8, 1, 4])
+numbers.toString(); // "[object Uint8Array]"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.tostring', 'Array.prototype.toString')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.TypedArray.toString")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/values/index.html b/files/ja/web/javascript/reference/global_objects/typedarray/values/index.html new file mode 100644 index 0000000000..e07a280e0f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typedarray/values/index.html @@ -0,0 +1,121 @@ +--- +title: TypedArray.prototype.values() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/values +tags: + - ECMAScript6 + - Iterator + - JavaScript + - Method + - Prototype + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/values +--- +
{{JSRef}}
+ +

values() メ゜ッドは、配列の各むンデックスの倀を持぀新しい配列むテレヌタヌオブゞェクトを返したす。

+ +
{{EmbedInteractiveExample("pages/js/array-values.html")}}
+ +

構文

+ +
arr.values()
+ +

返倀

+ +

新しい配列むテレヌタヌオブゞェクトです。

+ +

䟋

+ +

for...of ルヌプを甚いた反埩凊理

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+var iterator = arr.values();
+
+for (let letter of iterator) {
+  console.log(letter);
+}  //"a" "b" "c" "d" "e"
+
+ +

Array.prototype.values は Array.prototype[Symbol.iterator] の既定の実装です。

+ +
Array.prototype.values === Array.prototype[Symbol.iterator]      //true
+ +

.next() を䜿甚した反埩凊理

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+var iterator = arr.values();
+iterator.next();               // Object { value: "a", done: false }
+iterator.next().value;         // "b"
+iterator.next()["value"];      // "c"
+iterator.next();               // Object { value: "d", done: false }
+iterator.next();               // Object { value: "e", done: false }
+iterator.next();               // Object { value: undefined, done: true }
+iteraror.next().value;         // undefined 
+ +
+

䞀床だけの䜿甚: 配列むテレヌタヌオブゞェクトは䞀床だけの䜿甚たたは䞀時オブゞェクトです

+
+ +

䟋:

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+ var iterator = arr.values();
+ for (let letter of iterator) {
+ console.log(letter);
+} //"a" "b" "c" "d" "e"
+for (let letter of iterator) {
+console.log(letter);
+} // undefined
+
+ +

理由: next().done=true たたは currentIndex>length が for..of の終了条件だからです。反埩凊理プロトコルを参照しお䞋さい。

+ +

倀: 配列のむテレヌタヌオブゞェクトには倀が栌玍されたせん。その代わりに、その䜜成に䜿甚された配列のアドレスが栌玍されるので、その配列に栌玍されおいる倀に䟝存したす。

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+var iterator = arr.values();
+console.log(iterator);        // Array Iterator {  }
+iterator.next().value;        // "a"
+arr[1]='n';
+iterator.next().value;        //  "n"
+
+ +
+

配列内の倀が倉化した堎合は、配列の反埩子オブゞェクトの倀も倉化したす。

+
+ + + +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array.prototype.values', 'Array.prototype.values')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.Array.values")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typeerror/index.html b/files/ja/web/javascript/reference/global_objects/typeerror/index.html new file mode 100644 index 0000000000..adc36d13e9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typeerror/index.html @@ -0,0 +1,107 @@ +--- +title: TypeError +slug: Web/JavaScript/Reference/Global_Objects/TypeError +tags: + - Error + - JavaScript + - Object + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Global_Objects/TypeError +--- +
{{JSRef}}
+ +

TypeError オブゞェクトは、挔算が実行できなくなった時の新しい゚ラヌを衚したす。特に倀が期埅された型ではなかった堎合です (ただし、それに限りたせん)。

+ +

TypeError は以䞋のような堎合に発生したす。

+ + + +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/TypeError/TypeError", "TypeError()")}}
+
新しい TypeError オブゞェクトを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Error.prototype.message", "TypeError.prototype.message")}}
+
゚ラヌメッセヌゞです。 ECMA-262 においお {{jsxref("TypeError")}} は自身の message プロパティを提䟛するべきずされおいたすが、 SpiderMonkey では {{jsxref("Error.prototype.message")}} を継承しおいたす。
+
{{jsxref("Error.prototype.name", "TypeError.prototype.name")}}
+
゚ラヌ名です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.fileName", "TypeError.prototype.fileName")}}
+
この゚ラヌが発生したファむルのパスです。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.lineNumber", "TypeError.prototype.lineNumber")}}
+
この゚ラヌが発生したファむル内の行番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.columnNumber", "TypeError.prototype.columnNumber")}}
+
この゚ラヌが発生した行内の桁番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.stack", "TypeError.prototype.stack")}}
+
スタックトレヌスです。 {{jsxref("Error")}} から継承しおいたす。
+
+ +

䟋

+ +

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

TypeError の生成

+ +
try {
+  throw new TypeError('Hello', "someFile.js", 10)
+} catch (e) {
+  console.log(e instanceof TypeError)  // true
+  console.log(e.message)               // "Hello"
+  console.log(e.name)                  // "TypeError"
+  console.log(e.fileName)              // "someFile.js"
+  console.log(e.lineNumber)            // 10
+  console.log(e.columnNumber)          // 0
+  console.log(e.stack)                 // "@Scratchpad/2:2:9\n"
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-typeerror', 'TypeError')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/typeerror/typeerror/index.html b/files/ja/web/javascript/reference/global_objects/typeerror/typeerror/index.html new file mode 100644 index 0000000000..3827e78965 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/typeerror/typeerror/index.html @@ -0,0 +1,89 @@ +--- +title: TypeError() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/TypeError/TypeError +tags: + - Constructor + - JavaScript + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Global_Objects/TypeError/TypeError +--- +
{{JSRef}}
+ +

TypeError() コンストラクタヌは、挔算が実行できなくなった時の新しい゚ラヌを生成したす。特に倀が期埅された型ではなかった堎合です (ただし、それに限りたせん)。

+ +

構文

+ +
new TypeError([message[, fileName[, lineNumber]]])
+ +

匕数

+ +
+
message {{optional_inline}}
+
人間が読むための゚ラヌの説明です。
+
fileName {{optional_inline}}
+
䟋倖が発生したコヌドを含むファむルの名前です。
+
lineNumber {{optional_inline}}
+
䟋倖が発生したコヌドの行番号です。
+
+ +

䟋

+ +

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

TypeError の生成

+ +
try {
+  throw new TypeError('Hello', "someFile.js", 10)
+} catch (e) {
+  console.log(e instanceof TypeError)  // true
+  console.log(e.message)               // "Hello"
+  console.log(e.name)                  // "TypeError"
+  console.log(e.fileName)              // "someFile.js"
+  console.log(e.lineNumber)            // 10
+  console.log(e.columnNumber)          // 0
+  console.log(e.stack)                 // "@Scratchpad/2:2:9\n"
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-nativeerror-constructors', 'NativeError constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/uint16array/index.html b/files/ja/web/javascript/reference/global_objects/uint16array/index.html new file mode 100644 index 0000000000..b588ea3bd5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/uint16array/index.html @@ -0,0 +1,168 @@ +--- +title: Uint16Array +slug: Web/JavaScript/Reference/Global_Objects/Uint16Array +tags: + - Class + - JavaScript + - TypedArray + - TypedArrays + - Uint16Array +translation_of: Web/JavaScript/Reference/Global_Objects/Uint16Array +--- +
{{JSRef}}
+ +

Uint16Array は型付き配列であり、プラットフォヌムのバむト順による 16 ビット笊号なし敎数倀の配列を衚したす。バむト順の制埡が必芁な堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/Uint16Array/Uint16Array", "Uint16Array()")}}
+
新しい Uint16Array オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint16Array.BYTES_PER_ELEMENT")}}
+
芁玠の倧きさの数倀を返したす。 Uint16Array の堎合は 2 になりたす。
+
{{jsxref("TypedArray.name", "Uint16Array.name")}}
+
コンストラクタヌの名前を文字列倀で返したす。 Uint16Array 型の堎合は "Uint16Array" です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "Uint16Array.from()")}}
+
新しい Uint16Array を、配列颚オブゞェクトや反埩可胜オブゞェクトから生成したす。 {{jsxref("Array.from()")}} も参照しおください。
+
{{jsxref("TypedArray.of", "Uint16Array.of()")}}
+
新しい Uint16Array を、可倉長匕数で生成したす。 {{jsxref("Array.of()")}} も参照しおください。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("TypedArray.prototype.buffer", "Uint16Array.prototype.buffer")}}
+
Uint16Array オブゞェクトによっお参照される {{jsxref("ArrayBuffer")}} を返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteLength", "Uint16Array.prototype.byteLength")}}
+
Uint16Array の長さを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteOffset", "Uint16Array.prototype.byteOffset")}}
+
Uint16Array のオフセットを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.length", "Uint16Array.prototype.length")}}
+
Uint16Array オブゞェクト内に保持されおいる芁玠の数を返したす。構築時に蚭定され、読取専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("TypedArray.copyWithin", "Uint16Array.prototype.copyWithin()")}}
+
配列内で䞀連の配列芁玠をコピヌしたす。 {{jsxref("Array.prototype.copyWithin()")}} も参照しおください。
+
{{jsxref("TypedArray.entries", "Uint16Array.prototype.entries()")}}
+
配列内の各添字に察するキヌず倀の組を含む、新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.entries()")}} も参照しおください。
+
{{jsxref("TypedArray.every", "Uint16Array.prototype.every()")}}
+
配列内のすべおの芁玠に察しお、指定された関数によるテストに合栌するかどうかをテストしたす。 {{jsxref("Array.prototype.every()")}} も参照しおください。
+
{{jsxref("TypedArray.fill", "Uint16Array.prototype.fill()")}}
+
配列の先頭から末尟たでのすべおの芁玠を固定倀で蚭定したす。 {{jsxref("Array.prototype.fill()")}} も参照しおください。
+
{{jsxref("TypedArray.filter", "Uint16Array.prototype.filter()")}}
+
この配列のすべおの芁玠のうち、指定されたフィルタリング関数が䞎えられたフィルタリング関数が true を返すすべおの芁玠で、新しい配列を生成したす。 {{jsxref("Array.prototype.filter()")}} も参照しおください。
+
{{jsxref("TypedArray.find", "Uint16Array.prototype.find()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その倀を返したす。芋぀からなかった堎合は undefined を返したす。 {{jsxref("Array.prototype.find()")}} も参照しおください。
+
{{jsxref("TypedArray.findIndex", "Uint16Array.prototype.findIndex()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その添字を返したす。芋぀からなかった堎合は -1 を返したす。 {{jsxref("Array.prototype.findIndex()")}} も参照しおください。
+
{{jsxref("TypedArray.forEach", "Uint16Array.prototype.forEach()")}}
+
配列内の各芁玠に察しおある関数を呌び出したす。 {{jsxref("Array.prototype.forEach()")}} も参照しおください。
+
{{jsxref("TypedArray.includes", "Uint16Array.prototype.includes()")}}
+
型付き配列にある芁玠が含たれおいるかどうかを刀断し、それに応じお true たたは false を返したす。 {{jsxref("Array.prototype.includes()")}} も参照しおください。
+
{{jsxref("TypedArray.indexOf", "Uint16Array.prototype.indexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最初の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.indexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.join", "Uint16Array.prototype.join()")}}
+
すべおの配列芁玠を1぀の文字列に結合したす。 {{jsxref("Array.prototype.join()")}} も参照しおください。
+
{{jsxref("TypedArray.keys", "Uint16Array.prototype.keys()")}}
+
配列内のすべおの添字に察するキヌを含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.keys()")}} も参照しおください。
+
{{jsxref("TypedArray.lastIndexOf", "Uint16Array.prototype.lastIndexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最埌の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.lastIndexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.map", "Uint16Array.prototype.map()")}}
+
この配列のすべおの芁玠を匕数ずしお指定された関数を呌び出し、その結果で新しい配列を生成したす。 {{jsxref("Array.prototype.map()")}} も参照しおください。
+
{{jsxref("TypedArray.reduce", "Uint16Array.prototype.reduce()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (巊から右ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.reduceRight", "Uint16Array.prototype.reduceRight()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (右から巊ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduceRight()")}} も参照しおください。
+
{{jsxref("TypedArray.reverse", "Uint16Array.prototype.reverse()")}}
+
配列芁玠の順番を反転させたす。 — 最初の芁玠は最埌になり、最埌の芁玠は最初になりたす。 {{jsxref("Array.prototype.reverse()")}} も参照しおください。
+
{{jsxref("TypedArray.set", "Uint16Array.prototype.set()")}}
+
指定された配列から耇数の入力倀を読み蟌み、型付き配列に栌玍したす。
+
{{jsxref("TypedArray.slice", "Uint16Array.prototype.slice()")}}
+
配列の䞀区間を取り出しお新しい配列を返したす。 {{jsxref("Array.prototype.slice()")}} も参照しおください。
+
{{jsxref("TypedArray.some", "Uint16Array.prototype.some()")}}
+
この配列内で、指定されたテスト関数を満たす芁玠が1぀でもあった堎合に true を返したす。 {{jsxref("Array.prototype.some()")}} も参照しおください。
+
{{jsxref("TypedArray.sort", "Uint16Array.prototype.sort()")}}
+
配列の芁玠をその堎で゜ヌトし、その配列を返したす。 {{jsxref("Array.prototype.sort()")}} も参照しおください。
+
{{jsxref("TypedArray.subarray", "Uint16Array.prototype.subarray()")}}
+
指定された開始䜍眮ず終了䜍眮の間にある芁玠から新しい Uint16Array を返したす。
+
{{jsxref("TypedArray.values", "Uint16Array.prototype.values()")}}
+
配列内の各添字に察する倀を含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.values()")}} も参照しおください。
+
{{jsxref("TypedArray.toLocaleString", "Uint16Array.prototype.toLocaleString()")}}
+
配列ず芁玠を衚すロヌカラむズされた文字列を返したす。 {{jsxref("Array.prototype.toLocaleString()")}} も参照しおください。
+
{{jsxref("TypedArray.toString", "Uint16Array.prototype.toString()")}}
+
配列ず芁玠を衚す文字列を返したす。 {{jsxref("Array.prototype.toString()")}} も参照しおください。
+
{{jsxref("TypedArray.@@iterator", "Uint16Array.prototype[@@iterator]()")}}
+
配列内のそれぞれの添字の倀を含む新しい配列むテレヌタヌオブゞェクトを返したす。
+
+ +

䟋

+ +

Uint16Array を生成する様々な方法

+ +
// 長さを指定
+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
+
+// 配列から
+var arr = new Uint16Array([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Uint16Array([21, 31]);
+var y = new Uint16Array(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(8);
+var z = new Uint16Array(buffer, 0, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint16 = new Uint16Array(iterable);
+// Uint16Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/uint16array/uint16array/index.html b/files/ja/web/javascript/reference/global_objects/uint16array/uint16array/index.html new file mode 100644 index 0000000000..b4efb9ae42 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/uint16array/uint16array/index.html @@ -0,0 +1,105 @@ +--- +title: Uint16Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Uint16Array/Uint16Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Uint16Array/Uint16Array +--- +
{{JSRef}}
+ +

Uint16Array() は型付き配列のコンストラクタヌで、プラットフォヌムのバむト順による 16 ビット笊号なし敎数倀の配列を生成したす。

+ +

構文

+ +
new Uint16Array(); // new in ES2017
+new Uint16Array(length);
+new Uint16Array(typedArray);
+new Uint16Array(object);
+new Uint16Array(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出されるず、メモリ内に内郚的な配列バッファヌを䜜成し、倧きさは length を BYTES_PER_ELEMENT で乗じたバむト数になり、れロになるこずもありたす。
+
typedArray
+
typedArray 匕数付きで呌び出されるず、これはあらゆる型付き配列型 (䟋えば Int32Array) にするこずができたすが、 typedArray を新しい型付き配列にコピヌしたす。 typedArray の䞭のそれぞれの倀は、新しい配列にコピヌされる前にコンストラクタヌの察応する型に倉換されたす。新しい型付き配列の長さは typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出されるず、あたかも TypedArray.from() メ゜ッドであるかのように新しい型付き配列が生成されたす。
+
buffer, byteOffset, length
+
buffer ず、オプションで byteOffset ず length 匕数を指定しお呌び出されるず、指定された {{jsxref("ArrayBuffer")}} を衚瀺する型付き配列ビュヌが生成されたす。 byteOffset および length 匕数は、型付き配列ビュヌが衚瀺するメモリ範囲を指定する。 䞡方を省略した堎合は buffer の党おを衚瀺し、 length のみを省略した堎合は buffer の残りを衚瀺したす。
+
+ +

解説

+ +

Uint16Array() は型付き配列のコンストラクタヌで、プラットフォヌムのバむト順による 16 ビット笊号なし敎数倀の配列を生成したす。バむト順の制埡が必芁な堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

ECMAScript 2015 から、 Uint16Array コンストラクタヌは構築に {{jsxref("Operators/new", "new")}} 挔算子が必芁になりたした。 Uint16Array コンストラクタヌを new なしで関数ずしお呌び出すず、 {{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]);
+ +

䟋

+ +

様々な方法による Uint16Array の生成

+ +
// From a length
+var uint16 = new Uint16Array(2);
+uint16[0] = 42;
+console.log(uint16[0]); // 42
+console.log(uint16.length); // 2
+console.log(uint16.BYTES_PER_ELEMENT); // 2
+
+// From an array
+var arr = new Uint16Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Uint16Array([21, 31]);
+var y = new Uint16Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint16Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint16 = new Uint16Array(iterable);
+// Uint16Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-constructors', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/uint32array/index.html b/files/ja/web/javascript/reference/global_objects/uint32array/index.html new file mode 100644 index 0000000000..a2b568caff --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/uint32array/index.html @@ -0,0 +1,167 @@ +--- +title: Uint32Array +slug: Web/JavaScript/Reference/Global_Objects/Uint32Array +tags: + - Constructor + - JavaScript + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Uint32Array +--- +
{{JSRef}}
+ +

Uint32Array は型付き配列であり、プラットフォヌムのバむト順による 32 ビット笊号なし敎数倀の配列を衚したす。バむト順の制埡が必芁な堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/Uint32Array/Uint32Array", "Uint32Array()")}}
+
新しい Uint32Array オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint32Array.BYTES_PER_ELEMENT")}}
+
芁玠の倧きさの数倀を返したす。 Uint32Array の堎合は 4 になりたす。
+
{{jsxref("TypedArray.name", "Uint32Array.name")}}
+
コンストラクタヌの名前を文字列倀で返したす。 Uint32Array 型の堎合は "Uint32Array" です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "Uint32Array.from()")}}
+
新しい Uint32Array を、配列颚オブゞェクトや反埩可胜オブゞェクトから生成したす。 {{jsxref("Array.from()")}} も参照しおください。
+
{{jsxref("TypedArray.of", "Uint32Array.of()")}}
+
新しい Uint32Array を、可倉長匕数で生成したす。 {{jsxref("Array.of()")}} も参照しおください。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("TypedArray.prototype.buffer", "Uint32Array.prototype.buffer")}}
+
Uint32Array オブゞェクトによっお参照される {{jsxref("ArrayBuffer")}} を返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteLength", "Uint32Array.prototype.byteLength")}}
+
Uint32Array の長さを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteOffset", "Uint32Array.prototype.byteOffset")}}
+
Uint32Array のオフセットを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.length", "Uint32Array.prototype.length")}}
+
Uint32Array オブゞェクト内に保持されおいる芁玠の数を返したす。構築時に蚭定され、読取専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("TypedArray.copyWithin", "Uint32Array.prototype.copyWithin()")}}
+
配列内で䞀連の配列芁玠をコピヌしたす。 {{jsxref("Array.prototype.copyWithin()")}} も参照しおください。
+
{{jsxref("TypedArray.entries", "Uint32Array.prototype.entries()")}}
+
配列内の各添字に察するキヌず倀の組を含む、新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.entries()")}} も参照しおください。
+
{{jsxref("TypedArray.every", "Uint32Array.prototype.every()")}}
+
配列内のすべおの芁玠に察しお、指定された関数によるテストに合栌するかどうかをテストしたす。 {{jsxref("Array.prototype.every()")}} も参照しおください。
+
{{jsxref("TypedArray.fill", "Uint32Array.prototype.fill()")}}
+
配列の先頭から末尟たでのすべおの芁玠を固定倀で蚭定したす。 {{jsxref("Array.prototype.fill()")}} も参照しおください。
+
{{jsxref("TypedArray.filter", "Uint32Array.prototype.filter()")}}
+
この配列のすべおの芁玠のうち、指定されたフィルタリング関数が䞎えられたフィルタリング関数が true を返すすべおの芁玠で、新しい配列を生成したす。 {{jsxref("Array.prototype.filter()")}} も参照しおください。
+
{{jsxref("TypedArray.find", "Uint32Array.prototype.find()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その倀を返したす。芋぀からなかった堎合は undefined を返したす。 {{jsxref("Array.prototype.find()")}} も参照しおください。
+
{{jsxref("TypedArray.findIndex", "Uint32Array.prototype.findIndex()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その添字を返したす。芋぀からなかった堎合は -1 を返したす。 {{jsxref("Array.prototype.findIndex()")}} も参照しおください。
+
{{jsxref("TypedArray.forEach", "Uint32Array.prototype.forEach()")}}
+
配列内の各芁玠に察しおある関数を呌び出したす。 {{jsxref("Array.prototype.forEach()")}} も参照しおください。
+
{{jsxref("TypedArray.includes", "Uint32Array.prototype.includes()")}}
+
型付き配列にある芁玠が含たれおいるかどうかを刀断し、それに応じお true たたは false を返したす。 {{jsxref("Array.prototype.includes()")}} も参照しおください。
+
{{jsxref("TypedArray.indexOf", "Uint32Array.prototype.indexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最初の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.indexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.join", "Uint32Array.prototype.join()")}}
+
すべおの配列芁玠を1぀の文字列に結合したす。 {{jsxref("Array.prototype.join()")}} も参照しおください。
+
{{jsxref("TypedArray.keys", "Uint32Array.prototype.keys()")}}
+
配列内のすべおの添字に察するキヌを含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.keys()")}} も参照しおください。
+
{{jsxref("TypedArray.lastIndexOf", "Uint32Array.prototype.lastIndexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最埌の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.lastIndexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.map", "Uint32Array.prototype.map()")}}
+
この配列のすべおの芁玠を匕数ずしお指定された関数を呌び出し、その結果で新しい配列を生成したす。 {{jsxref("Array.prototype.map()")}} も参照しおください。
+
{{jsxref("TypedArray.reduce", "Uint32Array.prototype.reduce()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (巊から右ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.reduceRight", "Uint32Array.prototype.reduceRight()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (右から巊ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduceRight()")}} も参照しおください。
+
{{jsxref("TypedArray.reverse", "Uint32Array.prototype.reverse()")}}
+
配列芁玠の順番を反転させたす。 — 最初の芁玠は最埌になり、最埌の芁玠は最初になりたす。 {{jsxref("Array.prototype.reverse()")}} も参照しおください。
+
{{jsxref("TypedArray.set", "Uint32Array.prototype.set()")}}
+
指定された配列から耇数の入力倀を読み蟌み、型付き配列に栌玍したす。
+
{{jsxref("TypedArray.slice", "Uint32Array.prototype.slice()")}}
+
配列の䞀区間を取り出しお新しい配列を返したす。 {{jsxref("Array.prototype.slice()")}} も参照しおください。
+
{{jsxref("TypedArray.some", "Uint32Array.prototype.some()")}}
+
この配列内で、指定されたテスト関数を満たす芁玠が1぀でもあった堎合に true を返したす。 {{jsxref("Array.prototype.some()")}} も参照しおください。
+
{{jsxref("TypedArray.sort", "Uint32Array.prototype.sort()")}}
+
配列の芁玠をその堎で゜ヌトし、その配列を返したす。 {{jsxref("Array.prototype.sort()")}} も参照しおください。
+
{{jsxref("TypedArray.subarray", "Uint32Array.prototype.subarray()")}}
+
指定された開始䜍眮ず終了䜍眮の間にある芁玠から新しい Uint32Array を返したす。
+
{{jsxref("TypedArray.values", "Uint32Array.prototype.values()")}}
+
配列内の各添字に察する倀を含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.values()")}} も参照しおください。
+
{{jsxref("TypedArray.toLocaleString", "Uint32Array.prototype.toLocaleString()")}}
+
配列ず芁玠を衚すロヌカラむズされた文字列を返したす。 {{jsxref("Array.prototype.toLocaleString()")}} も参照しおください。
+
{{jsxref("TypedArray.toString", "Uint32Array.prototype.toString()")}}
+
配列ず芁玠を衚す文字列を返したす。 {{jsxref("Array.prototype.toString()")}} も参照しおください。
+
{{jsxref("TypedArray.@@iterator", "Uint32Array.prototype[@@iterator]()")}}
+
配列内のそれぞれの添字の倀を含む新しい配列むテレヌタヌオブゞェクトを返したす。
+
+ +

䟋

+ +

Uint32Array を生成する様々な方法

+ +
// 長さを指定
+var int16 = new Uint32Array(2);
+int16[0] = 42;
+console.log(int16[0]); // 42
+console.log(int16.length); // 2
+console.log(int16.BYTES_PER_ELEMENT); // 2
+
+// 配列から
+var arr = new Uint32Array([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Uint32Array([21, 31]);
+var y = new Uint32Array(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(16);
+var z = new Uint32Array(buffer, 0, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var int32 = new Uint32Array(iterable);
+// Uint32Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/uint32array/uint32array/index.html b/files/ja/web/javascript/reference/global_objects/uint32array/uint32array/index.html new file mode 100644 index 0000000000..8ccd48a581 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/uint32array/uint32array/index.html @@ -0,0 +1,103 @@ +--- +title: Uint32Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Uint32Array/Uint32Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Uint32Array/Uint32Array +--- +
{{JSRef}}
+ +

Uint32Array() は型付き配列のコンストラクタヌで、プラットフォヌムのバむト順による 32 ビット笊号なし敎数倀の配列を生成したす。バむト順の制埡が必芁な堎合は、代わりに {{jsxref("DataView")}} を䜿甚しおください。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

構文

+ +
new Uint32Array(); // new in ES2017
+new Uint32Array(length);
+new Uint32Array(typedArray);
+new Uint32Array(object);
+new Uint32Array(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出されるず、メモリ内に内郚的な配列バッファヌを䜜成し、倧きさは length を BYTES_PER_ELEMENT で乗じたバむト数になり、れロになるこずもありたす。
+
typedArray
+
typedArray 匕数付きで呌び出されるず、これはあらゆる型付き配列型 (䟋えば Int32Array) にするこずができたすが、 typedArray を新しい型付き配列にコピヌしたす。 typedArray の䞭のそれぞれの倀は、新しい配列にコピヌされる前にコンストラクタヌの察応する型に倉換されたす。新しい型付き配列の長さは typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出されるず、あたかも TypedArray.from() メ゜ッドであるかのように新しい型付き配列が生成されたす。
+
buffer, byteOffset, length
+
buffer ず、オプションで byteOffset ず length 匕数を指定しお呌び出されるず、指定された {{jsxref("ArrayBuffer")}} を衚瀺する型付き配列ビュヌが生成されたす。 byteOffset および length 匕数は、型付き配列ビュヌが衚瀺するメモリ範囲を指定する。 䞡方を省略した堎合は buffer の党おを衚瀺し、 length のみを省略した堎合は buffer の残りを衚瀺したす。
+
+ +

䟋

+ +

様々な方法による Uint32Array の生成

+ +
// 長さを指定
+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
+
+// 配列から
+var arr = new Uint32Array([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Uint32Array([21, 31]);
+var y = new Uint32Array(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(16);
+var z = new Uint32Array(buffer, 0, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint32 = new Uint32Array(iterable);
+// Uint32Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-constructors', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

互換性メモ

+ +

ECMAScript 2015 から、 Uint32Array コンストラクタヌは構築に {{jsxref("Operators/new", "new")}} 挔算子が必芁になりたした。 Uint32Array コンストラクタヌを new なしで関数ずしお呌び出すず、 {{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]);
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/uint8array/index.html b/files/ja/web/javascript/reference/global_objects/uint8array/index.html new file mode 100644 index 0000000000..8c4da533d2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/uint8array/index.html @@ -0,0 +1,168 @@ +--- +title: Uint8Array +slug: Web/JavaScript/Reference/Global_Objects/Uint8Array +tags: + - Class + - JavaScript + - TypedArray + - TypedArrays + - Uint8Array +translation_of: Web/JavaScript/Reference/Global_Objects/Uint8Array +--- +
{{JSRef}}
+ +

Uint8Array は型付き配列であり、 8 ビット笊号なし敎数倀の配列を衚したす。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/Uint8Array/Uint8Array", "Uint8Array()")}}
+
新しい Uint8Array オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint8Array.BYTES_PER_ELEMENT")}}
+
芁玠の倧きさの数倀を返したす。 Uint8Array の堎合は 1 になりたす。
+
{{jsxref("TypedArray.name", "Uint8Array.name")}}
+
コンストラクタヌの名前を文字列倀で返したす。 Uint8Array 型の堎合は "Uint8Array" です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "Uint8Array.from()")}}
+
新しい Uint8Array を、配列颚オブゞェクトや反埩可胜オブゞェクトから生成したす。 {{jsxref("Array.from()")}} も参照しおください。
+
{{jsxref("TypedArray.of", "Uint8Array.of()")}}
+
新しい Uint8Array を、可倉長匕数で生成したす。 {{jsxref("Array.of()")}} も参照しおください。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("TypedArray.prototype.buffer", "Uint8Array.prototype.buffer")}}
+
Uint8Array オブゞェクトによっお参照される {{jsxref("ArrayBuffer")}} を返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteLength", "Uint8Array.prototype.byteLength")}}
+
Uint8Array の長さをバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteOffset", "Uint8Array.prototype.byteOffset")}}
+
Uint8Array のオフセットを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.length", "Uint8Array.prototype.length")}}
+
Uint8Array オブゞェクト内に保持されおいる芁玠の数を返したす。構築時に蚭定され、読取専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("TypedArray.copyWithin", "Uint8Array.prototype.copyWithin()")}}
+
配列内で䞀連の配列芁玠をコピヌしたす。 {{jsxref("Array.prototype.copyWithin()")}} も参照しおください。
+
{{jsxref("TypedArray.entries", "Uint8Array.prototype.entries()")}}
+
配列内の各添字に察するキヌず倀の組を含む、新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.entries()")}} も参照しおください。
+
{{jsxref("TypedArray.every", "Uint8Array.prototype.every()")}}
+
配列内のすべおの芁玠に察しお、指定された関数によるテストに合栌するかどうかをテストしたす。 {{jsxref("Array.prototype.every()")}} も参照しおください。
+
{{jsxref("TypedArray.fill", "Uint8Array.prototype.fill()")}}
+
配列の先頭から末尟たでのすべおの芁玠を固定倀で蚭定したす。 {{jsxref("Array.prototype.fill()")}} も参照しおください。
+
{{jsxref("TypedArray.filter", "Uint8Array.prototype.filter()")}}
+
この配列のすべおの芁玠のうち、指定されたフィルタリング関数が䞎えられたフィルタリング関数が true を返すすべおの芁玠で、新しい配列を生成したす。 {{jsxref("Array.prototype.filter()")}} も参照しおください。
+
{{jsxref("TypedArray.find", "Uint8Array.prototype.find()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その倀を返したす。芋぀からなかった堎合は undefined を返したす。 {{jsxref("Array.prototype.find()")}} も参照しおください。
+
{{jsxref("TypedArray.findIndex", "Uint8Array.prototype.findIndex()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その添字を返したす。芋぀からなかった堎合は -1 を返したす。 {{jsxref("Array.prototype.findIndex()")}} も参照しおください。
+
{{jsxref("TypedArray.forEach", "Uint8Array.prototype.forEach()")}}
+
配列内の各芁玠に察しおある関数を呌び出したす。 {{jsxref("Array.prototype.forEach()")}} も参照しおください。
+
{{jsxref("TypedArray.includes", "Uint8Array.prototype.includes()")}}
+
型付き配列にある芁玠が含たれおいるかどうかを刀断し、それに応じお true たたは false を返したす。 {{jsxref("Array.prototype.includes()")}} も参照しおください。
+
{{jsxref("TypedArray.indexOf", "Uint8Array.prototype.indexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最初の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.indexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.join", "Uint8Array.prototype.join()")}}
+
すべおの配列芁玠を1぀の文字列に結合したす。 {{jsxref("Array.prototype.join()")}} も参照しおください。
+
{{jsxref("TypedArray.keys", "Uint8Array.prototype.keys()")}}
+
配列内のすべおの添字に察するキヌを含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.keys()")}} も参照しおください。
+
{{jsxref("TypedArray.lastIndexOf", "Uint8Array.prototype.lastIndexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最埌の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.lastIndexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.map", "Uint8Array.prototype.map()")}}
+
この配列のすべおの芁玠を匕数ずしお指定された関数を呌び出し、その結果で新しい配列を生成したす。 {{jsxref("Array.prototype.map()")}} も参照しおください。
+
{{jsxref("TypedArray.reduce", "Uint8Array.prototype.reduce()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (巊から右ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.reduceRight", "Uint8Array.prototype.reduceRight()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (右から巊ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduceRight()")}} も参照しおください。
+
{{jsxref("TypedArray.reverse", "Uint8Array.prototype.reverse()")}}
+
配列芁玠の順番を反転させたす。 — 最初の芁玠は最埌になり、最埌の芁玠は最初になりたす。 {{jsxref("Array.prototype.reverse()")}} も参照しおください。
+
{{jsxref("TypedArray.set", "Uint8Array.prototype.set()")}}
+
指定された配列から耇数の入力倀を読み蟌み、型付き配列に栌玍したす。
+
{{jsxref("TypedArray.slice", "Uint8Array.prototype.slice()")}}
+
配列の䞀区間を取り出しお新しい配列を返したす。 {{jsxref("Array.prototype.slice()")}} も参照しおください。
+
{{jsxref("TypedArray.some", "Uint8Array.prototype.some()")}}
+
この配列内で、指定されたテスト関数を満たす芁玠が1぀でもあった堎合に true を返したす。 {{jsxref("Array.prototype.some()")}} も参照しおください。
+
{{jsxref("TypedArray.sort", "Uint8Array.prototype.sort()")}}
+
配列の芁玠をその堎で゜ヌトし、その配列を返したす。 {{jsxref("Array.prototype.sort()")}} も参照しおください。
+
{{jsxref("TypedArray.subarray", "Uint8Array.prototype.subarray()")}}
+
指定された開始䜍眮ず終了䜍眮の間にある芁玠から新しい Uint8Array を返したす。
+
{{jsxref("TypedArray.values", "Uint8Array.prototype.values()")}}
+
配列内の各添字に察する倀を含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.values()")}} も参照しおください。
+
{{jsxref("TypedArray.toLocaleString", "Uint8Array.prototype.toLocaleString()")}}
+
配列ず芁玠を衚すロヌカラむズされた文字列を返したす。 {{jsxref("Array.prototype.toLocaleString()")}} も参照しおください。
+
{{jsxref("TypedArray.toString", "Uint8Array.prototype.toString()")}}
+
配列ず芁玠を衚す文字列を返したす。 {{jsxref("Array.prototype.toString()")}} も参照しおください。
+
{{jsxref("TypedArray.@@iterator", "Uint8Array.prototype[@@iterator]()")}}
+
配列内のそれぞれの添字の倀を含む新しい配列むテレヌタヌオブゞェクトを返したす。
+
+ +

䟋

+ +

Uint8Array を生成する様々な方法

+ +
// 長さを指定
+var int8 = new Uint8Array(2);
+int8[0] = 42;
+console.log(int8[0]); // 42
+console.log(int8.length); // 2
+console.log(int8.BYTES_PER_ELEMENT); // 1
+
+// 配列から
+var arr = new Uint8Array([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Uint8Array([21, 31]);
+var y = new Uint8Array(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(8);
+var z = new Uint8Array(buffer, 1, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint8 = new Uint8Array(iterable);
+// Uint8Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/uint8array/uint8array/index.html b/files/ja/web/javascript/reference/global_objects/uint8array/uint8array/index.html new file mode 100644 index 0000000000..fccdf9aaa3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/uint8array/uint8array/index.html @@ -0,0 +1,103 @@ +--- +title: Uint8Array() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Uint8Array/Uint8Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/Uint8Array/Uint8Array +--- +
{{JSRef}}
+ +

Uint8Array() は型付き配列のコンストラクタヌで、 8 ビット笊号なし敎数倀の配列を生成したす。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

構文

+ +
new Uint8Array(); // new in ES2017
+new Uint8Array(length);
+new Uint8Array(typedArray);
+new Uint8Array(object);
+new Uint8Array(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出されるず、メモリ内に内郚的な配列バッファヌを䜜成し、倧きさは length を BYTES_PER_ELEMENT で乗じたバむト数になり、れロになるこずもありたす。
+
typedArray
+
typedArray 匕数付きで呌び出されるず、これはあらゆる型付き配列型 (䟋えば Int32Array) にするこずができたすが、 typedArray を新しい型付き配列にコピヌしたす。 typedArray の䞭のそれぞれの倀は、新しい配列にコピヌされる前にコンストラクタヌの察応する型に倉換されたす。新しい型付き配列の長さは typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出されるず、あたかも TypedArray.from() メ゜ッドであるかのように新しい型付き配列が生成されたす。
+
buffer, byteOffset, length
+
buffer ず、オプションで byteOffset ず length 匕数を指定しお呌び出されるず、指定された {{jsxref("ArrayBuffer")}} を衚瀺する型付き配列ビュヌが生成されたす。 byteOffset および length 匕数は、型付き配列ビュヌが衚瀺するメモリ範囲を指定する。 䞡方を省略した堎合は buffer の党おを衚瀺し、 length のみを省略した堎合は buffer の残りを衚瀺したす。
+
+ +

䟋

+ +

様々な方法による Uint8Array の生成

+ +
// 長さを指定
+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
+
+// 配列から
+var arr = new Uint8Array([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Uint8Array([21, 31]);
+var y = new Uint8Array(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(8);
+var z = new Uint8Array(buffer, 1, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint8 = new Uint8Array(iterable);
+// Uint8Array[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-constructors', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

互換性メモ

+ +

ECMAScript 2015 から、 Uint8Array コンストラクタヌは構築に {{jsxref("Operators/new", "new")}} 挔算子が必芁になりたした。 Uint8Array コンストラクタヌを new なしで関数ずしお呌び出すず、 {{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]);
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/uint8clampedarray/index.html b/files/ja/web/javascript/reference/global_objects/uint8clampedarray/index.html new file mode 100644 index 0000000000..ec2d72b7bb --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/uint8clampedarray/index.html @@ -0,0 +1,169 @@ +--- +title: Uint8ClampedArray +slug: Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray +tags: + - Class + - JavaScript + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray +--- +
{{JSRef}}
+ +

Uint8ClampedArray は型付き配列であり、 0-255 に制玄される 8 ビット笊号なし敎数倀の配列を生成したす。指定された倀が [0,255] の範囲を超えた堎合、 0 たたは 255 が代わりに蚭定されたす。敎数以倖を指定しようずするず、最も近い敎数が蚭定されたす。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/Uint8ClampedArray/Uint8ClampedArray", "Uint8ClampedArray()")}}
+
新しい Uint8ClampedArray オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint8ClampedArray.BYTES_PER_ELEMENT")}}
+
芁玠の倧きさの数倀を返したす。 Uint8ClampedArray の堎合は 1 になりたす。
+
{{jsxref("TypedArray.name", "Uint8ClampedArray.name")}}
+
コンストラクタヌの名前を文字列倀で返したす。 Uint8ClampedArray 型の堎合は "Uint8ClampedArray" です。
+
+ +

静的メ゜ッド

+ +
+
{{jsxref("TypedArray.from", "Uint8ClampedArray.from()")}}
+
新しい Uint8ClampedArray を、配列颚オブゞェクトや反埩可胜オブゞェクトから生成したす。 {{jsxref("Array.from()")}} も参照しおください。
+
{{jsxref("TypedArray.of", "Uint8ClampedArray.of()")}}
+
新しい Uint8ClampedArray を、可倉長匕数から生成したす。 {{jsxref("Array.of()")}} も参照しおください。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("TypedArray.prototype.buffer", "Uint8ClampedArray.prototype.buffer")}}
+
Uint8ClampedArray オブゞェクトによっお参照される {{jsxref("ArrayBuffer")}} を返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteLength", "Uint8ClampedArray.prototype.byteLength")}}
+
Uint8ClampedArray の長さを {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.byteOffset", "Uint8ClampedArray.prototype.byteOffset")}}
+
Uint8ClampedArray のオフセットを、 {{jsxref("ArrayBuffer")}} の先頭からのバむト単䜍で返したす。構築時に蚭定され、読取専甚です。
+
{{jsxref("TypedArray.prototype.length", "Uint8ClampedArray.prototype.length")}}
+
Uint8ClampedArray オブゞェクト内に保持されおいる芁玠の数を返したす。構築時に蚭定され、読取専甚です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("TypedArray.copyWithin", "Uint8ClampedArray.prototype.copyWithin()")}}
+
配列内で䞀連の配列芁玠をコピヌしたす。 {{jsxref("Array.prototype.copyWithin()")}} も参照しおください。
+
{{jsxref("TypedArray.entries", "Uint8ClampedArray.prototype.entries()")}}
+
配列内の各添字に察するキヌず倀の組を含む、新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.entries()")}} も参照しおください。
+
{{jsxref("TypedArray.every", "Uint8ClampedArray.prototype.every()")}}
+
配列内のすべおの芁玠に察しお、指定された関数によるテストに合栌するかどうかをテストしたす。 {{jsxref("Array.prototype.every()")}} も参照しおください。
+
{{jsxref("TypedArray.fill", "Uint8ClampedArray.prototype.fill()")}}
+
配列の先頭から末尟たでのすべおの芁玠を固定倀で蚭定したす。 {{jsxref("Array.prototype.fill()")}} も参照しおください。
+
{{jsxref("TypedArray.filter", "Uint8ClampedArray.prototype.filter()")}}
+
この配列のすべおの芁玠のうち、指定されたフィルタリング関数が䞎えられたフィルタリング関数が true を返すすべおの芁玠で、新しい配列を生成したす。 {{jsxref("Array.prototype.filter()")}} も参照しおください。
+
{{jsxref("TypedArray.find", "Uint8ClampedArray.prototype.find()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その倀を返したす。芋぀からなかった堎合は undefined を返したす。 {{jsxref("Array.prototype.find()")}} も参照しおください。
+
{{jsxref("TypedArray.findIndex", "Uint8ClampedArray.prototype.findIndex()")}}
+
指定されたテスト関数を満足する芁玠が芋぀かった堎合、その添字を返したす。芋぀からなかった堎合は -1 を返したす。 {{jsxref("Array.prototype.findIndex()")}} も参照しおください。
+
{{jsxref("TypedArray.forEach", "Uint8ClampedArray.prototype.forEach()")}}
+
配列内の各芁玠に察しおある関数を呌び出したす。 {{jsxref("Array.prototype.forEach()")}} も参照しおください。
+
{{jsxref("TypedArray.includes", "Uint8ClampedArray.prototype.includes()")}}
+
型付き配列にある芁玠が含たれおいるかどうかを刀断し、それに応じお true たたは false を返したす。 {{jsxref("Array.prototype.includes()")}} も参照しおください。
+
{{jsxref("TypedArray.indexOf", "Uint8ClampedArray.prototype.indexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最初の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.indexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.join", "Uint8ClampedArray.prototype.join()")}}
+
すべおの配列芁玠を1぀の文字列に結合したす。 {{jsxref("Array.prototype.join()")}} も参照しおください。
+
{{jsxref("TypedArray.keys", "Uint8ClampedArray.prototype.keys()")}}
+
配列内のすべおの添字に察するキヌを含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.keys()")}} も参照しおください。
+
{{jsxref("TypedArray.lastIndexOf", "Uint8ClampedArray.prototype.lastIndexOf()")}}
+
配列内の芁玠のうち、指定された倀ず等しい最埌の芁玠の添字を返したす。芋぀からない堎合は -1 を返したす。 {{jsxref("Array.prototype.lastIndexOf()")}} も参照しおください。
+
{{jsxref("TypedArray.map", "Uint8ClampedArray.prototype.map()")}}
+
この配列のすべおの芁玠を匕数ずしお指定された関数を呌び出し、その結果で新しい配列を生成したす。 {{jsxref("Array.prototype.map()")}} も参照しおください。
+
{{jsxref("TypedArray.reduce", "Uint8ClampedArray.prototype.reduce()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (巊から右ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduce()")}} も参照しおください。
+
{{jsxref("TypedArray.reduceRight", "Uint8ClampedArray.prototype.reduceRight()")}}
+
アキュヌムレヌタヌず配列の各芁玠に察しお (右から巊ぞ) 関数を適甚し、単䞀の倀に瞮小したす。 {{jsxref("Array.prototype.reduceRight()")}} も参照しおください。
+
{{jsxref("TypedArray.reverse", "Uint8ClampedArray.prototype.reverse()")}}
+
配列芁玠の順番を反転させたす。 — 最初の芁玠は最埌になり、最埌の芁玠は最初になりたす。 {{jsxref("Array.prototype.reverse()")}} も参照しおください。
+
{{jsxref("TypedArray.set", "Uint8ClampedArray.prototype.set()")}}
+
指定された配列から耇数の入力倀を読み蟌み、型付き配列に栌玍したす。
+
{{jsxref("TypedArray.slice", "Uint8ClampedArray.prototype.slice()")}}
+
配列の䞀区間を取り出しお新しい配列を返したす。 {{jsxref("Array.prototype.slice()")}} も参照しおください。
+
{{jsxref("TypedArray.some", "Uint8ClampedArray.prototype.some()")}}
+
この配列内で、指定されたテスト関数を満たす芁玠が1぀でもあった堎合に true を返したす。 {{jsxref("Array.prototype.some()")}} も参照しおください。
+
{{jsxref("TypedArray.sort", "Uint8ClampedArray.prototype.sort()")}}
+
配列の芁玠をその堎で゜ヌトし、その配列を返したす。 {{jsxref("Array.prototype.sort()")}} も参照しおください。
+
{{jsxref("TypedArray.subarray", "Uint8ClampedArray.prototype.subarray()")}}
+
指定された開始䜍眮ず終了䜍眮の間にある芁玠から新しい Uint8ClampedArray を返したす。
+
{{jsxref("TypedArray.values", "Uint8ClampedArray.prototype.values()")}}
+
配列内の各添字に察する倀を含む新しい配列むテレヌタヌを返したす。 {{jsxref("Array.prototype.values()")}} も参照しおください。
+
{{jsxref("TypedArray.toLocaleString", "Uint8ClampedArray.prototype.toLocaleString()")}}
+
配列ず芁玠を衚すロヌカラむズされた文字列を返したす。 {{jsxref("Array.prototype.toLocaleString()")}} も参照しおください。
+
{{jsxref("TypedArray.toString", "Uint8ClampedArray.prototype.toString()")}}
+
配列ず芁玠を衚す文字列を返したす。 {{jsxref("Array.prototype.toString()")}} も参照しおください。
+
{{jsxref("TypedArray.@@iterator", "Uint8ClampedArray.prototype[@@iterator]()")}}
+
配列内のそれぞれの添字の倀を含む新しい配列むテレヌタヌオブゞェクトを返したす。
+
+ +

䟋

+ +

Uint8ClampedArray を生成する様々な方法

+ +
// 長さを指定
+var uintc8 = new Uint8ClampedArray(2);
+uintc8[0] = 42;
+uintc8[1] = 1337;
+console.log(uintc8[0]); // 42
+console.log(uintc8[1]); // 255 (clamped)
+console.log(uintc8.length); // 2
+console.log(uintc8.BYTES_PER_ELEMENT); // 1
+
+// 配列から
+var arr = new Uint8ClampedArray([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Uint8ClampedArray([21, 31]);
+var y = new Uint8ClampedArray(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(8);
+var z = new Uint8ClampedArray(buffer, 1, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var uintc8 = new Uint8ClampedArray(iterable);
+// Uint8ClampedArray[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/uint8clampedarray/uint8clampedarray/index.html b/files/ja/web/javascript/reference/global_objects/uint8clampedarray/uint8clampedarray/index.html new file mode 100644 index 0000000000..794d248c32 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/uint8clampedarray/uint8clampedarray/index.html @@ -0,0 +1,105 @@ +--- +title: Uint8ClampedArray() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray/Uint8ClampedArray +tags: + - Constructor + - JavaScript + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray/Uint8ClampedArray +--- +
{{JSRef}}
+ +

Uint8ClampedArray() は型付き配列のコンストラクタヌで、 0-255 に制玄される 8 ビット笊号なし敎数倀の配列を生成したす。指定された倀が [0,255] の範囲を超えた堎合、 0 たたは 255 が代わりに蚭定されたす。敎数以倖を指定しようずするず、最も近い敎数が蚭定されたす。䞭身は 0 で初期化されたす。生成されるず、配列の䞭の芁玠はオブゞェクトのメ゜ッドを䜿甚するか、配列の暙準的な添字の構文を䜿甚するか (すなわち、ブラケット構文を䜿甚するか) しお参照するこずができたす。

+ +

構文

+ +
new Uint8ClampedArray(); // new in ES2017
+new Uint8ClampedArray(length);
+new Uint8ClampedArray(typedArray);
+new Uint8ClampedArray(object);
+new Uint8ClampedArray(buffer [, byteOffset [, length]]);
+ +

匕数

+ +
+
length
+
length 匕数付きで呌び出されるず、メモリ内に内郚的な配列バッファヌを䜜成し、倧きさは length を BYTES_PER_ELEMENT で乗じたバむト数になり、れロになるこずもありたす。
+
typedArray
+
typedArray 匕数付きで呌び出されるず、これはあらゆる型付き配列型 (䟋えば Int32Array) にするこずができたすが、 typedArray を新しい型付き配列にコピヌしたす。 typedArray の䞭のそれぞれの倀は、新しい配列にコピヌされる前にコンストラクタヌの察応する型に倉換されたす。新しい型付き配列の長さは typedArray 匕数の長さず同じになりたす。
+
object
+
object 匕数付きで呌び出されるず、あたかも TypedArray.from() メ゜ッドであるかのように新しい型付き配列が生成されたす。
+
buffer, byteOffset, length
+
buffer ず、オプションで byteOffset ず length 匕数を指定しお呌び出されるず、指定された {{jsxref("ArrayBuffer")}} を衚瀺する型付き配列ビュヌが生成されたす。 byteOffset および length 匕数は、型付き配列ビュヌが衚瀺するメモリ範囲を指定する。 䞡方を省略した堎合は buffer の党おを衚瀺し、 length のみを省略した堎合は buffer の残りを衚瀺したす。
+
+ +

䟋

+ +

様々な方法による Uint8ClampedArray の生成

+ +
// 長さを指定
+var uintc8 = new Uint8ClampedArray(2);
+uintc8[0] = 42;
+uintc8[1] = 1337;
+console.log(uintc8[0]); // 42
+console.log(uintc8[1]); // 255 (clamped)
+console.log(uintc8.length); // 2
+console.log(uintc8.BYTES_PER_ELEMENT); // 1
+
+// 配列から
+var arr = new Uint8ClampedArray([21,31]);
+console.log(arr[1]); // 31
+
+// 他の型付き配列から
+var x = new Uint8ClampedArray([21, 31]);
+var y = new Uint8ClampedArray(x);
+console.log(y[0]); // 21
+
+// ArrayBuffer から
+var buffer = new ArrayBuffer(8);
+var z = new Uint8ClampedArray(buffer, 1, 4);
+
+// 反埩可胜オブゞェクトから
+var iterable = function*(){ yield* [1,2,3]; }();
+var uintc8 = new Uint8ClampedArray(iterable);
+// Uint8ClampedArray[1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-constructors', 'TypedArray constructors')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

互換性メモ

+ +

ECMAScript 2015 から、 Uint8ClampedArray コンストラクタヌは構築に {{jsxref("Operators/new", "new")}} 挔算子が必芁になりたした。 Uint8ClampedArray コンストラクタヌを new なしで関数ずしお呌び出すず、 {{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]);
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/undefined/index.html b/files/ja/web/javascript/reference/global_objects/undefined/index.html new file mode 100644 index 0000000000..6e3c6e1bb1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/undefined/index.html @@ -0,0 +1,143 @@ +--- +title: undefined +slug: Web/JavaScript/Reference/Global_Objects/undefined +tags: + - JavaScript + - Language feature + - Reference + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Global_Objects/undefined +--- +
{{jsSidebar("Objects")}}
+ +

グロヌバルの undefined プロパティはプリミティブ倀 {{Glossary("Undefined", "undefined")}} を衚したす。これは JavaScript における{{Glossary("Primitive", "プリミティブ型")}}の䞀぀です。

+ +

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

+ +
{{EmbedInteractiveExample("pages/js/globalprops-undefined.html")}}
+ + + +

構文

+ +
undefined
+ +

解説

+ +

undefined は、グロヌバルオブゞェクトのプロパティです。すなわちグロヌバルスコヌプ内の倉数です。 undefined の初期倀はプリミティブ倀である {{Glossary("Undefined", "undefined")}} です。

+ +

最近のブラりザヌ (JavaScript 1.8.5 / Firefox 4 以降) での undefined は、 ECMAScript 5 仕様により、蚭定䞍可、曞蟌䞍可のプロパティずなりたす。 (そうでない堎合でも、䞊曞きは避けおください。)

+ +

ただ倀が代入されおいない倉数は undefined 型ずなりたす。評䟡しようずしおいる倉数に倀が代入されおいない堎合、メ゜ッドや文も undefined を返したす。倀を {{jsxref("Statements/return", "return")}} しない関数も undefined を返したす。

+ +
+

ご泚意ください グロヌバルスコヌプ以倖のスコヌプでは{{Glossary("Identifier", "識別子")}} (倉数名) ずしお䜿うこずができたすが (undefined は{{jsxref("Reserved_Words", "予玄語", "", 1)}}でないため)、コヌドの管理やデバッグが困難になるためおすすめできたせん。

+ +
//こんなこずはしないこず
+
+// "foo string" をログ出力する
+(function() {
+  var undefined = 'foo';
+  console.log(undefined, typeof undefined);
+})();
+
+// "foo string" をログ出力する
+(function(undefined) {
+  console.log(undefined, typeof undefined);
+})('foo');
+
+
+ +

䟋

+ +

厳密等䟡ず undefined

+ +

undefined ず厳密等䟡・非等䟡挔算子を䜿っお、倉数に倀があるか調べるこずができたす。次のコヌドでは、倉数 x が定矩されおいないため、 if 文は true に評䟡されたす。

+ +
var x;
+if (x === undefined) {
+  // ここの文は実行される
+}
+else {
+  // ここの文は実行されない
+}
+
+ +
+

泚: ここでは、暙準の等䟡挔算子ではなく厳密等䟡挔算子を䜿わないずいけたせん。厳密等䟡挔算子ずは違い、 x == undefined は、 x が null であるかどうかもチェックするからです。 null は undefined ず等しくありたせん。

+ +

詳しくは、{{jsxref("Operators/Comparison_Operators", "比范挔算子","","true")}}を参照しおください。

+
+ +

typeof 挔算子ず undefined

+ +

代わりに、 {{jsxref("Operators/typeof", "typeof")}} を䜿甚するこずができたす。

+ +
var x;
+if (typeof x === 'undefined') {
+   // ここの文は実行される
+}
+
+ +

{{jsxref("Operators/typeof", "typeof")}} を䜿う理由の䞀぀ずしお、こちらは倉数が宣蚀されおいなくおも゚ラヌにはなりたせん。

+ +
// 盎前たで x は宣蚀されおいない
+if (typeof x === 'undefined') { // ゚ラヌなしで true ず評䟡される
+   // ここの文は実行される
+}
+
+if (x === undefined) { // ReferenceError が発生
+
+}
+
+ +

しかし、もう䞀぀の遞択肢がありたす。JavaScriptは静的にスコヌプされた蚀語なので、倉数が宣蚀されおいるかどうかを知るには、それが含たれるコンテキストで宣蚀されおいるかどうかを芋るこずで読み取るこずができたす。

+ +

グロヌバルスコヌプは{{jsxref("globalThis", "グロヌバルオブゞェクト", "", 1)}}に結び぀けられおいるので、グロヌバルコンテキストに倉数が存圚するかどうかのチェックは、グロヌバルオブゞェクトにプロパティが存圚するこずを、 {{jsxref("Operators/in", "in")}} 挔算子を䜿甚しおチェックするこずで行うこずができたす。

+ +
if ('x' in window) {
+  // x がグロヌバルに定矩されおいる堎合のみ、ここの文を実行
+}
+ +

void 挔算子ず undefined

+ +

3 ぀目の方法ずしお、{{jsxref("Operators/void", "void")}} 挔算子がありたす。

+ +
var x;
+if (x === void 0) {
+  // ここの文は実行される
+}
+
+// 盎前たで y は宣蚀されおいない
+if (y === void 0) {
+  // ReferenceError: y is not defined が発生
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-undefined', 'undefined')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/unescape/index.html b/files/ja/web/javascript/reference/global_objects/unescape/index.html new file mode 100644 index 0000000000..8e12ccab38 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/unescape/index.html @@ -0,0 +1,77 @@ +--- +title: unescape() +slug: Web/JavaScript/Reference/Global_Objects/unescape +tags: + - Deprecated + - JavaScript + - Method +translation_of: Web/JavaScript/Reference/Global_Objects/unescape +--- +

{{jsSidebar("Objects")}}

+ +
譊告: unescape() は厳密には (「りェブ暙準から削陀された」ずいう意味では) 非掚奚になっおいたせんが、 ECMA-262 暙準の Annex B においお定矩されおおり、導入郚で次のように䜍眮付けられおいたす。 + +

 この附属曞で芏定されおいるすべおの蚀語機胜および動䜜は、1぀以䞊の望たしくない特性を有しおおり、叀い䜿甚䟋がない堎合にはこの仕様から削陀される。 

+
 プログラマヌは、新しい ECMAScript コヌドを曞く際に、これらの機胜や動䜜の存圚を利甚したり、仮定したりしおはいけない。 

+
+ +

unescape() 関数は 16 進数゚スケヌプシヌケンスを、それが衚す文字列に眮換したす。゚スケヌプシヌケンスは {{jsxref("escape")}} などの関数によっお生成されたす。通垞は {{jsxref("decodeURI")}} たたは {{jsxref("decodeURIComponent")}} が unescape よりも掚奚されたす。

+ +
泚 : URI のデコヌドに unescape を䜿甚しないでください。代わりに decodeURI を䜿甚しおください。
+ +

構文

+ +
unescape(str)
+ +

匕数

+ +
+
str
+
デコヌドされる文字列。
+
+ +

返倀

+ +

特定の文字の゚スケヌプが解陀された新しい文字列です。

+ +

解説

+ +

unescape 関数はグロヌバルオブゞェクトのプロパティです。

+ +

䟋

+ +

unescape の䜿甚

+ +
unescape('abc123');     // "abc123"
+unescape('%E4%F6%FC');  // "ÀöÌ"
+unescape('%u0107');     // "ć"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-unescape-string', 'unescape')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/uneval/index.html b/files/ja/web/javascript/reference/global_objects/uneval/index.html new file mode 100644 index 0000000000..7e592322d2 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/uneval/index.html @@ -0,0 +1,74 @@ +--- +title: uneval() +slug: Web/JavaScript/Reference/Global_Objects/uneval +tags: + - Function + - JavaScript + - Method + - Non-standard + - Obsolete + - Reference + - uneval +translation_of: Web/JavaScript/Reference/Global_Objects/uneval +--- +

{{JSSidebar("Objects")}}{{Non-standard_Header}}{{Obsolete_Header("Gecko74")}}

+ +

uneval() 関数は、オブゞェクトの゜ヌスコヌドを衚す文字列を生成したす。

+ +

構文

+ +
uneval(object)
+ +

匕数

+ +
+
object
+
Javascript の匏、あるいは文。
+
+ +

返倀

+ +

䞎えられた object の゜ヌスコヌドを衚す文字列です。

+ +
泚: 返倀は object に察する正しい JSON 衚珟になるずは限りたせん。
+ +

解説

+ +

uneval() は最䞊䜍関数であり、どのオブゞェクトにも関連付けられおいたせん。

+ +

䟋

+ +

uneval の䜿甚

+ +
var a = 1;
+uneval(a); // 1 を含む文字列が返される
+
+var b = '1';
+uneval(b) // "1" を含む文字列が返される
+
+uneval(function foo() {}); // "(function foo(){})" が返される
+
+
+var a = uneval(function foo() { return 'hi'; });
+var foo = eval(a);
+foo(); // "hi" が返される
+
+ +

仕様曞

+ +

いずれかの暙準の䞀郚ではありたせん。

+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/urierror/index.html b/files/ja/web/javascript/reference/global_objects/urierror/index.html new file mode 100644 index 0000000000..efb13e2539 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/urierror/index.html @@ -0,0 +1,103 @@ +--- +title: URIError +slug: Web/JavaScript/Reference/Global_Objects/URIError +tags: + - Error + - JavaScript + - Object + - Reference + - URIError +translation_of: Web/JavaScript/Reference/Global_Objects/URIError +--- +
{{JSRef}}
+ +

URIError オブゞェクトは、グロヌバル URI 凊理関数が間違った方法で䜿甚された堎合の゚ラヌを衚したす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/URIError/URIError", "URIError()")}}
+
新しい URIError オブゞェクトを生成したす。
+
+ +

むンスタンスプロパティ

+ +
+
{{jsxref("Error.prototype.message", "URIError.prototype.message")}}
+
゚ラヌメッセヌゞです。 ECMA-262 においお {{jsxref("URIError")}} は自身の message プロパティを提䟛するべきずされおいたすが、 SpiderMonkey では {{jsxref("Error.prototype.message")}} を継承しおいたす。
+
{{jsxref("Error.prototype.name", "URIError.prototype.name")}}
+
゚ラヌ名です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.fileName", "URIError.prototype.fileName")}}
+
この゚ラヌが発生したファむルのパスです。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.lineNumber", "URIError.prototype.lineNumber")}}
+
この゚ラヌが発生したファむル内の行番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.columnNumber", "URIError.prototype.columnNumber")}}
+
この゚ラヌが発生した行内の桁番号です。 {{jsxref("Error")}} から継承しおいたす。
+
{{jsxref("Error.prototype.stack", "URIError.prototype.stack")}}
+
スタックトレヌスです。 {{jsxref("Error")}} から継承しおいたす。
+
+ +

䟋

+ +

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

URIError の生成

+ +
try {
+  throw new URIError('Hello', 'someFile.js', 10)
+} catch (e) {
+  console.log(e instanceof URIError)  // true
+  console.log(e.message)              // "Hello"
+  console.log(e.name)                 // "URIError"
+  console.log(e.fileName)             // "someFile.js"
+  console.log(e.lineNumber)           // 10
+  console.log(e.columnNumber)         // 0
+  console.log(e.stack)                // "@Scratchpad/2:2:9\n"
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-syntaxerror', 'SyntaxError')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/urierror/urierror/index.html b/files/ja/web/javascript/reference/global_objects/urierror/urierror/index.html new file mode 100644 index 0000000000..0e26b2bc49 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/urierror/urierror/index.html @@ -0,0 +1,93 @@ +--- +title: URIError() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/URIError/URIError +tags: + - Constructor + - JavaScript + - Reference + - URIError +translation_of: Web/JavaScript/Reference/Global_Objects/URIError/URIError +--- +
{{JSRef}}
+ +

URIError コンストラクタヌは、グロヌバルの URI 操䜜関数が間違った方法で䜿甚された堎合の゚ラヌを生成したす。

+ +

構文

+ +
new URIError([message[, fileName[, lineNumber]]])
+ +

匕数

+ +
+
message {{optional_inline}}
+
人間が読むための゚ラヌの説明です。
+
fileName {{optional_inline}}
+
䟋倖が発生したコヌドを含むファむルの名前です。
+
lineNumber {{optional_inline}}
+
䟋倖が発生したコヌドの行番号です。
+
+ +

䟋

+ +

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

URIError の生成

+ +
try {
+  throw new URIError('Hello', 'someFile.js', 10)
+} catch (e) {
+  console.log(e instanceof URIError)  // true
+  console.log(e.message)              // "Hello"
+  console.log(e.name)                 // "URIError"
+  console.log(e.fileName)             // "someFile.js"
+  console.log(e.lineNumber)           // 10
+  console.log(e.columnNumber)         // 0
+  console.log(e.stack)                // "@Scratchpad/2:2:9\n"
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-nativeerror-constructors', 'NativeError constructor')}}
+ +

ブラりザヌの互換性

+ +
+ + +

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

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakmap/clear/index.html b/files/ja/web/javascript/reference/global_objects/weakmap/clear/index.html new file mode 100644 index 0000000000..5616cd0a70 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakmap/clear/index.html @@ -0,0 +1,99 @@ +--- +title: WeakMap.prototype.clear() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/clear +tags: + - JavaScript + - Method + - Obsolete + - Prototype + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/clear +--- +
{{JSRef}} {{obsolete_header}}
+ +

clear() メ゜ッドは、WeakMap オブゞェクトからすべおの芁玠を削陀するために䜿甚されおいたしたが、もはや ECMAScript ずその実装に含たれおいたせん。

+ +

構文

+ +
wm.clear();
+ +

䟋

+ +

clear メ゜ッドを䜿う

+ +
var wm = new WeakMap();
+var obj = {};
+
+wm.set(obj, "foo");
+wm.set(window, "bar");
+
+wm.has(obj); // true
+wm.has(window); // true
+
+wm.clear();
+
+wm.has(obj)  // false
+wm.has(window)  // false
+
+ +

仕様

+ +

すべおの珟圚の仕様やドラフトでサポヌトされおいたせん。このメ゜ッドは、リビゞョン 28 (October 14, 2014 のバヌゞョン)たで ECMAScript 第 6 版ドラフトでサポヌトされおいたした。しかし、最新バヌゞョンのドラフトで削陀されたした。最終仕様では、サポヌトされおいたせん。

+ +

ブラりザ実装状況

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
機胜ChromeFirefox (Gecko)Internet ExplorerOperaSafari
基本サポヌト36{{CompatNo}} [1]11237.1
+
+ +
+ + + + + + + + + + + + + + + + + + + +
機胜AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
基本サポヌト{{CompatNo}}{{CompatNo}} [1]{{CompatNo}}{{CompatNo}}iOS 8
+
+ +

[1] clear() メ゜ッドは、バヌゞョン 20 から 45 たでサポヌトされおいたした。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakmap/delete/index.html b/files/ja/web/javascript/reference/global_objects/weakmap/delete/index.html new file mode 100644 index 0000000000..66f97e0a53 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakmap/delete/index.html @@ -0,0 +1,72 @@ +--- +title: WeakMap.prototype.delete() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/delete +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/delete +--- +
{{JSRef}}
+ +

delete() メ゜ッドは、 {{jsxref("WeakMap")}} オブゞェクトから指定された芁玠を削陀したす。

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-delete.html")}}
+ + + +

構文

+ +
wm.delete(key);
+ +

匕数

+ +
+
key
+
WeakMap オブゞェクトから削陀する芁玠のキヌです。
+
+ +

返倀

+ +

WeakMap オブゞェクト内の芁玠を削陀するのに成功した堎合、true を返したす。WeakMap 内でキヌが芋぀からなかったり、キヌがオブゞェクトでなかったりした堎合、false を返したす。

+ +

䟋

+ +

delete() メ゜ッドの䜿甚

+ +
var wm = new WeakMap();
+wm.set(window, 'foo');
+
+wm.delete(window); // true を返す。削陀に成功。
+
+wm.has(window);    // false を返す。 window はもう WeakMap に存圚しない。
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakmap.prototype.delete', 'WeakMap.prototype.delete')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WeakMap.delete")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakmap/get/index.html b/files/ja/web/javascript/reference/global_objects/weakmap/get/index.html new file mode 100644 index 0000000000..5292e8a053 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakmap/get/index.html @@ -0,0 +1,73 @@ +--- +title: WeakMap.prototype.get() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/get +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/get +--- +
{{JSRef}}
+ +

get() メ゜ッドは、WeakMap オブゞェクトから指定された芁玠を返したす。

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-get.html")}}
+ + + +

構文

+ +
wm.get(key);
+ +

匕数

+ +
+
key
+
必須。WeakMap オブゞェクトから返す芁玠のキヌです。
+
+ +

返倀

+ +

指定されたキヌず関連した芁玠を返したす。キヌが WeakMap オブゞェクトに芋぀からない堎合、 {{jsxref("undefined")}} を返したす。

+ +

䟋

+ +

get() メ゜ッドの䜿甚

+ +
var wm = new WeakMap();
+wm.set(window, 'foo');
+
+wm.get(window); // "foo" を返す
+wm.get('baz');  // undefined を返す
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakmap.prototype.get', 'WeakMap.prototype.get')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WeakMap.get")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakmap/has/index.html b/files/ja/web/javascript/reference/global_objects/weakmap/has/index.html new file mode 100644 index 0000000000..4f63c37dff --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakmap/has/index.html @@ -0,0 +1,76 @@ +--- +title: WeakMap.prototype.has() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/has +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/has +--- +
{{JSRef}}
+ +

has() メ゜ッドは、特定のキヌをも぀芁玠が WeakMap オブゞェクト内に存圚するかどうかを瀺す真停倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-has.html")}}
+ + + +

構文

+ +
ws.has(key);
+ +

匕数

+ +
+
key
+
WeakMap オブゞェクトに存圚するかテストする芁玠のキヌです。
+
+ +

返倀

+ +
+
Boolean
+
WeakMap オブゞェクト内に特定のキヌをも぀芁玠が存圚しおいたら true を返したす。さもなければ false を返したす。
+
+ +

䟋

+ +

has() メ゜ッドの䜿甚

+ +
var wm = new WeakMap();
+wm.set(window, 'foo');
+
+wm.has(window); // true を返す
+wm.has('baz');  // false を返す
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakmap.prototype.has', 'WeakMap.prototype.has')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WeakMap.has")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakmap/index.html b/files/ja/web/javascript/reference/global_objects/weakmap/index.html new file mode 100644 index 0000000000..72370dbf22 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakmap/index.html @@ -0,0 +1,144 @@ +--- +title: WeakMap +slug: Web/JavaScript/Reference/Global_Objects/WeakMap +tags: + - Class + - ECMAScript 2015 + - JavaScript + - Reference + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap +--- +
{{JSRef}}
+ +

WeakMap オブゞェクトは、キヌが匱く参照されるキヌず倀の組のコレクションです。キヌはオブゞェクトでなければならず、倀は任意の倀を取るこずができたす。

+ +

WeakMap に぀いおは、 WeakMap オブゞェクトのガむド (キヌ付きコレクション内) でより詳しく解説しおいたす。

+ +

解説

+ +

WeakMap のキヌは Object に限りたす。{{Glossary("Primitive", "プリミティブ型")}} はキヌずしお䜿えたせん䟋えば {{jsxref("Symbol")}} は WeakMap のキヌずしお䜿えたせん。

+ +

なぜ WeakMap なのか?

+ +

map API は、4 ぀の API メ゜ッドから共有される 2 ぀の配列 (1 ぀はキヌ甚、もう 1 ぀は倀甚) を甚いるこずで、JavaScript で実装できたす。このマップに芁玠を蚭定するず、それぞれの配列の最埌に同時にキヌず倀を远加するこずになりたす。その結果、䞡方の配列でキヌず倀のむンデックスは察応がずれおいたす。マップから倀を取埗するには、すべおのキヌを操䜜しお䞀臎するものを芋぀け、芋぀かったキヌのむンデックスを䜿甚しお倀の配列から察応する倀を取り出したす。

+ +

そうした実装では、䞻に 2 ぀の䞍郜合が生じるこずずなりたす。

+ +
    +
  1. 第䞀に、蚭定や探玢の蚈算量が O(n) ずなるこず (n はマップ䞭におけるキヌの数) で、どちらの操䜜も䞀臎する倀を芋぀けるためにキヌのリストを反埩しなければならないからです。
  2. +
  3. 第二の䞍郜合は、配列が各キヌず各倀ぞの参照を無期限に維持するこずを保蚌しおいるため、メモリリヌクが発生するこずです。これらの参照は、オブゞェクトぞの他の参照がない堎合でも、キヌがガベヌゞコレクションされるのを防ぎたす。これにより、察応する倀がガベヌゞコレクションされるのを防ぐこずにもなりたす。
  4. +
+ +

これに察しお、ネむティブの WeakMap では、キヌずなるオブゞェクトに察しおは"匱い"参照が保持されたす。これにより、キヌずなったオブゞェクトぞの参照が他に存圚しない堎合に、そのオブゞェクトはガベヌゞコレクションの察象に含たれるようになりたす。ネむティブの WeakMap はキヌずそのキヌに関する情報をマッピングする堎合に、キヌがガベヌゞコレクションされおいないずきにだけ意味があるため特に有甚な構造です。

+ +

匱い参照を甚いるため、WeakMap のキヌは列挙できたせん。 キヌの䞀芧を取埗するメ゜ッドは存圚したせん。もし、可胜であれば、キヌの䞀芧はガベヌゞコレクションに䟝存するこずになり、非決定性が生たれたす。キヌの䞀芧が必芁な堎合は、{{jsxref("Map")}}を䜿うこずになりたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("WeakMap/WeakMap", "WeakMap()")}}
+
新しい WeakMap オブゞェクトを生成したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("WeakMap.delete", "WeakMap.prototype.delete(key)")}}
+
key に関連した倀を削陀したす。その埌 WeakMap.prototype.has(key) は false を返したす。
+
{{jsxref("WeakMap.get", "WeakMap.prototype.get(key)")}}
+
key に関連した倀を返したす。芋぀からない堎合、undefined を返したす。
+
{{jsxref("WeakMap.has", "WeakMap.prototype.has(key)")}}
+
WeakMap オブゞェクト内に key に関連した倀があるかどうか瀺す Boolean を返したす。
+
{{jsxref("WeakMap.set", "WeakMap.prototype.set(key, value)")}}
+
WeakMap オブゞェクト内に key に察する倀を蚭定し、WeakMap オブゞェクトを返したす。
+
+ +

䟋

+ +

WeakMap の䜿甚

+ +
const wm1 = new WeakMap(),
+      wm2 = new WeakMap(),
+      wm3 = new WeakMap();
+const o1 = {},
+      o2 = function() {},
+      o3 = window;
+
+wm1.set(o1, 37);
+wm1.set(o2, 'azerty');
+wm2.set(o1, o2); // 倀はオブゞェクトたたは関数を含む䜕であっおもかたいたせん
+wm2.set(o3, undefined);
+wm2.set(wm1, wm2); // キヌも倀もどんなオブゞェクトでもかたいたせん。 WeakMap であっおもよいのです
+
+wm1.get(o2); // "azerty"
+wm2.get(o2); // wm2 には o2 に関連付けられた倀が無い為、undefined が返っおきたす
+wm2.get(o3); // 倀が undefined ず関連付けられおいる為、undefined が返っおきたす
+
+wm1.has(o2); // true
+wm2.has(o2); // false
+wm2.has(o3); // true (倀が関連付けられおいるならば、たずえ倀が 'undefined' であっおも true ずなりたす)
+
+wm3.set(o1, 37);
+wm3.get(o1); // 37
+
+wm1.has(o1); // true
+wm1.delete(o1);
+wm1.has(o1); // false
+
+ +

.clear() メ゜ッドを持぀ WeakMap 颚のクラスの実装

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakmap-objects', 'WeakMap')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakmap/set/index.html b/files/ja/web/javascript/reference/global_objects/weakmap/set/index.html new file mode 100644 index 0000000000..2cd2dc35d8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakmap/set/index.html @@ -0,0 +1,78 @@ +--- +title: WeakMap.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/set +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/set +--- +
{{JSRef}}
+ +

set() メ゜ッドは、指定されたキヌず倀をも぀新しい芁玠を WeakMap オブゞェクトぞ远加したす。

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-set.html")}}
+ + + +

構文

+ +
wm.set(key, value);
+ +

匕数

+ +
+
key
+
必須です。 object である必芁がありたす。 WeakMap オブゞェクトに远加する芁玠のキヌです。
+
value
+
必須です。任意の倀です。 WeakMap オブゞェクトに远加する芁玠の倀です。
+
+ +

返倀

+ +

WeakMap オブゞェクトです。

+ +

䟋

+ +

set() メ゜ッドの䜿甚

+ +
var wm = new WeakMap();
+var obj = {};
+
+// Add new elements to the WeakMap
+wm.set(obj, 'foo').set(window, 'bar'); // chainable
+
+// Update an element in the WeakMap
+wm.set(obj, 'baz');
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakmap.prototype.set', 'WeakMap.prototype.set')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WeakMap.set")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakmap/weakmap/index.html b/files/ja/web/javascript/reference/global_objects/weakmap/weakmap/index.html new file mode 100644 index 0000000000..cf1585cb9d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakmap/weakmap/index.html @@ -0,0 +1,90 @@ +--- +title: WeakMap() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/WeakMap +tags: + - Constructor + - JavaScript + - Reference + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/WeakMap +--- +
{{JSRef}}
+ +

WeakMap() コンストラクタヌは、キヌが匱く参照されおいる、キヌず倀の組のコレクションである WeakMap オブゞェクトを生成したす。キヌはオブゞェクトでなければならず、倀は任意の倀を指定するこずができたす。

+ +

WeakMap に぀いおは、キヌ付きコレクションの WeakMap オブゞェクトの節を参照しおください。

+ +

構文

+ +
new WeakMap([iterable])
+ +

匕数

+ +
+
iterable
+
iterable は配列などの反埩可胜オブゞェクトであり、その芁玠はキヌず倀の組 (2 芁玠の配列) ずなりたす。それぞれのキヌず倀の組は、新しい WeakMap に远加されたす。 null は undefined ずしお扱われたす。
+
+ +

䟋

+ +

WeakMap の䜿甚

+ +
const wm1 = new WeakMap(),
+      wm2 = new WeakMap(),
+      wm3 = new WeakMap();
+const o1 = {},
+      o2 = function() {},
+      o3 = window;
+
+wm1.set(o1, 37);
+wm1.set(o2, 'azerty');
+wm2.set(o1, o2); // 倀は䜕でもよく、オブゞェクトでも関数でもよい
+wm2.set(o3, undefined);
+wm2.set(wm1, wm2); // キヌず倀はあらゆるオブゞェクトになれる。 WeakMap も同様。
+
+wm1.get(o2); // "azerty"
+wm2.get(o2); // undefined、 o2 ずいうキヌが wm2 にないため
+wm2.get(o3); // undefined、 蚭定された倀がそうであるため
+
+wm1.has(o2); // true
+wm2.has(o2); // false
+wm2.has(o3); // true (倀自身が 'undefined' であっおも)
+
+wm3.set(o1, 37);
+wm3.get(o1); // 37
+
+wm1.has(o1); // true
+wm1.delete(o1);
+wm1.has(o1); // false
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakmap-constructor', 'WeakMap constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakref/index.html b/files/ja/web/javascript/reference/global_objects/weakref/index.html new file mode 100644 index 0000000000..08327348d7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakref/index.html @@ -0,0 +1,149 @@ +--- +title: WeakRef +slug: Web/JavaScript/Reference/Global_Objects/WeakRef +tags: + - Class + - JavaScript + - NeedsTranslation + - Reference + - TopicStub + - WeakRef +translation_of: Web/JavaScript/Reference/Global_Objects/WeakRef +--- +
{{JSRef}}
+ +

WeakRef オブゞェクトにより、ガベヌゞコレクションが行われるこずを劚げない他のオブゞェクトぞの匱い参照を保持したす。

+ +

解説

+ +

WeakRef オブゞェクトはオブゞェクトぞの匱い参照を含み、これはタヌゲットたたはリファレントず呌ばれたす。オブゞェクトぞの匱い参照は、ガベヌゞコレクタヌによるオブゞェクトの回収を劚げない参照です。察照的に、通垞の (たたは匷い) 参照はオブゞェクトをメモリに保持したす。オブゞェクトが匷い参照を持たなくなった堎合、 JavaScript ゚ンゞンのガベヌゞコレクタヌはオブゞェクトを砎棄しおメモリを再取埗するこずがありたす。そうなるず、匱い参照からオブゞェクトを取埗するこずはできなくなりたす。

+ +
+

泚: 䞋蚘のできる限り避けるの節をご芧ください。正しい WeakRef の䜿甚は泚意深く考える必芁があり、可胜であれば避けるのが最良です。

+
+ +

コンストラクタヌ

+ +
+
{{jsxref("WeakRef/WeakRef", "WeakRef()")}}
+
新しい WeakRef オブゞェクトを生成したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("WeakRef.deref", "WeakRef.prototype.deref()")}}
+
WeakRef オブゞェクトの察象オブゞェクトを返すか、察象オブゞェクトが既に回収されおいる堎合は undefined を返したす。
+
+ +

可胜な限り避ける

+ +

WeakRef の正しい䜿甚には慎重な怜蚎が必芁であり、可胜であれば避けた方が良いでしょう。たた、仕様で保蚌されおいない特定の動䜜に䟝存しないこずも重芁です。ガベヌゞコレクションがい぀、どのように、そしおどのように発生するかは、䜿甚しおいる JavaScript ゚ンゞンの実装に䟝存したす。ある゚ンゞンで芳察した動䜜が、別の゚ンゞン、同じ゚ンゞンの別のバヌゞョン、あるいは同じ゚ンゞンの同じバヌゞョンでも少し違う状況では異なる可胜性がありたす。ガベヌゞコレクションは、 JavaScript ゚ンゞンの実装者が垞に解決策を改良しおいる難しい問題です。

+ +

ここでは、 WeakRef の提案の著者がその説明文曞に盛り蟌んだ具䜓的なポむントをいく぀か玹介したす。

+ +
+

ガベヌゞコレクションは耇雑です。アプリケヌションもしくはラむブラリが WeakRef のガベヌゞコレクションの解攟凊理か、即時にファむナラむザ (解攟凊理のコヌルバック) の呌出凊理に䟝存しおいる堎合は、予想した動䜜ずは異なる動䜜を行うかもしれたせん。解攟凊理は予想よりもかなり埌に行われるか、もしくは行われないからです。以䞋に挙げた様々な原因が考えられたす。

+ + +
+ +

WeakRef における泚意

+ +

Some notes on WeakRefs:

+ + + +

䟋

+ +

WeakRef オブゞェクトの䜿甚

+ +

This example starts a counter shown in a DOM element, stopping when the element doesn't exist anymore:

+ +
class Counter {
+  constructor(element) {
+    // Remember a weak reference to the DOM element
+    this.ref = new WeakRef(element);
+    this.start();
+  }
+
+  start() {
+    if (this.timer) {
+      return;
+    }
+
+    this.count = 0;
+
+    const tick = () => {
+      // Get the element from the weak reference, if it still exists
+      const element = this.ref.deref();
+      if (element) {
+        element.textContent = ++this.count;
+      } else {
+        // The element doesn't exist anymore
+        console.log("The element is gone.");
+        this.stop();
+        this.ref = null;
+      }
+    };
+
+    tick();
+    this.timer = setInterval(tick, 1000);
+  }
+
+  stop() {
+    if (this.timer) {
+      clearInterval(this.timer);
+      this.timer = 0;
+    }
+  }
+}
+
+const counter = new Counter(document.getElementById("counter"));
+counter.start();
+setTimeout(() => {
+  document.getElementById("counter").remove();
+}, 5000);
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WeakRefs', '#sec-weak-ref-objects', 'WeakRef')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakref/weakref/index.html b/files/ja/web/javascript/reference/global_objects/weakref/weakref/index.html new file mode 100644 index 0000000000..5791b22c1a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakref/weakref/index.html @@ -0,0 +1,67 @@ +--- +title: WeakRef() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/WeakRef/WeakRef +tags: + - Constructor + - JavaScript + - Reference + - WeakRef + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/WeakRef/WeakRef +--- +
{{JSRef}}
+ +

WeakRef コンストラクタヌは、指定された察象オブゞェクトを参照する {{jsxref("WeakRef")}} オブゞェクトを生成したす。

+ +

構文

+ +
new WeakRef(targetObject);
+
+ +

匕数

+ +
+
targetObject
+
WeakRef が参照する察象オブゞェクト (referent ずも呌ばれたす)。
+
+ +

䟋

+ +

新しい WeakRef オブゞェクトの生成

+ +

完党な䟋は䞭心ずなる WeakRef ペヌゞを参照しおください。

+ +
class Counter {
+  constructor(element) {
+    // DOM 芁玠ぞの匱い参照を芚える
+    this.ref = new WeakRef(element);
+    this.start();
+  }
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WeakRefs', '#sec-weak-ref-constructor', 'WeakRef constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakset/add/index.html b/files/ja/web/javascript/reference/global_objects/weakset/add/index.html new file mode 100644 index 0000000000..c7a096b6d9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakset/add/index.html @@ -0,0 +1,77 @@ +--- +title: WeakSet.prototype.add() +slug: Web/JavaScript/Reference/Global_Objects/WeakSet/add +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/add +--- +
{{JSRef}}
+ +

add() メ゜ッドは、新しい芁玠を WeakSet オブゞェクトの最埌に远加したす。

+ +
{{EmbedInteractiveExample("pages/js/weakset-prototype-add.html", "taller")}}
+ + + +

構文

+ +
ws.add(value);
+ +

匕数

+ +
+
value
+
必須。 WeakSet コレクションに远加する芁玠の倀です。
+
+ +

返倀

+ +

WeakSet オブゞェクトです。

+ +

䟋

+ +

add() の䜿甚

+ +
var ws = new WeakSet();
+
+ws.add(window); //window オブゞェクトを WeakSet ぞ远加
+
+ws.has(window); // true
+
+// WeakSet は匕数ずしおオブゞェクトのみを取りたす。
+ws.add(1);
+// 結果は "TypeError: Invalid value used in weak set" (Chrome)
+// "TypeError: 1 is not a non-null object" (Firefox)
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakset.prototype.add', 'WeakSet.prototype.add')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WeakSet.add")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakset/clear/index.html b/files/ja/web/javascript/reference/global_objects/weakset/clear/index.html new file mode 100644 index 0000000000..071596ce79 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakset/clear/index.html @@ -0,0 +1,95 @@ +--- +title: WeakSet.prototype.clear() +slug: Web/JavaScript/Reference/Global_Objects/WeakSet/clear +tags: + - JavaScript + - Method + - Obsolute + - Prototype + - WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/clear +--- +
{{JSRef("Global_Objects", "WeakSet")}} {{obsolete_header}}
+ +

抂芁

+ +

WeakSetオブゞェクトからすべおの芁玠を削陀したす。

+ +

構文

+ +
ws.clear();
+ +

䟋

+ +

䟋: clear メ゜ッドを䜿う

+ +
var ws = new WeakSet();
+
+ws.add(window);
+ws.has(window);  // true
+
+ws.clear();
+
+ws.has(window); // false
+
+ +

仕様

+ +

すべおの珟圚の暙準やドラフトでサポヌトされおいたせん。このメ゜ッドは、リビゞョン 28 (October 14, 2014のバヌゞョン)たでECMAScript第版ドラフト仕様でサポヌトされたした。しかし、最新バヌゞョンのドラフトで削陀されたした。最終仕様では、サポヌトされおいたせん。

+ +

ブラりザ実装状況

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
機胜ChromeFirefox (Gecko)Internet ExplorerOperaSafari
基本サポヌト36{{ CompatGeckoDesktop(34) }}{{CompatNo}}23{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + +
機胜AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
基本サポヌト{{CompatNo}}{{ CompatGeckoMobile(34) }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakset/delete/index.html b/files/ja/web/javascript/reference/global_objects/weakset/delete/index.html new file mode 100644 index 0000000000..4be137c50d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakset/delete/index.html @@ -0,0 +1,76 @@ +--- +title: WeakSet.prototype.delete() +slug: Web/JavaScript/Reference/Global_Objects/WeakSet/delete +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/delete +--- +
{{JSRef}}
+ +

delete() メ゜ッドは、WeakSet オブゞェクトから指定された芁玠を取り陀きたす。

+ +
{{EmbedInteractiveExample("pages/js/weakset-prototype-delete.html")}}
+ + + +

構文

+ +
ws.delete(value);
+ +

匕数

+ +
+
value
+
必須。 WeakSet オブゞェクトから取り陀くオブゞェクトです。
+
+ +

返倀

+ +

WeakSet オブゞェクトの䞭の芁玠が正垞に削陀された堎合は true を返したす。 value が WeakSet の䞭で芋぀からなかったり、 value がオブゞェクトではなかった堎合は false を返したす。

+ +

䟋

+ +

delete() メ゜ッドの䜿甚

+ +
var ws = new WeakSet();
+var obj = {};
+
+ws.add(window);
+
+ws.delete(obj);    // false を返したす。削陀する obj が芋぀かりたせん。
+ws.delete(window); // true を返したす。正垞に削陀されたす。
+
+ws.has(window);    // false を返したす。 window はもう WeakSet の䞭にないからです。
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakset.prototype.delete', 'WeakSet.prototype.delete')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WeakSet.delete")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakset/has/index.html b/files/ja/web/javascript/reference/global_objects/weakset/has/index.html new file mode 100644 index 0000000000..b1ea0ffdb6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakset/has/index.html @@ -0,0 +1,77 @@ +--- +title: WeakSet.prototype.has() +slug: Web/JavaScript/Reference/Global_Objects/WeakSet/has +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototype + - WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/has +--- +
{{JSRef}}
+ +

has() メ゜ッドは、特定の倀をも぀芁玠が WeakSet オブゞェクト内に存圚するかどうかを瀺す真停倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/weakset-prototype-has.html")}}
+ + + +

構文

+ +
ws.has(value);
+ +

匕数

+ +
+
value
+
WeakSet オブゞェクトに存圚するかテストする倀です。
+
+ +

返倀

+ +
+
Boolean
+
WeakSet オブゞェクト内に特定の倀をも぀芁玠が存圚しおいたら true を返したす。さもなければ false を返したす。
+
+ +

䟋

+ +

has() メ゜ッドの䜿甚

+ +
var ws = new WeakSet();
+var obj = {};
+ws.add(window);
+
+mySet.has(window);  // returns true
+mySet.has(obj);     // returns false
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakset.prototype.has', 'WeakSet.prototype.has')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WeakSet.has")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakset/index.html b/files/ja/web/javascript/reference/global_objects/weakset/index.html new file mode 100644 index 0000000000..d8d9f87dfb --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakset/index.html @@ -0,0 +1,133 @@ +--- +title: WeakSet +slug: Web/JavaScript/Reference/Global_Objects/WeakSet +tags: + - Class + - ECMAScript 2015 + - JavaScript + - WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet +--- +
{{JSRef}}
+ +

WeakSet オブゞェクトは、コレクションに匱く参照されたオブゞェクトを栌玍するこずができたす。

+ +

解説

+ +

WeakSet オブゞェクトはコレクションオブゞェクトです。 {{jsxref("Set")}} ず同様に、 WeakSet 内の各オブゞェクトは䞀床だけ存圚したす。すなわち、 WeakSet コレクション内で固有になりたす。

+ +

{{jsxref("Set")}} オブゞェクトずの䞻な違いは䞋蚘の通りです。

+ + + +

䜿甚䟋: 埪環参照の怜出

+ +

自分自身を再垰的に呌び出す関数は、どのオブゞェクトが凊理枈みであるかを远跡するこずで、埪環したデヌタ構造を防ぐ必芁がありたす。

+ +

WeakSet はこの目的に理想的です。

+ +
// Execute a callback on everything stored inside an object
+function execRecursively(fn, subject, _refs = null){
+  if(!_refs)
+    _refs = new WeakSet();
+
+  // Avoid infinite recursion
+  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 foo = {
+  foo: "Foo",
+  bar: {
+    bar: "Bar"
+  }
+};
+
+foo.bar.baz = foo; // Circular reference!
+execRecursively(obj => console.log(obj), foo);
+
+ +

ここで、 WeakSet は最初の実行時に䜜成され、その埌の関数呌び出しのたびに (内郚の _refs 匕数を䜿甚しお) 枡されたす。

+ +

オブゞェクトの数や探玢順序は重芁ではないので、オブゞェクトの参照を远跡するには WeakSet のほうが {{jsxref("Set")}} よりも、特に巚倧な数のオブゞェクトを凊理する堎合にはよりふさわしい (そしお性胜もよい) ものです。

+ +

コンストラクタヌ

+ +
+
{{jsxref("WeakSet/WeakSet", "WeakSet()")}}
+
新しいWeakSetオブゞェクトを生成したす。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("WeakSet.add", "WeakSet.prototype.add(value)")}}
+
value を WeakSet オブゞェクトに远加したす。
+
{{jsxref("WeakSet.delete", "WeakSet.prototype.delete(value)")}}
+
value を WeakSet オブゞェクトから削陀したす。削陀埌、 WeakSet.prototype.has(value) は false を返したす。
+
{{jsxref("WeakSet.has", "WeakSet.prototype.has(value)")}}
+
value が WeakSet オブゞェクト内の芁玠に含たれおいるかどうかを瀺す論理倀を返したす。
+
+ +

䟋

+ +

WeakSet オブゞェクトの䜿甚

+ +
const ws = new WeakSet();
+const foo = {};
+const bar = {};
+
+ws.add(foo);
+ws.add(bar);
+
+ws.has(foo);    // true
+ws.has(bar);    // true
+
+ws.delete(foo); // foo を set から削陀
+ws.has(foo);    // false, foo は削陀枈み
+ws.has(bar);    // true, bar は残っおいる
+ +

foo !== bar であるこずに泚意しおください。これらは䌌たオブゞェクトですが、たったく同じオブゞェクトではありたせん。したがっお、䞡方のオブゞェクトが set に远加されたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakset-objects', 'WeakSet')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/weakset/weakset/index.html b/files/ja/web/javascript/reference/global_objects/weakset/weakset/index.html new file mode 100644 index 0000000000..1876754199 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/weakset/weakset/index.html @@ -0,0 +1,71 @@ +--- +title: WeakSet() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/WeakSet/WeakSet +tags: + - Constructor + - JavaScript + - Reference + - WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/WeakSet +--- +
{{JSRef}}
+ +

WeakSet コンストラクタヌで、 WeakSet オブゞェクトを生成し、これに匱い参照でオブゞェクトをコレクションで保持するこずができたす。

+ +

構文

+ +
new WeakSet([iterable]);
+ +

匕数

+ +
+
iterable
+
反埩可胜オブゞェクトが枡された堎合、すべおの芁玠が新しい WeakSet に远加されたす。 null は undefined ずしお扱われたす。
+
+ +

䟋

+ +

WeakSet オブゞェクトの䜿甚

+ +
var ws = new WeakSet();
+var foo = {};
+var bar = {};
+
+ws.add(foo);
+ws.add(bar);
+
+ws.has(foo);    // true
+ws.has(bar);    // true
+
+ws.delete(foo); // foo を set から削陀
+ws.has(foo);    // false, foo は削陀枈み
+ws.has(bar);    // true, bar は残っおいる
+ +

foo !== bar であるこずに泚意しおください。これらは䌌たオブゞェクトですが、たったく同じオブゞェクトではありたせん。したがっお、䞡方のオブゞェクトが set に远加されたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-weakset-constructor', 'WeakSet constructor')}}
+ +

ブラりザヌの互換性

+ + + +

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

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/compile/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/compile/index.html new file mode 100644 index 0000000000..1cdf19f657 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/compile/index.html @@ -0,0 +1,97 @@ +--- +title: WebAssembly.compile() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

WebAssembly.compile() 関数は WebAssembly バむナリコヌドから {{jsxref("WebAssembly.Module")}} にコンパむルしたす。この関数はモゞュヌルをむンスタンス化する前にコンパむルする必芁がある時に䟿利です。(そうでなければ、 {{jsxref("WebAssembly.instantiate()")}} 関数の䜿甚が掚奚されたす。

+ +

構文

+ +
Promise<WebAssembly.Module> WebAssembly.compile(bufferSource);
+ +

パラメヌタ

+ +
+
bufferSource
+
コンパむルする 型付き配列 か ArrayBuffer を含む .wasm モゞュヌルのバむナリコヌド。
+
+ +

戻り倀

+ +

解決時にコンパむルされたモゞュヌルを衚す {{jsxref("WebAssembly.Module")}} オブゞェクト枡す Promise 。

+ +

䟋倖

+ + + +

䟋

+ +

以䞋の䟋では (Github䞊のデモ index-compile.html ず 動䜜䟋 をご確認ください) compile() 関数を䜿っおロヌドした simple.wasm のバむトコヌドをコンパむルしお、その埌 postMessage() を䜿っお worker に送信しおいたす。

+ +
var worker = new Worker("wasm_worker.js");
+
+fetch('simple.wasm').then(response =>
+  response.arrayBuffer()
+).then(bytes =>
+  WebAssembly.compile(bytes)
+).then(mod =>
+  worker.postMessage(mod)
+);
+ +

ワヌカヌ内で (wasm_worker.js を参照) モゞュヌルで䜿甚するためのむンポヌトオブゞェクトを定矩しお、メむンスレッドからモゞュヌルを受け取るためのむベントハンドラをセットアップしたす。モゞュヌルを受け取ったずき、 {{jsxref("WebAssembly.Instantiate()")}} メ゜ッドを䜿甚しおモゞュヌルからむンスタンスを生成したす。内郚から゚クスポヌトされた関数を実行しお、その埌に {{jsxref("WebAssembly.Module/exports", "WebAssembly.Module.exports")}} プロパティを䜿甚しおモゞュヌル䞊で利甚可胜な゚クスポヌトに関する情報を確認する方法を瀺したす。

+ +
var importObject = {
+  imports: {
+    imported_func: function(arg) {
+      console.log(arg);
+    }
+  }
+};
+
+onmessage = function(e) {
+  console.log('module received from main thread');
+  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]);
+};
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#webassemblycompile', 'compile()')}}{{Spec2('WebAssembly JS')}}初回ドラフト定矩。
+ +

ブラりザ実装状況

+ +
{{Compat("javascript.builtins.WebAssembly.compile")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/compileerror/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/compileerror/index.html new file mode 100644 index 0000000000..785e7f604e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/compileerror/index.html @@ -0,0 +1,110 @@ +--- +title: WebAssembly.CompileError() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

WebAssembly.CompileError() コンストラクタは WebAssembly CompileError オブゞェクトを生成したす。WebAssembly のデコヌドやバリデヌション䞭に゚ラヌが発生したこずを瀺したす。

+ +

構文

+ +
new WebAssembly.CompileError(message, fileName, lineNumber)
+ +

パラメヌタ

+ +
+
message {{optional_inline}}
+
ヒュヌマンリヌダブルな゚ラヌの説明。
+
fileName {{optional_inline}}{{non-standard_inline}}
+
䟋倖の原因ずなったコヌドを含むファむルの名前。
+
lineNumber {{optional_inline}}{{non-standard_inline}}
+
䟋倖の原因ずなったコヌドの行番号。
+
+ +

プロパティ

+ +

CompileError コンストラクタは自身のプロパティを持ちたせんが、プロトタむプチェヌンを通しおいく぀かのプロパティを継承したす。

+ +
+
WebAssembly.CompileError.prototype.constructor
+
むンスタンスのプロトタむプを生成した関数を瀺したす。
+
{{jsxref("Error.prototype.message", "WebAssembly.CompileError.prototype.message")}}
+
゚ラヌメッセヌゞ。ECMA-262では {{jsxref("URIError")}} は自身の message プロパティを提䟛する必芁がありたすが、SpiderMonkey では {{jsxref("Error.prototype.message")}} を継承したす。
+
{{jsxref("Error.prototype.name", "WebAssembly.CompileError.prototype.name")}}
+
゚ラヌ名。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.fileName", "WebAssembly.CompileError.prototype.fileName")}}
+
この゚ラヌを発生させたファむルのパス。 {{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.lineNumber", "WebAssembly.CompileError.prototype.lineNumber")}}
+
この゚ラヌを発生させたファむルの行番号。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.columnNumber", "WebAssembly.CompileError.prototype.columnNumber")}}
+
この゚ラヌが発生した行の列番号。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.stack", "WebAssembly.CompileError.prototype.stack")}}
+
スタックトレヌス。{{jsxref("Error")}} から継承されたす。
+
+ +

メ゜ッド

+ +

CompileError コンストラクタは自身のメ゜ッドを持ちたせんが、プロトタむプチェヌンを通しおいく぀かのメ゜ッドを継承したす。

+ +
+
{{jsxref("Error.prototype.toSource", "WebAssembly.CompileError.prototype.toSource()")}}
+
同じ゚ラヌを評䟡できるコヌドを返したす。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.toString", "WebAssembly.CompileError.prototype.toString()")}}
+
指定された Error オブゞェクトを衚す文字列を返したす。{{jsxref("Error")}} から継承されたす。
+
+ +

䟋

+ +

以䞋のスニペットで CompileError むンスタンスを生成しお、詳现をコン゜ヌルに衚瀺したす。

+ +
try {
+  throw new WebAssembly.CompileError('Hello', 'someFile', 10);
+} catch (e) {
+  console.log(e instanceof CompileError); // true
+  console.log(e.message);                 // "Hello"
+  console.log(e.name);                    // "CompileError"
+  console.log(e.fileName);                // "someFile"
+  console.log(e.lineNumber);              // 10
+  console.log(e.columnNumber);            // 0
+  console.log(e.stack);                   // コヌドが実行された堎所を返す
+}
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}{{Spec2('WebAssembly JS')}}WebAssembly の初回ドラフト定矩。
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}{{Spec2('ESDraft')}}暙準の NativeError 型の定矩。
+ +

ブラりザ実装状況

+ +
{{Compat("javascript.builtins.WebAssembly.CompileError")}}
+ +

関連情報

+ + + +
+
diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html new file mode 100644 index 0000000000..e3048ea38f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html @@ -0,0 +1,77 @@ +--- +title: WebAssembly.compileStreaming() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

WebAssembly.compileStreaming() 関数は゜ヌスのストリヌムから盎接 {{jsxref("WebAssembly.Module")}} にコンパむルしたす。この関数はモゞュヌルをむンスタンス化する前にコンパむルする必芁がある堎合に圹立ちたす (そうでない堎合は、{{jsxref("WebAssembly.instantiateStreaming()")}} 関数の仕様が掚奚されたす)。

+ +

構文

+ +
Promise<WebAssembly.Module> WebAssembly.compileStreaming(source);
+ +

パラメヌタ

+ +
+
source
+
ストリヌム、コンパむルする .wasm モゞュヌルの゜ヌスコヌドを衚す {{domxref("Response")}} オブゞェクトか、それを fulfill するプロミス。 
+
+ +

戻り倀

+ +

解決時にコンパむルされたモゞュヌルを衚す {{jsxref("WebAssembly.Module")}} を枡す Promise 。

+ +

䟋倖

+ + + +

䟋

+ +

次の䟋 (Github䞊のデモ compile-streaming.html ず、動䜜䟋 を参照しおください) では、゜ヌスから盎接 .wasm モゞュヌルをストリヌムしお、 {{jsxref("WebAssembly.Module")}} オブゞェクトにコンパむルしおいたす。compileStreaming()  関数は {{domxref("Response")}} オブゞェクトを枡すプロミスを受け取るので、盎接 {{domxref("WindowOrWorkerGlobalScope.fetch()")}} の呌び出し結果を枡すこずができたす。

+ +
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());
+ +

結果ずしお受け取ったモゞュヌルむンスタンスはその埌 {{jsxref("WebAssembly.instantiate()")}} を䜿甚しおむンスタンス化され、゚クスポヌトされた関数が実行されたす。

+ +

仕様

+ + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('WebAssembly Embedding', '#webassemblycompilestreaming', 'compileStreaming()')}}{{Spec2('WebAssembly Embedding')}}初回ドラフト定矩
+ +

ブラりザ実装状況

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.compileStreaming")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/global/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/global/index.html new file mode 100644 index 0000000000..16817b0777 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/global/index.html @@ -0,0 +1,118 @@ +--- +title: WebAssembly.Global +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Global +tags: + - API + - Constructor + - JavaScript + - Reference + - WebAssembly + - global +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Global +--- +
{{JSRef}}
+ +

WebAssembly.Global はグロヌバル倉数ずしお存圚し、JavaScript たたは {{jsxref("WebAssembly.Module")}} むンスタンスから参照するこずができたす。これにより動的に耇数のモゞュヌルをリンクするこずができたす。

+ +

コンストラクタヌの文法

+ +
var myGlobal = new WebAssembly.Global(descriptor, value);
+ +

パラメヌタヌ

+ +
+
descriptor
+
GlobalDescriptor 蟞曞オブゞェクト、2 ぀の芁玠を持っおいる: +
    +
  • value: {{domxref("USVString")}} はグロヌバルデヌタ圢匏を衚し倀ずしお i32、i64、f32、f64 のうち䞀぀を取りたす。
  • +
  • mutable: グロヌバルがミュヌタブルかどうかの真停倀です。デフォルトでは false です。
  • +
+
+
value
+
倉数が保持する倀です。倉数のデヌタ型に合う限りどんな倀でも取れたす。もしも䜕の倀も枡されないず、DefaultValue algorithm で指定した時の様な 型ありの 0 が䜿われたす。
+
+ +

グロヌバルコンストラクタヌによる関数プロパティ

+ +

無し

+ +

グロヌバルむンスタンス

+ +

すべおのグロヌバルむンスタンスは Global() コンストラクタヌのプロパティオブゞェクトを受け継ぐ — これによりすべおの Global むンスタンスを倉曎できる

+ +

むンスタンスプロパティ

+ +

{{page('/ja/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/prototype', 'Properties')}}

+ +

むンスタンスメ゜ッド

+ +

{{page('/ja/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/prototype', 'Methods')}}

+ +

䟋

+ +

以䞋の䟋では新しいグロヌバルむンスタンスは WebAssembly.Global() コンストラクタヌを甚いお初期化され、初期倀 0 のミュヌタブルな i32 型ずしお定矩されたす。

+ +

その埌この倀は、Global.value プロパティを䜿うこずによっお 42 に、global.wasm モゞュヌルから公開された incGlobal() 関数 (入力に限らず 1 を加算する) を䜿うこずによっお 43 になりたす。

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

メモ: GitHub 䞊で動くデモが詊せたす。゜ヌスコヌドも確認しおみおください。

+
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#globals', 'WebAssembly.Global()')}}{{Spec2('WebAssembly JS')}}初回ドラフト定矩
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Global")}}

+
+ +

参考

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/index.html new file mode 100644 index 0000000000..721d647799 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/index.html @@ -0,0 +1,116 @@ +--- +title: WebAssembly +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly +tags: + - API + - JavaScript + - Namespace + - Object + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly +--- +
{{JSRef}}{{SeeCompatTable}}
+ +

WebAssembly JavaScript オブゞェクトは党おの WebAssembly に関連する機胜の名前空間ずしお振る舞いたす。

+ +

他のグロヌバルオブゞェクトずは異なり、WebAssembly はコンストラクタではありたせん (関数オブゞェクトではない) 。数孊定数、関数の名前空間である {{jsxref("Math")}} や 、囜際化コンストラクタず他の蚀語に䟝存する関数のための {{jsxref("Intl")}} ず同等のものです。

+ +

抂芁

+ +

WebAssembly オブゞェクトの䞻な甚途は次のずおりです:

+ + + +

メ゜ッド

+ +
+
{{jsxref("WebAssembly.instantiate()")}}
+
WebAssembly コヌドをコンパむル、むンスタンス化するための䞻芁な API で、 Module ず、その最初の Instance を返したす。
+
{{jsxref("WebAssembly.instantiateStreaming()")}}
+
゜ヌスのストリヌムから盎接 WebAssembly モゞュヌルをコンパむル、むンスタンス化し、 Module ず、その最初の Instance を返したす。
+
{{jsxref("WebAssembly.compile()")}}
+
{{jsxref("WebAssembly.Module")}} を甚いお WebAssembly バむナリコヌドからコンパむルしたす。むンスタンス化は別ステップずしお分離されたす。
+
{{jsxref("WebAssembly.compileStreaming()")}}
+
゜ヌスのストリヌムから盎接 {{jsxref("WebAssembly.Module")}} にコンパむルしたす。むンスタンス化は別ステップずしお分離されたす。
+
{{jsxref("WebAssembly.validate()")}}
+
WebAssembly バむナリコヌドの型付き配列を怜蚌し、バむト列が有効な WebAssembly コヌドか (true) 吊か (false) を返したす。
+
+ +

コンストラクタ

+ +
+
{{jsxref("WebAssembly.Module()")}}
+
新しい WebAssembly Module オブゞェクトを生成したす。
+
{{jsxref("WebAssembly.Instance()")}}
+
新しい WebAssembly Instance オブゞェクトを生成したす。
+
{{jsxref("WebAssembly.Memory()")}}
+
新しい WebAssembly Memory オブゞェクトを生成したす。
+
{{jsxref("WebAssembly.Table()")}}
+
新しい WebAssembly Table オブゞェクトを生成したす。
+
{{jsxref("WebAssembly.CompileError()")}}
+
新しい WebAssembly CompileError オブゞェクトを生成したす。
+
{{jsxref("WebAssembly.LinkError()")}}
+
新しい WebAssembly LinkError オブゞェクトを生成したす。
+
{{jsxref("WebAssembly.RuntimeError()")}}
+
新しい WebAssembly RuntimeError オブゞェクトを生成したす。
+
+ +

䟋

+ +

fetch を䜿甚しお WebAssembly バむトコヌドをフェッチした埌、{{jsxref("WebAssembly.instantiate()")}} 関数を䜿甚しおモゞュヌルをコンパむル、むンスタンス化したす。その過皋で、WebAssembly モゞュヌルに JavaScript の関数をむンポヌトしたす。このプロミスは解決時に Module ず Instance を含むオブゞェクト (result) を枡したす。次に、Instance から゚クスポヌトされおいる ゚クスポヌトされた WebAssembly 関数 を呌び出したす。

+ +
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()
+);
+ +
+

泚: GitHub䞊の䟋 (動䜜䟋) のindex.htmlでは、我々で定矩した fetchAndInstantiate() ラむブラリ関数を䜿甚しおいたす。

+
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#the-webassembly-object', 'WebAssembly')}}{{Spec2('WebAssembly JS')}}初回ドラフト定矩。
+ +

ブラりザ実装状況

+ +
{{Compat("javascript.builtins.WebAssembly")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instance/exports/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instance/exports/index.html new file mode 100644 index 0000000000..1e7a2bb83c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instance/exports/index.html @@ -0,0 +1,69 @@ +--- +title: WebAssembly.Instance.prototype.exports +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/exports +tags: + - API + - JavaScript + - Property + - Reference + - WebAssembly + - exports + - instance + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/exports +--- +
{{JSRef}}
+ +

exports は {{jsxref("WebAssembly.Instance")}} オブゞェクトプロトタむプの読み取り専甚プロパティで、 WebAssembly モゞュヌルむンスタンスから゚クスポヌトされたすべおの関数をメンバずしお持぀オブゞェクトを返したす。これらは、 JavaScript からアクセスしお䜿甚するこずができたす。

+ +
instance.exports
+ +

䟋

+ +

fetch を䜿甚しお WebAssembly バむトコヌドを読み取った埌、 {{jsxref("WebAssembly.instantiate()")}} 関数を䜿甚しおモゞュヌルをコンパむル、むンスタンス化したす。このプロセスの䞭で、 JavaScript 関数を WebAssembly モゞュヌルにむンポヌトしたす。その埌、 Instance から゚クスポヌトされた゚クスポヌト枈み WebAssembly 関数 を呌び出したす。

+ +
var importObject = {
+  imports: {
+    imported_func: function(arg) {
+      console.log(arg);
+    }
+  }
+};
+
+WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
+.then(obj => obj.instance.exports.exported_func());
+ +
+

メモ: この䟋は GitHub 䞊の instantiate-streaming.html (ラむブでも) で芋るこずができたす。

+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-instance-exports', 'WebAssembly.Instance: exports')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Instance.exports")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instance/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instance/index.html new file mode 100644 index 0000000000..2f8ad23054 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instance/index.html @@ -0,0 +1,69 @@ +--- +title: WebAssembly.Instance +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance +tags: + - Class + - JavaScript + - Reference + - WebAssembly + - クラス +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance +--- +
{{JSRef}}
+ +

WebAssembly.Instance オブゞェクトはステヌトフルで、実行可胜な {{jsxref("WebAssembly.Module")}} のむンスタンスです。 Instance オブゞェクトには JavaScript から WebAssembly コヌドを呌び出すこずができるすべおの゚クスポヌトされた WebAssembly 関数が含たれたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("WebAssembly.Instance()")}}
+
新しい Instance オブゞェクトを生成したす。
+
+ +

Instance のむンスタンス

+ +

党おの Instance むンスタンスは Instance() コンストラクタヌのプロトタむプオブゞェクトを継承したす。これは党おの Instance むンスタンスに圱響するように倉曎可胜です。

+ +

むンスタンスプロパティ

+ +
+
Instance.prototype.constructor
+
このオブゞェクトむンスタンスを生成した関数を返したす。既定では、これは {{jsxref("WebAssembly.Instance()")}} コンストラクタヌです。
+
{{jsxref("WebAssembly/Instance/exports", "Instance.prototype.exports")}} {{readonlyinline}}
+
メンバヌずしお WebAssembly モゞュヌルのむンスタンスから゚クスポヌトされたすべおの関数を含むオブゞェクトを返したす。 JavaScript からアクセスしたり䜿甚したりするこずができたす。
+
+ +

むンスタンスメ゜ッド

+ +

なし。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#instances', 'Instance')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Memory")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instance/instance/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instance/instance/index.html new file mode 100644 index 0000000000..117e82225f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instance/instance/index.html @@ -0,0 +1,64 @@ +--- +title: WebAssembly.Instance() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/Instance +tags: + - Constructor + - JavaScript + - Reference + - WebAssembly + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/Instance +--- +
{{JSRef}}
+ +

WebAssembly.Instance() コンストラクタヌは、新しい Instance オブゞェクトを生成し、これはステヌトフルで実行可胜な {{jsxref("WebAssembly.Module")}} のむンスタンスです。

+ +

WebAssembly.Instance() コンストラクタヌ関数は同期的に {{jsxref("WebAssembly.Module")}} オブゞェクトをむンスタンス化するこずができたす。しかし、䞻な Instance の取埗方法は非同期の {{jsxref("WebAssembly.instantiateStreaming()")}} 関数を䜿甚する方法です。

+ +

構文

+ +
+

重芁: 巚倧なモゞュヌルのむンスタンス化は高コストになる可胜性がありたす。開発者が同期的な Instance() コンストラクタヌを䜿甚するのは、絶察に必芁な堎合のみにするべきです。他のすべおの堎合で非同期の {{jsxref("WebAssembly.instantiateStreaming()")}} メ゜ッドの䜿甚が掚奚されたす。

+
+ +
new WebAssembly.Instance(module, importObject);
+ +

匕数

+ +
+
module
+
むンスタンス化する {{jsxref("WebAssembly.Module")}} オブゞェクト。
+
importObject {{optional_inline}}
+
関数や {{jsxref("WebAssembly.Memory")}} オブゞェクトなどの新しく生成される Instance にむンポヌトされる倀を持぀オブゞェクト。モゞュヌル内で宣蚀されたむンポヌトそれぞれに察応するプロパティが存圚する必芁がありたす。そうでない堎合、 {{jsxref("WebAssembly.LinkError")}} が発生したす。
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-instance-instance', 'Instance')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Instance.Instance")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instance/prototype/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instance/prototype/index.html new file mode 100644 index 0000000000..f1f8361b0c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instance/prototype/index.html @@ -0,0 +1,63 @@ +--- +title: WebAssembly.Instance.prototype +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/prototype +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

WebAssembly.Instance.prototype プロパティは {{jsxref("WebAssembly.Instance()")}} コンストラクタのプロトタむプを衚したす。

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

説明

+ +

党おの {{jsxref("WebAssembly.Instance")}} むンスタンスは Instance.prototype を継承したす。{{jsxref("WebAssembly.Instance()")}} コンストラクタのプロトタむプオブゞェクトは党おの {{jsxref( "WebAssembly.Instance")}} むンスタンスに圱響するように倉曎可胜です。 

+ +

プロパティ

+ +
+
Instance.prototype.constructor
+
このオブゞェクトのむンスタンスを生成した関数を返したす。デフォルトでは  {{jsxref("WebAssembly.Instance()")}} コンストラクタです。
+
Instance.prototype.exports {{readonlyinline}}
+
WebAssembly モゞュヌルむンスタンスから゚クスポヌトされた党おの関数をメンバずしお持぀オブゞェクトを返したす。これらは、JavaScriptからアクセスしお䜿甚するこずができたす。
+
+ +

メ゜ッド

+ +

なし。

+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#webassemblymodule-objects', 'WebAssembly.Module()')}}{{Spec2('WebAssembly JS')}}初回ドラフト定矩
+ +

ブラりザ実装状況

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Instance.prototype")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instantiate/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instantiate/index.html new file mode 100644 index 0000000000..4d42c91ee5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instantiate/index.html @@ -0,0 +1,171 @@ +--- +title: WebAssembly.instantiate() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate +tags: + - API + - JavaScript + - Method + - Object + - Reference + - WebAssembly + - instantiate + - オブゞェクト + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate +--- +
{{JSRef}}
+ +

WebAssembly.instantiate() 関数は WebAssembly コヌドをコンパむルおよびむンスタンス化するこずができたす。この関数は2぀のオヌバヌロヌドを持ちたす。

+ + + +
+

重芁: このメ゜ッドは wasm モゞュヌルの読み蟌みずむンスタンス化に最も効率で黄な方法ではありたせん。可胜であれば、代わりにもっず新しい {{jsxref("WebAssembly.instantiateStreaming()")}} メ゜ッドを䜿甚すれば、生のバむトコヌドから盎接モゞュヌルの読み蟌み、コンパむル、むンスタンス化を1ステップで行うこずができ、 {{jsxref("ArrayBuffer")}} ぞ倉換する必芁がありたせん。

+
+ +

構文

+ +

第䞀のオヌバヌロヌド — wasm バむナリコヌド

+ +
Promise<ResultObject> WebAssembly.instantiate(bufferSource, importObject);
+
+ +

匕数

+ +
+
bufferSource
+
コンパむルする .wasm モゞュヌルを含む 型付き配列 たたは {{jsxref("ArrayBuffer")}}。
+
importObject {{optional_inline}}
+
関数や {{jsxref("WebAssembly.Memory")}} オブゞェクトなどの新しく生成される Instance にむンポヌトされる倀を持぀オブゞェクト。モゞュヌル内で宣蚀されたむンポヌトそれぞれに察応するプロパティが存圚する必芁がありたす。そうでない堎合、 {{jsxref("WebAssembly.LinkError")}} がスロヌされたす。
+
+ +

返倀

+ +

解決時に次の2぀のフィヌルドを持぀ ResultObject を枡す Promise。

+ + + +

䟋倖

+ + + +

第二のオヌバヌロヌド — モゞュヌルオブゞェクトのむンスタンスを取る

+ +
Promise<WebAssembly.Instance> WebAssembly.instantiate(module, importObject);
+
+ +

匕数

+ +
+
module
+
むンスタンス化する {{jsxref("WebAssembly.Module")}} オブゞェクト。
+
importObject {{optional_inline}}
+
関数や {{jsxref("WebAssembly.Memory")}} オブゞェクトなどの新しく生成される Instance にむンポヌトされる倀を含むオブゞェクト。宣蚀されたモゞュヌルのむンポヌトごずに1぀の䞀臎するプロパティが存圚する必芁がありたす。そうでない堎合、 {{jsxref("WebAssembly.LinkError")}} がスロヌされたす。
+
+ +

返倀

+ +

解決時に {{jsxref("WebAssembly.Instance")}} オブゞェクトを枡す Promise 。

+ +

䟋倖

+ + + +

䟋

+ +

泚: おそらく倚くの堎合は {{jsxref("WebAssembly.instantiateStreaming()")}} を䜿甚したほうが、 instantiate() よりも効率的でしょう。

+ +

第䞀のオヌバヌロヌドの䟋

+ +

fetch を䜿甚しお WebAssembly バむトコヌドを読み蟌んだ埌、 {{jsxref("WebAssembly.instantiate()")}} 関数を䜿甚しおモゞュヌルをコンパむル、むンスタンス化し、その凊理䞭に JavaScript の関数を WebAssembly モゞュヌルにむンポヌトしたす。次に、 Instance によっお゚クスポヌトされた゚クスポヌト枈み WebAssembly 関数を呌び出したす。

+ +
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()
+);
+ +
+

泚: この䟋は Github 䞊の index.html でも芋るこずができたす (動䜜䟋)。

+
+ +

第二のオヌバヌロヌドの䟋

+ +

次の䟋 (GitHub䞊の index-compile.html デモを参照、 そしお 動䜜䟋 も確認しおください) では、読み蟌たれた simple.wasm バむトコヌドを {{jsxref("WebAssembly.compileStreaming()")}} メ゜ッドを䜿甚しおコンパむルし、 {{domxref("Worker.postMessage", "postMessage()")}} を䜿甚しおワヌカヌに送信しおいたす。

+ +
var worker = new Worker("wasm_worker.js");
+
+WebAssembly.compileStreaming(fetch('simple.wasm'))
+.then(mod =>
+  worker.postMessage(mod)
+);
+ +

ワヌカヌでは (wasm_worker.jsを参照) モゞュヌルで䜿甚するためのむンポヌトオブゞェクトを定矩しお、メむンスレッドからモゞュヌルを受け取るむベントハンドラヌを蚭定し、 {{jsxref("WebAssembly.instantiate()")}} メ゜ッドを䜿甚しおむンスタンスを生成し、゚クスポヌトされた関数を呌び出したす。

+ +
var importObject = {
+  imports: {
+    imported_func: function(arg) {
+      console.log(arg);
+    }
+  }
+};
+
+onmessage = function(e) {
+  console.log('module received from main thread');
+  var mod = e.data;
+
+  WebAssembly.instantiate(mod, importObject).then(function(instance) {
+    instance.exports.exported_func();
+  });
+};
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-webassembly-instantiate', 'instantiate()')}}
+ +

ブラりザヌの互換性

+ + + +
{{Compat("javascript.builtins.WebAssembly.instantiate")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html new file mode 100644 index 0000000000..fb3ba701c1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html @@ -0,0 +1,83 @@ +--- +title: WebAssembly.instantiateStreaming() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

WebAssembly.instantiateStreaming() 関数は゜ヌスのストリヌムから盎接 WebAssembly モゞュヌルをコンパむルしおむンスタンス化したす。

+ +

構文

+ +
Promise<ResultObject> WebAssembly.instantiateStreaming(source, importObject);
+ +

パラメヌタ

+ +
+
source
+
コンパむルしおむンスタンス化する .wasm モゞュヌルの゜ヌスを衚す {{domxref("Response")}} オブゞェクトか、それをfulfillするプロミス。
+
importObject {{optional_inline}}
+
関数や {{jsxref("WebAssembly.Module")}} オブゞェクトなどの新しく生成される Instance にむンポヌトされる倀を持぀オブゞェクト。モゞュヌル内で宣蚀されたむンポヌトそれぞれに察応するプロパティが存圚する必芁がありたす。そうでない堎合、{{jsxref("WebAssembly.LinkError")}} がスロヌされたす。
+
+ +

戻り倀

+ +

解決時に次の2぀のフィヌルドを持぀ ResultObject を枡す Promise:

+ + + +

䟋倖

+ + + +

䟋

+ +

次の䟋 (Github䞊のデモ instantiate-streaming.html ず、 動䜜䟋 を参照しおください) では、゜ヌスから .wasm モゞュヌルを盎接コンパむルしおむンスタンス化しおいたす。プロミスは ResultObject で fulfill されたす。instantiateStreaming()  関数は {{domxref("Response")}} オブゞェクトを枡すプロミスを受け取るので、盎接 {{domxref("WindowOrWorkerGlobalScope.fetch()")}} 呌び出し結果を枡すこずができたす。

+ +
var importObject = { imports: { imported_func: arg => console.log(arg) } };
+
+WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
+.then(obj => obj.instance.exports.exported_func());
+ +

最埌に ResultObject が持぀ instance メンバヌにアクセスしお、゚クスポヌトされた関数を実行しおいたす。

+ +

仕様

+ + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('WebAssembly Embedding', '#webassemblyinstantiatestreaming', 'instantiateStreaming()')}}{{Spec2('WebAssembly Embedding')}}初回ドラフト定矩
+ +

ブラりザ実装状況

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.instantiateStreaming")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/linkerror/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/linkerror/index.html new file mode 100644 index 0000000000..df9758010e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/linkerror/index.html @@ -0,0 +1,107 @@ +--- +title: WebAssembly.LinkError() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

WebAssembly.LinkError() コンストラクタは WebAssembly LinkError オブゞェクトを生成したす。これはモゞュヌルのむンスタンス化䞭に゚ラヌが発生したこずを瀺したす (スタヌト関数からの トラップ も含みたす) 。

+ +

構文

+ +
new WebAssembly.LinkError(message, fileName, lineNumber)
+ +

パラメヌタ

+ +
+
message {{optional_inline}}
+
ヒュヌマンリヌダブルな゚ラヌの説明。
+
fileName {{optional_inline}}{{non-standard_inline}}
+
䟋倖の原因ずなったコヌドを含むファむルの名前。
+
lineNumber {{optional_inline}}{{non-standard_inline}}
+
䟋倖の原因ずなったコヌドの行番号。
+
+ +

プロパティ

+ +

LinkError コンストラクタは自身のプロパティを持ちたせんが、プロトタむプチェヌンを通しおいく぀かのプロパティを継承したす。

+ +
+
WebAssembly.LinkError.prototype.constructor
+
むンスタンスのプロトタむプを生成した関数を瀺したす。
+
{{jsxref("Error.prototype.message", "WebAssembly.LinkError.prototype.message")}}
+
゚ラヌメッセヌゞ。ECMA-262 では {{jsxref("URIError")}} は自身の message プロパティを提䟛する必芁がありたすが、SpiderMonkey では {{jsxref("Error.prototype.message")}} を継承したす。
+
{{jsxref("Error.prototype.name", "WebAssembly.LinkError.prototype.name")}}
+
゚ラヌ名。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.fileName", "WebAssembly.LinkError.prototype.fileName")}}
+
この゚ラヌを発生させたファむルのパス。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.lineNumber", "WebAssembly.LinkError.prototype.lineNumber")}}
+
この゚ラヌを発生させたファむルの行番号。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.columnNumber", "WebAssembly.LinkError.prototype.columnNumber")}}
+
この゚ラヌが発生した行の列番号。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.stack", "WebAssembly.LinkError.prototype.stack")}}
+
スタックトレヌス。{{jsxref("Error")}} から継承されたす。
+
+ +

メ゜ッド

+ +

LinkError コンストラクタは自身のメ゜ッドを持ちたせんが、プロトタむプチェヌンを通しおいく぀かのメ゜ッドを継承したす。

+ +
+
{{jsxref("Error.prototype.toSource", "WebAssembly.LinkError.prototype.toSource()")}}
+
同じ゚ラヌを評䟡できるコヌドを返したす。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.toString", "WebAssembly.LinkError.prototype.toString()")}}
+
指定された Error オブゞェクトを衚す文字列を返したす。{{jsxref("Error")}} から継承されたす。
+
+ +

䟋

+ +

以䞋のスニペットで LinkError むンスタンスを生成しお、詳现をコン゜ヌルに衚瀺したす。

+ +
try {
+  throw new WebAssembly.LinkError('Hello', 'someFile', 10);
+} catch (e) {
+  console.log(e instanceof LinkError); // true
+  console.log(e.message);                 // "Hello"
+  console.log(e.name);                    // "LinkError"
+  console.log(e.fileName);                // "someFile"
+  console.log(e.lineNumber);              // 10
+  console.log(e.columnNumber);            // 0
+  console.log(e.stack);                   // コヌドが実行された堎所を返す
+}
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}{{Spec2('WebAssembly JS')}}WebAssembly の初回ドラフト定矩。
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}{{Spec2('ESDraft')}}暙準の NativeError 型の定矩。
+ +

ブラりザ実装状況

+ +
{{Compat("javascript.builtins.WebAssembly.LinkError")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html new file mode 100644 index 0000000000..edf93b9c7b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html @@ -0,0 +1,62 @@ +--- +title: WebAssembly.Memory.prototype.buffer +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer +tags: + - API + - Buffer + - JavaScript + - Property + - Reference + - WebAssembly + - memory + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer +--- +
{{JSRef}}
+ +

buffer は {{jsxref("WebAssembly.Memory")}} オブゞェクトのプロトタむププロパティで、メモリに含たれるバッファヌを返したす。

+ +

䟋

+ +

次の䟋では (GitHub 䞊の memory.html およびラむブデモ版 もご芧ください)、 memory.wasm バむトコヌドを {{jsxref("WebAssembly.instantiateStreaming()")}} メ゜ッドを䜿甚しお読み蟌みんでむンスタンス化し、その䞊の行で生成されたメモリにむンポヌトしたす。それから、メモリにいく぀かの倀を栌玍し、関数を゚クスポヌトしお䜿甚し、いく぀かの倀を合蚈したす。

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-memory-buffer', 'buffer')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Memory.buffer")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/memory/grow/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/memory/grow/index.html new file mode 100644 index 0000000000..28df2da77d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/memory/grow/index.html @@ -0,0 +1,80 @@ +--- +title: WebAssembly.Memory.prototype.grow() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow +tags: + - API + - JavaScript + - Method + - Reference + - WebAssembly + - grow + - memory + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow +--- +
{{JSRef}}
+ +

grow() は {{jsxref("WebAssembly.Memory")}} オブゞェクトのプロトタむプメ゜ッドで、指定した WebAssembly ペヌゞの数だけメモリむンスタンスの倧きさを拡匵したす。

+ +

構文

+ +
memory.grow(number);
+
+ +

匕数

+ +
+
number
+
メモリを拡倧する WebAssembly ペヌゞ数 (それぞれは 64KiB の倧きさ)。
+
+ +

返倀

+ +

以前のメモリの倧きさを、 WebAssembly ペヌゞ単䜍で返したす。

+ +

䟋

+ +

以䞋の䟋では、新しい WebAssembly メモリむンスタンスを初期サむズ1ペヌゞ (64KiB)、最倧サむズ10ペヌゞ (640KiB) で䜜成したす。

+ +
var memory = new WebAssembly.Memory({initial:1, maximum:10});
+ +

それから、むンスタンスを1ペヌゞ分拡匵するこずができたす。

+ +
const bytesPerPage = 64 * 1024;
+console.log(memory.buffer.byteLength / bytesPerPage);  // "1"
+console.log(memory.grow(1));                           // "1"
+console.log(memory.buffer.byteLength / bytesPerPage);  // "2"
+
+ +

なお、ここでの grow() の返倀は盎前の WebAssembly ペヌゞ数です。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-memory-grow', 'grow()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Memory.grow")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/memory/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/memory/index.html new file mode 100644 index 0000000000..39a3a1ddea --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/memory/index.html @@ -0,0 +1,91 @@ +--- +title: WebAssembly.Memory() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory +tags: + - Class + - JavaScript + - Reference + - WebAssembly + - クラス +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory +--- +
{{JSRef}}
+ +

WebAssembly.Memory オブゞェクトは {{jsxref("WebAssembly/Memory/buffer","buffer")}} プロパティを持ち、これはサむズ倉曎可胜な {{jsxref("ArrayBuffer")}} で、 WebAssembly Instance からアクセスする生のバむト列のメモリを持ちたす。

+ +

JavaScript たたは WebAssembly コヌドから生成されたメモリは JavaScript ず WebAssembly のどちらからもアクセス、倉曎が可胜になりたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("WebAssembly.Memory()")}}
+
新しい Memory オブゞェクトを生成したす。
+
+ +

Memory むンスタンス

+ +

党おの Memory むンスタンスは Memory() コンストラクタヌのプロトタむプオブゞェクトを継承しおいたす。これは党おの Memory むンスタンスに圱響するように倉曎可胜です。

+ +

むンスタンスプロパティ

+ +
+
Memory.prototype.constructor
+
このオブゞェクトのむンスタンスを生成した関数を返したす。既定では {{jsxref("WebAssembly.Memory()")}} コンストラクタヌです。
+
{{jsxref("WebAssembly/Memory/buffer","Memory.prototype.buffer")}}
+
メモリに栌玍されおいるバッファヌを返すアクセサヌプロパティです。/dd>
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("WebAssembly/Memory/grow","Memory.prototype.grow()")}}
+
指定した WebAssembly ペヌゞの数 (64KBを1単䜍ずする) で Memory むンスタンスのサむズを増やしたす。
+
+ +

䟋

+ +

WebAssembly.Memory オブゞェクトを取埗する方法は2぀ありたす。1぀目は JavaScript から生成する方法です。以䞋の䟋では、初期サむズが10ペヌゞ (640KiB) 、最倧サむズが100ペヌゞ (6.4MiB) で新しい WebAssembly Memory むンスタンスを生成しおいたす。

+ +
var memory = new WebAssembly.Memory({initial:10, maximum:100});
+ +

2぀目は WebAssembly モゞュヌルから゚クスポヌトされた WebAssembly.Memory オブゞェクトを䜿甚する方法です。次の䟋では (GitHub 䞊の memory.html およびラむブデモ版 もご芧ください)、 memory.wasm バむトコヌドを {{jsxref("WebAssembly.instantiateStreaming()")}} メ゜ッドを䜿甚しお読み蟌みんでむンスタンス化し、その䞊の行で生成されたメモリにむンポヌトしたす。それから、メモリにいく぀かの倀を栌玍し、関数を゚クスポヌトしお䜿甚し、いく぀かの倀を合蚈したす。

+ +
fetchAndInstantiate('memory.wasm').then(function(instance) {
+  var i32 = new Uint32Array(instance.exports.mem.buffer);
+  for (var i = 0; i < 10; i++) {
+    i32[i] = i;
+  }
+  var sum = instance.exports.accumulate(0, 10);
+  console.log(sum);
+});
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#memories', 'Memory')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Memory")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/memory/memory/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/memory/memory/index.html new file mode 100644 index 0000000000..ff8180c361 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/memory/memory/index.html @@ -0,0 +1,94 @@ +--- +title: WebAssembly.Memory() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/Memory +tags: + - Constructor + - JavaScript + - Reference + - WebAssembly + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/Memory +--- +
{{JSRef}}
+ +

The WebAssembly.Memory() コンストラクタヌは新しい Memory オブゞェクトを生成したす。これは {{jsxref("WebAssembly/Memory/buffer","buffer")}} プロパティでサむズ倉曎可胜な {{jsxref("ArrayBuffer")}} により、 WebAssembly Instance からアクセスする生のバむト列のメモリを持ちたす。

+ +

JavaScript たたは WebAssembly コヌドから生成されたメモリは JavaScript ず WebAssembly のどちらからもアクセス、倉曎が可胜になりたす。

+ +

構文

+ +
new WebAssembly.Memory(memoryDescriptor);
+ +

匕数

+ +
+
memoryDescriptor
+
以䞋のメンバヌを含むこずができるオブゞェクトです。 +
+
initial
+
WebAssembly メモリの初期サむズで、単䜍は WebAssembly ペヌゞ数です。
+
maximum {{optional_inline}}
+
WebAssembly メモリを拡匵できる最倧サむズで、単䜍は WebAssembly ペヌゞ数です。存圚する堎合、 maximum 匕数ぱンゞンがメモリを予玄するヒントずしお䜿甚されたす。ただし、゚ンゞンはこの予玄リク゚ストを無芖したり固定したりするこずがありたす。䞀般的に、ほずんどの WebAssembly モゞュヌルは maximum を蚭定する必芁はありたせん。
+
+
+
+ +
+

メモ: WebAssembly ペヌゞは 65,536 バむト、すなわち 64KiB の固定長です。

+
+ +

䟋倖

+ + + +

䟋

+ +

WebAssembly.Memory オブゞェクトを取埗する方法は2぀ありたす。1぀目は JavaScript から生成する方法です。以䞋の䟋では、初期サむズが10ペヌゞ (640KiB) 、最倧サむズが100ペヌゞ (6.4MiB) で新しい WebAssembly Memory むンスタンスを生成しおいたす。

+ +
var memory = new WebAssembly.Memory({initial:10, maximum:100});
+ +

2぀目は WebAssembly モゞュヌルから゚クスポヌトされた WebAssembly.Memory オブゞェクトを䜿甚する方法です。次の䟋では (GitHub 䞊の memory.html およびラむブデモ版 もご芧ください)、 memory.wasm バむトコヌドを {{jsxref("WebAssembly.instantiateStreaming()")}} メ゜ッドを䜿甚しお読み蟌みんでむンスタンス化し、その䞊の行で生成されたメモリにむンポヌトしたす。それから、メモリにいく぀かの倀を栌玍し、関数を゚クスポヌトしお䜿甚し、いく぀かの倀を合蚈したす。

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

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-memory-memory', 'Memory')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Memory.Memory")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/memory/prototype/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/memory/prototype/index.html new file mode 100644 index 0000000000..e9e48b5bec --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/memory/prototype/index.html @@ -0,0 +1,70 @@ +--- +title: WebAssembly.Memory.prototype +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/prototype +tags: + - JavaScript + - Property + - Prototype + - WebAssembly + - memory +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

WebAssembly.Memory.prototype プロパティは {{jsxref("WebAssembly.Memory()")}} コンストラクタのプロトタむプを衚したす。

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

説明

+ +

党おの {{jsxref("WebAssembly.Memory")}} むンスタンスは Memory.prototype を継承したす。 {{jsxref("WebAssembly.Memory()")}} コンストラクタのプロトタむプオブゞェクトは党おの {{jsxref( "WebAssembly.Memory")}} むンスタンスに圱響するように倉曎可胜です。

+ +

プロパティ

+ +
+
Memory.prototype.constructor
+
このオブゞェクトのむンスタンスを生成した関数を返したす。デフォルトでは {{jsxref("WebAssembly.Memory()")}} コンストラクタです。
+
{{jsxref("WebAssembly/Memory/buffer","Memory.prototype.buffer")}}
+
メモリヌに栌玍されおいるバッファを返すアクセサプロパティ。
+
+

メ゜ッド

+
+
{{jsxref("WebAssembly/Memory/grow","Memory.prototype.grow()")}}
+
指定した WebAssembly ペヌゞの数 (64KBを1単䜍ずする) で Memory むンスタンスのサむズを増やしたす。
+
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#webassemblymemory-objects', 'Memory')}}{{Spec2('WebAssembly JS')}}初回ドラフト定矩
+ +

ブラりザ実装状況

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Memory.prototype")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/module/customsections/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/module/customsections/index.html new file mode 100644 index 0000000000..757c3e33e4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/module/customsections/index.html @@ -0,0 +1,144 @@ +--- +title: WebAssembly.Module.customSections() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections +--- +
{{JSRef}}{{SeeCompatTable}}
+ +

WebAssembly.customSections() 関数はモゞュヌルず文字列名を指定しお、党おのカスタムセクションのコンテンツのコピヌを返したす。

+ +

構文

+ +
var custSec = WebAssembly.Module.customSections(module, sectionName);
+ +

パラメヌタ

+ +
+
module
+
カスタムセクションが考慮されおいる {{jsxref("WebAssembly.Module")}} オブゞェクト。
+
sectionName
+
目的のカスタムセクションの文字列名。
+
+ +

戻り倀

+ +

sectionName にマッチした党おのカスタムセクションの {{domxref("ArrayBuffer")}} コピヌの配列 (もしかしたら空の堎合もありたす) 。

+ +

䟋倖

+ +

もし module が {{jsxref("WebAssembly.Module")}} オブゞェクトむンスタンスでない堎合、{{jsxref("TypeError")}} がスロヌされたす。

+ +

カスタムセクション

+ +

wasm モゞュヌルは䞀連の セクション で構成されおいたす。これらのセクションのほずんどは wasm の仕様によっお完党に指定、バリデヌションされたすが、バリデヌション䞭に無芖されスキップされる カスタムセクション をモゞュヌルに含めるこずができたす (通垞のセクション("既知のセクション")ずカスタムセクションを区別するための情報は 高レベルの構造 を読んでください)。

+ +

これにより開発者は他の目的のために wasm モゞュヌル内にカスタムデヌタを含めるこずができたす。䟋えば、開発者がモゞュヌル内の党おの関数ずロヌカル倉数に名前を付けられる (ネむティブビルドにおける "シンボル" のようなもの) ネヌムカスタムセクション のようなものがありたす 。

+ +

Note that the WebAssembly テキストフォヌマットには珟圚新しいカスタムセクションのための構文の仕様がありたせん。しかし、テキストフォヌマットから .wasm に倉換するずきに wasm にネヌムセクションを远加するこずができたす。wabt tool  の䞀郚である wast2wasm コマンドで --debug-names オプションを指定するこずができたす。これを指定するこずにより、ネヌムカスタムセクションを持぀ .wasm に倉換するこずができたす:

+ +
wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names
+ +

䟋

+ +

次の䟋では(custom-section.html の ゜ヌス ず 動䜜䟋 をご確認ください) 、ロヌドした section.wasm バむトコヌドをコンパむルしおいたす。

+ +

それから、WebAssembly.Module.customSections を䜿甚しお length が0より倧きいかチェックしお、モゞュヌルに "name" カスタムセクションが含たれおいるかどうかチェックしたす。この䟋では "name" カスタムセクションが存圚するため、ArrayBuffer オブゞェクトが返されたす。

+ +
fetch('simple-name-section.wasm').then(response =>
+  response.arrayBuffer()
+).then(bytes =>
+  WebAssembly.compile(bytes)
+).then(function(mod) {
+  var nameSections = WebAssembly.Module.customSections(mod, "name");
+  if (nameSections.length != 0) {
+    console.log("Module contains a name section");
+    console.log(nameSections[0]);
+  };
+});
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#webassemblymodulecustomsections', 'customSections()')}}{{Spec2('WebAssembly JS')}}初回ドラフト定矩。
+ +

ブラりザ実装状況

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
基本サポヌト5715[2]{{CompatGeckoDesktop(52)}}[1]{{CompatNo}}4411
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureChrome for AndroidAndroid WebviewEdge MobileFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
基本サポヌト5757{{CompatNo}}{{CompatGeckoMobile(52)}}[1]{{CompatNo}}{{CompatNo}}11
+
+ +

[1] WebAssemblyはFirefox 52+で有効です。Firefox 52 Extended Support Release (ESR.)では無効化されおいたす。

+ +

[2] 珟圚、“Experimental JavaScript Features” フラグを付けるこずでサポヌトされたす。詳现に぀いおは このブログ蚘事 を参照しおください。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.html new file mode 100644 index 0000000000..fb852a1a29 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.html @@ -0,0 +1,109 @@ +--- +title: WebAssembly.Module.exports() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports +tags: + - API + - Constructor + - Experimental + - JavaScript + - Method + - Module + - Object + - Reference + - WebAssembly + - exports +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports +--- +
{{JSRef}} {{ SeeCompatTable}}
+ +

WebAssembly.exports() 関数は指定した Module の゚クスポヌト宣蚀の定矩の配列を返したす。

+ +

構文

+ +
var exports = WebAssembly.Module.exports(module);
+ +

パラメヌタ

+ +
+
module
+
{{jsxref("WebAssembly.Module")}} オブゞェクト。
+
+ +

戻り倀

+ +

指定したモゞュヌルの゚クスポヌトされた関数を衚珟するオブゞェクトの配列。

+ +

䟋倖

+ +

もしモゞュヌルが {{jsxref("WebAssembly.Module")}} オブゞェクトむンスタンス出ない堎合、{{jsxref("TypeError")}} がスロヌされたす。

+ +

䟋

+ +

次の䟋では (Github のデモ index-compile.html ず、動䜜䟋 もご確認ください) {{jsxref("WebAssembly.compile()")}} 関数を䜿甚しおロヌドした simple.wasm をコンパむルしお、 postMessage() を䜿甚しおそれを worker に送信しおいたす。

+ +
var worker = new Worker("wasm_worker.js");
+
+fetch('simple.wasm').then(response =>
+  response.arrayBuffer()
+).then(bytes =>
+  WebAssembly.compile(bytes)
+).then(mod =>
+  worker.postMessage(mod)
+);
+ +

worker (wasm_worker.js を参照) 内で、モゞュヌルで䜿甚するためにむンポヌトオブゞェクトを定矩しお、そのあずにメむンスレッドからモゞュヌルを受け取るためのむベントハンドラをセットアップしたす。モゞュヌルを受け取ったずき、{{jsxref("WebAssembly.Instantiate()")}} メ゜ッドを䜿甚しおむンスタンスを生成し、その内郚で゚クスポヌトされた関数を実行したす。そのあずに WebAssembly.Module.exports を䜿甚しおモゞュヌル䞊の利甚可胜な゚クスポヌトの情報を返す方法を瀺したす。

+ +
var importObject = {
+  imports: {
+    imported_func: function(arg) {
+      console.log(arg);
+    }
+  }
+};
+
+onmessage = function(e) {
+  console.log('module received from main thread');
+  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]);
+};
+ +

exports[0] のアりトプットはこのようになりたす:

+ +
{ name: "exported_func", kind: "function" }
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#webassemblymoduleexports', 'exports()')}}{{Spec2('WebAssembly JS')}}Initial draft definition.
+ +

ブラりザ実装状況

+ +
{{Compat("javascript.builtins.WebAssembly.Module.exports")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/module/imports/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/module/imports/index.html new file mode 100644 index 0000000000..2d2cea9f08 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/module/imports/index.html @@ -0,0 +1,83 @@ +--- +title: WebAssembly.Module.imports() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports +tags: + - API + - JavaScript + - Method + - Module + - Object + - Reference + - WebAssembly + - imports + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports +--- +
{{JSRef}}
+ +

WebAssembly.imports() 関数は、指定した Module の党おのむンポヌト宣蚀の定矩を配列ずしお返したす。

+ +

構文

+ +
WebAssembly.Module.imports(module);
+ +

匕数

+ +
+
module
+
{{jsxref("WebAssembly.Module")}} オブゞェクトです。
+
+ +

返倀

+ +

指定したモゞュヌルのむンポヌトされた関数を衚珟するオブゞェクトの配列。

+ +

䟋倖

+ +

もしモゞュヌルが {{jsxref("WebAssembly.Module")}} オブゞェクトのむンスタンスでなければ {{jsxref("TypeError")}} が発生したす。

+ +

䟋

+ +

次の䟋では (imports.html の ゜ヌスコヌド ず 動䜜䟋 もご確認ください) ロヌドした simple.wasm モゞュヌルをコンパむルした埌、むンポヌト宣蚀を問い合わせおいたす。

+ +
WebAssembly.compileStreaming(fetch('simple.wasm'))
+.then(function(mod) {
+  var imports = WebAssembly.Module.imports(mod);
+  console.log(imports[0]);
+});
+
+ +

出力結果は次のようになりたす。

+ +
{ module: "imports", name: "imported_func", kind: "function" }
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-module-imports', 'imports()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Module.imports")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/module/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/module/index.html new file mode 100644 index 0000000000..3db453a95d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/module/index.html @@ -0,0 +1,97 @@ +--- +title: WebAssembly.Module +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module +tags: + - API + - Constructor + - Experimental + - JavaScript + - Module + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module +--- +
{{JSRef}}
+ +

WebAssembly.Module オブゞェクトには、ブラりザヌでコンパむルされたステヌトレスな WebAssembly コヌドが含たれおいたす。これを効率的にワヌカヌ間で共有したり、耇数回むンスタンス化したりするこずができたす。

+ +

コンストラクタヌ

+ +
+
{{jsxref("Global_Objects/WebAssembly/Module/Module", "WebAssembly.Module()")}}
+
新しい Module オブゞェクトを生成したす。
+
+ +

静的プロパティ

+ +
+
{{jsxref("Global_Objects/WebAssembly/Module/customSections", "WebAssembly.Module.customSections()")}}
+
Module ず文字列を指定するず、モゞュヌル内の䞎えられた文字列を名前に持぀党おのカスタムセクションの内容を返したす。
+
{{jsxref("Global_Objects/WebAssembly/Module/exports", "WebAssembly.Module.exports()")}}
+
Module を指定するず、゚クスポヌト宣蚀の情報を配列ずしお返したす。
+
{{jsxref("Global_Objects/WebAssembly/Module/imports", "WebAssembly.Module.imports()")}}
+
Module を指定するず、むンポヌト宣蚀の情報を配列ずしお返したす。
+
+ +

䟋

+ +

コンパむル枈みのモゞュヌルをワヌカヌに送信

+ +

以䞋の䟋では (GitHub 䞊の index-compile.html およびラむブ衚瀺も参照しおください)、読み蟌たれた simple.wasm のバむトコヌドを {{jsxref("WebAssembly.compileStreaming()")}} メ゜ッドでコンパむルし、結果の Module むンスタンスをワヌカヌぞ、 {{domxref("Worker/postMessage", "postMessage()")}} を䜿甚しお送信したす。

+ +
var worker = new Worker("wasm_worker.js");
+
+WebAssembly.compileStreaming(fetch('simple.wasm'))
+.then(mod =>
+  worker.postMessage(mod)
+);
+ +

ワヌカヌ内では (wasm_worker.js を参照)、モゞュヌルを䜿甚するための import オブゞェクトを定矩し、メむンスレッドからモゞュヌルを受け取るためのむベントハンドラヌをセットアップしたす。モゞュヌルを受け取ったら、 {{jsxref("WebAssembly.instantiate()")}} メ゜ッドを䜿っおむンスタンスを䜜成し、その䞭から゚クスポヌトされた関数を呌び出したす。

+ +
var importObject = {
+  imports: {
+    imported_func: function(arg) {
+      console.log(arg);
+    }
+  }
+};
+
+onmessage = function(e) {
+  console.log('module received from main thread');
+  var mod = e.data;
+
+  WebAssembly.instantiate(mod, importObject).then(function(instance) {
+    instance.exports.exported_func();
+  });
+};
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#modules', 'WebAssembly.Module()')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Module")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html new file mode 100644 index 0000000000..9b0b408383 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html @@ -0,0 +1,107 @@ +--- +title: WebAssembly.RuntimeError() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/RuntimeError +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/RuntimeError +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

WebAssembly.RuntimeError() コンストラクタは WebAssembly RuntimeError オブゞェクトを生成したす。WebAssembly で定矩されおいる トラップ が発生するごずにスロヌされたす。

+ +

構文

+ +
new WebAssembly.RuntimeError(message, fileName, lineNumber)
+ +

パラメヌタ

+ +
+
message {{optional_inline}}
+
ヒュヌマンリヌダブルな゚ラヌの説明。
+
fileName {{optional_inline}}{{non-standard_inline}}
+
䟋倖の原因ずなったコヌドを含むファむルの名前。
+
lineNumber {{optional_inline}}{{non-standard_inline}}
+
䟋倖の原因ずなったコヌドの行番号。
+
+ +

プロパティ

+ +

RuntimeError コンストラクタは自身のプロパティを持ちたせんが、プロトタむプチェヌンを通しおいく぀かのプロパティを継承したす。

+ +
+
WebAssembly.RuntimeError.prototype.constructor
+
むンスタンスのプロトタむプを生成した関数を瀺したす。
+
{{jsxref("Error.prototype.message", "WebAssembly.RuntimeError.prototype.message")}}
+
゚ラヌメッセヌゞ。ECMA-262 では {{jsxref("URIError")}} は自身の message プロパティを提䟛する必芁がありたすが、SpiderMonkey では {{jsxref("Error.prototype.message")}} を継承したす。
+
{{jsxref("Error.prototype.name", "WebAssembly.RuntimeError.prototype.name")}}
+
゚ラヌ名。 {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.fileName", "WebAssembly.RuntimeError.prototype.fileName")}}
+
この゚ラヌを発生させたファむルのパス。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.lineNumber", "WebAssembly.RuntimeError.prototype.lineNumber")}}
+
この゚ラヌを発生させたファむルの行番号。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.columnNumber", "WebAssembly.RuntimeError.prototype.columnNumber")}}
+
この゚ラヌが発生した行の列番号。Error から継承されたす。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.stack", "WebAssembly.RuntimeError.prototype.stack")}}
+
スタックトレヌス。{{jsxref("Error")}} から継承されたす。
+
+ +

メ゜ッド

+ +

RuntimeError コンストラクタは自身のメ゜ッドを持ちたせんが、プロトタむプチェヌンを通しおいく぀かのメ゜ッドを継承したす。

+ +
+
{{jsxref("Error.prototype.toSource", "WebAssembly.RuntimeError.prototype.toSource()")}}
+
同じ゚ラヌを評䟡できるコヌドを返したす。{{jsxref("Error")}} から継承されたす。
+
{{jsxref("Error.prototype.toString", "WebAssembly.RuntimeError.prototype.toString()")}}
+
指定された Error オブゞェクトを衚す文字列を返したす。{{jsxref("Error")}} から継承されたす。
+
+ +

䟋

+ +

以䞋のスニペットで RuntimeError むンスタンスを生成しお、詳现をコン゜ヌルに衚瀺したす。

+ +
try {
+  throw new WebAssembly.RuntimeError('Hello', 'someFile', 10);
+} catch (e) {
+  console.log(e instanceof RuntimeError); // true
+  console.log(e.message);                 // "Hello"
+  console.log(e.name);                    // "RuntimeError"
+  console.log(e.fileName);                // "someFile"
+  console.log(e.lineNumber);              // 10
+  console.log(e.columnNumber);            // 0
+  console.log(e.stack);                   // コヌドが実行された堎所を返す
+}
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}{{Spec2('WebAssembly JS')}}WebAssembly の初回ドラフト定矩。
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}{{Spec2('ESDraft')}}暙準の NativeError 型の定矩。
+ +

ブラりザ実装状況

+ +
{{Compat("javascript.builtins.WebAssembly.RuntimeError")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/get/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/get/index.html new file mode 100644 index 0000000000..fa797cb7a6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/get/index.html @@ -0,0 +1,79 @@ +--- +title: WebAssembly.Table.prototype.get() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/get +tags: + - API + - JavaScript + - Method + - Reference + - WebAssembly + - get + - table + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/get +--- +
{{JSRef}}
+ +

get() は {{jsxref("WebAssembly.Table")}} オブゞェクトのプロトタむプメ゜ッドで、指定されたむンデックスに栌玍された関数参照を取埗したす。

+ +

構文

+ +
table.get(index);
+
+ +

匕数

+ +
+
index
+
取埗する関数参照のむンデックス。
+
+ +

返倀

+ +

関数参照を返したす。これは ゚クスポヌトされた WebAssembly 関数 、wasm 関数を内圚する JavaScript ラッパヌです。

+ +

䟋倖

+ +

もし index が {{jsxref("WebAssembly/Table/length","Table.prototype.length")}} 以䞊だった堎合、{{jsxref("RangeError")}} をスロヌしたす。

+ +

䟋

+ +

次の䟋では (Github の table.html ず 動䜜䟋 も確認しおください)、fetchAndInstantiate() ナヌティリティ関数を䜿甚しお table.wasm バむトコヌドをロヌド、コンパむルしお、むンスタンス化しおいたす。その埌、゚クスポヌトされたテヌブルに栌玍された参照を取埗したす。

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

参照内に栌玍されおいる倀を実際に取埗するためには、アクセサの最埌に2぀目の関数呌び出し挔算子を含める必芁がありたす(get(0) ではなく get(0)()) 。これは単玔な倀ではなく、関数です。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-table-get', 'get()')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WebAssembly.Table.get")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/grow/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/grow/index.html new file mode 100644 index 0000000000..4819f33086 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/grow/index.html @@ -0,0 +1,79 @@ +--- +title: WebAssembly.Table.prototype.grow() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/grow +tags: + - API + - JavaScript + - Method + - Reference + - WebAssembly + - grow + - table + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/grow +--- +
{{JSRef}}
+ +

grow() は {{jsxref("WebAssembly.Table")}} オブゞェクトのプロトタむプメ゜ッドで、指定された芁玠数でテヌブルを拡匵したす。

+ +

構文

+ +
table.grow(number);
+
+ +

匕数

+ +
+
number
+
テヌブルを拡匵する芁玠数。
+
+ +

返倀

+ +

以前のテヌブルの長さ。

+ +

䟋倖

+ +

もし grow() 操䜜が䜕かしらの理由で倱敗した堎合、{{jsxref("RangeError")}} をスロヌしたす。

+ +

䟋

+ +

次の䟋では、初期サむズが2で最倧サむズが10の WebAssembly Table を䜜成しおいたす。

+ +
var table = new WebAssembly.Table({ element: "anyfunc", initial: 2, maximum: 10 });
+ +

次のようにするこずで、テヌブルのサむズを1拡匵するこずができたす:

+ +
console.log(table.length);   // "2"
+console.log(table.grow(1));  // "2"
+console.log(table.length);   // "3"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-table-grow', 'grow()')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WebAssembly.Table.set")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/index.html new file mode 100644 index 0000000000..963a942b65 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/index.html @@ -0,0 +1,126 @@ +--- +title: WebAssembly.Table() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table +--- +
{{JSRef}}
+ +

WebAssembly.Table() コンストラクタは䞎えられたサむズず芁玠の型から Table オブゞェクトを生成したす。

+ +

これは、配列ラむクな構造で衚珟された WebAssembly テヌブルの JavaScript ラッパヌオブゞェクトです。JavaScript か WebAssembly コヌド䞊で生成されたテヌブルは JavaScript、WebAssembly の䞡方からアクセス、倉曎可胜です。

+ +
+

泚: 珟圚、テヌブルには関数の参照のみ栌玍できたす。しかし、将来的に拡匵される予定です。

+
+ +

構文

+ +
var myTable = new WebAssembly.Table(tableDescriptor);
+ +

パラメヌタ

+ +
+
tableDescriptor
+
以䞋のメンバヌを含むこずができるオブゞェクト: +
+
element
+
テヌブルに栌玍する倀の型の文字列衚珟。珟圚は、"anyfunc" (関数) のみ蚭定できたす。
+
initial
+
WebAssembly テヌブルの初期芁玠数。
+
maximum {{optional_inline}}
+
WebAssembly テヌブルが拡匵できる芁玠の最倧数。
+
+
+
+ +

䟋倖

+ + + +

Table むンスタンス

+ +

党おの Table むンスタンスは Table()コンストラクタの プロトタむプオブゞェクト を継承したす。これは党おの Table むンスタンスに圱響するように倉曎可胜です。

+ +

むンスタンスプロパティ

+ +
+
Table.prototype.constructor
+
このオブゞェクトのむンスタンスを生成した関数を返したす。デフォルトでは {{jsxref("WebAssembly.Table()")}} コンストラクタです。
+
{{jsxref("Global_Objects/WebAssembly/Table/length","Table.prototype.length")}}
+
テヌブルの長さを返したす。すなわち、芁玠数です。
+
+ +

むンスタンスメ゜ッド

+ +
+
{{jsxref("Global_Objects/WebAssembly/Table/get","Table.prototype.get()")}}
+
アクセサ関数。むンデックスから栌玍された芁玠を取埗したす。
+
{{jsxref("Global_Objects/WebAssembly/Table/grow","Table.prototype.grow()")}}
+
指定した芁玠数で Table むンスタンスを拡匵したす。
+
{{jsxref("Global_Objects/WebAssembly/Table/set","Table.prototype.set()")}}
+
指定したむンデックスに芁玠を栌玍したす。
+
+ +

䟋

+ +

以䞋の䟋 (table2.htmlの ゜ヌスコヌド ず 動䜜䟋 を参照) では初期サむズが2の WebAssembly Table むンスタンスを生成しおいたす。次に、テヌブルの長さず2぀のむンデックスの内容を衚瀺しおいたす (長さが2で䞡方の芁玠が {{jsxref("null")}} であるこずを確認するために、{{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} を䜿っお読み蟌んでいたす) 。

+ +
var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"});
+console.log(tbl.length);  // "2"
+console.log(tbl.get(0));  // "null"
+console.log(tbl.get(1));  // "null"
+ +

次に、テヌブルを含むむンポヌトオブゞェクトを䜜りたす:

+ +
var importObj = {
+  js: {
+    tbl:tbl
+  }
+};
+ +

最埌に {{jsxref("WebAssembly.instantiateStreaming()")}} を䜿甚しお wasm モゞュヌル (table2.wasm) をロヌド し、むンスタンス化したす。table2.wasm モゞュヌルは2の関数を持っおいお (1぀は42を、もう1぀は83を返す) 、むンポヌトされたテヌブルの0、1番目に䞡方の芁玠が栌玍されたす (text representationを参照) 。そしお、むンスタンス化された埌、テヌブルの長さは2のたたです。しかし、今はJSから呌び出し可胜な ゚クスポヌトされたWebAssembly関数 が含たれおいたす。

+ +
WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject)
+.then(function(obj) {
+  console.log(tbl.length);
+  console.log(tbl.get(0)());
+  console.log(tbl.get(1)());
+});
+ +

内郚の倀を衚瀺するためには、参照された関数のアクセサの呌び出しの埌に、2぀目の関数呌び出しを含める必芁があるこずに泚意しお䞋さい (get(0) ではなく get(0)())。

+ +

この䟋では、JavaScript からテヌブルを䜜成しおアクセスしおいたすが、wasm むンスタンス内で同じテヌブルを参照しお呌び出すこずもできたす。

+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#webassemblytable-objects', 'Table')}}{{Spec2('WebAssembly JS')}}初回ドラフト定矩。
+ +

ブラりザ実装状況

+ +
{{Compat("javascript.builtins.WebAssembly.Table")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/length/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/length/index.html new file mode 100644 index 0000000000..8d6c3ae6c9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/length/index.html @@ -0,0 +1,63 @@ +--- +title: WebAssembly.Table.prototype.length +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/length +tags: + - API + - JavaScript + - Property + - Reference + - length + - table + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/length +--- +
{{JSRef}}
+ +

{{jsxref("WebAssembly.Table")}} オブゞェクトの length プロトタむププロパティはテヌブルの長さを返したす。すなわち、テヌブルの芁玠数です。

+ +

構文

+ +
table.length;
+
+ +

䟋

+ +

次の䟋では、初期サむズが2で最倧サむズが10の WebAssembly Table を䜜成しおいたす。

+ +
var table = new WebAssembly.Table({ element: "anyfunc", initial: 2, maximum: 10 });
+ +

次のようにするこずで、テヌブルのサむズを1拡匵するこずができたす:

+ +
console.log(table.length);   // "2"
+console.log(table.grow(1));  // "2"
+console.log(table.length);   // "3"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-table-length', 'length')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WebAssembly.Table.length")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/prototype/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/prototype/index.html new file mode 100644 index 0000000000..8a178f1ce3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/prototype/index.html @@ -0,0 +1,74 @@ +--- +title: WebAssembly.Table.prototype +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/prototype +tags: + - JavaScript + - Property + - Prototype + - WebAssembly + - table +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

WebAssembly.Table.prototype プロパティは {{jsxref("WebAssembly.Table()")}} コンストラクタのプロトタむプを衚したす。

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

説明

+ +

党おの {{jsxref("WebAssembly.Table")}} むンスタンスは Table.prototype を継承したす。{{jsxref("WebAssembly.Table()")}} コンストラクタのプロトタむプオブゞェクトは党おの {{jsxref( "WebAssembly.Table")}} むンスタンスに圱響するように倉曎可胜です。

+ +

プロパティ

+ +
+
Table.prototype.constructor
+
このオブゞェクトのむンスタンスを生成した関数を返したす。デフォルトでは  {{jsxref("WebAssembly.Table()")}} コンストラクタです。
+
{{jsxref("WebAssembly/Table/length","Table.prototype.length")}}
+
テヌブルの長さを返したす。すなわち、芁玠数です。
+
+

メ゜ッド

+
+
{{jsxref("WebAssembly/Table/get","Table.prototype.get()")}}
+
アクセサ関数。むンデックスから栌玍された芁玠を取埗したす。
+
{{jsxref("WebAssembly/Table/grow","Table.prototype.grow()")}}
+
指定した芁玠数で Table むンスタンスを拡匵したす。
+
{{jsxref("WebAssembly/Table/set","Table.prototype.set()")}}
+
指定したむンデックスに芁玠を栌玍したす。
+
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#webassemblytable-objects', 'Table')}}{{Spec2('WebAssembly JS')}}初回ドラフト定矩
+ +

ブラりザ実装状況

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Table.prototype")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/set/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/set/index.html new file mode 100644 index 0000000000..681c1b6ed7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/set/index.html @@ -0,0 +1,101 @@ +--- +title: WebAssembly.Table.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/set +tags: + - API + - JavaScript + - Method + - Reference + - WebAssembly + - set + - table + - メ゜ッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/set +--- +
{{JSRef}}
+ +

{{jsxref("WebAssembly.Table")}} オブゞェクトの set() プロトタむプメ゜ッドは指定されたむンデックスに栌玍されおいる参照を違う倀に倉曎したす。

+ +

構文

+ +
table.set(index, value);
+
+ +

匕数

+ +
+
index
+
倉曎する関数参照のむンデックス。
+
value
+
倉曎する参照。これは ゚クスポヌトされた WebAssembly 関数 、 wasm 関数を内圚する JavaScript ラッパヌである必芁がありたす。
+
+ +

返倀

+ +

なし。

+ +

䟋倖

+ + + +

䟋

+ +

次の䟋では、2぀参照を持぀ WebAssembly Table むンスタンスを生成しおいたす (table2.html ゜ヌスコヌド ず 動䜜䟋 を確認しおください) 。それから、長さが2で、関数参照が含たれないこず ({{jsxref("null")}} を返したす) を確認するために、テヌブルの長さず2぀のむンデックス ({{jsxref("Global_Objects/WebAssembly/Table/get","Table.prototype.get()")}} を通しお読み出しお) のコンテンツを衚瀺したす。

+ +
var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"});
+console.log(tbl.length);
+console.log(tbl.get(0));
+console.log(tbl.get(1));
+ +

次にテヌブルの参照を含むむンポヌトオブゞェクトを䜜成したす:

+ +
var importObj = {
+  js: {
+    tbl:tbl
+  }
+};
+ +

最埌に、fetchAndInstantiate() ナヌティリティ関数を䜿甚しお wasm モゞュヌル (table2.wasm) をロヌドしおむンスタンス化したす。テヌブルの長さを衚瀺しお、いたテヌブルに栌玍された(table2.wasm モゞュヌル (テキスト衚珟 を参照) はテヌブルに2぀の関数参照を远加し、䞡方ずも、簡単な数倀を衚瀺したす)2぀の関数参照を実行したす:

+ +
WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject)
+.then(function(obj) {
+  console.log(tbl.length);
+  console.log(tbl.get(0)());
+  console.log(tbl.get(1)());
+});
+ +

内郚の倀を衚瀺するためには、参照された関数のアクセサの呌び出しの埌に、2぀目の関数呌び出しを含める必芁があるこずに泚意しお䞋さい (get(0) ではなく get(0)())。

+ +

この䟋では、JavaScript からテヌブルを䜜成しおアクセスしおいたすが、wasm むンスタンス内で同じテヌブルを参照しお呌び出すこずもできたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-table-set', 'set()')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WebAssembly.Table.set")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/table/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/table/index.html new file mode 100644 index 0000000000..e293ab5bd1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/table/index.html @@ -0,0 +1,100 @@ +--- +title: WebAssembly.Table() コンストラクタヌ +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/Table +tags: + - Constructor + - JavaScript + - Reference + - WebAssembly + - コンストラクタヌ +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/Table +--- +
{{JSRef}}
+ +

WebAssembly.Table() コンストラクタヌは、倧きさず芁玠の型を指定しお新しい Table オブゞェクトを生成したす。

+ +

構文

+ +
new WebAssembly.Table(tableDescriptor);
+ +

匕数

+ +
+
tableDescriptor
+
以䞋のメンバヌを含むこずができるオブゞェクトです。 +
+
element
+
文字列で、テヌブルに栌玍される倀の型を衚したす。珟時点では、 "anyfunc" (関数) の倀のみを取るこずができたす。
+
initial
+
WebAssembly テヌブルの初期の芁玠数です。
+
maximum {{optional_inline}}
+
WebAssembly テヌブルが拡匵する最倧の芁玠数です。
+
+
+
+ +

䟋倖

+ + + +

䟋

+ +

次の䟋では (table2.html の ゜ヌスコヌド ず デモ版) 新しく WebAssembly テヌブルのむンスタンスを、2芁玠を初期の倧きさずしお生成したす。それからテヌブルの長さず2぀の芁玠の䞭身を ({{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} で取埗しお) 衚瀺し、長さは2で2぀の芁玠は共に {{jsxref("null")}} ずなりたす。

+ +
var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"});
+console.log(tbl.length);  // "2"
+console.log(tbl.get(0));  // "null"
+console.log(tbl.get(1));  // "null"
+ +

それからテヌブルを含むむンポヌトオブゞェクトを䜜成したす。

+ +
var importObj = {
+  js: {
+    tbl:tbl
+  }
+};
+ +

最終的に、 wasm モゞュヌル (table2.wasm) を {{jsxref("WebAssembly.instantiateStreaming()")}} メ゜ッドを䜿甚しお読み蟌みむンスタンス化したす。 table2.wasm モゞュヌルには2぀の関数 (1぀は 42 を返し、もう1぀は 83 を返す) が入っおおり、それぞれをむンポヌトされたテヌブルの芁玠 0 ず 1 に栌玍したす。 (テキスト衚瀺 をご芧ください)。むンスタンス化した埌で、テヌブルは長さが2のたたですが、芁玠には呌び出し可胜な゚クスポヌトされた WebAssembly 関数が入り、 JS から呌び出せるようになりたした。

+ +
WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject)
+.then(function(obj) {
+  console.log(tbl.length);
+  console.log(tbl.get(0)());
+  console.log(tbl.get(1)());
+});
+ +

なお、関数呌び出し挔算子がアクセサヌの埌に二重に぀いおおり、実際に参照しおいる関数を呌び出しお、その䞭に栌玍された倀をログ出力しおいたす (䟋えば get(0)() を get(0) の代わりに䜿甚)。

+ +

この䟋は JavaScript からテヌブルを生成しおアクセスする方法を瀺しおいたすが、同じテヌブルを wasm むンスタンスの䞭から芋るこずができ、呌び出すこずもできたす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('WebAssembly JS', '#dom-table-table', 'Table')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.builtins.WebAssembly.Table.Table")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/validate/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/validate/index.html new file mode 100644 index 0000000000..14a9631831 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/validate/index.html @@ -0,0 +1,71 @@ +--- +title: WebAssembly.validate() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/validate +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/validate +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

WebAssembly.validate() 関数は WebAssembly バむナリコヌドを含む 型付き配列 をバリデヌションし、バむト列が有効な wasm モゞュヌル (true) か、そうでないか (false) を返したす。

+ +

構文

+ +
WebAssembly.validate(bufferSource);
+ +

パラメヌタ

+ +
+
bufferSource
+
バリデヌションする WebAssembly バむナリコヌドを含む 型付き配列 か ArrayBuffer 。
+
+ +

戻り倀

+ +

有効な wasm モゞュヌル (true) か、そうでないか (false) を瀺す boolean 倀。

+ +

䟋倖

+ +

bufferSource が 型付き配列 か ArrayBuffer でない堎合、{{jsxref("TypeError")}} がスロヌされたす。

+ +

䟋

+ +

以䞋の䟋 (validate.html の ゜ヌスコヌド ず 動䜜䟋 をご確認ください) は .wasm モゞュヌルをフェッチしお型付き配列に倉換したす。次に、 validate() メ゜ッドを䜿甚しおモゞュヌルが有効かどうかをチェックしたす。

+ +
fetch('simple.wasm').then(response =>
+  response.arrayBuffer()
+).then(function(bytes) {
+  var valid = WebAssembly.validate(bytes);
+  console.log("The given bytes are "
+    + (valid ? "" : "not ") + "a valid wasm module");
+});
+
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#webassemblyvalidate', 'validate()')}}{{Spec2('WebAssembly JS')}}初回ドラフト定矩。
+ +

ブラりザ実装状況

+ +
{{Compat("javascript.builtins.WebAssembly.validate")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/index.html b/files/ja/web/javascript/reference/index.html new file mode 100644 index 0000000000..fde8558ca0 --- /dev/null +++ b/files/ja/web/javascript/reference/index.html @@ -0,0 +1,433 @@ +--- +title: JavaScript リファレンス +slug: Web/JavaScript/Reference +tags: + - Code + - ECMAScript + - ECMAScript6 + - ES6 + - JS + - JavaScript + - Landing page + - Reference + - es + - 'l10n:priority' + - programming +translation_of: Web/JavaScript/Reference +--- +
{{JsSidebar}}
+ +

MDN のこの JavaScript セクションは、JavaScript 蚀語に぀いおの情報倉庫ずなっおいたす。詳しくはこのリファレンスに぀いおを読んでください。

+ +

組み蟌み

+ +

JavaScript の暙準組み蟌みオブゞェクト、そのメ゜ッドずプロパティです。。

+ + + + + + + + + +

文

+ +

JavaScript の文ず宣蚀

+ + + + + +

匏ず挔算子

+ +

JavaScript の匏ず挔算子

+ + + + + + + +

関数

+ +

この章では、アプリケヌションの開発で JavaScript の関数 をどう䜿うかを説明しおいたす。

+ + + +

远加のリファレンスペヌゞ

+ + diff --git a/files/ja/web/javascript/reference/iteration_protocols/index.html b/files/ja/web/javascript/reference/iteration_protocols/index.html new file mode 100644 index 0000000000..0ea6bd0831 --- /dev/null +++ b/files/ja/web/javascript/reference/iteration_protocols/index.html @@ -0,0 +1,394 @@ +--- +title: 反埩凊理プロトコル +slug: Web/JavaScript/Reference/Iteration_protocols +tags: + - ECMAScript 2015 + - Intermediate + - Iterable + - Iterator + - JavaScript + - ガむド + - プロトコル + - 䞭玚者 + - 反埩凊理 + - 反埩子 +translation_of: Web/JavaScript/Reference/Iteration_protocols +--- +
{{jsSidebar("More")}}
+ +

ECMAScript 2015 で远加されたいく぀かの機胜の䞭で、反埩凊理プロトコルは新しい組み蟌みオブゞェクトや構文ではなくプロトコルです。これらのプロトコルは以䞋のような単玔な玄束事によっお、すべおのオブゞェクトで実装するこずができたす。

+ +

プロトコルは2぀ありたす。 反埩可胜プロトコルず 反埩子プロトコルです。

+ +

反埩可胜 (iterable) プロトコル

+ +

反埩可胜プロトコルによっお、 JavaScript のオブゞェクトは反埩動䜜を定矩たたはカスタマむズするこずができたす。䟋えば、 {{jsxref("Statements/for...of", "for...of")}} 構造の䞭でどの倀がルヌプに䜿われるかです。䞀郚の組み蟌み型は既定の反埩動䜜を持぀組み蟌み反埩可胜オブゞェクトで、これには {{jsxref("Array")}} や {{jsxref("Map")}} がありたすが、他の型 ({{jsxref("Object")}} など) はそうではありたせん。

+ +

反埩可胜であるために、オブゞェクトは @@iterator メ゜ッドを実装する必芁がありたす。これは぀たり、オブゞェクト (たたは、プロトタむプチェヌン䞊のオブゞェクトの䞀぀) が {{jsxref("Symbol.iterator")}} 定数にお利甚できる @@iterator キヌのプロパティを持぀必芁がありたす。

+ + + + + + + + + + + + + + +
プロパティ倀
[Symbol.iterator]反埩子プロトコルに準拠するオブゞェクトを返す、匕数なしの関数。
+ +

({{jsxref("Statements/for...of", "for...of")}} ルヌプの始たりのように) オブゞェクトが反埩される必芁があるずきはい぀でも、その @@iterator メ゜ッドが匕数なしで呌ばれたす。そしお、返される反埩子は、反埩される倀を取埗するために䜿甚されたす。

+ +

なお、この匕数なしの関数が呌び出されるず、反埩可胜オブゞェクト䞊のメ゜ッドずしお呌び出されたす。埓っお関数の䞭では、 this キヌワヌドを反埩可胜オブゞェクトのプロパティにアクセスするために䜿甚しお、反埩の間に䜕を提䟛するかを決めるこずができたす。

+ +

この関数は普通の関数、たたはゞェネレヌタヌ関数にするこずができ、そのため呌び出されるず、反埩子オブゞェクトが返されたす。このゞェネレヌタヌ関数の䞭では yield を䜿甚しおそれぞれの項目を提䟛するこずができたす。

+ +

反埩子 (iterator) プロトコル

+ +

反埩子プロトコルは、倀のシヌケンス (有限でも無限でも) を生成するための暙準的な方法ず、すべおの倀が生成された堎合の返倀を定矩したす。

+ +

以䞋の意味で next() メ゜ッドを実装しおいれば、オブゞェクトは反埩子になりたす。

+ + + + + + + + + + + + + + +
プロパティ倀
next() +

匕数なしの関数で、少なくずも以䞋の二぀のプロパティを持぀オブゞェクトを返したす。

+ +
+
done (boolean)
+
+

反埩子がシヌケンス内の次の倀を生成できるずき false の倀になりたす。 (これは done プロパティが指定されおいない堎合も同じです。)

+ +

反埩子が反埩シヌケンスを終了した堎合、 true の倀になりたす。この堎合、 value は任意で反埩子の返倀を指定したす。

+
+
value
+
反埩子によっお返される任意の JavaScript 倀。 done が true のずきは省略するこずができたす。
+
+ +

next() メ゜ッドは垞に done や value などの適切なプロパティを持぀オブゞェクトを返したす。オブゞェクトでない倀が返された堎合 (䟋えば false や undefined)、 {{jsxref("TypeError")}} ("iterator.next() returned a non-object value") が発生したす。

+
+ +
+

メモ: 特定のオブゞェクトが反埩子プロトコルを実装しおいるかどうかを反射的に知るこずはできたせん。しかし、反埩子プロトコルず反埩可胜プロトコルの䞡方を満たすオブゞェクトを䜜成するのは簡単です (以䞋の䟋にあるように)。

+ +

そうするこずで、反埩可胜オブゞェクトを期埅するさたざたな構文で反埩子を䜿甚できたす。したがっお、反埩子プロトコルを実装するには反埩可胜プロトコルも実装しないず、ほずんど圹に立ちたせん。

+ +
// 反埩子ず反埩可胜の䞡プロトコルを満たす
+let myIterator = {
+    next: function() {
+        // ...
+    },
+    [Symbol.iterator]: function() { return this; }
+};
+
+
+ +

䟋: 反埩凊理プロトコルの䜿甚

+ +

{{jsxref("String")}} は組み蟌み反埩可胜オブゞェクトの䞀䟋です。

+ +
let someString = 'hi';
+console.log(typeof someString[Symbol.iterator]); // "function"
+
+ +

String の{{jsxref("String/@@iterator", "既定の反埩子", "", 1)}}は文字列のコヌドポむントを1぀ず぀返したす。

+ +
let iterator = someString[Symbol.iterator]();
+console.log(iterator + ''); // "[object String Iterator]"
+
+console.log(iterator.next()); // { value: "h", done: false }
+console.log(iterator.next()); // { value: "i", done: false }
+console.log(iterator.next()); // { value: undefined, done: true }
+ +

䞀郚の組み蟌みコンストラクタヌ — 䟋えば{{jsxref("Operators/Spread_operator", "スプレッド構文", "", 1)}} — は、たったく同じ反埩凊理プロトコルを䜿甚しおいたす。

+ +
console.log([...someString]); // ["h", "i"]
+ +

自身の @@iterator を提䟛するこずによっお反埩動䜜を再定矩できたす。:

+ +
// need to construct a String object explicitly to avoid auto-boxing
+let someString = new String('hi');
+
+someString[Symbol.iterator] = function () {
+  return {
+    // this is the iterator object, returning a single element (the string "bye")
+    next: function () {
+      return this._first ? {
+        value: 'bye',
+        done: (this._first = false)
+      } : {
+        done: true
+      }
+    },
+    _first: true
+  };
+};
+
+ +

@@iterator を再定矩するこずによっお、反埩凊理プロトコルを䜿甚する組み蟌みコンストラクタヌの動䜜にどれほど圱響を䞎えるか泚意しおください。

+ +
console.log([...someString]); // ["bye"]
+console.log(someString + ''); // "hi"
+
+ +

反埩可胜プロトコルの䟋

+ +

組み蟌み反埩可胜オブゞェクト

+ +

{{jsxref("String")}}, {{jsxref("Array")}}, {{jsxref("TypedArray")}}, {{jsxref("Map")}}, {{jsxref("Set")}} は、すべおの組み蟌み反埩可胜オブゞェクトです。ずいうのも、それらすべおのプロトタむプオブゞェクトは @@iterator メ゜ッドをも぀からです。

+ +

ナヌザヌ定矩の反埩可胜オブゞェクト

+ +

䞋蚘のように反埩可胜オブゞェクトを生成できたす。

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

反埩可胜オブゞェクトを受け入れる組み蟌み API

+ +

反埩可胜オブゞェクトを受け入れる API はたくさんありたす。以䞋はその䟋です。

+ + + +
new Map([[1, 'a'], [2, 'b'], [3, 'c']]).get(2); // "b"
+
+let myObj = {};
+
+new WeakMap([
+    [{}, 'a'],
+    [myObj, 'b'],
+    [{}, 'c']
+]).get(myObj);             // "b"
+
+new Set([1, 2, 3]).has(3); // true
+new Set('123').has('2');   // true
+
+new WeakSet(function* () {
+    yield {}
+    yield myObj
+    yield {}
+}()).has(myObj);           // true
+
+ +

関連情報

+ + + +

反埩可胜オブゞェクトを期埅する構文

+ +

いく぀かの文や匏は反埩可胜オブゞェクトを期埅したす。䟋えば、 {{jsxref("Statements/for...of", "for...of")}} ルヌプ、{{jsxref("Operators/Spread_syntax", "スプレッド挔算子", "", "1")}}、{{jsxref("Operators/yield*", "yield*")}}、{{jsxref("Operators/Destructuring_assignment", "分割代入", "", "1")}} などです。

+ +
for (let value of ['a', 'b', 'c']) {
+    console.log(value);
+}
+// "a"
+// "b"
+// "c"
+
+console.log([...'abc']);   // ["a", "b", "c"]
+
+function* gen() {
+  yield* ['a', 'b', 'c'];
+}
+
+console.log(gen().next()); // { value: "a", done: false }
+
+[a, b, c] = new Set(['a', 'b', 'c']);
+console.log(a);            // "a"
+
+
+ +

非敎圢反埩可胜オブゞェクト

+ +

反埩可胜オブゞェクトの @@iterator メ゜ッドが反埩子オブゞェクトを返さない堎合、それは非敎圢反埩可胜オブゞェクトず芋なされたす。

+ +

これを䜿甚するず、ランタむム゚ラヌやバグの挙動をもたらす可胜性がありたす。

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

反埩子の䟋

+ +

簡単な反埩子

+ +
function makeIterator(array) {
+  let nextIndex = 0
+  return {
+    next: function() {
+      return nextIndex < array.length ? {
+        value: array[nextIndex++],
+        done: false
+      } : {
+        done: true
+      };
+    }
+  };
+}
+
+let it = makeIterator(['yo', 'ya']);
+
+console.log(it.next().value); // 'yo'
+console.log(it.next().value); // 'ya'
+console.log(it.next().done);  // true
+
+ +

無限の反埩子

+ +
function idMaker() {
+  let index = 0;
+  return {
+    next: function() {
+      return {
+        value: index++,
+        done: false
+      };
+    }
+  };
+}
+
+let it = idMaker();
+
+console.log(it.next().value); // '0'
+console.log(it.next().value); // '1'
+console.log(it.next().value); // '2'
+// ...
+
+ +

ゞェネレヌタヌで

+ +
function* makeSimpleGenerator(array) {
+  let nextIndex = 0;
+  while (nextIndex < array.length) {
+    yield array[nextIndex++];
+  }
+}
+
+let gen = makeSimpleGenerator(['yo', 'ya']);
+
+console.log(gen.next().value); // 'yo'
+console.log(gen.next().value); // 'ya'
+console.log(gen.next().done);  // true
+
+function* idMaker() {
+  let index = 0;
+  while (true) {
+    yield index++;
+  }
+}
+
+let gen = idMaker()
+
+console.log(gen.next().value); // '0'
+console.log(gen.next().value); // '1'
+console.log(gen.next().value); // '2'
+// ...
+
+ +

ES2015 クラスで

+ +
class SimpleClass {
+  constructor(data) {
+    this.data = data;
+  }
+
+  [Symbol.iterator]() {
+    // Use a new index for each iterator. This makes multiple
+    // iterations over the iterable safe for non-trivial cases,
+    // such as use of break or nested looping over the same iterable.
+    let index = 0;
+
+    return {
+      next: () => {
+        if (index < this.data.length) {
+          return {value: this.data[index++], done: false}
+        } else {
+          return {done: true}
+        }
+      }
+    }
+  }
+}
+
+const simple = new SimpleClass([1,2,3,4,5]);
+
+for (const val of simple) {
+  console.log(val); // '1' '2' '3' '4' '5'
+}
+
+ +

ゞェネレヌタヌは反埩子か反埩可胜か

+ +

{{jsxref("Generator", "ゞェネレヌタヌオブゞェクト", "", 1)}} は、反埩子でも反埩可胜でもありたす。

+ +
let aGeneratorObject = function* () {
+  yield 1;
+  yield 2;
+  yield 3;
+}();
+
+console.log(typeof aGeneratorObject.next);
+// "function", because it has a next method, so it's an iterator
+
+console.log(typeof aGeneratorObject[Symbol.iterator]);
+// "function", because it has an @@iterator method, so it's an iterable
+
+console.log(aGeneratorObject[Symbol.iterator]() === aGeneratorObject);
+// true, because its @@iterator method returns itself (an iterator), so it's an well-formed iterable
+
+console.log([...aGeneratorObject]);
+// [1, 2, 3]
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-iteration', 'Iteration')}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/lexical_grammar/index.html b/files/ja/web/javascript/reference/lexical_grammar/index.html new file mode 100644 index 0000000000..c2a2460f19 --- /dev/null +++ b/files/ja/web/javascript/reference/lexical_grammar/index.html @@ -0,0 +1,659 @@ +--- +title: 字句文法 +slug: Web/JavaScript/Reference/Lexical_grammar +tags: + - JavaScript + - Keyword + - Lexical Grammar + - Literal + - キヌワヌド + - リテラル + - 字句文法 +translation_of: Web/JavaScript/Reference/Lexical_grammar +--- +
{{JsSidebar("More")}}
+ +

このペヌゞでは、 JavaScript の字句文法に぀いお説明したす。 ECMAScript スクリプトの゜ヌステキストは、巊から右ぞスキャンされ、入力芁玠、すなわちトヌクン、制埡文字、行末、コメント、{{glossary("whitespace", "ホワむトスペヌス")}}の䞊びに倉換されたす。 ECMAScript も、特定のキヌワヌドずリテラルを定矩しおおり、文を終了するにはセミコロンを自動挿入するためのルヌルがありたす。

+ +

制埡文字

+ +

制埡文字は、芖芚的衚珟を有しおいないものの、テキストの解釈を制埡するために䜿甚されたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unicode の曞匏制埡文字
コヌドポむント名称略語説明
U+200Cれロ幅非接合子<ZWNJ>特定の蚀語においお、合字に接合されるこずを防ぐために、文字の間に配眮されたす。(Wikipedia).
U+200Dれロ幅接合子<ZWJ>特定の蚀語においお、通垞は接合されない文字を、接合した圢を䜿甚しお文字を衚瀺するために文字間に配眮されたす。 (Wikipedia)
U+FEFFバむトオヌダヌマヌク<BOM>スクリプトの先頭においお、 Unicode を䜿甚するこずず、そのテキストのバむト順をマヌクしたす。 (Wikipedia).
+ +

ホワむトスペヌス

+ +

{{glossary("whitespace", "ホワむトスペヌス")}}は゜ヌスのテキストの読みやすさを向䞊させ、トヌクンを互いに区別したす。これらの文字は通垞、コヌドの機胜性には䞍芁なものです。 Minification tools を䜿甚しお、転送する必芁があるデヌタの量を削枛するためにホワむトスペヌスを陀去するこずがよく行われたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ホワむトスペヌス文字
コヌドポむント名称略語説明゚スケヌプシヌケンス
U+0009文字単䜍のタブ<HT>氎平タブ\t
U+000B行単䜍のタブ<VT>垂盎タブ\v
U+000Cフォヌムフィヌド<FF>改ペヌゞの制埡文字 (Wikipedia).\f
U+0020空癜<SP>通垞の空癜
U+00A0ノヌブレヌクスペヌス<NBSP>通垞の空癜だが、改行を行っおよい䜍眮ではない
Others他の Unicode の空癜文字<USP>Spaces in Unicode on Wikipedia
+ +

行末文字

+ +

{{glossary("Whitespace", "ホワむトスペヌス")}}文字に加えお、行末文字も゜ヌスのテキストの読みやすさを改善するために䜿甚されたす。しかし、行末文字は JavaScript の実行に圱響を䞎える堎合があり、犁止されおいる堎所もいくらかありたす。行末文字は自動的なセミコロンの挿入の凊理にも圱響を䞎えたす。行末文字は正芏衚珟の \s クラスに䞀臎したす。

+ +

以䞋の Unicode コヌドポむントのみが ECMAScript では行末文字ずしお扱われ、他の改行文字はホワむトスペヌスずしお扱われたす (䟋えば、次の行、 NEL、 U+0085 はホワむトスペヌスず芋なされたす)。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
行末文字
コヌドポむント名称略語説明゚スケヌプシヌケンス
U+000Aラむンフィヌド<LF>UNIX システムでの改行文字です。\n
U+000Dキャリッゞリタヌン<CR>コモドヌルず初期の Mac システムでの改行文字です。\r
U+2028ラむンセパレヌタヌ<LS>Wikipedia
U+2029改段萜<PS>Wikipedia
+ +

コメント

+ +

コメントは、ヒント、メモ、提案、譊告を JavaScript のコヌドに远加するために䜿甚されたす。これにより、コヌドがより読みやすく、より理解しやすいものなりたす。たた、コヌドが実行されないよう無効にするために䜿甚するこずができたす。これは、貎重なデバッグツヌルになるこずがありたす。

+ +

JavaScript には、コヌド内にコメントを割り圓おる方法が 2 ぀ありたす。

+ +

䞀番目の方法は // コメントです。぀たり、これは同じ行にある、その埌のすべおのテキストをコメントにしたす。䟋えば、

+ +
function comment() {
+  // This is a one line JavaScript comment
+  console.log('Hello world!');
+}
+comment();
+
+ +

二番目の方法は /* */ スタむルで、もっずずっず柔軟なものです。

+ +

䟋えば、単䞀行に利甚した堎合は次のようになりたす。

+ +
function comment() {
+  /* This is a one line JavaScript comment */
+  console.log('Hello world!');
+}
+comment();
+ +

耇数行のコメントも䞋蚘のように䜜成するこずができたす。

+ +
function comment() {
+  /* This comment spans multiple lines. Notice
+     that we don't need to end the comment until we're done. */
+  console.log('Hello world!');
+}
+comment();
+ +

必芁であれば、行の途䞭でコメントを䜿甚するこずもできたすが、これはコヌドが読みにくくなるこずがあるので泚意が必芁です。

+ +
function comment(x) {
+  console.log('Hello ' + x /* insert the value of x */ + ' !');
+}
+comment('world');
+ +

たた、コヌドをコメントで囲むこずで、コヌドが実行されないよう無効にするこずができたす。

+ +
function comment() {
+  /* console.log('Hello world!'); */
+}
+comment();
+ +

この堎合、 console.log() の呌び出しはコメント内郚にあるので、実行されるこずはありたせん。䜕行分のコヌドであっおも、このようにしお無効にするこずができたす。

+ +

ハッシュバンコメント

+ +

特殊な䞉番目のコメントの構文であるハッシュバンコメントは、 ECMAScript で暙準化の途䞭にあるものです (Hashbang Grammar proposal を参照しおください)。

+ +

ハッシュバンコメントは、ちょうど単䞀行コメント (//) のように動䜜したすが、 #! で始たり、スクリプトやモゞュヌルの絶察的な開始䜍眮にある堎合のみ有効です。 #! の前にホワむトスペヌスも蚱されないこずに泚意しおください。このコメントは #! の埌から最初の行の末尟たでのすべおの文字で構成されたす。このコメントは1぀だけが蚱可されたす。

+ +

ハッシュバンコメントは、スクリプトを実行したい特定の JavaScript むンタヌプリタヌぞのパスを指定したす。䟋えば次のようになりたす。

+ +
#!/usr/bin/env node
+
+console.log("Hello world");
+
+ +
+

メモ: JavaScript のハッシュバンコメントは、ファむルを正しいむンタヌプリタヌで実行するために䜿甚される UNIX のシバンを暡倣したものです。

+
+ +
+

ハッシュバンコメントの前に BOM があっおもブラりザヌでは動䜜したすが、ハッシュバンのあるスクリプトで BOM を䜿甚するこずは掚奚されおいたせん。 BOM は Unix/Linux でスクリプトを実行しようずするず動䜜したせん。したがっお、シェルから盎接スクリプトを実行したい堎合は BOM の付かない UTF-8 を䜿甚しおください。

+
+ +

#! の圢のコメントは JavaScript むンタヌプリタヌを指定するためにだけ䜿甚しおください。他の甚途ではすべお // のコメント (たたは耇数行コメント) を䜿甚しおください。

+ +

キヌワヌド

+ +

ECMAScript 2015 における予玄キヌワヌド

+ + + +

今埌の予玄枈みキヌワヌド

+ +

以䞋のものは、 ECMAScript の仕様によっお今埌のキヌワヌドずしお予玄されおいたす。これらは珟時点では特別な機胜を持っおいたせんが、将来は持぀可胜性があるので、識別子ずしお䜿甚するこずはできたせん。

+ +

以䞋のものは垞に予玄されおいたす。

+ + + +

以䞋のものは、 strict モヌドで遭遇した堎合のみ予玄語になりたす。

+ + + +

以䞋のものは、モゞュヌルコヌドで遭遇した堎合のみ予玄語になりたす。

+ + + +

旧仕様にあった今埌の予玄キヌワヌド

+ +

以前の ECMAScript の仕様曞 (ECMAScript 1 から 3 たで) では、以䞋のものが将来のキヌワヌドずしお予玄されおいたす。

+ + + +

加えお、 null, true, false の各リテラルは、 ECMAScript では識別子ずしお䜿甚するこずができたせん。

+ +

予玄語の䜿甚

+ +

予玄語は実際には (IdentifierName ではなく) 識別子にのみ適甚されたす。 es5.github.com/#A.1 に蚘茉されおいるように、これらはすべおIdentifierName であり、ReservedWord を陀倖したせん。

+ +
a.import
+a['import']
+a = { import: 'test' }.
+
+ +

䞀方、以䞋のものはIdentifier であり、IdentifierName から予玄語を陀倖したものであるからです。識別子は、FunctionDeclaration,FunctionExpression,VariableDeclaration などのために䜿甚されたす。 Identifiers はFunctionDeclaration,FunctionExpression,VariableDeclaration などに぀いお䜿甚されたす。IdentifierNames はMemberExpression,CallExpression などに぀いお䜿甚されたす。

+ +
function import() {} // 違反
+ +

リテラル

+ +

Null リテラル

+ +

詳现に぀いおは {{jsxref("null")}} をご芧ください。

+ +
null
+ +

真停倀リテラル

+ +

詳现に぀いお、 {{jsxref("Boolean")}} をご芧ください。

+ +
true
+false
+ +

数倀リテラル

+ +

{{jsxref("Number")}} および {{jsxref("BigInt")}} 型が数倀リテラルを䜿甚したす。

+ +

10進数

+ +
1234567890
+42
+
+// 先頭にれロがあるものを䜿甚する堎合は泚意しおください
+0888 // 888 は10進数ずしお解釈されたす
+0777 // 8進数ずしお解釈され、10進数では 511 です。
+
+ +

なお、10進数リテラルはれロ (0) から始め、他の10進数の数字を続けるこずができたすが、 0 に続く数字がすべお8より小さい堎合は、その数倀が8進数ずしお解釈されるこずに泚意しおください。 JavaScript では、この堎合に䟋倖が発生したせんので、 {{bug(957513)}} をご芧ください。 {{jsxref("parseInt", "parseInt()")}} に぀いおのペヌゞもご芧ください。

+ +

2進数

+ +

2進数の構文は、先頭のれロに続いお小文字たたは倧文字のラテン文字 "B" を䜿甚したす (0b たたは 0B)。この構文は ECMAScript 2015 の新しい構文なので、䞋蚘のブラりザヌ互換性衚をご芧ください。 0b の埌の数字が 0 たたは 1 でない堎合は、 {{jsxref("SyntaxError")}} が "Missing binary digits after 0b" の内容で発生したす。

+ +
var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
+var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
+var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
+ +

8進数

+ +

8進数の構文は、先頭のれロに続いお小文字たたは倧文字のラテン文字"O" を䜿甚したす (0o たたは 0O)。この構文は ECMAScript 2015 の新しい構文なので、䞋蚘のブラりザヌ互換性衚をご芧ください。 0o の埌の数字が範囲 (01234567) 倖の堎合、 {{jsxref("SyntaxError")}} が "Missing octal digits after 0o" の内容で発生したす。

+ +
var n = 0O755; // 493
+var m = 0o644; // 420
+
+// れロだけで始めるこずもできたす (䞊蚘の10進数に぀いおのメモを参照)
+0755
+0644
+
+ +

16進数

+ +

16進数の構文は、先頭のれロに続いお小文字たたは倧文字のラテン文字"X" を䜿甚したす (0x たたは 0X)。 0x の埌の数字が範囲 (0123456789ABCDEF) 倖の堎合、 {{jsxref("SyntaxError")}} が "Identifier starts immediately after numeric literal" の内容で発生したす。

+ +
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
+0x123456789ABCDEF   // 81985529216486900
+0XA                 // 10
+
+ +

BigInt リテラル

+ +

{{jsxref("BigInt")}} 型は JavaScript のプリミティブな数倀であり、自由な粟床の敎数を衚すこずができたす。 BigInt リテラルは、敎数の末尟に n を远加するこずで䜜成されたす。

+ +
123456789123456789n     (10進数)
+0o777777777777n         (8進数)
+0x123456789ABCDEFn      ("hex" たたは16進数)
+0b11101001010101010101n (2進数)
+
+ +

なお、先頭がれロだけの8進数は BigInt では動䜜したせん。

+ +
// 0755n
+// SyntaxError: invalid BigInt syntax
+ +

8進数の BigInt 数倀では、垞にれロの埌に "o" (倧文字でも小文字でも) を付けお䜿甚しおください。

+ +
0o755n
+ +

BigInt に぀いおの詳现な情報は、 JavaScript デヌタ構造をご芧ください。

+ +

数倀の区切り文字

+ +

数倀リテラルの可読性を高めるために、アンダヌスコア (_, U+005F) を区切り文字ずしお䜿甚するこずができたす。

+ +
// 10進数の区切り文字
+1_000_000_000_000
+1_050.95
+
+// 2進数の区切り文字
+0b1010_0001_1000_0101
+
+// 8進数の区切り文字
+0o2_2_5_6
+
+// 16進数の区切り文字
+0xA0_B0_C0
+
+// BigInt の区切り文字
+1_000_000_000_000_000_000_000n
+
+ +

なお、以䞋の制限がありたす。

+ +
// 連続しお2぀以䞊のアンダヌスコアは蚱可されおいたせん
+100__000; // SyntaxError
+
+// 数倀リテラルの末尟に眮くこずは蚱可されおいたせん
+100_; // SyntaxError
+
+// 先頭の 0 の埌に䜿甚するこずはできたせん
+0_1; // SyntaxError
+
+ +

オブゞェクトリテラル

+ +

詳现に぀いおは、 {{jsxref("Object")}} ずオブゞェクト初期化子をご芧ください。

+ +
var o = { a: 'foo', b: 'bar', c: 42 };
+
+// ES2015 で導入された短瞮衚蚘
+var a = 'foo', b = 'bar', c = 42;
+var o = {a, b, c};
+
+// 以前の衚蚘
+var o = { a: a, b: b, c: c };
+
+ +

配列リテラル

+ +

詳现に぀いおは {{jsxref("Array")}} をご芧ください。

+ +
[1954, 1974, 1990, 2014]
+ +

文字列リテラル

+ +

文字列リテラルは、単䞀匕甚笊たたは二重匕甚笊に囲たれた零個以䞊の Unicode コヌドポむントです。 Unicode コヌドポむントぱスケヌプシヌケンスで衚すこずもできたす。以䞋の匕甚笊を閉じるコヌドポむントを陀いお、すべおのコヌドポむントが文字列リテラルに珟れるこずができたす。

+ + + +

proposal to make all JSON text valid ECMA-262 より以前は、 U+2028 <LS> および U+2029 <PS> は文字列リテラル内に゚スケヌプせずに珟れるこずができたせんでした。

+ +

すべおのコヌドポむントが、゚スケヌプシヌケンスの圢で珟れるこずができたす。文字列リテラルは ECMAScript の文字列倀ずしお評䟡されたす。これらの String の倀を生成する際に、 Unicode コヌドポむントは UTF-16 ゚ンコヌドされたす。

+ +
'foo'
+"bar"
+ +

16進゚スケヌプシヌケンス

+ +

16進゚スケヌプシヌケンスは \x に続いおちょうど2桁の16進数から成り、 0x0000 から 0x00FF たでのコヌド単䜍たたはコヌドポむントを衚したす。

+ +
'\xA9' // "©"
+
+ +

Unicode ゚スケヌプシヌケンス

+ +

Unicode ゚スケヌプシヌケンスは \u に続いおちょうど4桁の16進数から成りたす。これで UTF-16 ゚ンコヌディングのコヌド単䜍を衚したす。コヌドポむント U+0000 から U+FFFF たでは、コヌド単䜍ずコヌドポむントは等しくなりたす。コヌドポむント U+10000 から U+10FFFF たでは、2぀の゚スケヌプシヌケンスで2぀のコヌド単䜍 (サロゲヌトペア) を衚す必芁がありたす。サロゲヌトペアはコヌドポむントで区別されたす。

+ +

See also {{jsxref("String.fromCharCode()")}} and {{jsxref("String.prototype.charCodeAt()")}}.

+ +
'\u00A9' // "©" (U+A9)
+ +

Unicode コヌドポむント゚スケヌプ

+ +

Unicode コヌドポむント゚スケヌプは \u{ に続いお16進数のコヌドポむントが続き、 } が続きたす。16進数の倀は 0 から 0x10FFFF たでの範囲に含たれおいる必芁がありたす。 U+10000 から U+10FFFF たでの範囲のコヌドポむントを、サロゲヌトペアずしお衚す必芁はありたせん。コヌドポむント゚スケヌプは ECMAScript 2015 (ES6) で JavaScript に远加されたした。

+ +

{{jsxref("String.fromCodePoint()")}} たたは {{jsxref("String.prototype.codePointAt()")}} もご芧ください。

+ +
'\u{2F804}' // CJK COMPATIBILITY IDEOGRAPH-2F804 (U+2F804)
+
+// the same character represented as a surrogate pair
+'\uD87E\uDC04'
+ +

正芏衚珟リテラル

+ +

詳现に぀いおは {{jsxref("RegExp")}} を参照しおください。

+ +
/ab+c/g
+
+// 「空の」正芏衚珟リテラル
+// 単䞀行コメントず区別するために、空のキャプチャしない
+// グルヌプが必芁です。
+/(?:)/
+ +

テンプレヌトリテラル

+ +

詳现に぀いお、template strings をご芧ください。

+ +
`string text`
+
+`string text line 1
+ string text line 2`
+
+`string text ${expression} string text`
+
+tag `string text ${expression} string text`
+ +

自動セミコロン挿入

+ +

䞀郚の JavaScript 文はセミコロンで終わる必芁がありたす。したがっお、自動セミコロン挿入 (ASI) の圱響を受けたす。:

+ + + +

ECMAScript 仕様曞は、セミコロン挿入の3぀の芏則に蚀及しおいたす。

+ +

1. 文法䞊蚱されない䜍眮で行末文字たたは "}" に遭遇したずき、セミコロンが前に挿入されたす。

+ +
{ 1 2 } 3
+
+// 䞊蚘の文は、 ASI によっお次のように倉換されたす
+
+{ 1 2 ;} 3;
+ +

2. トヌクンの入力ストリヌムの終末が怜出され、パヌサヌが単䞀の入力ストリヌムを完党なプログラムずしお解釈できない堎合、末尟にセミコロンが挿入されたす。

+ +

ここで ++ は、倉数 b に適甚される 埌眮挔算子ずしおは扱われたせん。ずいうのも、行末文字が b ず++ の間に芋られるからです。

+ +
a = b
+++c
+
+// 䞊蚘の文は、 ASI によっお次のように倉換されたす
+
+a = b;
+++c;
+
+ +

3. 文法䞊、成果が制限された文の盎埌に行末文字が来た時、末尟にセミコロンが挿入されたす。以䞋の文が "no LineTerminator here" 芏則を持っおいたす。

+ + + +
return
+a + b
+
+// 䞊蚘の文は、 ASI によっお次のように倉換されたす
+
+return;
+a + b;
+
+ +

仕様曞

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様曞状態備考
{{SpecName('ESDraft', '#sec-ecmascript-language-lexical-grammar', 'Lexical Grammar')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-ecmascript-language-lexical-grammar', 'Lexical Grammar')}}{{Spec2('ES6')}}远加: 2進数リテラル ず 8進数リテラル、 Unicode コヌドポむント゚スケヌプ、テンプレヌト
{{SpecName('ES5.1', '#sec-7', 'Lexical Conventions')}}{{Spec2('ES5.1')}}
{{SpecName('ES1')}}{{Spec2("ES1")}}初回定矩
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.grammar")}}

+ +

実装の進捗状況

+ +

この機胜はただブラりザヌ間の安定性が十分でないため、以䞋の図は、この機胜の日々の実装状況を衚しおいたす。このデヌタは暙準的な JavaScript のテストスむヌトである Test262 においお、各ブラりザヌの JavaScript ゚ンゞンの nightly build たたは最新リリヌスでこの機胜の関連機胜を実行するこずによっお生成されおいたす。

+ +
{{EmbedTest262ReportResultsTable("hashbang")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/addition/index.html b/files/ja/web/javascript/reference/operators/addition/index.html new file mode 100644 index 0000000000..d87d6a2894 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/addition/index.html @@ -0,0 +1,82 @@ +--- +title: 加算 (+) +slug: Web/JavaScript/Reference/Operators/Addition +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Addition +--- +
{{jsSidebar("Operators")}}
+ +

加算挔算子 (+) は、数倀オペランドたたは文字列連結の合蚈を生成したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-addition.html")}}
+ +
+ + + +

構文

+ +
Operator: x + y
+
+ +

䟋

+ +

数倀加算

+ +
// 数倀 + 数倀 -> 加算
+1 + 2 // 3
+
+// ブヌル倀 + 数倀 -> 加算
+true + 1 // 2
+
+// ブヌル倀 + ブヌル倀 -> 加算
+false + false // 0
+
+ +

文字列連結

+ +
// 文字列 + 文字列 -> 連結
+'foo' + 'bar' // "foobar"
+
+// 数倀 + 文字列 -> 連結
+5 + 'foo' // "5foo"
+
+// 文字列 + ブヌル倀 -> 連結
+'foo' + false // "foofalse"
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-addition-operator-plus', 'Addition operator')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.addition")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/addition_assignment/index.html b/files/ja/web/javascript/reference/operators/addition_assignment/index.html new file mode 100644 index 0000000000..d2e2a59492 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/addition_assignment/index.html @@ -0,0 +1,78 @@ +--- +title: 加算代入 (+=) +slug: Web/JavaScript/Reference/Operators/Addition_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Addition_assignment +--- +
{{jsSidebar("Operators")}}
+ +

加算代入挔算子 (+=) は、右蟺のオペランドの倀を倉数に加算し、結果を倉数に代入したす。 2぀のオペランドの型は、加算代入挔算子の動䜜を決定したす。加算もしくは連結が可胜です。

+ +
{{EmbedInteractiveExample("pages/js/expressions-addition-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x += y
+Meaning:  x  = x + y
+ +

䟋

+ +

加算代入の䜿甚

+ +
// 以䞋の倉数を想定
+//  foo = 'foo'
+//  bar = 5
+//  baz = true
+
+// 数倀 + 数倀 -> 加算
+bar += 2 // 7
+
+// ブヌル倀 + 数倀 -> 加算
+baz += 1 // 2
+
+// ブヌル倀 + ブヌル倀 -> 加算
+baz += false // 1
+
+// 数倀 + 文字列 -> 連結
+bar += 'foo' // "5foo"
+
+// 文字列 + ブヌル倀 -> 連結
+foo += false // "foofalse"
+
+// 文字列 + 文字列 -> 連結
+foo += 'bar' // "foobar"
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.addition_assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/array_comprehensions/index.html b/files/ja/web/javascript/reference/operators/array_comprehensions/index.html new file mode 100644 index 0000000000..814bdd9eb7 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/array_comprehensions/index.html @@ -0,0 +1,198 @@ +--- +title: 配列内包衚蚘 +slug: Web/JavaScript/Reference/Operators/Array_comprehensions +tags: + - JavaScript + - Non-standard + - Operator + - Reference +translation_of: Archive/Web/JavaScript/Array_comprehensions +--- +
非暙準。䜿甚しないでください!
+配列内包は非暙準であり、Firefox 58 から削陀されおいたす。将来向きの甚途には、{{jsxref("Array.prototype.map")}}、{{jsxref("Array.prototype.filter")}}、{{jsxref("Functions/Arrow_functions", "アロヌ関数", "", 1)}}、{{jsxref("Operators/Spread_operator", "スプレッド構文", "", 1)}} の䜿甚を怜蚎しおください。
+ +
{{jsSidebar("Operators")}}
+ +

array comprehension 構文は、既存のものに基づいおいる新しい配列をすばやく組み立おるこずができるJavaScriptの匏でした。しかし、これは暙準仕様や Firefox の実装から削陀されたした。䜿甚しないでください!

+ +

構文

+ +
[for (x of iterable) x]
+[for (x of iterable) if (condition) x]
+[for (x of iterable) for (y of iterable) x + y]
+
+ +

説明

+ +

配列の内包衚蚘内で、䞋蚘の二皮類のコンポヌネントが蚱されおいたす。:

+ + + +

for-of むテレヌションは垞に最初のコンポヌネントです。耇数のfor-of むテレヌションは、ステヌトメントが蚱可されおいる堎合。

+ +

配列内包は以前、ECMAScript 2016 で暙準化を提案されおいたした。これは別のものに基づいお新たな配列を構成するための手っ取り早い方法を提䟛したす。配列内包は䞀般に、{{jsxref("Array.prototype.map", "map()")}} および {{jsxref("Array.prototype.filter", "filter()")}} を呌び出す代わりずしお、あるいはそれら 2 ぀を結合する手段ずしお甚いるこずができたす。

+ +

次の配列内包は数倀の配列を取り蟌んで、その各数倀を 2 倍した倀による新しい配列を䜜成したす。

+ +
var numbers = [1, 2, 3, 4];
+var doubled = [for (i of numbers) i * 2];
+console.log(doubled); // logs 2,4,6,8
+
+ +

これは以䞋の {{jsxref("Array.prototype.map", "map()")}} による操䜜ず同等です:

+ +
var doubled = numbers.map(i => i * 2);
+
+ +

配列内包は、特定の匏にマッチするアむテムの遞択に甚いるこずもできたす。以䞋は、偶数だけを遞択する内包です:

+ +
var numbers = [1, 2, 3, 21, 22, 30];
+var evens = [for (i of numbers) if (i % 2 === 0) i];
+console.log(evens); // logs 2,22,30
+
+ +

同じ目的で {{jsxref("Array.prototype.filter", "filter()")}} を甚いるこずができたす:

+ +
var evens = numbers.filter(i => i % 2 === 0);
+
+ +

{{jsxref("Array.prototype.map", "map()")}} および {{jsxref("Array.prototype.filter", "filter()")}} 方匏の操䜜を、ひず぀の配列内包に統合するこずができたす。以䞋は偶数だけをフィルタリングしお、それらを 2 倍した倀を含む配列を䜜成したす:

+ +
var numbers = [1, 2, 3, 21, 22, 30];
+var doubledEvens = [for (i of numbers) if (i % 2 === 0) i * 2];
+console.log(doubledEvens); // logs 4,44,60
+
+ +

配列内包の角括匧は、スコヌプ目的の暗黙的なブロックをもたらしたす。新しい倉数 (䞊蚘の䟋における i ) は、{{jsxref("Statements/let","let")}} を甚いお宣蚀されたかのように扱われたす。぀たり、それらの倉数は配列内包の倖郚で䜿甚できたせん。

+ +

配列内包の入力自䜓は、配列である必芁はありたせん。むテレヌタおよびゞェネレヌタ も䜿甚できたす。

+ +

文字列を入力ずするこずもできたす。(配列状のオブゞェクトにおいお) 前出の filter や map の動䜜を実珟するには以䞋のようにしたす:

+ +
var str = 'abcdef';
+var consonantsOnlyStr = [for (c of str) if (!(/[aeiouAEIOU]/).test(c)) c].join(''); // 'bcdf'
+var interpolatedZeros = [for (c of str) c + '0' ].join(''); // 'a0b0c0d0e0f0'
+
+ +

繰り返しになりたすが入力デヌタの圢匏は維持されたせんので、文字列ぞ戻すために {{jsxref("Array.prototype.join", "join()")}} を䜿甚しなければなりたせん。

+ +

䟋

+ +

簡単な配列の内包衚蚘

+ +
[for (i of [ 1, 2, 3 ]) i*i ];
+// [ 1, 4, 9 ]
+
+var abc = [ "A", "B", "C" ];
+[for (letters of abc) letters.toLowerCase()];
+// [ "a", "b", "c" ]
+ +

if文で配列の内包衚蚘

+ +
var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
+[for (year of years) if (year > 2000) year];
+// [ 2006, 2010, 2014 ]
+[for (year of years) if (year > 2000) if(year < 2010) year];
+// [ 2006], the same as below:
+[for (year of years) if (year > 2000 && year < 2010) year];
+// [ 2006]
+
+ +

mapずfilterを比范する配列の内包衚蚘

+ +

配列の内包衚蚘構文を理解する簡単な方法は、Array {{jsxref("Array.map", "map")}}や{{jsxref("Array.filter", "filter")}}メ゜ッドず比范するこずです。:

+ +
var numbers = [ 1, 2, 3 ];
+
+numbers.map(function (i) { return i * i });
+numbers.map(i => i*i);
+[for (i of numbers) i*i ];
+// all are [ 1, 4, 9 ]
+
+numbers.filter(function (i) { return i < 3 });
+numbers.filter(i => i < 3);
+[for (i of numbers) if (i < 3) i];
+// all are [ 1, 2 ]
+
+ +

二぀の配列の内包衚蚘

+ +

二぀の配列で動䜜させるために二぀のfor-ofむテレヌションを䜿甚する:

+ +
var numbers = [ 1, 2, 3 ];
+var letters = [ "a", "b", "c" ];
+
+var cross = [for (i of numbers) for (j of letters) i+j];
+// [ "1a", "1b", "1c", "2a", "2b", "2c", "3a", "3b", "3c" ]
+
+var grid = [for (i of numbers) [for (j of letters) i+j]];
+// [
+//  ["1a", "1b", "1c"],
+//  ["2a", "2b", "2c"],
+//  ["3a", "3b", "3c"]
+// ]
+
+[for (i of numbers) if (i > 1) for (j of letters) if(j > "a") i+j]
+// ["2b", "2c", "3b", "3c"], the same as below:
+
+[for (i of numbers) for (j of letters) if (i > 1) if(j > "a") i+j]
+// ["2b", "2c", "3b", "3c"]
+
+[for (i of numbers) if (i > 1) [for (j of letters) if(j > "a") i+j]]
+// [["2b", "2c"], ["3b", "3c"]], not the same as below:
+
+[for (i of numbers) [for (j of letters) if (i > 1) if(j > "a") i+j]]
+// [[], ["2b", "2c"], ["3b", "3c"]]
+
+ +

仕様

+ +

最初は ECMAScript 2015 のドラフトでしたが、リビゞョン 27 (2014 幎 8 月) で取り陀かれたした。仕様セマンティクスのために ES2015 の叀いリビゞョンを参照しおください。

+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.array_comprehensions")}}

+ +

叀い JS1.7/JS1.8 の内包衚蚘ずの違い

+ +
JS1.7/JS1.8 の内包衚蚘は、バヌゞョン 46 で Gecko から削陀したした ({{bug(1220564)}})。
+ +

叀い内包衚蚘の構文 (䜿甚しないでください!):

+ +
[X for (Y in Z)]
+[X for each (Y in Z)]
+[X for (Y of Z)]
+
+ +

違い:

+ + + +

コヌド曎新の提案に぀いお、Bug 1220564 のコメント 42 をご芧ください。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/assignment/index.html b/files/ja/web/javascript/reference/operators/assignment/index.html new file mode 100644 index 0000000000..acf35e7514 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/assignment/index.html @@ -0,0 +1,62 @@ +--- +title: 代入 (=) +slug: Web/JavaScript/Reference/Operators/Assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Assignment +--- +
{{jsSidebar("Operators")}}
+ +

代入単玔代入挔算子 (=) は、倉数に倀を代入するために䜿甚されたす。割り圓お操䜜は、割り圓おられた倀を評䟡したす。 単䞀の倀を耇数の倉数に割り圓おるため、代入挔算子の連鎖が可胜です。

+ +
{{EmbedInteractiveExample("pages/js/expressions-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x = y
+
+ +

䟋

+ +

代入ず連鎖

+ +
// 以䞋の倉数を想定
+//  x = 5
+//  y = 10
+//  z = 25
+
+x = y     // x は 10
+x = y = z // x, y そしお z は党お 25
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/async_function/index.html b/files/ja/web/javascript/reference/operators/async_function/index.html new file mode 100644 index 0000000000..f6b13ca9f2 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/async_function/index.html @@ -0,0 +1,151 @@ +--- +title: 非同期関数匏 +slug: Web/JavaScript/Reference/Operators/async_function +tags: + - Experimental + - Function + - JavaScript + - Operator + - Primary Expression +translation_of: Web/JavaScript/Reference/Operators/async_function +--- +
{{jsSidebar("Operators")}}
+ +

async function キヌワヌドは、匏内で async function を定矩するために䜿甚できたす。

+ +

構文

+ +
async function [name]([param1[, param2[, ..., paramN]]]) {
+   statements
+}
+ +

匕数

+ +
+
name
+
関数名。関数が匿名の堎合、省略可胜。名前は関数ボディヌ内のみのロヌカル。
+
paramN
+
関数に枡される匕数名。
+
statements
+
関数ボディヌを構成するステヌトメント。
+
+ +

説明

+ +

async function 匏は {{jsxref('Statements/async_function', 'async function statement')}} ず非垞に䌌おおり、構文もほずんど同じです。async function 匏ず async function ステヌトメントの䞻な違いは、async function 匏は匿名関数を生成するために関数名を省略できる点です。async function 匏は、定矩埌盎ちに実行される IIFE即時実行関数匏ずしお䜿甚するこずもできたす。詳现は function の章を芋おください。

+ +

䟋

+ +

シンプルな䟋

+ +
function resolveAfter2Seconds(x) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      resolve(x);
+    }, 2000);
+  });
+};
+
+(async function(x) { // async function expression used as an IIFE
+  var a = resolveAfter2Seconds(20);
+  var b = resolveAfter2Seconds(30);
+  return x + await a + await b;
+})(10).then(v => {
+  console.log(v);  // prints 60 after 2 seconds.
+});
+
+var add = async function(x) { // async function expression assigned to a variable
+  var a = await resolveAfter2Seconds(20);
+  var b = await resolveAfter2Seconds(30);
+  return x + a + b;
+};
+
+add(10).then(v => {
+  console.log(v);  // prints 60 after 4 seconds.
+});
+
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様ステヌタスコメント
{{SpecName('Async Function', '#async-function-definitions', 'async function')}}{{Spec2('Async Function')}}提案
+ +

ブラりザヌ実装状況

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
機胜ChromeFirefox (Gecko)Internet Explorer EdgeOperaSafari (WebKit)
基本サポヌト{{CompatChrome(55)}}{{CompatGeckoDesktop("52.0")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatOpera(42)}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
機胜AndroidAndroid WebviewFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
基本サポヌト{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile("52.0")}}{{CompatUnknown}}{{CompatOpera(42)}}{{CompatUnknown}}{{CompatChrome(55)}}
+
+ +

 

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/await/index.html b/files/ja/web/javascript/reference/operators/await/index.html new file mode 100644 index 0000000000..775ce4a787 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/await/index.html @@ -0,0 +1,139 @@ +--- +title: await +slug: Web/JavaScript/Reference/Operators/await +tags: + - Function + - JavaScript + - Language feature + - Operator + - Primary Expression +translation_of: Web/JavaScript/Reference/Operators/await +--- +
{{jsSidebar("Operators")}}
+ +

await 挔算子は、{{jsxref("Statements/async_function", "async function")}} によっお {{jsxref("Promise")}} が返されるのを埅機するために䜿甚したす。

+ +

構文

+ +
[rv] = await expression;
+ +
+
expression
+
解決を埅぀ {{jsxref("Promise")}} もしくは䜕らかの倀。
+
rv
+
+

解決された promise の倀。expression が Promise ではない堎合はその倀自䜓を返す。

+
+
+ +

説明

+ +

await 匏は async function の実行を䞀時停止し、Promise の解決たたは拒吊を埅ちたす。解決した埌に async function の実行を再開したす。再開するずきに await 匏は解決された Promise にラップされた倀を返したす。

+ +

Promise が拒吊された堎合、await 匏は理由ずなった倀を投げたす。

+ +

await 匏に続く倀が Promise ではなかった堎合、解決された Promise に倉換されたす。

+ +

await は実行フロヌを分割できるため、await の関数の呌び出し元は、await の関数の遅延継続の前に実行を再開できたす。await がその関数の継続を延期した埌、これが関数によっお実行される最初の await でれば、await の関数の完了を求める保留䞭の Promise を関数の呌び出し元に返し、その呌び出し元の実行を再開するこずによっお、即時実行も続行されたす。

+ +

䟋

+ +

promise の解決を埅぀

+ +

Promise が await 匏で停止された堎合、Promise が解決されお、解決された倀を返すのを埅ちたす。

+ +
function resolveAfter2Seconds(x) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      resolve(x);
+    }, 2000);
+  });
+}
+
+async function f1() {
+  var x = await resolveAfter2Seconds(10);
+  console.log(x); // 10
+}
+
+f1();
+
+ +

Thenable オブゞェクト

+ +

{{jsxref("Global_Objects/Promise/then", "Thenable オブゞェクト")}}もたったく同じように実行されたす。

+ +
async function f2() {
+  const thenable = {
+    then: function(resolve, _reject) {
+      resolve('resolved!')
+    }
+  };
+  console.log(await thenable); // resolved!
+}
+
+f2();
+
+ +

Promise ぞの倉換

+ +

倀が Promise でない堎合は、倀を解決枈みの Promise に倉換しお埅ちたす。

+ +
async function f3() {
+  var y = await 20;
+  console.log(y); // 20
+}
+
+f3();
+ +

Promise の拒吊

+ +

Promise が拒吊された堎合、拒吊された倀が投げられたす。

+ +
async function f4() {
+  try {
+    var z = await Promise.reject(30);
+  } catch(e) {
+    console.error(e); // 30
+  }
+}
+
+f4();
+ +

拒吊された Promise を凊理する

+ +

拒吊された Promise は try 文を䜿甚せずに゚ラヌハンドリングを行えたす。

+ +
var response = await promisedFunction().catch((err) => { console.error(err); });
+// response will be undefined if the promise is rejected
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName("ESDraft", "#sec-async-function-definitions", "async functions")}}
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.operators.await")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/bitwise_and/index.html b/files/ja/web/javascript/reference/operators/bitwise_and/index.html new file mode 100644 index 0000000000..80a4644aee --- /dev/null +++ b/files/ja/web/javascript/reference/operators/bitwise_and/index.html @@ -0,0 +1,114 @@ +--- +title: ビット論理積 (&) +slug: Web/JavaScript/Reference/Operators/Bitwise_AND +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Bitwise_AND +--- +
{{jsSidebar("Operators")}}
+ +

ビット論理積挔算子 (&) は、䞡方のオペランドの察応するビットのいずれもが 1 である䜍眮のビットで 1 を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-and.html")}}
+ + + +

構文

+ +
a & b
+
+ +

解説

+ +

オペランドは32ビットの敎数倀に倉換され、ビット (れロたたは1) の䞊びによっお衚珟されたす。32ビットを超える数倀は最䞊䜍のビットが砎棄されたす。䟋えば、次の32ビットを超える敎数は32ビット敎数に倉換されたす。

+ +
倉換前: 11100110111110100000000000000110000000000001
+倉換埌:             10100000000000000110000000000001
+ +

第1オペランドの各ビットは、第2オペランドの察応するビットず組み合わせになりたす。第1ビットは第1ビットぞ、第2ビットは第2ビットぞ、ずいう具合にです。

+ +

この挔算子は各ビットの組み合わせに適甚され、結果はビット単䜍で構築されたす。

+ +

AND 挔算の真理倀衚は次のようになりたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba AND b
000
010
100
111
+ +
.    9 (10進数) = 00000000000000000000000000001001 (2進数)
+    14 (10進数) = 00000000000000000000000000001110 (2進数)
+                   --------------------------------
+14 | 9 (10進数) = 00000000000000000000000000001000 (2進数) = 8 (10進数)
+
+ +

任意の x ず 0 のビット論理積は 0 になりたす。

+ +

䟋

+ +

ビット論理積の䜿甚

+ +
// 5: 00000000000000000000000000000101
+// 2: 00000000000000000000000000000010
+5 & 2; // 0
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#prod-BitwiseANDExpression', 'Bitwise AND expression')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.bitwise_and")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/bitwise_and_assignment/index.html b/files/ja/web/javascript/reference/operators/bitwise_and_assignment/index.html new file mode 100644 index 0000000000..431e576433 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/bitwise_and_assignment/index.html @@ -0,0 +1,64 @@ +--- +title: ビット論理積代入 (&=) +slug: Web/JavaScript/Reference/Operators/Bitwise_AND_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference + - 代入挔算子 + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Bitwise_AND_assignment +--- +
{{jsSidebar("Operators")}}
+ +

ビット論理積代入挔算子 (&=) は、䞡方のオペランドのバむナリ衚珟を䜿甚し、それらに察しおビット単䜍の AND 挔算を実行しお、結果を倉数に代入したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-and-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x &= y
+Meaning:  x  = x & y
+
+ +

䟋

+ +

ビット論理積代入の䜿甚

+ +
let a = 5;
+// 5:     00000000000000000000000000000101
+// 2:     00000000000000000000000000000010
+a &= 2; // 0
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.bitwise_and_assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/bitwise_not/index.html b/files/ja/web/javascript/reference/operators/bitwise_not/index.html new file mode 100644 index 0000000000..ddd2d99c4d --- /dev/null +++ b/files/ja/web/javascript/reference/operators/bitwise_not/index.html @@ -0,0 +1,102 @@ +--- +title: ビット吊定 (~) +slug: Web/JavaScript/Reference/Operators/Bitwise_NOT +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Bitwise_NOT +--- +
{{jsSidebar("Operators")}}
+ +

ビット吊定挔算子 (~) は、オペランドの各ビットを反転したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-not.html")}}
+ +
+ + + +

構文

+ +
~a
+
+ +

解説

+ +

オペランドは32ビットの敎数倀に倉換され、ビット (れロたたは1) の䞊びによっお衚珟されたす。32ビットを超える数倀は最䞊䜍のビットが砎棄されたす。䟋えば、次の32ビットを超える敎数は32ビット敎数に倉換されたす。

+ +
倉換前: 11100110111110100000000000000110000000000001
+倉換埌:             10100000000000000110000000000001
+ +

第1オペランドの各ビットは、第2オペランドの察応するビットず組み合わせになりたす。第1ビットは第1ビットぞ、第2ビットは第2ビットぞ、ずいう具合にです。

+ +

この挔算子は各ビットの組み合わせに適甚され、結果はビット単䜍に構築されたす。

+ +

NOT 挔算の真理倀衚は次のようになりたす。

+ + + + + + + + + + + + + + + + + + +
aNOT a
01
10
+ +
 9 (10進数) = 00000000000000000000000000001001 (2進数)
+               --------------------------------
+~9 (10進数) = 11111111111111111111111111110110 (2進数) = -10 (10進数)
+
+ +

ある数 x のビット吊定 は -(x + 1) になりたす。䟋えば、~-5 は 4 になりたす。

+ +

数倀に32ビット衚珟を䜿甚するため ~-1 および ~4294967295 (232-1) はいずれも 0 になるこずに泚意しおください。

+ +

䟋

+ +

ビット吊定の䜿甚

+ +
~0;  // -1
+~-1; // 0
+~1;  // -2
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-unary-operators', 'Unary NOT expression')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.bitwise_not")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/bitwise_or/index.html b/files/ja/web/javascript/reference/operators/bitwise_or/index.html new file mode 100644 index 0000000000..f6317e19bc --- /dev/null +++ b/files/ja/web/javascript/reference/operators/bitwise_or/index.html @@ -0,0 +1,116 @@ +--- +title: ビット論理和 (|) +slug: Web/JavaScript/Reference/Operators/Bitwise_OR +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Bitwise_OR +--- +
{{jsSidebar("Operators")}}
+ +

ビット論理和挔算子 (|) は、䞡方のオペランドの察応するビットのどちらか䞀方が 1 である䜍眮のビットで 1 を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-or.html")}}
+ + + +

構文

+ +
a | b
+
+ +

解説

+ +

オペランドは32ビットの敎数倀に倉換され、ビット (れロたたは1) の䞊びによっお衚珟されたす。32ビットを超える数倀は最䞊䜍のビットが砎棄されたす。䟋えば、次の32ビットを超える敎数は32ビット敎数に倉換されたす。

+ +
倉換前: 11100110111110100000000000000110000000000001
+倉換埌:             10100000000000000110000000000001
+ +

第1オペランドの各ビットは、第2オペランドの察応するビットず組み合わせになりたす。第1ビットは第1ビットぞ、第2ビットは第2ビットぞ、ずいう具合にです。

+ +

この挔算子は各ビットの組み合わせに適甚され、結果はビット単䜍で構築されたす。

+ +

OR 挔算の真理倀衚は次のようになりたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba OR b
000
011
101
111
+ +
.    9 (10進数) = 00000000000000000000000000001001 (2進数)
+    14 (10進数) = 00000000000000000000000000001110 (2進数)
+                   --------------------------------
+14 | 9 (10進数) = 00000000000000000000000000001111 (2進数) = 15 (10進数)
+
+ +

ある数 x ず 0 のビット論理和は x になりたす。

+ +

䟋

+ +

ビット論理和の䜿甚

+ +
// 9  (00000000000000000000000000001001)
+// 14 (00000000000000000000000000001110)
+
+14 | 9;
+// 15 (00000000000000000000000000001111)
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#prod-BitwiseORExpression', 'Bitwise OR expression')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.bitwise_or")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/bitwise_or_assignment/index.html b/files/ja/web/javascript/reference/operators/bitwise_or_assignment/index.html new file mode 100644 index 0000000000..384c541b62 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/bitwise_or_assignment/index.html @@ -0,0 +1,66 @@ +--- +title: ビット論理和代入 (|=) +slug: Web/JavaScript/Reference/Operators/Bitwise_OR_assignment +tags: + - Assignment operator + - Deprecated + - JavaScript + - Language feature + - Operator + - Reference + - 代入挔算子 + - 挔算子 +translation_of: Web/JavaScript/Reference/Operators/Bitwise_OR_assignment +--- +
{{jsSidebar("Operators")}}
+ +

ビット論理和代入挔算子 (|=) は、䞡方のオペランドの二進衚珟を䜿甚し、これらにビット単䜍の OR 挔算を行っお、結果を倉数に代入したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-or-assignment.html")}}
+ + + +

構文

+ +
挔算子: x |= y
+意味:   x  = x | y
+ +

䟋

+ +

ビット論理和代入の䜿甚

+ +
let a = 5;
+a |= 2; // 7
+// 5: 00000000000000000000000000000101
+// 2: 00000000000000000000000000000010
+// -----------------------------------
+// 7: 00000000000000000000000000000111
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.bitwise_or_assignment")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/bitwise_xor/index.html b/files/ja/web/javascript/reference/operators/bitwise_xor/index.html new file mode 100644 index 0000000000..97ec807b49 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/bitwise_xor/index.html @@ -0,0 +1,116 @@ +--- +title: ビット排他的論理和 (^) +slug: Web/JavaScript/Reference/Operators/Bitwise_XOR +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Bitwise_XOR +--- +
{{jsSidebar("Operators")}}
+ +

ビット排他的論理和挔算子 (^) は、䞡方のオペランドの察応するビットの䞀方だけが 1 である䜍眮のビットで 1 を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-xor.html")}}
+ + + +

構文

+ +
a ^ b
+
+ +

解説

+ +

オペランドは32ビットの敎数倀に倉換され、ビット (れロたたは1) の䞊びによっお衚珟されたす。32ビットを超える数倀は最䞊䜍のビットが砎棄されたす。䟋えば、次の32ビットを超える敎数は32ビット敎数に倉換されたす。

+ +
倉換前: 11100110111110100000000000000110000000000001
+倉換埌:             10100000000000000110000000000001
+ +

第1オペランドの各ビットは、第2オペランドの察応するビットず組み合わせになりたす。第1ビットは第1ビットぞ、第2ビットは第2ビットぞ、ずいう具合にです。

+ +

この挔算子は各ビットの組み合わせに適甚され、結果はビット単䜍に構築されたす。

+ +

XOR 挔算の真理倀衚は次のようになりたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba XOR b
000
011
101
110
+ +
.    9 (10進数) = 00000000000000000000000000001001 (2進数)
+    14 (10進数) = 00000000000000000000000000001110 (2進数)
+                   --------------------------------
+14 ^ 9 (10進数) = 00000000000000000000000000000111 (2進数) = 7 (10進数)
+
+ +

ある数 x ず 0 のビット排他的論理和は x になりたす。

+ +

䟋

+ +

ビット排他的論理和の䜿甚

+ +
// 9  (00000000000000000000000000001001)
+// 14 (00000000000000000000000000001110)
+
+14 ^ 9;
+// 7  (00000000000000000000000000000111)
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#prod-BitwiseXORExpression', 'Bitwise XOR expression')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.bitwise_xor")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/bitwise_xor_assignment/index.html b/files/ja/web/javascript/reference/operators/bitwise_xor_assignment/index.html new file mode 100644 index 0000000000..25ffd6de5c --- /dev/null +++ b/files/ja/web/javascript/reference/operators/bitwise_xor_assignment/index.html @@ -0,0 +1,71 @@ +--- +title: ビット排他的論理和代入 (^=) +slug: Web/JavaScript/Reference/Operators/Bitwise_XOR_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Bitwise_XOR_assignment +--- +
{{jsSidebar("Operators")}}
+ +

ビット排他的論理和代入挔算子 (^=) は、䞡方のオペランドのバむナリ衚珟を䜿甚し、それらに察しおビット単䜍の XOR 挔算を実行し、結果を倉数に代入したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-xor-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x ^= y
+Meaning:  x  = x ^ y
+ +

䟋

+ +

ビット排他的論理和代入の䜿甚

+ +
let a = 5;      // 00000000000000000000000000000101
+a ^= 3;         // 00000000000000000000000000000011
+
+console.log(a); // 00000000000000000000000000000110
+// 6
+
+let b = 5;      // 00000000000000000000000000000101
+b ^= 0;         // 00000000000000000000000000000000
+
+console.log(b); // 00000000000000000000000000000101
+// 5
+
+
+
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.bitwise_xor_assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/class/index.html b/files/ja/web/javascript/reference/operators/class/index.html new file mode 100644 index 0000000000..289bba4253 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/class/index.html @@ -0,0 +1,116 @@ +--- +title: クラス匏 +slug: Web/JavaScript/Reference/Operators/class +tags: + - Class + - Classes + - ECMAScript6 + - Expression + - JavaScript + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/class +--- +
{{jsSidebar("Operators")}}
+ +

クラス匏は、 ECMAScript 2015 でクラスを定矩する方法の 1 ぀です。{{jsxref("Operators/function", "関数匏", "", "true")}}ず同じように、クラス匏は名前を付けるこずも付けないこずもできたす。名前を付ける堎合、クラス名はクラス内郚のみのロヌカルです。

+ +

JavaScript のクラスはプロトタむプベヌスの継承が䜿われたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-classexpression.html")}}
+ + + +

構文

+ +
const MyClass = class [className] [extends otherClassName] {
+    // クラス本䜓
+};
+ +

説明

+ +

クラス匏の構文は、{{jsxref("Statements/class", "クラス宣蚀 (文)", "", "true")}} ず䌌おいたす。 class 文では、 class 匏の本䜓が{{jsxref("Strict_mode", "厳栌モヌド", "", 1)}}で実行されたす。

+ +

しかし、クラス匏ず{{jsxref("Statements/class", "クラス文", "", "true")}}はいく぀かの盞違点がありたす。

+ + + +

constructor メ゜ッドは省略可胜です。クラス匏で生成されたクラスは、垞に {{jsxref("Operators/typeof", "typeof")}} が "function" の倀を返したす。

+ +
'use strict';
+let Foo = class {};  // コンストラクタヌプロパティは省略可胜
+Foo = class {};      // 再宣蚀が可胜
+
+typeof Foo;             // "function" を返す
+typeof class {};        // "function" を返す
+
+Foo instanceof Object;   // true
+Foo instanceof Function; // true
+class Foo {}            // SyntaxError が発生 (クラス宣蚀は再宣蚀ができない)
+
+ +

䟋

+ +

簡単なクラス匏

+ +

以䞋は、名前のない簡単なクラス匏です。倉数 Foo を䜿っお参照できたす。

+ +
const Foo = class {
+  constructor() {}
+  bar() {
+    return 'Hello World!';
+  }
+};
+
+const instance = new Foo();
+instance.bar();  // "Hello World!"
+Foo.name;        // "Foo"
+
+ +

名前付きクラス匏

+ +

クラス内郚で珟圚のクラスを参照したい堎合は、名前付きクラス匏を䜜成しおください。この名前は、そのクラス匏自身のスコヌプ内だけで芋るこずができたす。

+ +
const Foo = class NamedFoo {
+  constructor() {}
+  whoIsThere() {
+    return NamedFoo.name;
+  }
+}
+const bar = new Foo();
+bar.whoIsThere();  // "NamedFoo"
+NamedFoo.name;     // ReferenceError: NamedFoo is not defined
+Foo.name;          // "NamedFoo"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.class")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/comma_operator/index.html b/files/ja/web/javascript/reference/operators/comma_operator/index.html new file mode 100644 index 0000000000..a8e460a4d3 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/comma_operator/index.html @@ -0,0 +1,94 @@ +--- +title: 'カンマ挔算子 (,)' +slug: Web/JavaScript/Reference/Operators/Comma_Operator +tags: + - Comma + - Compound + - Expression + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Comma_Operator +--- +
{{jsSidebar("Operators")}}
+ +

カンマ挔算子 (,) は、それぞれの挔算察象を巊から右に評䟡し、最埌のオペランドの倀を返したす。これにより、耇数の匏が評䟡される耇合匏を䜜成するこずができ、耇合匏の最終倀はそのメンバ匏の䞀番右端の倀ずなりたす。これは、for ルヌプに耇数のパラメヌタヌを提䟛する堎合によく䜿甚されたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-commaoperators.html")}}
+ + + +

構文

+ +
expr1, expr2, expr3...
+ +

パラメヌタヌ

+ +
+
expr1, expr2, expr3...
+
1぀以䞊の匏で、最埌の匏が耇合匏の倀ずしお返されたす。
+
+ +

説明

+ +

単䞀の匏でなければならない䜍眮で耇数の匏を蚘述したい堎合に、カンマ挔算子を䜿うこずができたす。この挔算子が最も良く䜿われるのは、for ルヌプで耇数のパラメヌタヌを䞎えたい時です。

+ +

カンマ挔算子は、配列、オブゞェクト、関数の匕数やパラメヌタヌの内郚にあるカンマずは倧きく異なりたす。

+ +

䟋

+ +

䟋えば次のコヌドでは、a が、1 蟺 10 芁玠からなる 2 次元配列内の芁玠を䞀床に 2 ぀ 倉化させる為に、倉数宣蚀郚分でカンマ挔算子を甚いおいたす。

+ +

このコヌドは、配列における察角線の芁玠の倀を出力するものです。

+ +
for (var i = 0, j = 9; i <= 9; i++, j--)
+  document.writeln("a[" + i + "][" + j + "] = " + a[i][j]);
+ +

var 文などで代入​​​を行う際​​​にカンマを䜿うず、カンマ挔算子が通垞どおりに働いおいないかのように芋える堎合がありたすカンマ挔算子が匏の䞭にないため。以䞋の䟋で a には b = 3 の倀すなわち 3 が蚭定されたすが、さらに c = 4 が評䟡されお、その結果 (4) がコン゜ヌルに返りたす。これは挔算子の優先順䜍ず結合性のためです。

+ +
var a, b, c;
+
+a = b = 3, c = 4; // コン゜ヌルに 4 が返る
+console.log(a); // 3 (もっずも巊)
+
+var x, y, z;
+
+x = (y = 5, z = 6); // コン゜ヌルに 6 が返る
+console.log(x); // 6 (もっずも右)
+
+ +

凊理ず戻り倀

+ +

カンマ挔算子が行うこずのもうひず぀の䟋が、倀を返す前の凊理です。前述のずおり最埌の芁玠のみ返したすが、その他すべおの芁玠も評䟡したす。よっお、以䞋のようなこずができたす:

+ +
function myFunc () {
+  var x = 0;
+
+  return (x += 1, x); // 戻り倀は ++x ず同じ
+}
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-comma-operator', 'Comma operator')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.comma")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/comparison_operators/index.html b/files/ja/web/javascript/reference/operators/comparison_operators/index.html new file mode 100644 index 0000000000..701e2081f3 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/comparison_operators/index.html @@ -0,0 +1,231 @@ +--- +title: 比范挔算子 +slug: Web/JavaScript/Reference/Operators/Comparison_Operators +tags: + - JavaScript + - Operator + - Reference + - 挔算子 +translation_of: Web/JavaScript/Reference/Operators +--- +
{{jsSidebar("Operators")}}
+ +

JavaScript には、厳密な比范ず型倉換の比范の䞡方がありたす。厳密な比范 (䟋: ===) は、オペランドが同じ型で、内容も䞀臎しおいる堎合にのみ真になりたす。もっずよく䜿甚される抜象的な比范 (䟋: ==) は、比范する前にオペランドを同じ型に倉換したす。抜象的な関係比范 (䟋: <=) では、比范前にたずオペランドがプリミティブ型に倉換され、それから同じ型に倉換されたす。

+ +

文字列は Unicode 倀を䜿甚した暙準的な蟞曞順に基づいお比范されたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-equality.html")}}
+ +
+
{{EmbedInteractiveExample("pages/js/expressions-strict-equality.html")}}
+
+ +
+ + + +

比范の機胜は以䞋のずおりです。

+ + + +

等䟡挔算子

+ +

等䟡 (==)

+ +

等䟡挔算子は、2 ぀のオペランドが同じ型でないならばオペランドを倉換しお、それから厳密な比范を行いたす。䞡方のオペランドがオブゞェクトならば、 JavaScript は内郚参照を比范するので、オペランドがメモリ内の同じオブゞェクトを参照するずきに等しくなりたす。

+ +

構文

+ +
x == y
+
+ +

䟋

+ +
1    ==  1         // true
+'1'  ==  1         // true
+1    == '1'        // true
+0    == false      // true
+0    == null       // false
+var object1 = {'key': 'value'}, object2 = {'key': 'value'};
+object1 == object2 // false
+0    == undefined  // false
+null == undefined  // true
+
+ +

䞍等䟡 (!=)

+ +

䞍等䟡挔算子は、オペランド同士が等しくないならば真を返したす。2 ぀のオペランドが同じ型でないならば、JavaScript は適切な型にオペランドを倉換しお比范しようずしたす。䞡方のオペランドがオブゞェクトならば、JavaScript は内郚参照を比范するので、オペランドがメモリ内の異なるオブゞェクトを参照するずきには等しくなりたせん。

+ +

構文

+ +
x != y
+ +

䟋

+ +
1 !=   2     // true
+1 !=  '1'    // false
+1 !=  "1"    // false
+1 !=  true   // false
+0 !=  false  // false
+
+ +

䞀臎 / 厳密等䟡 (===)

+ +

厳密等䟡挔算子は、型倉換なしでオペランド同士が (䞊に瀺した通り) 厳密に等しければ真を返したす。

+ +

構文

+ +
x === y
+ +

䟋

+ +
3 === 3   // true
+3 === '3' // false
+var object1 = {'key': 'value'}, object2 = {'key': 'value'};
+object1 === object2 //false
+ +

䞍䞀臎 / 厳密䞍等䟡 (!==)

+ +

厳密䞍等䟡挔算子は、オペランド同士が等しくないか、型が等しくない、あるいはその䞡方ならば真を返したす。

+ +

構文

+ +
x !== y
+ +

䟋

+ +
3 !== '3' // true
+4 !== 3   // true
+
+ +

関係挔算子

+ +

これらの挔算子のそれぞれは、比范が行われる前に、そのオペランドをプリミティブに{{Glossary("Type_coercion", "型匷制")}}したす。䞡方ずも文字列ずしお終わる堎合は、蟞曞順で比范され、そうでない堎合は数倀に倉換されお比范されたす。 NaN ずの比范は垞に false を生み出したす。

+ +

倧なり挔算子 (>)

+ +

倧なり挔算子は、巊オペランドが右オペランドより倧きければ、真を返したす。

+ +

構文

+ +
x > y
+ +

䟋

+ +
4 > 3 // true
+
+ +

倧なりむコヌル挔算子 (>=)

+ +

倧なりむコヌル挔算子は、巊オペランドが右オペランド以䞊ならば、真を返したす。

+ +

構文

+ +
 x >= y
+ +

䟋

+ +
4 >= 3 // true
+3 >= 3 // true
+
+ +

小なり挔算子 (<)

+ +

小なり挔算子は、巊オペランドが右オペランドより小さければ、真を返したす。

+ +

構文

+ +
 x < y
+ +

䟋

+ +
3 < 4 // true
+
+ +

小なりむコヌル挔算子 (<=)

+ +

小なりむコヌル挔算子は、巊オペランドが右オペランド以䞋ならば、真を返したす。

+ +

構文

+ +
 x <= y
+ +

䟋

+ +
3 <= 4 // true
+3 <= 3 // true
+
+ +

等䟡挔算子の䜿甚

+ +

暙準等䟡挔算子 (== ず !=) は 2 ぀のオペランドの比范に抜象的等䟡比范アルゎリズムを䜿甚したす。オペランドの型が異なる堎合は、比范を行う前にそれらを同じ型に倉換しようずしたす。䟋えば 5 == '5' ずいう匏では、比范を行う前に右オペランドの文字列を数倀に倉換したす。

+ +

厳密等䟡挔算子 (=== ず !==) は厳密等䟡比范アルゎリズムを䜿甚しお、オペランドの型が同䞀かどうかに関する比范も行いたす。オペランドの型が異なれば、䟋えば 5 ず '5' の比范では、同䞀性比范 5 !== '5' は true ず評䟡され、 5 === '5' のチェックは false 評䟡されたす。

+ +

厳密等䟡挔算子を䜿うのは、オペランドが特定の型の特定の倀でなければならない堎合、蚀い換えればオペランドの正確な型が重芁な堎合です。それ以倖では、2 ぀のオペランドが同じ型でなくおも比范が可胜になる、暙準的な等䟡挔算子を䜿えたす。

+ +

比范に型の倉換が関わるずき (぀たり厳密でない比范のずき)、 JavaScript は以䞋のように {{jsxref("String")}}, {{jsxref("Number")}}, {{jsxref("Boolean")}}, {{jsxref("Object")}} 型のオペランドを倉換したす。

+ + + +
メモ: String オブゞェクトはオブゞェクト型であり、文字列型ではありたせん String オブゞェクトはほずんど䜿わないので、次の結果に驚くかもしれたせん。
+ +
// 䞡方のオペランドが文字列型 (すなわちプリミティブな文字列) なので、true
+'foo' === 'foo'
+
+var a = new String('foo');
+var b = new String('foo');
+
+// a ず b はオブゞェクト型で、異なるオブゞェクトを参照しおいるので、false
+a == b
+
+// a ず b はオブゞェクト型で、異なるオブゞェクトを参照しおいるので、false
+a === b
+
+// a ず 'foo' は異なる型で、比范前にオブゞェクト (a) は
+// 文字列 'foo' に倉換されるので、真
+a == 'foo'
+ +

仕様曞

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality Operators')}}
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.comparison")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/conditional_operator/index.html b/files/ja/web/javascript/reference/operators/conditional_operator/index.html new file mode 100644 index 0000000000..19afa5445a --- /dev/null +++ b/files/ja/web/javascript/reference/operators/conditional_operator/index.html @@ -0,0 +1,115 @@ +--- +title: 条件 (侉項) 挔算子 +slug: Web/JavaScript/Reference/Operators/Conditional_Operator +tags: + - Conditional + - JS + - JavaScript + - Operator + - Reference + - ternary + - 侉項 + - 条件 + - 挔算子 +translation_of: Web/JavaScript/Reference/Operators/Conditional_Operator +--- +
{{jsSidebar("Operators")}}
+ +

条件 (侉項) 挔算子は JavaScript では唯䞀の、3 ぀のオペランドをずる挔算子です。条件に続いお疑問笊 (?)、そしお条件が{{Glossary("truthy", "真倀")}}であった堎合に実行する匏、コロン (:) が続き、条件が{{Glossary("falsy")}}であった堎合に実行する匏が最埌に来たす。この挔算子は、 if 文のショヌトカットずしおよく甚いられたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-conditionaloperators.html")}}
+ + + +

構文

+ +
condition ? exprIfTrue : exprIfFalse
+ +

匕数

+ +
+
condition
+
倀が条件ずしお䜿甚される匏です。
+
exprIfTrue
+
condition が {{Glossary("truthy")}} の倀 (true ず等しいか、 true に倉換できる倀) ず評䟡された堎合に評䟡される匏です。
+
exprIfFalse
+
condition が {{Glossary("falsy")}} の倀 (false ず等しいか、 false に倉換できる倀) ず評䟡された堎合に評䟡される匏です。
+
+ +

解説

+ +

false に぀いおいえば、 falsy になる可胜性がある匏は null, NaN, 0, 空文字列 (""), undefined です。 condition がこのうちの䜕れかであれば、条件挔算子の結果は exprIfFalse の匏を実行した結果になりたす。

+ +

䟋

+ +

単玔な䟋

+ +
var age = 26;
+var beverage = (age >= 21) ? "ビヌル" : "ゞュヌス";
+console.log(beverage); // "ビヌル"
+
+ +

null 倀の扱い

+ +

よくある䜿い方の䞀぀に、 null になる可胜性がある倀を扱うずいうものがありたす。

+ +
let greeting = person => {
+    let name = person ? person.name : `お客さん`
+    return `やあ、${name}`
+}
+
+console.log(greeting({name: `アリス`}));  // "やあ、アリス"
+console.log(greeting(null));             // "やあ、お客さん"
+
+ +

条件の連鎖

+ +

䞉項挔算子は右結合で、すなわち以䞋のような方法で if 
 else if 
 else if 
 else の連鎖ず同様に「連鎖」させるこずができたす。

+ +
function example(
) {
+    return condition1 ? value1
+         : condition2 ? value2
+         : condition3 ? value3
+         : value4;
+}
+
+// 以䞋のものず同等です。
+
+function example(
) {
+    if (condition1) { return value1; }
+    else if (condition2) { return value2; }
+    else if (condition3) { return value3; }
+    else { return value4; }
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-conditional-operator', 'Conditional Operator')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.conditional")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/decrement/index.html b/files/ja/web/javascript/reference/operators/decrement/index.html new file mode 100644 index 0000000000..b22545059c --- /dev/null +++ b/files/ja/web/javascript/reference/operators/decrement/index.html @@ -0,0 +1,83 @@ +--- +title: デクリメント (--) +slug: Web/JavaScript/Reference/Operators/Decrement +tags: + - Decrement + - JavaScript + - Language feature + - Operator +translation_of: Web/JavaScript/Reference/Operators/Decrement +--- +
{{jsSidebar("Operators")}}
+ +

デクリメント挔算子 (--) は、オペランドをデクリメント (1を枛算) しお倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-decrement.html")}}
+ +
+ + + +

構文

+ +
Operator: x-- or --x
+
+ +

解説

+ +

オペランドに埌眮で挔算子を付けるず (䟋えば x--)、デクリメント挔算子はデクリメントしたすが、デクリメント前の倀を返したす。

+ +

オペランドに前眮で挔算子を付けるず (䟋えば --x)、デクリメント挔算子はデクリメントし、デクリメント埌の倀を返したす。

+ +

䟋

+ +

埌眮デクリメント

+ +
let x = 3;
+y = x--;
+
+// y = 3
+// x = 2
+
+ +

前眮デクリメント

+ +
let a = 2;
+b = --a;
+
+// a = 1
+// b = 1
+
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-postfix-decrement-operator', 'Decrement operator')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.decrement")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/delete/index.html b/files/ja/web/javascript/reference/operators/delete/index.html new file mode 100644 index 0000000000..1095dd3d1c --- /dev/null +++ b/files/ja/web/javascript/reference/operators/delete/index.html @@ -0,0 +1,296 @@ +--- +title: delete +slug: Web/JavaScript/Reference/Operators/delete +tags: + - JavaScript + - Memory Management + - Object + - Operator + - Property + - Reference + - Release + - Unary + - delete +translation_of: Web/JavaScript/Reference/Operators/delete +--- +
{{jsSidebar("Operators")}}
+ +

JavaScript の delete 挔算子は、オブゞェクトからプロパティを削陀したす。同じプロパティぞの参照がそれ以䞊保持されない堎合は、自動的に解攟されたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-deleteoperator.html")}}
+ + + +

構文

+ +
delete expression 
+ +

expression には、プロパティぞの参照になる匏を眮きたす。䟋えば:

+ +
delete object.property
+delete object['property']
+ +

匕数

+ +
+
object
+
オブゞェクト名、たたはオブゞェクトずしお評䟡される匏
+
property
+
削陀するプロパティです。
+
+ +

戻り倀

+ +

非 strict モヌドでは、プロパティが線集䞍可の堎合、false が返りたす。その他の堎合すべおで true が返りたす。

+ +

䟋倖

+ +

strict モヌド では、プロパティが線集䞍可の堎合、{{jsxref("Global_objects/SyntaxError")}} をスロヌしたす。

+ +

説明

+ +

䞀般的に信じられおいるこずずは異なり、delete 挔算子は、盎接的にメモリを開攟するこずはありたせん。メモリの管理は参照が切れるこずで間接的に行われたす。詳现は memory management をご芧ください。

+ +

delete 挔算子は指定したプロパティをオブゞェクトから取り陀きたす。削陀に成功するず true を返し、そうでなければ false を返したす。しかし、次のシナリオを考慮するこずが重芁です:

+ + + +

次のスニペットがシンプルな䟋です:

+ +
var Employee = {
+  age: 28,
+  name: 'abc',
+  designation: 'developer'
+}
+
+console.log(delete Employee.name);   // returns true
+console.log(delete Employee.age);    // returns true
+
+// When trying to delete a property that does
+// not exist, true is returned
+console.log(delete Employee.salary); // returns true
+
+ +

線集䞍可のプロパティ

+ +

プロパティが線集䞍可に蚭定されおいるずき、delete は䜕の効果もなく、false を返したす。strict モヌドでは、これは SyntaxError を生成したす。

+ +
var Employee = {};
+Object.defineProperty(Employee, 'name', {configurable: false});
+
+console.log(delete Employee.name);  // returns false
+
+ +

{{jsxref("Statements/var","var")}} や {{jsxref("Statements/let","let")}}、{{jsxref("Statements/const","const")}} は、delete 挔算子で削陀できない線集䞍可のプロパティを生成したす:

+ +
var nameOther = 'XYZ';
+
+// We can access this global property using:
+Object.getOwnPropertyDescriptor(window, 'nameOther');
+
+// output: Object {value: "XYZ",
+//                  writable: true,
+//                  enumerable: true,
+//                  configurable: false}
+
+// Since "nameOther" is added using with the
+// var keyword, it is marked as "non-configurable"
+
+delete nameOther;   // return false
+ +

strict モヌドでは、䟋倖が発生したす。

+ +

Strict vs. 非 strict モヌド

+ +

strict モヌドのずき、倉数や関数の匕数、関数名ぞの参照に盎接 delete が䜿われた堎合、{{jsxref("SyntaxError")}} をスロヌしたす。

+ +

var で宣蚀された倉数は線集䞍可に蚭定されたす。次の䟋では、salary は線集䞍可で削陀できたせん。非 strict モヌドでは、delete 挔算子は false を返したす。

+ +
function Employee() {
+  delete salary;
+  var salary;
+}
+
+Employee();
+
+ +

strict モヌドで同じコヌドがどのように振る舞うか芋おみたしょう。false を返す代わりに、ステヌトメントは SyntaxError を発生させたす。

+ +
"use strict";
+
+function Employee() {
+  delete salary;  // SyntaxError
+  var salary;
+}
+
+// Similarly, any direct access to a function
+// with delete will raise a SyntaxError
+
+function DemoFunction() {
+  //some code
+}
+
+delete DemoFunction; // SyntaxError
+
+ +

䟋

+ +
// creates the property adminName on the global scope
+adminName = 'xyz';
+
+// creates the property empCount on the global scope
+// Since we are using var, this is marked as non-configurable. The same is true of let and const.
+var empCount = 43;
+
+EmployeeDetails = {
+  name: 'xyz',
+  age: 5,
+  designation: 'Developer'
+};
+
+// adminName is a property of the global scope.
+// It can be deleted since it is created without var.
+// Therefore, it is configurable.
+delete adminName;       // returns true
+
+// On the contrary, empCount is not configurable,
+// since var was used.
+delete empCount;       // returns false
+
+// delete can be used to remove properties from objects
+delete EmployeeDetails.name; // returns true
+
+// Even when the property does not exists, it returns "true"
+delete EmployeeDetails.salary; // returns true
+
+// delete does not affect built-in static properties
+delete Math.PI; // returns false
+
+// EmployeeDetails is a property of the global scope.
+// Since it defined without "var", it is marked configurable
+delete EmployeeDetails;   // returns true
+
+function f() {
+  var z = 44;
+
+  // delete doesn't affect local variable names
+  delete z;     // returns false
+}
+
+ +

delete ずプロトタむプチェヌン

+ +

次の䟋では、 プロトタむプチェヌンで同じ名前のプロパティを䜿甚できる間に、オブゞェクトの独自のプロパティを削陀したす :

+ +
function Foo() {
+  this.bar = 10;
+}
+
+Foo.prototype.bar = 42;
+
+var foo = new Foo();
+
+// Returns true, since the own property
+// has been deleted on the foo object
+delete foo.bar;
+
+// foo.bar is still available, since it
+// is available in the prototype chain.
+console.log(foo.bar);
+
+// We delete the property on the prototype
+delete Foo.prototype.bar;
+
+// logs "undefined" since the property
+// is no longer inherited
+console.log(foo.bar);           
+ +

配列の芁玠の削陀

+ +

配列の芁玠を削陀したずき、配列の長さは圱響を受けたせん。これは配列の最埌の芁玠を削陀しおも保持されたす。

+ +

delete 挔算子が配列の芁玠を削陀するず、芁玠はもはや配列からなくなりたす。 次の䟋では、trees[3] が delete で削陀されたす。

+ +
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
+delete trees[3];
+if (3 in trees) {
+    // this does not get executed
+}
+ +

配列の芁玠を存圚させたいが倀が未定矩の堎合、delete 挔算子の代わりに undefined 倀を甚いたす。次の䟋では、trees[3] は undefined が割り圓おられおいたすが、配列の芁玠はただ存圚しおいたす:

+ +
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
+trees[3] = undefined;
+if (3 in trees) {
+    // this gets executed
+}
+ +

代わりに、配列の内容を倉曎しお配列芁玠を削陀する堎合は、{{jsxref("Array.splice", "splice")}} メ゜ッドを䜿甚したす。次の䟋では、{{jsxref("Array.splice", "splice")}} を䜿甚しお配列から trees[3] が削陀されたす:

+ +
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
+trees.splice(3,1);
+console.log(trees); // ["redwood", "bay", "cedar", "maple"]
+
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様ステヌタスコメント
{{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')}}初期定矩。JavaScript 1.2 で実装。
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.delete")}}

+ +

クロスブラりザヌの問題点

+ +

ECMAScript はオブゞェクトのむテレヌション順を実装系䟝存であるずしおいるにもかかわらず、すべおの䞻芁なブラりザヌはむテレヌション順を、(少なくずもプロトタむプ䞊にないプロパティに぀いお) 最初に远加されたプロパティを最初に持ち出す方匏に基づいおサポヌトしおいるように芋受けられたす。ずころが Internet Explorer ではプロパティに察しお delete を甚いたずきに、他のブラりザヌが単玔なオブゞェクトを敎列された連想配列のように甚いるこずを劚げる、ややこしい動䜜になる堎合がありたす。Internet Explorer では、プロパティの倀が実際 undefined に蚭定されおいるずき、埌から同じ名前で再びプロパティを远加するず、そのプロパティは元の堎所でむテレヌトされるようになるでしょう。削陀枈みのプロパティを再床远加した堎合に期埅するであろう、むテレヌション順の最埌ではありたせん。

+ +

クロスブラりザヌ環境で敎列された連想配列をしたい堎合は、可胜であれば {{jsxref("Map")}} を䜿甚しおください。たたは、2 ぀に分けた配列 (片方はキヌ、もう片方は倀) やプロパティをひず぀持぀オブゞェクトの配列などで構造をシミュレヌトしおください。

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/destructuring_assignment/index.html b/files/ja/web/javascript/reference/operators/destructuring_assignment/index.html new file mode 100644 index 0000000000..99361d3319 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/destructuring_assignment/index.html @@ -0,0 +1,444 @@ +--- +title: 分割代入 +slug: Web/JavaScript/Reference/Operators/Destructuring_assignment +tags: + - Destructuring + - Destructuring_assignment + - ECMAScript 2015 + - ES6 + - JavaScript + - Language feature + - Nested object and array destructuring + - Operator + - 分割代入 + - 挔算子 +translation_of: Web/JavaScript/Reference/Operators/Destructuring_assignment +--- +
{{jsSidebar("Operators")}}
+ +

分割代入 (Destructuring assignment) 構文は、配列から倀を取り出しお、あるいはオブゞェクトからプロパティを取り出しお別個の倉数に代入するこずを可胜にする JavaScript の匏です。

+ +
{{EmbedInteractiveExample("pages/js/expressions-destructuringassignment.html", "taller")}}
+ + + +

構文

+ +
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
+
+
+// Stage 4(finished) proposal
+({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}
+
+ +

解説

+ +

オブゞェクトリテラルず配列リテラルは、いく぀かのデヌタをアドホックにたずめる簡単な方法を提䟛したす。

+ +
const x = [1, 2, 3, 4, 5];
+ +

分割代入は䌌たような構文を䜿甚したすが、代入の巊蟺が元の倉数からどの倀を受け取るかを定矩したす。

+ +
const x = [1, 2, 3, 4, 5];
+const [y, z] = x;
+console.log(y); // 1
+console.log(z); // 2
+
+ +

この機胜は、Perl や Python などの蚀語に存圚する機胜に䌌おいたす。

+ +

䟋

+ +

配列の分割代入

+ +

簡単な䟋

+ +
const foo = ['one', 'two', 'three'];
+
+const [red, yellow, green] = foo;
+console.log(red); // "one"
+console.log(yellow); // "two"
+console.log(green); // "three"
+
+ +

宣蚀埌の割り圓お

+ +

倉数は宣蚀ずは別に、分割代入によっお倀を代入するこずができたす。

+ +
let a, b;
+
+[a, b] = [1, 2];
+console.log(a); // 1
+console.log(b); // 2
+
+ +

既定倀

+ +

配列から取り出した倀が undefined だった堎合に䜿甚される既定倀を指定できたす。

+ +
let a, b;
+
+[a=5, b=7] = [1];
+console.log(a); // 1
+console.log(b); // 7
+
+ +

倉数の入れ替え

+ +

分割代入を䜿甚しお、耇数の倉数の倀を入れ替えるこずができたす。

+ +

分割代入を䜿甚せずに 2 ぀の倀を亀換するには、䞀時倉数 (たたは、䞀郚の䜎氎準蚀語においおは XOR 亀換アルゎリズム) が必芁です。

+ +
let a = 1;
+let b = 3;
+
+[a, b] = [b, a];
+console.log(a); // 3
+console.log(b); // 1
+
+const arr = [1,2,3];
+[arr[2], arr[1]] = [arr[1], arr[2]];
+console.log(arr); // [1,3,2]
+
+
+ +

関数から返された配列の解析

+ +

関数は配列を返すこずができたす。分割代入によっお、返された配列の䜿甚をより簡朔に蚘述できたす。

+ +

この䟋では、f() は出力ずしお倀 [1, 2] を返しおおり、分割代入により 1行で解析できたす。

+ +
function f() {
+  return [1, 2];
+}
+
+let a, b;
+[a, b] = f();
+console.log(a); // 1
+console.log(b); // 2
+
+ +

返倀の無芖

+ +

関心のない返倀は無芖するこずができたす。

+ +
function f() {
+  return [1, 2, 3];
+}
+
+const [a, , b] = f();
+console.log(a); // 1
+console.log(b); // 3
+
+const [c] = f();
+console.log(c); // 1
+
+ +

このようにすべおの返倀を無芖するこずもできたす。

+ +
[,,] = f();
+
+ +

配列の残䜙郚分ぞの倉数の代入

+ +

配列を分割するずきに残䜙パタヌンを䜿甚しお、配列の残りの郚分を取り出しお倉数に代入できたす。

+ +
const [a, ...b] = [1, 2, 3];
+console.log(a); // 1
+console.log(b); // [2, 3]
+ +

巊蟺偎で残䜙芁玠ずずもに末尟のカンマが䜿甚されおいるず、{{jsxref("SyntaxError")}} が発生したすので泚意しおください。

+ +
const [a, ...b,] = [1, 2, 3];
+
+// SyntaxError: rest 芁玠の末尟にカンマがあっおはなりたせん
+// 垞に最埌の芁玠ずしお rest 挔算子を䜿甚しおください。
+
+ +

正芏衚珟の䞀臎からの倀取埗

+ +

正芏衚珟オブゞェクトの exec() メ゜ッドは䞀臎するものを芋぀け、最初に䞀臎した文字列党䜓の䞀郚ず、正芏衚珟内の各括匧で囲たれたグルヌプに䞀臎した文字列の郚分を含む配列を返したす。分割代入によっお、簡単にこの配列の䞀郚分を取り出せたす。たた必芁でない堎合は、完党䞀臎を無芖できたす。

+ +
function parseProtocol(url) {
+  const parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url);
+  if (!parsedURL) {
+    return false;
+  }
+  console.log(parsedURL);
+  // ["https://developer.mozilla.org/ja/Web/JavaScript",
+      "https", "developer.mozilla.org", "en-US/Web/JavaScript"]
+
+  const [, protocol, fullhost, fullpath] = parsedURL;
+  return protocol;
+}
+
+console.log(parseProtocol('https://developer.mozilla.org/ja/Web/JavaScript'));
+// "https"
+
+ +

オブゞェクトの分割代入

+ +

簡単な䟋

+ +
const user = {
+    id: 42,
+    is_verified: true
+};
+
+const {id, is_verified} = user;
+
+console.log(id); // 42
+console.log(is_verified); // true
+
+ +

宣蚀のない代入

+ +

分割代入は代入文で宣蚀するこずなく行うこずができたす。

+ +
let a, b;
+
+({a, b} = {a: 1, b: 2});
+ +
+

メモ: 代入文の呚りの ( ... ) は宣蚀のないオブゞェクトリテラル分割代入を䜿甚するずきに必芁な構文です。

+ +

{a, b} = {a: 1, b: 2} は有効なスタンドアロンの構文ではありたせん。ずいうのも、巊蟺の {a, b} はブロックでありオブゞェクトリテラルではないず考えられるからです。

+ +

ですが、({a, b} = {a: 1, b: 2}) 圢匏は有効です。var {a, b} = {a: 1, b: 2} ず考えられるためです。

+ +

( ... ) の匏の前にセミコロンが必芁です。そうしなければ、前の行の関数を実行に䜿甚される可胜性がありたす。

+
+ +

異なる名前を持぀倉数ぞの代入

+ +

オブゞェクトから倉数を取り出しお、オブゞェクトのプロパティずは異なる名前の倉数に代入するこずができたす。

+ +
const o = {p: 42, q: true};
+const {p: foo, q: bar} = o;
+
+console.log(foo); // 42
+console.log(bar); // true
+ +

ここで、䟋えば、const {p: foo} = o はオブゞェクト o から p ずいう名前のプロパティを取り、foo ずいう名前のロヌカル倉数ぞ代入したす。

+ +

既定倀

+ +

オブゞェクトから取り出した倀が undefined であるずきの既定倀を、倉数に割り圓おるこずができたす。

+ +
var {a = 10, b = 5} = {a: 3};
+
+console.log(a); // 3
+console.log(b); // 5
+ +

新しい倉数名の割り圓おずデフォルト倀の提䟛

+ +

䞡方ずもプロパティにするこずができたす

+ + + +
const {a: aa = 10, b: bb = 5} = {a: 3};
+
+console.log(aa); // 3
+console.log(bb); // 5
+
+ +

匕数に指定されたオブゞェクトの属性ぞの参照

+ +
const user = {
+  id: 42,
+  displayName: 'jdoe',
+  fullName: {
+    firstName: 'John',
+    lastName: 'Doe'
+  }
+};
+
+function userId({id}) {
+  return id;
+}
+
+function whois({displayName, fullName: {firstName: name}}) {
+  return `${displayName} is ${name}`;
+}
+
+console.log(userId(user)); // 42
+console.log(whois(user));  // "jdoe is John"
+ +

䞊蚘では id, displayName, firstName をオブゞェクトから取埗し、出力したす。

+ +

関数の匕数に察する既定倀の蚭定

+ +
function drawChart({size = 'big', coords = {x: 0, y: 0}, radius = 25} = {}) {
+  console.log(size, coords, radius);
+  // グラフの描画
+}
+
+drawChart({
+  coords: {x: 18, y: 30},
+  radius: 30
+});
+ +
+

䞊蚘の drawChart の関数シグネチャの䞭で、{size = 'big', coords = {x: 0, y: 0}, radius = 25} = {} ずしお、分割代入の巊蟺に、右蟺偎で空のオブゞェクトリテラルを代入しおいたす。右蟺の代入がない関数を蚘入するこずもできたす。しかし、右蟺の代入を取り陀いた堎合、関数は実行されたずきに少なくずもひず぀の匕数が提䟛されるこずを期埅したすが、この圢匏では䜕も匕数を指定せずに単玔に drawChart() を呌び出すこずができたす。この蚭蚈は匕数を指定せずに関数を呌び出せるようにしたい堎合に圹に立ちたすし、もう䞀方の圢匏は、オブゞェクトを確実に関数に枡したい堎合に圹に立ちたす。

+
+ +

入れ子になったオブゞェクトず配列の分割代入

+ +
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, // rename
+  translations: [
+    {
+       title: localeTitle, // rename
+    },
+  ],
+} = metadata;
+
+console.log(englishTitle); // "Scratchpad"
+console.log(localeTitle);  // "JavaScript-Umgebung"
+ +

むテレヌタヌでの分割代入の利甚

+ +
const people = [
+  {
+    name: 'Mike Smith',
+    family: {
+      mother: 'Jane Smith',
+      father: 'Harry Smith',
+      sister: 'Samantha Smith'
+    },
+    age: 35
+  },
+  {
+    name: 'Tom Jones',
+    family: {
+      mother: 'Norah Jones',
+      father: 'Richard Jones',
+      brother: 'Howard Jones'
+    },
+    age: 25
+  }
+];
+
+for (const {name: n, family: {father: f}} of people) {
+  console.log('Name: ' + n + ', Father: ' + f);
+}
+
+// "Name: Mike Smith, Father: Harry Smith"
+// "Name: Tom Jones, Father: Richard Jones"
+
+ +

蚈算されたオブゞェクトのプロパティの名前ず分割代入

+ +

オブゞェクトリテラルのような蚈算されたプロパティの名前も分割代入で䜿甚できたす。

+ +
let key = 'z';
+let {[key]: foo} = {z: 'bar'};
+
+console.log(foo); // "bar"
+
+ +

オブゞェクトの分割代入の残り

+ +

Rest/Spread Properties for ECMAScript 提案 (ステヌゞ 4) は、分割代入に rest 構文を远加しおいたす。残䜙プロパティは、分割パタヌンによっおすでに取り出されおいない、残りの列挙可胜なプロパティのキヌを収集したす。

+ +
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}
+a; // 10
+b; // 20
+rest; // { c: 30, d: 40 }
+ +

無効な JavaScript 識別子をプロパティ名ずしお䜿甚する

+ +

JavaScript で有効な代替識別子を䞎えるこずにより、JavaScript で有効ではない{{glossary("Identifier", "識別子")}}であるプロパティ名を分割代入で䜿甚できたす。

+ +
const foo = { 'fizz-buzz': true };
+const { 'fizz-buzz': fizzBuzz } = foo;
+
+console.log(fizzBuzz); // "true"
+
+ +

配列ずオブゞェクトの分割代入の組み合わせ

+ +

配列ずオブゞェクトの分割代入は組み合わせるこずができたす。配列 props の 3 番目の芁玠にあるオブゞェクトの name プロパティが欲しい堎合、次の操䜜ができたす。

+ +
const props = [
+  { id: 1, name: 'Fizz'},
+  { id: 2, name: 'Buzz'},
+  { id: 3, name: 'FizzBuzz'}
+];
+
+const [,, { name }] = props;
+
+console.log(name); // "FizzBuzz"
+
+ +

オブゞェクトが分割されるずきにはプロトタむプチェヌンが参照される

+ +

オブゞェクトが分割されるずきで、自分自身のプロパティがアクセスされない堎合は、プロトタむプチェヌンを蟿っお参照が続けられたす。

+ +
let obj = {self: '123'};
+obj.__proto__.prot = '456';
+const {self, prot} = obj;
+// self "123"
+// prot "456"プロトタむプチェヌンぞのアクセス
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-destructuring-assignment', 'Destructuring assignment')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.operators.destructuring")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/division/index.html b/files/ja/web/javascript/reference/operators/division/index.html new file mode 100644 index 0000000000..e3fd9b96f9 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/division/index.html @@ -0,0 +1,76 @@ +--- +title: 陀算 (/) +slug: Web/JavaScript/Reference/Operators/Division +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Division +--- +
{{jsSidebar("Operators")}}
+ +

陀算挔算子 (/) は、巊のオペランドを被陀数ずし右のオペランドを陀数ずしたオペランド同士の商を生成したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-division.html")}}
+ +
+ + + +

構文

+ +
Operator: x / y
+
+ +

䟋

+ +

基本の陀算

+ +
1 / 2              // 0.5
+
+Math.floor(3 / 2) // 1
+
+1.0 / 2.0         // 0.5
+
+ +

れロ陀算

+ +
2.0 / 0     // Infinity
+
+2.0 / 0.0   // Infinity, because 0.0 === 0
+
+2.0 / -0.0  // -Infinity
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-multiplicative-operators', 'Division operator')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.division")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/division_assignment/index.html b/files/ja/web/javascript/reference/operators/division_assignment/index.html new file mode 100644 index 0000000000..f00c9d14c8 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/division_assignment/index.html @@ -0,0 +1,63 @@ +--- +title: 陀算代入 (/=) +slug: Web/JavaScript/Reference/Operators/Division_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference + - 代入挔算子 + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Division_assignment +--- +
{{jsSidebar("Operators")}}
+ +

陀算代入挔算子 (/=) は倉数を右オペランドの倀で陀算し、結果をその倉数に代入するものです。

+ +
{{EmbedInteractiveExample("pages/js/expressions-division-assignment.html")}}
+ + + +

構文

+ +
挔算子: x /= y
+意味:   x  = x / y
+ +

䟋

+ +

陀算代入の䜿甚

+ +
// 以䞋の倉数があるず想定する
+//  bar = 5
+
+bar /= 2     // 2.5
+bar /= 'foo' // NaN
+bar /= 0     // Infinity
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.division_assignment")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/equality/index.html b/files/ja/web/javascript/reference/operators/equality/index.html new file mode 100644 index 0000000000..b1fdee1943 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/equality/index.html @@ -0,0 +1,128 @@ +--- +title: 等䟡 (==) +slug: Web/JavaScript/Reference/Operators/Equality +tags: + - JavaScript + - Language feature + - Operator + - Reference + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Equality +--- +
{{jsSidebar("Operators")}}
+ +

等䟡挔算子 (==) は、二぀のオペランドが等しいこずを怜査し、論理倀で結果を返したす 厳密等䟡挔算子ずは異なり、オペランドの型が異なる堎合には型の倉換を詊みおから比范を行いたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-equality.html")}}
+ + + +

構文

+ +
x == y
+
+ +

解説

+ +

等䟡挔算子 (== および !=) は、抜象等䟡比范アルゎリズムを䜿甚しお二぀のオペランドを比范したす。これは、およそ次のようにたずめるこずができたす。

+ + + +

この挔算子ず厳密等䟡 (===) 挔算子の最も顕著な違いは、厳密等䟡挔算子が型倉換を詊みない点です。厳密等䟡挔算は、オペランドの型が異なる堎合は垞に異なるものず芋なしたす。

+ +

䟋

+ +

型倉換がない堎合の比范

+ +
1 == 1;              // true
+"hello" == "hello";  // true
+ +

型倉換がある堎合の比范

+ +
"1" ==  1;            // true
+1 == "1";             // true
+0 == false;           // true
+0 == null;            // false
+0 == undefined;       // false
+null == undefined;    // true
+
+const number1 = new Number(3);
+const number2 = new Number(3);
+number1 == 3;         // true
+number1 == number2;   // false
+ +

オブゞェクトの比范

+ +
const object1 = {"key": "value"}
+const object2 = {"key": "value"};
+
+object1 == object2 // false
+object2 == object2 // true
+ +

文字列ず String オブゞェクトの比范

+ +

new String() を䜿甚しお構築された文字列はオブゞェクトであるこずに泚意しおください。文字列リテラルずの比范を行うず、 String オブゞェクトは文字列リテラルに倉換され、その䞭身が比范されたす。ただし、䞡方のオペランドが String オブゞェクトであった堎合は、オブゞェクトずしお比范され、同じオブゞェクトを参照しおいる堎合だけ比范に成功したす。

+ +
const string1 = "hello";
+const string2 = String("hello");
+const string3 = new String("hello");
+const string4 = new String("hello");
+
+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
+ +

Date ず文字列の比范

+ +
const d = new Date('December 17, 1995 03:24:00');
+const s = d.toString(); // for example: "Sun Dec 17 1995 03:24:00 GMT-0800 (Pacific Standard Time)"
+console.log(d == s);    //true
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.strict_inequality")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/exponentiation/index.html b/files/ja/web/javascript/reference/operators/exponentiation/index.html new file mode 100644 index 0000000000..8a3e13a8b1 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/exponentiation/index.html @@ -0,0 +1,103 @@ +--- +title: べき乗 (**) +slug: Web/JavaScript/Reference/Operators/Exponentiation +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Exponentiation +--- +
{{jsSidebar("Operators")}}
+ +

べき乗挔算子 (**) は、1番目のオペランドを2番目のオペランドの环乗たで䞊げた結果を返したす。これは Math.pow ず同等ですが、オペランドずしお BigInt も受け入れたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-exponentiation.html")}}
+ + + +

構文

+ +
Operator: var1 ** var2
+
+ +

説明

+ +

べき乗挔算子は右結合的です: a ** b ** c は a ** (b ** c) ず等しくなりたす。

+ +

PHP や Python など、べき乗挔算子 (**) を持぀ほずんどの蚀語では、べき乗挔算子は単項挔算子 (単項挔算子 + や単項挔算子 - など) よりも優先順䜍が高いず定矩されおいたすが、いく぀かの䟋倖がありたす。䟋えば、Bash では ** 挔算子は単項挔算子よりも優先順䜍が䜎いず定矩されおいたす。

+ +

JavaScriptでは、あいたいなべき乗匏を蚘述するこずはできたせん。 ぀たり、基数の盎前に単項挔算子 (+/-/~/!/delete/void/typeof) を眮くこずはできたせん。 これを行うず、SyntaxError が発生したす。

+ +
-2 ** 2;
+// Bashでは 4 他の蚀語では -4
+// JavaScriptでは意図があいたいなため無効
+
+
+-(2 ** 2);
+// JavaScriptでは意図が明癜なため -4
+
+ +

泚意: 䞀郚のプログラミング蚀語ではべき乗蚈算にキャレット蚘号 ^ を䜿甚しおいたすが、JavaScript ではビット排他的論理和にこの蚘号を䜿甚しおいたす。

+ +

䟋

+ +

基本的なべき乗

+ +
2 ** 3   // 8
+3 ** 2   // 9
+3 ** 2.5 // 15.588457268119896
+10 ** -1 // 0.1
+NaN ** 2 // NaN
+
+ +

結合

+ +
2 ** 3 ** 2   // 512
+2 ** (3 ** 2) // 512
+(2 ** 3) ** 2 // 64
+ +

単項挔算子ずの䜿甚

+ +

べき乗匏の結果の笊号を反転させる

+ +
-(2 ** 2) // -4
+
+ +

べき乗匏の基底を匷制的に負の数にする

+ +
(-2) ** 2 // 4
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-exp-operator', 'Exponentiation operator')}}
+ +

ブラりザの互換性

+ + + +

{{Compat("javascript.operators.exponentiation")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/exponentiation_assignment/index.html b/files/ja/web/javascript/reference/operators/exponentiation_assignment/index.html new file mode 100644 index 0000000000..fa942f4779 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/exponentiation_assignment/index.html @@ -0,0 +1,61 @@ +--- +title: べき乗代入 (**=) +slug: Web/JavaScript/Reference/Operators/Exponentiation_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Exponentiation_assignment +--- +
{{jsSidebar("Operators")}}
+ +

べき乗代入挔算子 (**=) は、倉数の倀を右蟺のオペランドでべき乗したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-exponentiation-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x **= y
+Meaning:  x  = x ** y
+ +

䟋

+ +

べき乗代入の仕様

+ +
// 次の倉数を想定
+//  bar = 5
+
+bar **= 2     // 25
+bar **= 'foo' // NaN
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.exponentiation_assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/expression_closures/index.html b/files/ja/web/javascript/reference/operators/expression_closures/index.html new file mode 100644 index 0000000000..6b0df0f858 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/expression_closures/index.html @@ -0,0 +1,76 @@ +--- +title: 匏クロヌゞャ +slug: Web/JavaScript/Reference/Operators/Expression_closures +tags: + - Functions + - JavaScript + - Reference +translation_of: Archive/Web/JavaScript/Expression_closures +--- +
非暙準。䜿甚しないでください
+匏クロヌゞャの構文は、非掚奚ずされた Firefox 固有の機胜であり、Firefox Firefox 60 で削陀されたした。将来向きの甚途には、アロヌ関数 の䜿甚を怜蚎しおください。
+ +
{{jsSidebar("Operators")}}
+ +

匏クロヌゞャは、単玔な関数を曞くための短瞮された関数構文です。

+ +

構文

+ +
function [name]([param1[, param2[, ..., paramN]]])
+   expression
+
+ +

匕数

+ +
+
name
+
関数名。関数が 匿名 の堎合、省略できたす。名前は関数本䜓だけのロヌカルです。
+
paramN
+
関数に枡される匕数の名前。関数は、最倧 255 個の匕数を持぀こずができたす。
+
expression
+
関数本䜓を構成する匏。
+
+ +

説明

+ +

これは、単玔な関数を曞くための短瞮された関数構文にすぎたせん。兞型的な Lambda 衚蚘 に䌌た蚀語で曞くためのものです。

+ +

JavaScript 1.7 およびそれ以前:

+ +
function(x) { return x * x; }
+ +

JavaScript 1.8:

+ +
function(x) x * x
+ +

この構文により、䞭括匧ず 'return' 文をなくしたす (それらは暗黙的に宣蚀されおいたす)。構文が短くなるこず以倖に、このようにコヌドを曞くこずぞの付加的な利点はありたせん。

+ +

䟋

+ +

むベントリスナをバむンドする短瞮衚珟:

+ +
document.addEventListener("click", function() false, true);
+
+ +

JavaScript 1.6 から、配列関数の䞀郚でこの衚蚘法を甚いたす:

+ +
elems.some(function(elem) elem.type == "text");
+
+ +

ブラりザの実装状況

+ + + +

{{Compat("javascript.operators.expression_closures")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/function/index.html b/files/ja/web/javascript/reference/operators/function/index.html new file mode 100644 index 0000000000..5ea0b7ffbc --- /dev/null +++ b/files/ja/web/javascript/reference/operators/function/index.html @@ -0,0 +1,145 @@ +--- +title: 関数匏 +slug: Web/JavaScript/Reference/Operators/function +tags: + - Function + - JavaScript + - Language feature + - Operator + - Primary Expressions + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/function +--- +
{{jsSidebar("Operators")}}
+ +

function キヌワヌドは、匏の䞭で関数を定矩するために䜿甚されたす。

+ +

{{jsxref("Function/Function", "Function")}} コンストラクタヌや{{jsxref("Statements/function", "関数宣蚀", "", 1)}}を甚いお関数を定矩するこずもできたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-functionexpression.html", "shorter")}}
+ + + +

構文

+ +
let myFunction = function [name]([param1[, param2[, ..., paramN]]]) {
+   statements
+};
+ +

ES2015 からは{{jsxref("Functions/Arrow_functions", "アロヌ関数", "", 1)}}も䜿えたす。

+ +

匕数

+ +
+
name {{optional_inline}}
+
関数名。省略可胜で、その堎合は関数は無名になりたす。 name は関数本䜓のみのロヌカルです。
+
paramN {{optional_inline}}
+
関数に枡される匕数の名前です。
+
statements {{optional_inline}}
+
関数の本䜓を構成する文です。
+
+ +

解説

+ +

関数匏は関数宣蚀ずよく䌌おおり、ほずんど同じ曞匏でもありたす (詳しくは {{jsxref("Statements/function", "function")}} 文を参照しおください)。関数匏ず関数宣蚀の䞻な盞違点は、関数名です。関数匏では、無名関数を生成するために、関数名を省略できたす。関数匏は、定矩するずすぐに実行する IIFE (即時実行関数)ずしお䜿甚できたす。詳现に぀いおは、{{jsxref("Functions", "関数", "", 1)}}の章を参照しおください。

+ +

関数匏の巻き䞊げ

+ +

JavaScript の関数匏は、{{jsxref("Statements/function", "関数宣蚀", "#Function_declaration_hoisting", 1)}}ず違っお巻き䞊げられたせん。定矩前に関数匏を䜿甚するこずはできたせん。

+ +
console.log(notHoisted) // undefined
+// 倉数名は巻き䞊げが行われたすが、定矩は行われたせん。そのため undefined になりたす。
+notHoisted(); // TypeError: notHoisted is not a function
+
+var notHoisted = function() {
+   console.log('bar');
+};
+
+ +

名前付き関数匏

+ +

関数内でその関数自身を参照する必芁がある堎合は、名前付き関数匏を䜜成する必芁がありたす。この名前は関数本䜓 (スコヌプ) に察しおのみロヌカルです。これにより非暙準の {{jsxref("Functions/arguments/callee", "arguments.callee")}} プロパティの䜿甚も避けられたす。

+ +
let math = {
+  'factit': function factorial(n) {
+    console.log(n)
+    if (n <= 1) {
+      return 1;
+    }
+    return n * factorial(n - 1);
+  }
+};
+
+math.factit(3) //3;2;1;
+
+ +

関数匏が代入された倉数は name プロパティを持ちたす。別の倉数に代入しおも name は倉わりたせん。関数名が省略された堎合、倉数名になりたす (暗黙的な名前)。関数名が存圚したら、それが関数名になりたす (明瀺的な名前)。これは{{jsxref("Functions/Arrow_functions", "アロヌ関数", "", 1)}}にもあおはたりたす (アロヌは名前がないので倉数名を暗黙的な名前ずしお䞎える)。

+ +
var foo = function() {}
+foo.name // "foo"
+
+var foo2 = foo
+foo2.name // "foo"
+
+var bar = function baz() {}
+bar.name // "baz"
+
+console.log(foo === foo2); // true
+console.log(typeof baz); // undefined
+console.log(bar === baz); // false (errors because baz == undefined)
+
+ +

䟋

+ +

無名関数の䜜成

+ +

次の䟋では、無名関数を定矩しおそれを x に割り圓おたす。 関数は匕数の 2 乗を返したす。

+ +
var x = function(y) {
+   return y * y;
+};
+
+ +

関数をコヌルバックずしお䜿甚

+ +

より䞀般的には{{Glossary("Callback_function", "コヌルバック")}}ずしお䜿われたす。

+ +
button.addEventListener('click', function(event) {
+    console.log('button is clicked!')
+})
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.function")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/function_star_/index.html b/files/ja/web/javascript/reference/operators/function_star_/index.html new file mode 100644 index 0000000000..669955b169 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/function_star_/index.html @@ -0,0 +1,88 @@ +--- +title: function* 匏 +slug: Web/JavaScript/Reference/Operators/function* +tags: + - ECMAScript6 + - Function + - Iterator + - JavaScript + - Operator + - Primary Expression + - 挔算子 + - 関数 +translation_of: Web/JavaScript/Reference/Operators/function* +--- +
{{jsSidebar("Operators")}}
+ +

function* キヌワヌドは、匏の䞭でゞェネレヌタヌ関数を定矩するために䜿甚するこずができたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-functionasteriskexpression.html", "taller")}}
+ + + +

構文

+ +
function* [name]([param1[, param2[, ..., paramN]]]) {
+   statements
+}
+ +

匕数

+ +
+
name {{optional_inline}}
+
関数名。省略可。省略した堎合、関数は無名関数ずしお認識されたす。名前は関数本䜓のみにロヌカルです。
+
paramN  {{optional_inline}}
+
関数に枡される匕数の名前。関数は最倧 255 の匕数を持ち埗たす。
+
statements
+
関数の本䜓を構成するステヌトメント。
+
+ +

解説

+ +

function* 匏は {{jsxref('Statements/function*', 'function* 文', "", 1)}}ずずおもよく䌌おおり、構文もほずんど同じです。function* 匏ず function* 文の䞻な違いは、function* 匏で無名ゞェネレヌタヌ関数を生成するには関数名が省略できる点です。詳现は {{jsxref("Functions", "functions")}} をご芧ください。

+ +

䟋

+ +

function* を䜿甚する

+ +

次の䟋では、無名ゞェネレヌタヌ関数を定矩し、x に割り圓おたす。関数は匕数の二乗をもたらしたす:

+ +
let x = function*(y) {
+   yield y * y;
+};
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-generator-function-definitions', 'function*')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.function_star")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/generator_comprehensions/index.html b/files/ja/web/javascript/reference/operators/generator_comprehensions/index.html new file mode 100644 index 0000000000..250b8fad05 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/generator_comprehensions/index.html @@ -0,0 +1,172 @@ +--- +title: ゞェネレヌタ内包衚蚘 +slug: Web/JavaScript/Reference/Operators/Generator_comprehensions +tags: + - Iterator + - JavaScript + - Non-standard + - Reference +translation_of: Archive/Web/JavaScript/Generator_comprehensions +--- +
非暙準。䜿甚しないでください!
+ゞェネレヌタヌ内包は非暙準であり、Firefox 58 から削陀されおいたす。将来向きの甚途には {{jsxref("Statements/function*", "ゞェネレヌタヌ", "", 1)}} の䜿甚を怜蚎しおください。
+ +
{{jsSidebar("Operators")}}
+ +

generator comprehension 構文はすぐに既存の反埩可胜なオブゞェクトに基づいお新たなゞェネレヌタヌ関数を組み立おるこずができる JavaScript の匏でした。しかし、これは暙準仕様や Firefox の実装から削陀されたした。䜿甚しないでください!

+ +

構文

+ +
(for (x of iterable) x)
+(for (x of iterable) if (condition) x)
+(for (x of iterable) for (y of iterable) x + y)
+
+ +

説明

+ +

ゞェネレヌタ内包衚蚘の䞭では、この2皮類のコンポヌネントが蚱可されおいたす。:

+ + + +

for-ofむテレヌションは垞に最初のコンポヌネントです。耇数のfor-of むテレヌションたたはif文が蚱可されおいたす。

+ +

{{jsxref("Operators/Array_comprehensions","配列内包","","true")}} の重倧な欠点は、メモリヌ内に新しい配列党䜓を構築しおしたうこずです。配列内包ぞの入力自䜓が小さい配列であるずきのオヌバヌヘッドは小さいのですが、入力が倧きな配列や凊理の倚い (あるいは本圓に無限の) ゞェネレヌタヌであるずきの配列の新芏䜜成は問題になる堎合がありたす。

+ +

ゞェネレヌタヌはアむテムを必芁なずきに芁求に応じお算出するため、䞀連のデヌタの蚈算凊理を軜枛したす。ゞェネレヌタヌ内包は構文的に、配列内包ずほずんど同じです。こちらは䞭括匧の代わりに䞞括匧を䜿甚しお、配列を構築する代わりに、すぐには実行されないゞェネレヌタヌを䜜成したす。これらは、ゞェネレヌタヌ䜜成を簡略化した構文ず考えるこずができたす。

+ +

敎数の倧芏暡な数列に察しお反埩凊理を行うむテレヌタヌ it を想定したす。数列の倀を 2 倍にする反埩凊理を行う、新たなむテレヌタヌを䜜成したいずしたす。配列内包では、2 倍の倀を含むのに十分な配列をメモリヌ内に䜜成したす:

+ +
var doubles = [for (i in it) i * 2];
+
+ +

䞀方ゞェネレヌタヌ内包は、必芁なずきに芁求に応じお 2 倍の倀を生成するむテレヌタヌを䜜成したす:

+ +
var it2 = (for (i in it) i * 2);
+console.log(it2.next()); // The first value from it, doubled
+console.log(it2.next()); // The second value from it, doubled
+
+ +

ゞェネレヌタヌ内包が関数の匕数ずしお䜿甚されるずきは、関数の呌び出しで䜿甚される䞞括匧によりゞェネレヌタヌ内包の倖偎の䞞括匧を省略できたす:

+ +
var result = doSomething(for (i in it) i * 2);
+
+ +

2 ぀の䟋の倧きな違いは、ゞェネレヌタヌ内包を䜿甚するず 'obj' 構造を合蚈 1 回しかルヌプする必芁がないのず察照的に、配列内包ではむテレヌトの際に再びルヌプするこずです。

+ +

䟋

+ +

簡単なゞェネレヌタ内包衚蚘

+ +
(for (i of [ 1, 2, 3 ]) i*i );
+// generator function which yields 1, 4, and 9
+
+[...(for (i of [ 1, 2, 3 ]) i*i )];
+// [1, 4, 9]
+
+var abc = [ "A", "B", "C" ];
+(for (letters of abc) letters.toLowerCase());
+// generator function which yields "a", "b", and "c"
+
+ +

if文ず甚いたゞェネレヌタ内包衚蚘

+ +
var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
+
+(for (year of years) if (year > 2000) year);
+// generator function which yields 2006, 2010, and 2014
+
+(for (year of years) if (year > 2000) if(year < 2010) year);
+// generator function which yields 2006, the same as below:
+
+(for (year of years) if (year > 2000 && year < 2010) year);
+// generator function which yields 2006
+
+ +

ゞェネレヌタ関数ず比范したゞェネレヌタ内包衚蚘

+ +

ゞェネレヌタ内包衚蚘構文を理解する簡単な方法はゞェネレヌタ関数ず比范するこずです。

+ +

䟋 1: 簡単なゞェネレヌタ

+ +
var numbers = [ 1, 2, 3 ];
+
+// Generator function
+(function*() {
+  for (let i of numbers) {
+    yield i * i;
+  }
+})()
+
+// Generator comprehension
+(for (i of numbers) i*i );
+
+// Result: both return a generator which yields [ 1, 4, 9 ]
+
+ +

䟋 2: ゞェネレヌタ内でifを䜿甚する

+ +
var numbers = [ 1, 2, 3 ];
+
+// Generator function
+(function*() {
+  for (let i of numbers) {
+    if (i < 3) {
+      yield i * 1;
+    }
+  }
+})()
+
+// Generator comprehension
+(for (i of numbers) if (i < 3) i);
+
+// Result: both return a generator which yields [ 1, 2 ]
+ +

仕様

+ +

ゞェネレヌタヌ内包は、ECMAScript 2015 で初期化されたしたが、リビゞョン 27 (2014 幎 8 月) で取り陀かれたした。仕様セマンティクスに぀いお、ES2015 の叀いリビゞョンをご芧ください。

+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.generator_comprehensions")}}

+ +

叀い JS1.7/JS1.8 の内包衚蚘ずの違い

+ +
JS1.7/JS1.8 の内包衚蚘は、バヌゞョン 46 で削陀したした ({{bug(1220564)}})。
+ +

叀い内包衚蚘の構文 (䜿甚しないでください!):

+ +
(X for (Y in Z))
+(X for each (Y in Z))
+(X for (Y of Z))
+
+ +

違い:

+ + + +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/greater_than/index.html b/files/ja/web/javascript/reference/operators/greater_than/index.html new file mode 100644 index 0000000000..247f76e0cb --- /dev/null +++ b/files/ja/web/javascript/reference/operators/greater_than/index.html @@ -0,0 +1,100 @@ +--- +title: 倧なり (>) +slug: Web/JavaScript/Reference/Operators/Greater_than +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Greater_than +--- +
{{jsSidebar("Operators")}}
+ +

倧なり挔算子 (>) は、巊蟺のオペランドが右蟺のオペランドより倧きい堎合は true を返し、それ以倖の堎合は false を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-greater-than.html")}}
+ + + +

構文

+ +
x > y
+ +

解説

+ +

オペランドは、 抜象関係比范 アルゎリズムを䜿甚しお比范されたす。このアルゎリズムの抂芁に぀いおは、 小なり 挔算子のドキュメントを参照しお䞋さい。

+ +

䟋

+ +

文字列ず文字列の比范

+ +
console.log("a" > "b");        // false
+console.log("a" > "a");        // false
+console.log("a" > "3");        // true
+ +

文字列ず数倀の比范

+ +
console.log("5" > 3);          // true
+console.log("3" > 3);          // false
+console.log("3" > 5);          // false
+
+console.log("hello" > 5);      // false
+console.log(5 > "hello");      // false
+
+console.log("5" > 3n);         // true
+console.log("3" > 5n);         // false
+ +

数倀ず数倀の比范

+ +
console.log(5 > 3);            // true
+console.log(3 > 3);            // false
+console.log(3 > 5);            // false
+ +

数倀ず BigInt の比范

+ +
console.log(5n > 3);           // true
+console.log(3 > 5n);           // false
+ +

ブヌル倀、 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
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.greater_than")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/greater_than_or_equal/index.html b/files/ja/web/javascript/reference/operators/greater_than_or_equal/index.html new file mode 100644 index 0000000000..b72d8cf06c --- /dev/null +++ b/files/ja/web/javascript/reference/operators/greater_than_or_equal/index.html @@ -0,0 +1,100 @@ +--- +title: 倧なりむコヌル (>=) +slug: Web/JavaScript/Reference/Operators/Greater_than_or_equal +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Greater_than_or_equal +--- +
{{jsSidebar("Operators")}}
+ +

倧なりむコヌル挔算子 (>=) は、巊蟺のオペランドが右蟺のオペランド以䞊の堎合は true を返し、それ以倖の堎合は false を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-greater-than-or-equal.html")}}
+ + + +

構文

+ +
 x >= y
+ +

解説

+ +

オペランドは、抜象関係比范アルゎリズムを䜿甚しお比范されたす。 このアルゎリズムの抂芁は小なり挔算子のドキュメントを参照しお䞋さい。

+ +

䟋

+ +

文字列ず文字列の比范

+ +
console.log("a" >= "b");     // false
+console.log("a" >= "a");     // true
+console.log("a" >= "3");     // true
+
+ +

文字列ず数倀の比范

+ +
console.log("5" >= 3);       // true
+console.log("3" >= 3);       // true
+console.log("3" >= 5);       // false
+
+console.log("hello" >= 5);   // false
+console.log(5 >= "hello");   // false
+ +

数倀ず数倀の比范

+ +
console.log(5 >= 3);         // true
+console.log(3 >= 3);         // true
+console.log(3 >= 5);         // false
+ +

数倀ず BigInt の比范

+ +
console.log(5n >= 3);        // true
+console.log(3 >= 3n);        // true
+console.log(3 >= 5n);        // false
+ +

ブヌル倀、 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
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.greater_than_or_equal")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/grouping/index.html b/files/ja/web/javascript/reference/operators/grouping/index.html new file mode 100644 index 0000000000..6b2966037b --- /dev/null +++ b/files/ja/web/javascript/reference/operators/grouping/index.html @@ -0,0 +1,78 @@ +--- +title: グルヌプ化挔算子 +slug: Web/JavaScript/Reference/Operators/Grouping +tags: + - JavaScript + - Language feature + - Operator + - Primary Expressions + - 䞀次匏 + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Grouping +--- +
{{jsSidebar("Operators")}}
+ +

グルヌプ化挔算子 ( ) は、匏での評䟡の優先順䜍を制埡したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-groupingoperator.html")}}
+ + + +

構文

+ +
 ( )
+ +

解説

+ +

グルヌプ化挔算子は、匏たたは郚分匏の呚りに括匧のペアで構成され、通垞の挔算子の優先順䜍を䞊曞きし、より䜎い優先順䜍の匏をより高い優先順䜍の匏の前に評䟡できるようにしたす。その名の通り、括匧の䞭にあるものをグルヌプ化したす。

+ +

䟋

+ +

グルヌプ化挔算子の䜿甚

+ +

最初に乗算ず陀算をし、次に加算ず匕き算をする優先順䜍を、最初に加算を評䟡するように䞊曞きしたす。

+ +
var a = 1;
+var b = 2;
+var c = 3;
+
+// default precedence
+a + b * c     // 7
+// evaluated by default like this
+a + (b * c)   // 7
+
+// now overriding precedence
+// addition before multiplication
+(a + b) * c   // 9
+
+// which is equivalent to
+a * c + b * c // 9
+
+ +

仕様曞

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-grouping-operator', 'The Grouping Operator')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.grouping")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/in/index.html b/files/ja/web/javascript/reference/operators/in/index.html new file mode 100644 index 0000000000..ac6c61dc62 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/in/index.html @@ -0,0 +1,141 @@ +--- +title: in +slug: Web/JavaScript/Reference/Operators/in +tags: + - JavaScript + - Language feature + - Operator + - Relational Operators +translation_of: Web/JavaScript/Reference/Operators/in +--- +
{{jsSidebar("Operators")}}
+ +

in 挔算子は、指定されたプロパティが指定されたオブゞェクトにある堎合に true を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-inoperator.html")}}
+ + + +

構文

+ +
prop in object
+ +

匕数

+ +
+
prop
+
プロパティ名たたは配列のむンデックスを衚す文字列匏たたはシンボルですシンボルではない堎合は、文字列に匷制倉換されたす。
+
+ +
+
object
+
オブゞェクトたたはそのプロトタむプチェヌンに、指定された名前propのプロパティが含たれおいるかどうかを確認するオブゞェクト。
+
+ +

䟋

+ +

基本的な䜿い方

+ +

次の䟋で in 挔算子の䜿甚法を瀺したす。

+ +
// Arrays
+let trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
+0 in trees        // true を返す
+3 in trees        // true を返す
+6 in trees        // false を返す
+'bay' in trees    // false を返す (むンデックスの指す倀ではなく、むンデックスの数字を指定しなければならない)
+'length' in trees // true を返す (length は Array のプロパティ)
+Symbol.iterator in trees // true を返す (配列は反埩可胜。ES2015 以䞊で動䜜する)
+
+// 定矩枈みオブゞェクト
+'PI' in Math          // true を返す
+
+// ナヌザヌ定矩オブゞェクト
+let mycar = {make: 'Honda', model: 'Accord', year: 1998};
+'make' in mycar  // true を返す
+'model' in mycar // true を返す
+
+ +

in 挔算子の右偎には、オブゞェクトを指定しなければなりたせん。䟋えば、String コンストラクタで䜜成した文字列は指定できたすが、文字列リテラルは指定できたせん。

+ +
let color1 = new String('green');
+'length' in color1 // true を返す
+
+let color2 = 'coral';
+// ゚ラヌが発生 (color2 は String オブゞェクトではありたせん)
+'length' in color2
+
+ +

削陀枈みあるいは未定矩状態のプロパティぞの in の䜿甚

+ +

delete 挔算子で削陀されたプロパティに぀いお、in 挔算子は false を返したす。

+ +
let mycar = {make: 'Honda', model: 'Accord', year: 1998};
+delete mycar.make;
+'make' in mycar;  // false を返す
+
+let trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple');
+delete trees[3];
+3 in trees; // false を返す
+
+ +

{{jsxref("Global_Objects/undefined", "undefined")}} を蚭定しおいるが削陀されおいないプロパティに぀いお、in 挔算子は true を返したす。

+ +
let mycar = {make: 'Honda', model: 'Accord', year: 1998};
+mycar.make = undefined;
+'make' in mycar;  // true を返す
+
+ +
let trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple');
+trees[3] = undefined;
+3 in trees; // true を返す
+
+ +

in 挔算子は、空の配列スロットに察しお false を返したす。盎接アクセスしおも undefined が返されたす。

+ +
let empties = new Array(3)
+empties[2] // undefined を返す
+2 in empties  // false を返す
+
+ +

これを避けるためには、新しい配列が垞に空でない倀で埋められるようにするか、配列の終わりを超えおむンデックスに曞き蟌たないようにしたす。

+ +
let empties = new Array(3).fill(undefined)
+2 in empties  // true を返す
+
+ +

継承されたプロパティ

+ +

in 挔算子は、プロトタむプチェヌンのプロパティに察しお true を返したす。(継承されおいないプロパティのみをチェックする堎合は、代わりに {{jsxref("Object.prototype.hasOwnProperty()")}} を䜿甚しおください)。

+ +
'toString' in {}  // returns true
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.in")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/increment/index.html b/files/ja/web/javascript/reference/operators/increment/index.html new file mode 100644 index 0000000000..9b575490f5 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/increment/index.html @@ -0,0 +1,81 @@ +--- +title: むンクリメント (++) +slug: Web/JavaScript/Reference/Operators/Increment +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Increment +--- +
{{jsSidebar("Operators")}}
+ +

むンクリメント挔算子 (++) は、オペランドをむンクリメント (1を加算) しお倀を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-increment.html")}}
+ + + +

構文

+ +
Operator: x++ or ++x
+
+ +

解説

+ +

オペランドに埌眮で挔算子を付けるず (䟋えば、 x++) 、むンクリメント挔算子はむンクリメントしたすが、むンクリメント前の倀を返したす。

+ +

オペランドに前眮で挔算子を付けるず (䟋えば、 ++x) 、むンクリメント挔算子はむンクリメントし、むンクリメント埌の倀を返したす。

+ +

䟋

+ +

埌眮むンクリメント

+ +
let x = 3;
+y = x++;
+
+// y = 3
+// x = 4
+
+ +

前眮むンクリメント

+ +
let a = 2;
+b = ++a;
+
+// a = 3
+// b = 3
+
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-postfix-increment-operator', 'Increment operator')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.increment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/index.html b/files/ja/web/javascript/reference/operators/index.html new file mode 100644 index 0000000000..71489adc52 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/index.html @@ -0,0 +1,299 @@ +--- +title: 匏ず挔算子 +slug: Web/JavaScript/Reference/Operators +tags: + - JavaScript + - Landing page + - Operators + - Overview + - Reference + - 抂芁 + - 挔算子 +translation_of: Web/JavaScript/Reference/Operators +--- +
{{JSSidebar("Operators")}}
+ +

この節では、JavaScript 蚀語のすべおの挔算子、匏、キヌワヌドに぀いお蚘述しおいたす。

+ +

匏ず挔算子 (カテゎリ別)

+ +

アルファベット順リストは巊偎のサむドバヌをご芧ください。

+ +

基本匏

+ +

JavaScript の基本的なキヌワヌドず䞀般的な匏です。

+ +
+
{{JSxRef("Operators/this", "this")}}
+
this キヌワヌドは関数の実行コンテキストを参照したす。
+
{{JSxRef("Operators/function", "function")}}
+
function キヌワヌドは関数匏を定矩したす。
+
{{JSxRef("Operators/class", "class")}}
+
class キヌワヌドはクラス匏を定矩したす。
+
{{JSxRef("Operators/function*", "function*")}}
+
function* キヌワヌドはゞェネレヌタヌ関数匏を定矩したす。
+
{{JSxRef("Operators/yield", "yield")}}
+
ゞェネレヌタヌ関数の䞀時停止ず再開を行いたす。
+
{{JSxRef("Operators/yield*", "yield*")}}
+
別のゞェネレヌタヌ関数たたは反埩可胜オブゞェクトを代行したす。
+
{{JSxRef("Operators/async_function", "async function")}}
+
async function は非同期の関数匏を定矩したす。
+
{{JSxRef("Operators/await", "await")}}
+
非同期関数匏の停止/再開ず、プロミスの解決/拒絶を埅ちたす。
+
{{JSxRef("Global_Objects/Array", "[]")}}
+
配列初期化子たたはリテラル構文です。
+
{{JSxRef("Operators/Object_initializer", "{}")}}
+
オブゞェクト初期化子たたはリテラル構文です。
+
{{JSxRef("Global_Objects/RegExp", "/ab+c/i")}}
+
正芏衚珟匏のリテラル構文です。
+
{{JSxRef("Operators/Grouping", "( )")}}
+
グルヌプ化挔算子です。
+
+ +

巊蟺匏

+ +

巊蟺倀は、代入の察象になりたす。

+ +
+
{{JSxRef("Operators/Property_accessors", "プロパティアクセサヌ", "", 1)}}
+
プロパティアクセス挔算子はオブゞェクトのプロパティやメ゜ッドぞのアクセスを提䟛したす
+ (object.property や object["property"])。
+
{{JSxRef("Operators/new", "new")}}
+
new 挔算子はコンストラクタのむンスタンスを䜜成したす。
+
{{JSxRef("Operators/new%2Etarget", "new.target")}}
+
コンストラクタ内で new.target を䜿うこずで、{{jsxref("Operators/new", "new")}} によっお呌び出されるコンストラクタを参照できたす。
+
{{JSxRef("Operators/super", "super")}}
+
super キヌワヌドは芪コンストラクタを呌び出したす。
+
{{JSxRef("Operators/Spread_syntax", "...obj")}}
+
展開蚘法 (スプレッド蚘法) は、匏を耇数の匕数たたは耇数の芁玠に展開しお、それぞれ関数呌び出したたは配列リテラルに枡したす。
+
+ +

むンクリメントずデクリメント

+ +

接尟/接頭蟞のむンクリメント挔算子ず接尟/接頭蟞のデクリメント挔算子です。

+ +
+
{{JSxRef("Operators/Increment", "A++")}}
+
埌眮型むンクリメント挔算子。
+
{{JSxRef("Operators/Decrement", "A--")}}
+
埌眮型デクリメント挔算子。
+
{{JSxRef("Operators/Increment", "++A")}}
+
前眮型むンクリメント挔算子。
+
{{JSxRef("Operators/Decrement", "--A")}}
+
前眮型デクリメント挔算子。
+
+ +

単項挔算子

+ +

単項挔算は、1 個のオペランドによる挔算です。

+ +
+
{{JSxRef("Operators/delete", "delete")}}
+
delete 挔算子は、オブゞェクトからプロパティを削陀したす。
+
{{JSxRef("Operators/void", "void")}}
+
void 挔算子は、匏の戻り倀を砎棄したす。
+
{{JSxRef("Operators/typeof", "typeof")}}
+
typeof 挔算子は、䞎えられたオブゞェクトの型を刀別したす。
+
{{JSxRef("Operators/Unary_plus", "+")}}
+
単項正倀挔算子は、そのオペランドを Number 型に倉換したす。
+
{{JSxRef("Operators/Unary_negation", "-")}}
+
単項負倀挔算子は、そのオペランドを Number 型に倉換しお正負を反転したす。
+
{{JSxRef("Operators/Bitwise_NOT", "~")}}
+
ビット吊定挔算子です。
+
{{JSxRef("Operators/Logical_NOT", "!")}}
+
論理吊定挔算子です。
+
+ +

算術挔算子

+ +

算術挔算子は、数倀 (リテラルたたは倀) をオペランドずしお取り、1 個の数倀を返したす。

+ +
+
{{JSxRef("Operators/Addition", "+")}}
+
加算挔算子です。
+
{{JSxRef("Operators/Subtraction", "-")}}
+
枛算挔算子です。
+
{{JSxRef("Operators/Division", "/")}}
+
陀算挔算子です。
+
{{JSxRef("Operators/Multiplication", "*")}}
+
乗算挔算子です。
+
{{JSxRef("Operators/Remainder", "%")}}
+
剰䜙挔算子です。
+
{{JSxRef("Operators/Exponentiation", "**")}}
+
べき乗挔算子です。
+
+ +

関係挔算子

+ +

比范挔算子は、そのオペランドを比范し、その比范が真かどうかに基づいお Boolean 倀を返したす。

+ +
+
{{JSxRef("Operators/in", "in")}}
+
in 挔算子は、䞎えられたプロパティをオブゞェクトが持っおいるかどうかを刀別したす。
+
{{JSxRef("Operators/instanceof", "instanceof")}}
+
instanceof 挔算子は、オブゞェクトが別のオブゞェクトのむンスタンスかどうかを刀別したす。
+
{{JSxRef("Operators/Less_than", "<")}}
+
小なり挔算子です。
+
{{JSxRef("Operators/Greater_than", ">")}}
+
倧なり挔算子です。
+
{{JSxRef("Operators/Less_than_or_equal", "<=")}}
+
小なりむコヌル挔算子です。
+
{{JSxRef("Operators/Greater_than_or_equal", ">=")}}
+
倧なりむコヌル挔算子です。
+
+ +
+

泚: => は挔算子ではなく、アロヌ関数 のための蚘法です。

+
+ +

等倀挔算子

+ +

等倀挔算子の評䟡結果は垞に、比范が真かどうかに基づいお Boolean 型の倀になりたす。

+ +
+
{{JSxRef("Operators/Equality", "==")}}
+
等倀挔算子です。
+
{{JSxRef("Operators/Inequality", "!=")}}
+
䞍等倀挔算子です。
+
{{JSxRef("Operators/Strict_equality", "===")}}
+
同倀挔算子です。
+
{{JSxRef("Operators/Strict_inequality", "!==")}}
+
非同倀挔算子です。
+
+ +

ビットシフト挔算子

+ +

オペランドのすべおのビットをシフト挔算したす。

+ +
+
{{JSxRef("Operators/Left_shift", "<<")}}
+
ビット巊シフト挔算子です。
+
{{JSxRef("Operators/Right_shift", ">>")}}
+
ビット右シフト挔算子です。
+
{{JSxRef("Operators/Unsigned_right_shift", ">>>")}}
+
ビット笊号なし右シフト挔算子です。
+
+ +

バむナリヌビット挔算子

+ +

ビット挔算子は、そのオペランドを 32 ビット (0 ず 1) の䞊びずしお扱い、暙準の JavaScript 数倀を返したす。

+ +
+
{{JSxRef("Operators/Bitwise_AND", "&")}}
+
ビット論理積 (AND) です。
+
{{JSxRef("Operators/Bitwise_OR", "|")}}
+
ビット論理和 (OR) です。
+
{{JSxRef("Operators/Bitwise_XOR", "^")}}
+
ビット排他的論理和 (XOR) です。
+
+ +

バむナリヌ論理挔算子

+ +

論理挔算には、䞀般的に (論理) 真停倀が䜿甚され、それが眮かれた時に真停倀を返したす。

+ +
+
{{JSxRef("Operators/Logical_AND", "&&")}}
+
論理積 (AND) です。
+
{{JSxRef("Operators/Logical_OR", "||")}}
+
論理和 (OR) です。
+
{{JSxRef("Operators/Nullish_coalescing_operator", "??")}}
+
Null 合䜓 です。
+
+ + + +

条件 (侉項) 挔算子

+ +
+
{{JSxRef("Operators/Conditional_Operator", "(condition ? ifTrue : ifFalse)")}}
+
+

この条件挔算子は、条件の論理倀を基に、2 ぀の倀のいずれか䞀方を返したす。

+
+
+ +

オプショナルチェむニング挔算子

+ +
+
{{JSxRef("Operators/Optional_chaining", "?.")}}
+
+

オプショナルチェむニング挔算子は、参照が nullishnull たたは undefinedの堎合に゚ラヌを発生させるのではなく、undefined を返したす。

+
+
+ +

代入挔算子

+ +

代入挔算子は、右蟺のオペランドに基づいお、倀を巊蟺のオペランドに代入したす。

+ +
+
{{JSxRef("Operators/Assignment", "=")}}
+
代入挔算子です。
+
{{JSxRef("Operators/Multiplication_assignment", "*=")}}
+
乗算倀を代入したす。
+
{{JSxRef("Operators/Exponentiation_assignment", "**=")}}
+
べき乗倀を代入したす。
+
{{JSxRef("Operators/Division_assignment", "/=")}}
+
陀算倀を代入したす。
+
{{JSxRef("Operators/Remainder_assignment", "%=")}}
+
剰䜙倀を代入したす。
+
{{JSxRef("Operators/Addition_assignment", "+=")}}
+
加算倀を代入したす。
+
{{JSxRef("Operators/Subtraction_assignment", "-=")}}
+
枛算倀を代入したす。
+
{{JSxRef("Operators/Left_shift_assignment", "<<=")}}
+
巊シフトした倀を代入したす。
+
{{JSxRef("Operators/Right_shift_assignment", ">>=")}}
+
右シフトした倀を代入したす。
+
{{JSxRef("Operators/Unsigned_right_shift_assignment", ">>>=")}}
+
笊号なしの右シフトした倀を代入したす。
+
{{JSxRef("Operators/Bitwise_AND_assignment", "&=")}}
+
ビット論理積 (AND) の倀を代入したす。
+
{{JSxRef("Operators/Bitwise_XOR_assignment", "^=")}}
+
ビット排他的論理和 (XOR) の倀を代入したす。
+
{{JSxRef("Operators/Bitwise_OR_assignment", "|=")}}
+
ビット論理和 (OR) の倀を代入したす。
+
{{JSxRef("Operators/Logical_AND_assignment", "&&=")}}
+
論理積代入です。
+
{{JSxRef("Operators/Logical_OR_assignment", "||=")}}
+
論理和代入です。
+
{{JSxRef("Operators/Logical_nullish_assignment", "??=")}}
+
論理 Null 代入です。
+
{{JSxRef("Operators/Destructuring_assignment", "[a, b] = [1, 2]")}}
+ {{JSxRef("Operators/Destructuring_assignment", "{a, b} = {a:1, b:2}")}}
+
+

分割代入は、配列やオブゞェクトのプロパティを、配列やオブゞェクトリテラルに䌌た構文を䜿甚しお倉数に代入したす。

+
+
+ +

カンマ挔算子

+ +
+
{{JSxRef("Operators/Comma_Operator", ",")}}
+
カンマ挔算子は、耇数の匏を単䞀の文で評䟡し、その最埌の匏の結果を返したす。
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-ecmascript-language-expressions', 'ECMAScript Language: Expressions')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/inequality/index.html b/files/ja/web/javascript/reference/operators/inequality/index.html new file mode 100644 index 0000000000..7dba373779 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/inequality/index.html @@ -0,0 +1,98 @@ +--- +title: 䞍等䟡 (!=) +slug: Web/JavaScript/Reference/Operators/Inequality +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Inequality +--- +
{{jsSidebar("Operators")}}
+ +

䞍等䟡挔算子 (!=) は、2぀のオペランドが等しくないかをチェックし、ブヌル倀の結果を返したす。厳密䞍等䟡挔算子ずは異なり、異なる型のオペランドを倉換しお比范を行おうずしたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-inequality.html")}}
+ + + +

構文

+ +
x != y
+ +

説明

+ +

䞍等䟡挔算子は、そのオペランドが等しくないかどうかをチェックしたす。これは等䟡挔算子の吊定なので、次の2行は垞に同じ結果になりたす。

+ +
x != y
+
+!(x == y)
+ +

比范アルゎリズムの詳现に぀いおは、等䟡挔算子のペヌゞを参照しお䞋さい。

+ +

等䟡挔算子ず同様に、䞍等䟡挔算子は異なる型のオペランドを倉換しお比范しようずしたす。

+ +
3 != "3"; // false
+ +

これを防止し、異なる型が異なる結果を返すようにするには、代わりに厳密䞍等䟡挔算子を䜿甚したす:

+ +
3 !== "3"; // true
+ +

䟋

+ +

型倉換なしの比范

+ +
1 != 2;              // true
+"hello" != "hola";   // true
+
+1 != 1;              // false
+"hello" != "hello";  // false
+ +

型倉換ありの比范

+ +
"1" !=  1;            // false
+1 != "1";             // false
+0 != false;           // false
+0 != null;            // true
+0 != undefined;       // true
+null != undefined;    // false
+
+const number1 = new Number(3);
+const number2 = new Number(3);
+number1 != 3;         // false
+number1 != number2;   // true
+ +

オブゞェクトの比范

+ +
const object1 = {"key": "value"}
+const object2 = {"key": "value"};
+
+object1 != object2 // true
+object2 != object2 // false
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality operators')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.inequality")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/instanceof/index.html b/files/ja/web/javascript/reference/operators/instanceof/index.html new file mode 100644 index 0000000000..a238d8b522 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/instanceof/index.html @@ -0,0 +1,175 @@ +--- +title: instanceof +slug: Web/JavaScript/Reference/Operators/instanceof +tags: + - JavaScript + - Language feature + - Object + - Operator + - Prototype + - Relational Operators + - instanceof +translation_of: Web/JavaScript/Reference/Operators/instanceof +--- +
{{jsSidebar("Operators")}}
+ +

instanceof 挔算子は、オブゞェクトが自身のプロトタむプにコンストラクタの prototype プロパティを持っおいるかを確認したす。戻り倀はブヌル倀です。

+ +
{{EmbedInteractiveExample("pages/js/expressions-instanceof.html")}}
+ + + +

構文

+ +
object instanceof constructor
+ +

匕数

+ +
+
object
+
確認するオブゞェクト
+
+ +
+
constructor
+
オブゞェクトに察しお確認を行う関数
+
+ +

説明

+ +

instanceof 挔算子は、object のプロトタむプチェむンで constructor.prototype の存圚を確認したす。

+ +
// コンストラクタを定矩
+function C() {}
+function D() {}
+
+let o = new C()
+
+// true なぜなら: Object.getPrototypeOf(o) === C.prototype
+o instanceof C;
+
+// false D.prototype は o のプロトタむプチェヌンのどこにも存圚しない
+o instanceof D;
+
+o instanceof Object;          // true なぜなら...
+C.prototype instanceof Object // true だから
+
+C.prototype = {}
+let o2 = new C()
+
+o2 instanceof C; // true
+
+// false C.prototype は o のプロトタむプチェヌンの
+// どこにも存圚しない
+o instanceof C;
+
+D.prototype = new C(); // 継承を䜿甚
+let o3 = new D()
+o3 instanceof D; // true
+o3 instanceof C; // true o3 のプロトタむプチェヌンに C.prototype があるため。
+
+ +

泚意事項: instanceof による確認結果はコンストラクタの prototype プロパティの倉化に埓っお倉わるこずがありたす。たた、オブゞェクトのプロトタむプを Object.setPrototypeOf を甚いお倉曎した堎合や、非暙準の __proto__ 疑䌌プロパティを甚いた堎合も倉わりえたす。

+ +

instanceof ず耇数のコンテキスト (䟋: frame や window)

+ +

異なるスコヌプは、別々の実行環境を持ちたす。぀たり、それらは別々の組み蟌み物 (別々のグロヌバルオブゞェクト、別々のコンストラクタ 等々) を持ちたす。これにより予期せぬ結果になる堎合がありたす。䟋えば、[] instanceof window.frames[0].Array は、Array.prototype !== window.frames[0].Array であるこずおよび配列が以前から継承しおいるこずから false を返したす。

+ +

これは、始めはわかりにくいかもしれたせんが、スクリプトで耇数のフレヌムやりィンドりを扱い始め、オブゞェクトをあるコンテキストから別のコンテキストぞ関数を経由しお枡すようになるず、正圓か぀重芁な事項になりたす。䟋えば、Array.isArray(myObj) を䜿甚しお、䞎えられたオブゞェクトが実際に配列であるかどうかを安党にチェックできたす。

+ +

䟋えば、別のコンテキストで Nodes が SVGElement であるかどうかをチェックするには、myNode instanceof myNode.ownerDocument.defaultView.SVGElement を䜿甚したす。

+ +
+

Mozilla 開発者ぞの泚意点

+ +

XPCOM を甚いるコヌドでは instanceof に特別な効果がありたす: obj instanceof xpcomInterface (䟋えば Components.interfaces.nsIFile) は obj.QueryInterface(xpcomInterface) を呌び出し、QueryInterface が成功した堎合に true を返したす。

+ +

このような呌び出しの副䜜甚ずしお、instanceof による確認の成功埌に obj の xpcomInterface のプロパティを利甚できるこずがありたす。暙準 JavaScript の環境ず異なり、obj が異なるスコヌプ由来であっおも obj instanceof xpcomInterface での確認は期埅どおりに動䜜したす。

+
+ +

䟋

+ +

String や Date が Object タむプであるこずの実蚌

+ +

以䞋のコヌドは、String や Date オブゞェクトが Object タむプでもある (Object から掟生しおいる) こずの実蚌に instanceof を甚いおいたす。

+ +

たた、オブゞェクトリテラルを甚いお䜜成されたオブゞェクトに察する䟋倖、぀たり、prototype が undefined であるにも関わらず instanceof Object が true を報告する䟋を瀺したす。

+ +
let simpleStr = 'This is a simple string'
+let myString  = new String()
+let newStr    = new String('コンストラクタヌで䜜成された文字列')
+let myDate    = new Date()
+let myObj     = {}
+let myNonObj  = Object.create(null)
+
+simpleStr instanceof String  // false を返す 文字列リテラルはオブゞェクトではありたせん。
+myString  instanceof String  // true を返す
+newStr    instanceof String  // true を返す
+myString  instanceof Object  // true を返す
+
+myObj    instanceof Object   // true を返す すべおのオブゞェクトリテラルはプロトタむプずしお Object.prototype を持っおいたす。
+({})     instanceof Object   // true を返す 䞊蚘ず同じ
+myNonObj instanceof Object   // false を返す プロトタむプはプロトタむプチェヌンの終わりですnull
+myString instanceof Date     // false を返す
+
+myDate instanceof Date      // true を返す
+myDate instanceof Object    // true を返す
+myDate instanceof String    // false を返す
+
+ +

mycar が Car タむプおよび Object タむプであるこずの実蚌

+ +

以䞋のコヌドは、Car オブゞェクトタむプずそのむンスタンスである mycar を生成しおいたす。instanceof 挔算子で、mycar は Car タむプおよび Object タむプであるこずを実蚌したす。

+ +
function Car(make, model, year) {
+  this.make = make;
+  this.model = model;
+  this.year = year;
+}
+let mycar = new Car('Honda', 'Accord', 1998)
+let a = mycar instanceof Car     // true を返す
+let b = mycar instanceof Object  // true を返す
+
+ +

むンスタンスではないこずの実蚌

+ +

オブゞェクトが特定のコンストラクタの instanceof でないかどうかを確認するには次のようにしたす。

+ +
if (!(mycar instanceof Car)) {
+  // Do something, like:
+  // mycar = new Car(mycar)
+}
+
+ +

これは実際には次のものずは異なりたす。

+ +
if (!mycar instanceof Car)
+ +

これは垞に false になりたす。(!mycar は instanceof の前に評䟡され、垞に Car のむンスタンスを確認したブヌル倀になりたす)。

+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.instanceof")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/left_shift/index.html b/files/ja/web/javascript/reference/operators/left_shift/index.html new file mode 100644 index 0000000000..9a274f84b2 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/left_shift/index.html @@ -0,0 +1,77 @@ +--- +title: 巊シフト (<<) +slug: Web/JavaScript/Reference/Operators/Left_shift +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference + - ビット挔算子 + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Left_shift +--- +
{{jsSidebar("Operators")}}
+ +

巊シフト挔算子 (<<)は、1぀目のオペランドを指定されたビット数だけ巊にずらしたす。巊にずらしおあふれたビットは廃棄されたす。0のビットが右からずれお入りたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-left-shift.html")}}
+ + + +

構文

+ +
a << b
+
+ +

解説

+ +

この挔算子は、1぀目のオペランドを指定されたビット数だけ巊にずらしたす。巊にずらしおあふれたビットは廃棄されたす。0のビットが右からずれお入りたす。

+ +

䟋えば 9 << 2 は 36 になりたす。

+ +
.    9 (10進数): 00000000000000000000000000001001 (2進数)
+                  --------------------------------
+9 << 2 (10進数): 00000000000000000000000000100100 (2進数) = 36 (10進数)
+
+ +

任意の数 x を y ビット分だけ巊にビット単䜍にずらすず、 x * 2 ** y になりたす。
+ ですから、䟋えば 9 << 3 は 9 * (2 ** 3) = 9 * (8) = 72 になりたす。

+ +

䟋

+ +

巊シフトの䜿甚

+ +
9 << 3; // 72
+
+// 9 * (2 ** 3) = 9 * (8) = 72
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-bitwise-shift-operators', 'Bitwise Shift Operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.left_shift")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/left_shift_assignment/index.html b/files/ja/web/javascript/reference/operators/left_shift_assignment/index.html new file mode 100644 index 0000000000..cbe638ccd2 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/left_shift_assignment/index.html @@ -0,0 +1,61 @@ +--- +title: 巊シフト代入 (<<=) +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 +--- +
{{jsSidebar("Operators")}}
+ +

巊シフト代入挔算子 (<<=) は、指定された量のビットを巊に移動し、結果を倉数に代入したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-left-shift-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x <<= y
+Meaning:  x   = x << y
+ +

䟋

+ +

巊シフト代入の䜿甚

+ +
let a = 5;
+// 00000000000000000000000000000101
+
+bar <<= 2; // 20
+// 00000000000000000000000000010100
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.left_shift_assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/less_than/index.html b/files/ja/web/javascript/reference/operators/less_than/index.html new file mode 100644 index 0000000000..c684188b51 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/less_than/index.html @@ -0,0 +1,115 @@ +--- +title: 小なり (<) +slug: Web/JavaScript/Reference/Operators/Less_than +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Less_than +--- +
{{jsSidebar("Operators")}}
+ +

小なり挔算子 (<) は、巊蟺のオペランドが右蟺のオペランドより小さい堎合は true を返し、それ以倖の堎合は false を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-less-than.html")}}
+ + + +

構文

+ +
 x < y
+ +

説明

+ +

オペランドは、以䞋に倧たかに芁玄されおいる抜象関係比范アルゎリズムを䜿甚しお比范されたす:

+ + + +

䟋

+ +

文字列ず文字列の比范

+ +
console.log("a" < "b");        // true
+console.log("a" < "a");        // false
+console.log("a" < "3");        // false
+ +

文字列ず数倀の比范

+ +
console.log("5" < 3);          // false
+console.log("3" < 3);          // false
+console.log("3" < 5);          // true
+
+console.log("hello" < 5);      // false
+console.log(5 < "hello");      // false
+
+console.log("5" < 3n);         // false
+console.log("3" < 5n);         // true
+ +

数倀ず数倀の比范

+ +
console.log(5 < 3);            // false
+console.log(3 < 3);            // false
+console.log(3 < 5);            // true
+ +

数倀ず BigInt の比范

+ +
console.log(5n < 3);           // false
+console.log(3 < 5n);           // true
+ +

ブヌル倀, 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
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational operators')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.less_than")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/less_than_or_equal/index.html b/files/ja/web/javascript/reference/operators/less_than_or_equal/index.html new file mode 100644 index 0000000000..425fe7c264 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/less_than_or_equal/index.html @@ -0,0 +1,104 @@ +--- +title: 小なりむコヌル (<=) +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 +--- +
{{jsSidebar("Operators")}}
+ +

小なりむコヌル挔算子 (<=) は、巊のオペランドが右のオペランドより小さいか等しい堎合に true を返し、それ以倖の堎合は false を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-less-than-or-equal.html")}}
+ + + +

構文

+ +
 x <= y
+ +

解説

+ +

オペランドは抜象関係比范アルゎリズムを䜿甚しお比范されたす。このアルゎリズムの抂芁は倧なり挔算子のドキュメントをご芧ください。

+ +

䟋

+ +

文字列ず文字列の比范

+ +
console.log("a" <= "b");     // true
+console.log("a" <= "a");     // true
+console.log("a" <= "3");     // false
+
+ +

文字列ず数倀の比范

+ +
console.log("5" <= 3);       // false
+console.log("3" <= 3);       // true
+console.log("3" <= 5);       // true
+
+console.log("hello" <= 5);   // false
+console.log(5 <= "hello");   // false
+ +

数倀ず数倀の比范

+ +
console.log(5 <= 3);         // false
+console.log(3 <= 3);         // true
+console.log(3 <= 5);         // true
+ +

数倀ず BigInt の比范

+ +
console.log(5n <= 3);        // false
+console.log(3 <= 3n);        // true
+console.log(3 <= 5n);        // true
+ +

論理型, 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
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.less_than_or_equal")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/logical_and/index.html b/files/ja/web/javascript/reference/operators/logical_and/index.html new file mode 100644 index 0000000000..467230cfec --- /dev/null +++ b/files/ja/web/javascript/reference/operators/logical_and/index.html @@ -0,0 +1,146 @@ +--- +title: 論理積 (&&) +slug: Web/JavaScript/Reference/Operators/Logical_AND +tags: + - JavaScript + - Language feature + - Logical Operator + - Operator + - Reference + - 挔算子 + - 蚀語機胜 + - 論理挔算子 +translation_of: Web/JavaScript/Reference/Operators/Logical_AND +--- +
{{jsSidebar("Operators")}}
+ +

論理積 (&&) 挔算子 (論理結合) をオペランドの組み合わせに察しお䜿甚するず、すべおのオペランドが true である堎合に true になりたす。䞀般的には {{jsxref("Boolean")}} (論理) 倀で䜿甚されたす。その堎合は論理倀を返したす。ただし && 挔算子は実際には指定されたオペランドのうち䞀぀の倀を返すので、この挔算子が論理倀以倖で䜿甚された堎合は、論理倀以倖の倀を返すこずになりたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-and.html", "shorter")}}
+ + + +

構文

+ +
expr1 && expr2
+
+ +

解説

+ +

expr1 が true に倉換できる堎合は expr2 を返し、それ以倖の堎合は expr1 を返したす。

+ +

ある倀が true に倉換できる堎合、その倀は真倀 ({{Glossary("truthy")}}) ず呌ばれたす。ある倀が false に倉換できる堎合、その倀は停倀 ({{Glossary("falsy")}}) ず呌ばれたす。

+ +

false に倉換するこずができる匏の䟋を瀺したす。

+ + + +

&& 挔算子では論理倀以倖のオペランドを䜿甚するこずができたすが、返倀が垞に boolean プリミティブに倉換するこずが可胜であるため、論理挔算子ず芋なすこずができたす。返倀 (たたは䞀般的な匏) を察応する論理倀に明瀺的に倉換するには、二重の吊定挔算子たたは {{jsxref("Global_Objects/Boolean/Boolean", "Boolean")}} コンストラクタヌを䜿甚しおください。

+ +

短絡評䟡

+ +

論理積の匏は巊から右ぞず評䟡され、䞋蚘の芏則を䜿甚しお「短絡」評䟡が可胜なように評䟡されたす。

+ +

(停倀の匏) && expr は短絡評䟡で停倀の匏に評䟡されたす。

+ +

短絡ずは、䞊蚘の expr の郚分が評䟡されず、したがっお、これを行うこずの副䜜甚が効果を及がさないこずを意味したす (䟋えば、 expr が関数呌び出しであった堎合、この堎所では呌び出されたせん)。これは、最初のオペランドが評䟡された時点で、すでに挔算子の倀が決定しおいるためです。䟋を瀺したす。

+ +
function A(){ console.log('called A'); return false; }
+function B(){ console.log('called B'); return true; }
+
+console.log( A() && B() );
+// 関数呌び出しによっお "called A" がログ出力され、
+// それから false (挔算子の結果の倀) が出力されたす。
+
+ +

挔算子の優先順䜍

+ +

以䞋の匏は同じであるように芋えるかもしれたせんが、異なりたす。 && 挔算子は || 挔算子よりも先に実行されるからです (挔算子の優先順䜍を参照)。

+ +
true || false && false      // true を返す。 && が先に実行されるため
+(true || false) && false    // false を返す。挔算子の優先順䜍が適甚されないため
+ +

䟋

+ +

論理和の䜿甚

+ +

以䞋のコヌドは && (論理積) 挔算子の䟋を瀺しおいたす。

+ +
a1 = true  && true       // t && t returns true
+a2 = true  && false      // t && f returns false
+a3 = false && true       // f && t returns false
+a4 = false && (3 == 4)   // f && f returns false
+a5 = 'Cat' && 'Dog'      // t && t returns "Dog"
+a6 = false && 'Cat'      // f && t returns false
+a7 = 'Cat' && false      // t && f returns false
+a8 = ''    && false      // f && f returns ""
+a9 = false && ''         // f && f returns false
+ +

論理型の倉換芏則

+ +

AND から OR ぞの倉換

+ +

論理型に関する以䞋の操䜜は、

+ +
bCondition1 && bCondition2
+ +

垞に以䞋のものず等しくなりたす。

+ +
!(!bCondition1 || !bCondition2)
+ +

OR から AND ぞの倉換

+ +

論理型に関する以䞋の操䜜は、

+ +
bCondition1 || bCondition2
+ +

垞に以䞋のものず等しくなりたす。

+ +
!(!bCondition1 && !bCondition2)
+ +

入れ子になった括匧の陀去

+ +

論理匏は巊から右に評䟡されるので、いく぀かのルヌルに埓っお耇雑な匏から括匧を削陀するこずは垞に可胜です。

+ +

以䞋の論理型に関する耇合操䜜は、

+ +
bCondition1 || (bCondition2 && bCondition3)
+ +

垞に以䞋のものず等しくなりたす。

+ +
bCondition1 || bCondition2 && bCondition3
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#prod-LogicalANDExpression', 'Logical AND expression')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.logical_and")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/logical_and_assignment/index.html b/files/ja/web/javascript/reference/operators/logical_and_assignment/index.html new file mode 100644 index 0000000000..1e74fc6b2d --- /dev/null +++ b/files/ja/web/javascript/reference/operators/logical_and_assignment/index.html @@ -0,0 +1,89 @@ +--- +title: 論理積代入 (&&=) +slug: Web/JavaScript/Reference/Operators/Logical_AND_assignment +tags: + - JavaScript + - Language feature + - Logical assignment + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Logical_AND_assignment +--- +
{{jsSidebar("Operators")}}
+ +

論理積代入 (x &&= y) 挔算子は、x が {{Glossary("truthy")}} である堎合にのみ代入したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-and-assignment.html")}}
+ + + +

構文

+ +
expr1 &&= expr2
+
+ +

説明

+ +

短絡評䟡ショヌトサヌキット

+ +

論理積挔算子は巊から右に評䟡され、次のルヌルを䜿っお短絡評䟡の可胜性があるかどうかテストされたす。

+ +

(停倀の匏) && expr は、停倀の匏が短絡評䟡されたす。

+ +

短絡評䟡ずは、䞊蚘の expr 郚分が評䟡されないこずを意味したす。したがっお、評䟡された堎合の副䜜甚は発生したせん。䟋えば、expr が関数呌び出しである堎合、呌び出しは行われたせん。

+ +

論理積代入も短絡評䟡されたす。これは、x &&= y が以䞋ず等䟡であるこずを意味したす。

+ +
x && (x = y);
+ +

そしお、垞に代入が行われる以䞋ず等䟡ではありたせん。

+ +
x = x && y;
+
+ +

䟋

+ +

論理積代入挔算子の䜿甚

+ +
let x = 0;
+let y = 1;
+
+x &&= 0; // 0
+x &&= 1; // 0
+y &&= 1; // 1
+y &&= 0; // 0
+
+ +

仕様

+ + + + + + + + + + + + + + +
仕様曞
{{SpecName('Logical Assignment', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザの互換性

+ + + +

{{Compat("javascript.operators.logical_and_assignment")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/logical_not/index.html b/files/ja/web/javascript/reference/operators/logical_not/index.html new file mode 100644 index 0000000000..9ba7180d85 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/logical_not/index.html @@ -0,0 +1,109 @@ +--- +title: 論理吊定 (!) +slug: Web/JavaScript/Reference/Operators/Logical_NOT +tags: + - JavaScript + - Language feature + - Logical Operator + - Operator + - Reference + - 挔算子 + - 蚀語機胜 + - 論理挔算子 +translation_of: Web/JavaScript/Reference/Operators/Logical_NOT +--- +
{{jsSidebar("Operators")}}
+ +

論理吊定 (!) 挔算子 (論理反転、吊定) は、真倀を取るず停倀になり、その逆も同様です。これは通垞 {{jsxref("Boolean")}} (論理型) の倀に䜿甚されたす。論理型以倖の倀に䜿甚した堎合、単䞀のオペランドが true に倉換できる堎合は false を返し、それ以倖は true を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-not.html", "shorter")}}
+ + + +

構文

+ +
!expr
+
+ +

解説

+ +

単䞀のオペランドが true に倉換できる堎合は false を返し、それ以倖は true を返したす。

+ +

ある倀が true に倉換できる堎合、その倀は真倀 ({{Glossary("truthy")}}) ず呌ばれたす。ある倀が false に倉換できる堎合、その倀は停倀 ({{Glossary("falsy")}}) ず呌ばれたす。

+ +

false に倉換するこずができる匏の䟋を瀺したす。

+ + + +

! 挔算子は論理倀以倖のオペランドに察しお䜿甚するこずができたすが、返倀が垞に boolean プリミティブに倉換するこずが可胜であるため、論理挔算子ず芋なすこずができたす。返倀 (たたは䞀般的な匏) を察応する論理倀に明瀺的に倉換するには、二重の吊定挔算子たたは {{jsxref("Global_Objects/Boolean/Boolean", "Boolean")}} コンストラクタヌを䜿甚しおください。

+ +

䟋

+ +

吊定の䜿甚

+ +

以䞋のコヌドは ! (論理吊定) 挔算子の䟋を瀺しおいたす。

+ +
n1 = !true               // !t returns false
+n2 = !false              // !f returns true
+n3 = !''                 // !f returns true
+n4 = !'Cat'              // !t returns false
+ +

二重吊定 (!!)

+ +

耇数の吊定挔算子を連続しお䜿甚するこずで、明瀺的にあらゆる倀を察応する論理型プリミティブに倉換するこずができたす。倉換は倀の「真倀性」たたは「停倀性」に基づいお行われたす ({{Glossary("truthy")}} および {{Glossary("falsy")}} を参照)。

+ +

同じ倉換は {{jsxref("Global_Objects/Boolean/Boolean", "Boolean")}} 関数を通じお行うこずもできたす。

+ +
n1 = !!true                   // !!truthy returns true
+n2 = !!{}                     // !!truthy returns true: any object is truthy...
+n3 = !!(new Boolean(false))   // ...even Boolean objects with a false .valueOf()!
+n4 = !!false                  // !!falsy returns false
+n5 = !!""                     // !!falsy returns false
+n6 = !!Boolean(false)         // !!falsy returns false
+ +

吊定同士の倉換

+ +

以䞋の操䜜を論理倀で行った堎合、

+ +
!!bCondition
+ +

垞に以䞋のものず等しくなりたす。

+ +
bCondition
+ +

仕様曞

+ + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#prod-LogicalORExpression', 'Logical OR expression')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.logical_or")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/logical_nullish_assignment/index.html b/files/ja/web/javascript/reference/operators/logical_nullish_assignment/index.html new file mode 100644 index 0000000000..1c2235a65e --- /dev/null +++ b/files/ja/web/javascript/reference/operators/logical_nullish_assignment/index.html @@ -0,0 +1,89 @@ +--- +title: Null 合䜓代入 (??=) +slug: Web/JavaScript/Reference/Operators/Logical_nullish_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Logical Operator + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Logical_nullish_assignment +--- +
{{jsSidebar("Operators")}}
+ +

Null 合䜓代入 (x ??= y) 挔算子は、x が {{Glossary("nullish")}} (null たたは undefined) である堎合にのみ代入を行いたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-nullish-assignment.html")}}
+ + + +

構文

+ +
expr1 ??= expr2
+
+ +

説明

+ +

短絡評䟡ショヌトサヌキット

+ +

Null 合䜓挔算子は巊から右に評䟡され、次のルヌルを䜿っお短絡評䟡の可胜性があるかどうかテストされたす。

+ +

(null や undefined ではない匏) ?? expr は、巊蟺が null でも undefined でもないこずが蚌明されたら、巊蟺の匏が短絡評䟡されたす。

+ +

短絡評䟡ずは、䞊蚘の expr 郚分が評䟡されないこずを意味したす。したがっお、評䟡された堎合の副䜜甚は発生したせん。䟋えば、expr が関数呌び出しである堎合、呌び出しは行われたせん。

+ +

Null 合䜓代入も短絡評䟡されたす。これは、x ??= y が以䞋ず等䟡であるこずを意味したす。

+ +
x ?? (x = y);
+ +

そしお、垞に代入が行われる以䞋ず等䟡ではありたせん。

+ +
x = x ?? y;
+
+ +

䟋

+ +

Null 合䜓代入挔算子の䜿甚

+ +
function config(options) {
+  options.duration ??= 100;
+  options.speed ??= 25;
+  return options;
+}
+
+config({ duration: 125 }); // { duration: 125, speed: 25 }
+config({}); // { duration: 100, speed: 25 }
+
+ +

仕様

+ + + + + + + + + + + + + + +
仕様曞
{{SpecName('Logical Assignment', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザの互換性

+ + + +

{{Compat("javascript.operators.logical_nullish_assignment")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/logical_operators/index.html b/files/ja/web/javascript/reference/operators/logical_operators/index.html new file mode 100644 index 0000000000..5b2cf76b3a --- /dev/null +++ b/files/ja/web/javascript/reference/operators/logical_operators/index.html @@ -0,0 +1,294 @@ +--- +title: 論理挔算子 +slug: Web/JavaScript/Reference/Operators/Logical_Operators +tags: + - JavaScript + - Operator +translation_of: Web/JavaScript/Reference/Operators +--- +
{{jsSidebar("Operators")}}
+ +

抂芁

+ +

{{ 原語䜵蚘("論理挔算子", "Logical operators") }} は、基本的に真停論理倀ずずもに甚いられ真停倀を返したす。しかし、&& および || 挔算子は真停倀ではない倀も䜿うこずができるため、その堎合は、真停倀ではない倀を返すこずがありたす。その堎合の考え方は以䞋の「説明」の欄の蚘茉の通りずなりたす。

+ +

説明

+ +

論理挔算子を以䞋の衚で説明したす。:

+ + + + + + + + + + + + + + + + + + + + + + + + +
挔算子䜿甚法説明
論理 AND(&&)expr1 && expr2expr1 を false ず芋るこずができる堎合は、expr1 を返したす。そうでない堎合は、expr2 を返したす。したがっお、真停倀ず共に䜿われた堎合、 挔算察象の䞡方が true ならば、&& は、true を返し、そうでなければ、false を返したす。
論理 OR (||)expr1 || expr2expr1 を true ず芋るこずができる堎合は、expr1 を返したす。そうでない堎合は、expr2 を返したす。したがっお、真停倀ず共に䜿われた堎合、 挔算察象のどちらかが true ならば、|| は、true を返し、䞡方ずも false の堎合は、false を返したす。
論理 NOT (!)!expr単䞀の挔算察象が true ず芋るこずができる堎合は、false を返したす。そうでない堎合は、true を返したす。
+ +

true に倉換できる倀は、いわゆる {{Glossary("truthy")}} です。false に倉換できる倀は、いわゆる {{Glossary("falsy")}} です。

+ +

false ず芋るこずができる匏の䟋は、null、0、空文字列 ("")、あるいは、undefined ず評䟡されるものです。

+ +

&& ず || 挔算子が真停倀ではない倀である挔算察象ずずもに甚いるこずができおも、それらは、真停挔算子ず考えるこずができたす。なぜなら、それらの戻り倀は、垞に、真停倀ず芋るこずができるからです。

+ +

ショヌトサヌキット評䟡

+ +

論理挔算子は巊から右ぞ評䟡されるため、論理挔算子で巊蟺を評䟡した時点で論理匏の結果が確定した堎合には右蟺の評䟡を行わないこずを、ショヌトサヌキット評䟡ずいいたす。䟋えば、A && Bずいう論理匏があった堎合、Aがfalseなら、その時点で匏党䜓の結果はfalseで確定するため、Bがどうであるかに぀いおはチェックしたせん。:

+ + + +

 䞊蚘の匏の anything の郚分は評䟡されたせん。たた、䞊蚘の匏の anything の郚分は (括匧で瀺しおいるずおり) ひず぀の論理匏ですので泚意しおください。

+ +

䟋えば、以䞋の 2 ぀の関数は等䟡です。

+ +
function shortCircuitEvaluation() {
+  doSomething() || doSomethingElse()
+}
+
+function equivalentEvaluation() {
+  var flag = doSomething();
+  if (!flag) {
+    doSomethingElse();
+  }
+}
+
+ +

しかし、以䞋の匏は等䟡ではありたせん。これは挔算子の優先順䜍のためであり、右偎の挔算子をひず぀の匏にする (必芁に応じお括匧でグルヌプ化する) 必芁性の重芁床を高めおいたす。

+ +
false && true  || true      // true を返す
+false && (true || true)     // false を返す
+ +

論理 AND (&&)

+ +

以䞋のコヌドは、&& (論理 AND) 挔算子の䟋を瀺しおいたす。

+ +
a1 = true  && true      // t && t true を返したす。
+a2 = true  && false     // t && f false を返したす。
+a3 = false && true      // f && t false を返したす。
+a4 = false && (3 == 4)  // f && f false を返したす。
+a5 = "Cat" && "Dog"     // t && t "Dog" を返したす。
+a6 = false && "Cat"     // f && t false を返したす。
+a7 = "Cat" && false     // t && f false を返したす。
+
+ +

論理 OR (||)

+ +

以䞋のコヌドは、|| (論理 OR) 挔算子の䟋を瀺しおいたす。

+ +
o1 = true  || true       // t || t true を返したす。
+o2 = false || true       // f || t true を返したす。
+o3 = true  || false      // t || f true を返したす。
+o4 = false || (3 == 4)   // f || f false を返したす。
+o5 = "Cat" || "Dog"      // t || t "Cat" を返したす。
+o6 = false || "Cat"      // f || t "Cat" を返したす。
+o7 = "Cat" || false      // t || f "Cat" を返したす。
+
+ +

論理 NOT (!)

+ +

以䞋のコヌドは、! (論理 NOT) 挔算子の䟋を瀺しおいたす。

+ +
n1 = !true              // !t false を返したす。
+n2 = !false             // !f true を返したす。
+n3 = !"Cat"             // !t false を返したす。
+
+ +

倉換芏則

+ +

AND から OR ぞの倉換

+ +

Boolean に぀いお以䞋の挔算を行いたす:

+ +
bCondition1 && bCondition2
+ +

これは以䞋の挔算ず等䟡です:

+ +
!(!bCondition1 || !bCondition2)
+ +

OR から AND ぞの倉換

+ +

Boolean に぀いお以䞋の挔算を行いたす:

+ +
bCondition1 || bCondition2
+ +

これは以䞋の挔算ず等䟡です:

+ +
!(!bCondition1 && !bCondition2)
+ +

NOT 間の倉換

+ +

Boolean に぀いお以䞋の挔算を行いたす:

+ +
!!bCondition
+ +

これは以䞋の挔算ず等䟡です:

+ +
bCondition
+ +

入れ子の括匧を削陀する

+ +

論理挔算子は巊から右ぞ評䟡されるため、耇雑な匏の䞭にある括匧をいく぀かの芏則に埓っお削陀するこずができたす。

+ +

入れ子の AND を削陀する

+ +

Boolean に぀いお以䞋の耇雑な挔算を行いたす:

+ +
bCondition1 || (bCondition2 && bCondition3)
+ +

これは以䞋の挔算ず等䟡です:

+ +
bCondition1 || bCondition2 && bCondition3
+ +

入れ子の OR を削陀する

+ +

Boolean に぀いお以䞋の耇雑な挔算を行いたす:

+ +
bCondition1 && (bCondition2 || bCondition3)
+ +

これは以䞋の挔算ず等䟡です:

+ +
!(!bCondition1 || !bCondition2 && !bCondition3)
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様曞策定状況コメント
{{SpecName('ES1')}}{{Spec2('ES1')}}最初期の定矩
{{SpecName('ES5.1', '#sec-11.11')}}{{Spec2('ES5.1')}}仕様曞内のいく぀かのセクションで定矩: Logical NOT Operator, Binary Logical Operators
{{SpecName('ES6', '#sec-binary-logical-operators')}}{{Spec2('ES6')}}仕様曞内のいく぀かのセクションで定矩: Logical NOT Operator, Binary Logical Operators
{{SpecName('ESDraft', '#sec-binary-logical-operators')}}{{Spec2('ESDraft')}}仕様曞内のいく぀かのセクションで定矩: Logical NOT Operator, Binary Logical Operators
+ +

ブラりザ実装状況

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
機胜ChromeFirefox (Gecko)Internet ExplorerOperaSafari
論理 AND (&&){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
論理 OR (||){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
論理 NOT (!){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
機胜AndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
論理 AND (&&){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
論理 OR (||){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
論理 NOT (!){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/logical_or/index.html b/files/ja/web/javascript/reference/operators/logical_or/index.html new file mode 100644 index 0000000000..8fe1693e8a --- /dev/null +++ b/files/ja/web/javascript/reference/operators/logical_or/index.html @@ -0,0 +1,155 @@ +--- +title: 論理和 (||) +slug: Web/JavaScript/Reference/Operators/Logical_OR +tags: + - JavaScript + - Language feature + - Logical Operator + - Operator + - Reference + - 挔算子 + - 蚀語機胜 + - 論理挔算子 +translation_of: Web/JavaScript/Reference/Operators/Logical_OR +--- +
{{jsSidebar("Operators")}}
+ +

論理和 (||) 挔算子 (論理的分割) をオペランドの組み合わせに察しお䜿甚するず、オペランドのうち 1 ぀以䞊が true である堎合に true になりたす。䞀般的には {{jsxref("Boolean")}} (論理) 倀で䜿甚されたす。その堎合は論理倀を返したす。ただし || 挔算子は実際には指定されたオペランドのうち䞀぀の倀を返すので、この挔算子が論理倀以倖で䜿甚された堎合は、論理倀以倖の倀を返すこずになりたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-or.html", "shorter")}}
+ + + +

構文

+ +
expr1 || expr2
+
+ +

解説

+ +

expr1 が true に倉換できる堎合は expr1 を返し、それ以倖の堎合は expr2 を返したす。

+ +

ある倀が true に倉換できる堎合、その倀は真倀 ({{Glossary("truthy")}}) ず呌ばれたす。ある倀が false に倉換できる堎合、その倀は停倀 ({{Glossary("falsy")}}) ず呌ばれたす。

+ +

false に倉換されうる匏の䟋を瀺したす。

+ + + +

|| 挔算子では論理倀以倖のオペランドを䜿甚するこずができたすが、返倀が垞に boolean プリミティブに倉換するこずが可胜であるため、論理挔算子ず芋なすこずができたす。返倀 (たたは䞀般的な匏) を察応する論理倀に明瀺的に倉換するには、二重の吊定挔算子たたは {{jsxref("Global_Objects/Boolean/Boolean", "Boolean")}} コンストラクタヌを䜿甚しおください。

+ +

短絡評䟡

+ +

論理和の匏は巊から右ぞず評䟡され、䞋蚘の芏則を䜿甚しお「短絡」評䟡が可胜なように評䟡されたす。

+ +

(真倀の匏) || expr は短絡評䟡で真倀の匏に評䟡されたす。

+ +

短絡ずは、䞊蚘の expr の郚分が評䟡されず、したがっお、これを行うこずの副䜜甚が効果を及がさないこずを意味したす (䟋えば、 expr が関数呌び出しであった堎合、この堎所では呌び出されたせん)。これは、最初のオペランドが評䟡された時点で、すでに挔算子の倀が決定しおいるためです。䟋を瀺したす。

+ +
function A(){ console.log('called A'); return false; }
+function B(){ console.log('called B'); return true; }
+
+console.log( B() || A() );
+// 関数呌び出しによっお "called B" がログ出力され、
+// それから true (挔算子の結果の倀) が出力されたす。
+
+ +

挔算子の優先順䜍

+ +

以䞋の匏は同じであるように芋えるかもしれたせんが、異なりたす。 && 挔算子は || 挔算子よりも先に実行されるからです (挔算子の優先順䜍参照)。

+ +
true || false && false      //  true を返す。 && が先に実行されるため
+(true || false) && false    // false を返す。挔算子の優先順䜍が適甚されないため
+ +

䟋

+ +

OR の䜿甚

+ +

以䞋のコヌドは || (論理和) 挔算子の䟋を瀺しおいたす。

+ +
o1 = true  || true       // t || t returns true
+o2 = false || true       // f || t returns true
+o3 = true  || false      // t || f returns true
+o4 = false || (3 == 4)   // f || f returns false
+o5 = 'Cat' || 'Dog'      // t || t returns "Cat"
+o6 = false || 'Cat'      // f || t returns "Cat"
+o7 = 'Cat' || false      // t || f returns "Cat"
+o8 = ''    || false      // f || f returns false
+o9 = false || ''         // f || f returns ""
+o10 = false || varObject // f || object returns varObject
+
+ +
+

泚: この挔算子を䜿甚しおいく぀かの倉数に既定倀を提䟛する堎合、停倀 が䜿甚されないこずに泚意しおください。{{jsxref("null")}} や {{jsxref("undefined")}} をフィルタリングする必芁がある堎合は、Null 合䜓挔算子の䜿甚を怜蚎しおください。

+
+ +

論理型の倉換芏則

+ +

AND から OR ぞの倉換

+ +

論理型に関する以䞋の操䜜は、

+ +
bCondition1 && bCondition2
+ +

垞に以䞋のものず等しくなりたす。

+ +
!(!bCondition1 || !bCondition2)
+ +

OR から AND ぞの倉換

+ +

論理型に関する以䞋の操䜜は、

+ +
bCondition1 || bCondition2
+ +

垞に以䞋のものず等しくなりたす。

+ +
!(!bCondition1 && !bCondition2)
+ +

入れ子になった括匧の陀去

+ +

論理匏は巊から右に評䟡されるので、いく぀かのルヌルに埓っお耇雑な匏から括匧を削陀するこずは垞に可胜です。

+ +

以䞋の論理型に関する耇合操䜜は、

+ +
bCondition1 && (bCondition2 || bCondition3)
+ +

垞に以䞋のものず等しくなりたす。

+ +
!(!bCondition1 || !bCondition2 && !bCondition3)
+ +

仕様曞

+ + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#prod-LogicalORExpression', 'Logical OR expression')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.logical_or")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/logical_or_assignment/index.html b/files/ja/web/javascript/reference/operators/logical_or_assignment/index.html new file mode 100644 index 0000000000..4f9a661684 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/logical_or_assignment/index.html @@ -0,0 +1,93 @@ +--- +title: 論理和代入 (||=) +slug: Web/JavaScript/Reference/Operators/Logical_OR_assignment +tags: + - JavaScript + - Language feature + - Logical Operator + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Logical_OR_assignment +--- +
{{jsSidebar("Operators")}}
+ +

論理和代入挔算子 (x ||= y) は、x が {{Glossary("falsy")}} である堎合にのみ代入したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-or-assignment.html")}}
+ + + +

構文

+ +
expr1 ||= expr2
+
+ +

説明

+ +

短絡評䟡ショヌトサヌキット

+ +

論理和挔算子は次のように動䜜したす。

+ +
x || y;
+// x が truthy の堎合 x を返したす
+// x が truthy ではない堎合 y を返したす
+ +

論理和挔算子は、1番目のオペランドが既に結果を決定しおいない堎合にのみ、2番目のオペランドの評䟡を行う短絡評䟡をしたす。

+ +

論理和代入も短絡評䟡されたす。これは、x ||= y が以䞋ず等䟡であるこずを意味したす。

+ +
x || (x = y);
+
+ +

そしお、垞に代入が行われる以䞋ず等䟡ではありたせん。

+ +
x = x || y;
+
+ +

泚意: この動䜜は、数孊的な代入挔算子やビット代入挔算子ずは異なるこずに泚意しおください。

+ +

䟋

+ +

デフォルトの内容を蚭定する

+ +

"lyrics" 芁玠が空の堎合は、innerHTML をデフォルト倀に蚭定したす。

+ +
document.getElementById('lyrics').innerHTML ||= '<i>No lyrics.</i>'
+ +

ここでの短絡評䟡は、芁玠が䞍必芁に曎新されるこずがなく、远加のパヌスやレンダリング䜜業、フォヌカスの損倱などの望たしくない副䜜甚を匕き起こすこずがないので、特に有益です。

+ +

泚意: チェック察象の API が返す倀に泚意しおください。空の文字列{{Glossary("falsy")}} な倀が返される堎合は、||= を䜿甚する必芁がありたす。それ以倖の堎合戻り倀が {{jsxref("null")}} たたは {{jsxref("undefined")}} の堎合は ??= 挔算子を䜿甚したす。

+ +

仕様

+ + + + + + + + + + + + + + +
仕様曞
{{SpecName('Logical Assignment', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザの互換性

+ + + +

{{Compat("javascript.operators.logical_or_assignment")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/multiplication/index.html b/files/ja/web/javascript/reference/operators/multiplication/index.html new file mode 100644 index 0000000000..3921c0c56a --- /dev/null +++ b/files/ja/web/javascript/reference/operators/multiplication/index.html @@ -0,0 +1,74 @@ +--- +title: 乗算 (*) +slug: Web/JavaScript/Reference/Operators/Multiplication +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Multiplication +--- +
{{jsSidebar("Operators")}}
+ +

乗算挔算子 (*) はオペランドの積を生成したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-multiplication.html")}}
+ +
+ + + +

構文

+ +
Operator: x * y
+
+ +

䟋

+ +

数倀を䜿甚した乗算

+ +
 2 * 2      // 4
+-2 * 2     // -4
+
+ +

無限倧ずの乗算

+ +
Infinity * 0         // NaN
+Infinity * Infinity  // Infinity
+ +

非数ずの乗算

+ +
'foo' * 2 // NaN
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-multiplicative-operators', 'Multiplication operator')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.multiplication")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/multiplication_assignment/index.html b/files/ja/web/javascript/reference/operators/multiplication_assignment/index.html new file mode 100644 index 0000000000..86e53c206a --- /dev/null +++ b/files/ja/web/javascript/reference/operators/multiplication_assignment/index.html @@ -0,0 +1,61 @@ +--- +title: 乗算代入 (*=) +slug: Web/JavaScript/Reference/Operators/Multiplication_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Multiplication_assignment +--- +
{{jsSidebar("Operators")}}
+ +

乗算代入挔算子 (*=) は、倉数に右のオペランドの倀を乗算し、結果を倉数に代入したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-multiplication-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x *= y
+Meaning:  x  = x * y
+ +

䟋

+ +

乗算代入の䜿甚

+ +
// 次の倉数を想定
+//  bar = 5
+
+bar *= 2     // 10
+bar *= 'foo' // NaN
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.multiplication_assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/new.target/index.html b/files/ja/web/javascript/reference/operators/new.target/index.html new file mode 100644 index 0000000000..b00f08cb4e --- /dev/null +++ b/files/ja/web/javascript/reference/operators/new.target/index.html @@ -0,0 +1,113 @@ +--- +title: new.target +slug: Web/JavaScript/Reference/Operators/new.target +tags: + - Classes + - ECMAScript 2015 + - JavaScript + - Language feature + - Reference +translation_of: Web/JavaScript/Reference/Operators/new.target +--- +
{{JSSidebar("Operators")}}
+ +

new.target プロパティを䜿甚するず、関数やコンストラクタが new 挔算子を䜿甚しお呌び出されたかどうかを怜出できたす。コンストラクタや関数内で、new 挔算子でむンスタンス生成するず、new.target はコンストラクタや関数ぞの参照を返したす。通垞の関数呌び出しの堎合、new.target は {{jsxref("undefined")}} です。

+ +
{{EmbedInteractiveExample("pages/js/expressions-newtarget.html")}}
+ + + +

構文

+ +
new.target
+ +

抂芁

+ +

new.target の構文は、new キヌワヌドずドット、プロパティ名 target で構成されおいたす。通垞、ドットの巊偎はプロパティアクセスが行われるオブゞェクトですが、ここでの new はオブゞェクトではありたせん。

+ +

new.target プロパティは、すべおの関数で䜿甚できる疑䌌的なプロパティです。

+ +

クラスのコンストラクタでは、構築されたクラスを参照したす。

+ +

通垞の関数では、new 挔算子を介しお呌び出されたず仮定しお、関数自䜓を参照したす。それ以倖の堎合、new.target は {{jsxref("undefined")}} です。

+ +

アロヌ関数では、new.target は呚囲のスコヌプから継承されたす。

+ +

䟋

+ +

関数呌び出しにおいおの new.target の䜿甚

+ +

通垞の関数呌び出しではコンストラクタ関数の呌び出しずは反察に、new.target は {{jsxref("undefined")}} です。これにより、関数がコンストラクタずしお new で呌び出されたかを怜出できたす。

+ +
function Foo() {
+  if (!new.target) { throw 'Foo() must be called with new' }
+  console.log('Foo instantiated with new')
+}
+
+new Foo()  // logs "Foo instantiated with new"
+Foo()      // throws "Foo() must be called with new"
+
+ +

コンストラクタにおいおの new.target

+ +

クラスコンストラクタで、new.target は new で盎接実行されたコンストラクタを参照したす。これは、コンストラクタは芪クラスにあり、子コンストラクタからデリゲヌトされた堎合も同様です。

+ +
class A {
+  constructor() {
+    console.log(new.target.name)
+  }
+}
+
+class B extends A { constructor() { super() } }
+
+let a = new A()  // logs "A"
+let b = new B()  // logs "B"
+
+class C { constructor() { console.log(new.target)  } }
+class D extends C { constructor() { super()  } }
+
+let c = new C()  // logs class C{constructor(){console.log(new.target);}}
+let d = new D()  // logs class D extends C{constructor(){super();}}
+ +

䞊蚘のクラス C ず D の䟋から、new.target は初期化されたクラスのクラス定矩を指しおいるように芋えたす。たずえば、d を new D() で初期化した堎合は、D のクラス定矩が出力され、同様に c の堎合は C のクラスが出力されたす。

+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-built-in-function-objects', 'Built-in Function Objects')}}
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-built-in-function-objects', 'Built-in Function Objects')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.new_target")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/new/index.html b/files/ja/web/javascript/reference/operators/new/index.html new file mode 100644 index 0000000000..3e9267d703 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/new/index.html @@ -0,0 +1,181 @@ +--- +title: new 挔算子 +slug: Web/JavaScript/Reference/Operators/new +tags: + - JavaScript + - Left-hand-side expressions + - Operator + - Reference + - 巊蟺倀匏 + - 挔算子 +translation_of: Web/JavaScript/Reference/Operators/new +--- +
{{jsSidebar("Operators")}}
+ +

new 挔算子を䜿甚するず、開発者はナヌザヌ定矩のオブゞェクト型やコンストラクタ関数を持぀組み蟌みオブゞェクト型のむンスタンスを䜜成するこずができたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-newoperator.html")}}
+ +

構文

+ +
new constructor[([arguments])]
+ +

匕数

+ +
+
constructor
+
オブゞェクトむンスタンスの型を指定するクラスたたは関数です。
+
+ +
+
arguments
+
constructor が呌び出される際の匕数のリストです。
+
+ +

解説

+ + +

new 挔算子は次のこずを行いたす。

+ +
    +
  1. 空癜のプレヌンな JavaScript オブゞェクトを䜜成したす。
  2. +
  3. 他のオブゞェクトを芪プロトタむプずするこずで、新しく䜜成されたオブゞェクトず他のオブゞェクトをリンクコンストラクタヌを蚭定したす。 +
  4. +
  5. ステップ 1 で新しく䜜成されたオブゞェクトを this コンテキストずしお枡したす。
  6. +
  7. 関数がオブゞェクトを返さない堎合は this を返したす。
  8. +
+ +

ナヌザヌ定矩のオブゞェクトを生成するには、2 ぀のステップが必芁です。

+ +
    +
  1. 関数を蚘述しお、オブゞェクトの型を定矩したす。
  2. +
  3. new 挔算子を䜿甚しお、オブゞェクトのむンスタンスを生成したす。
  4. +
+ +

オブゞェクトの型を定矩するために、オブゞェクトの名称やプロパティを指定する、オブゞェクトの型のための関数を䜜成したす。オブゞェクトは、別のオブゞェクトそのものをプロパティずしお持぀こずができたす。埌述の䟋をご芧ください。

+ +

コヌド new Foo(...) を実行するず、以䞋の凊理が行われたす:

+ +
    +
  1. Foo.prototype を継承する、新しいオブゞェクトを生成したす。
  2. +
  3. 指定した匕数を䌎っおコンストラクタヌ関数 Foo が呌び出され、this が新たに生成したオブゞェクトに玐づけられたす。new Foo は new Foo() ず等䟡です。すなわち、匕数を指定しない堎合は Foo が匕数なしで呌び出されたす。
  4. +
  5. コンストラクタヌ関数が返すオブゞェクト (null, false, 3.1415 などのプリミティブ型ではないもの) が、new 匏の結果になりたす。コンストラクタヌ関数が明瀺的にオブゞェクトを返さない堎合は、ステップ 1 で生成したオブゞェクトを代わりに䜿甚したす。(通垞、コンストラクタヌは倀を返したせんが、通垞のオブゞェクト生成プロセスをオヌバヌラむドしたい堎合はそのようにするこずができたす。)
  6. +
+ +

以前生成したオブゞェクトに、い぀でもプロパティを远加できたす。䟋えば car1.color = "black" ずいう構文は、color プロパティを car1 に远加しお、倀ずしお "black" を代入したす。しかし、これは他のオブゞェクトには圱響を䞎えたせん。同じ型のすべおのオブゞェクトに新たなプロパティを远加するには、Car オブゞェクト型の定矩に察しおプロパティを远加しなければなりたせん。

+ +

Function.prototype プロパティを䜿甚しお、以前定矩したオブゞェクトに察しお共有のプロパティを远加できたす。これはオブゞェクト型のあるむンスタンスのプロパティではなく、関数を䜿甚しお生成したすべおのオブゞェクトで共有するプロパティを定矩したす。以䞋のコヌドでは Car 型のオブゞェクトすべおに察しお color プロパティを倀 "original color" で定矩しおいたす。たた、むンスタンスオブゞェクト car1 の color プロパティに文字列の倀 "black" を䞊曞きしおいたす。詳しくは prototype をご芧ください。

+ +
function Car() {}
+car1 = new Car();
+car2 = new Car();
+
+console.log(car1.color);    // undefined
+
+Car.prototype.color = "original color";
+console.log(car1.color);    // original color
+
+car1.color = 'black';
+console.log(car1.color);   // black
+
+console.log(car1.__proto__.color) //original color
+console.log(car2.__proto__.color) //original color
+console.log(car1.color)  // black
+console.log(car2.color) // original color
+
+ +
+

new 挔算子を蚘述しなかった堎合、コンストラクタヌは通垞の関数ずしお扱われ、オブゞェクトを䜜成したせん。その際、this の倀も異なるものになりたす。

+
+ +

䟋

+ +

オブゞェクトの型ずオブゞェクトのむンスタンス

+ +

自動車甚のオブゞェクト型を䜜成したいずしたす。このオブゞェクト型は Car ずいう名前で、make、model、year ずいうプロパティを持たせたす。そのために、以䞋の関数を蚘述したす。

+ +
function Car(make, model, year) {
+  this.make = make;
+  this.model = model;
+  this.year = year;
+}
+
+ +

これで、以䞋のように mycar ずいう名前のオブゞェクトを生成できたす。

+ +
var mycar = new Car('Eagle', 'Talon TSi', 1993);
+
+ +

この構文は mycar を生成しお、プロパティに特定の倀を代入しおいたす。mycar.make の倀は文字列 "Eagle"、mycar.year の倀は敎数 1993 などずなりたす。

+ +

new を呌び出しお、car オブゞェクトをいく぀も生成できたす。䟋えば、

+ +
var kenscar = new Car('Nissan', '300ZX', 1992);
+
+ +

それ自身が別のオブゞェクトであるプロパティ

+ +

以䞋のように、Person ずいう名前のオブゞェクトを定矩したす:

+ +
function Person(name, age, sex) {
+  this.name = name;
+  this.age = age;
+  this.sex = sex;
+}
+
+ +

そしお、以䞋のように Person オブゞェクトのむンスタンスを新たに 2 ぀生成したす。

+ +
var rand = new Person('Rand McNally', 33, 'M');
+var ken = new Person('Ken Jones', 39, 'M');
+
+ +

さらに Car の定矩を、以䞋のように Person オブゞェクトを倀ずしおずる owner プロパティを持぀ように曞き換えたす:

+ +
function Car(make, model, year, owner) {
+  this.make = make;
+  this.model = model;
+  this.year = year;
+  this.owner = owner;
+}
+
+ +

新しいオブゞェクトを生成するため、以䞋のように䜿甚したす。

+ +
var car1 = new Car('Eagle', 'Talon TSi', 1993, rand);
+var car2 = new Car('Nissan', '300ZX', 1992, ken);
+
+ +

この構文では新しいオブゞェクトを生成するずきに文字列や敎数のリテラル倀を枡す代わりに、owner のパラメヌタずしおオブゞェクト rand や ken を枡しおいたす。car2 の所有者名を調べるには、以䞋のようにしおプロパティにアクセスできたす。

+ +
car2.owner.name
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-new-operator', 'The new Operator')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.new")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/nullish_coalescing_operator/index.html b/files/ja/web/javascript/reference/operators/nullish_coalescing_operator/index.html new file mode 100644 index 0000000000..3302e2e02b --- /dev/null +++ b/files/ja/web/javascript/reference/operators/nullish_coalescing_operator/index.html @@ -0,0 +1,155 @@ +--- +title: Null 合䜓 (??) +slug: Web/JavaScript/Reference/Operators/Nullish_coalescing_operator +tags: + - JavaScript + - Language feature + - Operator + - Reference + - nullish coalescing +translation_of: Web/JavaScript/Reference/Operators/Nullish_coalescing_operator +--- +

{{JSSidebar("Operators")}}

+ +

Null 合䜓挔算子 (??) は論理挔算子の䞀皮です。この挔算子は巊蟺が {{jsxref("null")}} たたは {{jsxref("undefined")}} の堎合に右の倀を返し、それ以倖の堎合に巊の倀を返したす。

+ +

OR 挔算子 (||) ず違い、null ず undefined 以倖の falsy な倀のずきには巊の倀を返したす。぀たり、巊蟺が '' や 0 の堎合は巊の倀を評䟡しお返したす。その他の䟋に぀いおは以䞋を参照しおください。

+ +
{{EmbedInteractiveExample("pages/js/expressions-nullishcoalescingoperator.html")}}
+ + + +

構文

+ +
leftExpr ?? rightExpr
+
+ +

説明

+ +

Null 合䜓挔算子は巊蟺が {{jsxref("null")}} たたは {{jsxref("undefined")}} の堎合に右蟺の倀を返したす。

+ +

倉数にデフォルト倀を代入する

+ +

以前は、倉数にデフォルト倀を代入したい堎合、䞀般的なパタヌンは OR 挔算子 (||) を䜿甚するこずでした:

+ +
let foo;
+
+//  foo is never assigned any value so it is still undefined
+let someDummyText = foo || 'Hello!';
+ +

しかし、|| が論理挔算子であるため、巊蟺の倀は評䟡によっお匷制的にブヌル倀になり、falsy な倀 (0, '', NaN, null, undefined) が返されるこずはありたせん。この動䜜は、0 や '', NaN を有効な倀ず考えおいる堎合、予期せぬ結果を匕き起こす可胜性がありたす。

+ +
let count = 0;
+let text = "";
+
+let qty = count || 42;
+let message = text || "hi!";
+console.log(qty);     // 42 and not 0
+console.log(message); // "hi!" and not ""
+
+ +

Null 合䜓挔算子は、巊蟺の倀が null もしくは undefined のどちらか (その他の falsy な倀は含みたせん) に評䟡された堎合にのみ右蟺の倀を返すこずで、この朜圚的な危険を回避したす:

+ +
let myText = ''; // An empty string (which is also a falsy value)
+
+let notFalsyText = myText || 'Hello world';
+console.log(notFalsyText); // Hello world
+
+let preservingFalsy = myText ?? 'Hi neighborhood';
+console.log(preservingFalsy); // '' (as myText is neither undefined nor null)
+
+ +

短絡評䟡

+ +

OR 挔算子や AND 挔算子ず同様に、巊蟺が null でも undefined でもないこずが蚌明された堎合、右蟺の匏は評䟡されたせん。

+ +
function A() { console.log('A was called'); return undefined;}
+function B() { console.log('B was called'); return false;}
+function C() { console.log('C was called'); return "foo";}
+
+console.log( A() ?? C() );
+// logs "A was called" then "C was called" and then "foo"
+// as A() returned undefined so both expressions are evaluated
+
+console.log( B() ?? C() );
+// logs "B was called" then "false"
+// as B() returned false (and not null or undefined), the right
+// hand side expression was not evaluated
+
+ +

AND 挔算子、OR 挔算子ず぀なげお䜿わない

+ +

AND 挔算子 (&&) ず OR 挔算子 (||) を盎接 ?? ず぀なげお䜿うこずはできたせん。このような堎合 SyntaxError が発生したす。

+ +
null || undefined ?? "foo"; // raises a SyntaxError
+true || undefined ?? "foo"; // raises a SyntaxError
+ +

ただし、カッコを付けお明瀺的に優先順䜍を瀺すのは正しいやり方です。

+ +
(null || undefined) ?? "foo"; // returns "foo"
+
+ +

オプショナルチェむニング挔算子 (?.) ずの関係

+ +

Null 合䜓挔算子は、null ず undefined を特定の倀ずしお扱いたすが、オプショナルチェむニング挔算子 (?.) も同様の扱いをしたす。この挔算子は、null たたは undefined である可胜性のあるオブゞェクトのプロパティにアクセスするのに䟿利です。

+ +
let foo = { someFooProp: "hi" };
+
+console.log(foo.someFooProp?.toUpperCase());  // "HI"
+console.log(foo.someBarProp?.toUpperCase()); // undefined
+
+ +

䟋

+ +

次の䟋では、デフォルト倀を蚭定しおいたすが、null や undefined 以倖の倀は保持されたす。

+ +
const nullValue = null;
+const emptyText = ""; // falsy
+const someNumber = 42;
+
+const valA = nullValue ?? "default for A";
+const valB = emptyText ?? "default for B";
+const valC = someNumber ?? 0;
+
+console.log(valA); // "default for A"
+console.log(valB); // "" (as the empty string is not null or undefined)
+console.log(valC); // 42
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
+

{{SpecName('ESDraft', '#prod-Nulli', 'nullish coalescing expression')}}

+
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.nullish_coalescing")}}

+ +

実装の進捗

+ +

この機胜はただブラりザヌ間盞互運甚の安定性に達しおいないため、以䞋の衚はこの機胜の日々の実装状況を瀺しおいたす。このデヌタは、 JavaScript の暙準テストスむヌトである Test262 で、該圓する機胜テストを Nightly ビルド、たたは各ブラりザヌの JavaScript ゚ンゞンの最新リリヌスで実行するこずで生成されたす。

+ +
{{EmbedTest262ReportResultsTable("coalesce-expression")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/object_initializer/index.html b/files/ja/web/javascript/reference/operators/object_initializer/index.html new file mode 100644 index 0000000000..305f7259ed --- /dev/null +++ b/files/ja/web/javascript/reference/operators/object_initializer/index.html @@ -0,0 +1,311 @@ +--- +title: オブゞェクト初期化子 +slug: Web/JavaScript/Reference/Operators/Object_initializer +tags: + - ECMAScript 2015 + - JSON + - JavaScript + - Literal + - Methods + - Object + - Primary Expression + - computed + - mutation + - properties +translation_of: Web/JavaScript/Reference/Operators/Object_initializer +--- +
{{JsSidebar("Operators")}}
+ +

オブゞェクトは new Object()、Object.create()、リテラル衚蚘法 (initializer 衚蚘法) を䜿甚しお初期化されたす。オブゞェクト初期化子はオブゞェクトのプロパティ名ず関連した倀のれロ以䞊のペアのリストです。䞭括匧 ({}) で囲たれたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-objectinitializer.html")}}
+ + + +

構文

+ +
var o = {};
+var o = { a: 'foo', b: 42, c: {} };
+
+var a = 'foo', b = 42, c = {};
+var o = {a: a, b: b, c: c};
+
+var o = {
+  property: function (parameters) {},
+  get property() {},
+  set property(value) {},
+};
+
+ +

ECMAScript 2015 での新しい衚蚘法

+ +

これらの衚蚘をサポヌトするための互換性の衚を参照しおください。非サポヌト環境では、これらの衚蚘は、構文゚ラヌに぀ながりたす。

+ +
// Shorthand property names (ES2015)
+var a = 'foo', b = 42, c = {};
+var o = {a, b, c};
+
+// Shorthand method names (ES2015)
+var o = {
+  property(parameters) {}
+};
+
+// Computed property names (ES2015)
+var prop = 'foo';
+var o = {
+  [prop]: 'hey',
+  ['b' + 'ar']: 'there'
+};
+ +

説明

+ +

オブゞェクト初期化子は、{{jsxref("Object")}} の初期化を衚す匏です。オブゞェクトはオブゞェクトを衚すプロパティで構成されたす。オブゞェクトプロパティの倀は特定の {{Glossary("primitive")}} デヌタ型か他のオブゞェクトのどちらかを含みたす。

+ +

オブゞェクトの生成

+ +

プロパティを持たない空のオブゞェクトは䞋蚘のように䞭括匧を蚘述するこずで生成されたす。

+ +
var object = {};
+ +

リテラル衚蚘法、initializer 衚蚘法の利点は䞭括匧内にプロパティをも぀オブゞェクトをすばやく生成できる点です。たた、カンマで区切られた key: value のペアを蚘述するこずでプロパティ倀の生成も可胜です。以䞋に、䞉぀のプロパティをも぀オブゞェクトを生成する方法を蚘したす。キヌは "foo"、"age"、"baz" であり、各々のキヌの倀は、文字列の "bar"、数倀の 42 、そしお baz はオブゞェクトがプロパティ倀ずなりたす。

+ +
var object = {
+  foo: 'bar',
+  age: 42,
+  baz: {myProp: 12},
+}
+ +

プロパティぞのアクセス

+ +

䞀床オブゞェクトを生成した埌も、プロパティにアクセスするこずができたす。その方法は「ドット衚蚘法」か「ブラケット衚蚘法」ず蚀われたす。詳现に぀いおは、プロパティぞのアクセスをご芧ください。

+ +
object.foo; // "bar"
+object['age']; // 42
+
+object.foo = 'baz';
+
+ +

プロパティの定矩

+ +

初期化構文を䜿甚しおプロパティを蚘譜する方法に぀いお既に孊びたした。倚くの堎合、コヌド内には、オブゞェクトに蚭定したい倉数がありたす。䞋蚘のコヌドをご芧ください。:

+ +
var a = 'foo',
+    b = 42,
+    c = {};
+
+var o = {
+  a: a,
+  b: b,
+  c: c
+};
+ +

ECMAScript 2015 では、同じこずを達成するために利甚可胜な短い衚蚘がありたす。:

+ +
var a = 'foo',
+    b = 42,
+    c = {};
+
+// Shorthand property names (ES2015)
+var o = {a, b, c};
+
+// In other words,
+console.log((o.a === {a}.a)); // true
+
+ +

重耇したプロパティ名

+ +

プロパティに察しお同じ名前を䜿甚するずき、二番目のプロパティは最初のプロパティを䞊曞きしたす。

+ +
var a = {x: 1, x: 2};
+console.log(a); // {x: 2}
+
+ +

ECMAScript 5 の strict モヌドのコヌドでは、重耇したプロパティの名前は {{jsxref("SyntaxError")}} ずみなされたす。実行時に重耇を可胜にする蚈算されたプロパティ名の導入により、ECMAScript 2015 ではこの制限は取り陀かれたした。

+ +
function haveES2015DuplicatePropertySemantics() {
+  'use strict';
+  try {
+    ({prop: 1, prop: 2});
+
+    // No error thrown, duplicate property names allowed in strict mode
+    return true;
+  } catch (e) {
+    // Error thrown, duplicates prohibited in strict mode
+    return false;
+  }
+}
+ +

メ゜ッドの定矩

+ +

オブゞェクトのプロパティは function、getter メ゜ッド、setter メ゜ッドも参照するこずができたす

+ +
var o = {
+  property: function (parameters) {},
+  get property() {},
+  set property(value) {},
+};
+ +

ECMAScript 2015 では、省略衚蚘が利甚可胜です。そのため、キヌワヌド "function" はもはや必芁ではありたせん。

+ +
// Shorthand method names (ES2015)
+var o = {
+  property(parameters) {},
+  *generator() {}
+};
+ +

ECMAScript 2015 では、その倀がゞェネレヌタヌ関数であるプロパティを簡朔に定矩する方法がありたす。:

+ +
var o = {
+  *generator() {
+    ...........
+  }
+};
+ +

ECMAScript 5 では、䞋蚘のように蚘述したす (しかし、ES5 はゞェネレヌタヌを持たないこずに泚意しおください):

+ +
var o = {
+  generator: function* () {
+    ...........
+  }
+};
+ +

メ゜ッドの詳现や䟋に぀いおは、メ゜ッド定矩をご芧ください。

+ +

蚈算されたプロパティ名

+ +

ECMAScript 2015 から、オブゞェクト初期化子構文も蚈算されたプロパティ名をサポヌトしたす。括匧 [] の䞭に匏を蚘述でき、それが蚈算されおプロパティ名ずしお䜿甚されたす。これは、あなたが既にプロパティを読み蟌んだり蚭定したりするために䜿甚したこずがあるかもしれない、メンバヌ挔算子構文のブラケット衚蚘を思い起こさせたす。今では、オブゞェクトリテラルでも同様な構文を䜿うこずができたす:

+ +
// Computed property names (ES2015)
+var i = 0;
+var a = {
+  ['foo' + ++i]: i,
+  ['foo' + ++i]: i,
+  ['foo' + ++i]: i
+};
+
+console.log(a.foo1); // 1
+console.log(a.foo2); // 2
+console.log(a.foo3); // 3
+
+var param = 'size';
+var config = {
+  [param]: 12,
+  ['mobile' + param.charAt(0).toUpperCase() + param.slice(1)]: 4
+};
+
+console.log(config); // {size: 12, mobileSize: 4}
+ +

スプレッドプロパティ

+ +

ECMAScript proposal の Rest/Spread プロパティ ステヌゞ 4 オブゞェクトリテラルにスプレッドプロパティを远加したす。 枡されたオブゞェクトから新しいオブゞェクトに独自の列挙可胜なプロパティをコピヌしたす。

+ +

{{jsxref("Object.assign()")}} を䜿うよりも短いコヌドで prototype を陀いた浅いコピヌの䜜成や、マヌゞしたオブゞェクトの䜜成を曞けたす。

+ +
var obj1 = { foo: 'bar', x: 42 };
+var obj2 = { foo: 'baz', y: 13 };
+
+var clonedObj = { ...obj1 };
+// Object { foo: "bar", x: 42 }
+
+var mergedObj = { ...obj1, ...obj2 };
+// Object { foo: "baz", x: 42, y: 13 }
+ +

{{jsxref("Object.assign()")}} は setters をトリガヌしたすが、スプレッド構文はトリガヌできたせん。

+ +

プロトタむプ倉異

+ +

__proto__: value 圢匏、たたは "__proto__": value 圢匏のプロパティ定矩は、__proto__ 名をも぀プロパティを生成したせん。かわりに、䞎えられた倀がオブゞェクトか null の堎合、その倀に生成されたオブゞェクトの [[Prototype]] を倉曎したす (その倀がオブゞェクト、たたは null ではない堎合、オブゞェクトは倉曎されたせん)。

+ +
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__'));
+
+ +

単䞀のプロトタむプの倉異のみ、オブゞェクトリテラルに蚱可されおいたす: すなわち、耇数のプロトタむプの倉異は構文゚ラヌです。

+ +

"colon" 衚蚘法を䜿甚しないプロパティ定矩はプロトタむプ倉異ではありたせん。:  任意の他の名称を䜿甚する同様の定矩ず同じように動䜜するプロパティ定矩です。

+ +
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);
+
+ +

オブゞェクトリテラル衚蚘法 vs JSON

+ +

オブゞェクトリテラル衚蚘法は JavaScript Object Notation (JSON) ずは異なりたす。それらは䌌おいたすが、それらの間には違いがありたす。:

+ + + +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様ステヌタスコメント
{{SpecName('ES1')}}{{Spec2('ES1')}}初期定矩。
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}{{Spec2('ES5.1')}}getter ず setter が远加されたした。
{{SpecName('ES2015', '#sec-object-initializer', 'Object Initializer')}}{{Spec2('ES2015')}}簡略衚珟メ゜ッド/プロパティの名称ず蚈算されたプロパティ名が远加されたした。
{{SpecName('ESDraft', '#sec-object-initializer', 'Object Initializer')}}{{Spec2('ESDraft')}}
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.operators.object_initializer")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/operator_precedence/index.html b/files/ja/web/javascript/reference/operators/operator_precedence/index.html new file mode 100644 index 0000000000..69b9c5c76b --- /dev/null +++ b/files/ja/web/javascript/reference/operators/operator_precedence/index.html @@ -0,0 +1,483 @@ +--- +title: 挔算子の優先順䜍 +slug: Web/JavaScript/Reference/Operators/Operator_Precedence +tags: + - Guide + - JavaScript + - precedence + - ガむド + - 優先順䜍 +translation_of: Web/JavaScript/Reference/Operators/Operator_Precedence +--- +
{{jsSidebar("Operators")}}
+ +

挔算子の優先順䜍は、挔算子が互いにどのように解析されるかを決定したす。優先床の高い挔算子は、優先床の䜎い挔算子のオペランドになりたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-operatorprecedence.html")}}
+ + + +

優先床ず結合性

+ +

以䞋の衚珟で蚘述できる匏を考えおみたしょう。なお、OP1 ず OP2 は挔算子に眮き換わりたす。

+ +
a OP1 b OP2 c
+ +

OP1 ず OP2 の優先順䜍 (䞋蚘の䞀芧衚を参照) が異なる堎合は、優先順䜍の高い挔算子が先に実行され、結合性は関係ありたせん。コヌドの䞭で加算が先に曞かれおいるにもかかわらず、乗算の方が加算よりも優先順䜍が高く、先に実行されおいるこずを確認しおください。

+ +
console.log(3 + 10 * 2);   // 23 を出力
+console.log(3 + (10 * 2)); // 括匧の優先順䜍が高いので、23 を出力
+console.log((3 + 10) * 2); // 括匧が順䜍を倉曎するので 26 を出力
+
+ +

巊結合 (巊から右) は (a OP1 b) OP2 c のように凊理されるこずであり、右結合 (右から巊) は a OP1 (b OP2 c) のように解釈されるこずです。代入挔算子は右結合なので、このように曞くこずができたす。

+ +
a = b = 5; // a = (b = 5); ず曞いたのず同じ
+
+ +

これで、a ず b が 5 の倀を埗るずいう期埅通りの結果を埗るこずができたす。これは代入挔算子が代入した倀を返すためです。たず b に 5 が蚭定されたす。そしお a にも、代入挔算子の右オペランドである b = 5 が返す 5 が蚭定されるのです。

+ +

他の䟋ずしお、べき乗挔算子だけが右結合性を持ちたすが、他の算術挔算子は巊結合性を持ちたす。興味深いのは、結合性や優先順䜍に関係なく、評䟡の順序は垞に巊から右になるこずです。

+ + + + + + + + + + + + + + + + +
コヌド出力結果
+
+function echo(name, num) {
+    console.log("Evaluating the " + name + " side");
+    return num;
+}
+// 陀算挔算子 (/) の堎合
+console.log(echo("left", 6) / echo("right", 2));
+
+
+
+Evaluating the left side
+Evaluating the right side
+3
+
+
+
+function echo(name, num) {
+    console.log("Evaluating the " + name + " side");
+    return num;
+}
+// べき乗挔算子 (**) の堎合
+console.log(echo("left", 2) ** echo("right", 3));
+
+
+Evaluating the left side
+Evaluating the right side
+8
+
+ +

結合性の違いは、同じ優先順䜍の挔算子が耇数存圚する堎合に珟れたす。䞊の䟋のように挔算子が䞀぀だけの堎合や、挔算子の優先順䜍が異なる堎合は、結合性は出力に圱響を䞎えたせん。䞋の䟋では、同じ挔算子が耇数䜿われおいる堎合に、結合性が出力結果にどのような圱響を䞎えるかを芋おみたしょう。

+ + + + + + + + + + + + + + + + + + + + +
コヌド出力結果
+
+function echo(name, num) {
+    console.log("Evaluating the " + name + " side");
+    return num;
+}
+// 陀算挔算子 (/) の堎合
+console.log(echo("left", 6) / echo("middle", 2) / echo("right", 3));
+
+
+
+Evaluating the left side
+Evaluating the middle side
+Evaluating the right side
+1
+
+
+
+function echo(name, num) {
+    console.log("Evaluating the " + name + " side");
+    return num;
+}
+// べき乗挔算子 (**) の堎合
+console.log(echo("left", 2) ** echo("middle", 3) ** echo("right", 2));
+
+
+
+Evaluating the left side
+Evaluating the middle side
+Evaluating the right side
+512
+
+
+
+function echo(name, num) {
+    console.log("Evaluating the " + name + " side");
+    return num;
+}
+// 巊ず䞭倮の間のべき乗を括匧で囲んだ堎合
+console.log((echo("left", 2) ** echo("middle", 3)) ** echo("right", 2));
+
+
+Evaluating the left side
+Evaluating the middle side
+Evaluating the right side
+64
+
+ +

䞊蚘のコヌドを芋おください。6 / 3 / 2 は、陀算が巊結合なので (6 / 3) / 2 ず同じになりたす。䞀方で、べき乗は右結合なので、2 ** 3 ** 2 は 2 ** (3 ** 2) ず同じになりたす。したがっお、(2 ** 3) ** 2 ずするず䞊蚘の衚にある通り、挔算順序が倉わっお結果が 64 になりたす。

+ +

優先順䜍は結合床よりも優先されるこずを忘れないでください。そのため、割り算ずべき乗を亀ぜた堎合、べき乗は割り算よりも先に蚈算されたす。䟋えば 2 ** 3 / 3 ** 2 の結果は 0.8888888888888888 ずなりたす。これは (2 ** 3) / (3 ** 2) ず同じだからです。

+ +

グルヌプ化ず短絡の泚意

+ +

䞋蚘の衚では、グルヌプ化が最䞊䜍の優先順䜍を持぀ものずしお挙げられおいたす。しかし、特に短絡が発生する堎合は、グルヌプ化蚘号 ( 
 ) の䞭の匏が最初に評䟡されるずは限りたせん。

+ +

短絡は、条件付き評䟡を衚す甚語です。䟋えば、a && (b + c) ずいう匏においお、a が {{Glossary("falsy")}} である堎合、埓属匏である (b + c) は括匧で囲たれおいおも評䟡されたせん。この論理的分離挔算子 ("OR") は「短絡的」ずいえるでしょう。論理的分離挔算子の他にも、ほかに短絡が発生する挔算子には、論理的結合 ("AND") 挔算子、Null 合䜓挔算子、オプションチェヌン挔算子、条件挔算子がありたす。いかに䟋を瀺したす。

+ +
a || (b * c);  // `a` を最初に評䟡し、`a` が "truthy" であれば `a` を出力
+a && (b < c);  // `a` を最初に評䟡し、`a` が "falsy" であれば `a` を出力
+a ?? (b || c); // `a` を最初に評䟡し、`a` が `null` たたは `undefined` でなければ `a` を出力
+a?.b.c;        // `a` を最初に評䟡し、then produce `a` if `a` is `null` or `undefined`
+
+ +

䟋

+ +
3 > 2 && 2 > 1
+// returns true
+
+3 > 2 > 1
+// 結果は false ずなる。3 > 2 は true であり、true は
+// 䞍等号で 1 に倉換されるため、true > 1 は 1 > 1 ずなり、
+// false ずなる。(3 > 2) > 1 のように括匧を付けるず明確になる。
+
+ +

䞀芧衚

+ +

以䞋の衚は優先順䜍の最も高いもの (21) から最も䜎いもの (1) の順に䞊べられおいたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
優先順䜍挔算子の皮類結合性挔算子
21{{jsxref("Operators/Grouping", "グルヌプ化", "", 1)}}n/a( 
 )
20{{jsxref("Operators/Property_Accessors", "メンバヌぞのアクセス", "#Dot_notation", 1)}}巊から右  . 

{{jsxref("Operators/Property_Accessors", "蚈算倀によるメンバヌぞのアクセス","#Bracket_notation", 1)}}巊から右  [ 
 ]
{{jsxref("Operators/new","new")}} (匕数リスト付き)なしnew 
 ( 
 )
関数呌び出し巊から右  ( 
 )
オプショナルチェむニング巊から右?.
19{{jsxref("Operators/new","new")}} (匕数リストなし)右から巊new 

18{{jsxref("Operators/Arithmetic_Operators","埌眮むンクリメント","#Increment", 1)}}なし  ++
{{jsxref("Operators/Arithmetic_Operators","埌眮デクリメント","#Decrement", 1)}}
 --
17論理 NOT右から巊! 

ビットごずの NOT~ 

単項 ++ 

単項 -- 

前眮むンクリメント++ 

前眮デクリメント-- 

{{jsxref("Operators/typeof", "typeof")}}typeof 

{{jsxref("Operators/void", "void")}}void 

{{jsxref("Operators/delete", "delete")}}delete 

{{jsxref("Operators/await", "await")}}await 

16べき乗右から巊  ** 

15乗算巊から右  * 

陀算  / 

剰䜙  % 

14加算巊から右  + 

枛算  - 

13巊ビットシフト巊から右  << 

右ビットシフト  >> 

笊号なし右ビットシフト  >>> 

12小なり巊から右  < 

小なりむコヌル  <= 

倧なり  > 

倧なりむコヌル  >= 

{{jsxref("Operators/in", "in")}}
 in 

{{jsxref("Operators/instanceof", "instanceof")}}
 instanceof 

11等䟡巊から右  == 

䞍等䟡  != 

厳密等䟡  === 

厳密䞍等䟡  !== 

10ビット単䜍 AND巊から右  & 

9ビット単䜍 XOR巊から右  ^ 

8ビット単䜍 OR巊から右  | 

7論理 AND巊から右  && 

6論理 OR巊から右  || 

5Null 合䜓left-to-right
 ?? 

4条件右から巊  ? 
 : 

3代入右から巊  = 


 += 


 -= 


 **= 


 *= 


 /= 


 %= 


 <<= 


 >>= 


 >>>= 


 &= 


 ^= 


 |= 


 &&= 


 ||= 


 ??= 

2{{jsxref("Operators/yield", "yield")}}右から巊yield 

{{jsxref("Operators/yield*", "yield*")}}yield* 

1カンマ / シヌケンス巊から右  , 

diff --git a/files/ja/web/javascript/reference/operators/optional_chaining/index.html b/files/ja/web/javascript/reference/operators/optional_chaining/index.html new file mode 100644 index 0000000000..e7d213f8fa --- /dev/null +++ b/files/ja/web/javascript/reference/operators/optional_chaining/index.html @@ -0,0 +1,203 @@ +--- +title: Optional chaining (?.) +slug: Web/JavaScript/Reference/Operators/Optional_chaining +tags: + - Chaining + - JavaScript + - Language feature + - Operator + - Optional chaining + - Reference +translation_of: Web/JavaScript/Reference/Operators/Optional_chaining +--- +
{{JSSidebar("Operators")}}
+ +

オプショナルチェむニング (optional chaining) 挔算子 ?. は、接続されたオブゞェクトチェヌンの深くに䜍眮するプロパティの倀を、チェヌン内の各参照が正しいかどうかを明瀺的に確認せずに読み蟌むこずを可胜にしたす。 ?. 挔算子の機胜は . チェヌン挔算子ず䌌おいたすが、参照が {{glossary("nullish")}} ({{JSxRef("null")}} たたは {{JSxRef("undefined")}}) の堎合に゚ラヌずなるのではなく、匏が短絡され undefined が返されるずころが異なりたす。 関数呌び出しで䜿甚するず、䞎えられた関数が存圚しない堎合、 undefined を返したす。

+ +

これは、参照が倱われた可胜性のある連結されたプロパティにアクセスする時、結果的に短く単玔な匏になりたす。たた、必芁なプロパティの存圚が保蚌されおいない堎合にオブゞェクトのコンテンツを探玢するのにも圹立ちたす。

+ +

オプショナルチェむニングは、存圚しないルヌトオブゞェクトでは䜿甚できたせん。if (typeof a == "undefined") のようなチェックを眮き換えるものではありたせん。

+ +
{{EmbedInteractiveExample("pages/js/expressions-optionalchainingoperator.html", "taller")}}
+ + + +

構文

+ +
obj?.prop
+obj?.[expr]
+arr?.[index]
+func?.(args)
+
+ +

解説

+ +

オプショナルチェむニング挔算子は、参照や関数が undefined たたは null である可胜性がある堎合でも、接続されたオブゞェクトの倀に簡単にアクセスする手段を提䟛したす。

+ +

たずえば、入れ子構造を持぀オブゞェクト obj を考えたしょう。オプショナルチェむニング挔算子なしで深い入れ子になったサブプロパティにアクセスするには、次のように、各プロパティ間の参照を確認する必芁がありたす:

+ +
let nestedProp = obj.first && obj.first.second;
+ +

obj.first.second の倀にアクセスする前に、 obj.first の倀が null たたは undefined でないこずを確認したす。これにより、 obj.first をテストせずに盎接 obj.first.second にアクセスしたずきに起きる゚ラヌを防ぐこずができたす。

+ +

しかし、オプショナルチェむニング挔算子 (?.) を䜿えば、obj.first.second にアクセスしようずする前に obj.first の状態を明瀺的にテストする必芁がなくなりたす:

+ +
let nestedProp = obj.first?.second;
+ +

?. を . の代わりに甚いるこずで、 JavaScript が obj.first.second にアクセスしようずする前に obj.first が null たたは undefined でないこずを暗黙的に確かめるようになりたす。obj.first が null たたは undefined であった堎合、匏が自動的に短絡され、 undefined が返りたす。

+ +

これは、䞀時的な倉数が䜜成されないこずを陀き、次の匏ず等䟡です。

+ +
let temp = obj.first;
+let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);
+
+ +

関数呌び出しでオプショナルチェむニング挔算子を䜿う

+ +

存圚しない可胜性がある関数の呌び出しを詊行するずきに、オプショナルチェむニングを䜿うこずができたす。これはたずえば、ナヌザヌのデバむス䞊で䜿えなかったり、実装が叀かったりするために䜿えなかったりする可胜性がある API を䜿うずきに圹立ちたす。

+ +

関数呌び出しでオプショナルチェむニング挔算子を甚いた堎合、メ゜ッドが芋぀からないずきは自動的に undefined が返りたす。䟋倖はスロヌされたせん。

+ +
let result = someInterface.customMethod?.();
+ +
+

泚意: 䞊蚘のようなプロパティの関数がない堎合に、?. を䜿甚するず {{JSxRef("TypeError")}} 䟋倖が発生したす (someInterface.customMethod is not a function)。

+
+ +
+

泚意: someInterface 自䜓が null たたは undefined の堎合にも、{{JSxRef("TypeError")}} 䟋倖が発生したす (someInterface is null)。someInterface 自䜓が null たたは undefined の可胜性がある堎合は、次の䜍眮にも ?. を䜿甚しなければなりたせん。someInterface?.customMethod?.()

+
+ +

省略可胜なコヌルバックやむベントハンドラを扱う

+ +

コヌルバックを䜿う堎合や、オブゞェクトからメ゜ッドを分割代入を利甚しお取り出す堎合に、存圚しない倀がある可胜性があり、その存圚を怜蚌するたで関数ずしお呌び出せたせん。その堎合 ?. を利甚するこずで、怜蚌の必芁性を回避できたす。

+ +
// Written as of ES2019
+function doSomething(onContent, onError) {
+  try {
+    // ... do something with the data
+  }
+  catch (err) {
+    if (onError) { // Testing if onError really exists
+      onError(err.message);
+    }
+  }
+}
+
+ +
// Using optional chaining with function calls
+function doSomething(onContent, onError) {
+  try {
+   // ... do something with the data
+  }
+  catch (err) {
+    onError?.(err.message); // no exception if onError is undefined
+  }
+}
+
+ +

オプショナルチェむニング挔算子を匏ず組み合わせお䜿う

+ +

ブラケット衚蚘法ずオプショナルチェむニング挔算子を組み合わせるこずもできたす。

+ +
let nestedProp = obj?.['prop' + 'Name'];
+
+ +

オプショナルチェむニング挔算子は代入の巊蟺倀では有効にならない

+ +
let object = {};
+object?.property = 1; // Uncaught SyntaxError: Invalid left-hand side in assignment
+ +

オプショナルチェむニングにより配列の芁玠にアクセス

+ +
let arrayItem = arr?.[42];
+ +

䟋

+ +

基本的な䟋

+ +

次の䟋では、マップに存圚しない bar メンバの name プロパティを取埗しようずしおいたす。したがっお、結果は undefined になりたす。

+ +
let myMap = new Map();
+myMap.set("foo", {name: "baz", desc: "inga"});
+
+let nameBar = myMap.get("bar")?.name;
+ +

短絡評䟡

+ +

匏ず䞀緒にオプショナルチェむニング挔算子を甚いたずき、巊偎のオペランドが null たたは undefined である堎合にその匏は評䟡されなくなりたす。

+ +
let potentiallyNullObj = null;
+let x = 0;
+let prop = potentiallyNullObj?.[x++];
+
+console.log(x); // 0 as x was not incremented
+
+ +

オプショナルチェむニングを぀なげお䜿う

+ +

入れ子になったオブゞェクトでは、オプショナルチェむニング挔算子を䜕床でも䜿えたす。

+ +
let customer = {
+  name: "Carl",
+  details: {
+    age: 82,
+    location: "Paradise Falls" // detailed address is unknown
+  }
+};
+let customerCity = customer.details?.address?.city;
+
+// 
 this also works with optional chaining function call
+let duration = vacations.trip?.getTime?.();
+
+ +

Null 合䜓挔算子ず共に䜿う

+ +

{{JSxRef("Operators/Nullish_Coalescing_Operator", "Null 合䜓挔算子", '', 1)}}はオプショナルチェむニングの埌に぀けるこずで、存圚しない倀があった時、既定倀をかわりに䜿うために利甚できたす。

+ +
let customer = {
+  name: "Carl",
+  details: { age: 82 }
+};
+const customerCity = customer?.city ?? "Unknown city";
+console.log(customerCity); // Unknown city
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様曞状態備考
"オプショナルチェむニング" 挔算子の提案Stage 4
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.operators.optional_chaining")}}

+
+ +

実装の進捗

+ +

この機胜はただブラりザヌ間盞互運甚の安定性に達しおいないため、以䞋の衚はこの機胜の日々の実装状況を瀺しおいたす。このデヌタは、 JavaScript の暙準テストスむヌトである Test262 で、該圓する機胜テストを毎晩のビルド、たたは各ブラりザヌの JavaScript ゚ンゞンの最新リリヌスで実行するこずで生成されたす。

+ +
{{EmbedTest262ReportResultsTable("optional-chaining")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/pipeline_operator/index.html b/files/ja/web/javascript/reference/operators/pipeline_operator/index.html new file mode 100644 index 0000000000..02cbc7d0ba --- /dev/null +++ b/files/ja/web/javascript/reference/operators/pipeline_operator/index.html @@ -0,0 +1,87 @@ +--- +title: パむプラむン挔算子 (|>) +slug: Web/JavaScript/Reference/Operators/Pipeline_operator +tags: + - Chaining + - Experimental + - JavaScript + - Language feature + - Operator + - Pipeline + - パむプラむン + - 実隓的 + - 挔算子 + - 蚀語機胜 + - 連結 +translation_of: Web/JavaScript/Reference/Operators/Pipeline_operator +--- +
{{jsSidebar("Operators")}}
+ +

実隓的なパむプラむン挔算子 |> (珟圚はステヌゞ 1 です) は、匏の倀を関数に接続したす。これによっお、読みやすい方法で䞀連の関数呌び出しを䜜成するこずができたす。結果的に、単䞀の匕数を甚いた関数呌び出しの糖衣構文ずなり、次のように曞くこずができたす。

+ +
let url = "%21" |> decodeURI;
+ +

これず等䟡な埓来の構文は次のようになりたす。

+ +
let url = decodeURI("%21");
+
+ +

構文

+ +
expression |> function
+
+ +

指定された expression の倀が function に、単䞀の匕数ずしお枡されたす。

+ +

匕数

+ +
+
expression
+
任意の匏です。
+
function
+
任意の関数です。
+
+ +

䟋

+ +

関数呌び出しの連結

+ +

パむプラむン挔算子は、耇数の関数の連結を読みやすくするこずができたす。

+ +
const double = (n) => n * 2;
+const increment = (n) => n + 1;
+
+// パむプラむン挔算子なし
+double(increment(double(double(5)))); // 42
+
+// パむプラむン挔算子あり
+5 |> double |> double |> increment |> double; // 42
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('Pipeline operator', '#sec-intro', 'Pipeline operator')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.pipeline")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/property_accessors/index.html b/files/ja/web/javascript/reference/operators/property_accessors/index.html new file mode 100644 index 0000000000..6683586246 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/property_accessors/index.html @@ -0,0 +1,155 @@ +--- +title: プロパティアクセサヌ +slug: Web/JavaScript/Reference/Operators/Property_Accessors +tags: + - JavaScript + - Operator + - Reference + - 挔算子 +translation_of: Web/JavaScript/Reference/Operators/Property_Accessors +--- +
{{jsSidebar("Operators")}}
+ +

プロパティアクセサヌはオブゞェクトのプロパティぞのアクセスを提䟛するもので、ドット衚蚘法たたはブラケット衚蚘法を䜿甚したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-propertyaccessors.html")}}
+ + + +

構文

+ +
object.property
+object['property']
+
+ +

解説

+ +

オブゞェクトは実際には連想配列 (別名 map、 dictionary、 hash、 lookup table) ずみなすこずができたす。この配列におけるキヌはオブゞェクトのプロパティ名です。䞀般的に、オブゞェクトのプロパティに぀いお説明する際には、プロパティずメ゜ッドを区別したす。しかし、プロパティずメ゜ッドの区別は慣習的なものにすぎたせん。メ゜ッドは単なるプロパティであり、蚀わば、䟋えば倀ずしお {{jsxref("Function")}} オブゞェクトのむンスタンスぞの参照を持っおいるものです。

+ +

プロパティにアクセスするには、ドット衚蚘法ずブラケット衚蚘法の2通りがありたす。

+ +

ドット衚蚘法

+ +
get = object.property;
+object.property = set;
+
+ +

property は有効な JavaScript 識別子である必芁がありたす。䟋えば object.$1 は有効ですが、 object.1 は有効ではありたせん。

+ +
document.createElement('pre');
+
+ +

ここでは、 document から "createElement" ずいう名前のメ゜ッドが怜玢され、呌び出されたす。

+ +

指数や小数点を持たない数倀リテラルにメ゜ッドを䜿甚する堎合、メ゜ッド呌び出しをするドットの前に{{glossary("Whitespace", "ホワむトスペヌス")}}を入れるこずで、ドットが小数点ずみなされるこずを防ぐこずができたす。

+ +
77 .toExponential();
+// or
+77
+.toExponential();
+// or
+(77).toExponential();
+// or
+77..toExponential();
+// or
+77.0.toExponential();
+// because 77. === 77.0, no ambiguity
+ +

ブラケット衚蚘法

+ +
get = object[property_name];
+object[property_name] = set;
+
+ +

property_name は文字列たたは{{glossary("Symbol", "シンボル")}}です。この文字列は有効な識別子である必芁はなく、任意の倀、䟋えば "1foo", "!bar!", たたは " " (空癜) であっおも構いたせん。

+ +
document['createElement']('pre');
+
+ +

これは前の䟋ずたったく同じです。

+ +

ブラケット衚蚘法の前には空癜を入れるこずができたす。

+ +
document ['createElement']('pre');
+ +

プロパティ名

+ +

プロパティ名は文字列たたは{{glossary("Symbol", "シンボル")}}です。それ以倖の倀は、数倀を含めお、文字列ぞ匷制倉換されたす。

+ +
var object = {};
+object['1'] = 'value';
+console.log(object[1]);
+
+ +

これは、 1 が '1' に匷制倉換されるので、 "value" を出力したす。

+ +
var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
+object[foo] = 'value';
+console.log(object[bar]);
+
+ +

foo ず bar は同じ文字列に倉換されるので、こちらも "value" を出力したす。 SpiderMonkey JavaScript ゚ンゞンでは、この文字列は "[object Object]" ずなるでしょう。

+ +

メ゜ッドのバむンド

+ +

メ゜ッドはそのメ゜ッドが所属するオブゞェクトにバむンドされおいるわけではありたせん。特に、 this はメ゜ッド内で固定されおいたせん。぀たり、 this は必ずしもそのメ゜ッドを含んでいるオブゞェクトを参照しおいるずは限りたせん。 this は関数呌び出し時に「枡される」ものです。メ゜ッドのバむンドを参照しおください。

+ +

eval におけるメモ

+ +

JavaScript 初心者はしばしば、代わりにブラケット衚蚘法を䜿えるずころで {{jsxref("eval", "eval()")}} を䜿甚しおしたう間違いを犯したす。䟋えば、以䞋のような構文がたくさんのスクリプトで芋られたす。

+ +
x = eval('document.forms.form_name.elements.' + strFormControl + '.value');
+
+ +

eval() は䜎速であり、可胜な限り避けるべきです。たた、 strFormControl は ID を必芁ずしたすが、フォヌムコントロヌルの名前ず ID は必須ではありたせん。代わりにブラケット衚蚘法を䜿った方が良いでしょう。

+ +
x = document.forms['form_name'].elements[strFormControl].value;
+
+ +

仕様曞

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様曞状態備考
{{SpecName('ESDraft', '#sec-property-accessors', 'Property Accessors')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-property-accessors', 'Property Accessors')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.2.1', 'Property Accessors')}}{{Spec2('ES5.1')}}
{{SpecName('ES1', '#sec-11.2.1', 'Property Accessors')}}{{Spec2('ES1')}}初回定矩。JavaScript 1.0 で実装。
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.property_accessors")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/remainder/index.html b/files/ja/web/javascript/reference/operators/remainder/index.html new file mode 100644 index 0000000000..7bc17ee93d --- /dev/null +++ b/files/ja/web/javascript/reference/operators/remainder/index.html @@ -0,0 +1,78 @@ +--- +title: 剰䜙 (%) +slug: Web/JavaScript/Reference/Operators/Remainder +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Remainder +--- +
{{jsSidebar("Operators")}}
+ +

剰䜙挔算子 (%) は、1぀目のオペランドが2぀目のオペランドで陀算されたずきに残った剰䜙を返したす。 これは垞に配圓のサむンを取りたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-remainder.html")}}
+ +
+ + + +

構文

+ +
Operator: var1 % var2
+
+ +

䟋

+ +

正の倀の剰䜙

+ +
 12 % 5  //  2
+ 1 % -2 //  1
+ 1 % 2  //  1
+ 2 % 3  //  2
+5.5 % 2 // 1.5
+
+ +

負の倀の剰䜙

+ +
-12 % 5 // -2
+-1 % 2  // -1
+-4 % 2  // -0
+ +

NaNの剰䜙

+ +
NaN % 2 // NaN
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-multiplicative-operators', 'Remainder operator')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.remainder")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/remainder_assignment/index.html b/files/ja/web/javascript/reference/operators/remainder_assignment/index.html new file mode 100644 index 0000000000..ab7d348b8b --- /dev/null +++ b/files/ja/web/javascript/reference/operators/remainder_assignment/index.html @@ -0,0 +1,62 @@ +--- +title: 剰䜙代入 (%=) +slug: Web/JavaScript/Reference/Operators/Remainder_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Remainder_assignment +--- +
{{jsSidebar("Operators")}}
+ +

剰䜙代入挔算子 (%=) は、倉数を右蟺のオペランドの倀で陀算し、剰䜙を倉数に代入したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-remainder-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x %= y
+Meaning:  x  = x % y
+ +

䟋

+ +

剰䜙代入の䜿甚

+ +
// 以䞋の倉数を想定
+//  bar = 5
+
+bar %= 2     // 1
+bar %= 'foo' // NaN
+bar %= 0     // NaN
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.remainder_assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/right_shift/index.html b/files/ja/web/javascript/reference/operators/right_shift/index.html new file mode 100644 index 0000000000..3cd729c321 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/right_shift/index.html @@ -0,0 +1,79 @@ +--- +title: 右シフト (>>) +slug: Web/JavaScript/Reference/Operators/Right_shift +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Right_shift +--- +
{{jsSidebar("Operators")}}
+ +

右シフト挔算子 (>>) (れロ埋め右シフト) は、1぀目のオペランドを指定されたビット数だけ右にずらしたす。右にずらしおあふれたビットは廃棄されたす。最も巊のビットをコピヌしながらずれお入りたす。最も巊のビットが以前の最も巊のビットず同じになるため、笊号ビット (最も巊のビット) は倉化したせん。よっお「笊号維持」ずいう名前です。

+ +
{{EmbedInteractiveExample("pages/js/expressions-right-shift.html")}}
+ + + +

構文

+ +
a >> b
+
+ +

解説

+ +

この挔算子は、1぀目のオペランドを指定されたビット数だけ右にずらしたす。右にずらしおあふれたビットは廃棄されたす。最も巊のビットをコピヌしながらずれお入りたす。最も巊のビットが以前の最も巊のビットず同じになるため、笊号ビット (最も巊のビット) は倉化したせん。よっお「笊号維持」ずいう名前です。

+ +

䟋えば、 9 >>> 2 は 2 ずなりたす。

+ +
.     9 (10進数): 00000000000000000000000000001001 (2進数)
+                  --------------------------------
+9 >>> 2 (10進数): 00000000000000000000000000000010 (2進数) = 2 (10進数)
+
+ +

同様に、 -9 >> 2 は笊号が保存されるため、 -3 になりたす。

+ +
.     -9 (10進数): 11111111111111111111111111110111 (2進数)
+                   --------------------------------
+-9 >> 2 (10進数):  11111111111111111111111111111101 (2進数) = -3 (10進数)
+
+ +

䟋

+ +

右シフトの䜿甚

+ +
 9 >> 2; //  2
+-9 >> 2; // -3
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-bitwise-shift-operators', 'Bitwise Shift Operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.right_shift")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/right_shift_assignment/index.html b/files/ja/web/javascript/reference/operators/right_shift_assignment/index.html new file mode 100644 index 0000000000..6ff0bb1cba --- /dev/null +++ b/files/ja/web/javascript/reference/operators/right_shift_assignment/index.html @@ -0,0 +1,61 @@ +--- +title: 右シフト代入 (>>=) +slug: Web/JavaScript/Reference/Operators/Right_shift_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Right_shift_assignment +--- +
{{jsSidebar("Operators")}}
+ +

右シフト代入挔算子 (>>=) は、指定された量のビットを右に移動し、結果を倉数に代入したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-right-shift-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x >>= y
+Meaning:  x   = x >> y
+ +

䟋

+ +

右シフト代入の䜿甚

+ +
let a = 5; //   (00000000000000000000000000000101)
+a >>= 2;   // 1 (00000000000000000000000000000001)
+
+let b = -5; //  (-00000000000000000000000000000101)
+b >>= 2;  // -2 (-00000000000000000000000000000010)
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.right_shift_assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/special/index.html b/files/ja/web/javascript/reference/operators/special/index.html new file mode 100644 index 0000000000..cb220a008d --- /dev/null +++ b/files/ja/web/javascript/reference/operators/special/index.html @@ -0,0 +1,5 @@ +--- +title: Special +slug: Web/JavaScript/Reference/Operators/Special +--- +This page was auto-generated because a user created a sub-page to this page. diff --git a/files/ja/web/javascript/reference/operators/special_operators/index.html b/files/ja/web/javascript/reference/operators/special_operators/index.html new file mode 100644 index 0000000000..febf3ac3d6 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/special_operators/index.html @@ -0,0 +1,5 @@ +--- +title: Special Operators +slug: Web/JavaScript/Reference/Operators/Special_Operators +--- +This page was auto-generated because a user created a sub-page to this page. diff --git a/files/ja/web/javascript/reference/operators/spread_syntax/index.html b/files/ja/web/javascript/reference/operators/spread_syntax/index.html new file mode 100644 index 0000000000..d433ed2b34 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/spread_syntax/index.html @@ -0,0 +1,258 @@ +--- +title: スプレッド構文 +slug: Web/JavaScript/Reference/Operators/Spread_syntax +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Language feature + - Reference + - むテレヌタヌ + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Spread_syntax +--- +
{{jsSidebar("Operators")}}
+ +

スプレッド構文 (...) を䜿うず、配列匏や文字列などの反埩可胜オブゞェクトを、0 個以䞊の匕数 (関数呌び出しの堎合) や芁玠 (配列リテラルの堎合) を期埅された堎所で展開したり、オブゞェクト匏を、0 個以䞊のキヌず倀のペア (オブゞェクトリテラルの堎合) を期埅された堎所で展開したりするこずができたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-spreadsyntax.html")}}
+ + + +

構文

+ +

関数呌び出しの堎合:

+ +
myFunction(...iterableObj);
+
+ +

配列リテラルや文字列の堎合:

+ +
[...iterableObj, '4', 'five', 6];
+ +

オブゞェクトリテラルの堎合 (ECMAScript 2018 の新機胜)

+ +
let objClone = { ...obj };
+ +

残䜙構文 (匕数)

+ +

残䜙構文はスプレッド構文ず倖芋がよく䌌おいたすが、配列やオブゞェクトの分割代入に䜿われたす。

+ +

こちらはスプレッド構文ずは逆の働きずいえたす。スプレッド構文が芁玠を展開するのに察しお、残䜙構文は耇数の芁玠を集玄しお 1 ぀のオブゞェクトに「濃瞮」したす。{{jsxref("Functions/rest_parameters", "残䜙匕数", "", 1)}}を参照しおください。

+ +

䟋

+ +

関数呌び出しでの展開

+ +

apply() を眮き換える

+ +

配列の芁玠を匕数にしお関数を呌び出すには {{jsxref("Function.prototype.apply()")}} を䜿うのが䞀般的です。

+ +
function myFunction(x, y, z) { }
+let args = [0, 1, 2];
+myFunction.apply(null, args);
+ +

スプレッド構文を䜿うず、䞊のコヌドは次のように曞くこずができたす。

+ +
function myFunction(x, y, z) { }
+let args = [0, 1, 2];
+myFunction(...args);
+ +

スプレッド構文は、匕数の䜕番目でも䜿えたす。たた、耇数回䜿えたす。

+ +
function myFunction(v, w, x, y, z) { }
+let args = [0, 1];
+myFunction(-1, ...args, 2, ...[3]);
+ +

new 挔算子の適甚

+ +

{{jsxref("Operators/new", "new")}} によっおコンストラクタヌを呌び出すずき、配列ず apply() を盎接䜿甚するこずはできたせん (apply() は [[Call]] を実行するのであり [[Construct]] ではない)。ただし、配列はスプレッド構文のおかげで簡単に new を䜿甚するこずができたす。

+ +
let dateFields = [1970, 0, 1];  // 1 Jan 1970
+let d = new Date(...dateFields);
+
+ +

スプレッド構文を䜿わずに同じ結果を埗るには、専甚の関数を䜿う間接的な手段を取らざるをえたせん。

+ +
function applyAndNew(constructor, args) {
+   function partial () {
+      return constructor.apply(this, args);
+   };
+   if (typeof constructor.prototype === "object") {
+      partial.prototype = Object.create(constructor.prototype);
+   }
+   return partial;
+}
+
+
+function myConstructor () {
+   console.log("arguments.length: " + arguments.length);
+   console.log(arguments);
+   this.prop1="val1";
+   this.prop2="val2";
+};
+
+let myArguments = ["hi", "how", "are", "you", "mr", null];
+let myConstructorWithArguments = applyAndNew(myConstructor, myArguments);
+
+console.log(new myConstructorWithArguments);
+//  (internal log of myConstructor):           arguments.length: 6
+//  (internal log of myConstructor):           ["hi", "how", "are", "you", "mr", null]
+//  (log of "new myConstructorWithArguments"): {prop1: "val1", prop2: "val2"}
+ +

配列リテラルでのスプレッド構文

+ +

より匷力な配列リテラル

+ +

スプレッド構文を䜿甚しない堎合、既存の配列を䞀郚ずしお䜿甚しお新しい配列を䜜成するには、配列リテラル構文は十分ではなく、{{jsxref("Array.prototype.push", "push()")}}, {{jsxref("Array.prototype.splice", "splice()")}}, {{jsxref("Array.prototype.concat", "concat()")}} などを組み合わせお䜿う高圧的なコヌドを䜿甚しなければなりたせん。

+ +
let parts = ['shoulders', 'knees'];
+let lyrics = ['head', ...parts, 'and', 'toes'];
+//  ["head", "shoulders", "knees", "and", "toes"]
+
+ +

関数の匕数ず同様に、... は配列リテラルのどこでも、䜕回でも䜿えたす。

+ +

配列を耇補する

+ +
let arr = [1, 2, 3];
+let arr2 = [...arr]; // arr.slice() のような動きです
+
+arr2.push(4);
+//  arr2 は [1, 2, 3, 4] になりたす
+//  arr は倉曎されたせん
+
+ +
+

メモ: コピヌは 1 段階の深さで行われたす。そのため、次の䟋のような倚次元配列のようなオブゞェクトをコピヌする堎合には適さないでしょう。({{jsxref("Object.assign()")}} に぀いおも同じこずが蚀えたす。)

+ +
let a = [[1], [2], [3]];
+let b = [...a];
+
+b.shift().shift();
+//  1
+
+// あらら、配列 'a' も圱響を受けちゃった。
+a
+//  [[], [2], [3]]
+
+
+ +

配列を連結するより良い方法

+ +

ある配列を既存の配列の末尟に連結するには、{{jsxref("Array.prototype.concat()")}} がよく䜿われたす。スプレッド構文を䜿甚しないず、これは次のように行われたす。

+ +
let arr1 = [0, 1, 2];
+let arr2 = [3, 4, 5];
+
+// arr2 のすべおの芁玠を arr1 に远加する
+arr1 = arr1.concat(arr2);
+ +

スプレッド構文を䜿うず、次のように曞けたす。

+ +
let arr1 = [0, 1, 2];
+let arr2 = [3, 4, 5];
+
+arr1 = [...arr1, ...arr2];
+//  arr1 は [0, 1, 2, 3, 4, 5] ずなる
+// 泚: これ以倖に const を䜿甚するず、TypeError (invalid assignment) が発生したす
+
+ +

{{jsxref("Array.prototype.unshift()")}} は、倀の配列を既存の配列の先頭に挿入するためによく䜿われたす。スプレッド構文を䜿甚しないず、これは次のように行われたす。

+ +
let arr1 = [0, 1, 2];
+let arr2 = [3, 4, 5];
+
+//  arr2 のすべおの芁玠を arr1 ぞ移怍したす
+Array.prototype.unshift.apply(arr1, arr2)
+
+//  arr1 is now [3, 4, 5, 0, 1, 2]
+ +

スプレッド構文を䜿うず、次のようになりたす。

+ +
let arr1 = [0, 1, 2];
+let arr2 = [3, 4, 5];
+
+arr1 = [...arr2, ...arr1];
+//  arr1 is now [3, 4, 5, 0, 1, 2]
+
+ +
+

メモ: unshift() ずは異なり、これは新しい arr1 を生成しおおり、その堎では元の arr1 を倉曎したせん

+
+ +

Object リテラルで䜿う

+ +

Rest/Spread Properties for ECMAScript proposal (ES2018) では、{{jsxref("Operators/Object_initializer", "オブゞェクトリテラル", 1)}}でのスプレッド構文が远加されおいたす。スプレッド構文の察象ずなるオブゞェクトの列挙可胜なプロパティを、新しいオブゞェクトにコピヌしたす。

+ +

浅いコピヌ (プロトタむプを陀く) の䜜成や、マヌゞしたオブゞェクトの䜜成が {{jsxref("Object.assign()")}} を䜿うよりも短いコヌドで曞けたす。

+ +
let obj1 = { foo: 'bar', x: 42 };
+let obj2 = { foo: 'baz', y: 13 };
+
+let clonedObj = { ...obj1 };
+// Object { foo: "bar", x: 42 }
+
+let mergedObj = { ...obj1, ...obj2 };
+// Object { foo: "baz", x: 42, y: 13 }
+ +

{{jsxref("Object.assign()")}} は{{jsxref("Functions/set", "セッタヌ")}}を起動したすが、スプレッド構文は起動しないこずに泚意しおください。

+ +

スプレッド構文は {{jsxref("Object.assign()")}} 関数を眮き換えたり暡倣するこずはできないこずに泚意しおください。

+ +
let obj1 = { foo: 'bar', x: 42 };
+let obj2 = { foo: 'baz', y: 13 };
+const merge = ( ...objects ) => ( { ...objects } );
+
+let mergedObj1 = merge (obj1, obj2);
+// Object { 0: { foo: 'bar', x: 42 }, 1: { foo: 'baz', y: 13 } }
+
+let mergedObj2 = merge ({}, obj1, obj2);
+// Object { 0: {}, 1: { foo: 'bar', x: 42 }, 2: { foo: 'baz', y: 13 } }
+ +

䞊蚘の䟋では、スプレッド構文は期埅通りに動䜜したせん。残りの匕数があるため、匕数の配列がオブゞェクトリテラルにずしお展開されたす。

+ +

反埩可胜オブゞェクトにのみ利甚可胜

+ +

オブゞェクト自䜓は反埩可胜ではありたせんが、配列の䞭で䜿甚したり、map(), reduce(), assign() などの反埩関数ず共に䜿甚したりするこずで反埩可胜になりたす。2 ぀のオブゞェクトをスプレッド挔算子で結合する堎合は、結合時に別の反埩凊理関数を䜿甚するこずを前提ずしおいたす。

+ +

スプレッド構文 (スプレッドプロパティの堎合を陀く) は、反埩可胜オブゞェクトにのみ適甚できたす。

+ +
let obj = {'key1': 'value1'};
+let array = [...obj]; // TypeError: obj is not iterable
+
+ +

倧量の倀を展開する堎合

+ +

JavaScript ゚ンゞンには、匕数の個数に䞊限がありたす。関数呌び出しでのスプレッド構文では、匕数の個数がその䞊限を超えおしたう可胜性に留意しおください。詳现は {{jsxref("Function.prototype.apply", "apply()")}} のペヌゞを参照しおください。

+ +

仕様

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-array-initializer', 'Array initializer')}}
{{SpecName('ESDraft', '#sec-object-initializer', 'Object initializer')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.spread")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/strict_equality/index.html b/files/ja/web/javascript/reference/operators/strict_equality/index.html new file mode 100644 index 0000000000..a3bc1e89d7 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/strict_equality/index.html @@ -0,0 +1,108 @@ +--- +title: 厳密等䟡 (===) +slug: Web/JavaScript/Reference/Operators/Strict_equality +tags: + - JavaScript + - Language feature + - Operator + - Reference + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Strict_equality +--- +
{{jsSidebar("Operators")}}
+ +

厳密等䟡挔算子 (===) は、二぀のオペランドが等しいこずを怜査し、論理倀で結果を返したす 等䟡挔算子ずは異なり、厳密等䟡挔算子はオペランドの型が異なる堎合、垞に異なるものず刀断したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-strict-equality.html")}}
+ + + +

構文

+ +
x === y
+ +

解説

+ +

厳密等䟡挔算子 (=== および !==) は、厳密等䟡比范アルゎリズムを䜿甚しお二぀のオペランドを比范したす。

+ + + +

この挔算子ず等䟡 (==) 挔算子の最も顕著な違いは、オペランドの型が異なる堎合、 == 挔算子は比范前に同じ型に倉換しようずするこずです。

+ +

䟋

+ +

オペランドが同じ型である堎合の比范

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

オペランドが異なる方である堎合の比范

+ +
console.log("3" === 3);           // false
+
+console.log(true === 1);          // false
+
+console.log(null === undefined);  // false
+ +

オブゞェクトの比范

+ +
const object1 = {
+  name: "hello"
+}
+
+const object2 = {
+  name: "hello"
+}
+
+console.log(object1 === object2);  // false
+console.log(object1 === object1);  // true
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.strict_inequality")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/strict_inequality/index.html b/files/ja/web/javascript/reference/operators/strict_inequality/index.html new file mode 100644 index 0000000000..189e872104 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/strict_inequality/index.html @@ -0,0 +1,102 @@ +--- +title: 厳密䞍等䟡 (!==) +slug: Web/JavaScript/Reference/Operators/Strict_inequality +tags: + - JavaScript + - Language feature + - Operator + - Reference + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Strict_inequality +--- +
{{jsSidebar("Operators")}}
+ +

厳密䞍等䟡挔算子 (!==) は、二぀のオペランドが等しくないこずを怜査し、論理倀で結果を返したす 䞍等䟡挔算子ずは異なり、厳密䞍等䟡挔算子はオペランドの型が異なる堎合、垞に異なるず刀断したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-strict-equality.html")}}
+ + + +

構文

+ +
x !== y
+ +

解説

+ +

厳密䞍等䟡挔算子は、オペランドが等しくないこずを怜査したす。これは厳密等䟡挔算子の逆に圓たるので、以䞋の2行は垞に同じ結果を生み出したす。

+ +
x !== y
+
+!(x === y)
+ +

比范アルゎリズムの詳现に぀いおは、厳密等䟡挔算子のペヌゞをご芧ください。

+ +

厳密等䟡挔算子ずず同様に、厳密䞍等䟡挔算子はオペランドの型が異なるず、垞に異なるものず芋なしたす。

+ +
3 !== "3"; // true
+ +

䟋

+ +

オペランドが同じ型である堎合の比范

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

オペランドが異なる方である堎合の比范

+ +
console.log("3" !== 3);           // true
+
+console.log(true !== 1);          // true
+
+console.log(null !== undefined);  // true
+ +

オブゞェクトの比范

+ +
const object1 = {
+  name: "hello"
+}
+
+const object2 = {
+  name: "hello"
+}
+
+console.log(object1 !== object2);  // true
+console.log(object1 !== object1);  // false
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.strict_inequality")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/subtraction/index.html b/files/ja/web/javascript/reference/operators/subtraction/index.html new file mode 100644 index 0000000000..499b95bd50 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/subtraction/index.html @@ -0,0 +1,68 @@ +--- +title: 枛算 (-) +slug: Web/JavaScript/Reference/Operators/Subtraction +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Subtraction +--- +
{{jsSidebar("Operators")}}
+ +

枛算挔算子 (-) は2぀のオペランドを枛算し、それらの差を生成したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-subtraction.html")}}
+ +
+ + + +

構文

+ +
Operator: x - y
+
+ +

䟋

+ +

数倀による枛算

+ +
5 - 3     // 2
+3 - 5     // -2
+ +

非数による枛算

+ +
'foo' - 3 // NaN
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-subtraction-operator-minus', 'Subtraction operator')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.subtraction")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/subtraction_assignment/index.html b/files/ja/web/javascript/reference/operators/subtraction_assignment/index.html new file mode 100644 index 0000000000..67fecfed23 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/subtraction_assignment/index.html @@ -0,0 +1,61 @@ +--- +title: 枛算代入 (-=) +slug: Web/JavaScript/Reference/Operators/Subtraction_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Subtraction_assignment +--- +
{{jsSidebar("Operators")}}
+ +

枛算代入挔算子 (-=) は、倉数から右蟺のオペランドの倀を枛算し、結果を倉数に代入したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-subtraction-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x -= y
+Meaning:  x  = x - y
+ +

䟋

+ +

枛算代入の䜿甚

+ +
// 次の倉数を想定
+//  bar = 5
+
+bar -= 2     // 3
+bar -= 'foo' // NaN
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.subtraction_assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/super/index.html b/files/ja/web/javascript/reference/operators/super/index.html new file mode 100644 index 0000000000..f4787e8d5f --- /dev/null +++ b/files/ja/web/javascript/reference/operators/super/index.html @@ -0,0 +1,176 @@ +--- +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 +--- +
{{jsSidebar("Operators")}}
+ +

super キヌワヌドは、オブゞェクトの芪の関数を呌び出すために䜿甚できたす。

+ +

super.prop および super[expr] 匏は、class ず オブゞェクトリテラル の䞡方におけるあらゆるメ゜ッド定矩で有効です。

+ +

構文

+ +
super([arguments]); // 芪コンストラクタヌを呌び出したす。
+super.functionOnParent([arguments]);
+
+ +

解説

+ +

コンストラクタヌで䜿甚する堎合、super キヌワヌドを単独で眮き、this キヌワヌドが䜿われる前に䜿甚する必芁がありたす。super キヌワヌドは、芪オブゞェクトの関数を呌び出すためにも䜿甚できたす。

+ +

䟋

+ +

クラス内での super の䜿甚

+ +

このコヌドスニペットは、classes sample (実際のデモ) からずっおいたす。super() を利甚するこずで、Rectangle ず Square のコンストラクタヌに共通する凊理を重耇しお蚘述しないようにしおいたす。

+ +
class Rectangle {
+  constructor(height, width) {
+    this.name = 'Rectangle';
+    this.height = height;
+    this.width = width;
+  }
+  sayName() {
+    console.log('Hi, I am a ', this.name + '.');
+  }
+  get area() {
+    return this.height * this.width;
+  }
+  set area(value) {
+    this.height = this.width = Math.sqrt(value);
+  }
+}
+
+class Square extends Rectangle {
+  constructor(length) {
+    this.height; // ReferenceError になりたす。super を先に呌び出さなければなりたせん
+
+    // length の倀で芪クラスの constructor を呌びたす。
+    // Rectangle の width ず height になりたす。
+    super(length, length);
+
+    // Note: 'this' を䜿う前に super() をコヌルしなければなりたせん。
+    // でないず reference error になりたす。
+    this.name = 'Square';
+  }
+}
+ +

静的メ゜ッドでの super の呌び出し

+ +

static メ゜ッドでも super を呌び出すこずができたす。

+ +
class Rectangle {
+  constructor() {}
+  static logNbSides() {
+    return 'I have 4 sides';
+  }
+}
+
+class Square extends Rectangle {
+  constructor() {}
+  static logDescription() {
+    return super.logNbSides() + ' which are all equal';
+  }
+}
+Square.logDescription(); // 'I have 4 sides which are all equal'
+
+ +

super プロパティの削陀で゚ラヌが発生

+ +

芪クラスのプロパティを削陀するために、delete 挔算子 や super.prop、super[expr] を䜿うこずはできたせん。{{jsxref("ReferenceError")}} がスロヌされたす。

+ +
class Base {
+  constructor() {}
+  foo() {}
+}
+class Derived extends Base {
+  constructor() {}
+  delete() {
+    delete super.foo; // this is bad
+  }
+}
+
+new Derived().delete(); // ReferenceError: invalid delete involving 'super'. 
+ +

super.prop は曞き蟌み䞍可胜なプロパティを䞊曞きできない

+ +

{{jsxref("Object.defineProperty")}} などで曞き蟌み䞍可プロパティを定矩した堎合、super はプロパティの倀を䞊曞きできたせん。

+ +
class X {
+  constructor() {
+    Object.defineProperty(this, 'prop', {
+      configurable: true,
+      writable: false,
+      value: 1
+    });
+  }
+}
+
+class Y extends X {
+  constructor() {
+    super();
+  }
+  foo() {
+    super.prop = 2;   // 倀を䞊曞きできない
+  }
+}
+
+var y = new Y();
+y.foo(); // TypeError: "prop" は読み取り専甚
+console.log(y.prop); // 1
+
+ +

オブゞェクトリテラル内での super.prop の䜿甚

+ +

super は object initializer / literal 蚘法内でも䜿甚できたす。この䟋では、二぀のオブゞェクトがメ゜ッドを定矩しおいたす。二぀目のオブゞェクトの䞭で、super が最初のオブゞェクトのメ゜ッドを呌び出しおいたす。これは {{jsxref("Object.setPrototypeOf()")}} の助けで動䜜し、これは obj2 のプロトタむプを obj1 に蚭定するので、super は method1 を obj1 䞊で芋぀けるこずができたす。

+ +
var obj1 = {
+  method1() {
+    console.log('method 1');
+  }
+}
+
+var obj2 = {
+  method2() {
+    super.method1();
+  }
+}
+
+Object.setPrototypeOf(obj2, obj1);
+obj2.method2(); // logs "method 1"
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-super-keyword', 'super')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.super")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/this/index.html b/files/ja/web/javascript/reference/operators/this/index.html new file mode 100644 index 0000000000..25f4f68a40 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/this/index.html @@ -0,0 +1,488 @@ +--- +title: this +slug: Web/JavaScript/Reference/Operators/this +tags: + - JavaScript + - Language feature + - Operator + - Primary Expressions + - Reference + - this + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/this +--- +
{{jsSidebar("Operators")}}
+ +

関数の this キヌワヌド は、JavaScript ではほかの蚀語ず少々異なる動䜜をしたす。たた、厳栌モヌドず非厳栌モヌドでも違いがありたす。

+ +

ほずんどの堎合、this の倀はどのように関数が呌ばれたかによっお決定されたす実行時結合。これは実行時に割り圓おできず、関数が呌び出されるたびに異なる可胜性がありたす。ES5 では、関数が{{jsxref('Operators/this', "どのように呌ばれたかに関係なく this の倀を蚭定する", 'The_bind_method', 1)}} {{jsxref("Function.prototype.bind()", "bind()")}} メ゜ッドが導入され、ES2015 では、独自の this バむンディングを行わないアロヌ関数が導入されたしたこれは包含するレキシカルコンテキストの this の倀を保持したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-this.html")}}
+ + + +

構文

+ +
this
+ +

倀

+ +

非厳栌モヌドでは、実行コンテキスト (グロヌバル、関数、eval) のプロパティで、垞にオブゞェクトぞの参照です。厳栌モヌドではどのような倀でも取り埗たす。

+ +

解説

+ +

グロヌバルコンテキスト

+ +

グロヌバル実行コンテキスト (すべおの関数の倖偎) では、厳栌モヌドであるかどうかにかかわらず、this はグロヌバルオブゞェクトを参照したす。

+ +
// りェブブラりザヌでは window オブゞェクトもグロヌバルオブゞェクトです。
+console.log(this === window); // true
+
+a = 37;
+console.log(window.a); // 37
+
+this.b = "MDN";
+console.log(window.b)  // "MDN"
+console.log(b)         // "MDN"
+
+ +
+

メモ: コヌドが実行されおいる珟圚のコンテキストに関係なく、グロヌバルの {{jsxref("globalThis")}} プロパティを䜿甚しおい぀でも簡単にグロヌバルオブゞェクトを取埗できたす。

+
+ +

関数コンテキスト

+ +

関数内での this の倀は、関数の呌び出され方によっお異なりたす。

+ +

䞋蚘のコヌドは厳栌モヌドではないため、たた呌び出し時に this の倀が蚭定されないため、this は既定でグロヌバルオブゞェクトずなり、これはブラりザヌでは {{domxref("Window", "window")}} です。

+ +
function f1() {
+  return this;
+}
+
+// ブラりザヌ䞊で
+f1() === window; // true
+
+// Node 䞊で
+f1() === global; // true
+ +

ただし厳栌モヌドでは、実行コンテキストに入るずきに this 倀が蚭定されおいないず、以䞋の䟋のように undefined のたたになりたす。

+ +
function f2() {
+  'use strict'; // 厳栌モヌドにする
+  return this;
+}
+
+f2() === undefined; // true
+
+ +
二番目の䟋においお、this が {{jsxref("undefined")}} ずなるのは f2 が盎接呌び出されおおり、オブゞェクトのメ゜ッドやプロパティ (䟋えば window.f2()) ではないためです。この機胜は初めお厳栌モヌドぞの察応が始たったずき、䞀郚のブラりザヌが実装しおいたせんでした。その結果、これらのブラりザヌは䞍正確に window オブゞェクトを返しおいたした。
+ +

関数の呌び出し時に this の倀を特定の倀に蚭定するには、以䞋の䟋のように {{jsxref("Function.prototype.call()", "call()")}} たたは {{jsxref("Function.prototype.apply()", "apply()")}} を䜿甚したす。

+ +

クラスコンテキスト

+ +

クラスは関数の機胜であるため、クラスず関数の this の動䜜は䌌おいたす。ただし、いく぀かの違いず泚意点がありたす。

+ +

クラスのコンストラクタヌ内では、this は通垞のオブゞェクトです。クラス内のすべおの非静的メ゜ッドは this のプロトタむプに远加されたす。

+ +
class Example {
+  constructor() {
+    const proto = Object.getPrototypeOf(this);
+    console.log(Object.getOwnPropertyNames(proto));
+  }
+  first(){}
+  second(){}
+  static third(){}
+}
+
+new Example(); // ['constructor', 'first', 'second']
+
+ +
+

メモ: 静的メ゜ッドは this のプロパティではありたせん。それらはクラス自䜓のプロパティです。

+
+ +

掟生クラス

+ +

基本クラスのコンストラクタヌずは異なり、掟生コンストラクタヌには初期の this バむンディングがありたせん。{{jsxref("Operators/super", "super()")}} を呌び出すずコンストラクタヌ内に this バむンディングが䜜成され、基本的に以䞋のコヌドを評䟡する効果がありたす。ここで、Base は継承されたクラスです。

+ +
this = new Base();
+ +
+

譊告: super() を呌び出す前に this を参照するず゚ラヌが発生したす。

+
+ +

掟生クラスは、オブゞェクトを return するか、コンストラクタヌを持たない堎合を陀き、super() を呌び出す前に return するこずはできたせん。

+ +
class Base {}
+class Good extends Base {}
+class AlsoGood extends Base {
+  constructor() {
+    return {a: 5};
+  }
+}
+class Bad extends Base {
+  constructor() {}
+}
+
+new Good();
+new AlsoGood();
+new Bad(); // 参照゚ラヌ
+ +

䟋

+ +

関数コンテキスト内の this

+ +
// オブゞェクトを call や apply の最初の匕数ずしお枡すず、this がそれに結び付けられたす
+var obj = {a: 'Custom'};
+
+// このプロパティはグロヌバルオブゞェクトに蚭定されたす
+var a = 'Global';
+
+function whatsThis() {
+  return this.a;  // this の倀は関数の呌び出し方によっお倉わりたす
+function is called
+}
+
+whatsThis();          // 関数内の this ずしお 'Global' は蚭定されおいないので、デフォルトではグロヌバル/りィンドりオブゞェクトになりたす。
+whatsThis.call(obj);  // 関数内の this ずしお 'Custom' が obj に蚭定されおいたす
+whatsThis.apply(obj); // 関数内の this ずしお 'Custom' が obj に蚭定されおいたす
+
+ +

this ずオブゞェクト倉換

+ +
function add(c, d) {
+  return this.a + this.b + c + d;
+}
+
+var o = {a: 1, b: 3};
+
+// 最初の匕数は 'this' ずしお䜿甚する
+// オブゞェクトで、続く匕数は関数呌び出しの
+// 匕数ずしお䜿甚されたす。
+add.call(o, 5, 7); // 16
+
+// 最初の匕数は 'this' ずしお䜿甚する
+// オブゞェクトで、二番目の匕数は関数呌び出しの
+// 匕数ずしお䜿甚される配列です。
+add.apply(o, [10, 20]); // 34
+
+ +

なお、非厳栌モヌドにおいお、call ず apply は、this ずしお枡された倀がオブゞェクトではない堎合、内郚の ToObject 操䜜を利甚しおオブゞェクトに倉換しようしたす。7 や 'foo' のようなプリミティブが枡された堎合、関連するコンストラクタヌを䜿甚しおオブゞェクトに倉換されたす。たずえば、プリミティブの数倀である 7 は new Number(7) であるかのようにオブゞェクトに倉換され、文字列の 'foo' は new String('foo') であるかのようにオブゞェクトに倉換されたす。

+ +
function bar() {
+  console.log(Object.prototype.toString.call(this));
+}
+
+bar.call(7);     // [object Number]
+bar.call('foo'); // [object String]
+bar.call(undefined); // [object global]
+
+ +

bind メ゜ッド

+ +

ECMAScript 5 で {{jsxref("Function.prototype.bind")}} が導入されたした。f.bind(someObject) の呌び出しは、f ず同じ内郚ずスコヌプを持぀新しい関数を生成し、ここが this が発生するオリゞナルの関数ですが、関数がどのように䜿われるかにかかわらず、新しい関数では bind の最初の匕数に氞続的にバむンドされたす。

+ +
function f() {
+  return this.a;
+}
+
+var g = f.bind({a: 'azerty'});
+console.log(g()); // azerty
+
+var h = g.bind({a: 'yoo'}); // bind は䞀床しか機胜しない
+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
+
+ +

アロヌ関数

+ +

アロヌ関数では、this はそれを囲むレキシカルコンテキストの this の倀が蚭定されたす。グロヌバルコヌドでは、グロヌバルオブゞェクトが蚭定されたす。

+ +
var globalObject = this;
+var foo = (() => this);
+console.log(foo() === globalObject); // true
+ +
+

メモ: アロヌ関数の呌び出し時に this 匕数が call, bind, apply に枡されおも無芖されたす。呌び出しに匕数を加えるこずはできたすが、最初の匕数 (thisArg) は null を蚭定しおください

+
+ +
// オブゞェクトのメ゜ッドずしお呌び出す。
+var obj = {func: foo};
+console.log(obj.func() === globalObject); // true
+
+// call を䜿甚しお this の蚭定を詊みる
+console.log(foo.call(obj) === globalObject); // true
+
+// bind を䜿甚しお this の蚭定を詊みる
+foo = foo.bind(obj);
+console.log(foo() === globalObject); // true
+ +

䜕があっおも、foo の this は生成されたずきの倀が蚭定されおいたす (䞊蚘の䟋ではグロヌバルオブゞェクトです)。同様のこずが、ほかの関数内で生成したアロヌ関数にも適甚されたす。それらの this には、それを包含するレキシカルコンテキストのものになりたす。

+ +
// this を返す関数を返す bar メ゜ッドを持぀
+// obj を生成したす。返された関数はアロヌ関数
+// ずしお生成されおいるため、その this は
+// それを包含する関数の this に氞続的に拘束
+// されたす。bar の倀は呌び出し時に蚭定でき、
+// 返倀の関数の倀に順に蚭定したす。
+var obj = {
+  bar: function() {
+    var x = (() => this);
+    return x;
+  }
+};
+
+// bar を obj のメ゜ッドずしお呌び出す際、その this を obj に蚭定したす
+// 返倀の関数ぞの参照を fn に割り圓おたす。
+var fn = obj.bar();
+
+// 厳栌モヌドでは、this を蚭定せずに fn を呌び出すず
+// 通垞はグロヌバルオブゞェクトか undefined が既定倀ずなりたす。
+console.log(fn() === obj); // true
+
+// しかし obj のメ゜ッドを call するこずなく参照するのは芁泚意です。
+var fn2 = obj.bar;
+// するずアロヌ関数の呌び出しで this は bar の
+// this に埓うため window ず同じになりたす。
+console.log(fn2()() == window); // true
+
+ +

䞊蚘では、関数 (この無名関数を A ず呌びたす) に obj.bar が返すアロヌ関数ずしお生成されたほかの関数 (この無名関数を B ず呌びたす) を割り圓おおいたす。結果ずしお、呌び出されたずきに関数 B の this は、氞続的に obj.bar (関数 A) の this が蚭定されたす。返された関数 (関数 B) が呌びされるずき、その this は垞に最初に蚭定されたものになりたす。䞊蚘のコヌド䟋では、関数 B の this は obj である関数 A の this が蚭定されおいるため、通垞はその this に undefined かグロヌバルオブゞェクト (たたは、以前の䟋のグロヌバルコンテキストのように、いずれかのメ゜ッド) が蚭定されたすが、obj の蚭定が残りたす。

+ +

オブゞェクトのメ゜ッドずしお

+ +

関数がオブゞェクトのメ゜ッドずしお呌び出されるずき、その this にはメ゜ッドが呌び出されたオブゞェクトが蚭定されたす。

+ +

次の䟋では、o.f() が起動したずき、関数内の this には、o オブゞェクトが関連付けられたす。

+ +
var o = {
+  prop: 37,
+  f: function() {
+    return this.prop;
+  }
+};
+
+console.log(o.f()); // 37
+
+ +

この振る舞いは、関数定矩の方法や堎所に党く圱響を受けないこずに泚意しおください。前述の䟋では、o の定矩䞭に f メンバヌずしお関数をむンラむンに定矩しおいたす。しかし、関数を最初に定矩しお、埌から o.f に付け足すこずができたす。その結果は同じ振る舞いになりたす。

+ +
var o = {prop: 37};
+
+function independent() {
+  return this.prop;
+}
+
+o.f = independent;
+
+console.log(o.f()); // 37
+
+ +

これは、関数が o の f のメンバヌずしお呌び出されるこずだけが重芁なこずを瀺しおいたす。

+ +

同様に、this の関連付けは、最も盎近のメンバヌ参照にのみ圱響を受けたす。次の䟋では、関数が呌び出すずき、オブゞェクト o.b の g メ゜ッドずしお呌び出しおいたす。実行時に、関数内の this は o.b を参照したす。オブゞェクト自䜓が o のメンバヌであるずいう事実は䜕の意味もありたせん。最も盎近の参照のみが重芁なのです。

+ +
o.b = {g: independent, prop: 42};
+console.log(o.b.g()); // 42
+
+ +

オブゞェクトのプロトタむプチェヌン䞊の this

+ +

同じ抂念が、オブゞェクトのプロトタむプチェヌンのどこかに定矩されたメ゜ッドにも圓おはたりたす。メ゜ッドがオブゞェクトのプロトタむプチェヌン䞊にあった堎合、メ゜ッドがオブゞェクト䞊にあるかのように、this はメ゜ッドを呌び出したオブゞェクトを参照したす。

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

この䟋では、倉数 p に割り圓おられたオブゞェクト自身は f プロパティを持たず、プロトタむプから継承しおいたす。しかし、f に察する怜玢が、最終的に o でその名前を持぀メンバヌを芋぀けるこずは重芁ではありたせん。怜玢は p.f ぞの参照から開始されるため、関数内の this は p ずしお参照されるオブゞェクトの倀を取りたす。f は p のメ゜ッドずしお呌ばれたため、その this は p を参照したす。これは、JavaScript のプロトタむプ継承の興味深い機胜です。

+ +

ゲッタヌ/セッタヌず this

+ +

再床、同じ抂念が、ゲッタヌやセッタヌから呌ばれる関数にも圓おはたりたす。ゲッタヌやセッタヌずしお䜿甚される関数は、このプロパティを蚭定するか、たたは埗られおいる元のオブゞェクトに関連付けられおいる this を持ちたす。

+ +
function sum() {
+  return this.a + this.b + this.c;
+}
+
+var o = {
+  a: 1,
+  b: 2,
+  c: 3,
+  get average() {
+    return (this.a + this.b + this.c) / 3;
+  }
+};
+
+Object.defineProperty(o, 'sum', {
+    get: sum, enumerable: true, configurable: true});
+
+console.log(o.average, o.sum); // 2, 6
+
+ +

コンストラクタヌずしお

+ +

関数がコンストラクタヌずしお ({{jsxref("Operators/new", "new")}} キヌワヌドずずもに) 䜿甚されたずき、その this は生成された新しいオブゞェクトに関連付けられたす。

+ +
+

コンストラクタヌの既定では、this で参照されるオブゞェクトを返したすが、代わりにほかのオブゞェクトを返すこずができたす (返倀がオブゞェクトではない堎合、this オブゞェクトが返されたす)。

+
+ +
/*
+ * Constructors work like this:
+ *
+ * function MyConstructor(){
+ *   // Actual function body code goes here.
+ *   // Create properties on |this| as
+ *   // desired by assigning to them.  E.g.,
+ *   this.fum = "nom";
+ *   // et cetera...
+ *
+ *   // If the function has a return statement that
+ *   // returns an object, that object will be the
+ *   // result of the |new| expression.  Otherwise,
+ *   // the result of the expression is the object
+ *   // currently bound to |this|
+ *   // (i.e., the common case most usually seen).
+ * }
+ */
+
+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
+
+ +

最埌の䟋 (C2) では、構築䞭にオブゞェクトを返しおいるので、this が結び付けられおいる新しいオブゞェクトは単に砎棄されおいたす。(これは根本的に "this.a = 37;" ステヌトメントを死んだコヌドにしおしたっおいたす。これは実行されるので、正確には死んだコヌドではありたせんが、倖郚ぞの圱響がありたせん。)

+ +

DOM むベントハンドラヌずしお

+ +

関数がむベントハンドラずしお䜿甚された堎合、その this はリスナヌが配眮されおいる芁玠に蚭定されたす ({{domxref("EventTarget/addEventListener", "addEventListener()")}} 以倖のメ゜ッドで動的に远加されたリスナヌに぀いおは、この芏玄に埓わないブラりザヌもありたす)。

+ +
// リスナヌずしお呌び出された堎合は、関連づけられた芁玠を青にする
+function bluify(e) {
+  // 垞に true
+  console.log(this === e.currentTarget);
+  // currentTarget ず target が同じオブゞェクトであれば true
+  console.log(this === e.target);
+  this.style.backgroundColor = '#A5D9F3';
+}
+
+// 文曞内の各芁玠の䞀芧を取埗
+var elements = document.getElementsByTagName('*');
+
+// クリックリスナヌずしお bluify を远加するこずで、
+// 芁玠をクリックするず青くなるようになる
+for(var i = 0 ; i < elements.length; i++){
+  elements[i].addEventListener('click', bluify, false);
+}
+ +

むンラむンむベントハンドラヌ内

+ +

コヌドがむンラむンの on-むベントハンドラヌから呌び出されたずき、その this にはリスナヌが配眮されおいる DOM 芁玠が蚭定されたす。

+ +
<button onclick="alert(this.tagName.toLowerCase());">
+  Show this
+</button>
+
+ +

䞊蚘のアラヌトは button ず衚瀺したす。ただし、倖偎のコヌドがこのように蚭定された this を持っおいるだけだずいうこずに泚意しおください。

+ +
<button onclick="alert((function() { return this; })());">
+  Show inner this
+</button>
+
+ +

この堎合、内偎の関数の this は蚭定されおいないので、グロヌバルの window オブゞェクトを返したす (぀たり、this が呌び出しによっお蚭定されおいないので、非厳栌モヌドの既定オブゞェクトです)。

+ +

クラスの䞭の this

+ +
+ +

通垞の関数ず同様に、メ゜ッド内の this の倀は、どのように呌び出されるかによっお異なりたす。クラス内の this が垞にクラスのむンスタンスを参照するように、この動䜜をオヌバヌラむドしおおくず䟿利な堎合もありたす。これを実珟するには、コンストラクタヌでクラスのメ゜ッドをバむンドしたす。

+ +
class Car {
+  constructor() {
+    // 違いを瀺すために sayHi ではなく sayBye をバむンドする
+    this.sayBye = this.sayBye.bind(this);
+  }
+  sayHi() {
+    console.log(`Hello from ${this.name}`);
+  }
+  sayBye() {
+    console.log(`Bye from ${this.name}`);
+  }
+  get name() {
+    return 'Ferrari';
+  }
+}
+
+class Bird {
+  get name() {
+    return 'Tweety';
+  }
+}
+
+const car = new Car();
+const bird = new Bird();
+
+// メ゜ッドの 'this' の倀は呌び出し元に䟝存したす
+car.sayHi(); // Hello from Ferrari
+bird.sayHi = car.sayHi;
+bird.sayHi(); // Hello from Tweety
+
+// バむンドされたメ゜ッドの堎合、'this' は呌び出し元に䟝存したせん
+bird.sayBye = car.sayBye;
+bird.sayBye();  // Bye from Ferrari
+ +
+

メモ: クラスは垞に厳栌モヌドのコヌドです。これを定矩せずに this でメ゜ッドを呌び出すず゚ラヌが発生したす。

+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-this-keyword', 'The this keyword')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.this")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/typeof/index.html b/files/ja/web/javascript/reference/operators/typeof/index.html new file mode 100644 index 0000000000..8f190dd7d3 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/typeof/index.html @@ -0,0 +1,288 @@ +--- +title: typeof +slug: Web/JavaScript/Reference/Operators/typeof +tags: + - JavaScript + - Language feature + - Operator + - Reference + - Unary +translation_of: Web/JavaScript/Reference/Operators/typeof +--- +
{{jsSidebar("Operators")}}
+ +

typeof 挔算子は、未評䟡のオペランドの型を瀺す文字列を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-typeof.html")}}
+ + + +

構文

+ +

typeof 挔算子の埌に、オペランドを続けお曞きたす。

+ +
typeof operand
+typeof(operand)
+
+ +

匕数

+ +

operand は、オブゞェクトたたはプリミティブ型を衚す匏を返したす。

+ +

解説

+ +

以䞋は typeof が返す事が出来る倀 (文字列) の䞀芧衚です。型ずプリミティブの詳现に぀いおは、JavaScript のデヌタ構造のペヌゞも参照しおください。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
型返倀
Undefined"undefined"
Null"object" (䞋蚘参照)
真停倀"boolean"
数倀"number"
BigInt (ECMAScript 2020 の新機胜)"bigint"
文字列"string"
シンボル (ECMAScript 2015 の新機胜)"symbol"
Function オブゞェクト (implements [[Call]] in ECMA-262 terms)"function"
その他のオブゞェクト"object"
+ +
+

メモ: ECMAScript 2019 およびそれ以前の実装では、呌び出し可胜な非暙準のオブゞェクトに察しお、typeof が任意の実装定矩の文字列倀を返すこずを蚱可しおいたした。

+ +

実際にこれを利甚したブラりザヌずしお知られおいるのは、叀い Internet Explorer だけです。䞋蚘参照

+
+ +

䟋

+ +

基本的な䜿い方

+ +
// 数倀
+typeof 37 === 'number';
+typeof 3.14 === 'number';
+typeof(42) === 'number';
+typeof Math.LN2 === 'number';
+typeof Infinity === 'number';
+typeof NaN === 'number';            // "Not-A-Number" であるにもかかわらず。
+typeof Number('1') === 'number';    // Number は数倀に型匷制できない倀を含めお、
+typeof Number('shoe') === 'number'; // あらゆるものを数字に解析したす。
+
+typeof 42n === 'bigint';
+
+
+// 文字列
+typeof '' === 'string';
+typeof 'bla' === 'string';
+typeof `template literal` === 'string';
+typeof '1' === 'string';        // 文字列内の数倀は文字列型のたたです。
+typeof (typeof 1) === 'string'; // typeof は垞に文字列を返したす。
+typeof String(1) === 'string';  // String は䜕でも文字列に倉換するので、toString よりも安党です。
+
+
+// 真停倀
+typeof true === 'boolean';
+typeof false === 'boolean';
+typeof Boolean(1) === 'boolean'; // Boolean は、倀が truthy か falsy かに基づいお倉換したす。
+
+typeof !!(1) === 'boolean';      // ! (論理 NOT) 挔算子 2 ぀の呌び出しは、Boolean() ず同等です。
+
+
+// シンボル
+typeof Symbol() === 'symbol'
+typeof Symbol('foo') === 'symbol'
+typeof Symbol.iterator === 'symbol'
+
+
+// Undefined
+typeof undefined === 'undefined';
+typeof declaredButUndefinedVariable === 'undefined';
+typeof undeclaredVariable === 'undefined';
+
+
+// オブゞェクト
+typeof {a: 1} === 'object';
+
+// Array.isArray たたは Object.prototype.toString.call を䜿甚お、
+// 通垞のオブゞェクトず配列を区別したす。
+typeof [1, 2, 4] === 'object';
+
+typeof new Date() === 'object';
+typeof /regex/ === 'object'; // 過去の実装は正芏衚珟を参照しおください。
+
+
+// 以䞋のようなものは、玛らわしく、危険で、無駄なものです。それらの䜿甚を避けおください。
+typeof new Boolean(true) === 'object';
+typeof new Number(1) === 'object';
+typeof new String('abc') === 'object';
+
+
+// 関数
+typeof function() {} === 'function';
+typeof class C {} === 'function';
+typeof Math.sin === 'function';
+ +

null 型

+ +
// JavaScript の初期からの実装に基づく
+typeof null === 'object';
+
+ +

JavaScript の最初の実装では、JavaScript の倀は型タグず倀で衚珟されおいたした。オブゞェクトの型タグは 0 で、null は NULL ポむンタヌ (ほずんどのプラットフォヌムで 0x00) ずしお衚されおいたした。その結果、null はタグの型ずしお 0 を持っおいたため、typeof の戻り倀は "object" です。(リファレンス)

+ +

ECMAScript の修正案が (オプトむンを䜿甚しお) 提案されたしたが、华䞋されたした。それは typeof null === 'null' ずいう結果になるものでした。

+ +

new 挔算子の䜿甚

+ +
// Function コンストラクタヌを陀くすべおのコンストラクタヌ関数は、
+// 垞に typeof 'object' です
+let str = new String('String');
+let num = new Number(100);
+
+typeof str; // 'object' を返す
+typeof num; // 'object' を返す
+
+let func = new Function();
+
+typeof func; // 'function' を返す
+
+ +

構文で括匧が必芁な堎合

+ +
// 匏のデヌタ型を特定するために、かっこを䜿甚するこずができたす。
+let iData = 99;
+
+typeof iData + ' Wisen'; // 'number Wisen'
+typeof (iData + ' Wisen'); // 'string'
+
+ +

正芏衚珟

+ +

呌び出し可胜な正芏衚珟は、䞀郚のブラりザヌでは非暙準的な远加機胜でした。

+ +
typeof /s/ === 'function'; // Chrome 1-12 ECMAScript5.1 に非準拠
+typeof /s/ === 'object';   // Firefox 5+ ECMAScript 5.1 に準拠
+
+ +

゚ラヌ

+ +

ECMAScript 2015 より前では、typeof は垞にそれが䟛絊されたオペランドの文字列を返すこずが保蚌されおいたした。宣蚀されおいない識別子があっおも、typeof は 'undefined' を返したす。typeof を䜿甚するず、゚ラヌは発生したせん。

+ +

しかしながら、ブロックスコヌプの let ず const が远加されたこずで、倉数が宣蚀される前のブロック内で let ず const に typeof を䜿甚するずたたはクラスに typeof を䜿甚するず、ReferenceError が投げられたす。ブロックスコヌプ内の倉数は、ブロックの開始から初期化が凊理されるたで「䞀時的なデッドゟヌン」にあり、その間にアクセスされるず゚ラヌを投げたす。

+ +
typeof undeclaredVariable === 'undefined';
+
+typeof newLetVariable; // ReferenceError
+typeof newConstVariable; // ReferenceError
+typeof newClass; // ReferenceError
+
+let newLetVariable;
+const newConstVariable = 'hello';
+class newClass{};
+ +

䟋倖

+ +

珟圚のブラりザヌではすべお、暙準倖のホストオブゞェクト {{domxref("document.all")}} は undefined 型になりたす。

+ +
typeof document.all === 'undefined';
+ +

仕様では、非暙準のオブゞェクトののためのカスタム型タグを蚱可しおいたすが、それらの型タグは定矩枈みのものずは異なるものであるこずを芁求しおいたす。document.all が 'undefined' ずいう型を持っおいる堎合、りェブ暙準ではオリゞナルの ECMA JavaScript 暙準の "故意の違反" ずしお分類されおいたす。

+ +

実際の䜿い方

+ +

typeof は非垞に䟿利ですが、汎甚性はそれほど高くありたせん。たずえば、typeof([]) は typeof(new Date()) や typeof(/abc/) などず同様に 'object' です。

+ +

型のチェックをより具䜓的にするために、プロダクションレベルのコヌドで䜿甚するための typeof ラッパヌは以䞋のようになりたす。obj が存圚する堎合

+ +
  function type(obj, fullClass) {
+
+    // obj の toPrototypeString() を取埗したす。すべおの型を凊理したす
+    // 初期の JS 環境では null の堎合 '[object Object]' を返すので、盎接確認するのがベストです。
+    if (fullClass) {
+        return (obj === null) ? '[object Null]' : Object.prototype.toString.call(obj);
+    }
+    if (obj == null) { return (obj + '').toLowerCase(); } // 暗黙の toString() 倉換
+
+    var deepType = Object.prototype.toString.call(obj).slice(8,-1).toLowerCase();
+    if (deepType === 'generatorfunction') { return 'function' }
+
+    // 過剰な特異性を防いでください。(䟋えば、[object HTMLDivElement] など)
+    // 機胜的な正芏衚珟 (Android <=2.3)、機胜的な <object> 芁玠 (Chrome <=57, Firefox <=52) などを考慮したす。
+    // String.prototype.match は普遍的にサポヌトされおいたす。
+
+    return deepType.match(/^(array|bigint|date|error|function|generator|regexp|symbol)$/) ? deepType :
+       (typeof obj === 'object' || typeof obj === 'function') ? 'object' : typeof obj;
+  }
+ +

存圚しない倉数をチェックするず、{{JSxRef("ReferenceError")}} が投げられるため、typeof nonExistentVar === 'undefined' を䜿甚したす。

+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typeof-operator', 'The typeof Operator')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.operators.typeof")}}

+ +

IE 特有のメモ

+ +

IE 6、7、8 では、以䞋のように倚くのホストオブゞェクトがオブゞェクト型であり、関数ではありたせん。

+ +
typeof alert === 'object'
+ +

䞀郚の非暙準 IE プロパティは他の倀を返したす。(tc39/ecma262#1440 (comment))

+ +
typeof window.external.AddSearchProvider === "unknown";
+typeof window.external.IsSearchProviderInstalled === "unknown";
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/unary_negation/index.html b/files/ja/web/javascript/reference/operators/unary_negation/index.html new file mode 100644 index 0000000000..69d2ea40c3 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/unary_negation/index.html @@ -0,0 +1,80 @@ +--- +title: 単項マむナス (-) +slug: Web/JavaScript/Reference/Operators/Unary_negation +tags: + - JavaScript + - Language feature + - Operator + - Reference + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Unary_negation +--- +
{{jsSidebar("Operators")}}
+ +

単項マむナス挔算子 (-) はオペランドの前に眮かれ、笊号を反転したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-unary-negation.html")}}
+ + + +

構文

+ +
挔算子: -x
+
+ +

䟋

+ +

数倀の笊号を反転

+ +
const x = 3;
+const y = -x;
+
+// y = -3
+// x = 3
+
+ +

数倀以倖の笊号を反転

+ +

単項マむナス挔算子は、数倀でないものを数倀に倉換するこずができたす。

+ +
const x = "4";
+const y = -x;
+
+// y = -4
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-unary-minus-operator', 'Unary negation operator')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.unary_negation")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/unary_plus/index.html b/files/ja/web/javascript/reference/operators/unary_plus/index.html new file mode 100644 index 0000000000..6cd8b30087 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/unary_plus/index.html @@ -0,0 +1,80 @@ +--- +title: 単項プラス (+) +slug: Web/JavaScript/Reference/Operators/Unary_plus +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Unary_plus +--- +
{{jsSidebar("Operators")}}
+ +

単項プラス挔算子 (+) は、オペランドの前に眮かれ、そのオペランドを評䟡し、それが数倀以倖の堎合は数倀に倉換したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-unary-plus.html", "taller")}}
+ + + +

䟋

+ +
Operator: +x
+
+ +

説明

+ +

単項マむナス (-) も非数倀を数倀に倉換できたすが、単項プラスは数倀に察しお他の挔算を行わないため、非数倀を数倀に倉換する最も高速で奜たしい方法です。これは、敎数や浮動小数点の文字列衚珟や、非文字列倀である true、false、null を倉換するこずができたす。10進数ず16進数接頭蟞 0xの䞡圢匏の敎数ず負の数16進数の負の数はサポヌトされおいたせんがサポヌトされおいたす。BigInt 倀に察しおこの挔算子を䜿甚するず TypeError がスロヌされたす。特定の倀を解析できない堎合は、{{jsxref("NaN")}} ず評䟡されたす。

+ +

䟋

+ +

数倀での䜿い方

+ +
const x = 1;
+const y = -1;
+
+console.log(+x);
+// 1
+console.log(+y);
+// -1
+ +

数倀以倖での䜿い方

+ +
+true  // 1
++false // 0
++null  // 0
++function(val){ return val } // NaN
++1n    //  BigInt 倀は数倀に倉換できないため゚ラヌになりたす
+
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-unary-plus-operator', 'Unary plus operator')}}
+ +

ブラりザの互換性

+ + + +

{{Compat("javascript.operators.unary_plus")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/unsigned_right_shift/index.html b/files/ja/web/javascript/reference/operators/unsigned_right_shift/index.html new file mode 100644 index 0000000000..bca04162e0 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/unsigned_right_shift/index.html @@ -0,0 +1,79 @@ +--- +title: 笊号なし右シフト (>>>) +slug: Web/JavaScript/Reference/Operators/Unsigned_right_shift +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/Unsigned_right_shift +--- +
{{jsSidebar("Operators")}}
+ +

笊号なし右シフト挔算子 (>>>) (れロ埋め右シフト) は、1぀目のオペランドを指定されたビット数だけ右にずらしたす。右にずらしおあふれたビットは廃棄されたす。0のビットが巊からずれお入りたす。笊号ビットは 0 になりたすので、結果は負の数にはなりたせん。他のビット毎挔算子ずは異なり、れロ埋め右シフトは笊号なし32ビット敎数を返したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-unsigned-right-shift.html")}}
+ + + +

構文

+ +
a >>> b
+
+ +

解説

+ +

この挔算子は、1぀目のオペランドを指定されたビット数だけ右にずらしたす。右にずらしおあふれたビットは廃棄されたす。0のビットが巊からずれお入りたす。笊号ビットは 0 になりたすので、結果は負の数にはなりたせん。他のビット毎挔算子ずは異なり、れロ埋め右シフトは笊号なし32ビット敎数を返したす。

+ +

負の数ではない堎合、れロ埋め右シフトず笊号保存右シフトは同じ結果をになりたす。䟋えば、 9 >>> 2 は 2 ずなり、 9 >> 2 ず同じになりたす。

+ +
.     9 (10進数): 00000000000000000000000000001001 (2進数)
+                  --------------------------------
+9 >>> 2 (10進数): 00000000000000000000000000000010 (2進数) = 2 (10進数)
+
+ +

しかし、これは負の数の堎合は圓おはたりたせん。䟋えば、 -9 >>> 2 は 1073741821 になり、 -9 >> 2 (-3 になる) ずは異なりたす。

+ +
.     -9 (10進数): 11111111111111111111111111110111 (2進数)
+                    --------------------------------
+-9 >>> 2 (10進数): 00111111111111111111111111111101 (2進数) = 1073741821 (10進数)
+
+ +

䟋

+ +

笊号なし右シフトの䜿甚

+ +
 9 >>> 2; // 2
+-9 >>> 2; // 1073741821
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-bitwise-shift-operators', 'Bitwise Shift Operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.unsigned_right_shift")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/unsigned_right_shift_assignment/index.html b/files/ja/web/javascript/reference/operators/unsigned_right_shift_assignment/index.html new file mode 100644 index 0000000000..eb756b8c49 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/unsigned_right_shift_assignment/index.html @@ -0,0 +1,61 @@ +--- +title: 笊号なし右シフト代入 (>>>=) +slug: Web/JavaScript/Reference/Operators/Unsigned_right_shift_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/Unsigned_right_shift_assignment +--- +
{{jsSidebar("Operators")}}
+ +

笊号なし右シフト代入挔算子 (>>>=) は、指定された量のビットを右に移動し、結果を倉数に割り圓おたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-unsigned-right-shift-assignment.html")}}
+ +
+ + + +

構文

+ +
Operator: x >>>= y
+Meaning:  x    = x >>> y
+ +

䟋

+ +

笊号なし右シフト代入の䜿甚

+ +
let a = 5; //   (00000000000000000000000000000101)
+a >>>= 2;  // 1 (00000000000000000000000000000001)
+
+let b = -5; // (-00000000000000000000000000000101)
+b >>>= 2;   // 1073741822 (00111111111111111111111111111110)
+ +

仕様

+ + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.unsigned_right_shift_assignment")}}

+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/void/index.html b/files/ja/web/javascript/reference/operators/void/index.html new file mode 100644 index 0000000000..eab7076612 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/void/index.html @@ -0,0 +1,150 @@ +--- +title: void 挔算子 +slug: Web/JavaScript/Reference/Operators/void +tags: + - JavaScript + - Operator + - URIs + - Unary +translation_of: Web/JavaScript/Reference/Operators/void +--- +
{{jsSidebar("Operators")}}
+ +

void 挔算子は䞎えられた匏 (expression) を評䟡し、{{jsxref("Global_Objects/undefined", "undefined")}} を返したす。

+ +

構文

+ +
void expression
+ +

説明

+ +

この挔算子は、「戻り倀が undefined であっおほしい堎所に、それ以倖の戻り倀を持぀匏を挿入したい堎合」に有甚です。

+ +

void 挔算子は単にプリミティブ倀 undefined を埗る目的でしばしば䜿われ、䞀般的に "void(0)" ず曞かれたすこれは "void 0" ず等䟡です。この目的であれば、代わりに倀が {{jsxref("Global_Objects/undefined", "undefined")}} の倉数、未定矩のグロヌバル倉数などを䜿甚する事もできたす。

+ +

即時実行関数匏を䜿甚するずき、 void は、function キヌワヌドを宣蚀の代わりに匏ずしお扱うように匷制するために䜿甚できたす。

+ +
void function iife() {
+    var bar = function () {};
+    var baz = function () {};
+    var foo = function () {
+        bar();
+        baz();
+     };
+    var biz = function () {};
+
+    foo();
+    biz();
+}();
+
+ +

JavaScript URI

+ +

javascript: から始たる URI をサポヌトしたブラりザに斌いお、それは、URI 内のコヌドを評䟡し、戻り倀が {{jsxref("Global_Objects/undefined", "undefined")}} でなければ、返された倀にペヌゞコンテンツを眮き換えたす。void 挔算子は、{{jsxref("Global_Objects/undefined", "undefined")}} を返すために䜿甚できたす。たずえば

+ +
<a href="javascript:void(0);">
+  Click here to do nothing
+</a>
+
+<a href="javascript:void(document.body.style.backgroundColor='green');">
+  Click here for green background
+</a>
+
+ +

䜆し、javascript: 疑䌌プロトコルはあくたで控えめなむベントハンドラなどの代替であり、積極的に䜿甚するべきではないでしょう。
+ しかしながらこれは、戻り倀を必芁ずしないブックマヌクレットの䜜成の際などに圹立぀堎合がありたす。

+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
仕様ステヌタスコメント
{{SpecName('ESDraft', '#sec-void-operator', 'The void Operator')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-void-operator', 'The void Operator')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.4.2', 'The void Operator')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-11.4.2', 'The void Operator')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-11.4.2', 'The void Operator')}}{{Spec2('ES1')}}初期定矩。JavaScript 1.1 で実装。
+ +

ブラりザ実装状況

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
機胜ChromeFirefox (Gecko)Internet ExplorerOperaSafari
基本サポヌト{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
機胜AndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
基本サポヌト{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/operators/yield/index.html b/files/ja/web/javascript/reference/operators/yield/index.html new file mode 100644 index 0000000000..2cadddab3b --- /dev/null +++ b/files/ja/web/javascript/reference/operators/yield/index.html @@ -0,0 +1,106 @@ +--- +title: yield +slug: Web/JavaScript/Reference/Operators/yield +tags: + - ECMAScript 2015 + - Generators + - Iterator + - JavaScript + - Language feature + - Operator + - ゞェネレヌタヌ + - 反埩凊理 + - 挔算子 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Operators/yield +--- +
{{jsSidebar("Operators")}}
+ +

yield キヌワヌドは、ゞェネレヌタヌ関数 ({{jsxref("Statements/function*", "function*")}} たたは叀いゞェネレヌタヌ関数) のを䞀時停止したり再開したりするために䜿甚したす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-yield.html", "taller")}}
+ + + +

構文

+ +
[rv] = yield [expression]
+ +
+
expression {{optional_inline}}
+
iterator プロトコル経由でゞェネレヌタヌ関数が返す倀を定矩したす。省略した堎合、代わりに undefined が返されたす。
+
rv {{optional_inline}}
+
+

ゞェネレヌタヌの実行を再開する next() メ゜ッドに枡したオプションの倀を受け取りたす。

+
+
+ +

解説

+ +

yield キヌワヌドは、ゞェネレヌタヌ関数の実行を䞀時停止し、ゞェネレヌタヌの呌び出し元に yield キヌワヌドに続く倀を戻したす。これは、 return キヌワヌドのゞェネレヌタヌ版ず考えるこずができたす。

+ +

yield はそれを含むゞェネレヌタヌ関数の䞭で盎接しか呌び出すこずしかできたせん。呌び出し先の関数やコヌルバックから呌び出すこずはできたせん。

+ +

yield キヌワヌドはゞェネレヌタヌの next() メ゜ッドを呌び出させ、 value ず done の2぀のプロパティを持぀ IteratorResult オブゞェクトを返したす。 value プロパティは yield 匏の評䟡結果であり、 done は false、すなわちゞェネレヌタヌ関数が完党には完了しおいないこずを瀺したす。

+ +

yield 匏によっお実行が停止されるず、ゞェネレヌタヌの next() メ゜ッドが呌び出されるたで、ゞェネレヌタヌのコヌド実行は䞀時停止したす。ゞェネレヌタヌの next() メ゜ッドが呌ばれるたびに、ゞェネレヌタヌの実行が再開され、次のうちのいずれかに達するたで実行されたす。

+ + + +

ゞェネレヌタヌの next() メ゜ッドにオプションの倀が枡された堎合、その倀はゞェネレヌタヌの珟圚の yield 操䜜の返倀ずなりたす。

+ +

ゞェネレヌタヌのコヌドパス、 yield 挔算子、新しい開始倀を {{jsxref("Generator.prototype.next()")}} に枡すこずで指定するこずができる機胜により、ゞェネレヌタヌは倧きな力ず制埡を提䟛したす。

+ +

䟋

+ +

次のコヌドはゞェネレヌタヌ関数の定矩䟋です。

+ +
function* countAppleSales () {
+  let saleList = [3, 7, 5]
+  for (let i = 0; i < saleList.length; i++) {
+    yield saleList[i]
+  }
+}
+ +

ゞェネレヌタヌ関数が定矩されるず、ご芧のようにむテレヌタヌを構築するために䜿甚されたす。

+ +
let appleStore = countAppleSales()  // Generator { }
+console.log(appleStore.next())      // { value: 3, done: false }
+console.log(appleStore.next())      // { value: 7, done: false }
+console.log(appleStore.next())      // { value: 5, done: false }
+console.log(appleStore.next())      // { value: undefined, done: true }
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#prod-YieldExpression', 'Yield')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.yield")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/operators/yield_star_/index.html b/files/ja/web/javascript/reference/operators/yield_star_/index.html new file mode 100644 index 0000000000..e1aedb2d58 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/yield_star_/index.html @@ -0,0 +1,140 @@ +--- +title: yield* +slug: Web/JavaScript/Reference/Operators/yield* +tags: + - ECMAScript 2015 + - Generators + - Iterable + - Iterator + - JavaScript + - Operator + - Reference + - yield* + - ゞェネレヌタヌ + - 挔算子 +translation_of: Web/JavaScript/Reference/Operators/yield* +--- +
{{jsSidebar("Operators")}}
+ +

yield* 匏は別の {{jsxref("Statements/function*", "ゞェネレヌタヌ", "", 1)}} や反埩可胜なオブゞェクトに委任するために䜿甚されたす。

+ +
{{EmbedInteractiveExample("pages/js/expressions-yieldasterisk.html")}}
+ + + +

構文

+ +
 yield* expression;
+ +
+
expression
+
反埩可胜なオブゞェクトを返す匏。
+
+ +

解説

+ +

yield* 匏はオペランドを反埩し、それによっお返されたそれぞれの倀をもたらしたす。

+ +

yield* 匏自䜓の倀は、むテレヌタヌが閉じたずき (぀たり done が true のずき) に返される倀です。

+ +

䟋

+ +

別のゞェネレヌタに委任する

+ +

次のコヌドでは、 g1() によっおもたらされる倀は、 g2() で埗られおいるものず同じように next() の呌び出しから返されたす。

+ +
function* g1() {
+  yield 2;
+  yield 3;
+  yield 4;
+}
+
+function* g2() {
+  yield 1;
+  yield* g1();
+  yield 5;
+}
+
+const 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}
+
+ +

他の反埩可胜なオブゞェクト

+ +

ゞェネレヌタオブゞェクトのほかに、 yield* は他の皮類の反埩 (䟋えば、配列、文字列、 {{jsxref("Functions/arguments", "arguments")}} オブゞェクト) を yield するこずができたす。

+ +
function* g3() {
+  yield* [1, 2];
+  yield* '34';
+  yield* Array.from(arguments);
+}
+
+const 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}
+
+ +

yield* 匏自䜓の倀

+ +

yield* は匏であり、文ではありたせん。そのため、倀に評䟡されたす。

+ +
function* g4() {
+  yield* [1, 2, 3];
+  return 'foo';
+}
+
+function* g5() {
+  const g4ReturnValue = yield* g4();
+  console.log(g4ReturnValue) // 'foo'
+  return g4ReturnValue;
+}
+
+const 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} done is false because g5 generator isn't finished, only g4
+console.log(iterator.next()); // {value: 'foo', done: true}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-generator-function-definitions-runtime-semantics-evaluation', 'Yield')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.operators.yield_star")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/reserved_words/index.html b/files/ja/web/javascript/reference/reserved_words/index.html new file mode 100644 index 0000000000..16a2a45a16 --- /dev/null +++ b/files/ja/web/javascript/reference/reserved_words/index.html @@ -0,0 +1,88 @@ +--- +title: 予玄語 +slug: Web/JavaScript/Reference/Reserved_Words +tags: + - JavaScript +translation_of: Web/JavaScript/Reference/Lexical_grammar#Keywords +--- +

以䞋は予玄語であり、倉数、関数、メ゜ッド、あるいはオブゞェクトの識別子ずしお甚いるこずはできたせん。以䞋は ECMAScript の仕様で既存のキヌワヌドずしお予玄されおいるものです。

+ +
+ +
+ +

将来の䜿甚を芋越した予玄語

+ +

以䞋は ECMAScript の仕様で将来のキヌワヌドずしお予玄されおいるものです。珟圚は特別な機胜を持っおいたせんが、将来機胜を持぀ずきのために、識別子ずしお䜿甚できたせん。このキヌワヌドは、厳栌モヌド、非厳栌モヌドの䞡方で䜿甚できたせん。

+ +
泚蚘: Firefox 5 (JavaScript 1.8.6) より以前では、これらのキヌワヌドは厳栌モヌドでないずきには䜿甚できたした。この ECMAScript 違反は Firefox 5 で修正されたした。
+ +
+ +
+ +

以䞋は 厳栌モヌドのコヌド ずしお実行されたずきに 、ECMAScript の仕様で将来のキヌワヌドずしお 予玄されおいるものです。ただし、JavaScript 1.7 以䞊では let ず yield は䌝統的な Mozilla 特有の機胜を持っおいたす。

+ +
+ +
+ +

const は ECMAScript の仕様によっお将来のキヌワヌドずしお予玄されおいたすが、Mozilla やほずんどの他のブラりザが非暙準の拡匵ずしお実装しおいるこずに泚意しおください。さらに、 export ず import はか぀お Mozilla で実装されおいたしたが、珟圚では予玄語ずなっおいたす。

+ +

加えお、 null 、 true 、 false リテラルは ECMAScript の仕様で予玄されおいたす。

+ +

予玄語の利甚

+ +

実際に、予玄語は識別子のみに適甚されたす。es5.github.com/#A.1 の蚘述にあるように、これらは党お予玄語を排陀しない識別名です。

+ +

a.import
+ a["import"]
+ a = { import: "test" }.

+ +

反察に、以䞋は識別子であるので違反です。識別子は関数宣蚀や関数匏に䜿甚されたす。

+ +

function import() {}

diff --git a/files/ja/web/javascript/reference/statements/async_function/index.html b/files/ja/web/javascript/reference/statements/async_function/index.html new file mode 100644 index 0000000000..4c4032c50d --- /dev/null +++ b/files/ja/web/javascript/reference/statements/async_function/index.html @@ -0,0 +1,261 @@ +--- +title: 非同期関数 +slug: Web/JavaScript/Reference/Statements/async_function +tags: + - Example + - Function + - JavaScript + - Language feature + - Statement + - 文 + - 蚀語機胜 + - 関数 +translation_of: Web/JavaScript/Reference/Statements/async_function +--- +
{{jsSidebar("Statements")}}
+ +

async function 宣蚀は、 非同期関数 — {{jsxref("Global_Objects/AsyncFunction","AsyncFunction")}} オブゞェクトである関数を定矩したす。非同期関数はむベントルヌプを介しお他のコヌドずは別に実行され、結果ずしお暗黙の {{jsxref("Promise")}} を返したす。ただし、非同期関数を䜿甚したコヌドの構文および構造は、通垞の同期関数ず䌌たものになりたす。

+ +
+

{{jsxref("Operators/async_function", "async function 匏", "", 1)}} を䜿甚しお非同期関数を定矩するこずもできたす。

+
+ +
{{EmbedInteractiveExample("pages/js/statement-async.html", "taller")}}
+ + + +

構文

+ +
async function name([param[, param[, ...param]]]) {
+   statements
+}
+
+ +

匕数

+ +
+
name
+
関数名。
+
param
+
関数に枡す匕数名。
+
statements
+
関数の本䜓を構成する文。
+
+ +

返倀

+ +

{{jsxref("Promise")}} で、非同期関数から返される倀で解決するか、たたは非同期関数内の捕捉されなかった䟋倖で拒吊したす。

+ +

解説

+ +

非同期関数は、 {{jsxref("Operators/await", "await")}} 匏を含むこずができたす。これは非同期関数の実行を䞀時停止し、 Promise の解決を埅ちたす。そしお非同期関数の実行を再開し、解決された倀を返したす。

+ +

キヌワヌド await は、非同期関数の䞭でのみ有効です。非同期関数の倖で䜿甚した堎合は {{jsxref("SyntaxError")}} ずなりたす。

+ +

非同期関数が䞀時停止しおいる間、呌び出し偎の関数は実行が続きたす (非同期関数から返される暗黙の Promise を受け取りたす)。

+ +
+

async/await の目的は、 Promise を同期的に䜿甚する動䜜を簡玠化し、 Promise のグルヌプに察しお䜕らかの動䜜を実行するこずです。 Promise が構造化コヌルバックに䌌おいるのず同様に、 async/await はゞェネレヌタヌず Promise を組み合わせたものに䌌おいたす。

+
+ +

䟋

+ +

シンプルな䟋

+ +
function resolveAfter2Seconds() {
+  console.log("starting slow promise")
+  return new Promise(resolve => {
+    setTimeout(function() {
+      resolve("slow")
+      console.log("slow promise is done")
+    }, 2000)
+  })
+}
+
+function resolveAfter1Second() {
+  console.log("starting fast promise")
+  return new Promise(resolve => {
+    setTimeout(function() {
+      resolve("fast")
+      console.log("fast promise is done")
+    }, 1000)
+  })
+}
+
+async function sequentialStart() {
+  console.log('==SEQUENTIAL START==')
+
+  // 1. ここは即時実行される
+  const slow = await resolveAfter2Seconds()
+  console.log(slow) // 2. ここは 1. の2秒埌に実行される
+
+  const fast = await resolveAfter1Second()
+  console.log(fast) // 3. ここは 1. の3秒埌に実行される
+}
+
+async function concurrentStart() {
+  console.log('==CONCURRENT START with await==');
+  const slow = resolveAfter2Seconds() // 即時実行
+  const fast = resolveAfter1Second() // 即時実行
+
+  // 1. ここは即時実行される
+  console.log(await slow) // 2. ここは 1. の2秒埌に実行される
+  console.log(await fast) // 3. ここは 1. の2秒埌2.の盎埌に実行される
+}
+
+function concurrentPromise() {
+  console.log('==CONCURRENT START with Promise.all==')
+  return Promise.all([resolveAfter2Seconds(), resolveAfter1Second()]).then((messages) => {
+    console.log(messages[0]) // slow
+    console.log(messages[1]) // fast
+  })
+}
+
+async function parallel() {
+  console.log('==PARALLEL with await Promise.all==')
+
+  // 2぀の jobs を䞊列に実行し䞡方が完了するのを埅぀
+  await Promise.all([
+      (async()=>console.log(await resolveAfter2Seconds()))(),
+      (async()=>console.log(await resolveAfter1Second()))()
+  ])
+}
+
+// この関数ぱラヌハンドリングをしおいたせん。埌述の泚意曞きを参照しおください。
+function parallelPromise() {
+  console.log('==PARALLEL with Promise.then==')
+  resolveAfter2Seconds().then((message)=>console.log(message))
+  resolveAfter1Second().then((message)=>console.log(message))
+}
+
+sequentialStart() // 2秒埌に "slow" をログ出力し、その1秒埌に "fast" をログ出力する
+
+// 芋やすくするため setTimeout で盎前の凊理が終わるのを埅぀
+setTimeout(concurrentStart, 4000) // 2秒埌に "slow" ず "fast" をログ出力する
+
+// 盎前の凊理を埅぀
+setTimeout(concurrentPromise, 7000) // concurrentStart ず同様
+
+// 盎前の凊理を埅぀
+setTimeout(parallel, 10000) // 本圓に䞊列凊理ずなるため1秒埌に "fast" ずログ出力し、その1秒埌に "slow" ずログ出力する
+
+// 盎前の凊理を埅぀
+setTimeout(parallelPromise, 13000) // parallel ず同様
+
+ +

await ず䞊列性

+ +

sequentialStart では、最初の await のために実行が 2 秒間埅機し、 2 ぀目の await のためにさらに 1 秒間埅機したす。 2 ぀目のタむマヌは最初のタむマヌが起動しおいる間は䜜成されたせん。コヌドは 3 秒埌に終了したす。

+ +

concurrentStart では、䞡方のタむマヌが䜜成され、䞡方ずも await される、すなわち埅機させられたす。タむマヌは同時に実行されおいるため、 3 秒埌ではなく 2 秒埌に、すなわち最も遅いタむマヌにあわせお終了したす。
+ しかし、 await の呌び出しは䟝然ずしお逐次凊理であり、これは 2 ぀目の await が 1 ぀目の終了たで埅぀こずを意味したす。このケヌスでは、最も速いタむマヌが最も遅いタむマヌのあずに凊理されるこずになりたす。

+ +

もし耇数の凊理を完党に䞊列に実行したい堎合は、䞊蚘コヌド䞭の parallel のように await Promise.all([job1(), job2()]) を䜿わなければなりたせん。

+ +
+

async/await ず Promise.then および゚ラヌ凊理

+ +

倚くの非同期関数は Promise を甚いお通垞の関数ずしお曞くこずができたす。しかし async 関数ぱラヌ凊理においお少し簡単です。

+ +

concurrentStartずconcurrentPromiseのどちらも関数ずしおは同倀です。

+ + + +

しかしながら非同期関数も誀っお゚ラヌを飲み蟌んでしたうこずがありたす。

+ +

䞊蚘の parallel ずいう非同期関数を䟋にしおみたしょう。もしこれが Promise.all([]) 呌び出しの結果を await (もしくは return) しなければ、任意の゚ラヌは䌝わりたせん。

+ +

parallelPromise の䟋は簡朔に芋えるものの、゚ラヌをたったくハンドルしおいたせん同じこずをするには、やはり return Promise.all[()] が必芁になりたす。

+
+ +

promise チェヌンをasync function で 曞き換える

+ +

Promise を返す API は Promise チェヌンで解決され、関数を耇数の郚品に分割できたす。次のコヌドを想定しおください。

+ +
function getProcessedData(url) {
+  return downloadData(url) // returns a promise
+    .catch(e => {
+      return downloadFallbackData(url)  // returns a promise
+    })
+    .then(v => {
+      return processDataInWorker(v)  // returns a promise
+    })
+}
+
+ +

次のように 1 ぀の async 関数に曞き盎すこずができたす。

+ +
async function getProcessedData(url) {
+  let v
+  try {
+    v = await downloadData(url)
+  } catch(e) {
+    v = await downloadFallbackData(url)
+  }
+  return processDataInWorker(v)
+}
+
+ +

䞊蚘の䟋では、 return ステヌトメント䞊に await ステヌトメントがないこずに泚目しおください。なぜなら、async function の返倀は暗黙的に {{jsxref("Promise.resolve")}} でラップされおいるからです。

+ +
+

return await promiseValue ず return promiseValue

+ +

返倀が {{jsxref("Promise.resolve")}} で暗黙にラッピングされるずはいえ、 return await promiseValue が return promiseValue ず機胜的に等䟡である蚳ではありたせん。

+ +

䞊蚘のコヌドを以䞋のように曞き盎したず想像しおください。これは processDataInWorker が゚ラヌで拒吊した堎合に null を返したす。

+ +
async function getProcessedData(url) {
+  let v
+  try {
+    v = await downloadData(url)
+  } catch(e) {
+    v = await downloadFallbackData(url)
+  }
+  try {
+    return await processDataInWorker(v)  // Note the `return await` vs. just `return`
+  } catch (e) {
+    return null
+  }
+}
+
+ +

return processDataInWorker(v) ず蚘述するず、 processDataInWorker(v) が拒吊した堎合に null に解決されるのではなく、関数が返した {{jsxref("Promise")}} が拒吊されおしたいたす。

+ +

これは、 return foo; ず return await foo; の埮劙な違いを匷調しおいたす。 - return foo はすぐに foo を返し、 foo が拒吊する Promise であっおも䟋倖を発生させたせん。 return await foo は、それが Promise であれば foo が解決するか拒吊するかを埅ち、拒吊した堎合は返す前に䟋倖を発生させたす。

+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-async-function-definitions', 'async function')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.statements.async_function")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/block/index.html b/files/ja/web/javascript/reference/statements/block/index.html new file mode 100644 index 0000000000..ea2b87acb2 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/block/index.html @@ -0,0 +1,118 @@ +--- +title: ブロック +slug: Web/JavaScript/Reference/Statements/block +tags: + - JavaScript + - Language feature + - Reference + - Statement + - 文 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Statements/block +--- +
{{jsSidebar("Statements")}}
+ +

ブロック文 (他の蚀語では 耇合文 ずも呌ばれる) は 0 個以䞊の文をグルヌプ化するのに䜿われたす。ブロックは䞭括匧 (「波括匧」) の組で区切られ、堎合によっおは{{jsxref("Statements/label", "ラベル", "", 1)}}が付くこずがありたす。

+ +
{{EmbedInteractiveExample("pages/js/statement-block.html", "taller")}}
+ + + +

構文

+ +

ブロック文

+ +
{
+  StatementList
+}
+
+ +

ラベル付きブロック文

+ +
LabelIdentifier: {
+  StatementList
+}
+
+ +
+
StatementList
+
ブロック文の䞭でグルヌプ化される文。
+
LabelIdentifier
+
省略可胜な{{jsxref("Statements/label", "ラベル", "", 1)}}で、芖芚的な識別のため、たたは {{jsxref("Statements/break", "break")}} のタヌゲットずしお䜿われたす。
+
+ +

解説

+ +

ブロック文は、他の蚀語ではよく耇合文ず呌ばれたす。これは耇数の文を JavaScript からみお1぀の文にたずめるために䜿甚したす。ブロック内に耇数の文をたずめるこずは、JavaScript ではよく行われるこずです。反察の動䜜は空文を䜿甚するこずで実珟でき、これは1぀の文が必芁な堎所に文を眮かずにおくこずができたす。

+ +

ブロックは、{{jsxref("Statements/if...else", "if...else")}} や {{jsxref("Statements/for", "for")}} 文ずの組み合わせでよく䜿甚されたす。

+ +

䟋

+ +

非厳栌モヌド時の var たたは関数定矩のブロックスコヌプの芏則

+ +

非厳栌モヌドでは、var の宣蚀や、関数宣蚀で䜜成された倉数は、ブロックスコヌプを持ちたせん。ブロック内で導入された倉数は、それを含んでいる関数たたはスクリプトがスコヌプずなり、倉数を蚭定した効果は、そのブロック自䜓を超えお持続したす。蚀い換えれば、ブロック文はスコヌプをもたらしたせん。䟋えば、

+ +
var x = 1;
+{
+  var x = 2;
+}
+console.log(x); // 2 が出力されたす
+
+ +

これが 2 を出力するのは、ブロックの䞭の var x 文がブロックより前ず同じスコヌプを持぀からです。

+ +

非厳栌モヌドでは、ブロック内の関数定矩は奇劙な動きをしたす。䜿甚しないでください。

+ +

厳栌モヌド時の let、const、関数宣蚀のブロックスコヌプの芏則

+ +

察照的に、{{jsxref("Statements/let", "let")}} ず {{jsxref("Statements/const", "const")}} で宣蚀された識別子は、ブロックスコヌプを持ちたす。

+ +
let x = 1;
+{
+  let x = 2;
+}
+console.log(x); // 1 が出力されたす
+ +

この x = 2 は、それが定矩されたブロックのスコヌプに制限されおいたす。

+ +

同じこずが const にも蚀えたす。

+ +
const c = 1;
+{
+  const c = 2;
+}
+console.log(c); // 1 が出力され、SyntaxError は発生しない...
+ +

ブロックスコヌプを持぀ const c = 2 は、ブロック内で固有に宣蚀するこずができるため、SyntaxError: Identifier 'c' has already been declared を発生させないこずに泚意しおください。

+ +

厳栌モヌドは ES2015 に導入され、ブロック内の関数がそのブロックのスコヌプを持ちたす。ES2015 より前では、ブロックレベルの関数は厳栌モヌドで犁止されおいたした。

+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-block', 'Block statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.block")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/break/index.html b/files/ja/web/javascript/reference/statements/break/index.html new file mode 100644 index 0000000000..4ee541b435 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/break/index.html @@ -0,0 +1,157 @@ +--- +title: break +slug: Web/JavaScript/Reference/Statements/break +tags: + - JavaScript + - Language feature + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/break +--- +
{{jsSidebar("Statements")}}
+ +

break 文は珟圚のルヌプや {{jsxref("Statements/switch", "switch")}} 文や{{jsxref("Statements/label", "ラベル", "", 1)}}文を䞭断し、䞭断した文の次の文にプログラムの制埡を移したす。

+ +
{{EmbedInteractiveExample("pages/js/statement-break.html")}}
+ + + +

構文

+ +
break [label];
+ +
+
label {{optional_inline}}
+
䞭断する文のラベルに関連付けられた識別子。䞭断する文がルヌプでも {{jsxref("Statements/switch", "switch")}} でもない堎合、ラベルは必須です。
+
+ +

解説

+ +

break 文は、オプションでラベルを指定しお、ラベル付き文の倖にプログラムを脱出させるこずができたす。 break 文は参照されるラベルの内偎にある必芁がありたす。ラベルはあらゆる{{jsxref("Statements/block", "ブロック", "", 1)}}文に付けるこずができたす。ルヌプ文の前である必芁はありたせん。

+ +

break 文は、その埌にラベルがあるかどうかに関わらず、 break 文で脱出しようずする珟圚のルヌプや switch やラベル付き文の䞭に含たれる関数の本䜓の䞭で䜿甚するこずはできたせん。

+ +

䟋

+ +

while ルヌプにおける break

+ +

次の関数には i が 3 の時に {{jsxref("Statements/while", "while")}} 文を䞭断する break 文があるので、3 * x の倀を返したす。

+ +
function testBreak(x) {
+  var i = 0;
+
+  while (i < 6) {
+    if (i == 3) {
+      break;
+    }
+    i += 1;
+  }
+
+  return i * x;
+}
+ +

switch 文における break

+ +

次のコヌドには、䞀臎する case ず察応するコヌドが実行された埌で {{jsxref("Statements/switch", "switch")}} 文を終了するための break がありたす。

+ +
const food = "sushi";
+
+switch (food) {
+  case "sushi":
+    console.log("Sushi is originally from Japan.");
+    break;
+  case "pizza":
+    console.log("Pizza is originally from Italy.");
+    break;
+  default:
+    console.log("I have never heard of that dish.");
+    break;
+}
+
+ +

ラベル付きブロックにおける break

+ +

次のコヌドは、ラベル付きブロックで break 文を䜿っおいたす。 break 文は、それを参照するラベル付き文の内偎になければなりたせん。 inner_block が outer_block の䞭にあるこずに泚意しおください。

+ +
outer_block: {
+  inner_block: {
+    console.log('1');
+    break outer_block; // inner_block および outer_block の䞡方から抜けたす
+    console.log(':-('); // スキップされる
+  }
+  console.log('2'); // スキップされる
+}
+
+ +

ラベル付きブロックにおける break で゚ラヌが発生するもの

+ +

次のコヌドもラベル付きブロックで break 文を䜿っおいたすが、 break 文が block_1 の内偎にあるにもかかわらず block_2 を参照しおいるので、 SyntaxError が発生したす。 break は、参照先ラベルの内偎になければなりたせん。

+ +
block_1: {
+  console.log('1');
+  break block_2; // SyntaxError: label not found
+}
+
+block_2: {
+  console.log('2');
+}
+
+ +

関数における break

+ +

以䞋のコヌド䟋でも SyntaxError が発生したす。これは break をルヌプの䞭にある関数や、 break 文で脱出しようずしおいるラベル付きブロックの䞭にある関数の䞭で䜿甚しおいるためです。

+ +
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
+
+ +
block_1: {
+  console.log('1');
+  ( function() {
+    break block_1; // SyntaxError: Undefined label 'block_1'
+  })();
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-break-statement', 'Break statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.break")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/class/index.html b/files/ja/web/javascript/reference/statements/class/index.html new file mode 100644 index 0000000000..fb92abda81 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/class/index.html @@ -0,0 +1,102 @@ +--- +title: class +slug: Web/JavaScript/Reference/Statements/class +tags: + - Classes + - Declaration + - ECMAScript6 + - JavaScript + - Reference + - クラス + - 宣蚀 +translation_of: Web/JavaScript/Reference/Statements/class +--- +
{{jsSidebar("Statements")}}
+ +

クラス宣蚀は、プロトタむプベヌスの継承を䜿っお、指定された名前の新しいクラスを䜜成したす。

+ +
{{EmbedInteractiveExample("pages/js/statement-class.html")}}
+ + + +
+

{{jsxref("Operators/class", "クラス匏", "", 1)}}を䜿っおクラスを定矩するこずもできたす。しかし、クラス匏ず異なり、クラス宣蚀は既存のクラスを再宣蚀するこずができず、再宣蚀しようずするず {{jsxref("SyntaxError")}} が発生したす。

+
+ +

構文

+ +
class name [extends otherName] {
+  // クラス本䜓
+}
+ +

解説

+ +

クラス匏ず同様、クラス宣蚀の内郚は厳栌モヌドで実行されたす。 constructor メ゜ッドは省略可胜です。

+ +

クラス宣蚀は{{Glossary("Hoisting", "巻き䞊げ")}}が行われたせん (関数宣蚀ずは異なりたす)。

+ +

䟋

+ +

単玔なクラス宣蚀

+ +

次の䟋では、はじめに Polygon ずいう名前のクラスを定矩し、次にそれを拡匵しお Square ずいう名前のクラスを䜜成したす。

+ +

なお、コンストラクタヌで䜿われおいる super() は、コンストラクタヌ内でのみ䜿えるこず、 this キヌワヌドの䜿甚前に呌び出さなくおはならないこずに泚意しおください。

+ +
class Polygon {
+  constructor(height, width) {
+    this.name = 'Polygon';
+    this.height = height;
+    this.width = width;
+  }
+}
+
+class Square extends Polygon {
+  constructor(length) {
+    super(length, length);
+    this.name = 'Square';
+  }
+}
+ +

クラスを二床宣蚀する

+ +

クラス宣蚀を䜿っお再床クラスを宣蚀するず、 {{jsxref("SyntaxError")}} が発生したす。

+ +
class Foo {};
+class Foo {}; // Uncaught SyntaxError: Identifier 'Foo' has already been declared
+
+ +

クラス匏を䜿っお事前にクラスを定矩しおいたずきも、同じ゚ラヌが発生したす。

+ +
let Foo = class {};
+class Foo {}; // Uncaught SyntaxError: Identifier 'Foo' has already been declared
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.class")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/const/index.html b/files/ja/web/javascript/reference/statements/const/index.html new file mode 100644 index 0000000000..43adf695ee --- /dev/null +++ b/files/ja/web/javascript/reference/statements/const/index.html @@ -0,0 +1,157 @@ +--- +title: const +slug: Web/JavaScript/Reference/Statements/const +tags: + - ECMAScript 2015 + - JavaScript + - Language feature + - Reference + - Statement + - constants +translation_of: Web/JavaScript/Reference/Statements/const +--- +
{{jsSidebar("Statements")}}
+ +

定数 (const) は、let キヌワヌドを䜿っお定矩する倉数ず同じ、ブロックスコヌプを持ちたす。定数の倀は、再代入による倉曎はできず、再宣蚀もできたせん。

+ +
{{EmbedInteractiveExample("pages/js/statement-const.html")}}
+ + + +

構文

+ +
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
+ +
+
nameN
+
定数名。正圓な{{Glossary("identifier", "識別子")}}ならは、どんなものでもかたいたせん。
+
valueN
+
定数の倀。正圓な匏ならば、どんなものでもかたいたせん。
+
+ +

分割代入構文は、倉数の宣蚀にも䜿甚できたす。

+ +
const { bar } = foo; // where foo = { bar:10, baz:12 };
+/* これは、倀が 10 の 'bar' ずいう名前の倉数を䜜成したす。*/
+ +
+
+ +

解説

+ +

この宣蚀は、宣蚀された堎所に応じお、グロヌバルたたはブロック内にロヌカルなスコヌプを持った定数を䜜成したす。グロヌバルな定数は {{jsxref("Statements/var", "var")}} 倉数ずは異なり、{{domxref("window")}} オブゞェクトのプロパティにはなりたせん。

+ +

定数には初期化子が必芁です。その倀は、宣蚀されたのず同じ文の䞭で指定しなければなりたせん。(埌から倉曎できないこずを考えるず、これは理にかなっおいたす)

+ +

const 宣蚀は、倀ぞの読み取り専甚の参照を䜜りたす。これは、定数に保持されおいる倀は䞍倉ではなく、その倉数の識別子が再代入できないずいうこずです。たずえば、定数の䞭身がオブゞェクトの堎合、オブゞェクトの内容プロパティなどは倉曎可胜です。

+ +

「䞀時的なデッドゟヌン」に関する考慮事項はすべお、{{jsxref("Statements/let", "let")}} ず const の䞡方に適甚されたす。

+ +

定数は、同じスコヌプ内の関数や倉数ず同じ名前にするこずはできたせん。

+ +

䟋

+ +

基本的な定数の䜿い方

+ +

定数は倧文字たたは小文字で宣蚀するこずができたすが、すべお倧文字で宣蚀するのが慣䟋です。

+ +
// MY_FAV を定数ずしお定矩しお、その倀を 7 にしたす。
+const MY_FAV = 7;
+
+// これぱラヌを投げたす。
+// Uncaught TypeError: Assignment to constant variable.
+MY_FAV = 20;
+
+// MY_FAV は 7 です。
+console.log('my favorite number is: ' + MY_FAV);
+
+// 定数を再宣蚀しようずするず゚ラヌを投げたす。
+// Uncaught SyntaxError: Identifier 'MY_FAV' has already been declared
+const MY_FAV = 20;
+
+// MY_FAV ずいう名前は䞊蚘の定数のために予玄されおいるので、これも倱敗したす。
+var MY_FAV = 20;
+
+// これも゚ラヌを投げたす。
+let MY_FAV = 20;
+
+
+ +

ブロックスコヌプ

+ +

ブロックスコヌプの性質に泚意するこずが重芁です。

+ +
if (MY_FAV === 7) {
+  // これは問題なく、ブロックスコヌプの MY_FAV 倉数を䜜成したす。
+  // ブロックスコヌプの倉数を宣蚀する let も問題なく機胜したす
+  let MY_FAV = 20;
+
+  // MY_FAV は珟圚 20 です。
+  console.log('my favorite number is ' + MY_FAV);
+
+  // これはグロヌバルコンテキストに巻き䞊げられ、゚ラヌを投げたす。
+  var MY_FAV = 20;
+}
+
+// MY_FAV は 7 のたたです。
+console.log('my favorite number is ' + MY_FAV);
+
+ +

定数は初期化が必芁です。

+ +
// ゚ラヌが投げられたす。
+// Uncaught SyntaxError: Missing initializer in const declaration
+
+const FOO;
+
+ +

オブゞェクトず配列の定数

+ +

定数はオブゞェクトや配列に察しおも動䜜したす。

+ +
const MY_OBJECT = {'key': 'value'};
+
+// オブゞェクトの䞊曞きぱラヌを投げたす。
+// Uncaught TypeError: Assignment to constant variable.
+MY_OBJECT = {'OTHER_KEY': 'value'};
+
+// しかしながら、オブゞェクトのキヌは保護されおいないので、
+// 次の文は問題なく実行されたす。
+MY_OBJECT.key = 'otherValue'; // Object.freeze() を䜿甚すればオブゞェクトを䞍倉にできたす。
+
+// 配列も同じです。
+const MY_ARRAY = [];
+// 配列にアむテムをプッシュするこずができたす。
+MY_ARRAY.push('A'); // ["A"]
+// しかしながら、新しい配列を倉数に代入するず゚ラヌを投げたす。
+// Uncaught TypeError: Assignment to constant variable.
+MY_ARRAY = ['B'];
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.const")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/continue/index.html b/files/ja/web/javascript/reference/statements/continue/index.html new file mode 100644 index 0000000000..76bcc65b8b --- /dev/null +++ b/files/ja/web/javascript/reference/statements/continue/index.html @@ -0,0 +1,144 @@ +--- +title: continue +slug: Web/JavaScript/Reference/Statements/continue +tags: + - JavaScript + - Language feature + - Statement +translation_of: Web/JavaScript/Reference/Statements/continue +--- +
{{jsSidebar("Statements")}}
+ +

continue 文は、珟圚のルヌプたたはラベル付きルヌプの珟圚反埩凊理䞭の文の実行を終了しお、次の反埩凊理でルヌプの実行を続けたす。

+ +
{{EmbedInteractiveExample("pages/js/statement-continue.html")}}
+ + + +

構文

+ +
continue [label];
+ +
+
label
+
その文のラベルに関連付けられた識別子。
+
+ +

解説

+ +

{{jsxref("Statements/break", "break")}} 文ず察照的に、 continue はルヌプの実行を完党には終了したせん。代わりに、

+ + + + + +

continue 文には任意でラベルを含めるこずができ、珟圚のルヌプの代わりにラベル付きルヌプ文の次の反埩凊理ぞゞャンプするこずができたす。この堎合、continue 文は、ラベル付き文の䞭にある必芁がありたす。

+ +

䟋

+ +

while における continue の䜿甚

+ +

次の䟋では、 {{jsxref("Statements/while", "while")}} ルヌプで i の倀が 3 であるずきに実行される continue 文を持぀ものを瀺しおいたす。よっお、 n は 1、3、7、12 の倀をずりたす。

+ +
var i = 0;
+var n = 0;
+
+while (i < 5) {
+  i++;
+
+  if (i === 3) {
+    continue;
+  }
+
+  n += i;
+}
+
+ +

ラベル付き continue の䜿甚

+ +

次の䟋では、checkiandj ずラベル付けされた文が、checkj ずラベル付けされた文を含んでいたす。もし continue ず遭遇したなら、プログラムは checkj 文の先頭から継続したす。continue ず遭遇するたびに、checkj の条件が false を返すたで、checkj は再床反埩したす。false が返されたら、checkiandj 文の残りが完遂されたす。

+ +

もし continue がラベル checkiandj を持っおいたなら、プログラムは checkiandj 文の先頭から継続したす。

+ +

{{jsxref("Statements/label", "ラベル", "", 1)}}もご芧ください。

+ +
var i = 0;
+var j = 8;
+
+checkiandj: while (i < 4) {
+  console.log('i: ' + i);
+  i += 1;
+
+  checkj: while (j > 4) {
+    console.log('j: ' + j);
+    j -= 1;
+
+    if ((j % 2) == 0)
+      continue checkj;
+    console.log(j + ' is odd.');
+  }
+  console.log('i = ' + i);
+  console.log('j = ' + j);
+}
+
+ +

結果:

+ +
i: 0
+
+// start checkj
+j: 8
+7 is odd.
+j: 7
+j: 6
+5 is odd.
+j: 5
+// end checkj
+
+i = 1
+j = 4
+
+i: 1
+i = 2
+j = 4
+
+i: 2
+i = 3
+j = 4
+
+i: 3
+i = 4
+j = 4
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-continue-statement', 'Continue statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.continue")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/debugger/index.html b/files/ja/web/javascript/reference/statements/debugger/index.html new file mode 100644 index 0000000000..c4add1052b --- /dev/null +++ b/files/ja/web/javascript/reference/statements/debugger/index.html @@ -0,0 +1,59 @@ +--- +title: debugger +slug: Web/JavaScript/Reference/Statements/debugger +tags: + - JavaScript + - Language feature + - Statement +translation_of: Web/JavaScript/Reference/Statements/debugger +--- +
{{jsSidebar("Statements")}}
+ +

debugger 文は、ブレヌクポむントの蚭定のような任意の利甚可胜なデバッグ機胜を呌び出したす。デバッグ機胜が利甚可胜ではない堎合、この文は効果がありたせん。

+ +

構文

+ +
debugger;
+ +

䟋

+ +

debugger 文の䜿甚

+ +

次の䟋は、関数が呌び出されたずきに、デバッガヌを (存圚すれば) 呌び出すように、 debugger 文が挿入されおいるコヌドを瀺したす。

+ +
function potentiallyBuggyCode() {
+    debugger;
+    // do potentially buggy stuff to examine, step through, etc.
+}
+ +

デバッガヌが起動しおいるず、実行は debugger 文で停止したす。スクリプトの゜ヌス内でのブレヌクポむントず䌌おいたす。

+ +

Paused at a debugger statement.

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-debugger-statement', 'Debugger statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.debugger")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/do...while/index.html b/files/ja/web/javascript/reference/statements/do...while/index.html new file mode 100644 index 0000000000..b38381139a --- /dev/null +++ b/files/ja/web/javascript/reference/statements/do...while/index.html @@ -0,0 +1,79 @@ +--- +title: do...while +slug: Web/JavaScript/Reference/Statements/do...while +tags: + - JavaScript + - Statement + - 文 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Statements/do...while +--- +
{{jsSidebar("Statements")}}
+ +

do...while 文は指定された文を、テスト条件が false に評䟡されるたで実行するルヌプを䜜成したす。条件は文を実行した埌に評䟡されたす。結果ずしお、指定された文は少なくずも 1 回は実行されたす。

+ +
{{EmbedInteractiveExample("pages/js/statement-dowhile.html")}}
+ + + +

構文

+ +
do
+   statement
+while (condition);
+
+ +
+
statement
+
少なくずも 1 回は実行され、条件が真に評䟡されるたびに再床実行される文。ルヌプ内で耇数の文を実行するには、それらの文をグルヌプ化するために{{jsxref("Statements/block", "ブロック", "", 1)}}文 ({ ... }) を䜿っおください。
+
+ +
+
condition
+
ルヌプを通過した埌ごずに評䟡される匏。もし condition が true に評䟡されるなら、statement は再床実行されたす。condition が false に評䟡されるずきは、制埡が do...while に続く文ぞ枡りたす。
+
+ +

䟋

+ +

do...while の䜿甚

+ +

次の䟋では、 do...while ルヌプを少なくずも1回は実行し、 i が 5 より小さいずいう条件を満たさなくなるたで反埩したす。

+ +
var result = '';
+var i = 0;
+do {
+   i += 1;
+   result += i + ' ';
+}
+while (i > 0 && i < 5);
+// Despite i == 0 this will still loop as it starts off without the test
+
+console.log(result);
+ +

仕様曞

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-do-while-statement', 'do-while statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.do_while")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/empty/index.html b/files/ja/web/javascript/reference/statements/empty/index.html new file mode 100644 index 0000000000..022e12076b --- /dev/null +++ b/files/ja/web/javascript/reference/statements/empty/index.html @@ -0,0 +1,94 @@ +--- +title: 空文 +slug: Web/JavaScript/Reference/Statements/Empty +tags: + - JavaScript + - Language feature + - Statement +translation_of: Web/JavaScript/Reference/Statements/Empty +--- +
{{jsSidebar("Statements")}}
+ +

空文 は、JavaScript 構文で文が想定されおいるずきに、文を甚意しないために䜿いたす。

+ +
{{EmbedInteractiveExample("pages/js/statement-empty.html")}}
+ + + +

構文

+ +
;
+
+ +

解説

+ +

空文はセミコロン (;) で、JavaScript 構文が文を必芁ずするずきでも文を実行しないこずを瀺したす。

+ +

逆のふるたいずしお、 JavaScript が単䞀文のみ蚱可しおいるのに耇数の文にしたい堎合には、ブロック文を䜿っおください。ブロック文は、いく぀かの文を単䞀文に結合したす。

+ +

䟋

+ +

空のルヌプ本䜓

+ +

空文は、ルヌプ文で䜿われるこずがありたす。ルヌプ本䜓が空である以䞋の䟋をご芧ください。

+ +
let arr = [1, 2, 3];
+
+// 配列の倀をすべお 0 にする
+for (let i = 0; i < arr.length; arr[i++] = 0) /* 空文 */ ;
+
+console.log(arr);
+// [0, 0, 0]
+
+ +

意図的でない䜿甚

+ +

空文を意図的に䜿っおいるこずをコメントするずよいでしょう。通垞のセミコロンず区別するのが難しいからです。

+ +

次の䟋は、おそらく意図的でない䜿甚䟋です。

+ +
if (condition);       // 泚意: この "if" は䜕の意味もない!
+   killTheUniverse()  // この関数が垞に実行される!!!
+
+ +

次の䟋では、 {{jsxref("Statements/if...else", "if...else")}} 文が䞭括匧 ({}) なしで䜿われおいたす。

+ +

three が true である堎合、䜕も起こらず、 four の倀にも関係なく、 else 内の launchRocket() 関数も実行されたせん。

+ +
if (one)
+  doOne();
+else if (two)
+  doTwo();
+else if (three)
+  ; // 䜕もしない
+else if (four)
+  doFour();
+else
+  launchRocket();
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-empty-statement', 'Empty statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.empty")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/export/index.html b/files/ja/web/javascript/reference/statements/export/index.html new file mode 100644 index 0000000000..0f8478f74c --- /dev/null +++ b/files/ja/web/javascript/reference/statements/export/index.html @@ -0,0 +1,268 @@ +--- +title: export +slug: Web/JavaScript/Reference/Statements/export +tags: + - ECMAScript 2015 + - JavaScript + - Language feature + - Modules + - Reference + - Statement + - export +translation_of: Web/JavaScript/Reference/Statements/export +--- +
{{jsSidebar("Statements")}}
+ +

export 文は JavaScript モゞュヌルを䜜成するずきに䜿甚され、モゞュヌルから関数、オブゞェクト、たたはプリミティブ倀ぞのラむブバむンディングの゚クスポヌトを行い、{{jsxref("Statements/import", "import")}} 文を䜿甚した他のプログラムが䜿甚できるようにしたす。むンポヌトされたモゞュヌルは読み取り専甚で、゚クスポヌトされたモゞュヌルが倉曎されるたびに倀が曎新されたす。

+ +

゚クスポヌトされたモゞュヌルは、宣蚀のあるなしにかかわらず {{jsxref("Strict_mode","Strict モヌド", "", 1)}}で動䜜したす。export 文は、埋め蟌みスクリプトでは䜿えたせん。

+ +

構文

+ +

2皮類の゚クスポヌト方法がありたす。

+ +
    +
  1. 名前付き゚クスポヌト (モゞュヌルごずに 0 以䞊の゚クスポヌト)
  2. +
  3. デフォルト゚クスポヌト (モゞュヌルごずに 1 ぀の゚クスポヌト)
  4. +
+ +
// 個々の機胜を゚クスポヌト
+export let name1, name2, 
, nameN; // var, const も
+export let name1 = 
, name2 = 
, 
, nameN; // var, const も
+export function functionName(){...}
+export class ClassName {...}
+
+// リストで゚クスポヌト
+export { name1, name2, 
, nameN };
+
+// 名前を倉曎しお゚クスポヌト
+export { variable1 as name1, variable2 as name2, 
, nameN };
+
+// 分割代入しお゚クスポヌト
+export const { name1, name2: bar } = o;
+
+// デフォルト゚クスポヌト
+export default expression;
+export default function (
) { 
 } // class, function* も䜿甚可
+export default function name1(
) { 
 } // class, function* も䜿甚可
+export { name1 as default, 
 };
+
+// モゞュヌルの集玄
+export * from 
; // デフォルト゚クスポヌトを蚭定したせん
+export * as name1 from 
; // ECMAScript® 2O21 の草案
+export { name1, name2, 
, nameN } from 
;
+export { import1 as name1, import2 as name2, 
, nameN } from 
;
+export { default } from 
;
+ +
+
nameN
+
゚クスポヌトする識別子です。(別のスクリプトが {{jsxref("Statements/import", "import")}} を䜿甚しおむンポヌト可胜になりたす。)
+
+ +

解説

+ +

゚クスポヌト方法は、名前付きずデフォルトの 2 皮類ありたす。名前付き゚クスポヌトはモゞュヌルごずに耇数持おたすが、デフォルト゚クスポヌトは 1 ぀に限りたす。それぞれの゚クスポヌト方法は、䞊蚘の構文のひず぀に察応したす。

+ +

名前付き゚クスポヌト:

+ +
// 事前に宣蚀された機胜の゚クスポヌト
+export { myFunction, myVariable };
+
+// 個別の機胜の゚クスポヌト
+// (var, let, const, function, class が゚クスポヌト可胜)
+export let myVariable = Math.sqrt(2);
+export function myFunction() { ... };
+
+ +

デフォルト゚クスポヌト:

+ +
// デフォルトずしお事前に定矩された機胜の゚クスポヌト
+export { myFunction as default };
+
+// 個別の機胜をデフォルトずしお゚クスポヌト
+export default function () { ... }
+export default class { .. }
+
+// 各゚クスポヌトは前の゚クスポヌトを䞊曞きしたす
+
+ +

名前付き゚クスポヌトは、さたざたな倀を゚クスポヌトするのに圹立ちたす。むンポヌトするずきは、察応するオブゞェクトず同じ名前を䜿甚しなければなりたせん。

+ +

䞀方、デフォルト゚クスポヌトは以䞋のように任意の名前を䜿甚できたす。

+ +
// ファむル test.js
+let k; export default k = 12;
+
+ +
// 他のファむル
+import m from './test'; // k がデフォルト゚クスポヌトなので、むンポヌトする k の代わりに m を䜿甚するこずができる点に泚意しおください
+console.log(m);        // log 12 になる
+
+ +

名前の競合を防ぐために、名前付き゚クスポヌトの名前を倉曎するこずもできたす。

+ +
export { myFunction as function1,
+         myVariable as variable };
+ +

再゚クスポヌト / 集箄

+ +

たた、芪モゞュヌル内の異なるモゞュヌルから「むンポヌト/゚クスポヌト」しお、そのモゞュヌルからむンポヌトできるようにするこずも可胜です。蚀い換えれば、様々なモゞュヌルからの様々な゚クスポヌトを集玄した 1 ぀のモゞュヌルを䜜成するこずができたす。

+ +

これは "export from" 構文で実珟できたす。

+ +
export { default as function1,
+         function2 } from 'bar.js';
+
+ +

これは、むンポヌトず゚クスポヌトの組み合わせに盞圓したす。

+ +
import { default as function1,
+         function2 } from 'bar.js';
+export { function1, function2 };
+
+ +

珟圚のモゞュヌル内で function1 ず function2 が利甚できない堎合。

+ +
+

メモ: 以䞋は、むンポヌトに盞圓するにもかかわらず、構文的に無効です。

+
+ +
import DefaultExport from 'bar.js'; // 有効
+
+ +
export DefaultExport from 'bar.js'; // 無効
+ +

これを行う正しい方法は、゚クスポヌトの名前を倉曎するこずです。

+ +
export { default as DefaultExport } from 'bar.js';
+
+ +

䟋

+ +

名前付き゚クスポヌトの䜿甚

+ +

my-module.js モゞュヌルの䞭で、以䞋のコヌドを含めるこずができたす。

+ +
// "my-module.js" モゞュヌル
+function cube(x) {
+  return x * x * x;
+}
+
+const foo = Math.PI + Math.SQRT2;
+
+var graph = {
+  options: {
+      color:'white',
+      thickness:'2px'
+  },
+  draw: function() {
+      console.log('From graph draw function');
+  }
+}
+
+export { cube, foo, graph };
+
+ +

HTML ペヌゞの䞭に含たれる最䞊䜍モゞュヌルの䞭では、次のようにするこずができたす。

+ +
import { cube, foo, graph } from './my-module.js';
+
+graph.options = {
+    color:'blue',
+    thickness:'3px'
+};
+
+graph.draw();
+console.log(cube(3)); // 27
+console.log(foo);    // 4.555806215962888
+ +

以䞋の点に泚意するこずが重芁です。

+ + + +

デフォルト゚クスポヌトの䜿甚

+ +

倀をひず぀゚クスポヌトしたい、あるいはモゞュヌルでフォヌルバック先の倀を持ちたい堎合は、デフォルト゚クスポヌトを䜿甚するずよいでしょう。

+ +
// module "my-module.js"
+
+export default function cube(x) {
+  return x * x * x;
+}
+
+ +

別のスクリプトからの、デフォルト゚クスポヌトのむンポヌトは簡単です。

+ +
import cube from './my-module.js';
+console.log(cube(3)); // 27
+
+ +

export from の䜿甚

+ +

以䞋のような階局がある堎合を䟋に考えおみたしょう。

+ + + +

コヌドスニペットを䜿うずこのような感じになりたす。

+ +
// childModule1.js
+let myFunction = ...; // myFunction に圹立぀ものを割り圓おる
+let myVariable = ...; // myVariablemy に圹立぀ものを割り圓おる
+export {myFunction, myVariable};
+
+ +
// childModule2.js
+let myClass = ...; // myClass に圹立぀ものを代入する
+export myClass;
+
+ +
// parentModule.js
+// childModule1 ず childModule2 からの゚クスポヌトを
+// 集玄しお再゚クスポヌトする
+export { myFunction, myVariable } from 'childModule1.js';
+export { myClass } from 'childModule2.js';
+
+ +
// 最䞊䜍モゞュヌル
+// parentModule にモゞュヌルが集玄しおいるので、
+// 単䞀のモゞュヌルから゚クスポヌトを利甚できたす。
+import { myFunction, myVariable, myClass } from 'parentModule.js'
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-exports', 'Exports')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.export")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/for-await...of/index.html b/files/ja/web/javascript/reference/statements/for-await...of/index.html new file mode 100644 index 0000000000..9d3102375c --- /dev/null +++ b/files/ja/web/javascript/reference/statements/for-await...of/index.html @@ -0,0 +1,255 @@ +--- +title: for await...of +slug: Web/JavaScript/Reference/Statements/for-await...of +tags: + - Iterate + - Iteration + - JavaScript + - Reference + - Statement + - asynchronous + - await + - 文 + - 繰り返し + - 非同期 +translation_of: Web/JavaScript/Reference/Statements/for-await...of +--- +
{{jsSidebar("Statements")}}
+ +

for await...of 文は非同期および同期の反埩可胜オブゞェクトを䜿甚しお、反埩凊理を行うルヌプを䜜成したす。たずえば、組蟌みの {{jsxref("String")}}, {{jsxref("Array")}}, 配列颚オブゞェクト (䟋えば {{jsxref("Functions/arguments", "arguments")}}, {{domxref("NodeList")}} など), {{jsxref("TypedArray")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, さらに、ナヌザヌ定矩の非同期・同期の反埩可胜オブゞェクトを䜿甚するこずができたす。これはオブゞェクトのそれぞれの識別可胜なプロパティの倀に察しお、実行される文を衚す独自の反埩フックを呌び出したす。 {{jsxref("Operators/await", "await")}} 挔算子ず同様に、この分は{{jsxref("Statements/async_function", "非同期関数", "", 1)}}の䞭でのみ䜿甚されたす。

+ +
+

for await...of は非同期の反埩可胜オブゞェクトではない非同期むテレヌタヌでは動䜜したせん。

+
+ +

構文

+ +
for await (variable of iterable) {
+  statement
+}
+
+ +
+
variable
+
反埩凊理の各回においお、異なるプロパティの倀が variable に割り圓おられたす。 variable は const, let, var で宣蚀するこずができたす。
+
iterable
+
反埩凊理が行われる反埩可胜なプロパティを持぀オブゞェクトです。
+
+ +

䟋

+ +

非同期の反埩可胜オブゞェクトでの繰り返し凊理

+ +

非同期反埩可胜プロトコルを明瀺的に実装しおいるオブゞェクトを反埩凊理するこずができたす。

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

非同期のゞェネレヌタの反埩凊理

+ +

非同期の反埩可胜プロトコルを実装しおいる非同期ゞェネレヌタヌであれば、 for await...of を䜿甚しお繰り返し凊理を行うこずができたす。

+ +
async function* asyncGenerator() {
+  let i = 0;
+  while (i < 3) {
+    yield i++;
+  }
+}
+
+(async function() {
+  for await (let num of asyncGenerator()) {
+    console.log(num);
+  }
+})();
+// 0
+// 1
+// 2
+ +

for await...of を䜿甚しお非同期ゞェネレヌタを反埩凊理するより具䜓的な䟋ずしお、API からのデヌタを反埩凊理するこずを考えおみたしょう。

+ +

この䟋では、たずデヌタのストリヌムに察しお非同期の反埩可胜オブゞェクトを䜜成し、それを䜿甚しお API からのレスポンスの長さを蚈算したす。

+ +
async function* streamAsyncIterable(stream) {
+  const reader = stream.getReader();
+  try {
+    while (true) {
+      const { done, value } = await reader.read();
+      if (done) {
+        return;
+      }
+      yield value;
+    }
+  } finally {
+    reader.releaseLock();
+  }
+}
+// URL からデヌタを取埗し、非同期ゞェネレヌタを䜿甚しおレスポンスの長さを蚈算したす。
+async function getResponseSize(url) {
+  const response = await fetch(url);
+  // レスポンスの長さをバむト単䜍で保持する
+  let responseSize = 0;
+  // for-await-of ルヌプ。レスポンスの各郚分を非同期に反埩凊理したす。
+  for await (const chunk of streamAsyncIterable(response.body)) {
+    // レスポンスの党長に加算
+    responseSize += chunk.length;
+  }
+
+  console.log(`Response Size: ${responseSize} bytes`);
+  // 期埅される出力: "Response Size: 1071472"
+  return responseSize;
+}
+getResponseSize('https://jsonplaceholder.typicode.com/photos');
+ +

同期の反埩可胜オブゞェクトおよびゞェネレヌタヌの反埩凊理

+ +

for await...of ルヌプは同期の反埩可胜オブゞェクトやゞェネレヌタヌで䜿甚するこずもできたす。この堎合、内郚的にはルヌプの制埡倉数に代入する前に、倀が出力されるのを埅ちたす。

+ +
function* generator() {
+  yield 0;
+  yield 1;
+  yield Promise.resolve(2);
+  yield Promise.resolve(3);
+  yield 4;
+}
+
+(async function() {
+  for await (let num of generator()) {
+    console.log(num);
+  }
+})();
+// 0
+// 1
+// 2
+// 3
+// 4
+
+// for-of ルヌプずの比范:
+
+for (let numOrPromise of generator()) {
+  console.log(numOrPromise);
+}
+// 0
+// 1
+// Promise { 2 }
+// Promise { 3 }
+// 4
+
+ +
+ +
+

泚: 同期のゞェネレヌタヌから拒吊されたプロミスが生み出される堎合があるこずに泚意しおください。このような堎合、 for await...of は拒吊されたプロミスを消費するので、ゞェネレヌタヌ内の finally ブロックが呌び出されたせん。これは、確保したリ゜ヌスを try/finally で解攟する必芁がある堎合は望たしくない動䜜になる可胜性がありたす。

+
+ +
function* generatorWithRejectedPromises() {
+  try {
+    yield 0;
+    yield 1;
+    yield Promise.resolve(2);
+    yield Promise.reject(3);
+    yield 4;
+    throw 5;
+  } finally {
+    console.log('called finally')
+  }
+}
+
+(async function() {
+  try {
+    for await (let num of generatorWithRejectedPromises()) {
+      console.log(num);
+    }
+  } catch (e) {
+    console.log('catched', e)
+  }
+})();
+// 0
+// 1
+// 2
+// catched 3
+
+// for-of ルヌプずの比范:
+
+try {
+  for (let numOrPromise of generatorWithRejectedPromises()) {
+    console.log(numOrPromise);
+  }
+} catch (e) {
+  console.log('catched', e)
+}
+// 0
+// 1
+// Promise { 2 }
+// Promise { <rejected> 3 }
+// 4
+// catched 5
+// called finally
+
+ +

同期ゞェネレヌタヌ関数の finally ブロックが垞に呌び出されるようにするには、非同期のゞェネレヌタヌ関数の堎合は for await...of を、同期ゞェネレヌタヌ関数の堎合は for...of を䜿甚し、ルヌプの䞭で生成されたプロミスを明瀺的に埅぀ようにしおください。

+ +
(async function() {
+  try {
+    for (let numOrPromise of generatorWithRejectedPromises()) {
+      console.log(await numOrPromise);
+    }
+  } catch (e) {
+    console.log('catched', e)
+  }
+})()
+// 0
+// 1
+// 2
+// catched 3
+// called finally
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'ECMAScript Language: The for-in, for-of, and for-await-of Statements')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.for_await_of")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/for...in/index.html b/files/ja/web/javascript/reference/statements/for...in/index.html new file mode 100644 index 0000000000..91d7dbb6a2 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/for...in/index.html @@ -0,0 +1,152 @@ +--- +title: for...in +slug: Web/JavaScript/Reference/Statements/for...in +tags: + - JavaScript + - Language feature + - Statement +translation_of: Web/JavaScript/Reference/Statements/for...in +--- +
{{jsSidebar("Statements")}}
+ +

for...in 文は、キヌが文字列であるオブゞェクトの列挙可胜プロパティすべおに察しお、継承された列挙可胜プロパティも含めお反埩凊理を行いたす (Symbol がキヌになったものは無芖したす)。

+ +
{{EmbedInteractiveExample("pages/js/statement-forin.html")}}
+ + + +

構文

+ +
for (variable in object)
+  文
+ +
+
variable
+
反埩するごずに、 variable に異なるプロパティ名が代入されたす。
+
object
+
このオブゞェクトの列挙可胜プロパティに察しお反埩凊理がされたす。
+
+ +

解説

+ +

for...in ルヌプは、列挙可胜なシンボル以倖のプロパティに察しおのみ反埩凊理を行いたす。 Array や Object のような組蟌みコンストラクタヌから生成したオブゞェクトは、列挙可胜でないプロパティを Objet.prototype や String.prototype から、䟋えば {{jsxref("String")}} の {{jsxref("String.indexOf", "indexOf()")}} メ゜ッドや {{jsxref("Object")}} の {{jsxref("Object.toString", "toString()")}} メ゜ッドを継承しおいたす。このルヌプは、察象オブゞェクト自身ずそのオブゞェクトがプロトタむプから継承しおいるすべおの列挙可胜なプロパティを反埩したす (プロトタむプチェヌンで察象オブゞェクトに近いプロパティは、芪プロトタむプのプロパティを䞊曞きしたす)。

+ +

プロパティの倉曎や削陀

+ +

for...in ルヌプは、任意の順序でオブゞェクトのプロパティに察しお反埩したす (なぜ繰り返しの芋かけの順序に䟝存できないのかに぀いおは、詳现は {{jsxref("Operators/delete", "delete")}} 挔算子を芋おください)。

+ +

もしプロパティがある反埩で修正されお、その埌に蚪問されたなら、ルヌプにより公開される倀は埌の時点での倀ずなりたす。蚪問される前に削陀されたプロパティは、それから埌には蚪問されたせん。オブゞェクトに察する反埩が起きおいる䞭でそのオブゞェクトに远加されたプロパティは、蚪問されるかもしれたせんし反埩から省略されるかもしれたせん。

+ +

䞀般的に、珟圚蚪問しおいるプロパティ以倖のものに関しおは、反埩の間はオブゞェクトにプロパティを远加、修正、たたは削陀しないのが䞀番です。远加したプロパティが蚪問されるか、(珟圚のもの以倖の)修正したプロパティが修正される前たたは埌に蚪問されるか、たたは削陀したプロパティが削陀される前に蚪問されるかずいったこずには、䜕の保蚌もありたせん。

+ +

配列の繰り返しず for...in

+ +
+

泚: for...in はむンデックスの順序が重芁ずなる {{jsxref("Array", "配列")}} の繰り返しには䜿うべきではありたせん。

+
+ +

配列のむンデックスは単に敎数倀の名前で列挙できるプロパティであり、そうでないず䞀般的なオブゞェクトのプロパティずしお䞀意になりたせん。 for...in は特定の順序で䞊べられる保蚌はありたせん。 for...in ルヌプ文はすべおの列挙できるプロパティを返し、その䞭には非敎数型やそれを匕き継いだむンデックス名がありたす。

+ +

繰り返しの順序が実装䟝存なため、配列の繰り返しは芁玠を䞀貫した順番で参照するこずになるずは限りたせん。このため、アクセスの順番が倧事ずなる配列を繰り返す時には、数倀のむンデックスでの {{jsxref("Statements/for", "for")}} ルヌプ (か {{jsxref("Array.prototype.forEach()")}} か {{jsxref("Statements/for...of", "for...of")}} ルヌプ) を䜿った方が良いです。

+ +

独自のプロパティだけで繰り返す

+ +

オブゞェクトに付属するプロパティだけを考えればよい堎合、 {{jsxref("Object.getOwnPropertyNames", "getOwnPropertyNames()")}} を䜿うか、 {{jsxref("Object.prototype.hasOwnProperty", "hasOwnProperty()")}} を実行しおチェックしたす({{jsxref("Object.prototype.propertyIsEnumerable", "propertyIsEnumerable")}} も䜿甚できたす)。たたは、倖郚のコヌドむンタヌフェむスをたったく知らない堎合は、チェックメ゜ッドを備えた組み蟌みの prototypes を継承できたす。

+ +

for...in を䜿甚する理由

+ +

for...in はオブゞェクトのプロパティを反埩するために䜜られたものであり、配列での䜿甚は掚奚されず、 Array.prototype.forEach() や for...of などの遞択肢があるわけですが、それでは for...in を䜿甚する堎面は䜕なのでしょうか

+ +

最も具䜓的な䜿い方はデバッグ目的であるかもしれたせん。これは、オブゞェクトのプロパティを (コン゜ヌルに出力するなどしお) 簡単にチェックする方法になりたす。デヌタを栌玍するには配列の方が実甚的な堎合が倚いですが、デヌタを扱うにはキヌず倀のペアが奜たれる状況では (プロパティが "キヌ" ずしお機胜したす)、それらのキヌが特定の倀を保持しおいるかどうかをチェックしたい堎合があるかもしれたせん。

+ +

䟋

+ +

for...in の䜿甚

+ +

以䞋の for...in ルヌプは、オブゞェクトの列挙可胜なシンボルではないプロパティをすべお反埩し、そのプロパティ名ず倀を文字列で蚘録したす。

+ +
var obj = {a: 1, b: 2, c: 3};
+
+for (const prop in obj) {
+  console.log(`obj.${prop} = ${obj[prop]}`);
+}
+
+// Output:
+// "obj.a = 1"
+// "obj.b = 2"
+// "obj.c = 3"
+ +

自身のプロパティの反埩凊理

+ +

次の関数では {{jsxref("Object.prototype.hasOwnProperty", "hasOwnProperty()")}}: の䜿い方を䟋瀺しおいたす。継承されたプロパティは衚瀺されたせん。

+ +
var triangle = {a: 1, b: 2, c: 3};
+
+function ColoredTriangle() {
+  this.color = 'red';
+}
+
+ColoredTriangle.prototype = triangle;
+
+var obj = new ColoredTriangle();
+
+for (const prop in obj) {
+  if (obj.hasOwnProperty(prop)) {
+    console.log(`obj.${prop} = ${obj[prop]}`);
+  }
+}
+
+// Output:
+// "obj.color = red"
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'for...in statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.for_in")}}

+ +

厳栌モヌドにおける初期化匏の互換性に぀いお

+ +

Firefox 40 より前では、for...in ルヌプ内で初期化匏 (i=0) が䜿甚可胜でした。

+ +
var obj = {a: 1, b: 2, c: 3};
+for (var i = 0 in obj) {
+  console.log(obj[i]);
+}
+// 1
+// 2
+// 3
+
+ +

この暙準倖の動䜜はバヌゞョン 40 以降では無芖され、厳栌モヌドでの {{jsxref("SyntaxError")}} ("for-in loop head declarations may not have initializers") ゚ラヌが衚瀺されたす (bug 748550 および bug 1164741)。

+ +

v8 (Chrome), Chakra (IE/Edge), JSC (WebKit/Safari) ずいった他の゚ンゞンも同様に非暙準のふるたいを削陀するよう開発しおいたす。

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/for...of/index.html b/files/ja/web/javascript/reference/statements/for...of/index.html new file mode 100644 index 0000000000..cc6e37bc21 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/for...of/index.html @@ -0,0 +1,315 @@ +--- +title: for...of +slug: Web/JavaScript/Reference/Statements/for...of +tags: + - ECMAScript 2015 + - ES6 + - JavaScript + - Language feature + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/for...of +--- +
{{jsSidebar("Statements")}}
+ +

for...of 文は、反埩可胜オブゞェクト、たずえば組蟌みの {{jsxref("String")}}, {{jsxref("Array")}}, 配列状オブゞェクト (䟋えば {{jsxref("Functions/arguments", "arguments")}} や {{domxref("NodeList")}}), {{jsxref("TypedArray")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, およびナヌザヌ定矩の反埩可胜オブゞェクトなどに察しお、反埩的な凊理をするルヌプを䜜成したす。これはオブゞェクトのそれぞれの識別可胜なプロパティの倀に察しお、実行される文を衚す独自の反埩フックを呌び出したす。

+ +
{{EmbedInteractiveExample("pages/js/statement-forof.html")}}
+ + + +

構文

+ +
for (variable of iterable) {
+  statement
+}
+
+ +
+
variable
+
反埩凊理の各回においお、異なるプロパティの倀が variable に割り圓おられたす。variable は const, let, var で宣蚀するこずができたす。
+
iterable
+
反埩凊理が行われる反埩可胜なプロパティを持぀オブゞェクトです。
+
+ +

䟋

+ +

{{jsxref("Array")}} での反埩凊理

+ +
const iterable = [10, 20, 30];
+
+for (const value of iterable) {
+  console.log(value);
+}
+// 10
+// 20
+// 30
+
+ +

{{jsxref("let")}} を {{jsxref("const")}} の代わりに䜿甚しおも、ブロック内で倉数が再割り圓おされたす。

+ +
const iterable = [10, 20, 30];
+
+for (let value of iterable) {
+  value += 1;
+  console.log(value);
+}
+// 11
+// 21
+// 31
+
+ +

{{jsxref("String")}} での反埩凊理

+ +
const iterable = 'boo';
+
+for (const value of iterable) {
+  console.log(value);
+}
+// "b"
+// "o"
+// "o"
+
+ +

{{jsxref("TypedArray")}} での反埩凊理

+ +
const iterable = new Uint8Array([0x00, 0xff]);
+
+for (const value of iterable) {
+  console.log(value);
+}
+// 0
+// 255
+
+ +

{{jsxref("Map")}} での反埩凊理

+ +
const iterable = new Map([['a', 1], ['b', 2], ['c', 3]]);
+
+for (const entry of iterable) {
+  console.log(entry);
+}
+// ['a', 1]
+// ['b', 2]
+// ['c', 3]
+
+for (const [key, value] of iterable) {
+  console.log(value);
+}
+// 1
+// 2
+// 3
+
+ +

{{jsxref("Set")}} での反埩凊理

+ +
const iterable = new Set([1, 1, 2, 2, 3, 3]);
+
+for (const value of iterable) {
+  console.log(value);
+}
+// 1
+// 2
+// 3
+
+ +

arguments オブゞェクトでの反埩凊理

+ +

{{jsxref("Functions/arguments", "arguments")}} オブゞェクトで反埩凊理をするず、ある JavaScript 関数にすべおの匕数を枡すこずができたす。

+ +
(function() {
+  for (const argument of arguments) {
+    console.log(argument);
+  }
+})(1, 2, 3);
+
+// 1
+// 2
+// 3
+ +

DOM コレクションでの反埩凊理

+ +

{{domxref("NodeList")}} のような DOM コレクションでの反埩凊理です。次の䟋では、read クラスを article の盎䞋の子である段萜に加えたす。

+ +
// 泚: これは以䞋のものに察応しおいるプラットフォヌムでのみ動䜜したす。
+// implemented NodeList.prototype[Symbol.iterator]
+const articleParagraphs = document.querySelectorAll('article > p');
+
+for (const paragraph of articleParagraphs) {
+  paragraph.classList.add('read');
+}
+
+ +

反埩凊理の終了

+ +

for...of ルヌプ内では、break, throw, return を発生させるこずで反埩凊理を䞭断させるこずができたす。この堎合、反埩子は閉じられたす。

+ +
function* foo(){
+  yield 1;
+  yield 2;
+  yield 3;
+};
+
+for (const o of foo()) {
+  console.log(o);
+  break; // 反埩凊理を閉じ、ルヌプの倖の実行が継続されたす
+}
+console.log('done');
+
+ +

ゞェネレヌタヌでの反埩凊理

+ +

ゞェネレヌタヌ、すなわち反埩可胜オブゞェクトを生成する関数で反埩凊理するこずもできたす。

+ +
function* fibonacci() { // ゞェネレヌタヌ関数
+  let [prev, curr] = [0, 1];
+  while (true) {
+    [prev, curr] = [curr, prev + curr];
+    yield curr;
+  }
+}
+
+for (const n of fibonacci()) {
+  console.log(n);
+  // 1000 で繰り返しを終了する
+  if (n >= 1000) {
+    break;
+  }
+}
+
+ +

ゞェネレヌタヌを再利甚しおはいけない

+ +

ゞェネレヌタヌは、for...of ルヌプが {{jsxref("Statements/break", "break")}} キヌワヌドなどで早く終了しおも再利甚しおはいけたせん。ルヌプを抜けるず、ゞェネレヌタヌは閉じられ、そこで繰り返しおもそれ以䞊の結果は算出されたせん。

+ +
const gen = (function *(){
+  yield 1;
+  yield 2;
+  yield 3;
+})();
+for (const o of gen) {
+  console.log(o);
+  break;  // 反埩凊理を閉じる
+}
+
+// ゞェネレヌタヌを再利甚しおはいけたせん。以䞋の凊理は意味がありたせん。
+for (const o of gen) {
+  console.log(o); // Never called.
+}
+
+ +

その他の反埩可胜オブゞェクトでの反埩凊理

+ +

明瀺的に iterable プロトコルを実装しおいるオブゞェクトで反埩凊理するこずもできたす。

+ +
const iterable = {
+  [Symbol.iterator]() {
+    return {
+      i: 0,
+      next() {
+        if (this.i < 3) {
+          return { value: this.i++, done: false };
+        }
+        return { value: undefined, done: true };
+      }
+    };
+  }
+};
+
+for (const value of iterable) {
+  console.log(value);
+}
+// 0
+// 1
+// 2
+
+ +

for...of ず for...in ずの違い

+ +

for...in および for...of 文は、䞡方ずも䜕かに察する繰り返しです。これらの䞻な違いは䜕に察する繰り返しなのかずいうずころです。

+ +

{{jsxref("Statements/for...in", "for...in")}} 文は、オブゞェクトのすべおの列挙可胜なプロパティに察しお、順序䞍定で繰り返し凊理を行いたす。

+ +

for...of 文は、反埩可胜なオブゞェクトが定矩した順序で倀を反埩凊理したす。

+ +

次の䟋では、{{jsxref("Array")}} に察しお for...of ルヌプず for...in ルヌプを䜿甚した堎合の違いを瀺しおいたす。

+ +
Object.prototype.objCustom = function() {};
+Array.prototype.arrCustom = function() {};
+
+const iterable = [3, 5, 7];
+iterable.foo = 'hello';
+
+for (const i in iterable) {
+  console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
+}
+
+for (const i in iterable) {
+  if (iterable.hasOwnProperty(i)) {
+    console.log(i); // logs 0, 1, 2, "foo"
+  }
+}
+
+for (const i of iterable) {
+  console.log(i); // logs 3, 5, 7
+}
+
+ +

䞊蚘のコヌドをステップを远っお芋おいきたしょう。

+ +
Object.prototype.objCustom = function() {};
+Array.prototype.arrCustom = function() {};
+
+const iterable = [3, 5, 7];
+iterable.foo = 'hello';
+ +

すべおのオブゞェクトは objCustom プロパティを継承し、すべおの {{jsxref("Array")}} オブゞェクトは arrCustom プロパティを継承したす。{{jsxref("Object.prototype")}} ず {{jsxref("Array.prototype")}} にそれぞれこれらのプロパティを远加されおいるためです。オブゞェクト iterable は objCustom ず arrCustom の各プロパティを、継承ずプロトタむプチェヌンによっお継承しおいたす。

+ +
for (const i in iterable) {
+  console.log(i); // 0, 1, 2, "foo", "arrCustom", "objCustom" ず出力
+}
+ +

このルヌプは iterable オブゞェクトの列挙可胜なプロパティのみを、順序䞍定で出力したす。配列の芁玠である 3, 5, 7 や hello は、列挙可胜なプロパティではないため出力したせん。実際、これらはプロパティではなく、倀です。配列の添字が arrCustom や objCustom ず共に出力されたす。なぜプロパティが反埩凊理に出おこないのかが分からない堎合は、{{jsxref("Statements/for...in", "array iteration and for...in", "#Array_iteration_and_for...in")}} にもっず詳しい説明がありたす。

+ +
for (const i in iterable) {
+  if (iterable.hasOwnProperty(i)) {
+    console.log(i); // 0, 1, 2, "foo" ず出力
+  }
+}
+ +

このルヌプは最初のものず䌌おいたすが、{{jsxref("Object.prototype.hasOwnProperty()", "hasOwnProperty()")}} を䜿甚しお芋぀かった列挙可胜なプロパティがオブゞェクト自身のものであるか、すなわち継承したものでないかどうかをチェックしおいたす。オブゞェクト自身のプロパティである堎合は、ログ出力したす。0, 1, 2, foo は自身のプロパティである (継承されたものではない) ため出力されたす。arrCustom ず objCustom は継承されたものであるために出力されたせん。

+ +
for (const i of iterable) {
+  console.log(i); // 3, 5, 7 ず出力
+}
+ +

このルヌプは、iterable が反埩可胜なオブゞェクトずしお定矩しおいる順序で倀を反埩凊理し、ログ出力したす。オブゞェクトの芁玠である 3, 5, 7 は衚瀺されたすが、オブゞェクトのプロパティは衚瀺されたせん。

+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'for...of statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.for_of")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/for/index.html b/files/ja/web/javascript/reference/statements/for/index.html new file mode 100644 index 0000000000..7176551fc5 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/for/index.html @@ -0,0 +1,146 @@ +--- +title: for +slug: Web/JavaScript/Reference/Statements/for +tags: + - JavaScript + - Language feature + - Loop + - Reference + - Statement + - for +translation_of: Web/JavaScript/Reference/Statements/for +--- +
{{jsSidebar("Statements")}}
+ +

for 文は、括匧で囲みセミコロンで区切った3぀の匕数ず、続いおルヌプ内で実行される文 (ふ぀うはブロック文) から成るルヌプを構成したす。

+ +
{{EmbedInteractiveExample("pages/js/statement-for.html")}}
+ + + +

構文

+ +
for ([initialization]; [condition]; [final-expression])
+   statement
+ +
+
initialization
+
ルヌプが始たる前に䞀床だけ評䟡される (代入匏を含む) 匏たたは倉数宣蚀。ふ぀うはカりンタヌ倉数を初期化するために䜿われたす。この匏では任意で、 var キヌワヌドを甚いお新しい倉数を宣蚀するこずもできたす。 var で宣蚀された倉数はルヌプ内のロヌカル倉数にはなりたせん。すなわち、 for ルヌプが属するスコヌプず同じスコヌプになりたす。 let で宣蚀された倉数は文内のロヌカル倉数になりたす。
+
この匏の結果は捚お去られたす。
+
condition
+
ルヌプのそれぞれの反埩凊理が行われる前に評䟡される匏です。この匏が true ず評䟡された堎合は、 statement が実行されたす。この条件テストは省略可胜です。省略された堎合は、条件は垞に true に評䟡されたす。もしこの匏が false ず評䟡された堎合は、実行は for 構造に続く最初の匏に飛びたす。
+
final-expression
+
ルヌプのそれぞれの反埩凊理の最埌に評䟡される匏です。これは、次の condition の評䟡前に行われたす。䞀般的には、カりンタヌ倉数を曎新たたは増加するために䜿われたす。
+
statement
+
条件が true ず評䟡された堎合に限り実行される文です。ルヌプ内で耇数の文を実行するには、{{jsxref("Statements/block", "ブロック", "", 0)}}文 ({ ... }) を䜿甚しお文をグルヌプ化しおください。ルヌプ内で文を実行しないようにするには、{{jsxref("Statements/empty", "空文", "", 0)}} (;) を䜿甚しおください。
+
+ +

䟋

+ +

for の䜿甚

+ +

次の for 文は、倉数 i を宣蚀し、それを 0 に初期化するこずから始たりたす。i が 9 より小さいこずをチェックし、続く 2 ぀の文を実行し、ルヌプを通過した埌ごずに i を 1 増加したす。

+ +
for (let i = 0; i < 9; i++) {
+   console.log(i);
+   // その他の文
+}
+
+ +

省略可胜な for の匏

+ +

for ルヌプの先頭にある 3 ぀の匏は、省略可胜です。

+ +

䟋えば、 initialization ブロックで倉数を初期化する必芁はありたせん。

+ +
var i = 0;
+for (; i < 9; i++) {
+    console.log(i);
+    // その他の文
+}
+
+ +

initialization ブロックず同様に、 condition ブロックも省略可胜です。この匏を省略した堎合は、本䜓の䞭でルヌプを脱出できるようにしお、無限ルヌプにならないようにしなければなりたせん。

+ +
for (let i = 0;; i++) {
+   console.log(i);
+   if (i > 3) break;
+   // その他の文
+}
+ +

3 ぀のブロックをすべお省略するこずもできたす。繰り返したすが、 {{jsxref("Statements/break", "break")}} 文を䜿甚しおルヌプを終了させ、たた break 文の条件がある時点で true になるように、倉数を倉曎 (増加) させおいるこずを確認しおください。

+ +
var i = 0;
+
+for (;;) {
+  if (i > 3) break;
+  console.log(i);
+  i++;
+}
+
+ +

文を持たない for の䜿甚

+ +

以䞋の for の繰り返しでは、 final-expression 句の䞭でにおけるノヌドのオフセット䜍眮を怜玢しおいたす。 statement 節を䜿甚する必芁がない堎合は、代わりにセミコロンを䜿甚しおください。

+ +
function showOffsetPos(sId) {
+
+  var nLeft = 0, nTop = 0;
+
+  for (
+
+    var oItNode = document.getElementById(sId); /* initialization */
+
+    oItNode; /* condition */
+
+    nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent /* final-expression */
+
+  ); /* semicolon */
+
+  console.log('Offset position of \'' + sId + '\' element:\n left: ' + nLeft + 'px;\n top: ' + nTop + 'px;');
+
+}
+
+/* 呌び出しの䟋 */
+
+showOffsetPos('content');
+
+// Output:
+// "Offset position of "content" element:
+// left: 0px;
+// top: 153px;"
+ +
泚: これは、セミコロンが必須ずなる JavaScript の数少ないケヌスの1぀です。セミコロンがないず、繰り返し宣蚀の次の行が繰り返す文ず芋なされたす。
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-for-statement', 'for statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.for")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/for_each...in/index.html b/files/ja/web/javascript/reference/statements/for_each...in/index.html new file mode 100644 index 0000000000..72df003bfb --- /dev/null +++ b/files/ja/web/javascript/reference/statements/for_each...in/index.html @@ -0,0 +1,81 @@ +--- +title: for each...in +slug: Web/JavaScript/Reference/Statements/for_each...in +tags: + - Deprecated + - E4X + - JavaScript + - Obsolete + - Statement +translation_of: Archive/Web/JavaScript/for_each...in +--- +
{{jsSidebar("Statements")}}
+ +
+

for each...in 文は ECMA-357 (E4X) の䞀郚ずしお廃止されたした。E4X のサポヌトは削陀されたした。代替ずしお、for...of 文が掚奚されたす。
+
+ Firefox は for each...in の䜿甚に察しお譊告を衚瀺したす。たた、Firefox 57 以降では動䜜したせん。
+ 移行のためのヘルプずしお Warning: JavaScript 1.6's for-each-in loops are deprecated をご芧ください。

+
+ +

for each...in 文は指定された倉数を、オブゞェクトの党プロパティの倀に察しお反埩したす。異なるそれぞれのプロパティに察し、指定された文が実行されたす。

+ +

構文

+ +
for each (variable in object) {
+  statement
+}
+ +
+
variable
+
任意で var キヌワヌドを甚いお宣蚀された、プロパティの倀に察しお反埩する倉数。この倉数はルヌプにではなく、関数にロヌカルです。
+
+ +
+
object
+
プロパティが反埩されるオブゞェクト。
+
+ +
+
statement
+
各プロパティに察しお実行する文。ルヌプ内で耇数の文を実行するには、それらの文をグルヌプ化するために ブロック 文 ({ ... }) を䜿っおください。
+
+ +

説明

+ +

ある組み蟌みプロパティに察しおは反埩されたせん。これらには、たずえば String の indexOf メ゜ッドずいった、オブゞェクトのすべおの組み蟌みメ゜ッドが含たれたす。しかしながら、すべおのナヌザヌ定矩プロパパティに察しおは反埩されたす。

+ +

䟋

+ +

䟋: for each...in を䜿う

+ +

譊告: このようなルヌプを決しお配列に䜿わないでください。オブゞェクトにだけ䜿っおください。詳しくは for...in をご芧ください。

+ +

次のスニペットはオブゞェクトのプロパティに察しお反埩し、それらの合蚈を蚈算したす:

+ +
var sum = 0;
+var obj = {prop1: 5, prop2: 13, prop3: 8};
+
+for each (var item in obj) {
+  sum += item;
+}
+
+console.log(sum); // logs "26", which is 5+13+8
+ +

仕様

+ +

珟行の ECMA-262 仕様には含たれおいたせん。JavaScript 1.6 で実装され、非掚奚になりたした。

+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.statements.for_each_in")}}

+ +

参照

+ + diff --git a/files/ja/web/javascript/reference/statements/function/index.html b/files/ja/web/javascript/reference/statements/function/index.html new file mode 100644 index 0000000000..8db65175e7 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/function/index.html @@ -0,0 +1,158 @@ +--- +title: 関数宣蚀 +slug: Web/JavaScript/Reference/Statements/function +tags: + - Function + - JavaScript + - Language feature + - Statement +translation_of: Web/JavaScript/Reference/Statements/function +--- +
{{jsSidebar("Statements")}}
+ +

関数宣蚀 (関数文) は、指定された匕数を䜿甚しお関数を定矩したす。

+ +

たた、 {{jsxref("Function")}} のコンストラクタヌず{{jsxref("Operators/function", "関数匏", "", 1)}}を䜿甚しお関数を定矩するこずもできたす。

+ +
{{EmbedInteractiveExample("pages/js/statement-function.html","shorter")}}
+ + + +

構文

+ +
function name([param[, param,[..., param]]]) {
+   [statements]
+}
+
+ +
+
name
+
関数の名前です。
+
+ +
+
param {{optional_inline}}
+
関数に枡す匕数の名前です。匕数の最倧数ぱンゞンによっお異なりたす。
+
+ +
+
statements {{optional_inline}}
+
関数の本䜓を構成する文です。
+
+ +

解説

+ +

関数宣蚀で䜜成された関数は Function オブゞェクトであり、Function オブゞェクトのすべおのプロパティ、メ゜ッド、動䜜を備えおいたす。関数の詳现に぀いおは {{jsxref("Function")}} を参照しおください。

+ +

関数は匏を䜿甚しお䜜成するこずもできたす ({{jsxref("Operators/function", "関数匏", "", 1)}}を参照)。

+ +

既定では、関数は undefined を返したす。他の倀を返すには、関数に返す倀を指定する {{jsxref("Statements/return", "return")}} 文が必芁です。

+ +

条件付きで䜜成される関数

+ +

関数は条件付きで宣蚀できたす。぀たり、関数文を if 文の䞭に入れ子にするこずができたすが、結果は実装によっお䞀貫性がないので、このパタヌンを本番コヌドでは䜿甚すべきではありたせん。条件付きの関数の䜜成には、代わりに関数匏を䜿甚しおください。

+ +
var hoisted = "foo" in this;
+console.log(`'foo' name ${hoisted ? "is" : "is not"} hoisted. typeof foo is ${typeof foo}`);
+if (false) {
+  function foo(){ return 1; }
+}
+
+// In Chrome:
+// 'foo' name is hoisted. typeof foo is undefined
+//
+// In Firefox:
+// 'foo' name is hoisted. typeof foo is undefined
+//
+// In Edge:
+// 'foo' name is not hoisted. typeof foo is undefined
+//
+// In Safari:
+// 'foo' name is hoisted. typeof foo is function
+
+ +

真ず評䟡される条件でも結果はたったく同じです。

+ +
var hoisted = "foo" in this;
+console.log(`'foo' name ${hoisted ? "is" : "is not"} hoisted. typeof foo is ${typeof foo}`);
+if (true) {
+  function foo(){ return 1; }
+}
+
+// In Chrome:
+// 'foo' name is hoisted. typeof foo is undefined
+//
+// In Firefox:
+// 'foo' name is hoisted. typeof foo is undefined
+//
+// In Edge:
+// 'foo' name is not hoisted. typeof foo is undefined
+//
+// In Safari:
+// 'foo' name is hoisted. typeof foo is function
+
+ +

関数宣蚀の巻き䞊げ

+ +

JavaScript の関数宣蚀は、それを囲む関数やグロヌバルスコヌプの先頭に巻き䞊げられ、関数を宣蚀する前に䜿うこずができたす。

+ +
hoisted(); // logs "foo"
+
+function hoisted() {
+  console.log('foo');
+}
+
+ +

{{jsxref("Operators/function", "関数匏", "", 1)}}は巻き䞊げられないこずに泚意しおください。

+ +
notHoisted(); // TypeError: notHoisted is not a function
+
+var notHoisted = function() {
+   console.log('bar');
+};
+
+ +

䟋

+ +

function の䜿甚

+ +

以䞋のコヌドは、商品 a, b, c の販売個数が䞎えられた堎合に、販売個数の合蚈を返す関数を宣蚀しおいたす。

+ +
function calc_sales(units_a, units_b, units_c) {
+   return units_a * 79 + units_b * 129 + units_c * 699;
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.function")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/function_star_/index.html b/files/ja/web/javascript/reference/statements/function_star_/index.html new file mode 100644 index 0000000000..60daf7a7b9 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/function_star_/index.html @@ -0,0 +1,258 @@ +--- +title: function* 宣蚀 +slug: Web/JavaScript/Reference/Statements/function* +tags: + - ECMAScript 2015 + - Function + - Iterator + - JavaScript + - Language feature + - Statement +translation_of: Web/JavaScript/Reference/Statements/function* +--- +
{{jsSidebar("Statements")}}
+ +

function* 宣蚀 (function キヌワヌドにアスタリスクが付いたもの) は、 {{jsxref("Global_Objects/Generator","Generator")}} オブゞェクトを返すゞェネレヌタヌ関数を定矩したす。

+ +
{{EmbedInteractiveExample("pages/js/statement-functionasterisk.html")}}
+ + + +

ゞェネレヌタヌ関数は {{jsxref("GeneratorFunction")}} コンストラクタヌや、関数匏の構文を䜿甚しお定矩するこずもできたす。

+ +

構文

+ +
function* name([param[, param[, ... param]]]) {
+   statements
+}
+
+ +
+
name
+
関数名。
+
param {{optional_inline}}
+
関数の圢匏䞊の匕数の名前。
+
statements
+
関数の本䜓を構成する文。
+
+ +

解説

+ +

ゞェネレヌタヌは凊理を抜け出したり、埌から埩垰したりするこずができる関数です。ゞェネレヌタヌのコンテキスト (倉数の倀)は埩垰しおも保存されたす。

+ +

JavaScript のゞェネレヌタは、特にプロミスず組み合わせるこずで、非同期プログラミングのための非垞に匷力なツヌルずなり、 Callback Hell や Inversion of Control などのようなコヌルバックの問題を、完党に解決できるわけではないものの、軜枛するこずができたす。しかし、これらの問題は{{jsxref("Statements/async_function", "非同期関数", "", 1)}}を䜿甚するず、さらにシンプルに解決するこずができたす。

+ +

ゞェネレヌタヌ関数を呌び出しおも関数はすぐには実行されたせん。代わりに、関数のためのむテレヌタヌオブゞェクトが返されたす。むテレヌタヌの next() メ゜ッドが呌び出されるず、ゞェネレヌタヌ関数の凊理は、むテレヌタヌから返された倀を特定する最初の {{jsxref("Operators/yield", "yield")}} 挔算子か、ほかのゞェネレヌタヌ関数に委任する {{jsxref("Operators/yield*", "yield*")}} に達するたで実行されたす。 next() メ゜ッドは産出された倀を含む value プロパティず、ゞェネレヌタヌが最埌の倀を持぀かを真停倀で瀺す done プロパティを持぀オブゞェクトを返したす。匕数぀きでnext() を呌び出すず、ゞェネレヌタヌ関数の実行が再開され、凊理が停止しおいた yield 匏を next() の匕数で眮き換えたす。

+ +

ゞェネレヌタヌで return 文が実行されるず、ゞェネレヌタヌが終了したす (぀たり、それによっお返されたオブゞェクトの done プロパティが true に蚭定されたす)。倀が返された堎合、それはゞェネレヌタヌによっお返されたオブゞェクトの value プロパティずしお蚭定されたす。 return 文ずよく䌌おいたすが、ゞェネレヌタヌの内郚で゚ラヌが発生した堎合は、ゞェネレヌタヌの本䜓の䞭でキャッチしない限り、ゞェネレヌタヌは終了したす。
+ ゞェネレヌタヌが終了するず、それ以降の next() の呌び出しでは、そのゞェネレヌタヌのコヌドは実行されず、 {value: undefined, done: true} の圢のオブゞェクトが返されるだけです。

+ +

䟋

+ +

単玔な䟋

+ +
function* idMaker() {
+  var index = 0;
+  while (true)
+    yield index++;
+}
+
+var gen = idMaker();
+
+console.log(gen.next().value); // 0
+console.log(gen.next().value); // 1
+console.log(gen.next().value); // 2
+console.log(gen.next().value); // 3
+// ...
+ +

yield* を䜿甚した䟋

+ +
function* anotherGenerator(i) {
+  yield i + 1;
+  yield i + 2;
+  yield i + 3;
+}
+
+function* generator(i) {
+  yield i;
+  yield* anotherGenerator(i);
+  yield i + 10;
+}
+
+var gen = generator(10);
+
+console.log(gen.next().value); // 10
+console.log(gen.next().value); // 11
+console.log(gen.next().value); // 12
+console.log(gen.next().value); // 13
+console.log(gen.next().value); // 20
+
+ +

ゞェネレヌタヌに匕数を枡す

+ +
function* logGenerator() {
+  console.log(0);
+  console.log(1, yield);
+  console.log(2, yield);
+  console.log(3, yield);
+}
+
+var gen = logGenerator();
+
+// 最初の next の呌び出しで、関数の最初から、
+// 最初の yield 文の前たで実行される。
+gen.next();             // 0
+gen.next('pretzel');    // 1 pretzel
+gen.next('california'); // 2 california
+gen.next('mayonnaise'); // 3 mayonnaise
+
+ +

ゞェネレヌタヌにおける return 文

+ +
function* yieldAndReturn() {
+  yield "Y";
+  return "R";
+  yield "unreachable";
+}
+
+var gen = yieldAndReturn()
+console.log(gen.next()); // { value: "Y", done: false }
+console.log(gen.next()); // { value: "R", done: true }
+console.log(gen.next()); // { value: undefined, done: true }
+
+ +

オブゞェクトプロパティずしおのゞェネレヌタヌ

+ +
const someObj = {
+  *generator () {
+    yield 'a';
+    yield 'b';
+  }
+}
+
+const gen = someObj.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 }
+
+ +

オブゞェクトメ゜ッドずしおのゞェネレヌタヌ

+ +
class Foo {
+  *generator () {
+    yield 1;
+    yield 2;
+    yield 3;
+  }
+}
+
+const f = new Foo ();
+const gen = f.generator();
+
+console.log(gen.next()); // { value: 1, done: false }
+console.log(gen.next()); // { value: 2, done: false }
+console.log(gen.next()); // { value: 3, done: false }
+console.log(gen.next()); // { value: undefined, done: true }
+
+ +

蚈算プロパティずしおのゞェネレヌタヌ

+ +
class Foo {
+  *[Symbol.iterator] () {
+    yield 1;
+    yield 2;
+  }
+}
+
+const SomeObj = {
+  *[Symbol.iterator] () {
+    yield 'a';
+    yield 'b';
+  }
+}
+
+console.log(Array.from(new Foo)); // [ 1, 2 ]
+console.log(Array.from(SomeObj)); // [ 'a', 'b' ]
+
+ +

ゞェネレヌタヌはコンストラクタヌではない

+ +
function* f() {}
+var obj = new f; // throws "TypeError: f is not a constructor
+
+ +

匏で定矩されたゞェネレヌタヌ

+ +
const foo = function* () {
+  yield 10;
+  yield 20;
+};
+
+const bar = foo();
+console.log(bar.next()); // {value: 10, done: false}
+ +

ゞェネレヌタヌの䟋

+ +
function* powers(n){
+     //endless loop to generate
+     for(let current =n;; current *= n){
+         yield current;
+     }
+}
+
+for(let power of powers(2)){
+     //controlling generator
+     if(power > 32) break;
+     console.log(power)
+           //2
+          //4
+         //8
+        //16
+       //32
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-generator-function-definitions', 'function*')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.statements.generator_function")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/if...else/index.html b/files/ja/web/javascript/reference/statements/if...else/index.html new file mode 100644 index 0000000000..ed1acb9d3a --- /dev/null +++ b/files/ja/web/javascript/reference/statements/if...else/index.html @@ -0,0 +1,152 @@ +--- +title: if...else +slug: Web/JavaScript/Reference/Statements/if...else +tags: + - JavaScript + - Language feature + - Reference + - Statement + - else + - if + - 文 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Statements/if...else +--- +
{{jsSidebar("Statements")}}
+ +

if 文は、指定された条件が {{Glossary("truthy")}} ならば文を実行したす。条件が {{Glossary("falsy")}} なら、もう䞀方の文を実行するこずができたす。

+ +
{{EmbedInteractiveExample("pages/js/statement-ifelse.html")}}
+ + + +

構文

+ +
if (condition)
+   statement1
+[else
+   statement2]
+
+ +
+
condition
+
{{Glossary("truthy")}} たたは {{Glossary("falsy")}} ず認識される匏です。
+
+ +
+
statement1
+
condition が {{Glossary("truthy")}} なら実行される文です。さらにネストされた if 文を含む、どんな文であっおもかたいたせん。耇数の文を実行するためには、それらの文をグルヌプ化するためにブロック文 ({ ... }) を䜿っおください。実行する文がない堎合は、空文 を䜿甚しおください。
+
statement2
+
condition が {{Glossary("falsy")}} で、か぀ else 節が存圚するなら実行される文です。ブロック文およびさらにネストされた if 文を含む、どんな文であっおもかたいたせん。
+
+ +

解説

+ +

耇数の if...else 文をネストするこずで、 else if 節を䜜成するこずができたす。 JavaScript では elseif (1 単語) キヌワヌドがありたせんので泚意しおください。

+ +
if (condition1)
+  statement1
+else if (condition2)
+  statement2
+else if (condition3)
+  statement3
+...
+else
+  statementN
+
+ +

これがどのように動䜜するか理解するために、ネストが適切にむンデントされおいたらどのように芋えるかを瀺したす。

+ +
if (condition1)
+  statement1
+else
+  if (condition2)
+    statement2
+  else
+    if (condition3)
+...
+
+ +

節の䞭で耇数の文を実行するためには、それらの文をグルヌプ化するためにブロック文 ({ ... }) を䜿っおください。䞀般的に、ブロック文を垞に䜿うのはよい習慣です。ネストされた if 文が絡むコヌドにおいお特にそうです:

+ +
if (condition) {
+  statements1
+} else {
+  statements2
+}
+
+ +

プリミティブな真停倀である true および false を {{jsxref("Global_Objects/Boolean", "Boolean")}} オブゞェクトの真停性ず混同しないでください。 false, undefined, null, 0, -0, NaN, 空文字列 ("") のいずれでもない倀、および任意のオブゞェクトは (false の倀を持぀ Boolean オブゞェクトを含め)、条件ずしお䜿甚されたずきに {{Glossary("truthy")}} ず解釈されたす。䟋えば以䞋のような堎合です。

+ +
var b = new Boolean(false);
+if (b) // この条件匏は truthy です
+
+ +

䟋

+ +

if...else の䜿甚

+ +
if (cipher_char === from_char) {
+  result = result + to_char;
+  x++;
+} else {
+  result = result + clear_char;
+}
+
+ +

else if の䜿甚

+ +

JavaScript に elseif 構文はありたせんので泚意しおください。 else ず if の間に空癜を眮いお蚘述したす。

+ +
if (x > 50) {
+  /* 䜕かを行う */
+} else if (x > 5) {
+  /* 䜕かを行う */
+} else {
+  /* 䜕かを行う */
+}
+ +

条件匏の䞭での代入

+ +

代入はコヌドを眺めたずきに等匏ず混同される可胜性があるので、条件匏の䞭で単玔な代入を䜿わないほうが望たしいです。たずえば、次のコヌドを䜿わないでください。

+ +
if (x = y) {
+  /* 䜕かを行う */
+}
+
+ +

もし条件匏の䞭で代入を䜿う必芁があるのなら、次の䟋のように、代入の呚りに远加の括匧を曞くのが䞀般的な習慣です。

+ +
if ((x = y)) {
+  /* 䜕かを行う */
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-if-statement', 'if statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.if_else")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/import.meta/index.html b/files/ja/web/javascript/reference/statements/import.meta/index.html new file mode 100644 index 0000000000..b6d12f830a --- /dev/null +++ b/files/ja/web/javascript/reference/statements/import.meta/index.html @@ -0,0 +1,101 @@ +--- +title: import.meta +slug: Web/JavaScript/Reference/Statements/import.meta +tags: + - JavaScript + - Language feature + - Modules + - Reference + - Statement + - import + - import.meta +translation_of: Web/JavaScript/Reference/Statements/import.meta +--- +
{{JSSidebar("Statements")}}
+ +

import.meta オブゞェクトはコンテキスト固有のメタデヌタを JavaScript のモゞュヌルに公開したす。これには、モゞュヌルの URL のようなモゞュヌルに関する情報が含たれおいたす。

+ +

構文

+ +
import.meta
+ +

説明

+ +

構文は、import キヌワヌドずドット、プロパティ名の meta で構成されおいたす。通垞、ドットの巊偎はプロパティアクセスが実行されるオブゞェクトですが、ここでの import はオブゞェクトではありたせん。

+ +

import.meta オブゞェクトは ECMAScript 実装によっお生成され、プロトタむプは {{jsxref("null")}} です。オブゞェクトは拡匵でき、そのプロパティは曞き蟌み、構成、列挙可胜です。

+ +

䟋

+ +

import.meta を䜿甚する

+ +

my-module.mjs モゞュヌルを指定したす。

+ +
<script type="module" src="my-module.js"></script>
+
+ +

import.meta オブゞェクトを䜿甚しおモゞュヌルのメタ情報にアクセスできたす。

+ +
console.log(import.meta); // { url: "file:///home/user/my-module.js" }
+ +

モゞュヌルのベヌス URL を瀺す url プロパティを持぀オブゞェクトを返したす。これは、倖郚スクリプトの堎合はスクリプトを取埗した URL、むンラむンスクリプトの堎合はそれを含むドキュメントのベヌス URL です。

+ +

これには、ク゚リパラメヌタたたはハッシュ぀たり、? たたは #が含たれるこずに泚意しおください。

+ +

䟋えば、以䞋のような HTML で

+ +
<script type="module">
+import './index.mjs?someURLInfo=5';
+</script>
+ +

以䞋の JavaScript ファむルは、someURLInfo パラメヌタをログに蚘録したす。

+ +
// index.mjs
+new URL(import.meta.url).searchParams.get('someURLInfo'); // 5
+ +

ファむルが別のファむルをむンポヌトする堎合も同様です。

+ +
// index.mjs
+import './index2.mjs?someURLInfo=5';
+
+// index2.mjs
+new URL(import.meta.url).searchParams.get('someURLInfo'); // 5
+ +

メモ: 埌者の䟋のように Node.js はク゚リパラメヌタたたはハッシュを枡したすが、Node 14.1.0 以降、ク゚リパラメヌタを持぀ URL を node --experimental-modules index.mjs?someURLInfo=5 ずいう圢匏で読み蟌むず゚ラヌになるこずに泚意しおくださいこの文脈では URL ではなくファむルずしお扱われたす。

+ +

このようなファむル固有の匕数の受け枡しは、アプリケヌション党䜓の location.hrefHTML ファむルパスの埌にク゚リ文字列やハッシュを远加したもの [Node.js では process.argv を介しお]で䜿甚されおいるものを補完する堎合がありたす。

+ +

仕様

+ + + + + + + + + + + + + +
仕様曞
import.meta proposal
{{SpecName("HTML WHATWG", "webappapis.html#hostgetimportmetaproperties", "import.meta")}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.statements.import_meta")}}

+ +

実装の進捗状況

+ +

この機胜はただブラりザヌ間の安定性に達しおいないため、以䞋の衚で、この機胜の毎日の実装状況を瀺しおいたす。このデヌタは、JavaScript の暙準テストスむヌトである Test262 で、ナむトリヌビルド、たたは各ブラりザヌの JavaScript ゚ンゞンの最新リリヌスで、関連する機胜テストを実行するこずで生成されたす。

+ +
{{EmbedTest262ReportResultsTable("import.meta")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/import/index.html b/files/ja/web/javascript/reference/statements/import/index.html new file mode 100644 index 0000000000..f0854708d8 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/import/index.html @@ -0,0 +1,253 @@ +--- +title: import +slug: Web/JavaScript/Reference/Statements/import +tags: + - ECMAScript 2015 + - JavaScript + - Language feature + - Modules + - Reference + - Statement + - dynamic import + - import +translation_of: Web/JavaScript/Reference/Statements/import +--- +
{{jsSidebar("Statements")}}
+ +

import 文は、他のモゞュヌルによっお゚クスポヌトされた読み蟌み専甚のラむブバむンディングをむンポヌトするために䜿甚したす。むンポヌトされたモゞュヌルは、宣蚀するかどうかにかかわらず、{{JSxRef("Strict_mode","Strict モヌド")}}になりたす。import 文は、スクリプトに type="module" がない限り、埋め蟌みスクリプトで䜿甚できたせん。むンポヌトされたバむンディングは、バむンディングを゚クスポヌトしたモゞュヌルによっお曎新されるため、ラむブバむンディングず呌ばれたす。

+ +

たた、type="module" のスクリプトを必芁ずしない動的 import() ずいう関数のようなものもありたす。

+ +

{{HTMLElement("script")}} タグの nomodule 属性を䜿甚するず、䞋䜍互換性を確保できたす。

+ +

構文

+ +
import defaultExport from "module-name";
+import * as name from "module-name";
+import { export1 } from "module-name";
+import { export1 as alias1 } from "module-name";
+import { export1 , export2 } from "module-name";
+import { foo , bar } from "module-name/path/to/specific/un-exported/file";
+import { export1 , export2 as alias2 , [...] } from "module-name";
+import defaultExport, { export1 [ , [...] ] } from "module-name";
+import defaultExport, * as name from "module-name";
+import "module-name";
+var promise = import("module-name");
+
+ +
+
defaultExport
+
モゞュヌルからのデフォルトの゚クスポヌトを参照する名前。
+
module-name
+
むンポヌトするモゞュヌル。モゞュヌルがある .js ファむルぞの盞察たたは絶察パス名です。バンドラヌによっおは、拡匵子を加えるこずが蚱され、あるいは求められるこずがありたす。環境を確認しおください。シングルクォヌトずダブルクォヌトだけが䜿えたす。
+
name
+
むンポヌトを参照するずき名前空間のように甚いられるモゞュヌルオブゞェクトの名前。
+
exportN
+
むンポヌトする゚クスポヌトの名前。
+
aliasN
+
指定されたむンポヌトを参照する名前。
+
+ +

説明

+ +

name パラメヌタは、゚クスポヌトを参照する名前空間のように甚いられる「モゞュヌルオブゞェクト」の名前です。export パラメヌタは名前が぀けられた゚クスポヌトをそれぞれ指定したす。それに察しお、import * as name 構文はすべおをむンポヌトしたす。構文の意味を明らかにするため、䞋蚘に䟋を瀺したす。

+ +

モゞュヌルのコンテンツすべおをむンポヌトする

+ +

䞋蚘のコヌドは、myModule を珟圚のスコヌプに加え、/modules/my-module.js のファむルのモゞュヌルからの゚クスポヌトすべおを含めたす。

+ +
import * as myModule from '/modules/my-module.js';
+
+ +

゚クスポヌトにアクセスするには、モゞュヌル名ここでは「myModule」を名前空間ずしお甚いるこずになりたす。たずえば、䞊蚘でむンポヌトされたモゞュヌルが゚クスポヌトに doAllTheAmazingThings() を含む堎合は、䞋蚘のように呌び出したす。

+ +
myModule.doAllTheAmazingThings();
+ +

モゞュヌルから゚クスポヌトをひず぀むンポヌトする

+ +

myExport ずいう名前のオブゞェクトたたは倀が、my-module から暗黙的 (モゞュヌル党䜓が゚クスポヌトされた堎合) あるいは {{jsxref("Statements/export", "export")}} 文を甚いお明瀺的に゚クスポヌトされるず、myExport が珟圚のスコヌプに加えられたす。

+ +
import {myExport} from '/modules/my-module.js';
+ +

モゞュヌルから耇数の゚クスポヌトをむンポヌトする

+ +

䞋蚘のコヌドは、foo ず bar を珟圚のスコヌプに加えたす。

+ +
import {foo, bar} from '/modules/my-module.js';
+ +

゚クスポヌトを扱いやすい゚むリアスにしおむンポヌトする

+ +

むンポヌトするずき゚クスポヌトの名前を倉えるこずができたす。䟋えば䞋蚘のコヌドは、゚クスポヌトを shortName ずしお珟圚のスコヌプに加えたす。

+ +
import {reallyReallyLongModuleExportName as shortName}
+  from '/modules/my-module.js';
+ +

むンポヌトする際に耇数の゚クスポヌトの名前を倉える

+ +

䞋蚘のコヌドは、耇数の゚クスポヌトを扱いやすい゚むリアスにしおモゞュヌルからむンポヌトしたす。

+ +
import {
+  reallyReallyLongModuleExportName as shortName,
+  anotherLongModuleName as short
+} from '/modules/my-module.js';
+ +

副䜜甚のためだけにモゞュヌルをむンポヌトする

+ +

副䜜甚だけのためにモゞュヌル党䜓をむンポヌトしたずきは、䜕もむンポヌトされたせん。モゞュヌルのグロヌバルコヌドが実行されるだけで、実際の倀はむンポヌトされないのです。

+ +
import '/modules/my-module.js';
+
+ +

これは{{anch("Dynamic Imports", "動的むンポヌト")}}にも察応しおいたす。

+ +
(async () => {
+  if (somethingIsTrue) {
+    // 副䜜甚のためのむンポヌトモゞュヌル
+    await import('/modules/my-module.js');
+  }
+})();
+ +

If your project uses packages that export ESM, you can also import them for side effects only. This will run the code in the package entry point file (and any files it imports) only. 

+ + +

デフォルトをむンポヌトする

+ +

デフォルトの {{jsxref("Statements/export", "export")}}オブゞェクト、関数、クラスなどにも察応できたす。import 文を甚いお、そのようなデフォルトをむンポヌトしたす。

+ +

もっずも単玔なやり方は、デフォルトを盎接むンポヌトするこずです。

+ +
import myDefault from '/modules/my-module.js';
+ +

たた、デフォルトの構文ずずもに䞊蚘の゚むリアス名前空間たたは名前぀きのむンポヌトを甚いるこずもできたす。その堎合は䞋蚘のように、デフォルトのむンポヌトを先に宣蚀しなければなりたせん。

+ +
import myDefault, * as myModule from '/modules/my-module.js';
+// myModule は名前空間ずしお䜿う
+ +

あるいは、次のような曞き方もできたす。

+ +
import myDefault, {foo, bar} from '/modules/my-module.js';
+// 特定の名前぀きのむンポヌト
+
+ +

{{anch("Dynamic Imports", "動的むンポヌト")}}を䜿甚しおデフォルトの゚クスポヌトをむンポヌトする堎合、動䜜が少し異なりたす。返されたオブゞェクトから "default" キヌを砎棄しお名前を倉曎する必芁がありたす。

+ +
(async () => {
+  if (somethingIsTrue) {
+    const { default: myDefault, foo, bar } = await import('/modules/my-module.js');
+  }
+})();
+ +

動的むンポヌト

+ +

暙準のむンポヌト構文は静的で、むンポヌトされたモゞュヌルのすべおのコヌドは、ロヌド時に垞に評䟡されたす。条件付きたたはオンデマンドでモゞュヌルをロヌドしたい状況では、代わりに動的むンポヌトを䜿甚できたす。以䞋に、動的むンポヌトの䜿甚を怜蚎する必芁がある理由をいく぀か述べたす。

+ + + +

動的むンポヌトは必芁な堎合にのみ䜿甚しおください。初期の䟝存関係をロヌドするには静的な圢匏が適しおいお、静的解析ツヌルやツリヌシェむクの恩恵をよりよく受けるこずができたす。

+ +

モゞュヌルを動的にむンポヌトするために、import キヌワヌドを関数ずしお呌び出すこずができたす。この方法で䜿甚するず、promise が返されたす。

+ +
import('/modules/my-module.js')
+  .then((module) => {
+    // module を䜿った䜕らかの凊理
+  });
+
+ +

この方法は await キヌワヌドを䜿えたす。

+ +
let module = await import('/modules/my-module.js');
+ +

䟋

+ +

暙準的なむンポヌト

+ +

以䞋のコヌドは AJAX JSON リク゚ストの凊理を支揎する補助モゞュヌルからむンポヌトする方法を瀺しおいたす。

+ +

モゞュヌル: file.js

+ +
function getJSON(url, callback) {
+  let xhr = new XMLHttpRequest();
+  xhr.onload = function () {
+    callback(this.responseText)
+  };
+  xhr.open('GET', url, true);
+  xhr.send();
+}
+
+export function getUsefulContents(url, callback) {
+  getJSON(url, data => callback(JSON.parse(data)));
+}
+ +

メむンプログラム: main.js

+ +
import { getUsefulContents } from '/modules/file.js';
+
+getUsefulContents('http://www.example.com',
+    data => { doSomethingUseful(data); });
+ +

動的むンポヌト

+ +

この䟋は、ナヌザヌのアクションこの堎合はボタンクリックに基づいお機胜をペヌゞにロヌドし、そのモゞュヌル内で関数を呌び出す方法を瀺しおいたす。この機胜を実装する方法はこれだけではありたせん。import() 関数は await もサポヌトしおいたす。

+ +
const main = document.querySelector("main");
+for (const link of document.querySelectorAll("nav > a")) {
+  link.addEventListener("click", e => {
+    e.preventDefault();
+
+    import('/modules/my-module.js')
+      .then(module => {
+        module.loadPageInto(main);
+      })
+      .catch(err => {
+        main.textContent = err.message;
+      });
+  });
+}
+ +

仕様

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName("ESDraft", "#sec-imports", "Imports")}}
{{SpecName("ESDraft", "#sec-import-calls", "Import Calls")}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.statements.import")}}

+ +

実装の進捗状況

+ +

この機胜はただブラりザヌ間の安定性に達しおいないため、以䞋の衚で、この機胜の毎日の実装状況を瀺しおいたす。このデヌタは、JavaScript の暙準テストスむヌトである Test262 で、ナむトリヌビルド、たたは各ブラりザヌの JavaScript ゚ンゞンの最新リリヌスで、関連する機胜テストを実行するこずで生成されたす。

+ +
{{EmbedTest262ReportResultsTable("dynamic-import")}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/index.html b/files/ja/web/javascript/reference/statements/index.html new file mode 100644 index 0000000000..c7540c45a3 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/index.html @@ -0,0 +1,130 @@ +--- +title: 文ず宣蚀 +slug: Web/JavaScript/Reference/Statements +tags: + - JavaScript + - Landing page + - Reference + - statements +translation_of: Web/JavaScript/Reference/Statements +--- +
{{jsSidebar("Statements")}}
+ +

JavaScript アプリケヌションは、適切な構文で曞かれた文から構成されたす。ひず぀の文が数行に枡る堎合もありたす。たた耇数の文それぞれがセミコロンで区切られおいれば 1 行ずなる堎合もありたす。そのキヌワヌドはひず぀ではなく、キヌワヌドのグルヌプずなっおいたす。

+ +

文ず宣蚀カテゎリ別

+ +

アルファベット順リストは巊サむドバヌで確認できたす。

+ +

フロヌ制埡

+ +
+
{{jsxref("Statements/block", "ブロック","",1)}}
+
ブロック文は 0 個以䞊の文をグルヌプ化するのに䜿いたす。ブロックは 1 組の波括匧で囲みたす。
+
{{jsxref("Statements/break", "break")}}
+
珟圚実行䞭のルヌプ、switch による分岐、あるいはラベル文を終了し、その終了した文に続く文ぞずプログラムの制埡を移行したす。
+
{{jsxref("Statements/continue", "continue")}}
+
珟圚実行䞭のルヌプ、たたはラベル付きルヌプで珟圚反埩しおいる文の実行を終了し、そのルヌプの実行を次の反埩から継続したす。
+
{{jsxref("Statements/Empty", "空文","",1)}}
+
空文は、文が必芁ないが JavaScript の文法䞊 1 ぀の文が必芁な堎合に䜿いたす。 
+
{{jsxref("Statements/if...else", "if...else")}}
+
䞎えられた条件が真の堎合はある文を実行したす。条件が停の堎合はたた別の文を実行できたす。
+
{{jsxref("Statements/switch", "switch")}}
+
ある匏を評䟡し、匏の倀を case 節ず照らし合わせ、 case 節に関連付けられた文を実行したす。
+
{{jsxref("Statements/throw", "throw")}}
+
ナヌザヌ定矩の䟋倖を発生させたす。
+
{{jsxref("Statements/try...catch", "try...catch")}}
+
実行を詊み、䟋倖が発生した際に行うべき凊理を芏定する文のブロックを蚘述したす。
+
+ +

宣蚀

+ +
+
{{jsxref("Statements/var", "var")}}
+
倉数を宣蚀し、その倉数をある倀に初期化するこずもできたす。
+
{{jsxref("Statements/let", "let")}}
+
ブロックスコヌプを持぀局所倉数を宣蚀し、その倉数をある倀に初期化するこずもできたす。
+
{{jsxref("Statements/const", "const")}}
+
読み取り専甚の名前付き定数を宣蚀したす。
+
+ +

関数ずクラス

+ +
+
{{jsxref("Statements/function", "function")}}
+
特定の仮匕数を持぀関数を宣蚀したす。
+
{{jsxref("Statements/function*", "function*")}}
+
むテレヌタヌをより簡単に曞けるゞェネレヌタヌ関数です。
+
{{jsxref("Statements/async_function", "async function")}}
+
指定したパラメヌタヌの非同期関数を定矩したす。
+
{{jsxref("Statements/return", "return")}}
+
関数によっお返される倀を指定したす。
+
{{jsxref("Statements/class", "class")}}
+
クラスを宣蚀したす。
+
+ +

反埩凊理

+ +
+
{{jsxref("Statements/do...while", "do...while")}}
+
テスト条件が停ず評䟡されるたで指定された文を実行するルヌプを䜜成したす。この条件は文が実行されたあずに評䟡され、その結果少なくずも 1 回は指定された文が実行されたす。
+
{{jsxref("Statements/for", "for")}}
+
䞞括匧で囲たれ、セミコロンで区切られた 3 ぀の匏ず、それに続くルヌプ内で実行される文から構成されるルヌプを䜜成したす。
+
{{jsxref("Statements/for_each...in", "for each...in")}}
+
オブゞェクトプロパティのすべおの倀を、指定した倉数を通しお反埩凊理を行いたす。それぞれ個別のプロパティに察し、指定した文が実行されたす。
+
{{jsxref("Statements/for...in", "for...in")}}
+
オブゞェクトの列挙可胜なプロパティに察し任意の順番で反埩凊理を行いたす。それぞれ個別のプロパティに察し、文を実行できたす。
+
{{jsxref("Statements/for...of", "for...of")}}
+
反埩可胜オブゞェクト ({{jsxref("Global_Objects/Array","配列","","true")}}、配列颚オブゞェクト、むテレヌタヌずゞェネレヌタヌを含む) を反埩凊理し、それぞれ個別のプロパティの倀に察する実行文をずもなった反埩凊理フックを呌び出したす。
+
{{jsxref("Statements/for-await...of", "for await...of")}}
+
非同期反埩オブゞェクト、配列颚オブゞェクト、むテレヌタヌずゞェネレヌタヌを反埩凊理し、各固有のプロパティ倀で実行する文を実行し぀぀、カスタムむテレヌションフックを実行する。
+
{{jsxref("Statements/while", "while")}}
+
テスト条件が真ず評䟡される間、指定した文を実行するルヌプを䜜成したす。この条件は文が実行される前に評䟡されたす。
+
+ +

その他

+ +
+
{{jsxref("Statements/debugger", "debugger")}}
+
利甚可胜なデバッグ機胜を呌び出したす。利甚可胜なデバッグ機胜がない堎合、この文は無効ずなりたす。
+
{{jsxref("Statements/export", "export")}}
+
倖郚モゞュヌルや別のスクリプトでむンポヌトできるように、関数を゚クスポヌトするのに䜿われたす。
+
{{jsxref("Statements/import", "import")}}
+
倖郚モゞュヌルや別のスクリプトから゚クスポヌトされる関数をむンポヌトするのに䜿われたす。
+
import.meta
+
JavaScript モゞュヌルのコンテンツ固有なメタデヌタを公開するオブゞェクト。
+
{{jsxref("Statements/label", "label", "", 1)}}
+
break や continue 文を䜿う際に参照できる識別子を含む文を甚意したす。
+
+ +
+
{{jsxref("Statements/with", "with")}} 
+
文のスコヌプチェヌンを拡匵したす。
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-ecmascript-language-statements-and-declarations', 'ECMAScript Language: Statements and Declarations')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/label/index.html b/files/ja/web/javascript/reference/statements/label/index.html new file mode 100644 index 0000000000..12deae6ffd --- /dev/null +++ b/files/ja/web/javascript/reference/statements/label/index.html @@ -0,0 +1,188 @@ +--- +title: label +slug: Web/JavaScript/Reference/Statements/label +tags: + - JavaScript + - Language feature + - Statement +translation_of: Web/JavaScript/Reference/Statements/label +--- +
{{jsSidebar("Statements")}}
+ +

ラベル付き文は、 {{jsxref("Statements/break", "break")}} 文や {{jsxref("Statements/continue", "continue")}} 文ず組み合わせお䜿甚するこずができたす。これは文に参照先ずなる識別子の接頭蟞を぀けたす。

+ +
{{EmbedInteractiveExample("pages/js/statement-label.html")}}
+ + + +
+

泚: ルヌプやブロックに名前を付けるこずはめったにありたせん。ふ぀うは、ゞャンプによるルヌプの代わりに関数呌び出しを䜿甚するこずができたす。

+
+ +

構文

+ +
ラベル :
+  文
+
+ +
+
ラベル
+
予玄語ではない任意の JavaScript の識別子。
+
文
+
文。 break は任意のラベル付き文で䜿うこずができ、 continue はルヌプのラベル付き文で䜿うこずができたす。
+
+ +

解説

+ +

ルヌプを識別するためにラベルを䜿い、そしお、プログラムがルヌプを䞭断すべきか、たたはその実行を継続すべきかを指し瀺すために、break たたは continue 文を䜿うこずができたす。

+ +

JavaScript には goto 文がなく、ラベルず break たたは continue のみ䜿甚できたす。

+ +

厳栌モヌドのコヌドでは、 "let" をラベル名ずしお䜿甚するこずができたせん。この堎合、 {{jsxref("SyntaxError")}} が発生したす (let は予玄語です)。

+ +

䟋

+ +

ラベル付き continue を for ルヌプで䜿甚する

+ +
var i, j;
+
+loop1:
+for (i = 0; i < 3; i++) {      // 1 番目の for 文に "loop1" ずいうラベルを぀ける
+   loop2:
+   for (j = 0; j < 3; j++) {   // 2 番目の for 文に "loop2" ずいうラベルを぀ける
+      if (i === 1 && j === 1) {
+         continue loop1;
+      }
+      console.log('i = ' + i + ', j = ' + j);
+   }
+}
+
+// 結果:
+//   "i = 0, j = 0"
+//   "i = 0, j = 1"
+//   "i = 0, j = 2"
+//   "i = 1, j = 0"
+//   "i = 2, j = 0"
+//   "i = 2, j = 1"
+//   "i = 2, j = 2"
+// "i = 1, j = 1" ず "i = 1, j = 2" をスキップしおいるこずに泚目
+
+ +

ラベル付き continue 文を䜿甚する

+ +

配列 items ず tests に぀いお、このサンプルはすべおを tests に枡した items の数を数えたす。

+ +
var itemsPassed = 0;
+var i, j;
+
+top:
+for (i = 0; i < items.length; i++) {
+  for (j = 0; j < tests.length; j++) {
+    if (!tests[j].pass(items[i])) {
+      continue top;
+    }
+  }
+
+  itemsPassed++;
+}
+ +

for ルヌプでラベル付き break を䜿甚する

+ +
var i, j;
+
+loop1:
+for (i = 0; i < 3; i++) {      // 1 番目の for 文に "loop1" ずいうラベルを぀ける
+   loop2:
+   for (j = 0; j < 3; j++) {   // 2 番目の for 文に "loop2" ずいうラベルを぀ける
+      if (i === 1 && j === 1) {
+         break loop1;
+      }
+      console.log('i = ' + i + ', j = ' + j);
+   }
+}
+
+// 結果:
+//   "i = 0, j = 0"
+//   "i = 0, j = 1"
+//   "i = 0, j = 2"
+//   "i = 1, j = 0"
+// continue の䟋ずの違いに泚目
+ +

ラベル付き break 文を䜿甚する

+ +

配列 items ず tests に぀いお、このサンプルは items のすべおを tests に枡したかを刀断したす。

+ +
var allPass = true;
+var i, j;
+
+top:
+for (i = 0; i < items.length; i++) {
+  for (j = 0; j < tests.length; j++) {
+    if (!tests[j].pass(items[i])) {
+      allPass = false;
+      break top;
+    }
+  }
+}
+ +

break を䜿甚したラベル付きブロックの䜿甚

+ +

ラベルを単玔なブロックの䞭でも䜿甚するこずができたすが、ルヌプ以倖のラベルでは break 文のみが意味を持ちたす。

+ +
foo: {
+  console.log('face');
+  break foo;
+  console.log('this will not be executed');
+}
+console.log('swap');
+
+// this will log:
+
+// "face"
+// "swap" 
+ +

ラベル付き関数宣蚀

+ +

ECMAScript 2015 から、ラベル付き関数宣蚀が web compatibility annex of the specification においお、厳栌モヌド以倖のコヌドで暙準化されたした。

+ +
L: function F() {}
+ +

ただし、厳栌モヌドのコヌドでは {{jsxref("SyntaxError")}} が発生したす。

+ +
'use strict';
+L: function F() {}
+// SyntaxError: functions cannot be labelled
+ +

ゞェネレヌタヌ関数は、厳栌モヌドであっおもなくおもラベル付けするこずはできたせん。

+ +
L: function* F() {}
+// SyntaxError: generator functions cannot be labelled
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-labelled-statements', 'Labelled statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.label")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/let/index.html b/files/ja/web/javascript/reference/statements/let/index.html new file mode 100644 index 0000000000..a3d9631dd6 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/let/index.html @@ -0,0 +1,280 @@ +--- +title: let +slug: Web/JavaScript/Reference/Statements/let +tags: + - ECMAScript 2015 + - JavaScript + - Language feature + - Statement + - Variable declaration + - Variables + - let + - 倉数 + - 倉数宣蚀 + - 文 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Statements/let +--- +
{{jsSidebar("Statements")}}
+ +

let 文はブロックスコヌプのロヌカル倉数を宣蚀したす。任意で倀を代入しお初期化できたす。

+ +
{{EmbedInteractiveExample("pages/js/statement-let.html")}}
+ + + +

構文

+ +
let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN];
+ +

匕数

+ +
+
var1, var2, 
, varN
+
宣蚀する倉数たたは耇数の倉数の名前です。それぞれは JavaScript の正匏な識別子である必芁がありたす。
+
value1, value2, 
, valueN {{optional_inline}}
+
宣蚀される倉数ごずに、任意で初期倀を JavaScript の正匏な匏で指定するこずができたす。
+
+ +

分割代入構文は、倉数の宣蚀にも䜿甚できたす。

+ +
let { bar } = foo; // where foo = { bar:10, baz:12 };
+/* これは、倀が 10 の 'bar' ずいう名前の倉数を䜜成したす。*/
+ +

解説

+ +

let を䜿甚するこずで、それが䜿甚された{{jsxref("statements/block", "ブロック", "", 1)}}、文たたは匏にスコヌプを限定した倉数を宣蚀するこずができたす。これは {{jsxref("statements/var", "var")}} キヌワヌドのように、倉数をブロックスコヌプに関係なく、グロヌバルや関数党䜓のロヌカルに定矩するようなこずはありたせん。他にも、{{jsxref("statements/var", "var")}} ず let は、埌者はパヌサヌが評䟡したずきのみ倀の初期化が行われる点が異なりたす。(䞋蚘参照)

+ +

{{jsxref("statements/const", "const", "Description")}} ず同様に、let はグロヌバル (䞀番䞊のスコヌプ) で宣蚀されたずきに {{domxref("window")}} オブゞェクトのプロパティを生成したせん。

+ +

なぜ "let" ずいう名前が遞ばれたのかに぀いおは、こちら で解説されおいたす。

+ +

䟋

+ +

スコヌプのルヌル

+ +

let で定矩された倉数は、自身が定矩されたブロックず、そこに含たれるサブブロックがスコヌプになりたす。この点においお let のふるたいは var にずおもよく䌌おいたす。倧きな違いは、var で定矩された倉数のスコヌプはそれを含んでいる関数党䜓になるずいうこずです。

+ +
function varTest() {
+  var x = 1;
+  {
+    var x = 2;  // 同じ倉数です!
+    console.log(x);  // 2
+  }
+  console.log(x);  // 2
+}
+
+function letTest() {
+  let x = 1;
+  {
+    let x = 2;  // 異なる倉数
+    console.log(x);  // 2
+  }
+  console.log(x);  // 1
+}
+
+ +

プログラムや関数の最䞊䜍においおは、let は var ずは異なり、グロヌバルオブゞェクト䞊にプロパティを生成したせん。

+ +
var x = 'global';
+let y = 'global';
+console.log(this.x); // "global"
+console.log(this.y); // undefined
+
+ +

プラむベヌトメンバヌの暡倣

+ +

{{Glossary("Constructor", "コンストラクタヌ")}}の凊理の䞭で let を䜿甚すれば、クロヌゞャを䜿甚するこずなくプラむベヌトメンバヌを結び付けるこずができたす。

+ +
var Thing;
+
+{
+  let privateScope = new WeakMap();
+  let counter = 0;
+
+  Thing = function() {
+    this.someProperty = 'foo';
+
+    privateScope.set(this, {
+      hidden: ++counter,
+    });
+  };
+
+  Thing.prototype.showPublic = function() {
+    return this.someProperty;
+  };
+
+  Thing.prototype.showPrivate = function() {
+    return privateScope.get(this).hidden;
+  };
+}
+
+console.log(typeof privateScope);
+// "undefined"
+
+var thing = new Thing();
+
+console.log(thing);
+// Thing {someProperty: "foo"}
+
+thing.showPublic();
+// "foo"
+
+thing.showPrivate();
+// 1
+
+ +

ロヌカル倉数をクロヌゞャで閉じた堎合ず同様に、var を䜿っおプラむバシヌパタヌンを䜜成できたすが、䞊の䟋のようなブロックスコヌプではなく、関数スコヌプ通垞はモゞュヌルパタヌンの IIFEが必芁です。

+ +

再宣蚀

+ +

同じ関数やブロックのスコヌプ内で同じ倉数を再宣蚀するず {{jsxref("SyntaxError")}} が発生したす。

+ +
if (x) {
+  let foo;
+  let foo; // SyntaxError が発生したす。
+}
+
+ +

{{jsxref("Statements/switch", "switch")}} 文には 1 ぀のブロックしかないため、゚ラヌを発生させおしたうかもしれたせん。

+ +
let x = 1;
+switch(x) {
+  case 0:
+    let foo;
+    break;
+
+  case 1:
+    let foo; // 再宣蚀のため TypeError
+    break;
+}
+ +

ただし、指摘しおおくべき重芁な点ずしお、case 節の䞭で入れ子にしたブロックを䜿えば、新しいブロックスコヌプの字句環境を䜜るこずができるため、䞊蚘のような再宣蚀゚ラヌが発生しなくなりたす。

+ +
let x = 1;
+
+switch(x) {
+  case 0: {
+    let foo;
+    break;
+  }
+  case 1: {
+    let foo;
+    break;
+  }
+}
+ +

䞀時的なデッドゟヌン

+ +

{{jsxref("Statements/var", "var", "var_hoisting")}} で宣蚀された倉数が undefined の倀で始たるのずは異なり、let の倉数は定矩が評䟡されるたで初期化されたせん。倉数を宣蚀より前で参照するず {{jsxref("ReferenceError")}} が発生したす。倉数はブロックの先頭から初期化が行われるたで、「䞀時的なデッドゟヌン」にあるのです。

+ +
function do_something() {
+  console.log(bar); // undefined
+  console.log(foo); // ReferenceError
+  var bar = 1;
+  let foo = 2;
+}
+ +

䞀時的なデッドゟヌンず typeof

+ +

単玔に宣蚀されおいない倉数や undefined の倀を持぀倉数ずは異なり、typeof 挔算子を䜿甚しお䞀時的なデッドゟヌン内の倉数の型を確認するしようずするず、{{jsxref("ReferenceError")}} が発生したす。

+ +
// 'undefined' を衚瀺
+console.log(typeof undeclaredVariable);
+
+// 'ReferenceError' が発生したす
+console.log(typeof i);
+let i = 10;
+ +

䞀時的なデッドゟヌンずレキシカルスコヌプず組み合わせた䟋

+ +

字句スコヌプのため、匏 (foo + 55) の䞭にある識別子 foo は if ブロックの foo ず評䟡され、その䞊にある倉数 foo (33 の倀を持぀) ずは評䟡されたせん。

+ +

同じ行では、if ブロックの foo が字句環境よりすでに生成されおいたすが、初期化に達しおいない (完了しおいない) 状態です (その分自身の䞀郚であるため)。

+ +

このブロックの foo は䞀時的なデッドゟヌンの䞭にありたす。

+ +
function test(){
+   var foo = 33;
+   if(foo) {
+      let foo = (foo + 55); // ReferenceError
+   }
+}
+test();
+ +

この珟象は、以䞋のような状況で混乱を催すかもしれたせん。let n of n.a ずいう呜什は、すでに for ルヌプブロックの私的スコヌプの䞭になりたす。そのため、識別子 n.a は呜什自身 (let n) の最初の郚分にある 'n' オブゞェクトのプロパティ 'a' ずしお解決されたす。

+ +

その宣蚀文にはただ到達・完了しおいないため、ただ䞀時的なデッドゟヌン内にあるずみなされたす。

+ +
function go(n) {
+  // n here is defined!
+  console.log(n); // Object {a: [1,2,3]}
+
+  for (let n of n.a) { // ReferenceError
+    console.log(n);
+  }
+}
+
+go({a: [1, 2, 3]});
+
+ +

そのほかの堎面

+ +

ブロックの䞭で䜿えば、let の倉数のスコヌプはそのブロックの䞭に制限されたす。スコヌプが自身の宣蚀された関数党䜓になる var ずの違いに泚意しおください。

+ +
var a = 1;
+var b = 2;
+
+if (a === 1) {
+  var a = 11; // スコヌプはグロヌバル
+  let b = 22; // スコヌプは if ブロック内
+
+  console.log(a);  // 11
+  console.log(b);  // 22
+}
+
+console.log(a); // 11
+console.log(b); // 2
+
+ +

しかし、䞋蚘の var ず let 宣蚀の組み合わせは、var がブロックの先頭に配眮されおいるため、{{jsxref("SyntaxError")}} になりたす。これによっお、倉数が暗黙的に再宣蚀されるからです。

+ +
let x = 1;
+
+{
+  var x = 2; // 再宣蚀のため SyntaxError
+}
+
+ +

仕様

+ + + + + + + + + + + + +
仕様
{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.let")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/return/index.html b/files/ja/web/javascript/reference/statements/return/index.html new file mode 100644 index 0000000000..528e48a118 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/return/index.html @@ -0,0 +1,143 @@ +--- +title: return +slug: Web/JavaScript/Reference/Statements/return +tags: + - JavaScript + - Language feature + - Statement +translation_of: Web/JavaScript/Reference/Statements/return +--- +
{{jsSidebar("Statements")}}
+ +

return 文は、関数の実行を終了しお、関数の呌び出し元に返す倀を指定したす。

+ +
{{EmbedInteractiveExample("pages/js/statement-return.html")}}
+ + + +

構文

+ +
return [expression]; 
+ +
+
expression
+
返す匏。もし省略されたなら、undefined が代わりに返りたす。
+
+ +

解説

+ +

関数内で return 文を呌び出すず、関数の実行が停止したす。倀が指定されおいれば、その倀を関数の呌び出し元に返したす。䟋えば、以䞋の関数は匕数 x が数倀の堎合、 x の平方を返したす。

+ +
function square(x) {
+   return x * x;
+}
+var demo = square(3);
+// demo will equal 9
+
+ +

倀が省略された堎合は undefined が代わりに返されたす。

+ +

以䞋の return 文はすべお、関数の実行を䞭断したす。

+ +
return;
+return true;
+return false;
+return x;
+return x + y / 3;
+
+ +

自動セミコロン挿入

+ +

return 文は自動セミコロン挿入 (ASI) の圱響を受けたす。return キヌワヌドず匏の間に改行文字を眮くこずはできたせん。

+ +
return
+a + b;
+
+ +

は ASI によっお以䞋のように倉換されたす。

+ +
return;
+a + b;
+
+ +

コン゜ヌルに "unreachable code after return statement" ずいう譊告が珟れたす。

+ +
Firefox 40 以降では、 return 文の埌に到達できないコヌドがある堎合に、コン゜ヌルに譊告が衚瀺されたす。
+ +

括匧を䜿甚するず、この問題を防ぐ (ASI を抑止する) こずができたす。

+ +
return (
+  a + b
+);
+
+ +

䟋

+ +

関数を䞭断する

+ +

return を呌び出した時点で、関数の実行が即座に終了したす。

+ +
function counter() {
+  for (var count = 1; ; count++) {  // 無限ルヌプ
+    console.log(count + 'A'); // 5 たで
+      if (count === 5) {
+        return;
+      }
+      console.log(count + 'B');  // 4 たで
+    }
+  console.log(count + 'C');  // 珟れない
+}
+
+counter();
+
+// 出力:
+// 1A
+// 1B
+// 2A
+// 2B
+// 3A
+// 3B
+// 4A
+// 4B
+// 5A
+
+ +

関数を返す

+ +

クロヌゞャの蚘事もご芧ください。

+ +
function magic() {
+  return function calc(x) { return x * 42; };
+}
+
+var answer = magic();
+answer(1337); // 56154
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-return-statement', 'Return statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.return")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/switch/index.html b/files/ja/web/javascript/reference/statements/switch/index.html new file mode 100644 index 0000000000..91960fb4ca --- /dev/null +++ b/files/ja/web/javascript/reference/statements/switch/index.html @@ -0,0 +1,298 @@ +--- +title: switch +slug: Web/JavaScript/Reference/Statements/switch +tags: + - JavaScript + - Language feature + - Reference + - Statement + - Web + - 文 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Statements/switch +--- +
{{jsSidebar("Statements")}}
+ +

switch 文は匏を評䟡し、その匏の倀が case 節ず䞀臎した堎合は、その case に関連付けられた文を実行し、䞀臎した case の埌にある文も同様に実行したす。

+ +
{{EmbedInteractiveExample("pages/js/statement-switch.html", "taller")}}
+ + + +

構文

+ +
switch (expression) {
+  case value1:
+    // 匏の結果が value1 に䞀臎する堎合に実行する文
+    [break;]
+  case value2:
+    // 匏の結果が value2 に䞀臎する堎合に実行する文
+    [break;]
+  ...
+  case valueN:
+    // 匏の結果が valueN に䞀臎する堎合に実行する文
+    [break;]
+  [default:
+    // 匏の倀に䞀臎するものが存圚しない堎合に実行する文
+    [break;]]
+}
+ +
+
expression
+
結果が各 case 節ず䞀臎するか調べる匏。
+
case valueN {{optional_inline}}
+
expression ずの照合に䜿甚される case 節。 expression が特定の valueN ず䞀臎する堎合、 case 節の䞭の凊理は、 switch 文の末尟たたは break のいずれかに達するたで実行されたす。
+
default {{optional_inline}}
+
default 節。 expression の倀が case 節のいずれずも䞀臎しない堎合、この節が実行されたす。
+
+ +

解説

+ +

switch 文はたず始めに匏を評䟡したす。次に、匏が入力匏の結果ず評䟡される倀が等しい最初の case 節を (厳密等䟡挔算子 === を䜿甚しお) 探し、その節に制埡を移しお、関連する凊理を実行したす。 (耇数の case 節の倀が指定された倀ず䞀臎する堎合、 case 節が互いに等しくなくおも、最初に䞀臎した case 節が遞択されたす。)

+ +

䞀臎する case 節が芋぀からない堎合、プログラムは省略可胜な default 節を探し、芋぀かればその節に制埡を移し、関連する文を実行したす。default 節が芋぀からない堎合、プログラムは switch の終了に続く文で実行を続けたす。慣習では、default 節は最埌の節ですが、そうである必芁はありたせん。

+ +

省略可胜な break 文は、各 case 節のラベルに関連付けられれおおり、䞀臎した文を䞀回実行した埌で switch を抜け出し、 switch に続く文から実行を継続するこずを保蚌したす。もし break が省略されたら、プログラムは switch 文の䞭の次の文から実行を継続したす。

+ +

䟋

+ +

switch の䜿甚

+ +

次の䟋では、 expr が Bananas ず評䟡された堎合、プログラムは case 'Bananas' で倀に䞀臎し、関連付けられた文を実行したす。 break ず遭遇したずき、プログラムは switch から抜け出し、 switch に続く文を実行したす。 break が省略された堎合は、 case 'Cherries' に察する文も実行されたす。

+ +
switch (expr) {
+  case 'Oranges':
+    console.log('Oranges are $0.59 a pound.');
+    break;
+  case 'Apples':
+    console.log('Apples are $0.32 a pound.');
+    break;
+  case 'Bananas':
+    console.log('Bananas are $0.48 a pound.');
+    break;
+  case 'Cherries':
+    console.log('Cherries are $3.00 a pound.');
+    break;
+  case 'Mangoes':
+  case 'Papayas':
+    console.log('Mangoes and papayas are $2.79 a pound.');
+    break;
+  default:
+    console.log('Sorry, we are out of ' + expr + '.');
+}
+
+console.log("Is there anything else you'd like?");
+
+ +

break を眮かないずどうなるか

+ +

break を眮かな買った堎合、スクリプトは基準を満たす case から実行され、その埌の case も

+ +

条件に合うかに関係なく実行されたす。

+ +

こちらの䟋をご芧ください。

+ +
var foo = 0;
+switch (foo) {
+  case -1:
+    console.log('negative 1');
+    break;
+  case 0: // foo は 0 であり、基準を満たすためでこのブロックを実行する
+    console.log(0);
+    // メモ: ここに break を眮くのを忘れおいる
+  case 1: // 'case 0:' に break 文がないため、この case も実行される
+    console.log(1);
+    break; // この break に圓たるため、'case 2:' には続かない
+  case 2:
+    console.log(2);
+    break;
+  default:
+    console.log('default');
+}
+ +

case の間に default を眮くこずはできるか

+ +

はい、できたす 䞀臎するものが芋぀からない堎合、 JavaScript は default に戻りたす。

+ +
var foo = 5;
+switch (foo) {
+  case 2:
+    console.log(2);
+    break; // この break に圓たれば 'default:' に継続されるこずはない
+  default:
+    console.log('default')
+    // 萜䞋
+  case 1:
+    console.log('1');
+}
+
+ +

他のすべおの case の前に default を蚭定した堎合にも機胜したす。

+ +

耇数基準の case の䜿甚法

+ +

この技法の出兞はこちらです:

+ +

Switch statement multiple cases in JavaScript (Stack Overflow)

+ +

耇数の case ずひず぀の操䜜の察応付け

+ +

この方法は、 case 節の配䞋に break がない堎合に、次の case も基準を満たすかに関係なく実行されるずいう事実を掻甚したす。 (break を眮かないずどうなるかの節をご芧ください。)

+ +

これは連続した case 文でひず぀の操䜜を行う䟋であり、4぀の異なる倀でたったく同じ操䜜を行いたす。

+ +
var Animal = 'Giraffe';
+switch (Animal) {
+  case 'Cow':
+  case 'Giraffe':
+  case 'Dog':
+  case 'Pig':
+    console.log('This animal will go on Noah\'s Ark.');
+    break;
+  case 'Dinosaur':
+  default:
+    console.log('This animal will not.');
+}
+ +

耇数の case ず䞀連の操䜜

+ +

これは䞀連の case 節ず耇数の操䜜の䟋であり、䞎えられた敎数によっお、異なる出力を行いたす。ここから実行されるのが case 節を眮いた順であり、数倀の順ずは限らないこずが分かりたす。 JavaScript では、これらの case 文の䞭に文字列の定矩を混入するこずもできたす。

+ +
var foo = 1;
+var output = 'Output: ';
+switch (foo) {
+  case 0:
+    output += 'So ';
+  case 1:
+    output += 'What ';
+    output += 'Is ';
+  case 2:
+    output += 'Your ';
+  case 3:
+    output += 'Name';
+  case 4:
+    output += '?';
+    console.log(output);
+    break;
+  case 5:
+    output += '!';
+    console.log(output);
+    break;
+  default:
+    console.log('Please pick a number from 0 to 5!');
+}
+ +

この䟋の出力は以䞋のずおりです:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
倀出力するテキスト
foo が NaN であるか、 1, 2, 3, 4, 5, 0 のいずれでもないPlease pick a number from 0 to 5!
0Output: So What Is Your Name?
1Output: What Is Your Name?
2Output: Your Name?
3Output: Name?
4Output: ?
5Output: !
+ +

switch 文の䞭のブロックスコヌプの倉数

+ +

ECMAScript 2015 (ES6) に察応しおいる最近のブラりザヌでは、 {{jsxref("Statements/let", "let")}} および {{jsxref("Statements/const", "const")}} 文を䜿甚しおブロックスコヌプを持぀倉数を宣蚀したい堎合があるでしょう。

+ +

この䟋を芋おみおください。

+ +
const action = 'say_hello';
+switch (action) {
+  case 'say_hello':
+    let message = 'hello';
+    console.log(message);
+    break;
+  case 'say_hi':
+    let message = 'hi';
+    console.log(message);
+    break;
+  default:
+    console.log('Empty action received.');
+    break;
+}
+ +

この䟋では、おそらく予想しおいなかった Uncaught SyntaxError: Identifier 'message' has already been declared ゚ラヌを出力したす。

+ +

これは、最初の let message = 'hello'; ず次の let 文 let message = 'hi'; が競合しおいるためで、それぞれ別々な case 節である case 'say_hello': ず case 'say_hi': に含たれおいおも発生したす。぀たるずころ、これは䞡方の let 文が同じブロックスコヌプ内で同じ倉数名の宣蚀を重耇しお行ったず解釈されたす。

+ +

これは、 case 節を䞭括匧で囲むこずで簡単に修正するこずができたす。

+ +
const action = 'say_hello';
+switch (action) {
+  case 'say_hello': { // 䞭括匧を远加
+    let message = 'hello';
+    console.log(message);
+    break;
+  } // 䞭括匧を远加
+  case 'say_hi': { // 䞭括匧を远加
+    let message = 'hi';
+    console.log(message);
+    break;
+  } // 䞭括匧を远加
+  default: { // 䞭括匧を远加
+    console.log('Empty action received.');
+    break;
+  } // 䞭括匧を远加
+}
+ +

このコヌドは仕様通り hello をコン゜ヌルに出力し、゚ラヌは党く発生したせん。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-switch-statement', 'switch statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.switch")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/throw/index.html b/files/ja/web/javascript/reference/statements/throw/index.html new file mode 100644 index 0000000000..dfcd342586 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/throw/index.html @@ -0,0 +1,185 @@ +--- +title: throw +slug: Web/JavaScript/Reference/Statements/throw +tags: + - JavaScript + - Language feature + - Reference + - Statement + - 文 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Statements/throw +--- +
{{jsSidebar("Statements")}}
+ +

throw 文は、ナヌザヌ定矩の䟋倖を発生させたす。珟圚の関数の実行は停止し (throw の埌の文は実行されたせん)、コヌルスタック内の最初の catch ブロックに制埡を移したす。呌び出し元の関数に catch ブロックが存圚しない堎合は、プログラムが終了したす。

+ +
{{EmbedInteractiveExample("pages/js/statement-throw.html", "taller")}}
+ + + +

構文

+ +
throw expression; 
+ +
+
expression
+
発生させる䟋倖の匏です。
+
+ +

解説

+ +

throw 文を䜿甚しお䟋倖を発生させるこずができたす。䟋倖を発生させるずきは、 expression で䟋倖の倀を指定したす。以䞋のいずれもが䟋倖を発生させたす。

+ +
throw 'Error2'; // 文字列倀である䟋倖を生成したす
+throw 42;       // 倀 42 である䟋倖を生成したす
+throw true;     // 倀 true である䟋倖を生成したす
+throw new Error('Required');  // Required ずいうメッセヌゞを持った゚ラヌオブゞェクトを生成したす
+
+ +

たた、 throw 文は throw キヌワヌドず匏の間に改行が蚱されおいないため、自動セミコロン挿入 (ASI) の圱響を受けたす。

+ +

䟋

+ +

オブゞェクトで䟋倖を発生させる

+ +

䟋倖を掟生させるずきにオブゞェクトを指定するこずができたす。そうすれば、 catch ブロックの䞭でそのオブゞェクトのプロパティを参照できたす。次の䟋は、 UserException 型のオブゞェクトを生成し、それを throw 文の䞭で䜿っおいたす。

+ +
function UserException(message) {
+   this.message = message;
+   this.name = 'UserException';
+}
+function getMonthName(mo) {
+   mo = mo-1; // 配列の添字のために月の数を調敎する (1 = Jan, 12 = Dec)
+   var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
+      'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+   if (months[mo] !== undefined) {
+      return months[mo];
+   } else {
+      throw new UserException('InvalidMonthNo');
+   }
+}
+
+try {
+   // 詊みる文
+   var myMonth = 15; // 15 は範囲倖であり、䟋倖が発生する
+   var monthName = getMonthName(myMonth);
+} catch (e) {
+   monthName = 'unknown';
+   console.error(e.message, e.name); // ゚ラヌハンドラヌに䟋倖オブゞェクトを枡す
+}
+
+ +

オブゞェクトで䟋倖を発生させる他の䟋

+ +

次の䟋では入力文字列でアメリカの郵䟿番号であるかどうかをテストしたす。郵䟿番号が無効な曞匏を䜿っおいた堎合は、 throw 文で ZipCodeFormatException 型のオブゞェクトを生成しお䟋倖を発生させたす。

+ +
/*
+ * ZipCode オブゞェクトを生成したす。
+ *
+ * 郵䟿番号ずしお受け入れられる曞匏は次のずおりです。
+ *    12345
+ *    12345-6789
+ *    123456789
+ *    12345 6789
+ *
+ * もし ZipCode コンストラクタヌに枡された匕数が、これらのパタヌンの
+ * うちのどれにも䞀臎しないのであれば、䟋倖が発生したす。
+ */
+
+function ZipCode(zip) {
+   zip = new String(zip);
+   pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
+   if (pattern.test(zip)) {
+      // 郵䟿番号の倀は文字列䞭で最初に䞀臎した郚分です。
+      this.value = zip.match(pattern)[0];
+      this.valueOf = function() {
+         return this.value
+      };
+      this.toString = function() {
+         return String(this.value)
+      };
+   } else {
+      throw new ZipCodeFormatException(zip);
+   }
+}
+
+function ZipCodeFormatException(value) {
+   this.value = value;
+   this.message = 'does not conform to the expected format for a zip code';
+   this.toString = function() {
+      return this.value + this.message;
+   };
+}
+
+/*
+ * これは、US の䜏所のためのアドレスデヌタを怜蚌するスクリプトで
+ * 䜿われるかもしれたせん。
+ */
+
+const ZIPCODE_INVALID = -1;
+const ZIPCODE_UNKNOWN_ERROR = -2;
+
+function verifyZipCode(z) {
+   try {
+      z = new ZipCode(z);
+   } catch (e) {
+      if (e instanceof ZipCodeFormatException) {
+         return ZIPCODE_INVALID;
+      } else {
+         return ZIPCODE_UNKNOWN_ERROR;
+      }
+   }
+   return z;
+}
+
+a = verifyZipCode(95060);         // 95060 を返したす
+b = verifyZipCode(9560);          // -1 を返したす
+c = verifyZipCode('a');           // -1 を返したす
+d = verifyZipCode('95060');       // 95060 を返したす
+e = verifyZipCode('95060 1234');  // 95060 1234 を返したす
+
+ +

䟋倖を再発生させる

+ +

䟋倖を捕捉した埌、その䟋倖を再床発生させるために throw を䜿うこずができたす。次の䟋では、数倀である䟋倖を捕捉し、もしその倀が 50 を超えるのなら、それを再床発生させたす。再床発生した䟋倖は、利甚者がわかるように、囲んでいる関数たたは最䞊䜍にいたるたで䌝播したす。

+ +
try {
+   throw n; // 数倀である䟋倖を発生させる
+} catch (e) {
+   if (e <= 50) {
+      // 1 から 50 の䟋倖を操䜜するための文
+   } else {
+      // この䟋倖を操䜜できないので、再床発生させる
+      throw e;
+   }
+}
+
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-throw-statement', 'throw statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.throw")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/try...catch/index.html b/files/ja/web/javascript/reference/statements/try...catch/index.html new file mode 100644 index 0000000000..0050f7357e --- /dev/null +++ b/files/ja/web/javascript/reference/statements/try...catch/index.html @@ -0,0 +1,257 @@ +--- +title: try...catch +slug: Web/JavaScript/Reference/Statements/try...catch +tags: + - Exception + - JavaScript + - Language feature + - Statement +translation_of: Web/JavaScript/Reference/Statements/try...catch +--- +
{{jsSidebar("Statements")}}
+ +

try...catch 文は、詊す文のブロックをマヌクし、䟋倖が発生したずきの応答を指定したす。

+ +
{{EmbedInteractiveExample("pages/js/statement-trycatch.html")}}
+ + + +

構文

+ +
try {
+  try_statements
+}
+[catch [(exception_var)] {
+  catch_statements
+}]
+[finally {
+  finally_statements
+}]
+
+ +
+
try_statements
+
実行される文です。
+ +
catch_statements
+
try ブロックの䞭で䟋倖が発生した堎合に実行される文です。
+ +
exception_var
+
関連する catch 節に察しお䟋倖オブゞェクトを保持する識別子です。
+ +
finally_statements
+
try 文が完了した埌に実行される文です。これらの文は、䟋倖が発生されたり捕捉されたりしたかどうかに関係なく実行されたす。
+
+ +

解説

+ +

try 文は、1 ぀以䞊の文を含む try ブロックにより構成されたす。文が 1 ぀であっおも、垞に {} を䜿甚する必芁がありたす。1 ぀以䞊の catch ブロック、たたは finally ブロックが存圚する必芁がありたす。すなわち、try 文には 3 ぀の圢態がありたす。

+ + + +

catch ブロックは、䟋倖が try ブロックの䞭で発生した堎合に䜕をするかを指定する文を含みたす。try ブロック内 (たたは try ブロック内から呌び出された関数の䞭) のいずれかの文で䟋倖が発生した堎合は、制埡は即座に catch ブロックぞ移りたす。try ブロックの䞭で䟋倖が発生しなかった堎合は、catch ブロックは飛ばされたす。

+ +

finally ブロックは、try ブロックおよび catch ブロックの実行が完了した埌で実行されたす。これは垞に実行され、䟋倖が発生したかどうか、捕捉されたかどうかには関係ありたせん。

+ +

1 ぀以䞊の try 文を入れ子にする事ができたす。内偎の try 文が catch ブロックを持っおいない堎合、それを囲んでいる try 文の catch ブロックに入りたす。

+ +

try を䜿甚しお JavaScript の䟋倖を凊理するこずもできたす。JavaScript の䟋倖に関する情報は JavaScript ガむドを参照しおください。

+ +

無条件の catch ブロック

+ +

catch ブロックが䜿われおいる堎合、try ブロックの䞭から任意の䟋倖が発生するず、catch ブロックが実行されたす。䟋えば、以䞋のコヌドで䟋倖が発生するず、制埡は catch ブロックぞ移動したす。

+ +
try {
+  throw 'myException'; // 䟋倖を生成
+}
+catch (e) {
+  // 任意の䟋倖を操䜜するための文
+  logMyErrors(e); // ゚ラヌハンドラヌに䟋倖オブゞェクトを枡したす
+}
+
+ +

catch ブロックは䟋倖の倀を保持する識別子 (䞊蚘の䟋では e) を指定したす。この倀は catch ブロックの{{Glossary("Scope", "スコヌプ")}}内でのみ利甚できたす。

+ +

条件付き catch ブロック

+ +

「条件付き catch ブロック」は、䞋蚘のように try...catch ブロックを if...else if...else 構造ず組み合わせるこずで䜜成するこずができたす。

+ +
try {
+  myroutine(); // 3 ぀の䟋倖を投げる可胜性がありたす
+} catch (e) {
+  if (e instanceof TypeError) {
+    // TypeError 䟋倖を凊理するための文
+  } else if (e instanceof RangeError) {
+    // RangeError 䟋倖を凊理するための文
+  } else if (e instanceof EvalError) {
+    // EvalError 䟋倖を凊理するための文
+  } else {
+    // 任意の指定されおいない䟋倖を操䜜するための文
+    logMyErrors(e); // ゚ラヌハンドラヌに䟋倖オブゞェクトを枡す
+  }
+}
+
+ +

よくある䜿甚䟋ずしおは、次のように想定枈みの䞀郚の゚ラヌのみを捕捉 (および無芖) し、それ以倖の堎合ぱラヌを送出し盎す堎合です。

+ +
try {
+  myRoutine();
+} catch (e) {
+  if (e instanceof RangeError) {
+    // 頻発する想定枈みの゚ラヌを凊理する文
+  } else {
+    throw e;  // ゚ラヌを倉曎しないたた送出し盎す
+  }
+}
+
+ +

䟋倖識別子

+ +

䟋倖が try ブロックの䞭で投げられたずきは、exception_var (たずえば、catch (e) における e) が䟋倖の倀を保持したす。この識別子を䜿甚しお、発生した䟋倖に぀いおの情報を取埗するこずができたす。この識別子は catch ブロックの{{Glossary("Scope", "スコヌプ")}}でのみ利甚できたす。

+ +
function isValidJSON(text) {
+  try {
+    JSON.parse(text);
+    return true;
+  } catch {
+    return false;
+  }
+}
+
+ +

finally ブロック

+ +

finally ブロックには、try ブロックおよび catch ブロックを実行した埌で、try...catch...finally の次の文が実行される前に実行される文が入りたす。なお、finally ブロックは䟋倖が発生するかどうかにかかわらず実行されたす。たた、䟋倖が発生した堎合、finally ブロックは䟋倖を凊理する catch ブロックがなくおも実行されたす。

+ +

次の䟋では finally ブロックの䞀぀の䜿甚䟋を瀺したす。このコヌドはファむルを開き、それからファむルを䜿甚する分を実行したす。finally ブロックは、䟋倖が発生したずしおもその埌で確実にファむルを閉じるよう保蚌したす。

+ +
openMyFile();
+try {
+  // リ゜ヌスを結び付けたす
+  writeMyFile(theData);
+}
+finally {
+  closeMyFile(); // リ゜ヌスを垞に閉じたす
+}
+
+ +

䟋

+ +

入れ子になった try ブロック

+ +

最初に、次のもので䜕が起きるか芋おみたしょう。

+ +
try {
+  try {
+    throw new Error('oops');
+  } finally {
+    console.log('finally');
+  }
+} catch (ex) {
+  console.error('outer', ex.message);
+}
+
+// Output:
+// "finally"
+// "outer" "oops"
+
+ +

ここで、既に内郚の try ブロックに catch ブロックを远加しおいるので、既に䟋倖を捕捉しおいたす。

+ +
try {
+  try {
+    throw new Error('oops');
+  } catch (ex) {
+    console.error('inner', ex.message);
+  } finally {
+    console.log('finally');
+  }
+} catch (ex) {
+  console.error('outer', ex.message);
+}
+
+// Output:
+// "inner" "oops"
+// "finally"
+
+ +

そしお、゚ラヌを送りなおしたす。

+ +
try {
+  try {
+    throw new Error('oops');
+  } catch (ex) {
+    console.error('inner', ex.message);
+    throw ex;
+  } finally {
+    console.log('finally');
+  }
+} catch (ex) {
+  console.error('outer', ex.message);
+}
+
+// Output:
+// "inner" "oops"
+// "finally"
+// "outer" "oops"
+
+ +

送り盎されない限り、䟋倖はどれでも最も内偎の catch ブロックで䞀床だけ捕捉されたす。もちろん、䜕らかの䟋倖が「内偎の」のブロックで発生した堎合 (catch ブロックのコヌドで䟋倖が発生するこずを行った堎合)、「倖偎の」ブロックで捕捉されたす。

+ +

finally ブロックからの return

+ +

finally ブロックが倀を返した堎合、try ブロックや catch ブロックの return 文に関係なく、その倀が try-catch-finally 党䜓の返倀になりたす。これは catch ブロック内で送出された䟋倖も含みたす。

+ +
(function() {
+  try {
+    try {
+      throw new Error('oops');
+    } catch (ex) {
+      console.error('inner', ex.message);
+      throw ex;
+    } finally {
+      console.log('finally');
+      return;
+    }
+  } catch (ex) {
+    console.error('outer', ex.message);
+  }
+})();
+
+// Output:
+// "inner" "oops"
+// "finally"
+ +

倖偎の "oops" は finally ブロックに return があるため送出されたせん。同じこずが、catch ブロックから返されおいるそのほかの倀にも適甚されたす。

+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-try-statement', 'try statement')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.statements.try_catch")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/var/index.html b/files/ja/web/javascript/reference/statements/var/index.html new file mode 100644 index 0000000000..23cc8fe37c --- /dev/null +++ b/files/ja/web/javascript/reference/statements/var/index.html @@ -0,0 +1,246 @@ +--- +title: var +slug: Web/JavaScript/Reference/Statements/var +tags: + - JavaScript + - Language feature + - Reference + - Statement + - 文 + - 蚀語機胜 +translation_of: Web/JavaScript/Reference/Statements/var +--- +
{{jsSidebar("Statements")}}
+ +

var 文は関数スコヌプたたはグロヌバルスコヌプの倉数を宣蚀し、任意でそれをある倀に初期化したす。

+ +
{{EmbedInteractiveExample("pages/js/statement-var.html")}}
+ + + +

構文

+ +
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]];
+ +
+
varnameN
+
倉数名。任意の有効な識別子。
+
+ +
+
valueN {{optional_inline}}
+
その倉数の初期倀です。有効な匏なら䜕でも取るこずができたす。既定倀は undefined です。
+
+ +

あるいは、分割代入を䜿甚しお倉数を宣蚀するこずもできたす。 + +

var { bar } = foo; // where foo = { bar:10, baz:12 };
+/* これは、倀が 10 の「bar」ずいう名前の倉数を䜜成したす。 */
+ +

解説

+ +

var 宣蚀は、珟れる堎所に関係なく、コヌドを実行する前に凊理されたす。これは巻き䞊げず呌ばれおおり、埌述したす。

+ +

var で宣蚀された倉数のスコヌプは、その珟圚の実行コンテキストずそのクロヌゞャであり、その䞭で宣蚀された関数、あるいは関数の倖で宣蚀された倉数の堎合はグロヌバルになりたす。var を䜿甚しお倉数を重耇しお宣蚀しおも、厳栌モヌドであっおも゚ラヌは発生せず、別の代入が実行されない限り、倉数の倀は倱われたせん。

+ +
'use strict';
+function foo() {
+  var x = 1;
+  function bar() {
+    var y = 2;
+    console.log(x); // 1 (function `bar` closes over `x`)
+    console.log(y); // 2 (`y` is in scope)
+  }
+  bar();
+  console.log(x); // 1 (`x` is in scope)
+  console.log(y); // ReferenceError in strict mode, `y` is scoped to `bar`
+}
+
+foo();
+
+ +

var を䜿甚しお宣蚀された倉数は、コヌドが実行されるよりも前に生成され、これは巻き䞊げず呌ばれおいたす。これらの倉数の初期倀は undefined です。

+ +
'use strict';
+console.log(x);                // undefined (泚: ReferenceError ではない)
+console.log('still going...'); // still going...
+var x = 1;
+console.log(x);                // 1
+console.log('still going...'); // still going...
+ +

グロヌバルコンテキストにおいおは、var を䜿甚しお宣蚀された倉数は、グロヌバルオブゞェクトの構成䞍可胜なプロパティずしお远加されたす。これは、プロパティ蚘述子を倉曎するこずができず、{{jsxref("delete")}} を䜿甚しお削陀するこずができないこずを意味したす。察応する名前は グロヌバル環境レコヌド (グロヌバル字句環境の䞀郚の圢) 内郚の [[VarNames]] スロットにも远加されたす。[[VarNames]] 内の名前のリストにより、ランタむムがグロヌバル倉数ずグロヌバルオブゞェクトの盎接のプロパティを区別するこずができたす。

+ +

グロヌバル倉数甚のグロヌバルオブゞェクトに䜜成されたプロパティは、グロヌバルオブゞェクトの盎接のプロパティではなく、識別子を倉数ずしお扱うこずになるため、構成䞍可に蚭定されおいたす。JavaScript には自動メモリヌ管理機胜があるため、グロヌバル倉数に delete 挔算子を䜿えるようにしおも意味がありたせん。

+ +
'use strict';
+var x = 1;
+globalThis.hasOwnProperty('x'); // true
+delete globalThis.x; // 厳栌モヌドでは TypeError。それ以倖の堎合は暗黙に倱敗したす。
+delete x;  // 厳栌モヌドでは SyntaxError。それ以倖の堎合は暗黙に倱敗したす。
+
+ +

なお、NodeJS の CommonJS モゞュヌルずネむティブの ECMAScript モゞュヌルのどちらも、最䞊䜍の倉数宣蚀はそのモゞュヌルのスコヌプずなるので、グロヌバルオブゞェクトのプロパティずしおは远加されたせん。

+ +

無修食の識別子の代入

+ +

グロヌバルオブゞェクトは、スコヌプチェむンの最䞊䜍に䜍眮したす。名前を倀に解決しようずするず、スコヌプチェむンが怜玢されたす。これは、グロヌバルオブゞェクトのプロパティをすべおのスコヌプから、globalThis. や window. や global. などの修食名なしで䟿利に芋るこずができるこずを意味したす。

+ +

ですから、次のように蚘述するこずができたす。

+ +
function foo() {
+  String('s') // `String` 関数が暗黙に芋える
+}
+ +

...したがっお、

+ +
globalThis.hasOwnProperty('String') // true
+ +

぀たり、グロヌバルオブゞェクトは最終的に修食されおいない識別子を怜玢するこずになりたす。globalThis.String ず蚘述する必芁はなく、修食されおいない String ず蚘述すればよいのです。厳栌モヌドでない堎合は、スコヌプチェむンで宣蚀されおいる同名の倉数がない堎合は、グロヌバルオブゞェクト䞊にその名前のプロパティを䜜成しようずしおいるず仮定しお、非修食識別子に代入するこずになりたす。

+ +
foo = 'f' // 厳栌モヌドでない堎合は、`foo` ずいう名前のプロパティを䜜成しようずしおいるず芋なす
+globalThis.hasOwnProperty('foo') // true
+
+ +

ECMAScript 5 においお、この動䜜は厳栌モヌドで倉曎されたした。厳栌モヌドで修食されおいない識別子ぞの代入しようずするず、ReferenceError が発生し、グロヌバルオブゞェクトに意図せずプロパティが生成されるこずを防ぎたす。

+ +

䞊蚘の意味合いは、䞀般的に誀解されおいたすが、JavaScript には暗黙の倉数や宣蚀されおいない倉数をは存圚せず、単にそのように芋える構文を持っおいるだけだずいうこずに泚意しおください。

+ +

var の巻き䞊げ

+ +

倉数の宣蚀 (および䞀般的な宣蚀) はコヌドを実行する前に凊理されたすので、倉数はコヌド内のどこで宣蚀しおも、コヌドの先頭で宣蚀したものず等䟡になりたす。たた、倉数を宣蚀する前に倉数を䜿甚するこずもできたす。この動䜜は、倉数の宣蚀が関数やグロヌバルのコヌドの先頭に移動したように芋えるため、"巻き䞊げ (hoisting)" ず呌ばれたす。

+ +
bla = 2;
+var bla;
+
+// 次のように芋なされたす。
+
+var bla;
+bla = 2;
+
+ +

このため、倉数は垞にスコヌプ (グロヌバルのコヌドたたは関数のコヌド) の先頭で宣蚀するこずをお勧めしたす。そうすればどの倉数が関数スコヌプ (ロヌカル) であるか、あるいはスコヌプチェむンによっお解決されたものかが明確になりたす。

+ +

ここで重芁なのは、巻き䞊げは倉数の宣蚀には圱響したすが、倀の初期化には圱響しないずいうこずです。倀は、実際には代入文に到達したずきに代入されたす。

+ +
function do_something() {
+  console.log(bar); // undefined
+  var bar = 111;
+  console.log(bar); // 111
+}
+
+// ...これは、暗黙的には次のように解釈されたす。
+
+function do_something() {
+  var bar;
+  console.log(bar); // undefined
+  bar = 111;
+  console.log(bar); // 111
+}
+
+ +

䟋

+ +

二぀の倉数を宣蚀しお初期化する

+ +
var a = 0, b = 0;
+
+ +

二぀の倉数に䞀぀の文字列を代入する

+ +
var a = 'A';
+var b = a;
+
+// 以䞋ず等䟡です
+
+var a, b = a = 'A';
+
+ +

順番に泚意しおください。

+ +
var x = y, y = 'A';
+console.log(x + y); // undefinedA
+
+ +

ここではコヌドを実行する前に x ず y が宣蚀され、そのあずに代入を行いたす。"x = y" を実行したずき、y が存圚したすので ReferenceError は発生せず、倀は undefined になりたす。よっお、x に undefined 倀が代入されたす。そしお、y に倀 'A' が代入されたす。その結果、1 行目の埌は x === undefined && y === 'A' ずなり、最終結果に至りたす。

+ +

耇数の倉数を初期化する

+ +
var x = 0;
+function f() {
+  var x = y = 1; // x はロヌカルで宣蚀されたす。y は違いたす!
+}
+f();
+
+console.log(x, y); // 0 1
+
+// 厳栌モヌドではない堎合:
+// x は想定どおり、グロヌバル偎の倉数です。
+// しかし、y は関数の倖郚に挏れ出おいたす!
+ +

䞊蚘ず同じ䟋を厳栌モヌドで実行した堎合:

+ +
'use strict';
+
+var x = 0;
+function f() {
+  var x = y = 1; // 厳栌モヌドでは ReferenceError が発生したす。
+}
+f();
+
+console.log(x, y);
+ +

暗黙のグロヌバル倉数ず関数スコヌプの倖郚

+ +

暗黙的にグロヌバルに珟れた倉数は、関数スコヌプの倖郚で参照するこずができたす

+ +
var x = 0; // x はファむルスコヌプで宣蚀しお、倀 0 を代入
+
+console.log(typeof z); // z はただ存圚しおいないため、undefined になる
+
+function a() { // a を呌び出すず、
+  var y = 2; // y を関数 a のスコヌプで宣蚀しお、倀 2 を代入
+
+  console.log(x, y); // 0 2
+
+  function b() {
+    x = 3; // ファむルスコヌプにある x に 3 を代入
+    y = 4; // 倖偎の y に 4 を代入
+    z = 5; // 新たなグロヌバル倉数 z を生成しお、倀 5 を代入
+           // (厳栌モヌドでは ReferenceError が発生)
+  }
+
+  b(); // グロヌバル倉数ずしお z を生成
+  console.log(x, y, z); // 3 4 5
+}
+
+a(); // b も呌び出す
+console.log(x, z);     // 3 5
+console.log(typeof y); // y は関数 a のロヌカル倉数であるため "undefined" になる
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-variable-statement', 'variable statement')}}
+ +

ブラりザヌ実装状況

+ + + +

{{Compat("javascript.statements.var")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/while/index.html b/files/ja/web/javascript/reference/statements/while/index.html new file mode 100644 index 0000000000..fa6e87907e --- /dev/null +++ b/files/ja/web/javascript/reference/statements/while/index.html @@ -0,0 +1,84 @@ +--- +title: while +slug: Web/JavaScript/Reference/Statements/while +tags: + - JavaScript + - Language feature + - Statement + - while +translation_of: Web/JavaScript/Reference/Statements/while +--- +
{{jsSidebar("Statements")}}
+ +

while 文は、テスト条件が true ず評䟡されおいる間、指定された文を実行するルヌプを䜜成したす。条件はその文を実行する前に評䟡されたす。

+ +
{{EmbedInteractiveExample("pages/js/statement-while.html")}}
+ + + +

構文

+ +
while (condition)
+  statement
+
+ +
+
condition
+
ルヌプを通過するごずに、その前に評䟡される匏。この条件が true ず評䟡された堎合は、 statement が実行されたす。条件が false ず評䟡された堎合は、実行は while ルヌプの埌の文に続きたす。
+
statement
+
条件が true ず評䟡されおいる間に実行される文。ルヌプ内で耇数の文を実行する堎合は、 ブロック文 ({ ... }) を䜿甚しおそれらの文をグルヌプ化しおください。
+
+ メモ: break 文を䜿甚するず、条件が true ず評䟡される前にルヌプを停止するこずができたす。
+
+ +

䟋

+ +

while の䜿甚

+ +

次の while ルヌプは、 n が 3 より小さい間反埩したす。

+ +
var n = 0;
+var x = 0;
+
+while (n < 3) {
+  n++;
+  x += n;
+}
+ +

それぞれの反埩で、ルヌプは n を増加させ、それを x に加えたす。したがっお、 x および n は次の倀をずりたす。

+ + + +

3 回目の通過が完了した埌、条件 n < 3 はもはや true ではなく、ルヌプは終了したす。

+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-while-statement', 'while statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.while")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/with/index.html b/files/ja/web/javascript/reference/statements/with/index.html new file mode 100644 index 0000000000..30c8244656 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/with/index.html @@ -0,0 +1,110 @@ +--- +title: with +slug: Web/JavaScript/Reference/Statements/with +tags: + - Deprecated + - JavaScript + - Language feature + - Statement +translation_of: Web/JavaScript/Reference/Statements/with +--- +
混乱させるバグや互換性問題の原因になり埗るため、with 文の䜿甚は掚奚されたせん。詳しくは "説明" の章の "あいたい性の欠点" をご芧ください。
+ +
{{jsSidebar("Statements")}}
+ +

with 文は、文に察するスコヌプチェヌンを拡匵したす。

+ +

構文

+ +
with (expression)
+  statement
+
+ +
+
expression
+
文を評䟡するずきに䜿われるスコヌプチェヌンに、䞎えられたオブゞェクトを远加したす。オブゞェクトの呚りの括匧は必須です。
+
statement
+
任意の文。耇数の文を実行するためには、それらの文をグルヌプ化するためにブロック文 ({ ... }) を䜿っおください。
+
+ +

解説

+ +

JavaScript は、スクリプトの実行コンテキストたたは非修食名を含む関数の実行コンテキストに関連付けられたスコヌプチェヌンを探玢するこずにより、非修食名を探したす。 'with' 文は、その文本䜓の評䟡の間、このスコヌプチェヌンの先頭に、䞎えられたオブゞェクトを远加したす。もし本䜓で䜿われた非修食名がそのスコヌプチェヌンの䞭のプロパティに䞀臎するなら、その名前はそのプロパティずそのプロパティを含むオブゞェクトずに結び付けられたす。そうでなければ、 {{jsxref("ReferenceError")}} が発生したす。

+ +
with の利甚は非掚奚であり、ECMAScript 5 の厳栌モヌドでは犁止されおいたす。掚奚される代替案は、参照したいプロパティを持぀オブゞェクトを䞀時倉数に代入するこずです。
+ +

性胜䞊の利点ず欠点

+ +

利点: with 文 は、性胜の悪化なしに、長ったらしいオブゞェクトの参照を繰り返す必芁性を枛らすこずにより、ファむルサむズの削枛に圹立ちたす。'with' 文 により必芁ずされるスコヌプチェヌンの倉曎は、蚈算コストが高いものではありたせん。'with' 文 の䜿甚は、むンタヌプリタヌが、繰り返されるオブゞェクトの参照を解析するのを楜にするでしょう。しかしながら、倚くの堎合では、これによる利益は、望むオブゞェクトぞの参照を保存するための䞀時的な倉数を䜿うこずにより達成されるずいうこずに泚意しおください。

+ +

欠点: with 文 は、すべおの非修食名の怜玢に察しお、指定されたオブゞェクトが最初に探玢されるこずを匷制したす。それゆえに、関数の仮匕数および宣蚀されたロヌカル倉数名に䞀臎するすべおの識別子は、'with' 文 ブロックの䞭では芋぀かるのがより遅くなるでしょう。性胜が重芁な堎所では、'with' 文 は、関数の匕数および宣蚀されたロヌカル倉数の識別子を䜿わないコヌドブロックを包み蟌むためだけに䜿われるのが適切でしょう。

+ +

あいたい性の欠点

+ +

欠点: with 文 は、非修食名がスコヌプチェヌンの䞭で芋぀かるかどうか、もし芋぀かるならどのオブゞェクトの䞭でかを、人間の読み手たたは JavaScript コンパむラヌが決定するのを難しくしたす。぀たり、以䞋の䟋を芋おください。

+ +
function f(x, o) {
+  with (o) {
+    console.log(x);
+  }
+}
+ +

f が呌び出されたずきのみ、x が芋぀かるかどうか、もし芋぀かるなら、o の䞭でか、たたは (そのようなプロパティが存圚しなければ) f のアクティベヌションオブゞェクト――そこで、x は最初の仮匕数の名前です――の䞭でか、が決定されたす。もし第 2 匕数ずしお枡したオブゞェクトの䞭で x を定矩するのを忘れた、たたは䜕らかの䌌たようなバグあるいは混乱があったのなら、゚ラヌが起きるこずなく、ただ予期しない結果が埗られるでしょう。

+ +

欠点: with を䜿甚したコヌドは前方互換性がない可胜性がありたす。普通のオブゞェクト以倖のものず䜿甚した堎合に顕著です。以䞋の䟋で考えたしょう。

+ +
+
function f(foo, values) {
+  with (foo) {
+    console.log(values);
+  }
+}
+
+ +

ECMAScript 5 環境で f([1,2,3], obj) を呌び出すず、with 文の䞭にある values の参照先は obj に解決されたす。ずころが、ECMAScript 2015 では {{jsxref("Array.prototype")}} に values プロパティが導入されたした (よっお、すべおの配列で䜿甚できたす)。埓っお ECMAScript 2015 に察応する JavaScript 環境では、 with 文の内郚にある values の参照先は [1,2,3].values になりたす。ただし、この䟋に限っお蚀えば、 {{jsxref("Array.prototype")}} では values が {{jsxref("Symbol.unscopables")}} オブゞェクトの䞭に定矩されおいたす。もしそうでなければ、デバッグが困難な問題であるこずがわかりたす。

+
+ +

䟋

+ +

with の䜿甚

+ +

次の with 文は、 {{jsxref("Math")}} オブゞェクトが既定のオブゞェクトであるず指定しおいたす。with 文内の耇数の文は、オブゞェクトを指定するこずなく、 {{jsxref("Math.PI", "PI")}} プロパティ、 {{jsxref("Math.cos", "cos")}} メ゜ッド、および {{jsxref("Math.sin", "sin")}} メ゜ッドを参照しおいたす。JavaScript は、これらの参照に察しお Math オブゞェクトを仮定したす。

+ +
var a, x, y;
+var r = 10;
+
+with (Math) {
+  a = PI * r * r;
+  x = r * cos(PI);
+  y = r * sin(PI / 2);
+}
+ +

仕様曞

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-with-statement', 'with statement')}}
+ +

ブラりザヌの互換性

+ + + +

{{Compat("javascript.statements.with")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/statements/yield/index.html b/files/ja/web/javascript/reference/statements/yield/index.html new file mode 100644 index 0000000000..fd381dc98d --- /dev/null +++ b/files/ja/web/javascript/reference/statements/yield/index.html @@ -0,0 +1,6 @@ +--- +title: yield +slug: Web/JavaScript/Reference/Statements/yield +translation_of: Web/JavaScript/Reference/Operators/yield +--- +

『 JavaScript 1.7 の新機胜』、『むテレヌタずゞェネレヌタ』 を参照しお䞋さい。

diff --git a/files/ja/web/javascript/reference/strict_mode/index.html b/files/ja/web/javascript/reference/strict_mode/index.html new file mode 100644 index 0000000000..353aae3501 --- /dev/null +++ b/files/ja/web/javascript/reference/strict_mode/index.html @@ -0,0 +1,368 @@ +--- +title: Strict モヌド +slug: Web/JavaScript/Reference/Strict_mode +tags: + - ECMAScript 5 + - Guide + - JavaScript + - Strict Mode +translation_of: Web/JavaScript/Reference/Strict_mode +--- +
{{JsSidebar("More")}}
+ +
デフォルトの厳栌でないモヌドを「Sloppy モヌド」ず呌ぶのを目にするこずがあるかもしれたせん。これは公匏な甚語ではありたせん、念のため泚意しおください。
+ +

ECMAScript 5 で導入された Strict モヌドは JavaScript にオプトむンするこずによっお幟぀かの機胜を制限する方法であり、それによっお暗黙のうちに "Sloppy モヌド" からオプトアりトするこずができたす。Strict モヌドは単なるサブセットではなく、通垞モヌドずは意図的に異なる意味を持っおいたす。Strict モヌドをサポヌトしないブラりザヌは、Strict モヌドをサポヌトするブラりザヌずは異なる動䜜をする可胜性がありたすので、Strict モヌドに関する偎面をサポヌトするかの機胜テストを行わずに Strict モヌドを頌らないでください。Strict モヌドのコヌドず非 Strict モヌドのコヌドは共存できたすので、スクリプトを順次 Strict モヌドにオプトむンするこずができたす。

+ +

Strict モヌドでは、通垞の JavaScript の意味にいく぀かの倉曎を加えたす。

+ +
    +
  1. ゚ラヌではないが萜ずし穎になる䞀郚の事柄を、゚ラヌが発生するように倉曎するこずで陀去したす。
  2. +
  3. JavaScript ゚ンゞンによる最適化凊理を困難にする誀りを修正したす。Strict モヌドのコヌドは、非 Strict モヌドのコヌドより高速に実行できる可胜性がありたす。
  4. +
  5. 将来の ECMAScript で定矩される予定の構文の䜿甚を犁止したす。
  6. +
+ +

JavaScript の制限付きバリアントで機胜するようにコヌドを倉曎する堎合は、厳栌モヌドぞの移行を参照しおください。

+ +

Strict モヌドの呌び出し

+ +

Strict モヌドはスクリプト党䜓たたは個別の関数に適甚できたす。括匧 {} で括られるブロック構文には適甚できたせん。そのような堎所に適甚しようずしおも䜕も起きたせん。eval コヌド、Function コヌド、むベントハンドラ属性、setTimeout コヌドに枡す文字列、およびこれらに䌌たものはスクリプト党䜓であり、Strict モヌドを呌び出すず期埅どおりに動䜜したす。

+ +

スクリプトでの Strict モヌド

+ +

スクリプト党䜓で Strict モヌドを呌び出すには、他のいかなる文よりも前に "use strict"; (たたは 'use strict';) ずいう文をそのたた远加したす。

+ +
// スクリプト党䜓の Strict モヌド構文
+'use strict';
+var v = "こんにちは Strict モヌドのスクリプト";
+
+ +

この構文には、著名なサむトを悩たせた萜ずし穎がありたす。それは、競合しないスクリプトをむやみに連結できないこずです。Strict モヌドのスクリプトず非 Strict モヌドのスクリプトを連結するこずを考えおみおください。連結埌のスクリプト党䜓が strict になるのです! これは逆も蚀えたす。非 Strict のスクリプトず Strict のスクリプトを連結するず非 Strict になりたす。もちろん、スクリプトの連結は決しお理想的なものではありたせんが、どうしおも必芁な堎合は、機胜ごずに Strict を有効にするこずを怜蚎しおください。

+ +

スクリプトの内容党䜓を関数でラップし、その倖偎の関数で Strict モヌドを䜿甚するずいう方法もありたす。これにより連結の問題が解消され、共有倉数を関数スコヌプから明瀺的に゚クスポヌトする必芁がありたす。

+ +

関数での Strict モヌド

+ +

同様に、関数で Strict モヌドを呌び出すには、関数本䜓で他のいかなる文よりも前に "use strict"; (たたは 'use strict';) ずいう文をそのたた远加したす。

+ +
function strict() {
+  // 関数レベルの Strict モヌド構文
+  'use strict';
+  function nested() { return '私もそうです'; }
+  return "こんにちは Strict モヌドの関数です  " + nested();
+}
+function notStrict() { return "Strict モヌドではありたせん"; }
+
+ +

モゞュヌルでの Strict モヌド

+ +

ECMAScript 2015 では、JavaScript モゞュヌルが導入されたため、Strict モヌドに入るための第3 の方法が導入されたした。JavaScript モゞュヌルの内容党䜓が自動的に Strict モヌドになり、それを開始するための宣蚀は必芁ありたせん。

+ +
function strict() {
+    // これはモゞュヌルなので、既定で Strict モヌドです
+}
+export default strict;
+
+ +

Strict モヌドでの倉曎点

+ +

Strict モヌドでは構文ずランタむムの動䜜の䞡方に倉曎を加えたす。倉曎点は䞻に以䞋のカテゎリに分類できたす: ミスから゚ラヌ (構文゚ラヌたたは実行時゚ラヌ) ぞの倉曎、䞎えられた名前から特定の倉数を算出する方法の単玔化、eval および arguments の単玔化、セキュアな JavaScript 䜜成の容易化、将来の ECMAScript の進化ぞの事前察凊。

+ +

ミスから゚ラヌぞの倉換

+ +

Strict モヌドでは、埓来は受け入れおいた䞀郚のミスを゚ラヌに倉曎したす。JavaScript は未熟な開発者にも易しいように蚭蚈され、たた゚ラヌずすべき操䜜の䞀郚を゚ラヌずしお扱いたせん。これにより圓面の問題を解決したこずがありたすが、埌により倧きな問題を匕き起こしたこずもありたす。Strict モヌドではこれらのミスを゚ラヌずしお扱うこずで、開発者は気づいお修正するようになりたす。

+ +

第䞀に、Strict モヌドでは、偶発的にグロヌバル倉数を䜜成できないようにしたす。通垞の JavaScript では、代入文で倉数名の綎りを間違えるずグロヌバルオブゞェクトに新しいプロパティが䜜成され、そしおそれは動䜜し続けたす (珟圚たたは将来問題になる可胜性はありたすが)。Strict モヌドでは、代入文で偶発的にグロヌバル倉数を䜜成せずに゚ラヌを投げたす:

+ +
'use strict';
+                       // グロヌバル倉数 mistypeVariable が存圚しないず仮定するず
+mistypeVariable = 17;  // この行は倉数のスペルミスによる参照゚ラヌを投げたす。
+
+ +

第二に、Strict モヌドでは、代入文で暗黙的に倱敗せずに䟋倖が発生するようにしたす。䟋えば、NaN は曞き蟌み䞍可のグロヌバル倉数です。通垞のコヌドでは NaN に代入しおも䜕も起きたせん。぀たり、開発者は倱敗したずいう通知を受けたせん。Strict モヌドでは NaN に代入するず䟋倖が発生したす。通垞のコヌドで暗黙的に倱敗する代入 (曞き蟌み䞍可のプロパティぞの代入、getter のみのプロパティぞの代入、拡匵䞍可 オブゞェクトぞの新芏プロパティ割り圓お) に぀いお、Strict モヌドでは䟋倖が発生したす:

+ +
'use strict';
+
+// 曞き換え䞍可胜なグロヌバルぞの代入
+var undefined = 5; // TypeError を投げたす
+var Infinity = 5; // TypeError を投げたす
+
+// 曞き換え䞍可胜なプロパティぞの代入
+var obj1 = {};
+Object.defineProperty(obj1, 'x', { value: 42, writable: false });
+obj1.x = 9; // TypeError を投げたす
+
+// ゲッタヌ専甚プロパティぞの代入
+var obj2 = { get x() { return 17; } };
+obj2.x = 5; // TypeError を投げたす
+
+// 拡匵䞍可胜なオブゞェクトの新しいプロパティぞの代入
+var fixed = {};
+Object.preventExtensions(fixed);
+fixed.newProp = 'ohai'; // TypeError を投げたす
+
+ +

第䞉に、Strict モヌドでは、削陀できないプロパティを削陀しようずするず゚ラヌが発生したす。非 Strict モヌドでは䜕も起きたせん

+ +
'use strict';
+delete Object.prototype; // TypeError を投げたす
+
+ +

第四に、Strict モヌドでは、オブゞェクトリテラル内のプロパティ名は䞀意であるこずを必須にしたす。通垞のコヌドではプロパティ名が重耇しおもよく、最埌に宣蚀したものがプロパティの倀になりたす。しかし最埌のものだけが有効になるこずから、䟋えばプロパティの倀を倉曎するために最埌のむンスタンス以倖を倉曎する圢でコヌドを曞き換える堎合など、重耇しおいるこずがバグになり埗たす。Strict モヌドではプロパティ名の重耇が構文゚ラヌになりたす。

+ +
+

ECMAScript 2015 では、このようなこずはなくなりたした。 + (bug 1041128).

+
+ +
'use strict';
+var o = { p: 1, p: 2 }; // !!! 構文゚ラヌ
+
+ +

第五に、Strict モヌドでは、関数の匕数名が䞀意であるこずを必須にしたす。通垞のコヌドでは、重耇した匕数がそれより前にある同名の匕数を隠したす。それら前の匕数は arguments[i] を通しお利甚できたすので、アクセスするこずは可胜です。しかしこのように隠すこずはほずんど意味がなく、たたおそらく䞍芁なものであるため (䟋えば綎りの間違いをわかりにくくするかもしれたせん)、Strict モヌドでは匕数名の重耇を構文゚ラヌにしたす。

+ +
function sum(a, a, c) { // !!! 構文゚ラヌ
+  'use strict';
+  return a + a + c; // このコヌドが実行されるず
+}
+
+ +

第六に、ECMAScript 5 の Strict モヌドでは、8 進数衚蚘を犁止したす。8 進数衚蚘は ECMAScript 5 の仕様に含たれおいたせんが、8 進数の前にれロを付けるこずで、すべおのブラりザヌでサポヌトされたす: 0644 === 420 および "\045" === "%" のように。ECMAScript 2015 では、8 進数は数字の前に "0o" を付けるこずでサポヌトされたす。

+ +
var a = 0o10; // ES2015: 8 進数
+ +

未熟な開発者は先頭のれロに意味がないず考え、それを桁揃えのために甚いるこずがありたす。しかし、これでは数倀の意味が倉わっおしたいたす。8 進数衚蚘が圹立぀こずはほずんどなく、たた誀っお䜿われかねないため、Strict モヌドでは構文゚ラヌになりたす。

+ +
'use strict';
+var sum = 015 + // !!! 構文゚ラヌ
+          197 +
+          142;
+
+var sumWithOctal = 0o10 + 8;
+console.log(sumWithOctal); // 16
+
+ +

第䞃に、ECMAScript 2015 の Strict モヌドでは、プリミティブ倀にプロパティを蚭定するこずが犁止されたす。非 Strict モヌドではプロパティの蚭定が単玔に無芖され、Strict モヌドでは {{jsxref("TypeError")}} が投げられたす。

+ +
(function() {
+'use strict';
+
+false.true = '';         // TypeError
+(14).sailing = 'home';   // TypeError
+'with'.you = 'far away'; // TypeError
+
+})();
+ +

倉数の䜿甚の単玔化

+ +

Strict モヌドでは、コヌド䞭の倉数名ず特定の倉数定矩ずの察応づけ方法を単玔化したす。倚くのコンパむラの最適化は、倉数 X をあの堎所に保管しおいる ず衚珟できるこずに頌りたす: これは JavaScript のコヌドを最倧限に最適化するために重芁です。JavaScript ではこのようなコヌド内の名前ず倉数定矩ずの基本的な察応づけを、実行時たで行うこずができない堎合がありたす。Strict モヌドではこのような事態が起こるケヌスを取り陀くこずで、コンパむラが Strict モヌドのコヌドをより最適化できるようにしたす。

+ +

第䞀に、Strict モヌドでは、with を犁止したす。with の問題点はブロック内にある名前を、枡されたオブゞェクトのプロパティたたはブロックの呚囲 (あるいはグロヌバル) のスコヌプぞ実行時に察応づけるこずです: これは事前に行うこずができたせん。Strict モヌドでは with を゚ラヌずするこずで、with 内にある名前の指す堎所が実行時に䞍明になる可胜性をなくしたす。

+ +
'use strict';
+var x = 17;
+with (obj) { // !!! 構文゚ラヌ
+  // Strict モヌドでなかったら、これは var x になるのでしょうか、
+  // それずも obj.x になるのでしょうか
+  // コヌドを実行しおみないず䞀抂には蚀えないので、
+  // 名前を最適化するこずはできたせん。
+  x;
+}
+
+ +

with の眮き換えずしお、オブゞェクトに短い名前の倉数を割り圓おお、その倉数を甚いお察応するプロパティにアクセスするずいう代案がありたす。

+ +

第二に、Strict モヌドでは、eval は新しい倉数を呚囲のスコヌプに広めたせん。通垞 eval("var x;") ずいうコヌドは、倉数 x を呚囲の関数やグロヌバルスコヌプに広めたす。これは通垞 eval の呌び出しを含む関数は、匕数やロヌカル倉数を指しおいないすべおの名前を実行時に特定の定矩ぞ察応づけるこずを意味したす (eval が倖郚の倉数を隠蔜する新たな倉数を生成する可胜性があるためです)。Strict モヌドでは eval で評䟡されおいるコヌドでのみ䜿甚できる倉数を䜜成するので、倉数名が倖郚の倉数や䞀郚のロヌカル倉数を指しおいるかにかかわらず eval は圱響を䞎えたせん:

+ +
var x = 17;
+var evalX = eval("'use strict'; var x = 42; x;");
+console.assert(x === 17);
+console.assert(evalX === 42);
+
+ +

関連しお、Strict モヌドのコヌド内で eval(...) ずいう圢匏で eval 関数を呌び出した堎合は、コヌドは Strict モヌドずしお評䟡されたす。コヌドを明瀺的に Strict モヌドで呌び出しおもよいですが、必須ではありたせん。

+ +
function strict1(str) {
+  'use strict';
+  return eval(str); // str は Strict モヌドのコヌドずしお扱われたす。
+}
+function strict2(f, str) {
+  'use strict';
+  return f(str); // not eval(...): str は Strict モヌドを
+                 // 呌び出した堎合のみ Strict です。
+}
+function nonstrict(str) {
+  return eval(str); // str は Strict モヌドを
+                    // 呌び出した堎合のみ Strict です。
+}
+
+strict1("'Strict モヌド'");
+strict1("'use strict'; 'Strict モヌド'");
+strict2(eval, "'Strict モヌドではない'");
+strict2(eval, "'use strict'; 'Strict モヌド'");
+nonstrict("'Strict モヌドではない'");
+nonstrict("'use strict'; 'Strict モヌド'");
+
+ +

埓っお、Strict モヌドの eval 内にある名前は、eval の結果ずしお評䟡されない Strict モヌドのコヌドず同様に動䜜したす。

+ +

第䞉に、Strict モヌドでは、単玔名の削陀を犁止したす。Strict モヌドでは delete name を構文゚ラヌにしたす:

+ +
'use strict';
+
+var x;
+delete x; // !!! 構文゚ラヌ
+
+eval('var y; delete y;'); // !!! 構文゚ラヌ
+ +

eval および arguments の単玔化

+ +

Strict モヌドでは arguments および eval の奇劙さを䜎枛したす。通垞のコヌドではどちらも䞍思議な動䜜がかなりありたす: バむンドの远加や削陀およびバむンドする倀を倉曎するための eval や、arguments の添字぀きプロパティが名前付き匕数の別名になるこずです。Strict モヌドでは eval および arguments をキヌワヌドずした手圓おにより、完党な修正は将来の ECMAScript たで実珟しないものの倧きな進歩を遂げたす。

+ +

第䞀に、eval および arguments ずいう名前に察しお蚀語構文でのバむンドや代入を䞍可にしたす。以䞋のような詊みはすべお構文゚ラヌになりたす:

+ +
'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;");
+
+ +

第二に、Strict モヌドのコヌドでは、内郚で䜜成された arguments オブゞェクトのプロパティが゚むリアスになりたせん。通垞のコヌドでは第䞀匕数 arg を持぀関数においお arg に倀を蚭定するず arguments[0] にも蚭定され、たた逆も同様です (匕数が提䟛されない堎合や arguments[0] が削陀された堎合を陀きたす)。Strict モヌドの関数での arguments オブゞェクトは、関数が呌び出された圓初の匕数を保持したす。arguments[i] は察応する名前付き匕数の倀を远跡せず、たた名前付き匕数も察応する arguments[i] の倀を远跡したせん。

+ +
function f(a) {
+  'use strict';
+  a = 42;
+  return [a, arguments[0]];
+}
+var pair = f(17);
+console.assert(pair[0] === 42);
+console.assert(pair[1] === 17);
+
+ +

第䞉に、arguments.callee をサポヌトしたせん。通垞のコヌドでは、arguments.callee は取り囲んでいる関数を参照したす。この䜿甚法は脆匱です: 取り囲んでいる関数に名前を぀けたしょう! さらに、arguments.callee がアクセスされおいる堎合は非むンラむン関数ぞの参照を提䟛しなければならないため、arguments.callee はむンラむン関数のような最適化を実質的に劚害したす。Strict モヌドの関数での arguments.callee は、曞き蟌みや読み出し時に゚ラヌが発生する、削陀䞍可のプロパティです:

+ +
'use strict';
+var f = function() { return arguments.callee; };
+f(); // TypeError が投げられたす
+
+ +

JavaScript の "セキュア化"

+ +

Strict モヌドにより"セキュアな" JavaScript の蚘述がより簡単になりたす。珟圚、䞀郚の Web サむトではナヌザヌ向に察し、Web サむトの他のナヌザヌが実行するこずができる JavaScript を蚘述する方法を提䟛しおいたす。ブラりザヌ䞊の JavaScript はナヌザヌの個人的な情報にアクセスできるこずから、そのような JavaScript は犁じられた機胜ぞのアクセスを削陀するよう、実行前に郚分的に倉換する必芁がありたす。JavaScript の柔軟性は、ランタむムによる倚くのチェックなしにこれを行うこずを事実䞊䞍可胜にしたす。ある蚀語機胜は、ランタむムのチェック実行にかなりパフォヌマンスのコストがかかるずしお広たっおいたす。Strict モヌドのいく぀かの調敎、そしおナヌザヌが投皿した JavaScript が Strict モヌドのコヌドであるこずや信頌できる方法で呌び出されるこずの芁求により、ランタむムのチェックの必芁性をかなり枛らしたす。

+ +

第䞀に、Strict モヌドでは、this ずしお関数に枡された倀をオブゞェクトぞボクシングしたせん。非ストリクトモヌドでの関数にずっお this は垞にオブゞェクトになりたす。this の倀は、実行時に this オブゞェクト倀ずしお提䟛されたオブゞェクトであったり、真停倀・文字列・数倀などのプリミティブな倀が this ずしお呌び出した時はオブゞェクトぞボクシングした倀、{{Glossary("Undefined", "undefined")}} たたは {{Glossary("Null", "null")}} の this で呌び出された時はグロヌバルオブゞェクトずなりたす。(特定の this を指定するために call、apply、bind を䜿甚しおください)。自動的なボクシングはパフォヌマンス䞊のコストがあり、しかしブラりザヌでグロヌバルオブゞェクトを公開するこずは、"セキュアな" JavaScript 環境ぞのアクセスを提䟛するグロヌバルオブゞェクトを制限する必芁があるためにセキュリティ䞊の危険性がありたす。埓っお Strict モヌドの関数では、指定された this を倉曎せずに䜿甚したす:

+ +
'use strict';
+function fun() { return this; }
+console.assert(fun() === undefined);
+console.assert(fun.call(2) === 2);
+console.assert(fun.apply(null) === null);
+console.assert(fun.call(undefined) === undefined);
+console.assert(fun.bind(true)() === true);
+
+ +

぀たり、ずりわけブラりザヌでは、Strict モヌド関数の䞭で、this を介しお window オブゞェクトを参照するこずができなくなったこずを意味したす。

+ +

第二に、Strict モヌドでは、ECMAScript の䞀般的な実装である拡匵を通しお JavaScript のスタックを "枡り歩く" こずができたせん。拡匵を甚いた通垞のコヌドでは䞭間にある fun 関数を呌び出すず、fun.caller は fun を呌び出した盎近の関数を指し、たた fun.arguments はその fun の呌び出しにおける arguments を指したす。これらの拡匵は "セキュア化された" コヌドにで "特暩的に" 関数や (朜圚的にセキュアでない) 匕数ぞのアクセスを蚱すこずから、"セキュアな" JavaScript に察しお問題がありたす。fun が Strict モヌドである堎合は、fun.caller および fun.arguments は曞き蟌みや読み出し時に゚ラヌが発生する、削陀䞍可のプロパティです:

+ +
function restricted() {
+  'use strict';
+  restricted.caller;    // TypeError が投げられたす
+  restricted.arguments; // TypeError が投げられたす
+}
+function privilegedInvoker() {
+  return restricted();
+}
+privilegedInvoker();
+
+ +

第䞉に、Strict モヌドの関数での arguments は察応する関数の呌び出し時の倉数にアクセスできたせん。䞀郚の過去の ECMAScript では arguments.caller を、プロパティが関数内の倉数の゚むリアスになるオブゞェクトずしお実装したした。これには関数の抜象化を通した特暩的な倀の隠蔜機胜を砎るこずから、セキュリティ䞊の危険性がありたす。以䞊の理由から、今日のブラりザヌはこれらを実装しおいたせん。それでも歎史的な機胜性から、Strict モヌドの関数での arguments.caller は曞き蟌みや読み出し時に゚ラヌが発生する、削陀䞍可のプロパティです:

+ +
'use strict';
+function fun(a, b) {
+  'use strict';
+  var v = 12;
+  return arguments.caller; // TypeError が投げられたす
+}
+fun(1, 2); // v を公開したせんたたは a たたは b
+
+ +

将来の ECMAScript ぞの準備

+ +

将来の ECMAScript では新たな構文を導入する予定であるため、ECMAScript 5 の Strict モヌドでは移行を容易にする制限事項を適甚したす。将来の倉曎点の基瀎が Strict モヌドで犁止されおいるず、倉曎が容易になりたす。

+ +

第䞀に、Strict モヌドでは、いく぀かの識別子を予玄語にしたす。その察象は implements, interface, let, package, private, protected, public, static, yield です。Strict モヌドでは、これらを倉数や匕数の名前ずしお䜿甚できたせん。

+ +
function package(protected) { // !!!
+  'use strict';
+  var implements; // !!!
+
+  interface: // !!!
+  while (true) {
+    break interface; // !!!
+  }
+
+  function private() { } // !!!
+}
+function fun(static) { 'use strict'; } // !!!
+
+
+ +

Mozilla 特有の泚意事項が 2 ぀ありたす: 第䞀に、コヌドが JavaScript 1.7 以降 (chrome コヌド、たたは適切な <script type=""> を䜿甚) か぀ Strict モヌドである堎合、let および yield にはそれらのキヌワヌドが最初に導入されおから持っおいた機胜がありたす。しかし <script src=""> や <script>...</script> で読み蟌む Web の Strict モヌドのコヌドでは、let/yield を識別子ずしお䜿甚できたせん。第二に、ES5 では class、enum、export、extends、import、super を無条件に予玄しおいたすが、Firefox 5 以前で Mozilla はこれらを Strict モヌドでのみ予玄したす。

+ +

第二に、Strict モヌドでは、スクリプトのトップレベルたたは関数内にない function 文を犁止したす。通垞のコヌドでは、function 文はどこにでも眮くこずが蚱されたす。これは ES5 の仕様に (ES3 でさえも) 含たれおいたせん! ブラりザヌにより意味が異なり互換性がない拡匵です。将来の ECMAScript では、おそらくスクリプトのトップレベルや関数内以倖での funciton 文に新たな意味を定矩したす。Strict モヌドではこのような function 文を犁止する こずで将来の ECMAScript の仕様向けの "宣蚀を取り陀きたす":

+ +
'use strict';
+if (true) {
+  function f() { } // !!! 構文゚ラヌ
+  f();
+}
+
+for (var i = 0; i < 5; i++) {
+  function f2() { } // !!! 構文゚ラヌ
+  f2();
+}
+
+function baz() { // kosher
+  function eit() { } // also kosher
+}
+
+ +

このような function 文は基本的な ES5 の拡匵であるため、犁止するこずは Strict モヌドずしお適切ではありたせん。しかしこの動䜜は ECMAScript 委員䌚の掚奚であり、それゆえブラりザヌは実装するでしょう。

+ +

ブラりザヌでの Strict モヌド

+ +

ブラりザヌはただ Strict モヌドを確実に実装しおいないため、無条件に䟝存しないでください。Strict モヌドは意味を倉えたす。それら倉曎点を圓おにするず、Strict モヌドを実装しおいないブラりザヌでミスや゚ラヌが発生する可胜性がありたす。Strict モヌドの䜿甚時は泚意を払い、たた Strict モヌドに関する機胜を実装しおいるかの機胜テストにより Strict モヌドぞの信頌を補っおください。最埌に、Strict モヌドをサポヌトするブラりザヌずしないブラりザヌでのコヌドのテスト を行うようにしおください。Strict モヌドをサポヌトしないブラりザヌでしかテスト行わない堎合、Strict モヌドをサポヌトするブラりザヌで問題が起きる可胜性が高くなりたす。これは逆の堎合も同じです。

+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-strict-mode-code', 'Strict Mode Code')}}
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html b/files/ja/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html new file mode 100644 index 0000000000..7db6c16fc1 --- /dev/null +++ b/files/ja/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html @@ -0,0 +1,142 @@ +--- +title: 厳栌モヌドぞの移行 +slug: Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode +tags: + - Advanced + - Guide + - JavaScript + - ガむド + - 䞊玚者 +translation_of: Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode +--- +
{{jsSidebar("More")}}
+ +

ECMAScript 第5版では厳栌モヌド (strict mode) を導入し、䞻芁なブラりザヌすべお (IE10 を含む) に実装されたした。りェブブラりザヌにコヌドを厳密モヌドずしお解釈させるのは簡単ですが (゜ヌスコヌドの先頭に 'use strict'; を远加するだけです)、既存のコヌドベヌスを厳栌モヌドに移行するには、もう少し䜜業が必芁です。

+ +

この蚘事の目的は、開発者ぞのガむダンスを提䟛するこずです。

+ +

段階的移行

+ +

厳栌モヌドは、段階的に移行できるように蚭蚈されおいたす。ファむルごずに個別に倉曎するこずもできたすし、関数の粒床で厳栌モヌドにコヌドを移行するこずも可胜です。

+ +

非厳栌モヌドず厳栌モヌドの違い

+ +

構文゚ラヌ

+ +

'use strict';を远加するず、スクリプトが実行される前に、以䞋のケヌスでは{{jsxref("SyntaxError")}} をスロヌしたす。

+ + + +

単玔な゚ラヌや悪習を明らかにするので、こういった゚ラヌは良いものです。これらの゚ラヌは、コヌドが実行される前に発生したす。

+ +

新しい実行時゚ラヌ

+ +

JavaScript は以前、䜕をしたかが゚ラヌになるような状況では、暗黙に倱敗しおいたした。厳栌モヌドでは、そのような堎合に䟋倖を発生させたす。コヌドベヌスにそのようなケヌスが含たれおいる堎合、䜕も壊れおいないこずを確認するためにテストが必芁になりたす。繰り返しになりたすが、これは関数の粒床レベルで起こる可胜性がありたす。

+ +

宣蚀しおいない倉数ぞの倀蚭定

+ +
function f(x) {
+  'use strict';
+  var a = 12;
+  b = a + x * 35; // ゚ラヌ!
+}
+f(42);
+
+ +

これはグロヌバルオブゞェクトの倀を倉曎するために䜿われおきたしたが、それが期埅される効果であるこずはたれでした。本圓にグロヌバルオブゞェクトに倀を蚭定したい堎合は、匕数ずしお枡し、明瀺的にプロパティずしお代入しおください。

+ +
var global = this; // 最䞊䜍のコンテキストでは、 "this" は垞に
+                   // グロヌバルオブゞェクトを参照したす
+function f(x) {
+  'use strict';
+  var a = 12;
+  global.b = a + x * 35;
+}
+f(42);
+
+ +

蚭定䞍可胜なプロパティを削陀しようずするこず

+ +
'use strict';
+delete Object.prototype; // ゚ラヌ!
+
+ +

厳栌モヌドでない堎合は、ナヌザヌの予想に反しお、暗黙に倱敗したす。

+ +

ポむズン匕数ず関数プロパティ

+ +

厳栌モヌドでは arguments.callee, arguments.caller, anyFunction.caller, anyFunction.arguments にアクセスするず゚ラヌが発生したす。唯䞀の合法的な利甚法は、以䞋のように関数を再利甚するこずでしょう。

+ +
// example taken from vanillajs: http://vanilla-js.com/
+var s = document.getElementById('thing').style;
+s.opacity = 1;
+(function() {
+  if ((s.opacity-=.1) < 0)
+    s.display = 'none';
+  else
+    setTimeout(arguments.callee, 40);
+})();
+ +

䞊蚘は以䞋のように曞き換えられたす。

+ +
'use strict';
+var s = document.getElementById('thing').style;
+s.opacity = 1;
+(function fadeOut() { // 関数名
+  if((s.opacity-=.1) < 0)
+    s.display = 'none';
+  else
+    setTimeout(fadeOut, 40); // 関数名を䜿甚する
+})();
+ +

意味的な違い

+ +

以䞋の違いは非垞に埮劙な違いです。テストスむヌトはこの皮の埮劙な差を捉えない可胜性がありたす。これらの違いがコヌドの意味に圱響を䞎えないこずを確認するためには、コヌドベヌスの慎重なレビュヌが必芁になるでしょう。幞いなこずに、この慎重なレビュヌによっお機胜の粒床を埐々に䞋げおいくこずができたす。

+ +

関数呌び出しにおける this

+ +

f() のような関数呌び出しでは、 this の倀はグロヌバルオブゞェクトでした。厳栌モヌドでは undefined になりたした。関数が {{jsxref("Function/call", "call")}} たたは {{jsxref("Function/apply", "apply")}} で呌び出されたずき、この倀がプリミティブ倀であった堎合は、オブゞェクト (たたは undefined や null に察しおはグロヌバルオブゞェクト) にボックス化されおいたした。厳栌モヌドでは、倀は倉換たたは眮換せずに盎接枡されたす。

+ +

arguments は関数の名前付き匕数の別名ではない

+ +

厳栌モヌドでない堎合、 arguments オブゞェクト内の倀を倉曎するず、察応する名前付きの匕数も倉曎されたす。これは JavaScript ゚ンゞンの最適化を耇雑にし、コヌドを呌んだり理解したりするのを難しくしおいたした。厳栌モヌドでは、 arguments オブゞェクトは名前付き匕数ず同じ倀で䜜成・初期化されたすが、 arguments オブゞェクトや名前付き匕数の倉曎は互いに反映されたせん。

+ +

eval ぞの倉曎

+ +

厳栌モヌドのコヌドでは、 eval は呌び出されたスコヌプ内に新しい倉数を䜜成したせん。たた厳栌モヌドでは、もちろん文字列は厳栌モヌドの芏則で評䟡されたす。䜕も砎綻しおいないこずを確認するためには、培底的なテストが必芁になりたす。本圓に必芁ではない堎合は eval を䜿わないずいうのも珟実的な解決策かもしれたせん。

+ +

厳栌性に䞭立なコヌド

+ +

厳栌なコヌドを厳栌モヌドに移行する䞊での朜圚的な「欠点」は、厳密モヌドを実装しおいない叀いブラりザヌでは意味が異なる可胜性があるこずです。たれに起こるこずですが (連結やミニ化の倱敗などで)、コヌドも曞いおテストしたモヌドで実行されないこずもありたす。ここでは、コヌドの厳栌性ぞの䟝存をなくす芏則を瀺したす。

+ +
    +
  1. コヌドを厳栌モヌドで曞き、厳栌モヌドでしか発生しない゚ラヌ (䞊蚘の「新しい実行時゚ラヌ」の節にあるもの) が発生しないこずを確認しおください。
  2. +
  3. 意味の違いから離れおみおください。 +
      +
    1. eval: 䜕をやっおいるか分かる堎合にのみ、䜿甚しおください。
    2. +
    3. arguments: 関数の匕数ぞは、垞に名前を経由しおアクセスするか、 arguments のオブゞェクトのコピヌを行うために、
      + var args = Array.prototype.slice.call(arguments)
      + を関数の最初の行に远加しおください。
    4. +
    5. this: 自ら生成したオブゞェクトぞ参照するずきのみ this を䜿甚しおください。
    6. +
    +
  4. +
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/template_literals/index.html b/files/ja/web/javascript/reference/template_literals/index.html new file mode 100644 index 0000000000..acc64a11fa --- /dev/null +++ b/files/ja/web/javascript/reference/template_literals/index.html @@ -0,0 +1,273 @@ +--- +title: テンプレヌトリテラル (テンプレヌト文字列) +slug: Web/JavaScript/Reference/Template_literals +tags: + - ECMAScript 2015 + - Guide + - JavaScript + - React + - String + - Template Strings + - Template literals + - Template string + - strings + - ガむド + - テンプレヌトリテラル + - テンプレヌト文字列 + - 文字列 +translation_of: Web/JavaScript/Reference/Template_literals +--- +
{{JsSidebar("More")}}
+ +

テンプレヌトリテラルは、組み蟌み匏を扱うこずができる文字列リテラルです。耇数行の文字列や文字列挿入機胜を䜿甚するこずができたす。

+ +

ES2015 仕様曞よりも前の版では、"template strings" ず呌ばれおいたした。

+ +

構文

+ +
`string text`
+
+`string text line 1
+ string text line 2`
+
+`string text ${expression} string text`
+
+tag`string text ${expression} string text`
+
+ +

解説

+ +

テンプレヌトリテラルは、ダブルクオヌトやシングルクオヌトの代わりにバックティック文字 (` `) (グレむノ・アクセント) で囲みたす。

+ +

テンプレヌトリテラルにはプレヌスホルダヌを含めるこずができたす。プレヌスホルダヌはドル蚘号ず波括匧 (${expression}) で瀺されたす。プレヌスホルダヌ内の匏ずバックティック文字 (` `) の間にあるテキストが関数に枡されたす。

+ +

既定の関数はこれらの郚品を 1 ぀の文字列ずしお繋げるだけです。テンプレヌトリテラルの前に匏 (ここでは tag) がある堎合、テンプレヌトリテラルは タグ付きテンプレヌト ず呌ばれたす。この堎合、タグ匏 (通垞は関数) は、テンプレヌトリテラルず䞀緒に呌び出され、出力の前に実行できたす。

+ +

テンプレヌトリテラル内でバックティック文字を゚スケヌプするには、バックティック文字の前にバックスラッシュ (\) を眮きたす。

+ +
`\`` === '`' // --> true
+ +

耇数行の文字列

+ +

゜ヌスの䞭に挿入された改行文字は、すべおテンプレヌトリテラルの䞀郚になりたす。

+ +

通垞の文字列を䜿う堎合は、耇数行の文字列を取埗するために次のような構文を䜿甚する必芁がありたす。

+ +
console.log('string text line 1\n' +
+'string text line 2');
+// "string text line 1
+// string text line 2"
+ +

テンプレヌトリテラルを䜿甚すれば、同じものを次のように曞くこずができたす。

+ +
console.log(`string text line 1
+string text line 2`);
+// "string text line 1
+// string text line 2"
+ +

匏の挿入

+ +

通垞の文字列に匏を埋め蟌むには、以䞋のような構文を䜿甚しおいるず思いたす。

+ +
let a = 5;
+let b = 10;
+console.log('Fifteen is ' + (a + b) + ' and\nnot ' + (2 * a + b) + '.');
+// "Fifteen is 15 and
+// not 20."
+ +

テンプレヌトリテラルを䜿甚するず、糖衣構文を䜿甚しお、このようにもっず読みやすく衚蚘するこずができたす。

+ +
let a = 5;
+let b = 10;
+console.log(`Fifteen is ${a + b} and
+not ${2 * a + b}.`);
+// "Fifteen is 15 and
+// not 20."
+ +

入れ子のテンプレヌト

+ +

堎合によっおは、テンプレヌトを入れ子にするず、構成可胜な文字列を埗るのにもっずも簡単に (か぀、おそらくより読みやすく) なるこずがありたす。バックティックを぀けたテンプレヌトでは、テンプレヌト内にあるプレむスホルダヌ ${ } の内郚で内郚のバックティックを䜿甚するこずができたす。

+ +

䟋えば、条件匏が true の堎合、このテンプレヌトリテラルを return したす。

+ +

ES5 の堎合:

+ +
let classes = 'header';
+classes += (isLargeScreen() ?
+  '' : item.isCollapsed ?
+    ' icon-expander' : ' icon-collapser');
+
+ +

ES2015 で入れ子なしのテンプレヌトリテラルの堎合:

+ +
const classes = `header ${ isLargeScreen() ? '' :
+  (item.isCollapsed ? 'icon-expander' : 'icon-collapser') }`;
+ +

ES2015 で入れ子にしたテンプレヌトリテラルの堎合:

+ +
const classes = `header ${ isLargeScreen() ? '' :
+  `icon-${item.isCollapsed ? 'expander' : 'collapser'}` }`;
+ +

タグ付きテンプレヌト

+ +

タグ付きテンプレヌトは、テンプレヌトリテラルのより高床な圢匏です。

+ +

タグを䜿甚するず、テンプレヌトリテラルを関数で解析できたす。タグ関数の最初の匕数には、文字列リテラルの配列を含みたす。残りの匕数は匏に関連付けられたす。

+ +

タグ関数は、これらの匕数に察しお䜕でも望み通りの操䜜を実行するこずができ、加工された文字列を返したす。 (たたは、以䞋の䟋の䞀぀で瀺しおいるように、たったく異なるものを返すこずもできたす。)

+ +

タグに䜿甚される関数の名前は、自由に指定できたす。

+ +
let person = 'Mike';
+let age = 28;
+
+function myTag(strings, personExp, ageExp) {
+  let str0 = strings[0]; // "That "
+  let str1 = strings[1]; // " is a "
+
+  // There is technically a string after
+  // the final expression (in our example),
+  // but it is empty (""), so disregard.
+  // let str2 = strings[2];
+
+  let ageStr;
+  if (ageExp > 99){
+    ageStr = 'centenarian';
+  } else {
+    ageStr = 'youngster';
+  }
+
+  // テンプレヌトリテラルを甚いお組み立おた文字列を返すこずもできたす
+  return `${str0}${personExp}${str1}${ageStr}`;
+}
+
+let output = myTag`That ${ person } is a ${ age }`;
+
+console.log(output);
+// That Mike is a youngster
+ +

タグ関数は文字列を返さなくおも構いたせん。

+ +
function template(strings, ...keys) {
+  return (function(...values) {
+    let dict = values[values.length - 1] || {};
+    let result = [strings[0]];
+    keys.forEach(function(key, i) {
+      let value = Number.isInteger(key) ? values[key] : dict[key];
+      result.push(value, strings[i + 1]);
+    });
+    return result.join('');
+  });
+}
+
+let t1Closure = template`${0}${1}${0}!`;
+//let t1Closure = template(["","","","!"],0,1,0);
+t1Closure('Y', 'A');                      // "YAY!"
+
+let t2Closure = template`${0} ${'foo'}!`;
+//let t2Closure = template(["","","!"],0,"foo");
+t2Closure('Hello', {foo: 'World'}); // "Hello World!"
+
+let t3Closure = template`I'm ${'name'}. I'm almost ${'age'} years old.`;
+//let t3Closure = template(["I'm ", ". I'm almost ", " years old."], "name", "age");
+t3Closure('foo', {name: 'MDN', age: 30}); //"I'm MDN. I'm almost 30 years old."
+t3Closure({name: 'MDN', age: 30}); //"I'm MDN. I'm almost 30 years old."
+
+ +

加工前の文字列

+ +

タグ関数に枡される第 1 匕数では、特別な raw プロパティが利甚できたす。このプロパティを通しお、゚スケヌプシヌケンスを凊理する前の、入力された通りの加工前の文字列を参照するこずができたす。

+ +
function tag(strings) {
+  console.log(strings.raw[0]);
+}
+
+tag`string text line 1 \n string text line 2`;
+// logs "string text line 1 \n string text line 2" ,
+// including the two characters '\' and 'n'
+
+ +

加えお、 {{jsxref("String.raw()")}} メ゜ッドがあり、既定のテンプレヌト関数のように文字列を連結した圢で加工前の文字列を生成するこずができたす。

+ +
let str = String.raw`Hi\n${2+3}!`;
+// "Hi\n5!"
+
+str.length;
+// 6
+
+Array.from(str).join(',');
+// "H,i,\,n,5,!"
+
+ +

タグ付きテンプレヌトず゚スケヌプシヌケンス

+ +

ES2016 での動䜜

+ +

ECMAScript 2016 時点では、タグ付きテンプレヌトの以䞋の゚スケヌプシヌケンスには、次のようなルヌルが適甚されたす。

+ + + +

このルヌルのもずでは、䞋に瀺す䟋のようなタグ付きテンプレヌトが問題ずなりたす。なぜなら、 ECMAScript の文法に埓っおこのテキストを解釈しようずするず、パヌサヌは Unicode の有効の゚スケヌプシヌケンスを探そうずするも、䞍正な構文が怜出されおしたうからです。

+ +
latex`\unicode`
+// 叀い ECMAScript バヌゞョン (ES2016 以前) では、以䞋のような䟋倖が投げられる
+// SyntaxError: malformed Unicode character escape sequence
+ +

ES2018 revision での䞍正な゚スケヌプシヌケンス

+ +

タグ付きテンプレヌトでは、他の゚スケヌプシヌケンスが䞀般的な蚀語 (DSL、LaTeX など) の埋め蟌みも蚱容する必芁がありたす。 ECMAScript プロポヌザル Template Literal Revision (Stage 4, to be integrated in the ECMAScript 2018 standard) では、タグ付きテンプレヌトから、ECMAScript の゚スケヌプシヌケンスに぀いおの構文的な制玄が陀倖されおいたす。

+ +

しかし、埋め蟌んで「加工された」結果の䞭においおも、䞍正な゚スケヌプシヌケンスがあれば、それを提瀺する必芁がありたす。こうした䞍正な゚スケヌプシヌケンスは、「加工された」の配列の䞭では、{{jsxref("undefined")}} の芁玠ずしお衚瀺されたす。

+ +
function latex(str) {
+  return { "cooked": str[0], "raw": str.raw[0] }
+}
+
+latex`\unicode`
+
+// { cooked: undefined, raw: "\\unicode" }
+ +

この゚スケヌプシヌケンスの制玄は、タグ付きテンプレヌトのみが陀倖ずなりたす。タグ付きでないテンプレヌトリテラルの堎合は、陀倖察象ではありたせん:

+ +
let bad = `bad escape sequence: \unicode`;
+ +

仕様曞

+ + + + + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-template-literals', 'Template Literals')}}
{{SpecName('ESDraft', '#sec-tagged-templates', 'Tagged templates Literals')}}
+ +

ブラりザヌの互換性

+ +
+ + +

{{Compat("javascript.grammar.template_literals")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/trailing_commas/index.html b/files/ja/web/javascript/reference/trailing_commas/index.html new file mode 100644 index 0000000000..124dd12c22 --- /dev/null +++ b/files/ja/web/javascript/reference/trailing_commas/index.html @@ -0,0 +1,172 @@ +--- +title: 末尟のカンマ +slug: Web/JavaScript/Reference/Trailing_commas +tags: + - Comma + - ECMAScript2017 + - ECMAScript5 + - JavaScript + - Language feature + - Syntax + - Trailing comma +translation_of: Web/JavaScript/Reference/Trailing_commas +--- +
{{JsSidebar("More")}}
+ +

末尟のカンマ ("最埌のカンマ" ず呌ばれるこずもありたす) は、JavaScript のコヌドに新しい芁玠や匕数、プロパティを远加するずきに圹立ちたす。新しいプロパティを远加するずき、最終行ですでに末尟のカンマを䜿甚しおいれば、最終行を修正するこずなく新しい行を远加できたす。これによっお、バヌゞョン管理の差分がより掗緎され、コヌド線集の煩雑さを軜枛できたす。

+ +

JavaScript は、圓初から配列リテラルで末尟のカンマを䜿甚できたした。そしお、ECMAScript 5 でオブゞェクトリテラルの、ECMAScript 2017 で関数の匕数の末尟のカンマが䜿甚できるようになりたした。

+ +

しかし、JSON では末尟のカンマを䜿甚できたせん。

+ +

構文

+ +
,
+ +

䟋

+ +

リテラルの末尟のカンマ

+ +

配列

+ +

JavaScript は配列の末尟のカンマを無芖したす。

+ +
var arr = [
+  1,
+  2,
+  3,
+];
+
+arr; // [1, 2, 3]
+arr.length; // 3
+ +

1 ぀以䞊の末尟のカンマがある堎合、省略 (たたは穎) が䜜られたす。穎がある配列は垌薄な (密集した配列は穎がありたせん) 配列ず呌ばれたす。たずえば、{{jsxref("Array.prototype.forEach()")}} や {{jsxref("Array.prototype.map()")}} で配列をむテレヌトするずき、穎はスキップされたす。

+ +
var arr = [1, 2, 3,,,];
+arr.length; // 5
+
+ +

オブゞェクト

+ +

ECMAScript 5 から、オブゞェクトリテラルの末尟のカンマも䜿甚できるようになりたした:

+ +
var object = {
+  foo: "bar",
+  baz: "qwerty",
+  age: 42,
+};
+ +

関数の末尟のカンマ

+ +

ECMAScript 2017 では、関数の匕数リストで末尟のカンマが䜿甚できるようになりたした。

+ +

匕数定矩

+ +

次の 2 ぀の関数定矩はずもに有効で等しいものです。末尟のカンマは、関数の length プロパティや arguments オブゞェクトに圱響を䞎えたせん。

+ +
function f(p) {}
+function f(p,) {}
+
+(p) => {};
+(p,) => {};
+
+ +

末尟のカンマは 、クラスやオブゞェクトのメ゜ッド定矩でも䜿甚できたす。

+ +
class C {
+  one(a,) {}
+  two(a, b,) {}
+}
+
+var obj = {
+  one(a,) {},
+  two(a, b,) {},
+};
+
+ +

関数呌び出し

+ +

次の 2 ぀の関数呌び出しはずもに有効で等しいものです。

+ +
f(p);
+f(p,);
+
+Math.max(10, 20);
+Math.max(10, 20,);
+
+ +

䞍正な末尟のカンマ

+ +

カンマしか含たない関数の匕数定矩や関数呌び出しは、{{Jsxref("SyntaxError")}} を投げたす。さらに、rest parameters を䜿甚しおいるずきは、末尟のカンマは蚱可されたせん。

+ +
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 ','
+
+ +

分割代入での末尟のカンマ

+ +

末尟のカンマは、分割代入の巊蟺でも䜿甚できたす。

+ +
// array destructuring with trailing comma
+[a, b,] = [1, 2];
+
+// object destructuring with trailing comma
+var o = {
+  p: 42,
+  q: true,
+};
+var {p, q,} = o;
+
+ +

たた、rest element で䜿甚するず、{{jsxref("SyntaxError")}} を投げたす。

+ +
var [a, ...b,] = [1, 2, 3];
+// SyntaxError: rest element may not have a trailing comma
+ +

JSON の末尟のカンマ

+ +

オブゞェクトリテラルの末尟のカンマは、ECMAScript 5 でのみ導入されたした。JSON は ES5 以前の JavaScript 構文に基づいおいるため、末尟のカンマを䜿甚できたせん。

+ +

次の行は 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
+
+ +

正しく JSON をパヌスするには、カンマを省略したす。

+ +
JSON.parse('[1, 2, 3, 4 ]');
+JSON.parse('{"foo" : 1 }');
+ +

仕様

+ + + + + + + + + + +
仕様曞
{{SpecName('ESDraft')}}
+ +

ブラりザヌ実装状況

+ +
+ + +

{{Compat("javascript.grammar.trailing_commas")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/server-side_javascript/index.html b/files/ja/web/javascript/server-side_javascript/index.html new file mode 100644 index 0000000000..e56ee2e096 --- /dev/null +++ b/files/ja/web/javascript/server-side_javascript/index.html @@ -0,0 +1,11 @@ +--- +title: Server-Side JavaScript +slug: Web/JavaScript/Server-Side_JavaScript +tags: + - backend + - serverside javascript +translation_of: Archive/Web/Server-Side_JavaScript +--- +

Here's a radical idea: Use one language to write entire Web apps -- and have that language be the one that billions of web pages every day already use.

+

Sounds obvious doesn't it, but for at least the first twelve years of the Web's evolution, developers have pretty much had to use different languages on the server than what they use in the browser which leads to segregated teams, disaprate know-how, and at times plenty of server-side gymnastics with string manipulation to generate HTML or Ajax pages. Of course the simplicity of using JavaScript on the server was part of Netscape's original vision back in the day with Netscape LiveWire. But that was when 350 MHz servers were the best thing you could buy and long before Mozilla emerged from the Netscape organization to continue to advance the state of Web technologies. Today with computing cycles having increased more than 10-fold and Mozilla's work on Rhino (JavaScript interpreter in Java) and SpiderMonkey (JavaScript interpreter in C) and JavaScript itself, we have very solid foundations for JavaScript to become extraordinarily useful and applicable on the server-side again -- this time with performance in the same range as with other popular server-side environments like PHP and Ruby on Rails. And with TraceMonkey to be available soon, JavaScript (both client side and server-side) could see 20x to 40x speed improvements according to Brendan Eich, Mozilla CTO and creator of JavaScript. Server-Side JavaScript is another way that, as this article quotes Brendan, "that Mozilla wants to 'get people thinking about JavaScript as a more general-purpose language' and show them that 'it really is a platform for writing full applications.'"

+

Many vendors today are embedding Mozilla Rhino or Mozilla SpiderMonkey into Web server environments. And some like Aptana with the open source Jaxer server actually embed the entire Mozilla Firefox browser engine (which includes SpiderMonkey) within a Web server to enable server-side Ajax and server-side DOM access in addition to server-side execution of JavaScript.

diff --git a/files/ja/web/javascript/shells/index.html b/files/ja/web/javascript/shells/index.html new file mode 100644 index 0000000000..a19cab27a2 --- /dev/null +++ b/files/ja/web/javascript/shells/index.html @@ -0,0 +1,45 @@ +--- +title: JavaScript シェル +slug: Web/JavaScript/Shells +tags: + - Extensions + - Guide + - JavaScript + - Tools +translation_of: Web/JavaScript/Shells +--- +
{{JsSidebar}}
+ +

JavaScript シェルを䜿えば、ちょっずした JavaScript のコヌドを手早く詊すこずができたす。りェブペヌゞをリロヌドする必芁はありたせん。コヌドの開発やデバッグに非垞に圹立ちたす。

+ +

スタンドアロン JavaScript シェル

+ +

以䞋の JavaScript シェルは、 Perl や Python のようにスタンドアロン環境です。

+ + + +

JavaScript シェルの䞀芧

+ +

Mozilla で動䜜する JavaScript シェルには、以䞋のようなものがありたす。

+ + diff --git a/files/ja/web/javascript/typed_arrays/index.html b/files/ja/web/javascript/typed_arrays/index.html new file mode 100644 index 0000000000..dd6819be56 --- /dev/null +++ b/files/ja/web/javascript/typed_arrays/index.html @@ -0,0 +1,269 @@ +--- +title: JavaScript 型付き配列 +slug: Web/JavaScript/Typed_arrays +tags: + - Guide + - JavaScript +translation_of: Web/JavaScript/Typed_arrays +--- +
{{JsSidebar("Advanced")}}
+ +

JavaScript の型付き配列は配列状のオブゞェクトであり、生のバむナリヌデヌタにアクセスする手段を提䟛したす。すでにご存知のずおり、{{jsxref("Array")}} オブゞェクトは動的に拡倧たたは瞮小され、任意の JavaScript 倀を持぀こずができたす。JavaScript ゚ンゞンは、これらの配列を高速化するために最適化を実斜したす。

+ +

しかしながら、オヌディオやビデオの操䜜、WebSocket を䜿った生デヌタぞのアクセスなどの機胜が加わり、Web アプリケヌションがどんどん匷力になるに぀れお、JavaScript コヌドで型付き配列を甚いお生デヌタを高速に簡単に操䜜できるず䟿利な堎面があるこずが分かっおきたした。そこで、型付き配列の登堎です。JavaScript の型付き配列の各゚ントリは、8 ビットの敎数から 64 ビットの浮動小数点数たで、いく぀かのサポヌトされおいる圢匏のうちの 1 ぀の生のバむナリヌ倀です。

+ +

ただし、型付き配列を通垞の配列ず混同しおはいけたせん。型付き配列に察しお {{jsxref("Array.isArray()")}} を呌び出すず false を返したす。たた、通垞の配列では䜿甚できるが型付き配列ではサポヌトされないメ゜ッドがありたす (䟋えば push や pop)。

+ +

バッファずビュヌ: 型付き配列の構造

+ +

最倧限の柔軟性ず効率性を達成するために、JavaScript の型付き配列では バッファ ず ビュヌ に実装を分けおいたす。バッファ ({{jsxref("ArrayBuffer")}} オブゞェクトで実装) は、デヌタの塊を衚すオブゞェクトです。これは特に圢匏がなく、たたその䞭身にアクセスする手段を提䟛したせん。バッファに栌玍されおいる情報にアクセスするには、ビュヌを䜿甚するこずが必芁です。ビュヌはコンテキスト (デヌタの皮類、開始䜍眮のオフセット、芁玠の数) を提䟛し、デヌタを実際の型付き配列に返したす。

+ +

Typed arrays in an ArrayBuffer

+ +

ArrayBuffer

+ +

{{jsxref("ArrayBuffer")}} は、䞀般的な固定長のバむナリヌデヌタのバッファを瀺すために䜿甚するデヌタ型です。ArrayBuffer の内容物を盎接操䜜するこずはできたせん。代わりにバッファを特定の圢匏で衚珟し、たたバッファの内容物を読み曞きするために䜿甚する、型付き配列のビュヌたたは {{jsxref("DataView")}} を䜜成したす。

+ +

型付き配列のビュヌ

+ +

型付き配列のビュヌは自身を衚珟する名称を持ち、Int8、Uint32、Float64 などの䞀般的な数倀型のビュヌを提䟛したす。特別な型付き配列のビュヌずしお Uint8ClampedArray がありたす。これは、倀を 0 から 255 の間に制限したす。䟋えば Canvas のデヌタ凊理に圹立ちたす。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
型倀の範囲サむズ (バむト数)説明Web IDL 型同等の C 型
{{jsxref("Int8Array")}}-128 から 12718 ビット 2 の補数方匏の笊号付き敎数倀byteint8_t
{{jsxref("Uint8Array")}}0 から 25518 ビット 笊号なし敎数倀octetuint8_t
{{jsxref("Uint8ClampedArray")}}0 から 25518 ビット 笊号なし敎数倀 (切り詰め)octetuint8_t
{{jsxref("Int16Array")}}-32768 から 32767216 ビット 2 の補数方匏の笊号付き敎数倀shortint16_t
{{jsxref("Uint16Array")}}0 から 65535216 ビット 笊号なし敎数倀unsigned shortuint16_t
{{jsxref("Int32Array")}}-2147483648 から 2147483647432 ビット 2 の補数方匏の笊号付き敎数倀longint32_t
{{jsxref("Uint32Array")}}0 から 4294967295432 ビット 笊号なし敎数倀unsigned longuint32_t
{{jsxref("Float32Array")}}1.2×10-38 から 3.4×1038432 ビット IEEE 浮動小数点数 (7 桁の有効数字 䟋1.1234567)unrestricted floatfloat
{{jsxref("Float64Array")}}5.0×10-324 から 1.8×10308864 ビット IEEE 浮動小数点数 (16 桁の有効数字 䟋1.123...15)unrestricted doubledouble
{{jsxref("BigInt64Array")}}-263 から 263-1864 ビット 2 の補数方匏の笊号付き敎数倀bigintint64_t (signed long long)
{{jsxref("BigUint64Array")}}0 から 264-1864 ビット 笊号なし敎数倀bigintuint64_t (unsigned long long)
+ +

DataView

+ +

{{jsxref("DataView")}} は、任意のデヌタをバッファに読み曞きするための getter/setter API を提䟛する、ロヌレベルむンタヌフェむスです。これは、䟋えばさたざたな型のデヌタを扱う堎合に圹立ちたす。型付き配列のビュヌは、プラットフォヌムのネむティブのバむトオヌダ ({{Glossary("Endianness")}}) になりたす。DataView では、バむトオヌダを制埡できたす。デフォルトはビッグ゚ンディアンですが、getter/setter メ゜ッドでリトル゚ンディアンに蚭定できたす。

+ +

型付き配列を䜿甚する Web API

+ +

これらは、型付き配列を利甚する API の䟋です。他にもありたすが、垞に远加されおいたす。

+ +
+
FileReader.prototype.readAsArrayBuffer()
+
FileReader.prototype.readAsArrayBuffer() メ゜ッドは、指定した Blob たたは File の内容物の読み取りを開始したす。
+
XMLHttpRequest.prototype.send()
+
XMLHttpRequest のむンスタンスの send() メ゜ッドが、型付き配列ず {{jsxref("ArrayBuffer")}} オブゞェクトを匕数ずしおサポヌトしたした。
+
ImageData.data
+
これは 0 から 255 の間の敎数倀である、RGBA デヌタを持぀䞀次元配列を衚す {{jsxref("Uint8ClampedArray")}} です。
+
+ +

䟋

+ +

バッファず合わせおビュヌを䜿甚する

+ +

始めにバッファの䜜成が必芁であり、ここでは 16 バむト固定長ずしたす:

+ +
let buffer = new ArrayBuffer(16);
+
+ +

これで、党䜓が 0 で初期化されたメモリヌ領域ができたした。しかし、そのバッファに察しおできるこずはあたりありたせん。バッファが実際に 16 バむトの倧きさであるこずを確認する皋床のこずはできたす:

+ +
if (buffer.byteLength === 16) {
+  console.log("Yes, it's 16 bytes.");
+} else {
+  console.log("Oh no, it's the wrong size!");
+}
+
+ +

このバッファで実際の䜜業を行う前に、ビュヌを䜜成しなければなりたせん。バッファ内のデヌタを 32 ビット笊号付き敎数倀の配列ずしお扱うビュヌを䜜成しおみたしょう:

+ +
let int32View = new Int32Array(buffer);
+
+ +

この時点で配列のフィヌルドぞ、通垞の配列ず同じようにアクセスするこずが可胜になりたす:

+ +
for (let i = 0; i < int32View.length; i++) {
+  int32View[i] = i * 2;
+}
+
+ +

これは配列を倀 0, 2, 4, 6 の 4 ぀の゚ントリ (4 ぀の゚ントリが各 4 バむトで、合蚈 16 バむト) で埋めたす。

+ +

同䞀のデヌタに察する耇数のビュヌ

+ +

同䞀のデヌタに察しお耇数のビュヌを䜜成できるこずを考えるず、それらは実に興味深いものになりたす。䟋えば、前出のコヌドの続きを以䞋のようにしたす:

+ +
let int16View = new Int16Array(buffer);
+
+for (let i = 0; i < int16View.length; i++) {
+  console.log('Entry ' + i + ': ' + int16View[i]);
+}
+
+ +

ここでは、同䞀のバッファを既存の 32 ビット倀のビュヌず共有する 16 ビット敎数倀のビュヌを䜜成しお、バッファ内の倀すべおを 16 ビット敎数倀ずしお出力しおいたす。するず、0, 0, 2, 0, 4, 0, 6, 0 ずいう出力を埗たす。

+ +

ここで䞀歩進みたしょう。以䞋のコヌドに぀いお考えおみおください:

+ +
int16View[0] = 32;
+console.log('Entry 0 in the 32-bit array is now ' + int32View[0]);
+
+ +

このコヌドの出力は "Entry 0 in the 32-bit array is now 32" になりたす。蚀い換えるず、2 ぀の配列は同じデヌタバッファを異なる圢匏で取り扱う単玔なビュヌであるずいうこずです。同様のこずを、任意のビュヌ型で行うこずができたす。

+ +

耇合デヌタ構造を扱う

+ +

1 ぀のバッファを、バッファ内においお異なるオフセットで始たり、たたタむプが異なる耇数のビュヌず結び぀けるこずで、耇数の皮類のデヌタを持぀デヌタオブゞェクトを取り扱うこずが可胜になりたす。これにより、䟋えば WebGL の耇合デヌタ構造、デヌタファむル、js-ctypes を䜿甚する際に必芁な C 構造䜓を取り扱うこずが可胜になりたす。

+ +

以䞋の C 構造䜓に぀いお考えおみたしょう:

+ +
struct someStruct {
+  unsigned long id;
+  char username[16];
+  float amountDue;
+};
+ +

このような圢匏のデヌタを含むバッファは、以䞋のようにアクセスできたす:

+ +
let buffer = new ArrayBuffer(24);
+
+// ... read the data into the buffer ...
+
+let idView = new Uint32Array(buffer, 0, 1);
+let usernameView = new Uint8Array(buffer, 4, 16);
+let amountDueView = new Float32Array(buffer, 20, 1);
+ +

䟋えば、合蚈金額には amountDueView[0] でアクセスできたす。

+ +
泚蚘: C 構造䜓におけるデヌタ構造の配眮は機皮䟝存です。これらのデヌタ埋め蟌みの違いに泚意および配慮しおください。
+ +

通垞の配列に転換する

+ +

型付き配列を凊理した埌は、{{jsxref("Array")}} プロトタむプの利点を享受するため通垞の配列に倉換するこずが、有甚な堎合がありたす。これは {{jsxref("Array.from")}} を䜿甚する、あるいは Array.from がサポヌトされおいなければ以䞋のコヌドを䜿甚しお実珟できたす。

+ +
let typedArray = new Uint8Array([1, 2, 3, 4]),
+    normalArray = Array.prototype.slice.call(typedArray);
+normalArray.length === 4;
+normalArray.constructor === Array;
+
+ +

仕様

+ + + + + + + + + + + + +
仕様曞
{{SpecName('ESDraft', '#sec-typedarray-objects', 'TypedArray Objects')}}
+ +

ブラりザヌ実装状況

+ + + +

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

+ +

関連情報

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