From a55b575e8089ee6cab7c5c262a7e6db55d0e34d6 Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 14:46:50 +0100 Subject: unslug es: move --- files/es/web/javascript/reference/about/index.html | 158 +++++ .../reference/classes/constructor/index.html | 102 ++++ .../reference/classes/extends/index.html | 167 ++++++ .../es/web/javascript/reference/classes/index.html | 372 ++++++++++++ .../classes/private_class_fields/index.html | 201 +++++++ .../classes/public_class_fields/index.html | 386 ++++++++++++ .../javascript/reference/classes/static/index.html | 118 ++++ .../deprecated_and_obsolete_features/index.html | 292 +++++++++ .../the_legacy_iterator_protocol/index.html | 72 +++ .../reference/errors/bad_regexp_flag/index.html | 113 ++++ .../reference/errors/caracter_ilegal/index.html | 83 --- .../index.html | 72 --- .../reference/errors/illegal_character/index.html | 83 +++ .../errors/indicador_regexp_no-val/index.html | 113 ---- .../missing_semicolon_before_statement/index.html | 72 +++ .../errors/strict_non_simple_params/index.html | 117 ++++ .../index.html" | 117 ---- .../functions/arguments/callee/index.html | 48 ++ .../reference/functions/arguments/index.html | 229 +++++++ .../functions/arguments/length/index.html | 131 ++++ .../reference/functions/arrow_functions/index.html | 530 +++++++++++++++++ .../functions/default_parameters/index.html | 234 ++++++++ .../javascript/reference/functions/get/index.html | 134 +++++ .../web/javascript/reference/functions/index.html | 661 +++++++++++++++++++++ .../functions/method_definitions/index.html | 226 +++++++ .../reference/functions/rest_parameters/index.html | 266 +++++++++ .../javascript/reference/functions/set/index.html | 217 +++++++ .../global_objects/aggregateerror/index.html | 87 +++ .../global_objects/array/@@iterator/index.html | 89 +++ .../global_objects/array/@@species/index.html | 76 +++ .../global_objects/array/@@unscopables/index.html | 78 +++ .../global_objects/array/concat/index.html | 140 +++++ .../global_objects/array/copywithin/index.html | 165 +++++ .../global_objects/array/entries/index.html | 86 +++ .../global_objects/array/every/index.html | 195 ++++++ .../reference/global_objects/array/fill/index.html | 145 +++++ .../global_objects/array/filter/index.html | 231 +++++++ .../reference/global_objects/array/find/index.html | 233 ++++++++ .../global_objects/array/findindex/index.html | 187 ++++++ .../reference/global_objects/array/flat/index.html | 174 ++++++ .../global_objects/array/flatmap/index.html | 128 ++++ .../global_objects/array/foreach/index.html | 257 ++++++++ .../reference/global_objects/array/from/index.html | 242 ++++++++ .../global_objects/array/includes/index.html | 181 ++++++ .../reference/global_objects/array/index.html | 449 ++++++++++++++ .../global_objects/array/indexof/index.html | 248 ++++++++ .../global_objects/array/isarray/index.html | 128 ++++ .../reference/global_objects/array/join/index.html | 110 ++++ .../reference/global_objects/array/keys/index.html | 84 +++ .../global_objects/array/lastindexof/index.html | 164 +++++ .../global_objects/array/length/index.html | 143 +++++ .../reference/global_objects/array/map/index.html | 360 +++++++++++ .../reference/global_objects/array/of/index.html | 97 +++ .../reference/global_objects/array/pop/index.html | 94 +++ .../reference/global_objects/array/push/index.html | 140 +++++ .../global_objects/array/reduce/index.html | 215 +++++++ .../global_objects/array/reduceright/index.html | 166 ++++++ .../global_objects/array/reverse/index.html | 88 +++ .../global_objects/array/shift/index.html | 124 ++++ .../global_objects/array/slice/index.html | 287 +++++++++ .../reference/global_objects/array/some/index.html | 204 +++++++ .../reference/global_objects/array/sort/index.html | 301 ++++++++++ .../global_objects/array/splice/index.html | 148 +++++ .../global_objects/array/tolocalestring/index.html | 177 ++++++ .../global_objects/array/tosource/index.html | 112 ++++ .../global_objects/array/tostring/index.html | 78 +++ .../global_objects/array/unshift/index.html | 100 ++++ .../global_objects/array/values/index.html | 82 +++ .../arraybuffer/@@species/index.html | 72 +++ .../arraybuffer/bytelength/index.html | 70 +++ .../global_objects/arraybuffer/index.html | 139 +++++ .../global_objects/asyncfunction/index.html | 122 ++++ .../global_objects/boolean/boolean/index.html | 75 +++ .../reference/global_objects/boolean/index.html | 126 ++++ .../global_objects/boolean/tosource/index.html | 36 ++ .../global_objects/date/getdate/index.html | 119 ++++ .../global_objects/date/getday/index.html | 124 ++++ .../global_objects/date/getfullyear/index.html | 67 +++ .../global_objects/date/gethours/index.html | 119 ++++ .../global_objects/date/getmilliseconds/index.html | 121 ++++ .../global_objects/date/getminutes/index.html | 118 ++++ .../global_objects/date/getmonth/index.html | 125 ++++ .../global_objects/date/getseconds/index.html | 83 +++ .../global_objects/date/gettime/index.html | 140 +++++ .../global_objects/date/getutcfullyear/index.html | 121 ++++ .../global_objects/date/getutchours/index.html | 117 ++++ .../reference/global_objects/date/index.html | 132 ++++ .../reference/global_objects/date/now/index.html | 30 + .../reference/global_objects/date/parse/index.html | 35 ++ .../global_objects/date/setfullyear/index.html | 133 +++++ .../global_objects/date/setmonth/index.html | 78 +++ .../global_objects/date/todatestring/index.html | 88 +++ .../global_objects/date/toisostring/index.html | 144 +++++ .../global_objects/date/tojson/index.html | 61 ++ .../date/tolocaledatestring/index.html | 159 +++++ .../global_objects/date/tolocalestring/index.html | 163 +++++ .../date/tolocaletimestring/index.html | 152 +++++ .../global_objects/date/toutcstring/index.html | 105 ++++ .../reference/global_objects/date/utc/index.html | 78 +++ .../reference/global_objects/decodeuri/index.html | 38 ++ .../global_objects/decodeuricomponent/index.html | 42 ++ .../reference/global_objects/encodeuri/index.html | 61 ++ .../global_objects/encodeuricomponent/index.html | 161 +++++ .../global_objects/error/error/index.html | 69 +++ .../global_objects/error/filename/index.html | 48 ++ .../reference/global_objects/error/index.html | 219 +++++++ .../global_objects/error/linenumber/index.html | 101 ++++ .../global_objects/error/message/index.html | 114 ++++ .../reference/global_objects/error/name/index.html | 58 ++ .../global_objects/error/tosource/index.html | 60 ++ .../global_objects/error/tostring/index.html | 98 +++ .../reference/global_objects/escape/index.html | 91 +++ .../reference/global_objects/eval/index.html | 309 ++++++++++ .../reference/global_objects/evalerror/index.html | 163 +++++ .../global_objects/function/apply/index.html | 233 ++++++++ .../global_objects/function/arguments/index.html | 44 ++ .../global_objects/function/bind/index.html | 293 +++++++++ .../global_objects/function/call/index.html | 113 ++++ .../global_objects/function/caller/index.html | 128 ++++ .../global_objects/function/displayname/index.html | 77 +++ .../global_objects/function/function/index.html | 92 +++ .../reference/global_objects/function/index.html | 118 ++++ .../global_objects/function/length/index.html | 151 +++++ .../global_objects/function/name/index.html | 223 +++++++ .../global_objects/function/tosource/index.html | 97 +++ .../global_objects/function/tostring/index.html | 130 ++++ .../reference/global_objects/generator/index.html | 228 +++++++ .../global_objects/generator/next/index.html | 109 ++++ .../global_objects/generator/return/index.html | 102 ++++ .../global_objects/generator/throw/index.html | 94 +++ .../javascript/reference/global_objects/index.html | 203 +++++++ .../reference/global_objects/infinity/index.html | 96 +++ .../global_objects/internalerror/index.html | 98 +++ .../internalerror/internalerror/index.html | 55 ++ .../reference/global_objects/intl/index.html | 126 ++++ .../intl/numberformat/format/index.html | 92 +++ .../global_objects/intl/numberformat/index.html | 188 ++++++ .../intl/relativetimeformat/index.html | 106 ++++ .../reference/global_objects/isfinite/index.html | 114 ++++ .../reference/global_objects/isnan/index.html | 88 +++ .../reference/global_objects/json/index.html | 231 +++++++ .../reference/global_objects/json/parse/index.html | 178 ++++++ .../global_objects/json/stringify/index.html | 265 +++++++++ .../reference/global_objects/map/clear/index.html | 109 ++++ .../reference/global_objects/map/delete/index.html | 114 ++++ .../global_objects/map/entries/index.html | 109 ++++ .../global_objects/map/foreach/index.html | 94 +++ .../reference/global_objects/map/get/index.html | 77 +++ .../reference/global_objects/map/has/index.html | 65 ++ .../reference/global_objects/map/index.html | 213 +++++++ .../reference/global_objects/map/keys/index.html | 109 ++++ .../reference/global_objects/map/set/index.html | 133 +++++ .../reference/global_objects/map/size/index.html | 110 ++++ .../reference/global_objects/map/values/index.html | 77 +++ .../reference/global_objects/math/abs/index.html | 149 +++++ .../reference/global_objects/math/acos/index.html | 99 +++ .../reference/global_objects/math/acosh/index.html | 94 +++ .../reference/global_objects/math/asin/index.html | 144 +++++ .../reference/global_objects/math/asinh/index.html | 90 +++ .../reference/global_objects/math/atan/index.html | 107 ++++ .../reference/global_objects/math/atan2/index.html | 141 +++++ .../reference/global_objects/math/atanh/index.html | 87 +++ .../reference/global_objects/math/cbrt/index.html | 96 +++ .../reference/global_objects/math/ceil/index.html | 166 ++++++ .../reference/global_objects/math/cos/index.html | 74 +++ .../reference/global_objects/math/e/index.html | 83 +++ .../reference/global_objects/math/exp/index.html | 136 +++++ .../reference/global_objects/math/expm1/index.html | 89 +++ .../reference/global_objects/math/floor/index.html | 124 ++++ .../global_objects/math/fround/index.html | 199 +++++++ .../reference/global_objects/math/hypot/index.html | 124 ++++ .../reference/global_objects/math/index.html | 196 ++++++ .../reference/global_objects/math/ln10/index.html | 84 +++ .../reference/global_objects/math/ln2/index.html | 83 +++ .../reference/global_objects/math/log/index.html | 112 ++++ .../reference/global_objects/math/log10/index.html | 137 +++++ .../global_objects/math/log10e/index.html | 130 ++++ .../reference/global_objects/math/log2/index.html | 96 +++ .../reference/global_objects/math/log2e/index.html | 27 + .../reference/global_objects/math/max/index.html | 145 +++++ .../reference/global_objects/math/min/index.html | 150 +++++ .../reference/global_objects/math/pi/index.html | 126 ++++ .../reference/global_objects/math/pow/index.html | 140 +++++ .../global_objects/math/random/index.html | 132 ++++ .../reference/global_objects/math/round/index.html | 218 +++++++ .../reference/global_objects/math/sign/index.html | 151 +++++ .../reference/global_objects/math/sin/index.html | 126 ++++ .../reference/global_objects/math/sqrt/index.html | 134 +++++ .../global_objects/math/sqrt1_2/index.html | 123 ++++ .../reference/global_objects/math/sqrt2/index.html | 124 ++++ .../reference/global_objects/math/tan/index.html | 82 +++ .../reference/global_objects/math/tanh/index.html | 95 +++ .../reference/global_objects/math/trunc/index.html | 144 +++++ .../reference/global_objects/nan/index.html | 46 ++ .../reference/global_objects/null/index.html | 129 ++++ .../reference/global_objects/number/index.html | 181 ++++++ .../global_objects/number/isfinite/index.html | 88 +++ .../global_objects/number/isinteger/index.html | 94 +++ .../global_objects/number/isnan/index.html | 140 +++++ .../global_objects/number/issafeinteger/index.html | 99 +++ .../number/max_safe_integer/index.html | 68 +++ .../global_objects/number/max_value/index.html | 131 ++++ .../global_objects/number/min_value/index.html | 121 ++++ .../reference/global_objects/number/nan/index.html | 59 ++ .../number/negative_infinity/index.html | 117 ++++ .../global_objects/number/parsefloat/index.html | 76 +++ .../global_objects/number/parseint/index.html | 80 +++ .../number/positive_infinity/index.html | 115 ++++ .../global_objects/number/tofixed/index.html | 147 +++++ .../number/tolocalestring/index.html | 155 +++++ .../global_objects/number/toprecision/index.html | 102 ++++ .../global_objects/number/tostring/index.html | 63 ++ .../global_objects/number/valueof/index.html | 81 +++ .../object/__definegetter__/index.html | 144 +++++ .../object/__lookupgetter__/index.html | 84 +++ .../global_objects/object/assign/index.html | 274 +++++++++ .../global_objects/object/constructor/index.html | 161 +++++ .../global_objects/object/create/index.html | 377 ++++++++++++ .../object/defineproperties/index.html | 194 ++++++ .../object/defineproperty/index.html | 419 +++++++++++++ .../global_objects/object/entries/index.html | 161 +++++ .../global_objects/object/freeze/index.html | 174 ++++++ .../global_objects/object/fromentries/index.html | 106 ++++ .../object/getownpropertydescriptor/index.html | 161 +++++ .../object/getownpropertydescriptors/index.html | 117 ++++ .../object/getownpropertynames/index.html | 163 +++++ .../object/getownpropertysymbols/index.html | 123 ++++ .../object/getprototypeof/index.html | 137 +++++ .../object/hasownproperty/index.html | 186 ++++++ .../reference/global_objects/object/index.html | 187 ++++++ .../reference/global_objects/object/is/index.html | 172 ++++++ .../global_objects/object/isextensible/index.html | 144 +++++ .../global_objects/object/isfrozen/index.html | 190 ++++++ .../global_objects/object/isprototypeof/index.html | 158 +++++ .../global_objects/object/issealed/index.html | 140 +++++ .../global_objects/object/keys/index.html | 156 +++++ .../object/preventextensions/index.html | 176 ++++++ .../object/propertyisenumerable/index.html | 185 ++++++ .../global_objects/object/proto/index.html | 128 ++++ .../global_objects/object/seal/index.html | 167 ++++++ .../object/setprototypeof/index.html | 237 ++++++++ .../object/tolocalestring/index.html | 106 ++++ .../global_objects/object/tosource/index.html | 126 ++++ .../global_objects/object/tostring/index.html | 70 +++ .../global_objects/object/valueof/index.html | 157 +++++ .../global_objects/object/values/index.html | 97 +++ .../reference/global_objects/parsefloat/index.html | 58 ++ .../reference/global_objects/parseint/index.html | 89 +++ .../global_objects/promise/all/index.html | 123 ++++ .../global_objects/promise/catch/index.html | 183 ++++++ .../global_objects/promise/finally/index.html | 95 +++ .../reference/global_objects/promise/index.html | 222 +++++++ .../global_objects/promise/race/index.html | 112 ++++ .../global_objects/promise/reject/index.html | 80 +++ .../global_objects/promise/resolve/index.html | 150 +++++ .../global_objects/promise/then/index.html | 302 ++++++++++ .../handler/getownpropertydescriptor/index.html | 129 ---- .../global_objects/proxy/handler/index.html | 84 --- .../global_objects/proxy/handler/set/index.html | 122 ---- .../reference/global_objects/proxy/index.html | 439 ++++++++++++++ .../proxy/getownpropertydescriptor/index.html | 129 ++++ .../global_objects/proxy/proxy/index.html | 84 +++ .../global_objects/proxy/proxy/set/index.html | 122 ++++ .../global_objects/rangeerror/prototype/index.html | 131 ---- .../global_objects/referenceerror/index.html | 99 +++ .../global_objects/regexp/compile/index.html | 93 +++ .../global_objects/regexp/exec/index.html | 238 ++++++++ .../global_objects/regexp/ignorecase/index.html | 142 +++++ .../reference/global_objects/regexp/index.html | 264 ++++++++ .../global_objects/regexp/regexp/index.html | 114 ++++ .../global_objects/regexp/rightcontext/index.html | 54 ++ .../global_objects/regexp/test/index.html | 152 +++++ .../global_objects/regexp/tostring/index.html | 171 ++++++ .../global_objects/set/@@iterator/index.html | 86 +++ .../reference/global_objects/set/add/index.html | 124 ++++ .../reference/global_objects/set/clear/index.html | 119 ++++ .../reference/global_objects/set/delete/index.html | 117 ++++ .../global_objects/set/entries/index.html | 71 +++ .../reference/global_objects/set/has/index.html | 124 ++++ .../reference/global_objects/set/index.html | 230 +++++++ .../reference/global_objects/set/size/index.html | 106 ++++ .../reference/global_objects/set/values/index.html | 72 +++ .../global_objects/string/anchor/index.html | 56 ++ .../reference/global_objects/string/big/index.html | 54 ++ .../global_objects/string/blink/index.html | 42 ++ .../global_objects/string/bold/index.html | 43 ++ .../global_objects/string/charat/index.html | 143 +++++ .../global_objects/string/charcodeat/index.html | 65 ++ .../global_objects/string/codepointat/index.html | 127 ++++ .../global_objects/string/concat/index.html | 90 +++ .../global_objects/string/endswith/index.html | 88 +++ .../global_objects/string/fixed/index.html | 35 ++ .../global_objects/string/fontcolor/index.html | 122 ++++ .../global_objects/string/fontsize/index.html | 123 ++++ .../global_objects/string/fromcharcode/index.html | 130 ++++ .../global_objects/string/fromcodepoint/index.html | 204 +++++++ .../global_objects/string/includes/index.html | 108 ++++ .../reference/global_objects/string/index.html | 385 ++++++++++++ .../global_objects/string/indexof/index.html | 104 ++++ .../global_objects/string/italics/index.html | 49 ++ .../global_objects/string/lastindexof/index.html | 79 +++ .../global_objects/string/length/index.html | 94 +++ .../global_objects/string/link/index.html | 56 ++ .../global_objects/string/localecompare/index.html | 159 +++++ .../global_objects/string/match/index.html | 78 +++ .../global_objects/string/matchall/index.html | 134 +++++ .../global_objects/string/normalize/index.html | 126 ++++ .../global_objects/string/padstart/index.html | 100 ++++ .../reference/global_objects/string/raw/index.html | 112 ++++ .../global_objects/string/repeat/index.html | 128 ++++ .../global_objects/string/replace/index.html | 202 +++++++ .../global_objects/string/search/index.html | 153 +++++ .../global_objects/string/slice/index.html | 161 +++++ .../global_objects/string/small/index.html | 38 ++ .../global_objects/string/split/index.html | 240 ++++++++ .../global_objects/string/startswith/index.html | 97 +++ .../global_objects/string/strike/index.html | 42 ++ .../reference/global_objects/string/sub/index.html | 35 ++ .../global_objects/string/substr/index.html | 83 +++ .../global_objects/string/substring/index.html | 92 +++ .../reference/global_objects/string/sup/index.html | 35 ++ .../string/tolocalelowercase/index.html | 113 ++++ .../string/tolocaleuppercase/index.html | 100 ++++ .../global_objects/string/tolowercase/index.html | 40 ++ .../global_objects/string/tosource/index.html | 56 ++ .../global_objects/string/tostring/index.html | 28 + .../global_objects/string/touppercase/index.html | 39 ++ .../global_objects/string/trim/index.html | 133 +++++ .../global_objects/string/trimend/index.html | 82 +++ .../global_objects/string/valueof/index.html | 28 + .../reference/global_objects/symbol/for/index.html | 153 +++++ .../global_objects/symbol/hasinstance/index.html | 105 ++++ .../reference/global_objects/symbol/index.html | 364 ++++++++++++ .../global_objects/symbol/iterator/index.html | 98 +++ .../global_objects/syntaxerror/index.html | 176 ++++++ .../global_objects/typedarray/buffer/index.html | 110 ++++ .../reference/global_objects/typedarray/index.html | 317 ++++++++++ .../reference/global_objects/uint8array/index.html | 260 ++++++++ .../reference/global_objects/undefined/index.html | 183 ++++++ .../reference/global_objects/unescape/index.html | 123 ++++ .../reference/global_objects/urierror/index.html | 136 +++++ .../global_objects/weakmap/clear/index.html | 52 ++ .../global_objects/weakmap/delete/index.html | 124 ++++ .../global_objects/weakmap/get/index.html | 80 +++ .../global_objects/weakmap/has/index.html | 83 +++ .../reference/global_objects/weakmap/index.html | 278 +++++++++ .../global_objects/weakmap/set/index.html | 91 +++ .../reference/global_objects/weakset/index.html | 227 +++++++ .../global_objects/webassembly/index.html | 120 ++++ files/es/web/javascript/reference/index.html | 31 + .../reference/iteration_protocols/index.html | 320 ++++++++++ .../reference/lexical_grammar/index.html | 661 +++++++++++++++++++++ .../reference/operators/addition/index.html | 77 +++ .../reference/operators/assignment/index.html | 62 ++ .../reference/operators/async_function/index.html | 102 ++++ .../reference/operators/await/index.html | 102 ++++ .../reference/operators/class/index.html | 157 +++++ .../reference/operators/comma_operator/index.html | 132 ++++ .../operators/conditional_operator/index.html | 171 ++++++ .../reference/operators/decrement/index.html | 83 +++ .../reference/operators/delete/index.html | 242 ++++++++ .../operators/destructuring_assignment/index.html | 442 ++++++++++++++ .../reference/operators/division/index.html | 77 +++ .../reference/operators/equality/index.html | 129 ++++ .../reference/operators/function/index.html | 73 +++ .../reference/operators/function_star_/index.html | 91 +++ .../reference/operators/grouping/index.html | 128 ++++ .../javascript/reference/operators/in/index.html | 139 +++++ .../web/javascript/reference/operators/index.html | 280 +++++++++ .../reference/operators/instanceof/index.html | 88 +++ .../reference/operators/new.target/index.html | 139 +++++ .../javascript/reference/operators/new/index.html | 179 ++++++ .../operators/operator_precedence/index.html | 297 +++++++++ .../operators/optional_chaining/index.html | 187 ++++++ .../operators/pipeline_operator/index.html | 78 +++ .../operators/property_accessors/index.html | 85 +++ .../reference/operators/remainder/index.html | 82 +++ .../reference/operators/spread_syntax/index.html | 242 ++++++++ .../reference/operators/strict_equality/index.html | 101 ++++ .../reference/operators/subtraction/index.html | 65 ++ .../reference/operators/super/index.html | 178 ++++++ .../javascript/reference/operators/this/index.html | 239 ++++++++ .../reference/operators/typeof/index.html | 76 +++ .../javascript/reference/operators/void/index.html | 36 ++ .../reference/operators/yield/index.html | 130 ++++ .../reference/operators/yield_star_/index.html | 199 +++++++ .../reference/statements/async_function/index.html | 173 ++++++ .../reference/statements/block/index.html | 89 +++ .../reference/statements/break/index.html | 41 ++ .../reference/statements/class/index.html | 148 +++++ .../reference/statements/const/index.html | 127 ++++ .../reference/statements/continue/index.html | 66 ++ .../reference/statements/debugger/index.html | 125 ++++ .../reference/statements/do...while/index.html | 49 ++ .../reference/statements/empty/index.html | 141 +++++ .../reference/statements/export/index.html | 175 ++++++ .../reference/statements/for-await...of/index.html | 144 +++++ .../reference/statements/for...in/index.html | 150 +++++ .../reference/statements/for...of/index.html | 319 ++++++++++ .../javascript/reference/statements/for/index.html | 57 ++ .../reference/statements/function/index.html | 52 ++ .../reference/statements/function_star_/index.html | 224 +++++++ .../reference/statements/if...else/index.html | 109 ++++ .../reference/statements/import.meta/index.html | 93 +++ .../reference/statements/import/index.html | 177 ++++++ .../web/javascript/reference/statements/index.html | 141 +++++ .../reference/statements/label/index.html | 35 ++ .../javascript/reference/statements/let/index.html | 393 ++++++++++++ .../reference/statements/return/index.html | 73 +++ .../reference/statements/switch/index.html | 245 ++++++++ .../reference/statements/throw/index.html | 153 +++++ .../reference/statements/try...catch/index.html | 254 ++++++++ .../javascript/reference/statements/var/index.html | 163 +++++ .../reference/statements/while/index.html | 58 ++ .../reference/statements/with/index.html | 166 ++++++ .../javascript/reference/strict_mode/index.html | 368 ++++++++++++ .../reference/template_literals/index.html | 314 ++++++++++ 417 files changed, 57511 insertions(+), 851 deletions(-) create mode 100644 files/es/web/javascript/reference/about/index.html create mode 100644 files/es/web/javascript/reference/classes/constructor/index.html create mode 100644 files/es/web/javascript/reference/classes/extends/index.html create mode 100644 files/es/web/javascript/reference/classes/index.html create mode 100644 files/es/web/javascript/reference/classes/private_class_fields/index.html create mode 100644 files/es/web/javascript/reference/classes/public_class_fields/index.html create mode 100644 files/es/web/javascript/reference/classes/static/index.html create mode 100644 files/es/web/javascript/reference/deprecated_and_obsolete_features/index.html create mode 100644 files/es/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html create mode 100644 files/es/web/javascript/reference/errors/bad_regexp_flag/index.html delete mode 100644 files/es/web/javascript/reference/errors/caracter_ilegal/index.html delete mode 100644 files/es/web/javascript/reference/errors/falta_puntoycoma_antes_de_declaracion/index.html create mode 100644 files/es/web/javascript/reference/errors/illegal_character/index.html delete mode 100644 files/es/web/javascript/reference/errors/indicador_regexp_no-val/index.html create mode 100644 files/es/web/javascript/reference/errors/missing_semicolon_before_statement/index.html create mode 100644 files/es/web/javascript/reference/errors/strict_non_simple_params/index.html delete mode 100644 "files/es/web/javascript/reference/errors/strict_y_par\303\241metros_complejos/index.html" create mode 100644 files/es/web/javascript/reference/functions/arguments/callee/index.html create mode 100644 files/es/web/javascript/reference/functions/arguments/index.html create mode 100644 files/es/web/javascript/reference/functions/arguments/length/index.html create mode 100644 files/es/web/javascript/reference/functions/arrow_functions/index.html create mode 100644 files/es/web/javascript/reference/functions/default_parameters/index.html create mode 100644 files/es/web/javascript/reference/functions/get/index.html create mode 100644 files/es/web/javascript/reference/functions/index.html create mode 100644 files/es/web/javascript/reference/functions/method_definitions/index.html create mode 100644 files/es/web/javascript/reference/functions/rest_parameters/index.html create mode 100644 files/es/web/javascript/reference/functions/set/index.html create mode 100644 files/es/web/javascript/reference/global_objects/aggregateerror/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/@@iterator/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/@@species/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/@@unscopables/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/concat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/copywithin/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/entries/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/every/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/fill/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/filter/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/find/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/findindex/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/flat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/flatmap/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/foreach/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/from/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/includes/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/indexof/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/isarray/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/join/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/keys/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/lastindexof/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/length/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/map/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/of/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/pop/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/push/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/reduce/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/reduceright/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/reverse/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/shift/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/slice/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/some/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/sort/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/splice/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/tolocalestring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/tosource/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/tostring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/unshift/index.html create mode 100644 files/es/web/javascript/reference/global_objects/array/values/index.html create mode 100644 files/es/web/javascript/reference/global_objects/arraybuffer/@@species/index.html create mode 100644 files/es/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html create mode 100644 files/es/web/javascript/reference/global_objects/arraybuffer/index.html create mode 100644 files/es/web/javascript/reference/global_objects/asyncfunction/index.html create mode 100644 files/es/web/javascript/reference/global_objects/boolean/boolean/index.html create mode 100644 files/es/web/javascript/reference/global_objects/boolean/index.html create mode 100644 files/es/web/javascript/reference/global_objects/boolean/tosource/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/getdate/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/getday/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/getfullyear/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/gethours/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/getmilliseconds/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/getminutes/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/getmonth/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/getseconds/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/gettime/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/getutcfullyear/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/getutchours/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/now/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/parse/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/setfullyear/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/setmonth/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/todatestring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/toisostring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/tojson/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/tolocaledatestring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/tolocalestring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/tolocaletimestring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/toutcstring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/date/utc/index.html create mode 100644 files/es/web/javascript/reference/global_objects/decodeuri/index.html create mode 100644 files/es/web/javascript/reference/global_objects/decodeuricomponent/index.html create mode 100644 files/es/web/javascript/reference/global_objects/encodeuri/index.html create mode 100644 files/es/web/javascript/reference/global_objects/encodeuricomponent/index.html create mode 100644 files/es/web/javascript/reference/global_objects/error/error/index.html create mode 100644 files/es/web/javascript/reference/global_objects/error/filename/index.html create mode 100644 files/es/web/javascript/reference/global_objects/error/index.html create mode 100644 files/es/web/javascript/reference/global_objects/error/linenumber/index.html create mode 100644 files/es/web/javascript/reference/global_objects/error/message/index.html create mode 100644 files/es/web/javascript/reference/global_objects/error/name/index.html create mode 100644 files/es/web/javascript/reference/global_objects/error/tosource/index.html create mode 100644 files/es/web/javascript/reference/global_objects/error/tostring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/escape/index.html create mode 100644 files/es/web/javascript/reference/global_objects/eval/index.html create mode 100644 files/es/web/javascript/reference/global_objects/evalerror/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/apply/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/arguments/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/bind/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/call/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/caller/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/displayname/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/function/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/length/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/name/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/tosource/index.html create mode 100644 files/es/web/javascript/reference/global_objects/function/tostring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/generator/index.html create mode 100644 files/es/web/javascript/reference/global_objects/generator/next/index.html create mode 100644 files/es/web/javascript/reference/global_objects/generator/return/index.html create mode 100644 files/es/web/javascript/reference/global_objects/generator/throw/index.html create mode 100644 files/es/web/javascript/reference/global_objects/index.html create mode 100644 files/es/web/javascript/reference/global_objects/infinity/index.html create mode 100644 files/es/web/javascript/reference/global_objects/internalerror/index.html create mode 100644 files/es/web/javascript/reference/global_objects/internalerror/internalerror/index.html create mode 100644 files/es/web/javascript/reference/global_objects/intl/index.html create mode 100644 files/es/web/javascript/reference/global_objects/intl/numberformat/format/index.html create mode 100644 files/es/web/javascript/reference/global_objects/intl/numberformat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/intl/relativetimeformat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/isfinite/index.html create mode 100644 files/es/web/javascript/reference/global_objects/isnan/index.html create mode 100644 files/es/web/javascript/reference/global_objects/json/index.html create mode 100644 files/es/web/javascript/reference/global_objects/json/parse/index.html create mode 100644 files/es/web/javascript/reference/global_objects/json/stringify/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/clear/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/delete/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/entries/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/foreach/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/get/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/has/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/keys/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/set/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/size/index.html create mode 100644 files/es/web/javascript/reference/global_objects/map/values/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/abs/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/acos/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/acosh/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/asin/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/asinh/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/atan/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/atan2/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/atanh/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/cbrt/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/ceil/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/cos/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/e/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/exp/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/expm1/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/floor/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/fround/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/hypot/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/ln10/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/ln2/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/log/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/log10/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/log10e/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/log2/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/log2e/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/max/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/min/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/pi/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/pow/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/random/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/round/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/sign/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/sin/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/sqrt/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/sqrt1_2/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/sqrt2/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/tan/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/tanh/index.html create mode 100644 files/es/web/javascript/reference/global_objects/math/trunc/index.html create mode 100644 files/es/web/javascript/reference/global_objects/nan/index.html create mode 100644 files/es/web/javascript/reference/global_objects/null/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/isfinite/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/isinteger/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/isnan/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/issafeinteger/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/max_safe_integer/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/max_value/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/min_value/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/nan/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/negative_infinity/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/parsefloat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/parseint/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/positive_infinity/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/tofixed/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/tolocalestring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/toprecision/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/tostring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/number/valueof/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/__definegetter__/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/__lookupgetter__/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/assign/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/constructor/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/create/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/defineproperties/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/defineproperty/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/entries/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/freeze/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/fromentries/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/getownpropertynames/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/getprototypeof/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/hasownproperty/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/is/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/isextensible/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/isfrozen/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/isprototypeof/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/issealed/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/keys/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/preventextensions/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/propertyisenumerable/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/proto/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/seal/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/setprototypeof/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/tolocalestring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/tosource/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/tostring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/valueof/index.html create mode 100644 files/es/web/javascript/reference/global_objects/object/values/index.html create mode 100644 files/es/web/javascript/reference/global_objects/parsefloat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/parseint/index.html create mode 100644 files/es/web/javascript/reference/global_objects/promise/all/index.html create mode 100644 files/es/web/javascript/reference/global_objects/promise/catch/index.html create mode 100644 files/es/web/javascript/reference/global_objects/promise/finally/index.html create mode 100644 files/es/web/javascript/reference/global_objects/promise/index.html create mode 100644 files/es/web/javascript/reference/global_objects/promise/race/index.html create mode 100644 files/es/web/javascript/reference/global_objects/promise/reject/index.html create mode 100644 files/es/web/javascript/reference/global_objects/promise/resolve/index.html create mode 100644 files/es/web/javascript/reference/global_objects/promise/then/index.html delete mode 100644 files/es/web/javascript/reference/global_objects/proxy/handler/getownpropertydescriptor/index.html delete mode 100644 files/es/web/javascript/reference/global_objects/proxy/handler/index.html delete mode 100644 files/es/web/javascript/reference/global_objects/proxy/handler/set/index.html create mode 100644 files/es/web/javascript/reference/global_objects/proxy/index.html create mode 100644 files/es/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html create mode 100644 files/es/web/javascript/reference/global_objects/proxy/proxy/index.html create mode 100644 files/es/web/javascript/reference/global_objects/proxy/proxy/set/index.html delete mode 100644 files/es/web/javascript/reference/global_objects/rangeerror/prototype/index.html create mode 100644 files/es/web/javascript/reference/global_objects/referenceerror/index.html create mode 100644 files/es/web/javascript/reference/global_objects/regexp/compile/index.html create mode 100644 files/es/web/javascript/reference/global_objects/regexp/exec/index.html create mode 100644 files/es/web/javascript/reference/global_objects/regexp/ignorecase/index.html create mode 100644 files/es/web/javascript/reference/global_objects/regexp/index.html create mode 100644 files/es/web/javascript/reference/global_objects/regexp/regexp/index.html create mode 100644 files/es/web/javascript/reference/global_objects/regexp/rightcontext/index.html create mode 100644 files/es/web/javascript/reference/global_objects/regexp/test/index.html create mode 100644 files/es/web/javascript/reference/global_objects/regexp/tostring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/set/@@iterator/index.html create mode 100644 files/es/web/javascript/reference/global_objects/set/add/index.html create mode 100644 files/es/web/javascript/reference/global_objects/set/clear/index.html create mode 100644 files/es/web/javascript/reference/global_objects/set/delete/index.html create mode 100644 files/es/web/javascript/reference/global_objects/set/entries/index.html create mode 100644 files/es/web/javascript/reference/global_objects/set/has/index.html create mode 100644 files/es/web/javascript/reference/global_objects/set/index.html create mode 100644 files/es/web/javascript/reference/global_objects/set/size/index.html create mode 100644 files/es/web/javascript/reference/global_objects/set/values/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/anchor/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/big/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/blink/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/bold/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/charat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/charcodeat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/codepointat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/concat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/endswith/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/fixed/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/fontcolor/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/fontsize/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/fromcharcode/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/fromcodepoint/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/includes/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/indexof/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/italics/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/lastindexof/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/length/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/link/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/localecompare/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/match/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/matchall/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/normalize/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/padstart/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/raw/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/repeat/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/replace/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/search/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/slice/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/small/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/split/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/startswith/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/strike/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/sub/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/substr/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/substring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/sup/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/tolocalelowercase/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/tolowercase/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/tosource/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/tostring/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/touppercase/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/trim/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/trimend/index.html create mode 100644 files/es/web/javascript/reference/global_objects/string/valueof/index.html create mode 100644 files/es/web/javascript/reference/global_objects/symbol/for/index.html create mode 100644 files/es/web/javascript/reference/global_objects/symbol/hasinstance/index.html create mode 100644 files/es/web/javascript/reference/global_objects/symbol/index.html create mode 100644 files/es/web/javascript/reference/global_objects/symbol/iterator/index.html create mode 100644 files/es/web/javascript/reference/global_objects/syntaxerror/index.html create mode 100644 files/es/web/javascript/reference/global_objects/typedarray/buffer/index.html create mode 100644 files/es/web/javascript/reference/global_objects/typedarray/index.html create mode 100644 files/es/web/javascript/reference/global_objects/uint8array/index.html create mode 100644 files/es/web/javascript/reference/global_objects/undefined/index.html create mode 100644 files/es/web/javascript/reference/global_objects/unescape/index.html create mode 100644 files/es/web/javascript/reference/global_objects/urierror/index.html create mode 100644 files/es/web/javascript/reference/global_objects/weakmap/clear/index.html create mode 100644 files/es/web/javascript/reference/global_objects/weakmap/delete/index.html create mode 100644 files/es/web/javascript/reference/global_objects/weakmap/get/index.html create mode 100644 files/es/web/javascript/reference/global_objects/weakmap/has/index.html create mode 100644 files/es/web/javascript/reference/global_objects/weakmap/index.html create mode 100644 files/es/web/javascript/reference/global_objects/weakmap/set/index.html create mode 100644 files/es/web/javascript/reference/global_objects/weakset/index.html create mode 100644 files/es/web/javascript/reference/global_objects/webassembly/index.html create mode 100644 files/es/web/javascript/reference/index.html create mode 100644 files/es/web/javascript/reference/iteration_protocols/index.html create mode 100644 files/es/web/javascript/reference/lexical_grammar/index.html create mode 100644 files/es/web/javascript/reference/operators/addition/index.html create mode 100644 files/es/web/javascript/reference/operators/assignment/index.html create mode 100644 files/es/web/javascript/reference/operators/async_function/index.html create mode 100644 files/es/web/javascript/reference/operators/await/index.html create mode 100644 files/es/web/javascript/reference/operators/class/index.html create mode 100644 files/es/web/javascript/reference/operators/comma_operator/index.html create mode 100644 files/es/web/javascript/reference/operators/conditional_operator/index.html create mode 100644 files/es/web/javascript/reference/operators/decrement/index.html create mode 100644 files/es/web/javascript/reference/operators/delete/index.html create mode 100644 files/es/web/javascript/reference/operators/destructuring_assignment/index.html create mode 100644 files/es/web/javascript/reference/operators/division/index.html create mode 100644 files/es/web/javascript/reference/operators/equality/index.html create mode 100644 files/es/web/javascript/reference/operators/function/index.html create mode 100644 files/es/web/javascript/reference/operators/function_star_/index.html create mode 100644 files/es/web/javascript/reference/operators/grouping/index.html create mode 100644 files/es/web/javascript/reference/operators/in/index.html create mode 100644 files/es/web/javascript/reference/operators/index.html create mode 100644 files/es/web/javascript/reference/operators/instanceof/index.html create mode 100644 files/es/web/javascript/reference/operators/new.target/index.html create mode 100644 files/es/web/javascript/reference/operators/new/index.html create mode 100644 files/es/web/javascript/reference/operators/operator_precedence/index.html create mode 100644 files/es/web/javascript/reference/operators/optional_chaining/index.html create mode 100644 files/es/web/javascript/reference/operators/pipeline_operator/index.html create mode 100644 files/es/web/javascript/reference/operators/property_accessors/index.html create mode 100644 files/es/web/javascript/reference/operators/remainder/index.html create mode 100644 files/es/web/javascript/reference/operators/spread_syntax/index.html create mode 100644 files/es/web/javascript/reference/operators/strict_equality/index.html create mode 100644 files/es/web/javascript/reference/operators/subtraction/index.html create mode 100644 files/es/web/javascript/reference/operators/super/index.html create mode 100644 files/es/web/javascript/reference/operators/this/index.html create mode 100644 files/es/web/javascript/reference/operators/typeof/index.html create mode 100644 files/es/web/javascript/reference/operators/void/index.html create mode 100644 files/es/web/javascript/reference/operators/yield/index.html create mode 100644 files/es/web/javascript/reference/operators/yield_star_/index.html create mode 100644 files/es/web/javascript/reference/statements/async_function/index.html create mode 100644 files/es/web/javascript/reference/statements/block/index.html create mode 100644 files/es/web/javascript/reference/statements/break/index.html create mode 100644 files/es/web/javascript/reference/statements/class/index.html create mode 100644 files/es/web/javascript/reference/statements/const/index.html create mode 100644 files/es/web/javascript/reference/statements/continue/index.html create mode 100644 files/es/web/javascript/reference/statements/debugger/index.html create mode 100644 files/es/web/javascript/reference/statements/do...while/index.html create mode 100644 files/es/web/javascript/reference/statements/empty/index.html create mode 100644 files/es/web/javascript/reference/statements/export/index.html create mode 100644 files/es/web/javascript/reference/statements/for-await...of/index.html create mode 100644 files/es/web/javascript/reference/statements/for...in/index.html create mode 100644 files/es/web/javascript/reference/statements/for...of/index.html create mode 100644 files/es/web/javascript/reference/statements/for/index.html create mode 100644 files/es/web/javascript/reference/statements/function/index.html create mode 100644 files/es/web/javascript/reference/statements/function_star_/index.html create mode 100644 files/es/web/javascript/reference/statements/if...else/index.html create mode 100644 files/es/web/javascript/reference/statements/import.meta/index.html create mode 100644 files/es/web/javascript/reference/statements/import/index.html create mode 100644 files/es/web/javascript/reference/statements/index.html create mode 100644 files/es/web/javascript/reference/statements/label/index.html create mode 100644 files/es/web/javascript/reference/statements/let/index.html create mode 100644 files/es/web/javascript/reference/statements/return/index.html create mode 100644 files/es/web/javascript/reference/statements/switch/index.html create mode 100644 files/es/web/javascript/reference/statements/throw/index.html create mode 100644 files/es/web/javascript/reference/statements/try...catch/index.html create mode 100644 files/es/web/javascript/reference/statements/var/index.html create mode 100644 files/es/web/javascript/reference/statements/while/index.html create mode 100644 files/es/web/javascript/reference/statements/with/index.html create mode 100644 files/es/web/javascript/reference/strict_mode/index.html create mode 100644 files/es/web/javascript/reference/template_literals/index.html (limited to 'files/es/web/javascript/reference') diff --git a/files/es/web/javascript/reference/about/index.html b/files/es/web/javascript/reference/about/index.html new file mode 100644 index 0000000000..3382ea7dca --- /dev/null +++ b/files/es/web/javascript/reference/about/index.html @@ -0,0 +1,158 @@ +--- +title: Acerca de +slug: Web/JavaScript/Referencia/Acerca_de +tags: + - JavaScript +translation_of: Web/JavaScript/Reference/About +--- +
{{JsSidebar}}
+ +

Nuevas características en esta versión

+ +

JavaScript versión 1.5 provee las siguientes nuevas características y extensiones:

+ +

Errores en tiempo de ejecución
+ Los errores en tiempo de ejecución son ahora reportados como excepciones.

+ +

Extensiones para el formato de números
+ El formato de números ha sido extendido para incluir los métodos Number.prototype.toExponential, Number.prototype.toFixed y Number.prototype.toPrecision.

+ +

Extensiones de expresiones regulares
+ Las siguientes extensiones para expresiones regulares han sido añadidas:

+ + + +

Declaraciones condicionales de funciones
+ Las funciones ahora pueden ser declaradas al interior de una cláusula if.

+ +

Expresiones funcionales
+ Las funciones ahora pueden ser declaradas al interior de una expresión.

+ +

Cláusulas Catch múltiples
+ Las cláusulas Catch múltiples en una sentencia try...catch son soportadas.

+ +

Constantes
+ Constantes nominadas como sólo de lectura son soportadas. Esta característica está disponible únicamente en la implementación C de JavaScript.

+ +

Obtenedores y Modificadores (Getters and Setters)
+ Los editores de JavaScript ahora pueden añadir obtenedores {{ mediawiki.external('getters') }} y modificadores {{ mediawiki.external('setters') }} a sus objetos. Esta característica está disponible únicamente en la implementación C de JavaScript.

+ +

Qué debería saberse ya

+ +

Esta referencia asume que usted tiene a su respaldo el siguiente conocimiento básico:

+ + + +

Es beneficioso alguna experiencia en programación en lenguajes como C o Visual Basic, pero no es requerido.

+ +

Versiones de JavaScript

+ +

Cada versión del servidor Netscape Enterprise también soporta una versión diferente de JavaScript. Para ayudarle a escribir sus scripts para que sean compatibles con múltiples versiones de un servidor Enterprise, este manual lista la versión de JavaScript en la cual cada característica fue implementada.

+ +

La siguiente tabla lista las veriones de JavaScript soportadas por las diferentes versiones de Navegadores. Versiones de Navegadores anteriores a la 2.0 no soportan JavaScript.

+ +

JavaScript y Versiones de Navegadores

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Versión de JavaScriptVersión del Navegador
JavaScript 1.0Navegador 2.0
JavaScript 1.1Navegador 3.0
JavaScript 1.2Navegador 4.0-4.05
JavaScript 1.3Navegador 4.06-4.7x
JavaScript 1.4n/a
JavaScript 1.5Navegador 6.0 +

Mozilla 0.6x-0.9x
+ (navegador de código abierto)

+
JavaScript 1.6Mozilla Firefox 1.5
JavaScript 1.7Mozilla Firefox 2
+ +

Cada versión del servidor Netscape Enterprise también soporta una versión diferente de JavaScript. Para ayudarle a escribir sus scripts para que sean compatibles con múltiples versiones de un servidor Enterprise, este manual usa una abreviación para indicar la versión del servidor en el cual cada característica fue implementada.

+ +

JavaScript and Netscape Enterprise Server Versions

+ + + + + + + + + + + + + + + + +
AbbreviationEnterprise Server Version
NES 2.0Netscape Enterprise Server 2.0
NES 3.0Netscape Enterprise Server 3.0
+ +

Dónde encontrar información de JavaScript

+ +

La documentación de JavaScript incluye los siguientes libros:

+ + + +

Si usted es principiante con JavaScript, comience por la Guía de JavaScript y una vez que haya obtenido firmes entendimientos de sus fundamentos, debe seguir con la Referencia de JavaScript 1.5 para conseguir más detalles individuales acerca de los objetos y las sentencias.

+ +

Convenciones en el documento

+ +

Las aplicaciones JavaScript se ejecutan en muchos sistemas operativos; la información en este libro se aplica a todas las versiones. Las rutas {{ mediawiki.external('paths') }} para archivos y directorios están dadas en un formato Windows (con backslashes separando los nombres de directorios). Para las versiones Unix, la ruta de los directorios son las mismas, excepto que deben usarse slashes en vez de backslashes para separar los directorios.

+ +

Esta guía utiliza los localizadores uniformes de recursos {{ mediawiki.external('uniform resource locators') }} (URLs) de la siguiente forma:

+ +

http://servidor.dominio/path/file.html

+ +

En estos URLs, "servidor" representa el nombre del servidor en el cual puede ejecutar su aplicación (p.e., busqueda1, www), "dominio" representa un nombre de dominio de Internet (p.e., netscape.com, uiuc.edu), "path" representa la estructura de directorios en el servidor y "file.html" representa un nombre individual de archivo. En general, los items en italica en un URLs se mantienen en su lugar y los items en un tipo normal de fuente monospace son literales. Si su servidor tiene habilitada la capa de sockets seguros {{ mediawiki.external('Secure Sockets Layer') }} (SSL), deberá usar https en lugar de http en el URL.

+ +

Esta guía utiliza las siguientes convenciones de tipo de fuente:

+ + + +

 

diff --git a/files/es/web/javascript/reference/classes/constructor/index.html b/files/es/web/javascript/reference/classes/constructor/index.html new file mode 100644 index 0000000000..9ad7ec8de9 --- /dev/null +++ b/files/es/web/javascript/reference/classes/constructor/index.html @@ -0,0 +1,102 @@ +--- +title: constructor +slug: Web/JavaScript/Referencia/Classes/constructor +tags: + - Clases + - ECMAScript6 + - JavaScript +translation_of: Web/JavaScript/Reference/Classes/constructor +--- +
{{jsSidebar("Classes")}}
+ +

El método constructor es un metodo especial para crear e inicializar un objeto creado a partir de una clase.

+ +

El código fuente para este ejemplo interactivo se encuentra almacenado en un repositorio de Github. Si quieres contribuir al proyecto de ejemplos interactivos, por favor clona https://github.com/mdn/interactive-examples y envíanos una solicitud para extraer el código (pull request).

+ +

Sintaxis

+ +
constructor([argumentos]) { ... }
+ +

Descripción

+ +

Sólo puede haber un método especial con el nombre de "constructor" en una clase. Un error de sintaxis será lanzado, si la clase contiene más de una ocurrencia de un método constructor.

+ +

Un constructor puede utilizar la palabra clave super para llamar al constructor de una clase padre.

+ +

Si no especifica un método constructor, se utiliza un constructor predeterminado.

+ +

Ejemplos

+ +

Usando el método constructor

+ +

Este fragmento de código se toma de la classes sample (live demo).

+ +
class Square extends Polygon {
+  constructor(length) {
+    // Aquí, llama al constructor de la clase padre con sus longitudes
+    // contemplando la anchura y la altura del Polígono
+    super(length, length);
+    // Nota: En las clases derivadas, super() se debe llamar primero
+    // Se puede utilizar "this". Dejando esto causará un error de
+    //referencia.
+    this.name = 'Square';
+  }
+
+  get area() {
+    return this.height * this.width;
+  }
+
+  set area(value) {
+    this.area = value;
+  }
+}
+ +

Constructores por defecto

+ +

Si no especifica un método constructor, se utiliza un constructor predeterminado. Para las clases base, el constructor por defecto es:

+ +
constructor() {}
+
+ +

Para las clases derivadas, el constructor por defecto es:

+ +
constructor(...args) {
+  super(...args);
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-static-semantics-constructormethod', 'Constructor Method')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-static-semantics-constructormethod', 'Constructor Method')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad del navegador

+ +

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

+ +

La tabla de compatibilidad de esta pagina está generada a partir de data estructurada. Si quieres contribuir a la data, por favor dirígete a https://github.com/mdn/browser-compat-data y envíanos una solicitud de extracción

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/classes/extends/index.html b/files/es/web/javascript/reference/classes/extends/index.html new file mode 100644 index 0000000000..6781c3801e --- /dev/null +++ b/files/es/web/javascript/reference/classes/extends/index.html @@ -0,0 +1,167 @@ +--- +title: extends +slug: Web/JavaScript/Referencia/Classes/extends +translation_of: Web/JavaScript/Reference/Classes/extends +--- +
{{jsSidebar("Classes")}}
+ +

La palabra clave extends es usada en la declaración o expresión de clases, para crear una clase hija de otra.

+ +

Sintaxis

+ +
class ChildClass extends ParentClass { ... }
+ +

Descripción

+ +

La palabra clave extends se puede usar para crear una subclase a partir de clases personalizadas, así como sus objetos incorporados.

+ +

La propiedad .prototype de la nueva subclase debe ser un {{jsxref("Object")}} o {{jsxref("null")}}.

+ +

Ejemplos

+ +

Como usar extends

+ +

El primer ejemplo crea una clase con el nombre Square a partir de una clase llamada Polygon. Este ejemplo ha sido extraido del siguiente live demo (código fuente).

+ +
class Square extends Polygon {
+  constructor(length) {
+    // Aquí se invoca el constructor de la clase padre con longitud
+    // proporcionada por el ancho y alto de Polygon
+    super(length, length);
+    // Nota: En las clases extendidas, se debe llamar a super()
+    // antes de poder usar 'this'. El no hacerlo provocará un reference error.
+    this.name = 'Square';
+  }
+
+  get area() {
+    return this.height * this.width;
+  }
+
+  set area(value) {
+    this.area = value;
+  }
+}
+ +

Como usar extends con objetos incorporados

+ +

Este ejemplo extiende el objeto incorporado {{jsxref("Date")}}. Este ejemplo ha sido extraido del siguiente live demo (código fuente).

+ +
class myDate extends Date {
+  constructor() {
+    super();
+  }
+
+  getFormattedDate() {
+    var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
+    return this.getDate() + "-" + months[this.getMonth()] + "-" + this.getFullYear();
+  }
+}
+ +

Extendiendo de null

+ +

Extender de {{jsxref("null")}} es como hacerlo de una clase normal, excepto que el objeto prototype no hereda de {{jsxref("Object.prototype")}}.

+ +
class nullExtends extends null {
+  constructor() {}
+}
+
+Object.getPrototypeOf(nullExtends); // Function.prototype
+Object.getPrototypeOf(nullExtends.prototype) // null
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES6', '#sec-class-definitions', 'extends')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-class-definitions', 'extends')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(42.0)}}{{CompatGeckoDesktop(45)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Array subclassing{{CompatChrome(43.0)}}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Basic support{{CompatNo}}{{CompatGeckoMobile(45)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatChrome(42.0)}}
Array subclassing{{CompatNo}}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatChrome(43.0)}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/classes/index.html b/files/es/web/javascript/reference/classes/index.html new file mode 100644 index 0000000000..0f108dda68 --- /dev/null +++ b/files/es/web/javascript/reference/classes/index.html @@ -0,0 +1,372 @@ +--- +title: Clases +slug: Web/JavaScript/Referencia/Classes +tags: + - Classes + - ECMAScript 2015 + - Herencia + - Intermedio + - JavaScript + - NeedsContent + - NeedsTranslation + - Reference + - TopicStub +translation_of: Web/JavaScript/Reference/Classes +--- +
{{JsSidebar("Classes")}}
+ +

Las clases de javascript, introducidas en ECMAScript 2015, son una mejora sintáctica sobre la herencia basada en prototipos de JavaScript. La sintaxis de las clases no introduce un nuevo modelo de herencia orientada a objetos en JavaScript. Las clases de JavaScript proveen una sintaxis mucho más clara y simple para crear objetos y lidiar con la herencia.

+ +

Definiendo clases

+ +

Las clases son "funciones especiales", como las expresiones de funciones y declaraciones de funciones, la sintaxis de una clase tiene dos componentes: expresiones de clases y declaraciones de clases.

+ +

Declaración de clases

+ +

Una manera de definir una clase es mediante una declaración de clase. Para declarar una clase, se utiliza la palabra reservada class y un nombre para la clase "Rectangulo".

+ +
class Rectangulo {
+  constructor(alto, ancho) {
+    this.alto = alto;
+    this.ancho = ancho;
+  }
+}
+ +

Alojamiento

+ +

Una importante diferencia entre las declaraciones de funciones y las declaraciones de clases es que las declaraciones de funciones son alojadas y las declaraciones de clases no lo son. En primer lugar necesitas declarar tu clase y luego acceder a ella, de otro modo el ejemplo de código siguiente arrojará un {{jsxref("ReferenceError")}}:

+ +
const p = new Rectangle(); // ReferenceError
+
+class Rectangle {}
+
+ +

Expresiones de clases

+ +

Una expresión de clase es otra manera de definir una clase. Las expresiones de clase pueden ser nombradas o anónimas. El nombre dado a la expresión de clase nombrada es local dentro del cuerpo de la misma.

+ +
// Anonima
+let Rectangulo = class {
+  constructor(alto, ancho) {
+    this.alto = alto;
+    this.ancho = ancho;
+  }
+};
+
+console.log(Rectangulo.name);
+// output: "Rectangulo"
+
+// Nombrada
+let Rectangulo = class Rectangulo2 {
+  constructor(alto, ancho) {
+    this.alto = alto;
+    this.ancho = ancho;
+  }
+};
+console.log(Rectangulo.name);
+// output: "Rectangulo2"
+
+ +
+

Nota: Las expresiones de clase están sujetas a las mismas restricciones de elevación que se describen en la sección {{anch("Class declarations")}}.

+
+ +

Cuerpo de la clase y definición de métodos

+ +

El contenido de una clase es la parte que se encuentra entre las llaves {}. Este es el lugar se definen los miembros de clase, como los métodos o constructores.

+ +

Modo estricto

+ +

El cuerpo de las declaraciones de clase y las expresiones de clase son ejecutadas en modo estricto. En otras palabras, el código escrito aquí está sujeto a una sintaxis más estricta para aumentar el rendimiento, se arrojarán algunos errores silenciosos y algunas palabras clave están reservadas para versiones futuras de ECMAScript.

+ +

Constructor

+ +

El método constructor es un método especial para crear e inicializar un objeto creado con una clase. Solo puede haber un método especial con el nombre "constructor" en una clase. Si esta contiene mas de una ocurrencia del método constructor, se arrojará un Error {{jsxref("SyntaxError")}}

+ +

Un constructor puede usar la palabra reservada super para llamar al constructor de una superclase

+ +

Métodos prototipo

+ +

Vea también métodos definidos.

+ +
class Rectangulo {
+  constructor (alto, ancho) {
+    this.alto = alto;
+    this.ancho = ancho;
+  }
+  // Getter
+  get area() {
+     return this.calcArea();
+   }
+  // Método
+  calcArea () {
+    return this.alto * this.ancho;
+  }
+}
+
+const cuadrado = new Rectangulo(10, 10);
+
+console.log(cuadrado.area); // 100
+ +
+ +

Métodos estáticos

+ +

La palabra clave static define un método estático para una clase. Los métodos estáticos son llamados sin instanciar su clase y no pueden ser llamados mediante una instancia de clase. Los métodos estáticos son a menudo usados para crear funciones de utilidad para una aplicación.

+ +
class Punto {
+  constructor ( x , y ){
+    this.x = x;
+    this.y = y;
+  }
+
+  static distancia ( a , b) {
+    const dx = a.x - b.x;
+    const dy = a.y - b.y;
+
+    return Math.sqrt ( dx * dx + dy * dy );
+  }
+}
+
+const p1 = new Punto(5, 5);
+const p2 = new Punto(10, 10);
+
+console.log (Punto.distancia(p1, p2)); // 7.0710678118654755
+ +

"Boxing" con prototipos y métodos estáticos

+ +

Cuando un método estático o método del prototipo es llamado sin un valor para "this" (o con "this" como booleano, cadena, número, undefined o null), entonces el valor de "this" será undefined dentro de la funciona llamada. Autoboxing no ocurrirá. El comportamiento será igual inclusive si se escribe el código en modo no estricto.

+ +
class Animal {
+  hablar() {
+    return this;
+  }
+  static comer() {
+    return this;
+  }
+}
+
+let obj = new Animal();
+obj.hablar(); // Animal {}
+let hablar = obj.hablar;
+hablar(); // undefined
+
+Animal.comer() // class Animal
+let comer = Animal.comer;
+comer(); // undefined
+ +

Si se escribe el código del cuadro superior usando clases función tradicionales, entonces autoboxing ocurrirara porque tomará valor de "this" sobre la función que es llamada.

+ +
function Animal() { }
+
+Animal.prototype.hablar = function(){
+  return this;
+}
+
+Animal.comer = function() {
+  return this;
+}
+
+let obj = new Animal();
+let hablar = obj.hablar;
+hablar(); // global object
+
+let hablar = Animal.hablar;
+hablar(); // global object
+ +

Subclases con extends

+ +

La palabra clave extends es usada en declaraciones de clase o expresiones de clase para crear una clase hija.

+ +
class Animal {
+  constructor(nombre) {
+    this.nombre = nombre;
+  }
+
+  hablar() {
+    console.log(this.nombre + ' hace un ruido.');
+  }
+}
+
+class Perro extends Animal {
+  hablar() {
+    console.log(this.nombre + ' ladra.');
+  }
+}
+ +

También se pueden extender las clases tradicionales basadas en funciones:

+ +
function Animal (nombre) {
+  this.nombre = nombre;
+}
+Animal.prototype.hablar = function () {
+  console.log(this.nombre + 'hace un ruido.');
+}
+
+class Perro extends Animal {
+  hablar() {
+    super.hablar();
+    console.log(this.nombre + ' ladra.');
+  }
+}
+
+var p = new Perro('Mitzie');
+p.hablar();
+ +

Fijarse que las clases no pueden extender objectos regulares (literales). Si se quiere heredar de un objecto regular, se debe user {{jsxref("Object.setPrototypeOf()")}}::

+ +
var Animal = {
+  hablar() {
+    console.log(this.nombre + 'hace ruido.');
+  }
+};
+
+class Perro {
+  constructor(nombre) {
+    this.nombre = nombre;
+  }
+  hablar() {
+    console.log(this.nombre + ' ladra.');
+  }
+}
+
+Object.setPrototypeOf(Perro.prototype, Animal);
+
+var d = new Perro('Mitzie');
+d.hablar();
+ +

Especies

+ +

Quizás se quiera devolver objetos {{jsxref("Array")}} derivados de la clase array MyArray. El patron species permite sobreescribir constructores por defecto.

+ +

Por ejemplo, cuando se usan metodos del tipo {{jsxref("Array.map", "map()")}} que devuelven el constructor por defecto, se quiere que esos métodos devuelvan un objeto padre Array, en vez de MyArray. El símbolo {{jsxref("Symbol.species")}} permite hacer:

+ +
class MyArray extends Array {
+  // Sobre escribe species sobre el constructor padre Array
+  static get [Symbol.species]() { return Array; }
+}
+
+var a = new MyArray(1,2,3);
+var mapped = a.map(x => x * x);
+
+console.log(mapped instanceof MyArray); // false
+console.log(mapped instanceof Array);   // true
+
+ +

Llamadas a súperclases con super

+ +

La palabra clave super es usada para llamar funciones del objeto padre.

+ +
class Gato {
+  constructor(nombre) {
+    this.nombre = nombre;
+  }
+
+  hablar() {
+    console.log(this.nombre + ' hace ruido.');
+  }
+}
+
+class Leon extends Gato {
+  hablar() {
+    super.hablar();
+    console.log(this.nombre + ' maulla.');
+  }
+}
+ +

Mix-ins

+ +

Subclases abstractas or mix-ins son plantillas de clases. Una clase ECMAScript solo puede tener una clase padre, con lo cual la herencia multiple no es posible. La funcionalidad debe ser proporcionada por la clase padre.

+ +

Una función con una clase padre como entrada y una subclase extendiendo la clase padre como salida puede ser usado para implementar mix-ins en EMCAScript:

+ +
var calculatorMixin = Base => class extends Base {
+  calc() { }
+};
+
+var randomizerMixin = Base => class extends Base {
+  randomize() { }
+};
+ +

Una clase que use este método puede ser escrita tal que así:

+ +
class Foo { }
+class Bar extends calculatorMixin(randomizerMixin(Foo)) { }
+ +

Especificaciones

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2015')}}Initial definition.
+ +

Compatibilidad entre navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(42.0)}}Available in the Nightly channel only (since February 2015){{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Basic support{{CompatNo}}Available in the Nightly channel only (since February 2015){{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatChrome(42.0)}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/classes/private_class_fields/index.html b/files/es/web/javascript/reference/classes/private_class_fields/index.html new file mode 100644 index 0000000000..5826cc125b --- /dev/null +++ b/files/es/web/javascript/reference/classes/private_class_fields/index.html @@ -0,0 +1,201 @@ +--- +title: Private class fields +slug: Web/JavaScript/Referencia/Classes/Private_class_fields +translation_of: Web/JavaScript/Reference/Classes/Private_class_fields +--- +
+

Las propiedades de la clase son públicas de forma predeterminada y se pueden examinar o modificar fuera de la clase. Sin embargo, existe una propuesta experimental  para permitir la definición de campos de clase privados utilizando un #prefijo hash .

+
+ +

Syntax

+ +
class ClassWithPrivateField {
+  #privateField
+}
+
+class ClassWithPrivateMethod {
+  #privateMethod() {
+    return 'hello world'
+ }
+}
+
+class ClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD
+}
+
+ +

Campos estáticos privados 

+ +

Los campos privados son accesibles en el constructor de clases desde dentro de la propia declaración de clases.

+ +

La limitación de las variables estáticas que se llaman solo por métodos estáticos aún se mantiene

+ +
class ClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD
+
+  static publicStaticMethod() {
+    ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD = 42
+    return ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD
+  }
+}
+
+console.assert(ClassWithPrivateStaticField.publicStaticMethod() === 42)
+ +

Los campos estáticos privados se agregan al constructor de la clase en el momento de la evaluación de la clase.

+ +

Existe una restricción de procedencia en los campos estáticos privados. Solo la clase que define el campo estático privado puede acceder al campo.

+ +

Esto puede conducir a un comportamiento inesperado al usar 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)
+
+ +

Campos de instancia privados

+ +

Los campos de instancia privados se declaran con # nombres  (pronunciados " nombres hash "), que son identificadores con el prefijo #. El #es una parte del nombre propio. También se utiliza para la declaración y el acceso.

+ +

La encapsulación es impuesta por el lenguaje. Es un error de sintaxis referirse a #nombres que están fuera del alcance.

+ +
class ClassWithPrivateField {
+  #privateField
+
+  constructor() {
+    this.#privateField = 42
+    this.#randomField = 666 // Syntax error
+  }
+}
+
+const instance = new ClassWithPrivateField()
+instance.#privateField === 42 // Syntax error
+
+ +

Métodos privados

+ +

Métodos estáticos privados

+ +

Al igual que su equivalente público, los métodos estáticos privados se invocan en la propia clase, no en instancias de la clase. Al igual que los campos estáticos privados, solo se puede acceder a ellos desde dentro de la declaración de clase.

+ +

Los métodos estáticos privados pueden ser funciones generadoras, asíncronas y asíncronas.

+ +
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);
+
+ +

Esto puede conducir a un comportamiento inesperado al usar this. En el siguiente ejemplo se thishace referencia a la Derivedclase (no a la Baseclase) cuando intentamos llamar Derived.publicStaticMethod2(), y por lo tanto exhibe la misma "restricción de procedencia" que se mencionó anteriormente:

+ +
class Base {
+    static #privateStaticMethod() {
+        return 42;
+    }
+    static publicStaticMethod1() {
+        return Base.#privateStaticMethod();
+    }
+    static publicStaticMethod2() {
+        return this.#privateStaticMethod();
+    }
+}
+
+class Derived extends Base {}
+
+console.log(Derived.publicStaticMethod1()); // 42
+console.log(Derived.publicStaticMethod2()); // TypeError
+
+ +

Métodos de instancia privada

+ +

Los métodos de instancia privada son métodos disponibles en instancias de clase cuyo acceso está restringido de la misma manera que los campos de instancia privada.

+ +
class ClassWithPrivateMethod {
+  #privateMethod() {
+    return 'hello world'
+  }
+
+  getPrivateMessage() {
+      return this.#privateMethod()
+  }
+}
+
+const instance = new ClassWithPrivateMethod()
+console.log(instance.getPrivateMessage())
+// expected output: "hello worl​d"
+ +

Los métodos de instancia privada pueden ser funciones generadoras, asíncronas o asíncronas. Los getters y setters privados también son posibles:

+ +
class ClassWithPrivateAccessor {
+  #message
+
+  get #decoratedMessage() {
+    return `✨${this.#message}✨`
+  }
+  set #decoratedMessage(msg) {
+    this.#message = msg
+  }
+
+  constructor() {
+    this.#decoratedMessage = 'hello world'
+    console.log(this.#decoratedMessage)
+  }
+}
+
+new ClassWithPrivateAccessor();
+// expected output: "✨hello worl​d✨"
+
+ +

Specifications

+ + + + + + + + + + + + +
Specification
{{SpecName('Public and private instance fields', '#prod-FieldDefinition', 'FieldDefinition')}}
+ +

Browser compatibility

+ + + +

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

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/classes/public_class_fields/index.html b/files/es/web/javascript/reference/classes/public_class_fields/index.html new file mode 100644 index 0000000000..446c63c001 --- /dev/null +++ b/files/es/web/javascript/reference/classes/public_class_fields/index.html @@ -0,0 +1,386 @@ +--- +title: Class fields +slug: Web/JavaScript/Referencia/Classes/Class_fields +tags: + - Clases + - JavaScript +translation_of: Web/JavaScript/Reference/Classes/Public_class_fields +--- +
{{JsSidebar("Classes")}}
+ +
Las declaraciones de campos públicos y privados son una característica experimental (en estado 3) propuesta por el TC39, el comite de estandares de JavaScript. El soporte y funcionamiento en navegadores es limitado, pero la funcionalidad puede ser usada a través de un paso durante el proceso del build por medio de sistemas como Babel. Revise compat information mas abajo.
+ +

Los campos públicos y estáticos son propieades editables, enumerables, y configurables. A diferencia de su contraparte privada, estos participan en la herencia de prototipo.

+ +

Sintaxis

+ +
class ClassWithInstanceField {
+  instanceField = 'instance field'
+}
+
+class ClassWithStaticField {
+  static staticField = 'static field'
+}
+
+class ClassWithPublicInstanceMethod {
+  publicMethod() {
+    return 'hello world'
+  }
+}
+
+ +

Ejemplos

+ +

Campos públicos estáticos

+ +

Los campos estáticos públicos son útiles cuando desea que exista un campo solo una vez por clase, no en cada instancia de clase que cree. Esto es útil para cachés, configuración fija o cualquier otro dato que no necesite replicarse en todas las instancias.

+ +

Los campos estáticos públicos se declaran utilizando la palabra clave static. Se agregan al constructor de la clase en el momento de la evaluación de la clase utilizando {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}}. Se accede nuevamente desde el constructor de la clase.

+ +
class ClassWithStaticField {
+  static staticField = 'static field';
+}
+
+console.log(ClassWithStaticField.staticField);
+// expected output: "static field"​
+
+ +

Campos sin inicializadores son inicializados como undefined.

+ +
class ClassWithStaticField {
+  static staticField;
+}
+
+console.assert(ClassWithStaticField.hasOwnProperty('staticField'));
+console.log(ClassWithStaticField.staticField);
+// expected output: "undefined"
+ +

Los campos estáticos públicos no se reinicializan en las subclases, pero se puede acceder a ellos a través de la cadena de prototipo.

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

Cuando se inicializasn campos this se refiere al constuctor de clase. Tambien puede ser referenciado por nombre, y se puede usar super para obtener el constructor de la superclase si lo tiene.

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

Campos de instancia públicos

+ +

Los campos de instancia públicos existen en cada instancia de la clase que se ha creado. Al declarar un campo publico podemos asegurarnos que dicho campo siempre esta presente, y la definicion de la clase esta auto-documentada.

+ +

Los campos de instancia públicos son agregados with Object.defineProperty ya sea a la hora de ser construido en la clase base (antes que el metodo constructor corra), o justo despues que  super() returne en una subclase.

+ +
class ClassWithInstanceField {
+  instanceField = 'instance field';
+}
+
+const instance = new ClassWithInstanceField();
+console.log(instance.instanceField);
+// expected output: "instance field"
+ +

Campos sin inicializadores son inicilizados en undefined.

+ +
class ClassWithInstanceField {
+  instanceField;
+}
+
+const instance = new ClassWithInstanceField();
+console.assert(instance.hasOwnProperty('instanceField'));
+console.log(instance.instanceField);
+// expected output: "undefined"
+ +

Al igual que las propiedades, los nombres de campos pueden ser calculados (computed)

+ +
const PREFIX = 'prefix';
+
+class ClassWithComputedFieldName {
+    [`${PREFIX}Field`] = 'prefixed field';
+}
+
+const instance = new ClassWithComputedFieldName();
+console.log(instance.prefixField);
+// expected output: "prefixed field"
+ +

Cuando se inicializan campos this se refiere a la instancia de clase que esta siendo construida. Al igual que con los metodos publicos de instancia, si usted esta en una subclase puede acceder a al prototypo de la superclase usando super.

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

Métodos públicos

+ +

Métodos públicos estáticos

+ +

La palabra reservada static define un metodo estático para una clase. Los métodos estáticos no son llamads usando una instancia de la clase. En lugar de eso son llamados sobre la clase como tal. Estos metodos estáticos son frecuentemente funciones utilitarias que permiten por ejemplo la creación y clonacion de objetos.

+ +
class ClassWithStaticMethod {
+  static staticMethod() {
+    return 'static method has been called.';
+  }
+}
+
+console.log(ClassWithStaticMethod.staticMethod());
+// expected output: "static method has been called."
+ +

Los métodos estáticos son agregados al constructor de la clase usando Object.defineProperty duranten el evaluación de la clase. Estos metodos son "escribibles" (writable), no-enumerables y configurables.

+ +

Métodos públicos de instancia

+ +

Como su nombre lo indica, los métodos publicos de instancia son metodos que estan disponibles para cualquier instancia de una clase.

+ +
class ClassWithPublicInstanceMethod {
+  publicMethod() {
+    return 'hello world';
+  }
+}
+
+const instance = new ClassWithPublicInstanceMethod();
+console.log(instance.publicMethod());
+// expected output: "hello worl​d"
+ +

Los métodos públicos de instancia son agregeados al prototipo de clase durante la evaluacón de la clase usando Object.defineProperty. Estos metodos son "escribibles" (writable), no-enumerables y configurables.

+ +

Usted puede usar un generador, async y funciones generadoras asincronas

+ +
class ClassWithFancyMethods {
+  *generatorMethod() { }
+  async asyncMethod() { }
+  async *asyncGeneratorMethod() { }
+}
+ +

Dentro de un metodo de instancia, this se referie a la instancia como tal. En las subclases, super le permite acceder el prototipo de la superclase, permitiendo así llamar métodos de la superclase.

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

Existen metodos especiales llamados "Getters" y "Setters" que se vinculan a una propiedad de una clase, y que son ejecutados o llamados cuando esa propiedad es consultada o moditficada. Puede usar las palabras reservaddas get y set para declarar una instancia pública de "getter" or "setter". [N.T. preferí decir Getter/Setter que decir Consultadores/Mofificadores]

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

Campos privados

+ +

Campos privados estáticos

+ +

Private fields are accessible on the class constructor from inside the class declaration itself.

+ +

The limitation of static variables being called by only static methods still holds.

+ +
class ClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD;
+
+  static publicStaticMethod() {
+    ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD = 42;
+    return ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD;
+  }
+}
+
+assert(ClassWithPrivateStaticField.publicStaticMethod() === 42);
+ +

Private static fields are added to the class constructor at class evaluation time.

+ +

There is a provenance restriction on private static fields. Only the class which defines the private static field can access the field. This can lead to unexpected behaviour when using this

+ +
class BaseClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD;
+
+  static basePublicStaticMethod() {
+    this.#PRIVATE_STATIC_FIELD = 42;
+    return this.#PRIVATE_STATIC_FIELD;
+  }
+}
+
+class SubClass extends BaseClassWithPrivateStaticField { }
+
+assertThrows(() => SubClass.basePublicStaticMethod(), TypeError);
+
+ +

Campos privados de instancia

+ +

Private instance fields are declared with # names ( pronounced "hash names"), which are identifiers prefixed with #. The # is a part of the name itself and is used for declaration and accessing as well.

+ +

The encapsulation is enforced by the language. It is a syntax error to refer to # names not in scope.

+ +
class ClassWithPrivateField {
+  #privateField;
+
+  constructor() {
+    this.#privateField = 42;
+    this.#randomField = 666; # Syntax error
+  }
+}
+
+const instance = new ClassWithPrivateField();
+instance.#privateField === 42; // Syntax error
+
+ +

Métodos privados

+ +

Métodos privados estáticos

+ +

Like their public equivalent, private static methods are called on the class, not instances of the class. Like private static fields, they are only accessible from inside the class declaration.

+ +

Private static methods may be generator, async and async generator functions.

+ +
class ClassWithPrivateStaticMethod {
+    static #privateStaticMethod() {
+        return 42;
+    }
+
+    static publicStaticMethod() {
+        return ClassWithPrivateStaticMethod.#privateStaticMethod();
+    }
+}
+
+assert(ClassWithPrivateStaticField.publicStaticMethod() === 42);
+
+ +

Métodos privados de instancia

+ +

Private instance methods are methods available on class instances whose access is restricted in the same manner as private instance fields.

+ +
class ClassWithPrivateMethod {
+  #privateMethod() {
+    return 'hello world';
+  }
+
+  getPrivateMessage() {
+      return #privateMethod();
+  }
+}
+
+const instance = new ClassWithPrivateMethod();
+console.log(instance.getPrivateMessage());
+// expected output: "hello worl​d"
+ +

Private instance methods may be generator, async or async generator functions. Private getters and setters are also possible:

+ +
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✨"
+
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
FieldDefinition productionStage 3
+ +

Compatibilidad de navegadores

+ +

Campos públicos de clse

+ + + +

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

+ +

Campos privados de clase

+ + + +

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

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/classes/static/index.html b/files/es/web/javascript/reference/classes/static/index.html new file mode 100644 index 0000000000..92f972f171 --- /dev/null +++ b/files/es/web/javascript/reference/classes/static/index.html @@ -0,0 +1,118 @@ +--- +title: static +slug: Web/JavaScript/Referencia/Classes/static +translation_of: Web/JavaScript/Reference/Classes/static +--- +
{{jsSidebar("Classes")}}
+ +

La palabra clave static define un método estático para una clase.

+ +

Sintaxis

+ +
static methodName() { ... }
+ +

Descripción

+ +

Los métodos estáticos son llamados sin instanciar su clase. Son habitualmente utilizados para crear funciones para una aplicación.

+ +

Ejemplos

+ +

El siguiente ejemplo demuestra varias cosas. Una de ellas es cómo un método estático es implementado en una clase, otra es que una clase con un miembro estático puede ser sub-claseada. Finalmente demuestra cómo un método estático puede (y cómo no) ser llamado.

+ +
class Tripple {
+  static tripple(n) {
+    n = n || 1;
+    return n * 3;
+  }
+}
+
+class BiggerTripple extends Tripple {
+  static tripple(n) {
+    return super.tripple(n) * super.tripple(n);
+  }
+}
+
+console.log(Tripple.tripple());
+console.log(Tripple.tripple(6));
+console.log(BiggerTripple.tripple(3));
+var tp = new Tripple();
+console.log(tp.tripple()); //Logs 'tp.tripple is not a function'.
+ +

Especificaciones

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES6')}}Initial definition.
+ +

Compatibilidad de navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(42.0)}}Available in the Nightly channel only (since February 2015){{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatUnknown}}{{CompatChrome(42.0)}}Available in the Nightly channel only (since February 2015){{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

 

+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/deprecated_and_obsolete_features/index.html b/files/es/web/javascript/reference/deprecated_and_obsolete_features/index.html new file mode 100644 index 0000000000..f0f18cfbd7 --- /dev/null +++ b/files/es/web/javascript/reference/deprecated_and_obsolete_features/index.html @@ -0,0 +1,292 @@ +--- +title: Características en desuso y obsoletas +slug: Web/JavaScript/Referencia/Características_Desaprobadas +tags: + - Deprecated + - JavaScript + - Obsolete +translation_of: Web/JavaScript/Reference/Deprecated_and_obsolete_features +--- +

{{JsSidebar("More")}}

+ + +

Esta página enumera las características de JavaScript que están en desuso (es decir, todavía están disponibles pero se planea eliminarlas) y obsoletas (es decir, que ya no se pueden usar).

+ +

Características en desuso

+ +

Estas características desaconsejadas aún se pueden usar, pero se deben usar con precaución porque se espera que se eliminen por completo en el futuro. Deberías trabajar para sustituirlas con las versiones recomendadas en tu código.

+ +

Propiedades de RegExp

+ +

las siguientes propiedades están en desuso. Esto no afecta su uso en el {{jsxref("String.replace", "reemplazo de cadenas", "", 1)}}:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropiedadDescripción
{{jsxref("RegExp.n", "$1-$9")}} +

Coincidencias de subcadenas entre paréntesis, si las hay.
+ Precaución: El uso de estas propiedades puede generar problemas, ya que las extensiones del navegador pueden modificarlas. ¡Evítalas!

+
{{jsxref("RegExp.input", "$_")}}Consulta entrada.
{{jsxref("RegExp.multiline", "$*")}}Consulta multiline.
{{jsxref("RegExp.lastMatch", "$&")}}Consulta lastMatch.
{{jsxref("RegExp.lastParen", "$+")}}Consulta lastParen.
{{jsxref("RegExp.leftContext", "$`")}}Consulta leftContext.
{{jsxref("RegExp.rightContext", "$'")}}Consulta rightContext.
{{jsxref("RegExp.input", "input")}}La cadena contra la que se compara una expresión regular.
{{jsxref("RegExp.lastMatch", "lastMatch")}}Los últimos caracteres coincidentes.
{{jsxref("RegExp.lastParen", "lastParen")}}La última coincidencia de subcadena entre paréntesis, si la hubiera.
{{jsxref("RegExp.leftContext", "leftContext")}}La subcadena que precede a la coincidencia más reciente.
{{jsxref("RegExp.rightContext", "rightContext")}}La subcadena que sigue a la coincidencia más reciente.
+ +

Las siguientes ahora son propiedades de instancias de RegExp, ya no del objeto RegExp:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropiedadDescripción
{{jsxref("RegExp.global", "global")}}Si se debe probar o no la expresión regular con todas las posibles coincidencias en una cadena, o solo con la primera.
{{jsxref("RegExp.ignoreCase", "ignoreCase")}}Si se deben o no ignorar las mayúsculas/minúsculas al intentar una coincidencia en una cadena.
{{jsxref("RegExp.lastIndex", "lastIndex")}}El índice en el que comenzará la siguiente coincidencia.
{{jsxref("RegExp.multiline", "multiline")}}Si buscar o no en cadenas de varias líneas.
{{jsxref("RegExp.source", "source")}}El texto del patrón.
+ +

Métodos RegExp

+ + + +

Propiedades de función

+ + + +

Generador heredado

+ + + +

Iterador

+ + + +

Métodos de objeto

+ + + +

Métodos de Date

+ + + +

Funciones

+ + + +

Proxy

+ + + +

Secuencias de escape

+ + + +

Métodos de cadena

+ + + +

Características obsoletas

+ +

Estas características obsoletas se han eliminado por completo de JavaScript y ya no se pueden utilizar a partir de la versión indicada de JavaScript.

+ +

Objeto

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropiedadDescripción
{{jsxref("Global_Objects/Object/count", "__count__")}}Devuelve el número de propiedades enumerables directamente en un objeto definido por el usuario.
{{jsxref("Global_Objects/Object/Parent", "__parent__")}}Apunta al contexto de un objeto.
{{jsxref("Global_Objects/Object/eval", "Object.prototype.eval()")}}Evalúa una cadena de código JavaScript en el contexto del objeto especificado.
{{jsxref("Object.observe()")}}Observar de forma asincrónica los cambios en un objeto.
{{jsxref("Object.unobserve()")}}Elimina observadores.
{{jsxref("Object.getNotifier()")}}Crea un objeto que permite desencadenar sintéticamente un cambio.
+ +

Función

+ + + + + + + + + + + + +
PropiedadDescripción
{{jsxref("Global_Objects/Function/arity", "arity")}}Número de argumentos formales.
+ +

Array

+ + + + + + + + + + + + + + + + +
PropiedadDescripción
{{jsxref("Array.observe()")}}Observación asincrónica de cambios en los arreglos.
{{jsxref("Array.unobserve()")}}Elimina observadores.
+ +

Número

+ + + +

ParallelArray

+ + + +

Declaraciones

+ + + +

E4X

+ +

Consulta E4X para obtener más información.

+ +

Variables nítidas

+ +

Consulta Variables nítidas en JavaScript para obtener más información.

diff --git a/files/es/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html b/files/es/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html new file mode 100644 index 0000000000..5ef865f0bb --- /dev/null +++ b/files/es/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html @@ -0,0 +1,72 @@ +--- +title: The legacy Iterator protocol +slug: >- + Web/JavaScript/Referencia/Características_Desaprobadas/The_legacy_Iterator_protocol +translation_of: >- + Web/JavaScript/Reference/Deprecated_and_obsolete_features/The_legacy_Iterator_protocol +--- +
{{jsSidebar("More")}}
+ +
Non-standard. The legacy iterator protocol is a SpiderMonkey-specific feature, and will be removed at some point. For future-facing usages, consider using for..of loops and the iterator protocol.
+ +

The deprecated Firefox-only iterator protocol

+ +

Firefox, prior to version 26 implemented another iterator protocol that is similar to the standard ES6 Iterator protocol.

+ +

An object is an legacy iterator when it implements a next() method with the following semantics, and throws {{jsxref("Global_Objects/StopIteration", "StopIteration")}} at the end of iteration.

+ + + + + + + + + + + + +
PropertyValue
nextA zero arguments function that returns an value.
+ +

Difference between legacy and ES6 iterator protocols

+ + + +

Simple example with the old protocol

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

Mira también

+ + diff --git a/files/es/web/javascript/reference/errors/bad_regexp_flag/index.html b/files/es/web/javascript/reference/errors/bad_regexp_flag/index.html new file mode 100644 index 0000000000..3bb05d9b89 --- /dev/null +++ b/files/es/web/javascript/reference/errors/bad_regexp_flag/index.html @@ -0,0 +1,113 @@ +--- +title: 'SyntaxError: indicador de expresión regular no válido "x"' +slug: Web/JavaScript/Reference/Errors/Indicador_regexp_no-val +tags: + - Error + - Error de sintaxis + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Bad_regexp_flag +--- +
{{jsSidebar("Errors", "Errores")}}
+ +

La excepción de JavaScript "indicador de expresión regular no válido" se produce cuando las indicadores, definidas después de la segunda barra en la expresión regular literal, no son de g, i, m, s, u o y.

+ +

Mensaje

+ +
SyntaxError: error de sintaxis en la expresión regular (Edge)
+SyntaxError: marca de expresión regular no válida "x" (Firefox)
+SyntaxError: indicadores de expresión regular no válidos (Chrome)
+
+ +

Tipo Error

+ +

{{jsxref("SyntaxError")}}

+ +

¿Qué salió mal?

+ +

Hay indicadores de expresión regular no válidos en el código. En una expresión regular literal, que consiste en un patrón encerrado entre barras, los indicadores se definen después de la segunda barra. También se pueden definir en la función constructora del objeto {{jsxref("RegExp")}} (segundo parámetro). Los indicadores de expresión regular se pueden usar por separado o juntos en cualquier orden, pero solo hay seis de ellos en ECMAScript.

+ +

Para incluir una bandera con la expresión regular, usa esta sintaxis:

+ +
var re = /patrón/indicadores;
+
+ +

o

+ +
var re = new RegExp('patrón', 'indicadores');
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Indicadores de expresión regular
BanderaDescripción
gBúsqueda global.
iBúsqueda que no distingue entre mayúsculas y minúsculas.
mBúsqueda multilínea.
sPermite que el punto (.) coincida con las nuevas líneas (agregado en ECMAScript 2018)
uUnicode; trata el patrón como una secuencia de puntos de código Unicode
yRealiza una búsqueda "pegajosa" que coincida a partir de la posición actual en la cadena de destino. Consulta {{jsxref("RegExp.sticky", "sticky")}}
+ +

Ejemplos

+ +

Solo hay seis indicadores de expresión regular válidos.

+ +
/foo/bar;
+
+// SyntaxError: indicador de expresión regular no válido "b"
+
+ +

¿Tenías la intención de crear una expresión regular? Una expresión que contiene dos barras se interpreta como una expresión regular literal.

+ +
let obj = {
+  url: /docs/Web
+};
+
+// SyntaxError: indicador de expresión regular no válido "W"
+
+ +

¿O pretendías crear una cadena en su lugar? Agrega comillas simples o dobles para crear una cadena literal.

+ +
let obj = {
+  url: '/docs/Web'
+};
+ +

Indicadores de expresión regular válidos

+ +

Consulta la tabla anterior para ver las seis marcas de expresiones regulares válidas que están permitidas en JavaScript.

+ +
/foo/g;
+/foo/gims;
+/foo/uy;
+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/errors/caracter_ilegal/index.html b/files/es/web/javascript/reference/errors/caracter_ilegal/index.html deleted file mode 100644 index cc9422a21d..0000000000 --- a/files/es/web/javascript/reference/errors/caracter_ilegal/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: 'ErrorDeSintaxis: Caracter ilegal' -slug: Web/JavaScript/Reference/Errors/caracter_ilegal -tags: - - Error - - Error de sintaxis - - JavaScript - - SyntaxError - - errores -translation_of: Web/JavaScript/Reference/Errors/Illegal_character ---- -
{{jsSidebar("Errors")}}
- -

Mensaje

- -
SyntaxError: illegal character (Firefox)
-SyntaxError: Invalid or unexpected token (Chrome)
- -
ErrorDeSintasix: Carácter ilegal (Firefox)
-ErrorDeSintasix: Componente léxico inválido o inesperado (Chrome)
-
- -

Tipo de error

- -

{{jsxref("SyntaxError")}}  {{jsxref("ErrorDeSintaxis")}}

- -

¿Qué salió mal?

- -

Hay un componente léxico inválido o inesperado que no pertenece a su posición en el código. Utilice un editor que soporte el resaltado de sintaxis y que revise cuidadosamente su código contra discrepancias como un signo menos ( - ) contra un guion () o comillas simples ( " ) contra comillas no estándar ().

- -

Ejemplos

- -

Caracteres no coincidentes

- -

Algunos caracteres parecen iguales, pero hará que el analizador falle al interpretar su código.

- -
“Esto parece una cadena de caracteres”;
-// SyntaxError: illegal character
-// ErrorDeSintaxis: Carácter ilegal
-
-42 – 13;
-// SyntaxError: illegal character
-// ErrorDeSintaxis: Carácter ilegal
-
- -

Esto debería funcionar:

- -
"Esto en realidad es una cadena de caracteres";
-
-42 - 13;
-
- -

Caracteres olvidados

- -

Es fácil olvidar caracteres aquí o allí.

- -
var colors = ['#000', #333', '#666'];
-// SyntaxError: illegal character
-// ErrorDeSintaxis: Carácter ilegal
-
- -

Agregue la comilla olvidada para '#333'.

- -
var colors = ['#000', '#333', '#666'];
- -

Caracteres escondidos

- -

Cuando copia y pega un código de una fuente externa, puede haber caracteres inválidos. ¡Cuidado!

- -
var foo = 'bar';​
-// SyntaxError: illegal character
-// ErrorDeSintaxis: Carácter ilegal
-
- -

Al inspeccionar este código en un editor como Vim, puede ver que en realidad hay un carácter de espacio de ancho cero (ZWSP) (U+200B).

- -
var foo = 'bar';​<200b>
- -

Vea también

- - diff --git a/files/es/web/javascript/reference/errors/falta_puntoycoma_antes_de_declaracion/index.html b/files/es/web/javascript/reference/errors/falta_puntoycoma_antes_de_declaracion/index.html deleted file mode 100644 index c03cb15dd2..0000000000 --- a/files/es/web/javascript/reference/errors/falta_puntoycoma_antes_de_declaracion/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: 'ErrordeSintaxis: Punto y coma ; faltante antes de la declaracion' -slug: Web/JavaScript/Reference/Errors/Falta_puntoycoma_antes_de_declaracion -tags: - - JavaScript - - errores - - errorsintaxis - - puntoycoma -translation_of: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement ---- -
{{jsSidebar("Errores")}}
- -

Mensaje

- -
Error de Sintaxis: Punto y coma ; faltante antes de la declaración
-
- -

Tipo de Error

- -

{{jsxref("SyntaxError")}}.

- -

¿Qué salio mal?

- -

Hay un punto y coma (;) faltando en alguna parte. Las declaraciones Javascript deben terminar con punto y coma. Algunas de ellas son afectadas por la inserción automática (ASI), pero en este caso necesitas colocar un punto y coma, de esta forma Javascript puede analizar el código fuente de forma correcta.

- -

Sin embargo, algunas veces, este error es solo una consecuencia de otro error, como no separar las cadenas de texto correctamente, o usar var incorrectamente. Tal vez tengas muchos paréntesis en algún lugar. Revisa cuidadosamente la sintaxis cuando este error es lanzado.

- -

Ejemplo

- -

Cadenas de texto (strings) sin terminar

- -

Este error puede pasar fácilmente cuando no se colocan las comillas correctamente y el motor de JavaScript esta esperando el final de la cadena. por ejemplo:

- -
var foo = 'El bar de Tom's';
-// Error de Sintaxis: Punto y coma ; faltante antes de la declaración
- -

En este caso se pueden usar comillas dobles para escapar del apóstrofe:

- -
var foo = "El bar de Tom's";
-var foo = 'El bar de Tom\'s';
-
- -
-

Nota: Este error suele pasar frecuentemene con cadenas del idioma Inglés

-
- -

Declarar propiedades con var

- -

No se pueden declarar propiedades de un objeto o arreglo con una declaración var

- -
var obj = {};
-var obj.foo = 'hola'; // Error de Sintaxis: Punto y coma ; faltante antes de la declaración
-
-var array = [];
-var array[0] = 'mundo'; // Error de Sintaxis: Punto y coma ; faltante antes de la declaración
-
- -

En vez de esto. omitamos la palabra  var:

- -
var obj = {};
-obj.foo = 'hola';
-
-var array = [];
-array[0] = 'mundo';
-
- -

Ver también:

- - diff --git a/files/es/web/javascript/reference/errors/illegal_character/index.html b/files/es/web/javascript/reference/errors/illegal_character/index.html new file mode 100644 index 0000000000..cc9422a21d --- /dev/null +++ b/files/es/web/javascript/reference/errors/illegal_character/index.html @@ -0,0 +1,83 @@ +--- +title: 'ErrorDeSintaxis: Caracter ilegal' +slug: Web/JavaScript/Reference/Errors/caracter_ilegal +tags: + - Error + - Error de sintaxis + - JavaScript + - SyntaxError + - errores +translation_of: Web/JavaScript/Reference/Errors/Illegal_character +--- +
{{jsSidebar("Errors")}}
+ +

Mensaje

+ +
SyntaxError: illegal character (Firefox)
+SyntaxError: Invalid or unexpected token (Chrome)
+ +
ErrorDeSintasix: Carácter ilegal (Firefox)
+ErrorDeSintasix: Componente léxico inválido o inesperado (Chrome)
+
+ +

Tipo de error

+ +

{{jsxref("SyntaxError")}}  {{jsxref("ErrorDeSintaxis")}}

+ +

¿Qué salió mal?

+ +

Hay un componente léxico inválido o inesperado que no pertenece a su posición en el código. Utilice un editor que soporte el resaltado de sintaxis y que revise cuidadosamente su código contra discrepancias como un signo menos ( - ) contra un guion () o comillas simples ( " ) contra comillas no estándar ().

+ +

Ejemplos

+ +

Caracteres no coincidentes

+ +

Algunos caracteres parecen iguales, pero hará que el analizador falle al interpretar su código.

+ +
“Esto parece una cadena de caracteres”;
+// SyntaxError: illegal character
+// ErrorDeSintaxis: Carácter ilegal
+
+42 – 13;
+// SyntaxError: illegal character
+// ErrorDeSintaxis: Carácter ilegal
+
+ +

Esto debería funcionar:

+ +
"Esto en realidad es una cadena de caracteres";
+
+42 - 13;
+
+ +

Caracteres olvidados

+ +

Es fácil olvidar caracteres aquí o allí.

+ +
var colors = ['#000', #333', '#666'];
+// SyntaxError: illegal character
+// ErrorDeSintaxis: Carácter ilegal
+
+ +

Agregue la comilla olvidada para '#333'.

+ +
var colors = ['#000', '#333', '#666'];
+ +

Caracteres escondidos

+ +

Cuando copia y pega un código de una fuente externa, puede haber caracteres inválidos. ¡Cuidado!

+ +
var foo = 'bar';​
+// SyntaxError: illegal character
+// ErrorDeSintaxis: Carácter ilegal
+
+ +

Al inspeccionar este código en un editor como Vim, puede ver que en realidad hay un carácter de espacio de ancho cero (ZWSP) (U+200B).

+ +
var foo = 'bar';​<200b>
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/errors/indicador_regexp_no-val/index.html b/files/es/web/javascript/reference/errors/indicador_regexp_no-val/index.html deleted file mode 100644 index 3bb05d9b89..0000000000 --- a/files/es/web/javascript/reference/errors/indicador_regexp_no-val/index.html +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: 'SyntaxError: indicador de expresión regular no válido "x"' -slug: Web/JavaScript/Reference/Errors/Indicador_regexp_no-val -tags: - - Error - - Error de sintaxis - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Bad_regexp_flag ---- -
{{jsSidebar("Errors", "Errores")}}
- -

La excepción de JavaScript "indicador de expresión regular no válido" se produce cuando las indicadores, definidas después de la segunda barra en la expresión regular literal, no son de g, i, m, s, u o y.

- -

Mensaje

- -
SyntaxError: error de sintaxis en la expresión regular (Edge)
-SyntaxError: marca de expresión regular no válida "x" (Firefox)
-SyntaxError: indicadores de expresión regular no válidos (Chrome)
-
- -

Tipo Error

- -

{{jsxref("SyntaxError")}}

- -

¿Qué salió mal?

- -

Hay indicadores de expresión regular no válidos en el código. En una expresión regular literal, que consiste en un patrón encerrado entre barras, los indicadores se definen después de la segunda barra. También se pueden definir en la función constructora del objeto {{jsxref("RegExp")}} (segundo parámetro). Los indicadores de expresión regular se pueden usar por separado o juntos en cualquier orden, pero solo hay seis de ellos en ECMAScript.

- -

Para incluir una bandera con la expresión regular, usa esta sintaxis:

- -
var re = /patrón/indicadores;
-
- -

o

- -
var re = new RegExp('patrón', 'indicadores');
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Indicadores de expresión regular
BanderaDescripción
gBúsqueda global.
iBúsqueda que no distingue entre mayúsculas y minúsculas.
mBúsqueda multilínea.
sPermite que el punto (.) coincida con las nuevas líneas (agregado en ECMAScript 2018)
uUnicode; trata el patrón como una secuencia de puntos de código Unicode
yRealiza una búsqueda "pegajosa" que coincida a partir de la posición actual en la cadena de destino. Consulta {{jsxref("RegExp.sticky", "sticky")}}
- -

Ejemplos

- -

Solo hay seis indicadores de expresión regular válidos.

- -
/foo/bar;
-
-// SyntaxError: indicador de expresión regular no válido "b"
-
- -

¿Tenías la intención de crear una expresión regular? Una expresión que contiene dos barras se interpreta como una expresión regular literal.

- -
let obj = {
-  url: /docs/Web
-};
-
-// SyntaxError: indicador de expresión regular no válido "W"
-
- -

¿O pretendías crear una cadena en su lugar? Agrega comillas simples o dobles para crear una cadena literal.

- -
let obj = {
-  url: '/docs/Web'
-};
- -

Indicadores de expresión regular válidos

- -

Consulta la tabla anterior para ver las seis marcas de expresiones regulares válidas que están permitidas en JavaScript.

- -
/foo/g;
-/foo/gims;
-/foo/uy;
-
- -

Ve también

- - diff --git a/files/es/web/javascript/reference/errors/missing_semicolon_before_statement/index.html b/files/es/web/javascript/reference/errors/missing_semicolon_before_statement/index.html new file mode 100644 index 0000000000..c03cb15dd2 --- /dev/null +++ b/files/es/web/javascript/reference/errors/missing_semicolon_before_statement/index.html @@ -0,0 +1,72 @@ +--- +title: 'ErrordeSintaxis: Punto y coma ; faltante antes de la declaracion' +slug: Web/JavaScript/Reference/Errors/Falta_puntoycoma_antes_de_declaracion +tags: + - JavaScript + - errores + - errorsintaxis + - puntoycoma +translation_of: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement +--- +
{{jsSidebar("Errores")}}
+ +

Mensaje

+ +
Error de Sintaxis: Punto y coma ; faltante antes de la declaración
+
+ +

Tipo de Error

+ +

{{jsxref("SyntaxError")}}.

+ +

¿Qué salio mal?

+ +

Hay un punto y coma (;) faltando en alguna parte. Las declaraciones Javascript deben terminar con punto y coma. Algunas de ellas son afectadas por la inserción automática (ASI), pero en este caso necesitas colocar un punto y coma, de esta forma Javascript puede analizar el código fuente de forma correcta.

+ +

Sin embargo, algunas veces, este error es solo una consecuencia de otro error, como no separar las cadenas de texto correctamente, o usar var incorrectamente. Tal vez tengas muchos paréntesis en algún lugar. Revisa cuidadosamente la sintaxis cuando este error es lanzado.

+ +

Ejemplo

+ +

Cadenas de texto (strings) sin terminar

+ +

Este error puede pasar fácilmente cuando no se colocan las comillas correctamente y el motor de JavaScript esta esperando el final de la cadena. por ejemplo:

+ +
var foo = 'El bar de Tom's';
+// Error de Sintaxis: Punto y coma ; faltante antes de la declaración
+ +

En este caso se pueden usar comillas dobles para escapar del apóstrofe:

+ +
var foo = "El bar de Tom's";
+var foo = 'El bar de Tom\'s';
+
+ +
+

Nota: Este error suele pasar frecuentemene con cadenas del idioma Inglés

+
+ +

Declarar propiedades con var

+ +

No se pueden declarar propiedades de un objeto o arreglo con una declaración var

+ +
var obj = {};
+var obj.foo = 'hola'; // Error de Sintaxis: Punto y coma ; faltante antes de la declaración
+
+var array = [];
+var array[0] = 'mundo'; // Error de Sintaxis: Punto y coma ; faltante antes de la declaración
+
+ +

En vez de esto. omitamos la palabra  var:

+ +
var obj = {};
+obj.foo = 'hola';
+
+var array = [];
+array[0] = 'mundo';
+
+ +

Ver también:

+ + diff --git a/files/es/web/javascript/reference/errors/strict_non_simple_params/index.html b/files/es/web/javascript/reference/errors/strict_non_simple_params/index.html new file mode 100644 index 0000000000..2ca6ef8de4 --- /dev/null +++ b/files/es/web/javascript/reference/errors/strict_non_simple_params/index.html @@ -0,0 +1,117 @@ +--- +title: 'SyntaxError: "use strict" no permitida en función con parámetros complejos' +slug: Web/JavaScript/Reference/Errors/Strict_y_parámetros_complejos +tags: + - Error + - JavaScript + - TypeError + - errores +translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params +--- +
{{jsSidebar("Errors", "Errores")}}
+ +

La excepción de JavaScript: "'use strict' no permitida en función" ocurre cuando se usa una directiva "use strict" en la parte superior de una función con {{jsxref("Functions/Default_parameters", "parámetros predeterminados", "", 1)}}, {{jsxref("Functions/rest_parameters", "parámetros rest", "", 1)}} o {{jsxref("Operators/Destructuring_assignment" , "Desestructuración de parámetros", "", 1)}}.

+ +

Mensaje

+ +
Edge:
+No se puede aplicar el modo estricto en funciones con una lista de parámetros complejos
+
+Firefox:
+SyntaxError: "use strict" no permitido en la función con parámetro predeterminado
+SyntaxError: "use strict" no permitido en la función con parámetro rest
+SyntaxError: "use strict" no permitido en la función con parámetro de desestructuración
+
+Chrome:
+SyntaxError: directiva ilegal 'use strict' en función con una lista de parámetros complejos
+
+ +

Tipo Error

+ +

{{jsxref("SyntaxError")}}.

+ +

¿Qué salió mal?

+ +

Se escribió una directiva "use strict" en la parte superior de una función que tiene uno de los siguientes parámetros:

+ + + +

No está permitida una directiva "use strict" en la parte superior de dichas funciones según la especificación ECMAScript.

+ +

Ejemplos

+ +

Declaración de función

+ +

En este caso, la función sum tiene los parámetros predeterminados a = 1 y b = 2:

+ +
function sum(a = 1, b = 2) {
+  SyntaxError: 'use strict' no permitida en la función con parámetros predeterminados
+  'use strict';
+  return a + b;
+}
+
+ +

Si la función debe estar en modo estricto, y todo el script o la función adjunta también está bien que esté en modo estricto, puedes mover la directiva "use strict" fuera de la función:

+ +
'use strict';
+function sum(a = 1, b = 2) {
+  return a + b;
+}
+
+ +

Expresión Function

+ +

Una expresión function puede usar otra solución alternativa:

+ +
var sum = function sum([a, b]) {
+  // SyntaxError: "use strict" no permitido en función con parámetros de desestructuración
+  'use strict';
+  return a + b;
+};
+
+ +

Esta se puede convertir a la siguiente expresión:

+ +
var sum = (function() {
+  'use strict';
+  return function sum([a, b]) {
+    return a + b;
+  };
+})();
+
+ +

Función de flecha

+ +

Si una función de flecha necesita acceder a la variable this, puedes usar la función de flecha como función circundante:

+ +
var callback = (...args) => {
+  SyntaxError: "use strict" no permitido en la función con parámetro rest
+  'use strict';
+  return this.run(args);
+};
+
+ +

Esta se puede convertir a la siguiente expresión:

+ +
var callback = (() => {
+  'use strict';
+  return (...args) => {
+    return this.run(args);
+  };
+})();
+
+ +

Ve también

+ + diff --git "a/files/es/web/javascript/reference/errors/strict_y_par\303\241metros_complejos/index.html" "b/files/es/web/javascript/reference/errors/strict_y_par\303\241metros_complejos/index.html" deleted file mode 100644 index 2ca6ef8de4..0000000000 --- "a/files/es/web/javascript/reference/errors/strict_y_par\303\241metros_complejos/index.html" +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: 'SyntaxError: "use strict" no permitida en función con parámetros complejos' -slug: Web/JavaScript/Reference/Errors/Strict_y_parámetros_complejos -tags: - - Error - - JavaScript - - TypeError - - errores -translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params ---- -
{{jsSidebar("Errors", "Errores")}}
- -

La excepción de JavaScript: "'use strict' no permitida en función" ocurre cuando se usa una directiva "use strict" en la parte superior de una función con {{jsxref("Functions/Default_parameters", "parámetros predeterminados", "", 1)}}, {{jsxref("Functions/rest_parameters", "parámetros rest", "", 1)}} o {{jsxref("Operators/Destructuring_assignment" , "Desestructuración de parámetros", "", 1)}}.

- -

Mensaje

- -
Edge:
-No se puede aplicar el modo estricto en funciones con una lista de parámetros complejos
-
-Firefox:
-SyntaxError: "use strict" no permitido en la función con parámetro predeterminado
-SyntaxError: "use strict" no permitido en la función con parámetro rest
-SyntaxError: "use strict" no permitido en la función con parámetro de desestructuración
-
-Chrome:
-SyntaxError: directiva ilegal 'use strict' en función con una lista de parámetros complejos
-
- -

Tipo Error

- -

{{jsxref("SyntaxError")}}.

- -

¿Qué salió mal?

- -

Se escribió una directiva "use strict" en la parte superior de una función que tiene uno de los siguientes parámetros:

- - - -

No está permitida una directiva "use strict" en la parte superior de dichas funciones según la especificación ECMAScript.

- -

Ejemplos

- -

Declaración de función

- -

En este caso, la función sum tiene los parámetros predeterminados a = 1 y b = 2:

- -
function sum(a = 1, b = 2) {
-  SyntaxError: 'use strict' no permitida en la función con parámetros predeterminados
-  'use strict';
-  return a + b;
-}
-
- -

Si la función debe estar en modo estricto, y todo el script o la función adjunta también está bien que esté en modo estricto, puedes mover la directiva "use strict" fuera de la función:

- -
'use strict';
-function sum(a = 1, b = 2) {
-  return a + b;
-}
-
- -

Expresión Function

- -

Una expresión function puede usar otra solución alternativa:

- -
var sum = function sum([a, b]) {
-  // SyntaxError: "use strict" no permitido en función con parámetros de desestructuración
-  'use strict';
-  return a + b;
-};
-
- -

Esta se puede convertir a la siguiente expresión:

- -
var sum = (function() {
-  'use strict';
-  return function sum([a, b]) {
-    return a + b;
-  };
-})();
-
- -

Función de flecha

- -

Si una función de flecha necesita acceder a la variable this, puedes usar la función de flecha como función circundante:

- -
var callback = (...args) => {
-  SyntaxError: "use strict" no permitido en la función con parámetro rest
-  'use strict';
-  return this.run(args);
-};
-
- -

Esta se puede convertir a la siguiente expresión:

- -
var callback = (() => {
-  'use strict';
-  return (...args) => {
-    return this.run(args);
-  };
-})();
-
- -

Ve también

- - diff --git a/files/es/web/javascript/reference/functions/arguments/callee/index.html b/files/es/web/javascript/reference/functions/arguments/callee/index.html new file mode 100644 index 0000000000..1902131055 --- /dev/null +++ b/files/es/web/javascript/reference/functions/arguments/callee/index.html @@ -0,0 +1,48 @@ +--- +title: callee +slug: Web/JavaScript/Referencia/Funciones/arguments/callee +tags: + - JavaScript + - JavaScript Reference + - Referencia +translation_of: Web/JavaScript/Reference/Functions/arguments/callee +--- +
+
{{jsSidebar("Functions")}}
+
+ +

Resumen

+ +

Especifica la función que se está ejecutando actualmente.

+ +

Descripción

+ +

callee es una propiedad de la variable local arguments disponible dentro de todos los objetos function; callee como una propiedad de {{jsxref("Funciones/arguments", "Function.arguments")}} ya no se utiliza. (Function.arguments en sí mismo está también desaconsejado.)

+ +

arguments.callee permite a funciones anónimas referirse a ellas mismas, lo cual es necesario en funciones anónimas recursivas.

+ +

La palabra clave this no se refiere a la función que se ejecuta actualmente. Use la propiedad callee para referirse a la función dentro del cuerpo de la función.

+ +

Ejemplos

+ +

Ejemplo: Usando arguments.callee en funciones anónimas recursivas

+ +

Una función recursiva debe ser capaz de referirse a sí misma. Típicamente, una función se refiere a sí misma por su nombre. Sin embargo, una función anónima no tiene nombre y por tanto es una variable de referencia para ella, es decir, si la función no está asignada a ninguna variable, la función no puede referirse a sí misma. (Se pueden crear funciones anónimas mediante una expresión {{jsxref("Operadores/function", "function")}} o el constructor {{jsxref("Function")}}.) Aquí es donde entra arguments.callee.

+ +

El siguiente ejemplo define una función, la cuál, en cada turno, define y devuelve una función factorial.

+ +
function makeFactorialFunc() {
+   alert('making a factorial function!');
+   return function(x) {
+      if (x <= 1)
+         return 1;
+      return x * arguments.callee(x - 1);
+   };
+}
+
+var result = makeFactorialFunc()(5); // returns 120 (5 * 4 * 3 * 2 * 1)
+
+ +

this example isn't very practical, but then again, there are few practical cases where arguments.callee is necessary, and most of the those cases involve closures

+ +

 

diff --git a/files/es/web/javascript/reference/functions/arguments/index.html b/files/es/web/javascript/reference/functions/arguments/index.html new file mode 100644 index 0000000000..ab768cff21 --- /dev/null +++ b/files/es/web/javascript/reference/functions/arguments/index.html @@ -0,0 +1,229 @@ +--- +title: El objeto arguments +slug: Web/JavaScript/Referencia/Funciones/arguments +tags: + - Funciones + - JavaScript + - Namespace + - argumentos + - arguments + - espacio de nombres + - multiples +translation_of: Web/JavaScript/Reference/Functions/arguments +--- +
{{jsSidebar("Functions", "Funciones")}}
+ +

arguments es un objeto similar a Array accesible dentro de funciones que contiene los valores de los argumentos pasados a esa función.

+ +
{{EmbedInteractiveExample("pages/js/functions-arguments.html")}}
+ + + +

Descripción

+ +
+

Nota: Si estás escribiendo código compatible con ES6, entonces se deben preferir los {{jsxref("Functions/rest_parameters", "parámetros resto")}}.

+
+ +
+

Nota: "similar a Array" significa que arguments tiene una propiedad {{jsxref("Functions/arguments/length", "lenght")}} y propiedades indexadas desde cero, pero no tiene métodos integrados de {{jsxref("Array")}} como {{jsxref("Array.forEach", "forEach()")}} o {{jsxref("Array.map", "map()")}}. Ve la §Descripción para obtener más detalles.

+
+ +

El objeto arguments es una variable local disponible en todas las funciones que no son {{jsxref("Functions/Arrow_functions", "funciones flecha")}}. Puedes hacer referencia a los argumentos de una función dentro de esa función utilizando su objeto arguments. Tiene entradas para cada argumento con el que se llamó a la función, con el índice de la primera entrada en 0.

+ +

Por ejemplo, si a una función se le pasan 3 argumentos, puedes acceder a ellos de la siguiente manera:

+ +
arguments[0] // primer argumento
+arguments[1] // segundo argumento
+arguments[2] // tercer argumento
+
+ +

También puedes establecer o reasignar cada argumento:

+ +
arguments[1] = 'new value';
+
+ +

El objeto arguments no es un {{jsxref("Array")}}. Es similar, pero carece de todas las propiedades de Array excepto de {{jsxref("Array.length", "length")}}. Por ejemplo, no tiene el método {{jsxref("Array.pop", "pop()")}}.

+ +

Sin embargo, se puede convertir en un Array real:

+ +
var args = Array.prototype.slice.call(arguments);
+// El uso de un arreglo literal es más corto que el anterior pero asigna un arreglo vacío
+var args = [].slice.call(arguments);
+
+ +

Así como puedes hacer con cualquier objeto tipo Array, puedes usar el método {{jsxref("Array.from()")}} de ES2015 o la {{jsxref("Operators/Spread_syntax", "propagación de sintaxis")}} para convertir arguments en un arreglo real:

+ +
let args = Array.from(arguments);
+// o
+let args = [...arguments];
+
+ +

El objeto arguments es útil para funciones llamadas con más argumentos de los que declara aceptar formalmente. Esta técnica es útil para funciones a las que se les puede pasar un número variable de argumentos, como {{jsxref("Math.min()")}}. Esta función de ejemplo acepta cualquier número de argumentos de cadena y devuelve la más larga:

+ +
function longestString() {
+  var longest = '';
+  for (var i=0; i < arguments.length; i++) {
+    if (arguments[i].length > longest.length) {
+      longest = arguments[i];
+    }
+  }
+  return longest;
+}
+
+ +

Puedes usar {{jsxref("Functions/arguments/lenght", "arguments.length")}} para contar con cuántos argumentos se llamó a la función. Si, en cambio, deseas contar cuántos parámetros se declara que acepta una función, inspecciona la propiedad {{jsxref("Function.length", "length")}} de esa función.

+ +

Usar typeof con arguments

+ +

El operador {{jsxref("Operators/typeof", "typeof")}} devuelve 'object' cuando se usa con arguments

+ +
console.log(typeof arguments); // 'object' 
+ +

El tipo de argumentos individuales se puede determinar indexando arguments:

+ +
console.log(typeof arguments[0]); // devuelve el tipo del primer argumento
+ +

Propiedades

+ +
+
{{jsxref("Functions/arguments/callee", "arguments.callee")}}
+
Referencia a la función en ejecución a la que pertenecen los argumentos. Prohibida en modo estricto.
+
{{jsxref("Functions/arguments/length", "arguments.length")}}
+
El número de argumentos que se pasaron a la función.
+
{{jsxref("Functions/arguments/@@iterator", "arguments[@@iterator]")}}
+
Devuelve un nuevo objeto {{jsxref("Array/@@iterator", "Array iterator", "", 0)}} que contiene los valores de cada índice en arguments.
+
+ +

Ejemplos

+ +

Definición de una función que concatena varias cadenas

+ +

Este ejemplo define una función que concatena varias cadenas. El único argumento formal de la función es una cadena que contiene los caracteres que separan los elementos a concatenar.

+ +
function myConcat(separator) {
+  let args = Array.prototype.slice.call(arguments, 1);
+  return args.join(separator);
+}
+ +

Puedes pasar tantos argumentos como desees a esta función. Devuelve una lista de cadenas usando cada argumento en la lista:

+ +
// returns "red, orange, blue"
+myConcat(', ', 'red', 'orange', 'blue');
+
+// devuelve "elephant; giraffe; lion; cheetah"
+myConcat('; ', 'elephant', 'giraffe', 'lion', 'cheetah');
+
+// devuelve "sage. basil. oregano. pepper. parsley"
+myConcat('. ', 'sage', 'basil', 'oregano', 'pepper', 'parsley');
+ +

Definición de una función que crea listas HTML

+ +

Este ejemplo define una función que crea una cadena que contiene HTML para una lista. El único argumento formal para la función es una cadena que es "u" si la lista debe estar {{htmlelement("ul", "desordenada (con viñetas)")}}, u "o" si la lista es {{htmlelement("ol", "ordenada (numerada)")}}. La función se define de la siguiente manera:

+ +
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>'; // fin de la lista
+  return html;
+}
+ +

Puedes pasar cualquier número de argumentos a esta función y agregar cada argumento como un elemento de lista a una lista del tipo indicado. Por ejemplo:

+ +
let listHTML = list('u', 'One', 'Two', 'Three');
+
+/* la listHTML es:
+"<ul><li>One</li><li>Two</li><li>Three</li></ul>"
+*/
+ +

Parámetros rest, predeterminados y desestructurados

+ +
+

El objeto arguments se puede utilizar junto con parámetros {{jsxref("Functions/rest_parameters", "rest")}}, {{jsxref("Functions/Default_parameters", "predeterminados")}} y {{jsxref("Operators/Destructuring_assignment", "desestructurados")}}.

+
+ +
function foo(...args) {
+  return args;
+}
+foo(1, 2, 3); // [1, 2, 3]
+
+ +

Si bien la presencia de parámetros rest, predeterminados o desestructurados no altera el comportamiento del objeto arguments en el código de modo estricto, existen sutiles diferencias para el código no estricto.

+ +

En el código de modo estricto, el objeto arguments se comporta de la misma manera independientemente de que se pasen parámetros rest, predeterminados o desestructurados a una función. Es decir, asignar nuevos valores a las variables en el cuerpo de la función no afectará al objeto arguments. La asignación de nuevas variables al objeto arguments tampoco afectará el valor de las variables.

+ +
+

Nota: No puedes escribir una directiva "use strict"; en el cuerpo de una definición de función que acepte parámetros rest, predeterminados o desestructurados. Si lo haces, generará un {{jsxref("Errors/Strict_Non_Simple_Params", "error de sintaxis")}}.

+
+ +

Las funciones no estrictas a las que se les pasan solo parámetros simples (es decir, no parámetros rest, predeterminados o desestructurados) sincronizarán el valor de los nuevos valores de las variables en el cuerpo de la función con el objeto arguments, y viceversa:

+ +
function func(a) {
+  arguments[0] = 99; // actualiza arguments[0] además actualiza a
+  console.log(a);
+}
+func(10); // 99
+
+ +

Y también:

+ +
function func(a) {
+  a = 99; // la actualización también actualiza arguments[0]
+  console.log(arguments[0]);
+}
+func(10); // 99
+
+ +

Por el contrario, las funciones no estrictas a las que se les pasan parámetros rest, predeterminados o desestructurados no sincronizarán los nuevos valores asignados a las variables de los argumentos en el cuerpo de la función con el objeto arguments. En cambio, el objeto arguments en funciones no estrictas con parámetros complejos siempre reflejarán los valores pasados a la función cuando se invocó (este es el mismo comportamiento exhibido por todas las funciones en modo estricto, independientemente del tipo de variables que se le pasen):

+ +
function func(a = 55) {
+  arguments[0] = 99; // actualizar arguments[0] tampoco actualiza a
+  console.log(a);
+}
+func(10); // 10
+ +

Y también:

+ +
function func(a = 55) {
+  a = 99; // actualizar a tampoco actualiza arguments[0]
+  console.log(arguments[0]);
+}
+func(10); // 10
+
+ +

Y también:

+ +
// Un parámetro predeterminado sin seguimiento
+function func(a = 55) {
+  console.log(arguments[0]);
+}
+func(); // undefined
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Objectos arguments exóticos')}}
+ +

Compatibilidad del navegador

+ + + +

{{Compat("javascript.functions.arguments")}}

+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/functions/arguments/length/index.html b/files/es/web/javascript/reference/functions/arguments/length/index.html new file mode 100644 index 0000000000..b1d7698194 --- /dev/null +++ b/files/es/web/javascript/reference/functions/arguments/length/index.html @@ -0,0 +1,131 @@ +--- +title: arguments.length +slug: Web/JavaScript/Referencia/Funciones/arguments/length +tags: + - Funciones + - JavaScript + - Propiedades + - argumentos +translation_of: Web/JavaScript/Reference/Functions/arguments/length +--- +
{{jsSidebar("Functions")}}
+ +

La propiedad arguments.length contiene el número de argumentos pasados a una función.

+ +

Sintaxis

+ +
arguments.length
+ +

Descripción

+ +

La propiedad arguments.length devuelve el número total de argumentos pasados a una función. Esto puede ser más o menos que el número de parametros definidos. (Véase {{jsxref("Function.length")}}).

+ +

Ejemplos

+ +

Usando arguments.length

+ +

En este ejemplo definimos una función que puede sumar dos o más números.

+ +
function adder(base /*, n2, ... */) {
+  base = Number(base);
+  for (var i = 1; i < arguments.length; i++) {
+    base += Number(arguments[i]);
+  }
+  return base;
+}
+
+ +
+

Tenga en cuenta la diferencia entre {{jsxref("Function.length")}} y arguments.length

+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en 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')}} 
+ +

Compatibilidad con los navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/functions/arrow_functions/index.html b/files/es/web/javascript/reference/functions/arrow_functions/index.html new file mode 100644 index 0000000000..6ea9a35595 --- /dev/null +++ b/files/es/web/javascript/reference/functions/arrow_functions/index.html @@ -0,0 +1,530 @@ +--- +title: Funciones Flecha +slug: Web/JavaScript/Referencia/Funciones/Arrow_functions +tags: + - ECMAScript6 + - Intermedio + - JavaScript + - Referencia + - función +translation_of: Web/JavaScript/Reference/Functions/Arrow_functions +--- +
{{jsSidebar("Functions", "Funciones")}}
+ +

Una expresión de función flecha es una alternativa compacta a una {{JSxRef("Operadores/function", "expresión de función")}} tradicional, pero es limitada y no se puede utilizar en todas las situaciones.

+ +

Diferencias y limitaciones:

+ + + +

{{EmbedInteractiveExample("pages/js/functions-arrow.html")}}

+ +

Comparación de funciones tradicionales con funciones flecha

+ +

Observa, paso a paso, la descomposición de una "función tradicional" hasta la "función flecha" más simple:
+ Nota: Cada paso a lo largo del camino es una "función flecha" válida

+ +
// Función tradicional
+function (a){
+  return a + 100;
+}
+
+// Desglose de la función flecha
+
+// 1. Elimina la palabra "function" y coloca la flecha entre el argumento y el corchete de apertura.
+(a) => {
+  return a + 100;
+}
+
+// 2. Quita los corchetes del cuerpo y la palabra "return" — el return está implícito.
+(a) => a + 100;
+
+// 3. Suprime los paréntesis de los argumentos
+a => a + 100;
+ +
+

Como se muestra arriba, los { corchetes }, ( paréntesis ) y "return" son opcionales, pero pueden ser obligatorios.

+
+ +

Por ejemplo, si tienes varios argumentos o ningún argumento, deberás volver a introducir paréntesis alrededor de los argumentos:

+ +
// Función tradicional
+function (a, b){
+  return a + b + 100;
+}
+
+// Función flecha
+(a, b) => a + b + 100;
+
+// Función tradicional (sin argumentos)
+let a = 4;
+let b = 2;
+function (){
+  return a + b + 100;
+}
+
+// Función flecha (sin argumentos)
+let a = 4;
+let b = 2;
+() => a + b + 100;
+ +

Del mismo modo, si el cuerpo requiere líneas de procesamiento adicionales, deberás volver a introducir los corchetes Más el "return" (las funciones flecha no adivinan mágicamente qué o cuándo quieres "volver"):

+ +
// Función tradicional
+function (a, b){
+  let chuck = 42;
+  return a + b + chuck;
+}
+
+// Función flecha
+(a, b) => {
+  let chuck = 42;
+  return a + b + chuck;
+}
+ +
Y finalmente, en las funciones con nombre tratamos las expresiones de flecha como variables
+ +
+
// Función tradicional
+function bob (a){
+  return a + 100;
+}
+
+// Función flecha
+let bob = a => a + 100;
+
+ +
+ +
+ +

Sintaxis

+ +

Sintaxis básica

+ +

Un parámetro. Con una expresión simple no se necesita return:

+ +
param => expression
+ +

Varios parámetros requieren paréntesis. Con una expresión simple no se necesita return:

+ +
(param1, paramN) => expression
+ +

Las declaraciones de varias líneas requieren corchetes y return:

+ +
param => {
+  let a = 1;
+  return a + b;
+}
+ +

Varios parámetros requieren paréntesis. Las declaraciones de varias líneas requieren corchetes y return:

+ +
(param1, paramN) => {
+   let a = 1;
+   return a + b;
+}
+ +

Sintaxis avanzada

+ +

Para devolver una expresión de objeto literal, se requieren paréntesis alrededor de la expresión:

+ +
params => ({foo: "a"}) // devuelve el objeto {foo: "a"}
+ +

Los {{JSxRef("Funciones/parametros_rest", "parámetros rest")}} son compatibles:

+ +
(a, b, ...r) => expression
+ +

Se admiten los {{JSxRef("Funciones/Parametros_por_defecto", "parámetros predeterminados")}}:

+ +
(a=400, b=20, c) => expression
+ +

{{JSxRef("Operadores/Destructuring_assignment", "Desestructuración")}} dentro de los parámetros admitidos:

+ +
([a, b] = [10, 20]) => a + b;  // el resultado es 30
+({ a, b } = { a: 10, b: 20 }) => a + b; // resultado es 30
+
+ +

Descripción

+ +

Consulta también "ES6 en profundidad: funciones flecha" en hacks.mozilla.org.

+ +

"this" y funciones flecha

+ +

Una de las razones por las que se introdujeron las funciones flecha fue para eliminar complejidades del ámbito ({{JSxRef("Operadores/this", "this")}}) y hacer que la ejecución de funciones sea mucho más intuitiva.

+ +
+

Si this es un misterio para ti, consulta {{JSxRef("Operadores/this", "este documento")}} para obtener más información sobre cómo funciona this. Para resumir, this se refiere a la instancia. Las instancias se crean cuando se invoca la palabra clave new. De lo contrario, this se establecerá —de forma predeterminada— en el {{Glossary("Scope", "ámbito o alcance")}} de window.

+
+ +

En las funciones tradicionales de manera predeterminada this está en el ámbito de window:

+ + + +
window.age = 10; // <-- ¿me notas?
+function Person() {
+  this.age = 42; // <-- ¿me notas?
+  setTimeout(function () {// <-- La función tradicional se está ejecutando en el ámbito de window
+    console.log("this.age", this.age); // genera "10" porque la función se ejecuta en el ámbito de window
+  }, 100);
+}
+
+var p = new Person();
+
+
+ +

Las funciones flecha no predeterminan this al {{Glossary("Scope", "ámbito o alcance")}} de window, más bien se ejecutan en el {{Glossary("Scope", "ámbito o alcance")}} en que se crean:

+ +
window.age = 10; // <-- ¿me notas?
+function Person() {
+  this.age = 42; // <-- ¿me notas?
+  setTimeout(() => {// <-- Función flecha ejecutándose en el ámbito de "p" (una instancia de Person)
+    console.log("this.age", this.age); // genera "42" porque la función se ejecuta en el ámbito de Person
+  }, 100);
+}
+
+var p = new Person();
+
+
+ +

En el ejemplo anterior, la función flecha no tiene su propio this. Se utiliza el valor this del {{Glossary("Scope", "ámbito")}} léxico adjunto; las funciones flecha siguen las reglas normales de búsqueda de variables. Entonces, mientras busca this que no está presente en el {{Glossary("Scope", "ámbito")}} actual, una función flecha termina encontrando el this de su {{Glossary("Scope", "ámbito")}} adjunto.

+ +

Relación con el modo estricto

+ +

Dado que this proviene del contexto léxico circundante, en el {{JSxRef("Modo_estricto", "modo estricto")}} se ignoran las reglas con respecto a this.

+ +
var f = () => {
+    'use strict';
+    return this;
+};
+
+f() === window; // o el objeto global
+ +

Todas las demás reglas del {{JSxRef("Modo_estricto", "modo estricto")}} se aplican normalmente.

+ +
+

Nota: Comprueba las notas sobre el {{JSxRef("Modo_estricto", "modo estricto")}}.

+
+ +

Funciones flecha utilizadas como métodos

+ +

Como se indicó anteriormente, las expresiones de función flecha son más adecuadas para funciones que no son métodos. Observa qué sucede cuando intentas usarlas como métodos:

+ +
'use strict';
+
+var obj = { // no crea un nuevo ámbito
+  i: 10,
+  b: () => console.log(this.i, this),
+  c: function() {
+    console.log(this.i, this);
+  }
+}
+
+obj.b(); // imprime indefinido, Window {...} (o el objeto global)
+obj.c(); // imprime 10, Object {...}
+ +

Las funciones flecha no tienen su propio this. Otro ejemplo que involucra {{JSxRef("Object.defineProperty()")}}:

+ +
'use strict';
+
+var obj = {
+  a: 10
+};
+
+Object.defineProperty(obj, 'b', {
+  get: () => {
+    console.log(this.a, typeof this.a, this); // indefinida 'undefined' Window {...} (o el objeto global)
+    return this.a + 10; // representa el objeto global 'Window', por lo tanto 'this.a' devuelve 'undefined'
+  }
+});
+
+ +

call, apply y bind

+ +

Los métodos {{JSxRef("Objetos_globales/Function/call", "call")}}, {{JSxRef("Objetos_globales/Function/apply", "apply")}} y {{JSxRef("Objetos_globales/Function/bind", "bind")}} NO son adecuados para las funciones flecha, ya que fueron diseñados para permitir que los métodos se ejecuten dentro de diferentes ámbitos, porque las funciones flecha establecen "this" según el ámbito dentro del cual se define la función flecha.

+ +

Por ejemplo, {{JSxRef("Objetos_globales/Function/call", "call")}}, {{JSxRef("Objetos_globales/Function/apply", "apply")}} y {{JSxRef("Objetos_globales/Function/bind", "bind")}} funcionan como se esperaba con las funciones tradicionales, porque establecen el ámbito para cada uno de los métodos:

+ +
// ----------------------
+// Ejemplo tradicional
+// ----------------------
+// Un objeto simplista con su propio "this".
+var obj = {
+    num: 100
+}
+
+// Establece "num" en window para mostrar cómo NO se usa.
+window.num = 2020; // ¡Ay!
+
+// Una función tradicional simple para operar en "this"
+var add = function (a, b, c) {
+  return this.num + a + b + c;
+}
+
+// call
+var result = add.call(obj, 1, 2, 3) // establece el ámbito como "obj"
+console.log(result) // resultado 106
+
+// apply
+const arr = [1, 2, 3]
+var result = add.apply(obj, arr) // establece el ámbito como "obj"
+console.log(result) // resultado 106
+
+// bind
+var result = add.bind(obj) // estable el ámbito como "obj"
+console.log(result(1, 2, 3)) // resultado 106
+ +

Con las funciones flecha, dado que la función add esencialmente se crea en el ámbito del window (global), asumirá que this es window.

+ +
// ----------------------
+// Ejemplo de flecha
+// ----------------------
+
+// Un objeto simplista con su propio "this".
+var obj = {
+    num: 100
+}
+
+// Establecer "num" en window para mostrar cómo se recoge.
+window.num = 2020; // ¡Ay!
+
+// Función flecha
+var add = (a, b, c) => this.num + a + b + c;
+
+// call
+console.log(add.call(obj, 1, 2, 3)) // resultado 2026
+
+// apply
+const arr = [1, 2, 3]
+console.log(add.apply(obj, arr)) // resultado 2026
+
+// bind
+const bound = add.bind(obj)
+console.log(bound(1, 2, 3)) // resultado 2026
+
+ +

Quizás el mayor beneficio de usar las funciones flecha es con los métodos a nivel del DOM (setTimeout, setInterval, addEventListener) que generalmente requieren algún tipo de cierre, llamada, aplicación o vinculación para garantizar que la función se ejecute en el ámbito adecuado.

+ +

Ejemplo tradicional:

+ +
var obj = {
+    count : 10,
+    doSomethingLater : function (){
+        setTimeout(function(){ // la función se ejecuta en el ámbito de window
+            this.count++;
+            console.log(this.count);
+        }, 300);
+    }
+}
+
+obj.doSomethingLater(); // la consola imprime "NaN", porque la propiedad "count" no está en el ámbito de window.
+ +

Ejemplo de flecha:

+ +
var obj = {
+    count : 10,
+    doSomethingLater : function(){  // por supuesto, las funciones flecha no son adecuadas para métodos
+        setTimeout( () => { // dado que la función flecha se creó dentro del "obj", asume el "this" del objeto
+            this.count++;
+            console.log(this.count);
+        }, 300);
+    }
+}
+
+obj.doSomethingLater();
+ +

Sin enlace de arguments

+ +

Las funciones flecha no tienen su propio objeto {{JSxRef("Funciones/arguments", "arguments")}}. Por tanto, en este ejemplo, arguments simplemente es una referencia a los argumentos del ámbito adjunto:

+ +
var arguments = [1, 2, 3];
+var arr = () => arguments[0];
+
+arr(); // 1
+
+function foo(n) {
+  var f = () => arguments[0] + n; // Los argumentos implícitos de foo son vinculantes. arguments[0] es n
+  return f();
+}
+
+foo(3); // 6
+ +

En la mayoría de los casos, usar {{JSxRef("Funciones/parametros_rest", "parámetros rest")}} es una buena alternativa a usar un objeto arguments.

+ +
function foo(n) {
+  var f = (...args) => args[0] + n;
+  return f(10);
+}
+
+foo(1); // 11
+ +

Uso del operador new

+ +

Las funciones flecha no se pueden usar como constructores y arrojarán un error cuando se usen con new.

+ +
var Foo = () => {};
+var foo = new Foo(); // TypeError: Foo no es un constructor
+ +

Uso de la propiedad prototype

+ +

Las funciones flecha no tienen una propiedad prototype.

+ +
var Foo = () => {};
+console.log(Foo.prototype); // undefined
+
+ +

Uso de la palabra clave yield

+ +

La palabra clave {{JSxRef("Operadores/yield", "yield")}} no se puede utilizar en el cuerpo de una función flecha (excepto cuando está permitido dentro de las funciones anidadas dentro de ella). Como consecuencia, las funciones flecha no se pueden utilizar como generadores.

+ +

Cuerpo de función

+ +

Las funciones flecha pueden tener un "cuerpo conciso" o el "cuerpo de bloque" habitual.

+ +

En un cuerpo conciso, solo se especifica una expresión, que se convierte en el valor de retorno implícito. En el cuerpo de un bloque, debes utilizar una instrucción return explícita.

+ +
var func = x => x * x;
+// sintaxis de cuerpo conciso, "return" implícito
+
+var func = (x, y) => { return x + y; };
+// con cuerpo de bloque, se necesita un "return" explícito
+
+ +

Devolver objetos literales

+ +

Ten en cuenta que devolver objetos literales utilizando la sintaxis de cuerpo conciso params => {object: literal} no funcionará como se esperaba.

+ +
var func = () => { foo: 1 };
+// ¡Llamar a func() devuelve undefined!
+
+var func = () => { foo: function() {} };
+// SyntaxError: la declaración function requiere un nombre
+ +

Esto se debe a que el código entre llaves ({}) se procesa como una secuencia de declaraciones (es decir, foo se trata como una etiqueta, no como una clave en un objeto literal).

+ +

Debes envolver el objeto literal entre paréntesis:

+ +
var func = () => ({ foo: 1 });
+ +

Saltos de línea

+ +

Una función flecha no puede contener un salto de línea entre sus parámetros y su flecha.

+ +
var func = (a, b, c)
+  => 1;
+// SyntaxError: expresión esperada, obtuve '=>'
+ +

Sin embargo, esto se puede modificar colocando el salto de línea después de la flecha o usando paréntesis/llaves como se ve a continuación para garantizar que el código se mantenga bonito y esponjoso. También puedes poner saltos de línea entre argumentos.

+ +
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 se lanza SyntaxError
+ +

Orden de procesamiento

+ +

Aunque la flecha en una función flecha no es un operador, las funciones flecha tienen reglas de procesamiento especiales que interactúan de manera diferente con {{JSxRef("Operadores/Operator_Precedence", "prioridad de operadores")}} en comparación con las funciones regulares.

+ +
let callback;
+
+callback = callback || function() {}; // ok
+
+callback = callback || () => {};
+// SyntaxError: argumentos de función flecha no válidos
+
+callback = callback || (() => {});    // bien
+
+ +

Ejemplos

+ +

Uso básico

+ +
// Una función flecha vacía devuelve undefinided
+let empty = () => {};
+
+(() => 'foobar')();
+// Devuelve "foobar"
+// (esta es una expresión de función invocada inmediatamente)
+
+var simple = a => a > 15 ? 15 : a;
+simple(16); // 15
+simple(10); // 10
+
+let max = (a, b) => a > b ? a : b;
+
+// Fácil filtrado de arreglos, mapeo, ...
+
+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]
+
+// Cadenas de promesas más concisas
+promise.then(a => {
+  // ...
+}).then(b => {
+  // ...
+});
+
+// Funciones flecha sin parámetros que son visualmente más fáciles de procesar
+setTimeout( () => {
+  console.log('sucederá antes');
+  setTimeout( () => {
+    // código más profundo
+    console.log ('Sucederá más tarde');
+  }, 1);
+}, 1);
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-arrow-function-definitions', 'Definición de función flecha')}}
+ +

Compatibilidad del navegador

+ +
+ + +

{{Compat("javascript.functions.arrow_functions")}}

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/functions/default_parameters/index.html b/files/es/web/javascript/reference/functions/default_parameters/index.html new file mode 100644 index 0000000000..e319a3606b --- /dev/null +++ b/files/es/web/javascript/reference/functions/default_parameters/index.html @@ -0,0 +1,234 @@ +--- +title: Parámetros predeterminados +slug: Web/JavaScript/Referencia/Funciones/Parametros_por_defecto +tags: + - Característica del lenguaje + - ECMAScript 2015 + - Funciones + - JavaScript +translation_of: Web/JavaScript/Reference/Functions/Default_parameters +--- +
{{jsSidebar("Functions", "Funciones")}}
+ +

Parámetros predeterminados de función permiten que los parámetros con nombre se inicien con valores predeterminados si no se pasa ningún valor o undefined.

+ +
{{EmbedInteractiveExample("pages/js/functions-default.html")}}
+ + + +

Sintaxis

+ +
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
+   statements
+}
+
+ +

Descripción

+ +

En JavaScript, los parámetros de función están predeterminados en {{jsxref("undefined")}}. Sin embargo, a menudo es útil establecer un valor predeterminado diferente. Aquí es donde los parámetros predeterminados pueden ayudar.

+ +

En el pasado, la estrategia general para establecer valores predeterminados era probar los valores de los parámetros en el cuerpo de la función y asignar un valor si eran undefined.

+ +

En el siguiente ejemplo, si no se proporciona ningún valor para b cuando se llama a multiply, el valor de b sería undefined al evaluar a * b y multiply devolvería NaN.

+ +
function multiply(a, b) {
+  return a * b
+}
+
+multiply(5, 2)  // 10
+multiply(5)     // NaN !
+
+ +

Para protegerte contra esto, usarías algo como la segunda línea, donde b se establece en 1 si llamas a multiply con un solo argumento:

+ +
function multiply(a, b) {
+  b = (typeof b !== 'undefined') ?  b : 1
+  return a * b
+}
+
+multiply(5, 2)  // 10
+multiply(5)     // 5
+
+ +

Con los parámetros predeterminados en ES2015, las comprobaciones en el cuerpo de la función ya no son necesarias. Ahora, puedes asignar 1 como valor predeterminado para b en el encabezado de la función:

+ +
function multiply(a, b = 1) {
+  return a * b
+}
+
+multiply(5, 2)          // 10
+multiply(5)             // 5
+multiply(5, undefined)  // 5
+
+ +

Ejemplos

+ +

Pasar undefined vs. otros valores falsos

+ +

En la segunda llamada de este ejemplo, incluso si el primer argumento se establece explícitamente en undefined (aunque no null u otros valores {{Glossary("falsy", "falsos", "", 1)}} , el valor del argumento num sigue siendo el predeterminado.

+ +
function test(num = 1) {
+  console.log(typeof num)
+}
+
+test()           // 'number' (num se establece en 1)
+test(undefined)  // 'number' (num se establece en 1 también)
+
+// prueba con otros valores falsos:
+test('')         // 'string' (num se establece en '')
+test(null)       // 'object' (num se establece en null)
+
+ +

Evaluado en el momento de la llamada

+ +

El argumento predeterminado se evalúa en el momento de la llamada. Entonces, a diferencia de (por ejemplo) Python, se crea un nuevo objeto cada vez que se llama a la función.

+ +
function append(value, array = []) {
+  array.push(value)
+  return array
+}
+
+append(1)  // [1]
+append(2)  // [2], no [1, 2]
+
+ +

Esto incluso se aplica a funciones y variables:

+ +
function callSomething(thing = something()) {
+  return thing
+}
+
+let numberOfTimesCalled = 0
+function something() {
+  numberOfTimesCalled += 1
+  return numberOfTimesCalled
+}
+
+callSomething()  // 1
+callSomething()  // 2
+
+ +

Los parámetros anteriores están disponibles para los parámetros predeterminados posteriores

+ +

Los parámetros definidos anteriormente (a la izquierda) están disponibles para los parámetros predeterminados posteriores:

+ +
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!"]
+
+ +

Esta funcionalidad se puede aproximar de esta manera, lo que demuestra cuántos casos extremos se manejan:

+ +
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, "=^_^="]
+
+ +

Efectos de el ámbito

+ +

Si se definen parámetros predeterminados para uno o más parámetros, se crea un segundo ámbito (registro de entorno), específicamente para los identificadores dentro de la lista de parámetros. Este ámbito es padre del ámbito creado para el cuerpo de la función.

+ +

Esto significa que no se puede hacer referencia a las funciones y variables declaradas en el cuerpo de la función desde los iniciadores de parámetros de valor predeterminado; intentar hacerlo arroja un {{jsxref("ReferenceError")}} en tiempo de ejecución.

+ +

También significa que las variables declaradas dentro del cuerpo de la función usando var enmascararán los parámetros del mismo nombre, en lugar de que el comportamiento habitual de las declaraciones var duplicadas no tenga ningún efecto.

+ +

La siguiente función arrojará un ReferenceError cuando se invoca, porque el valor del parámetro predeterminado no tiene acceso al ámbito secundario del cuerpo de la función:

+ +
function f(a = go()) { // Lanza un `ReferenceError` cuando se invoca a `f`.
+  function go() { return ':P' }
+}
+
+ +

...y esta función imprimirá undefined porque la variable var a se eleva solo a la parte superior del ámbito creado para el cuerpo de la función (y no hasta el ámbito principal creado para la lista de parámetros):

+ +
function f(a, b = () => console.log(a)) {
+  var a = 1
+  b() // Imprime `undefined`, porque los valores de los parámetros predeterminados existen en su propio ámbito
+}
+
+ +

Parámetros sin valores predeterminados después de los parámetros predeterminados

+ +

Los parámetros aún se establecen de izquierda a derecha, sobrescribiendo los parámetros predeterminados incluso si hay parámetros posteriores sin valores predeterminados.

+ +
function f(x = 1, y) {
+  return [x, y]
+}
+
+f()   // [1, undefined]
+f(2)  // [2, undefined]
+
+ +

Parámetro desestructurado con asignación de valor predeterminado

+ +

Puedes usar la asignación de valor predeterminado con la notación {{jsxref("Operators/Destructuring_assignment", "la desestructuración", "", 1)}}:

+ +
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
+  return x + y + z
+}
+
+f()  // 6
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-function-definitions', 'Definición de Funciones')}}
+ +

Compatibilidad del navegador

+ +
+ + +

{{Compat("javascript.functions.default_parameters")}}

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/functions/get/index.html b/files/es/web/javascript/reference/functions/get/index.html new file mode 100644 index 0000000000..7125ab0caa --- /dev/null +++ b/files/es/web/javascript/reference/functions/get/index.html @@ -0,0 +1,134 @@ +--- +title: get +slug: Web/JavaScript/Referencia/Funciones/get +tags: + - ECMAScript5 + - JavaScript + - Operator +translation_of: Web/JavaScript/Reference/Functions/get +--- +
{{jsSidebar("Funciones")}}
+ +

Enlaza la propiedad de un objeto con una función que será llamada cuando la propiedad es buscada.

+ +

Sintaxis

+ +

{get prop() { . . . } }

+ +

Parámetros

+ +
+
prop
+
el nombre de la propiedad a unir con la función dada
+
+ +

Descripción

+ +

A veces es deseable permitir acceso a una propiedad que retorna un valor dinámicamente calculado, o si desea mostrar el estado de alguna variable interna sin requerir el uso de llamadas a métodos explícitos. En JavaScript, esto se puede lograr con el uso de un getter (captador). No es posible tener simultáneamente un getter ligado a una propiedad y que dicha propiedad tenga actualmente un valor, aunque es posible usar un getter junto con un setter para crear un tipo de pseudo-propiedad.

+ +

Tenga en cuenta lo siguiente al trabajar con la sintaxis get:

+ + + +

El getter puede ser removido usando el operador {{jsxref("Operadores/delete", "delete")}}.

+ +

Ejemplos

+ +

Definir un getter con el operador get

+ +

Esto creará una pseudo-propiedad latest (ver ejemplo) del objecto o que podría retornar la más reciente entrada dentro de o.log:

+ +
var o = {
+  get latest () {
+    if (this.log.length > 0) {
+      return this.log[this.log.length - 1];
+    }
+    else {
+      return null;
+    }
+  },
+  log: []
+}
+
+ +

Note que intentar asignar un valor a latest no lo cambiará.

+ +

Borrar un getter usando el operador delete

+ +
delete o.latest;
+
+ +

Compatibilidad de navegadores

+ +

Basado en la página de página de Robert Nyman

+ +

Sin soporte (notablemente en IE6-8) significa que el script lanzará un error de sintaxis.

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaFirefox (Gecko)ChromeInternet ExplorerOperaSafari
Soporte básico{{ CompatGeckoDesktop("1.8.1") }}199.53
+
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaFirefox Mobile (Gecko)AndroidIE MobileOpera MobileSafari Mobile
Soporte básico{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
+
+ +

Consulta también

+ + + +
+

 

+
+ +

 

diff --git a/files/es/web/javascript/reference/functions/index.html b/files/es/web/javascript/reference/functions/index.html new file mode 100644 index 0000000000..ac1bea24ea --- /dev/null +++ b/files/es/web/javascript/reference/functions/index.html @@ -0,0 +1,661 @@ +--- +title: Funciones +slug: Web/JavaScript/Referencia/Funciones +tags: + - Funciones + - Guia(2) + - JavaScript + - función +translation_of: Web/JavaScript/Reference/Functions +--- +
{{jsSidebar("Functions")}}
+ +

En términos generales, una función es un "subprograma" que puede ser llamado por código externo (o interno en caso de recursión) a la función. Al igual que el programa en sí mismo, una función se compone de una secuencia de declaraciones, que conforman el llamado cuerpo de la función. Se pueden pasar valores a una función, y la función puede devolver un valor.

+ +

En JavaScript, las funciones son objetos de primera clase, es decir, son objetos y se pueden manipular y transmitir al igual que cualquier otro objeto. Concretamente son objetos {{jsxref("Function")}}.

+ +

General

+ +

Toda función en JavaScript es un objeto Function. Ver {{jsxref("Function")}} para obtener información sobre las propiedades y métodos de los objetos Function.

+ +

Las funciones no son lo mismo que los procedimientos. Una función siempre devuelve un valor, pero un procedimiento, puede o no puede devolver un valor.

+ +

Para devolver un valor especifico distinto del predeterminado, una función debe tener una sentencia {{jsxref("Sentencias/return", "return")}}, que especifique el valor a devolver. Una función sin una instrucción return devolverá el valor predeterminado. En el caso de un {{jsxref("Object.prototype.constructor", "constructor")}} llamado con la palabra clave {{jsxref("new")}}, el valor predeterminado es el valor de su parametro. Para el resto de funciones, el valor predeterminado es undefined.

+ +

Los parámetros en la llamada a una función son los argumentos de la función. Los argumentos se pasan a las funciones por valor. Si la función cambia el valor de un argumento, este cambio no se refleja globalmente ni en la llamada de la función. Sin embargo, las referencias a objetos también son valores, y son especiales: si la función cambia las propiedades del objeto referenciado, ese cambio es visible fuera de la función, tal y como se muestra en el siguiente ejemplo:

+ +
/* Declarando la función 'myFunc' */
+ function myFunc(elobjeto)
+ {
+   elobjeto.marca= "Toyota";
+ }
+
+ /*
+  * Declarando la variable 'mycar';
+  * Se crea e inicializa el nuevo objeto;
+  * para hacer referencia a él mediante 'mycar'
+  */
+ var mycar = {
+   marca: "Honda",
+   modelo: "Accord",
+   año: 1998
+ };
+
+ /* Mostrando 'Honda' */
+ window.alert(mycar.marca);
+
+ /* Paso por referencia del objeto 'mycar' a la función 'myFunc'*/
+ myFunc(mycar);
+
+ /*
+  * Muestra 'Toyota' como valor de la propiedad 'marca'
+  * del objeto, que ha sido cambiado por la función.
+  */
+ window.alert(mycar.marca);
+ +

La palabra clave this no hace referencia a la función que está ejecutandose actualmente, por lo que debes referirte a los objetos Function por nombre, incluso dentro del cuerpo de la función. Como alternativa, puedes utilizar la propiedad arguments.callee (que no se recomienda).

+ +

Definiendo funciones

+ +

Hay varias formas de definir funciones:

+ +

Declaración de una función (La instrucción function)

+ +

Hay una sintaxis especial para declarar funciones (ver la instrucción {{jsxref("Sentencias/function","function")}} para más detalles):

+ +
function nombre([param[,param[, ...param]]]) {
+   instrucciones
+}
+
+ +
+
nombre
+
El nombre de la función.
+
+ +
+
param
+
El nombre de un argumento que se pasará a la función. Una función puede tener hasta 255 argumentos.
+
+ +
+
instrucciones
+
Las instruciones que forman el cuerpo de la función.
+
+ +

Expresión de una función (El operador function)

+ +

Una expresión function es similar y tiene la misma sintaxis que una declaración de función (ver operador {{jsxref("Operadores/function", "function")}} para más detalles):

+ +
function [nombre]([param[, param[, ...param]]]) {
+   instrucciones
+}
+
+ +
+
nombre
+
El nombre de la función, se puede omitir, en ese caso la función se conoce como función anónima.
+
+ +
+
param
+
El nombre de los argumentos que se pasarán a la función. Una función puede tener hasta 255 argumentos.
+
+ +
+
instrucciones
+
Las instrucciones que forman el cuerpo de la función.
+
+ +

La expresión de función flecha (=>)

+ +
+

Nota: Las expresiones de función Flecha son una tecnología experimental, parte de la proposición Harmony (EcmaScript 6) y no son ampliamente implementadas por los navegadores.

+
+ +

Una expresión de función flecha tiene una sintaxis más corta y su léxico se une a este valor (ver {{jsxref("Funciones/Arrow_functions", "arrow functions", "", 1)}} para más detalles):

+ +
([param] [, param]) => { instrucciones }
+
+param => expresión
+
+ +
+
param
+
El nombre de un argumento. Si no hay argumentos se tiene que indicar con (). Para un único argumento no son necesarios los parentesis. (como foo => 1)
+
instrucciones o expresión
+
Multiples instrucciones deben ser encerradas entre llaves. Una única expresión no necesita llaves. La expresión es, así mismo, el valor de retorno implícito de esa función.
+
+ +

El constructor Function

+ +

Como todos los demás objetos, los objetos {{jsxref("Function")}} se pueden crear mediante el operador new:

+ +
new Function (arg1, arg2, ... argN, functionBody)
+
+ +
+
arg1, arg2, ... argN
+
Ningún o varios argumentos  son pasados para ser utilizados por la función como nombres de argumentos formales. Cada uno debe ser una cadena que se ajuste a las reglas de identificadores válidos en JavaScript, o a una lista de este tipo de cadenas separadas por comas; por ejemplo "x", "theValue", o "a,b".
+
+ +
+
Cuerpo de la función
+
Una cadena conteniendo las instrucciones JavaScript que comprenden la definición de la función.
+
+ +

Llamar al contructor Function como una función, sin el operador new, tiene el mismo efecto que llamarlo como un constructor.

+ +
Nota: Utilizar el constructor Function no se recomienda, ya que necesita el cuerpo de la función como una cadena, lo cual puede ocasionar que no se optimize correctamente por el motor JS, y puede también causar otros problemas.
+ +

El objeto arguments

+ +

Puedes referirte a los argumentos de una función dentro de la misma, utilizando el objeto arguments. Ver {{jsxref("Functiones/argument", "Function")}}.

+ +

Ámbito de ejecución y pila de funciones

+ +

some section about scope and functions calling other functions

+ +

Repaso

+ +

Una función puede referirse y llamarse a sí misma. Hay tres maneras en la que una función puede referirse a sí misma.

+ +
    +
  1. El nombre de la función
  2. +
  3. {{jsxref("arguments.callee")}}
  4. +
  5. una función dentro del ambito de ejecución que refiere a la función
  6. +
+ +

Por ejemplo, considere la siguiente definición de función:

+ +
var foo = function bar() {
+   // el cuerpo va aqui
+};
+
+ +

Dentro del cuerpo de la función, todo lo siguientes son lo mismo:

+ +
    +
  1. bar()
  2. +
  3. arguments.callee()
  4. +
  5. foo()
  6. +
+ +

Una función que se llama a sí misma es llamada una función recursiva. En algunas ocaciones, la recursión es análoga a un bucle. Ambos ejecutan el mismo código múltiples veces, y ambas requieren una condición (para evitar un bucle infinito, o en su lugar, recursión infinita en este caso). Por ejemplo, el siguiente bucle:

+ +
var x = 0;
+while (x < 10) { // "x < 10" es la condición
+   // haz algo
+   x++;
+}
+
+ +

puede ser convertida en una función recursiva y una llamada a esa función:

+ +
function loop(x) {
+   if (x >= 10) // "x >= 10" es la condición de salida (equivalente a "!(x < 10)")
+      return;
+   // haz algo
+   loop(x + 1); // la llamada recursiva
+}
+loop(0);
+
+ +

Sin embargo, algunos algoritmos no pueden ser bucles iterativos simples. Por ejemplo, obtener todos los nodos de una estructura de arbol (e.g. el DOM) es realizado de manera más fácil usando recursión:

+ +
function recorrerArbol (nodo) {
+   if (nodo == null) //
+      return;
+   // haz algo con el nodo
+   for (var i = 0; i < nodo.nodosHijos.length; i++) {
+       recorrerArbol(nodo.nodosHijos[i]);
+   }
+}
+
+ +

En comparación con el bucle de la función loop, cada llamada recursiva hace muchas llamadas recursivas aquí.

+ +

Es posible convertir cualquier algoritmo recursivo en uno no recursivo, pero a menudo la lógica es mucho más compleja y hacerlo requiere el uso de una pila. De hecho, la recursión utiliza una pila: la pila de funciones.

+ +

El comportamiento similar a la pila se puede ver en el ejemplo siguiente:

+ +
function foo(i) {
+   if (i < 0)
+      return;
+   document.writeln('inicio:' + i);
+   foo(i - 1);
+   document.writeln('fin:' + i);
+}
+foo(3);
+ +

que produce:

+ +
inicio:3
+inicio:2
+inicio:1
+inicio:0
+fin:0
+fin:1
+fin:2
+fin:3
+
+ +

Funciones anidadas y cierres

+ +

Puede anidar una función dentro de una función. La función anidada (inner) es privada a la función que la contiene (outer). También con la forma: aclosure.

+ +
+
Un cierre es una expresión (normalmente una función) que puede tener variables libres junto con un entorno que enlaza esas variables (que "cierra" la expresión).
+ Dado que una función anidada es un cierre, esto significa que una función anidada puede "heredar" los argumentos y las variables de su función contenedora. En otras palabras, la función interna contiene el ámbito de la función externa.
+
+ +

Desde que la función anidada es un cierre (closure), esto significa que una función anidada puede "heredar" los argumentos y variables de su función contenedora. En otras palabras, la función interna contiene un scope (alcance) de la función externa.

+ +

Para resumir:

+ + + + + +

El ejemplo siguiente muestra funciones anidadas:

+ +
function addCuadrado(a,b) {
+   function cuadrado(x) {
+      return x * x;
+   }
+   return cuadrado(a) + cuadrado(b);
+}
+a = addCuadrado(2,3); // retorna 13
+b = addCuadrado(3,4); // retorna 25
+c = addCuadrado(4,5); // retorna 41
+
+ +

Dado que la función interna forma un cierre, puede llamar a la función externa y especificar argumentos para la función externa e interna

+ +
function fuerade(x) {
+   function dentro(y) {
+      return x + y;
+   }
+   return dentro;
+}
+resultado = fuerade(3)(5); // retorna 8
+
+ +

Consideraciones sobre la eficiencia

+ +

Observe cómo se conserva x cuando se devuelve dentro. Un cierre conserva los argumentos y las variables en todos los ámbitos que contiene. Puesto que cada llamada proporciona argumentos potencialmente diferentes, debe crearse un cierre para cada llamada a la función externa. En otras palabras, cada llamada a fuerade crea un cierre. Por esta razón, los cierres pueden usar una gran cantidad de memoria. La memoria se puede liberar sólo cuando el dentro devuelto ya no es accesible. En este caso, el cierre del dentro se almacena en resultado. Como el resultado está en el ámbito global, el cierre permanecerá hasta que se descargue el script (en un navegador, esto sucedería cuando la página que contiene el script esté cerrada).

+ +

Debido a esta ineficiencia, evite cierres siempre que sea posible, es decir, evite las funciones de anidamiento siempre que sea posible. Por ejemplo, considere el siguiente ejemplo:

+ +
function assignOnclick(elemento) {
+   element.onclick = function() {
+      this.style.backgroundColor = 'blue';
+   };
+}
+
+ +

Esto se puede volver a escribir para evitar el cierre. Sin embargo, la función interna anónima necesitaría ser nombrada y ya no sería privada para assignOnclick:

+ +
function assignOnclick(elemento) {
+   elemento.onclick = elemento_onclick;
+}
+
+function elemento_onclick() {
+   this.style.backgroundColor = 'blue';
+}
+
+ +

Multiples funciones anidadas

+ +

Las funciones pueden ser anidadas contigua de la otra, es decir, una función (A) que contiene una función (B) que contiene una función (C), etc. Ambas funciones B y C forman cierres aquí, por lo que B puede acceder a A y C pueden acceder a B. Además, como C puede acceder a B, que puede acceder a A, C también puede acceder a A. Por lo tanto, los cierres pueden contener múltiples ámbitos; contienen recursivamente el alcance de las funciones que lo contienen. Esto es llamado encadenamiento de objetos(scope chaining). (Por qué se llama "chaining"("encadenamiento") se explicará más adelante.)

+ +

Considere el siguiente ejemplo:

+ +
function A(x) {
+   function B(y) {
+      function C(z) {
+         alert(x + y + z);
+      }
+      C(3);
+   }
+   B(2);
+}
+A(1); // alerts 6 (1 + 2 + 3)
+
+ +

En este ejemplo, C accede a las B que hayan en y y A en x. Esto se puede hacer porque:

+ +
    +
  1. B forma un cierre que incluye a A, es decir, B puede acceder a los argumentos y variables de A.
  2. +
  3. C forma un cierre que incluye a B.
  4. +
  5. Como el cierre de B incluye a A, el cierre de C incluye a A, C puede acceder a los argumentos y variables de la Banda A. En otras palabras, codifica los ámbitos de B y A en ese orden.
  6. +
+ +

Lo contrario, sin embargo, no es cierto. A no puede acceder a C, porque A no puede acceder a ningún argumento o variable de B, que C es una variable de. Así, C permanece privado de sólo B.

+ +

Conflictos de nombre

+ +

Cuando dos argumentos o variables en los ámbitos de un cierre tienen el mismo nombre, existe un conflicto de nombres("name conflict"). Más alcances internos tienen prioridad, por lo que el alcance más interno tiene la más alta precedencia, mientras que el alcance más externo toma el más bajo. Esta es la cadena de alcance. El primero en la cadena es el alcance más interno, y el último es el alcance más exterior. Considera lo siguiente:

+ +
function fuerade() {
+   var x = 10;
+   function dentro(x) {
+      return x;
+   }
+   return dentro;
+}
+resultado = fuerade()(20); // retorna 20 en lugar de 10
+
+ +

El conflicto de nombres ocurre en la sentencia return x y está entre el parámetro x del dentroy la variable x del fuerade. La cadena de alcance aquí es {dentro, fuerade, global object}. Por lo tanto, la x de insidetiene precedentes sobre la x de fuerade, y 20 (dentrode x) se devuelve en lugar de 10 (fuerade de x).

+ +

Constructor vs declaración vs expresión

+ +

Las diferencias entre la Function constructora, la de declaración y la de expresión.

+ +

Compare lo siguiente:

+ +
    +
  1. Una función definida con el constructor Function asignado a la variable multiply                                                                                                                     + +
    var multiply = new Function("x", "y", "return x * y;");
    +
    +
  2. +
  3. Una declaración de una función denominada multiply                                                  +
    function multiply(x, y) {
    +   return x * y;
    +}
    +
    +
  4. +
  5. Una expresión de función anónima asignada a la variable multiply                           +
    var multiply = function(x, y) {
    +   return x * y;
    +}
    +
    +
  6. +
  7. Una declaración de una función denominada func_name asignada a la variable multiply                                                                                                                  +
    var multiply = function func_name(x, y) {
    +   return x * y;
    +}
    +
    +
  8. +
+ +

Todos hacen aproximadamente la misma cosa, con algunas diferencias sutiles:

+ + + +

Una declaración de función es muy fácilmente (ya menudo involuntariamente) convertida en una expresión de función. Una declaración de función deja de ser una cuando:

+ + + +

Ejemplos:

+ + + +

Definición condicional de una función

+ +

Las funciones se pueden definir de forma condicional utilizando expresiones de función o el constructor Function.

+ +

En la siguiente secuencia de comandos, la función zero nunca se define y no se puede invocar, porque 'if (0)' se evalúa como false:

+ +
if (0)
+   function zero() {
+      document.writeln("Esto es zero.");
+   }
+
+ +

Si se cambia el script para que la condición se convierta en 'if (1)', se define la función zero.

+ +
+

Nota: Aunque esto parece una declaración de función, ésta es en realidad una expresión de función ya que está anidada dentro de otra instrucción. Ver las diferencias entre las funciones de declaración y de expresión.

+
+ +
+

Nota: Algunos motores JavaScript, sin incluir SpiderMonkey, tratan incorrectamente cualquier expresión de función con un nombre como una declaración de función. Esto llevaría a que se definiera zero incluso con el siempre-falso("always-false") condicional. Una manera más segura de definir funciones condicionalmente es definir la función anónimamente y asignarla a una variable:

+
+ +
if (0)
+   var zero = function() {
+      document.writeln("Esto es zero.");
+   }
+
+ +

Funciones como manejadores de eventos

+ +

En JavaScript, los controladores de eventos DOM son funciones (en oposición a los objetos que contienen un método handleEvent en otros enlaces de idioma DOM). Las funciones se pasan un objeto de evento como el primer y único parámetro. Como cualquier otro parámetro, si el objeto de evento no necesita ser utilizado, puede omitirse en la lista de parámetros formales.

+ +

Los posibles objetivos de eventos en un documento HTML incluyen: window (Window objects("objeto de ventana"), including frames("marcos")), document (HTMLDocument objects("objetos HTMLDocument")), y elementos (Element objects("objetos Elemento")). En el HTML DOM, los destinos de evento tienen propiedades de controlador de eventos. Estas propiedades son nombres de eventos en minúsculas con prefijo "on", e.g. onfocus. Los eventos DOM Level 2 Events proporcionan una forma alternativa y más sólida de agregar oyentes de eventos.

+ +
+

Nota: Los eventos son parte del DOM, no de JavaScript. (JavaScript simplemente proporciona un enlace al DOM.)

+
+ +

El ejemplo siguiente asigna una función a un manejador de eventos de "foco"("focus") de ventana.

+ +
window.onfocus = function() {
+   document.body.style.backgroundColor = 'white';
+}
+
+ +

Si se asigna una función a una variable, puede asignar la variable a un controlador de eventos. El siguiente código asigna una función a la variable setBGColor.

+ +
var setBGColor = new Function("document.body.style.backgroundColor = 'white';");
+
+ +

Puede utilizar esta variable para asignar una función a un controlador de eventos de varias maneras. Aquí hay dos formas:

+ +
    +
  1. Escritura con propiedades de evento DOM HTML
    + +
    document.form1.colorButton.onclick = setBGColor;
    +
    +
  2. +
  3. Atributo de evento HTML
    + +
    <input name="colorBoton" type="button"
    +   value="Cambia color de fondo"
    +   onclick="setBGColor();"/>
    +
    + +

    Un manejador de eventos establecido de esta manera es en realidad una función, denominada después del atributo, envuelta alrededor del código especificado. Esta es la razón por la que los paréntesis en "setBGColor()" son necesarios aquí (en lugar de sólo "setBGColor").

    +
  4. +
+ +

Es equivalente a:

+ +
document.form1.colorButton.onclick = function onclick(event) {
+   setBGColor();
+}
+
+ +

Observe cómo se pasa el objeto de evento a esta función anónima como event de parámetro. Esto permite que el código especificado utilice el objeto Evento("Event object)":

+ +
<input ...
+    onclick="alert(event.target.tagName);"/>
+
+ +

Al igual que cualquier otra propiedad que se refiere a una función, el controlador de eventos puede actuar como un método, y this se refiere al elemento que contiene el controlador de eventos. En el ejemplo siguiente, se llama a la función referida por onfocus con this igual a window.

+ +
window.onfocus();
+
+ +

Un error común de principiante de JavaScript es el añadir paréntesis y / o parámetros al final de la variable, es decir, llamar al manejador de eventos cuando lo asigna. La adición de estos paréntesis asignará el valor devuelto al llamar al manejador de eventos, que a menudo es undefined (si la función no devuelve nada), en lugar del controlador de eventos en sí:

+ +
document.form1.button1.onclick = setBGColor();
+
+ +

Para pasar parámetros a un manejador de eventos, el manejador debe ser envuelto en otra función de la siguiente manera:

+ +
document.form1.button1.onclick = function() {
+   setBGColor('Algun valor');
+};
+
+ +

Compatibilidad con versiones anteriores

+ +

JavaScript 1.1 y anteriores

+ +

No puede anidar una sentencia de función en otra instrucción o en sí misma.

+ +

Variables locales dentro de las funciones

+ +

arguments: Objeto similar a una matriz que contiene los argumentos pasados a la función en ejecución.

+ +

arguments.callee: Especifica la función en ejecución.

+ +

arguments.caller: Especifica la función que invocó la función en ejecución.

+ +

arguments.length: Especifica el número de argumentos pasados a la función.

+ +

Ejemplos

+ +

1) Devolver un número con formato

+ +

La siguiente función devuelve una cadena que contiene la representación formateada de un número rellenado con ceros a la izquierda.

+ +
// Esta función devuelve una cadena rellenada con ceros a la izquierda
+
+function padZeros(num, totalLen) {
+   var numStr = num.toString();             // Inicializa un valor de retorno como cadena
+   var numZeros = totalLen - numStr.length; // Calcula el no. de ceros
+   for (var i = 1; i <= numZeros; i++) {
+      numStr = "0" + numStr;
+   }
+   return numStr;
+}
+
+ +

Las siguientes sentencias llaman a la función padZeros.

+ +
var resultado;
+resultado = padZeros(42,4); // retorna "0042"
+resultado = padZeros(42,2); // retorna "42"
+resultado = padZeros(5,4);  // retorna "0005"
+
+ +

2) Determinar si existe una función

+ +

Puede determinar si existe una función utilizando el operador typeof. En el ejemplo siguiente, se realiza una prueba para determinar si el objeto window tiene una propiedad llamada noFunc que es una función. Si es así, se utiliza; de lo contrario, se tomarán otras medidas.

+ +
 if ('function' == typeof window.noFunc) {
+   // utiliza noFunc()
+ } else {
+   // hacer algo mas
+ }
+
+ +
+

Nota: Tenga en cuenta que en la prueba if, e utiliza una referencia a noFunc aquí no hay paréntesis "()" después del nombre de la función para que la función real no se llame.

+
+ +

Ver también

+ +

Function, sentencia function, operador function

+ +

{{ languages( { "en": "en/Core_JavaScript_1.5_Reference/Functions", "ru": "ru/\u042f\u0434\u0440\u043e_JavaScript_1.5_\u0421\u043f\u0440\u043e\u0432\u0447\u043d\u0438\u043a/Functions", "fr": "fr/R\u00e9f\u00e9rence_de_JavaScript_1.5_Core/Fonctions", "ja": "ja/Core_JavaScript_1.5_Reference/Functions" } ) }}

diff --git a/files/es/web/javascript/reference/functions/method_definitions/index.html b/files/es/web/javascript/reference/functions/method_definitions/index.html new file mode 100644 index 0000000000..2aa23ca9b3 --- /dev/null +++ b/files/es/web/javascript/reference/functions/method_definitions/index.html @@ -0,0 +1,226 @@ +--- +title: Method definitions +slug: Web/JavaScript/Referencia/Funciones/Method_definitions +translation_of: Web/JavaScript/Reference/Functions/Method_definitions +--- +
{{JsSidebar("Functions")}}
+ +
A partir de ECMAScript 2015 (ES6), se introdujo una sintaxis abreviada para la definición de métodos en inicializadores de objetos. Es una forma abreviada para la asignación de una función al nombre del método.
+ +
 
+ +

Sintaxis

+ +
var obj = {
+  property( parameters… ) {},
+  *generator( parameters… ) {},
+// also with computed keys:
+  [property]( parameters… ) {},
+  *[generator]( parameters… ) {},
+// compare ES5 getter/setter syntax:
+  get property() {},
+  set property(value) {}
+};
+
+ +

Descripción

+ +

La sintaxis abreviada es similar a la introducida en ECMAScript 5 con getter y setter.

+ +

Dado el siguiente código:

+ +
var obj = {
+  foo: function() {},
+  bar: function() {}
+};
+ +

Ahora se puede abreviar esto mismo como:

+ +
var obj = {
+  foo() {},
+  bar() {}
+};
+ +
+

Nota : La sintaxis abreviada usa funciones con nombre en lugar de funciones anónimas (como en …foo: function() {}…). Las funciones con nombre pueden ser llamadas desde el cuerpo de la función (esto es imposible con funciones anónimas, ya que no existe un identificador al que referirse). Para más detalles, ver {{jsxref("Operators/function","function","#Examples")}}.

+
+ +

Abreviatura de métodos generadores

+ +

Los métodos generadores también pueden definirse usando la sintaxis abreviada. Note que el asterisco (*) en la sintaxis abreviada debe estar antes del nombre de propiedad del generador. Esto es, * g(){} funcionará, pero g *(){} no.

+ +
// Usando una propiedad con nombre (pre-ES6)
+var obj2 = {
+  g: function*() {
+    var index = 0;
+    while(true)
+      yield index++;
+  }
+};
+
+// El mismo objeto, usando la sintaxis abreviada
+var obj2 = {
+  * g() {
+    var index = 0;
+    while(true)
+      yield index++;
+  }
+};
+
+var it = obj2.g();
+console.log(it.next().value); // 0
+console.log(it.next().value); // 1
+ +

Las definiciones de métodos no son constructores (instanciables con new)

+ +

Las las definiciones de métodos no son constructores y generarán un {{jsxref("TypeError")}} si intenta instanciarlos.

+ +
var obj = {
+  method() {},
+};
+new obj.method; // TypeError: obj.method no es un constructor
+
+var obj = {
+  * g() {}
+};
+new obj.g; // TypeError: obj.g no es un constructor (cambiado en ES2016)
+
+ +

Ejemplos

+ +

Caso de prueba simple

+ +
var obj = {
+  a : "foo",
+  b(){ return this.a; }
+};
+console.log(obj.b()); // "foo"
+
+ +

Nombres de propiedad computados

+ +

La sintaxis abreviada también soporta nombres de propiedades computados.

+ +
var bar = {
+  foo0 : function (){return 0;},
+  foo1(){return 1;},
+  ["foo" + 2](){return 2;},
+};
+
+console.log(bar.foo0()); // 0
+console.log(bar.foo1()); // 1
+console.log(bar.foo2()); // 2
+ +

Especificaciónes

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoObservaciones
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ES7', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES7')}}Cambiado el que los métodos generadores no deban tener una  trampa [[Construct]] y deban fallar cuando se usen con new.
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrestaciónChromeFirefox (Gecko)Internet ExplorerOperaSafari
Definición de métodos abreviada{{CompatChrome("39")}}{{CompatGeckoDesktop("34")}}{{CompatNo}}{{CompatOpera("26")}}{{CompatNo}}
Métodos generadors no son constructores (ES2016){{CompatUnknown}}{{CompatGeckoDesktop("43")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrestaciónAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Definición de métodos abreviada{{CompatNo}}{{CompatNo}}{{CompatGeckoMobile("34")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
Métodos generadores no son constructores (ES2016){{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile("43")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Notas específicas para SpiderMonkey

+ + + +

Ver también

+ + diff --git a/files/es/web/javascript/reference/functions/rest_parameters/index.html b/files/es/web/javascript/reference/functions/rest_parameters/index.html new file mode 100644 index 0000000000..2e26e2c6e0 --- /dev/null +++ b/files/es/web/javascript/reference/functions/rest_parameters/index.html @@ -0,0 +1,266 @@ +--- +title: Parámetros Rest +slug: Web/JavaScript/Referencia/Funciones/parametros_rest +tags: + - Funciones + - JavaScript + - Parametros Rest +translation_of: Web/JavaScript/Reference/Functions/rest_parameters +--- +
{{jsSidebar("Functions")}}
+ +

La sintaxis de los parámetros rest nos permiten representar un número indefinido de argumentos como un array.

+ +

{{EmbedInteractiveExample("pages/js/functions-restparameters.html")}}

+ +

La fuente interactiva de este ejemplo es almacenado en un repositorio de GitHub. Si a ti te gustaría contribuir al proyecto de ejemplos interactivos, por favor clona este repositorio https://github.com/mdn/interactive-examples y envíanos un pull-request.

+ +

Sintaxis

+ +
function(a, b, ...theArgs) {
+  // ...
+}
+
+ +

Descripción

+ +

El último parámetro de una función se puede prefijar con ..., lo que hará que todos los argumentos restantes (suministrados por el usuario) se coloquen dentro de un array de javascript "estándar".

+ +

Sólo el último parámetro puede ser un "parámetro rest".

+ +
function myFun(a, b, ...manyMoreArgs) {
+  console.log("a", a);
+  console.log("b", b);
+  console.log("manyMoreArgs", manyMoreArgs);
+}
+
+myFun("one", "two", "three", "four", "five", "six");
+
+// Console Output:
+// a, one
+// b, two
+// manyMoreArgs, [three, four, five, six]
+
+ +

Diferencia entre los parámetros rest y el objeto arguments

+ +

Hay tres principales diferencias entre los parámetros rest y el objeto arguments:

+ + + +

De argumentos a array

+ +

Los parámetros rest han sido agregados para reducir el código repetitivo que se usaba en los parámetros.

+ +
// Antes de los parámetros rest, "arguments" se podía convertir en un array usando:
+
+function f(a, b) {
+
+  let normalArray = Array.prototype.slice.call(arguments)
+  // -- o  --
+  let normalArray = [].slice.call(arguments)
+  // -- o  --
+  let normalArray = Array.from(arguments)
+
+  let first = normalArray.shift()  // OK, nos da el primer argumento
+  let first = arguments.shift()    // ERROR (arguments no es un array)
+}
+
+// Ahora, puedes acceder fácilmente a un array usando un parametro rest.
+
+function f(...args) {
+  let normalArray = args
+  let first = normalArray.shift() // OK, gives the first argument
+}
+ +

Desestructuración de los parametros rest

+ +

Los parámetros rest pueden ser desestructurados, eso significa que sus datos pueden ser desempaquetados dentro de distintas variables. Ver Destructuring assignment.

+ +
function f(...[a, b, c]) {
+  return a + b + c;
+}
+
+f(1)          // NaN (b y c son indefinidos)
+f(1, 2, 3)    // 6
+f(1, 2, 3, 4) // 6 (el cuarto parámetro no está desestructurado)
+ +

Ejemplos

+ +

Usando parámetros rest

+ +

En este ejemplo, el primer argumento es mapeado con 'a' y el segundo con 'b', entonces, esos argumentos nombrados, son usados normalmente

+ +

De todas formas, el tercer argumento, manyMoreArgs, será un array que contendrá tantos argumentos como el usuario incluya (3er, 4to, 5to ...).

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

Debajo... incluso si hay solo un valor, el ultimo argumento seguirá siendo colocado dentro de un array.

+ +
// usando la misma definición de función del ejemplo anterior
+myFun("one", "two", "three")
+
+// a, one
+// b, two
+// manyMoreArgs, [three]
+ +

Debajo, el tercer argumento no esta provisto, pero manyMoreArgs continúa siendo un array (aunque uno vacío).

+ +
//usando la misma definición de función del ejemplo anterior
+
+myFun("one", "two")
+
+// a, one
+// b, two
+// manyMoreArgs, []
+ +

Argument length

+ +

Puesto que theArgs es un array, su tamaño (un conteo de sus elementos) es dado por la propiedad length :

+ +
function fun1(...theArgs) {
+  console.log(theArgs.length);
+}
+
+fun1();  // 0
+fun1(5); // 1
+fun1(5, 6, 7); // 3
+
+ +

Ordinary parameter and rest parameters

+ +

En el siguiente ejemplo, se usa un parámetro rest para agrupar  dentro de un array a todos los argumentos despues del primero.  Luego cada uno es multiplicado por el primero y el arreglo es retornado:

+ +
function multiply(multiplier, ...theArgs) {
+  return theArgs.map(function (element) {
+    return multiplier * element;
+  });
+}
+
+let arr = multiply(2, 1, 2, 3);
+console.log(arr); // [2, 4, 6]
+
+ +

El siguiente ejemplo muestra que se puede usar los métodos de Array en los parámetros rest , pero no en el objeto arguments:

+ +
function sortRestArgs(...theArgs) {
+  var sortedArgs = theArgs.sort();
+  return sortedArgs;
+}
+
+console.log(sortRestArgs(5,3,7,1)); // muestra 1,3,5,7
+
+function sortArguments() {
+  var sortedArgs = arguments.sort();
+  return sortedArgs; // esto nunca va a ocurrir
+}
+
+// lanza un TypeError: arguments.sort is not a function
+console.log(sortArguments(5,3,7,1));
+
+ +

Para poder usar los métodos de  Array en el objeto arguments, se debe convertir a un Array primero.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ES6')}}definción inicial.
{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad en Navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Básico{{CompatChrome(47)}}{{CompatVersionUnknown}}{{CompatGeckoDesktop("15.0")}}{{CompatNo}}34{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidAndroid WebviewFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Soporte Básico{{CompatNo}}{{CompatChrome(47)}}{{CompatGeckoMobile("15.0")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatChrome(47)}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/functions/set/index.html b/files/es/web/javascript/reference/functions/set/index.html new file mode 100644 index 0000000000..ef555e6759 --- /dev/null +++ b/files/es/web/javascript/reference/functions/set/index.html @@ -0,0 +1,217 @@ +--- +title: setter +slug: Web/JavaScript/Referencia/Funciones/set +translation_of: Web/JavaScript/Reference/Functions/set +--- +
{{jsSidebar("Funciones")}}
+ +

La sintaxis  set  asocia la propiedad de un objeto a una función que será llamada cuando haya un intento de asignar valor a esa propiedad.

+ +

Sintaxis

+ +
{set prop(val) { . . . }}
+{set [expression](val) { . . . }}
+ +

Parámetros

+ +
+
prop
+
El nombre de la propiedad a asociar con la función dada.
+
+ +
+
val
+
Un alias para la variable que contiene el valor a asignar a la propiedad.
+
expression
+
A partir de ECMAScript 2015, se puede también usar expresiones para nombres de propiedades computados para asociar a la función dada.
+
+ +

Descripción

+ +

En JavaScript, un setter puede ser usado para ejecutar una función donde sea que una propiedad se intente cambiar. Los setters son regularmente usados en conjunto con getters para crear un tipo de pseudo-propiedad. No es posible tener simultáneamente un setter en una propiedad que ya tiene un valor.

+ +

Tenga en cuenta lo siguiente al trabajar con setters:

+ +
+ +
+ +

Ejemplos

+ +

Definiendo un setter en el inicializador de nuevos objetos

+ +

En el siguiente ejemplo definimos una pseudo-propiedad  actual  al objeto lenguaje. Cuando se le asigne un valor a actual, actualiza log con ese valor:

+ +
var lenguaje = {
+  set actual(mensaje) {
+    this.log.push(mensaje);
+  },
+  log: []
+}
+lenguaje.actual='ES';
+console.log(lenguaje.log); // ['ES']
+
+lenguaje.actual='FR';
+console.log(lenguaje.log); // ['ES', 'FR']
+
+ + + +

Note que actual no está definido y cualquier intento de accederlo devolverá undefined.

+ +

Eliminando un setter con el operador delete 

+ +

Si desea eliminar el setter, puede simplemente aplicar delete en él:

+ +
delete lenguaje.actual;
+
+ +

Definiendo un setter en un objecto existente usando defineProperty

+ +

Para añadir un setter a un objeto existente, use {{jsxref("Object.defineProperty()")}}

+ +
consr o = {a: 0};
+
+Object.defineProperty(o, 'b', {
+  set: function (x) { this.a = x / 2; }
+});
+
+o.b = 10; // Ejecuta el setter, el cual asigna 10 / 2 (5) a la propiedad 'a'
+console.log(o.a) // 5
+ +

Usando un nombre de propiedad computado

+ +
+

Nota: Propiedades computadas son 'experimental technology', parte de la propuesta para ECMAScript 6, y no está soportado en todos los navegadores. Dará error de sintaxis en entornos no soportados.

+
+ +
const expr = 'foo';
+
+var obj = {
+  baz: 'bar',
+  set [expr](v) { this.baz = v; }
+};
+
+console.log(obj.baz); // "bar"
+obj.foo = "baz";      // ejecuta el setter
+console.log(obj.baz); // "baz"
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}{{Spec2('ES5.1')}}Definición inicial.
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES6')}}Se añaden las propiedades computadas.
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(1)}}{{ CompatGeckoDesktop("1.8.1") }}{{ CompatIE(9) }}9.53
Computed property names{{CompatNo}}{{ CompatGeckoDesktop("34") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{ CompatGeckoMobile("1.8.1") }}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Computed property names{{CompatNo}}{{CompatNo}}{{ CompatGeckoMobile("34.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

Notas específicas para SpiderMonkey-specific

+ + + +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/aggregateerror/index.html b/files/es/web/javascript/reference/global_objects/aggregateerror/index.html new file mode 100644 index 0000000000..524d0f9f5a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/aggregateerror/index.html @@ -0,0 +1,87 @@ +--- +title: AggregateError +slug: Web/JavaScript/Referencia/Objetos_globales/AggregateError +tags: + - AggregateError + - Clase + - Experimental + - Interfaz + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/AggregateError +--- +
{{JSRef}}
+ +

El objeto AggregateError representa un error cuando se deben agrupar varios errores en un solo error. Se lanza cuando una operación necesita informar de varios errores, por ejemplo, {{JSxRef("Promise.any()")}}, cuando todas las promesas que se le pasan son rechazadas.

+ +

Constructor

+ +
+
{{JSxRef("Global_Objects/AggregateError/AggregateError", "AggregateError()")}}
+
Crea un nuevo objeto AggregateError.
+
+ +

Propiedades de la instancia

+ +
+
{{JSxRef("Error.prototype.message", "AggregateError.prototype.message")}}
+
Mensaje de error, el valor predeterminado es "" (la cadena vacía).
+
{{JSxRef("Error.prototype.name", "AggregateError.prototype.name")}}
+
Nombre del error, el valor predeterminado es AggregateError.
+
+ +

Ejemplos

+ +

Capturar un error agregado

+ +
Promise.any([
+  Promise.reject(new Error("algún error")),
+]).catch(e => {
+  console.log(e instanceof AggregateError); // true
+  console.log(e.message);                   // "Todas las promesas rechazadas"
+  console.log(e.name);                      // "AggregateError"
+  console.log(e.errors);                    // [ Error: "algún error" ]
+});
+
+ +

Crear un AggregateError

+ +
try {
+  throw new AggregateError([
+    new Error("algún error"),
+  ], 'Hola');
+} catch (e) {
+  console.log(e instanceof AggregateError); // true
+  console.log(e.message);                   // "Hola"
+  console.log(e.name);                      // "AggregateError"
+  console.log(e.errors);                    // [ Error: "algún error" ]
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('Promise.any', '#sec-aggregate-error-objects', 'AggregateError')}}
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/@@iterator/index.html b/files/es/web/javascript/reference/global_objects/array/@@iterator/index.html new file mode 100644 index 0000000000..65ac581204 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/@@iterator/index.html @@ -0,0 +1,89 @@ +--- +title: 'Array.prototype[@@iterator]()' +slug: Web/JavaScript/Referencia/Objetos_globales/Array/@@iterator +tags: + - Array + - ECMAScript 2015 + - Iterator + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@iterator +--- +
{{JSRef}}
+ +

El valor inicial de la propiedad @@iterator es el mismo objeto de función que el valor inicial de la propiedad {{jsxref("Array.prototype.values()", "values()")}}.

+ +

Sintaxis

+ +
arr[Symbol.iterator]()
+ +

Valor de retorno

+ +

El valor inicial dado por el iterador {{jsxref("Array.prototype.values()", "values()")}}. Por defecto, usar arr[Symbol.iterator] devolverá la función {{jsxref("Array.prototype.values()", "values()")}}.

+ +

Ejemplos

+ +

Iteración usando el bucle for...of 

+ +
var arr = ['w', 'y', 'k', 'o', 'p'];
+var eArr = arr[Symbol.iterator]();
+// nuestro navegador debe ser compatible con el bucle for..of
+// y variables let-scoped en bucles for
+for (let letter of eArr) {
+  console.log(letter);
+}
+
+ +

Iteración alternativa

+ +
var arr = ['w', 'y', 'k', 'o', 'p'];
+var eArr = arr[Symbol.iterator]();
+console.log(eArr.next().value); // w
+console.log(eArr.next().value); // y
+console.log(eArr.next().value); // k
+console.log(eArr.next().value); // o
+console.log(eArr.next().value); // p
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-array.prototype-@@iterator', 'Array.prototype[@@iterator]()')}}{{Spec2('ES2015')}}Definición inicial..
{{SpecName('ESDraft', '#sec-array.prototype-@@iterator', 'Array.prototype[@@iterator]()')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.@@iterator")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/@@species/index.html b/files/es/web/javascript/reference/global_objects/array/@@species/index.html new file mode 100644 index 0000000000..2f15ad345a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/@@species/index.html @@ -0,0 +1,76 @@ +--- +title: 'get Array[@@species]' +slug: Web/JavaScript/Referencia/Objetos_globales/Array/@@species +tags: + - Array + - JavaScript + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@species +--- +
{{JSRef}}
+ +

La propiedad de acceso Array[@@species] devuelve el constructor de Array.

+ +

Sintaxis

+ +
Array[Symbol.species]
+
+ +

Valor de retorno

+ +

El constructor {{jsxref("Array")}}.

+ +

Descripción

+ +

La propiedad de acceso species devuelve el constructor predeterminado para objetos Array. Los constructores de subclase pueden anularlo para cambiar la asignación del constructor.

+ +

Ejemplos

+ +

La propiedad species devuelve la función de constructor predeterminada, que es el constructor Array para objetos Array:

+ +
Array[Symbol.species]; // function Array()
+ +

In a derived collection object (e.g. your custom array MyArray), the MyArray species is the MyArray constructor. However, you might want to overwrite this, in order to return parent Array objects in your derived class methods:

+ +
class MyArray extends Array {
+  // Overwrite MyArray species to the parent Array constructor
+  static get [Symbol.species]() { return Array; }
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-get-array-@@species', 'get Array [ @@species ]')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-get-array-@@species', 'get Array [ @@species ]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.@@species")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/@@unscopables/index.html b/files/es/web/javascript/reference/global_objects/array/@@unscopables/index.html new file mode 100644 index 0000000000..43dc771ae7 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/@@unscopables/index.html @@ -0,0 +1,78 @@ +--- +title: 'Array.prototype[@@unscopables]' +slug: Web/JavaScript/Referencia/Objetos_globales/Array/@@unscopables +tags: + - Array + - JavaScript + - Matriz + - Propiedad + - Prototipo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@unscopables +--- +
{{JSRef}}
+ +

La propiedad de símbolo @@unscopable contiene nombres de propiedad que no se incluyeron en el estándar ECMAScript antes de la versión ES2015. Estas propiedades se excluyen de los enlaces de declaración with.

+ +

Sintaxis

+ +
arr[Symbol.unscopables]
+ +

Descripción

+ +

 

+ +

Las propiedades de matriz predeterminadas que se excluyen de los enlaces with son: copyWithin, entries, fill, find, findIndex, includes, keys, y values.

+ +

Consulte {{jsxref("Symbol.unscopables")}} para saber cómo configurar unscopables para sus propios objetos.

+ +

{{js_property_attributes(0,0,1)}}

+ +

Ejemplos

+ +

El siguiente código funciona bien en ES5 y más abajo. Sin embargo, en ECMAScript 2015 y posterior, se introdujo el método {{jsxref("Array.prototype.keys()")}}. Eso significa que dentro de los entornos with, las "keys" ahora serían el método y no la variable. Aquí es donde entra en juego la propiedad de símbolo @@unscopables Array.prototype[@@unscopables] incorporada y evita que algunos de los métodos Array tengan un alcance en la instrucción with.

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

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.@@unscopables")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/concat/index.html b/files/es/web/javascript/reference/global_objects/array/concat/index.html new file mode 100644 index 0000000000..dc7dfc999d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/concat/index.html @@ -0,0 +1,140 @@ +--- +title: Array.prototype.concat() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/concat +tags: + - Array + - JavaScript + - Métodos + - Prototipo + - Referencia + - array.concat + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/concat +--- +
{{JSRef}}
+ +

El método concat() se usa para unir dos o más arrays. Este método no cambia los arrays existentes, sino que devuelve un nuevo array.

+ +
{{EmbedInteractiveExample("pages/js/array-concat.html","shorter")}}
+ +

Sintaxis

+ +
var nuevo_array = viejo_array.concat(valor1[, valor2[, ...[, valorN]]])
+ +

Parámetros

+ +
+
valorN {{optional_inline}}
+
Arrays y/o valores a concatenar en el nuevo array. Ver la descripción posterior para más detalles.
+
+ +

Valor devuelto

+ +
+
Una nueva instancia de {{jsxref("Array")}}.
+
+ +

Descripción

+ +

El método concat crea un nuevo array que consta de los elementos del objeto que lo llama, seguido, en orden de ingreso, por los elementos de cada parámetro (en caso de que el parámetro sea un array), o el parámetro mismo (en caso de que no sea un array). No se aplica de forma recursiva a parámetros con arreglos anidados.

+ +

El método concat no altera this el array original, ni ninguno de los que fueron ingresados como parámetros, sino que devuelve una copia superficial que contiene copias de los mismos elementos de los arrays originales combinados. Los elementos de los arrays originales son copiados en el nuevo array de la siguiente manera:

+ + + +
+

Nota: Al concatenar arrays o valores no se modificarán los originales. Además, las operaciones en el nuevo array (excepto las operaciones en elementos que son referencias a objetos) no tendrán efecto en el array original, y viceversa.

+
+ +

Ejemplos

+ +

Concatenando dos arrays

+ +

En el siguiente código se concatenan dos arrays:

+ +
const letters = ['a', 'b', 'c'];
+const numbers = [1, 2, 3];
+
+letters.concat(numbers);
+// result in ['a', 'b', 'c', 1, 2, 3]
+
+ +

Concatenando tres arrays

+ +

En el siguiente código se concatenan tres arrays:

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

Concatenando valores a un array

+ +

En el siguiente código se concatenan tres valores a un array:

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

Concatenando arrays anidados

+ +

En el siguiente código concatena arrays anidados y demuestra retención de referencias:

+ +
var num1 = [[1]];
+var num2 = [2, [3]];
+
+var nums = num1.concat(num2);
+
+console.log(nums);
+// Da como resultado: [[1], 2, [3]]
+
+// modifica el primer elemento de num1
+num1[0].push(4);
+
+console.log(nums);
+// Da como resultado: [[1, 4], 2, [3]]
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-array.prototype.concat', 'Array.prototype.concat')}}
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.concat")}}

+
+ +
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/copywithin/index.html b/files/es/web/javascript/reference/global_objects/array/copywithin/index.html new file mode 100644 index 0000000000..e28b99c382 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/copywithin/index.html @@ -0,0 +1,165 @@ +--- +title: Array.prototype.copyWithin() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/copyWithin +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Prototipo + - Referencia + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/copyWithin +--- +
{{JSRef}}
+ +

El método copyWithin() transfiere una copia  plana de una sección a otra dentro del mismo array ( o contexto similar ), sin modificar su propiedad length y lo devuelve.

+ +

{{EmbedInteractiveExample("pages/js/array-copywithin.html")}}

+ +

Sintaxis

+ +
arr.copyWithin(target)
+arr.copyWithin(target, start)
+arr.copyWithin(target, start, end)
+ +

Parámetros

+ +
+
target
+
Índice basado en cero que establece en dónde dentro de la secuencia original se insertará la secuencia copiada.  Si es negativo, target se contará desde el final. -1 es el último elemento, -2 el penúltimo, etc.
+
Si target es  igual o mayor que  arr.length, no se copiará nada. Si target es posicionado después de start, la secuencia copiada se recortará para que encaje con arr.length.
+
start {{optional_inline}}
+
Índice basado en cero a partir del cual comenzar la copia de elementos. Si es negativo, start comenzará a contarse desde el final.
+
Si start es omitido, copyWithin copiará desde el principio (por defecto es 0).
+
end {{optional_inline}}
+
Índice basado en cero hasta el cual se copiarán los elementos. copyWithin copiará hasta pero sin incluir el end. Si es negativo, end será contado desde el final.
+
Si end es omitido, copyWithin copiará hasta el final ( por defecto es arr.length ).
+
+ +

Valor de retorno

+ +

El array modificado.

+ +

Descripción

+ +

copyWithin es similar a la función memmove de C y C++  , siendo altamente eficiente para desplazar los datos en un {{jsxref("Array")}} o  {{jsxref("TypedArray")}}. La secuencia de datos es leída y escrita en una sola operación;  la escritura será correcta incluso en el caso de que la zona de lectura y el destino de escritura se solapen.

+ +

La función copyWithin es intencionadamente genérica, permitiendo que se aplique en contextos en los cuales this no sea necesariamente un objeto {{jsxref("Array")}}.

+ +

El método copyWithin es un método mutador. No altera la propiedad length de this, pero cambiará su contenido y creará nuevas propiedades si es necesario.

+ +

Ejemplos

+ +

En los siguientes ejemplos céntrate en los siguientes aspectos:

+ + + +
[1, 2, 3, 4, 5].copyWithin(-2);
+// [1, 2, 3, 1, 2]
+
+[1, 2, 3, 4, 5].copyWithin(0, 3);
+// [4, 5, 3, 4, 5]
+
+[1, 2, 3, 4, 5].copyWithin(0, 3, 4);
+// [4, 2, 3, 4, 5]
+
+[1, 2, 3, 4, 5].copyWithin(-2, -3, -1);
+// [1, 2, 3, 3, 4]
+
+ +

A continuación se aplica en el contexto de un objeto array-like:

+ + + +
[].copyWithin.call({length: 5, 3: 1}, 0, 3);
+// {0: 1, 3: 1, length: 5}
+
+
+ +

Lo que sigue ahora son las subclases tipadas de Array en ES6:

+ +
// Arrays tipados en ES6. Son subclases de Array
+var i32a = new Int32Array([1, 2, 3, 4, 5]);
+
+i32a.copyWithin(0, 2);
+// Int32Array [3, 4, 5, 4, 5]
+
+// En plataformas que todavía no siguen la norma ES6:
+[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
+// Int32Array [4, 2, 3, 4, 5]
+ +

Polyfill

+ +
if (!Array.prototype.copyWithin) {
+  Array.prototype.copyWithin =
+  // Array: Number[, Number[, Number]]
+  function copyWithin(target, start, stop) {
+    var positiveT = target >= 0,
+        positiveS = (start = start | 0) >= 0,
+        length    = this.length,
+        zero      = 0,
+        r         = function() {return ((+new Date) * Math.random()).toString(36)},
+        delimiter = "\b" + r() + "-" + r() + "-" + r() + "\b",
+        hold;
+
+    stop = stop || this.length;
+    hold = this.slice.apply(this,
+      positiveT?
+        [start, stop]:
+      positiveS?
+        [start, -target]:
+      [start])
+    .join(delimiter);
+
+    return this.splice.apply(this,
+      positiveT?
+        [target, stop - start, hold]:
+      positiveS?
+        [target, stop, hold]:
+      [target, start, hold]),
+            this.join(delimiter).split(delimiter).slice(zero, length);
+  }
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-array.prototype.copyWithin', 'Array.prototype.copyWithin')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-array.prototype.copyWithin', 'Array.prototype.copyWithin')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.copyWithin")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/entries/index.html b/files/es/web/javascript/reference/global_objects/array/entries/index.html new file mode 100644 index 0000000000..89fef6475f --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/entries/index.html @@ -0,0 +1,86 @@ +--- +title: Array.prototype.entries() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/entries +tags: + - Array + - ECMAScript 2015 + - Iterador + - Iterator + - JavaScript + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/entries +--- +
{{JSRef}}
+ +
El método entries() retorna un nuevo objeto Array Iterator que contiene los pares clave/valor para cada índice de la matriz.
+ +
 
+ +
+

{{EmbedInteractiveExample("pages/js/array-entries.html")}}

+
+ +

Sintaxis

+ +
arr.entries()
+ +

Valor de retorno

+ +

Un nuevo objeto iterador {{jsxref("Array")}}.

+ +

Ejemplos

+ +

Usando un bucle for…of 

+ +
var a = ['a', 'b', 'c'];
+var iterator = a.entries();
+
+for (let e of iterator) {
+  console.log(e);
+}
+// [0, 'a']
+// [1, 'b']
+// [2, 'c']
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES6', '#sec-array.prototype.entries', 'Array.prototype.entries')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-array.prototype.entries', 'Array.prototype.entries')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.entries")}}

+
+ +
 
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/every/index.html b/files/es/web/javascript/reference/global_objects/array/every/index.html new file mode 100644 index 0000000000..540ebbdfa9 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/every/index.html @@ -0,0 +1,195 @@ +--- +title: Array.prototype.every() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/every +tags: + - Arreglo + - ECMAScript 5 + - JavaScript + - Prototipo + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/every +--- +
{{JSRef}}
+ +

Determina si todos los elementos en el array satisfacen una condición.

+ +
+

Precaución: ¡Llamar este método en un array vacío devuelve true para cualquier condición!

+
+ +
{{EmbedInteractiveExample("pages/js/array-every.html")}}
+ + + +

Sintaxis

+ +
arr.every(callback(element[, index[, array]])[, thisArg])
+ +

Parámetros

+ +
+
callback
+
Una función para probar cada elemento; recibe tres argumentos: +
+
currentValue (required)
+
El elemento actual del arreglo que está siendo procesado.
+
index {{Optional_inline}}
+
El índice del elemento actual del arreglo que está siendo procesado.
+
array {{Optional_inline}}
+
El arreglo sobre el cual fue llamado every.
+
+
+
thisArg {{Optional_inline}}
+
Valor por usar como this cuando se ejecute callback.
+
+ +

Valor de retorno

+ +

true si la función de devolución de llamada devuelve un valor de {{Glossary("truthy")}} para cada elemento de matriz; de lo contrario, false.

+ +

Descripción

+ +

El método every ejecuta la función callback dada una vez por cada elemento presente en el arreglo hasta encontrar uno que haga retornar un valor falso a callback (un valor que resulte falso cuando se convierta a booleano).  Si no se encuentra tal elemento, el método every de inmediato retorna  false. O si  callback retorna verdadero para todos los elementos, every retornará true. callback es llamada sólo para índices del arreglo que tengan valores asignados; no se llama para índices que hayan sido eliminados o a los que no se les haya asignado un valor.

+ +

callback es llamada con tres argumetos: el valor del elemento, el índice del elemento y el objeto Array que está siendo recorrido.

+ +

Si se proporciona un parámetro thisArg a every, será pasado a la función callback cuando sea llamada, usándolo como valor this. En otro caso, se pasará el valor undefined para que sea usado como valor this.  El valor this observable por parte de  callback se determina de acuerdo a las normas usuales para determinar el this visto por una función.

+ +

every no modifica el arreglo sobre el cual es llamado.

+ +

El intervalo de elementos procesados por every se establece antes de la primera llamada a callback.  Los elementos que se agreguen al arreglo después de que la función every comience no serán vistos por la función callback.  Si se modifican elementos existentes en el arreglo, su valor cuando sea pasado a callback será el valor que tengan cuando sean visitados; los elementos que se eliminen no serán visitados.

+ +

every opera como el cuantificador "para todo" en matemáticas. En particular con el arreglo vacío retorna true. (es una verdad vacua que todos los elementos del conjunto vacío satisfacen una condición dada.)

+ +

Ejemplos

+ +

Probando el tamaño de todos los elementos de un arreglo

+ +

El siguiente ejemplo prueba si todos los elementos de un arreglo son mayores que 10.

+ +
function esSuficientementeGrande(elemento, indice, arrreglo) {
+  return elemento >= 10;
+}
+[12, 5, 8, 130, 44].every(esSuficientementeGrande);   // false
+[12, 54, 18, 130, 44].every(esSuficientementeGrande); // true
+
+ +

Usar funciones flecha

+ +

Las funciones flecha proveen una sintaxis más corta para la misma prueba.

+ +
[12, 5, 8, 130, 44].every(elem => elem >= 10); // false
+[12, 54, 18, 130, 44].every(elem => elem >= 10); // true
+ +

Polyfill

+ +

every fue añadida a la norma ECMA-262 en la 5ta edición; por lo que podría no estar presente en otras implementaciones de la norma.  Puede sobrellevarlo insertando el siguiente código al comienzo de su programa,  permitiendo el uso de every  en implementación que no lo soporten de manera nativa. Este algoritmo es exactamente el especificado en ECMA-262, 5ta edición, suponiendo que  Object y TypeError tienen sus valores originales y que  callbackfn.call evalua al valor original de {{jsxref("Function.prototype.call")}}

+ +
if (!Array.prototype.every) {
+  Array.prototype.every = function(callbackfn, thisArg) {
+    'use strict';
+    var T, k;
+
+    if (this == null) {
+      throw new TypeError('this 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') {
+      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) {
+
+        // 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 and argument list
+        //     containing kValue, k, and O.
+        var testResult = callbackfn.call(T, kValue, k, O);
+
+        // iii. If ToBoolean(testResult) is false, return false.
+        if (!testResult) {
+          return false;
+        }
+      }
+      k++;
+    }
+    return true;
+  };
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.4.4.16', 'Array.prototype.every')}}{{Spec2('ES5.1')}}Initial definition. Implemented in JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.every', 'Array.prototype.every')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.every', 'Array.prototype.every')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.every")}}

+
+ +
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/fill/index.html b/files/es/web/javascript/reference/global_objects/array/fill/index.html new file mode 100644 index 0000000000..7113df34bd --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/fill/index.html @@ -0,0 +1,145 @@ +--- +title: Array.prototype.fill() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/fill +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Prototipo + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/fill +--- +
{{JSRef}}
+ +

El método fill() cambia todos los elementos en un arreglo por un valor estático, desde el índice start (por defecto 0) hasta el índice end (por defecto array.length). Devuelve el arreglo modificado.

+ +

{{EmbedInteractiveExample("pages/js/array-fill.html")}}

+ +

Sintaxis

+ +
arr.fill(value[, start = 0[, end = this.length]])
+ +

Parámetros

+ +
+
value
+
Valor con el que se va a rellenar el arreglo. (Nótese que todos los elementos en el arreglo tendrán este mismo valor).
+
start {{optional_inline}}
+
Índice inicial, por defecto 0.
+
end {{optional_inline}}
+
Índice final, por defecto this.length.
+
+ +

Valor de retorno

+ +

El arreglo modificado, rellenado con valor.

+ +

Descripción

+ + + +

Ejemplos

+ +
[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}
+
+// Objects by reference.
+var arr = Array(3).fill({}) // [{}, {}, {}];
+arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]
+ +

Polyfill

+ +
if (!Array.prototype.fill) {
+  Object.defineProperty(Array.prototype, 'fill', {
+    value: function(value) {
+
+      // Pasos 1-2.
+      if (this == null) {
+        throw new TypeError('esto es nulo o no definido');
+      }
+
+      var O = Object(this);
+
+      // Pasos 3-5.
+      var len = O.length >>> 0;
+
+      // Pasos 6-7.
+      var start = arguments[1];
+      var relativeStart = start >> 0;
+
+      // Paso 8.
+      var k = relativeStart < 0 ?
+        Math.max(len + relativeStart, 0) :
+        Math.min(relativeStart, len);
+
+      // Pasos 9-10.
+      var end = arguments[2];
+      var relativeEnd = end === undefined ?
+        len : end >> 0;
+
+      // Paso 11.
+      var final = relativeEnd < 0 ?
+        Math.max(len + relativeEnd, 0) :
+        Math.min(relativeEnd, len);
+
+      // Paso 12.
+      while (k < final) {
+        O[k] = value;
+        k++;
+      }
+
+      // Paso 13.
+      return O;
+    }
+  });
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-array.prototype.fill', 'Array.prototype.fill')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-array.prototype.fill', 'Array.prototype.fill')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.fill")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/filter/index.html b/files/es/web/javascript/reference/global_objects/array/filter/index.html new file mode 100644 index 0000000000..98e6843c4f --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/filter/index.html @@ -0,0 +1,231 @@ +--- +title: Array.prototype.filter() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/filter +tags: + - Array + - ECMAScript 5 + - JavaScript + - Prototipo + - Referencia + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/filter +--- +
{{JSRef}}
+ +

El método filter() crea un nuevo array con todos los elementos que cumplan la condición implementada por la función dada.

+ +

{{EmbedInteractiveExample("pages/js/array-filter.html")}}

+ +

Sintaxis

+ +
var newArray = arr.filter(callback(currentValue[, index[, array]])[, thisArg])
+ +

Parámetros

+ +
+
callback
+
Función que comprueba cada elemento del array para ver si cumple la condición (también llamada predicado).  Retorna true si el elemento la cumple o en caso contrario retornará false. Acepta tres parámetros:
+
+
+
currentValue
+
El elemento actual del array que está siendo procesado.
+
index {{optional_inline}}
+
El índice del elemento actual del array que está siendo procesado.
+
array {{optional_inline}}
+
El array sobre el que se ha llamado filter.
+
+
+
thisArg {{optional_inline}}
+
Opcional. Valor a utilizar como this cuando se ejecuta callback.
+
+ +

Valor devuelto

+ +

Un nuevo array con los elementos que cumplen la condición. Si ningún elemento cumple la condición, se devolverá un array vacío.

+ +

Descripción

+ +

filter() llama a la función callback  sobre cada elemento del array, y construye un nuevo array con todos los valores para los cuales  callback devuelve un valor verdadero. callback es invocada sólo para índices del array que tengan un valor asignado. No se invoca sobre índices que hayan sido borrados o a los que no se les haya asignado algún valor. Los elementos del array que no cumplan la condición callback  simplemente los salta, y no son incluidos en el nuevo array.

+ +

callback se invoca con tres argumentos:

+ +
    +
  1. El valor de cada elemento
  2. +
  3. El índice del elemento
  4. +
  5. El objeto Array que se está recorriendo
  6. +
+ +

Si se proporciona un parámetro thisArg a filter(), este será pasado a callback cuando sea invocado, para usarlo como valor this.  De lo contrario, se pasará el valor undefined como valor this.  El valor this dentro del callback se determina conforme a las las normas habituales para determinar el this visto por una función.

+ +

filter() no hace mutar el array sobre el cual es llamado.

+ +

El rango de elementos procesados por filter() se establece antes de la primera invocación de  callback. Los elementos que se añadan al array después de que comience la llamada a filter() no serán visitados por callback. Si se modifica o elimina un elemento existente del array, cuando pase su valor a callback será el que tenga cuando filter() lo recorra; los elementos que son eliminados no son recorridos.

+ +

Ejemplos

+ +

Filtrando todos los valores pequeños

+ +

El siguiente ejemplo usa filter() para crear un array filtrado que excluye todos los elementos con valores inferiores a 10.

+ +
function esSuficientementeGrande(elemento) {
+  return elemento >= 10;
+}
+var filtrados = [12, 5, 8, 130, 44].filter(esSuficientementeGrande);
+// filtrados es [12, 130, 44]
+
+ +

Filtrando entradas inválidas desde un JSON

+ +

El siguiente ejemplo emplea filter() para crear un json filtrado con todos lo elementos que tengan id numérico distinto de cero.

+ +
var arr = [
+  { id: 15 },
+  { id: -1 },
+  { id: 0 },
+  { id: 3 },
+  { id: 12.2 },
+  { },
+  { id: null },
+  { id: NaN },
+  { id: 'undefined' }
+];
+
+var entradasInvalidas = 0;
+// Si el elemento tiene un atributo id, y su valor correspondiente es un numero
+// Y no es el valor NaN, entonces es una entrada válida
+function filtrarPorID(obj) {
+  if ('id' in obj && typeof(obj.id) === 'number' && !isNaN(obj.id)) {
+    return true;
+  } else {
+    entradasInvalidas++;
+    return false;
+  }
+}
+
+var arrPorID = arr.filter(filtrarPorID);
+
+console.log('Array Filtrado\n', arrPorID);
+// [{ id: 15 }, { id: -1 }, { id: 0 }, { id: 3 }, { id: 12.2 }]
+
+console.log('Número de Entradas Invalidas = ', entradasInvalidas);
+// 4
+ +

Búsqueda en el arreglo

+ +

El siguiente ejemplo emplea filter() para filtrar el contendio de un arreglo en función de un criterio de búsqueda.

+ +
var fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];
+
+/**
+ * Filtra la matríz en función de un criterio de búsqueda (query)
+ */
+function filterItems(query) {
+  return fruits.filter(function(el) {
+      return el.toLowerCase().indexOf(query.toLowerCase()) > -1;
+  })
+}
+
+console.log(filterItems('ap')); // ['apple', 'grapes']
+console.log(filterItems('an')); // ['banana', 'mango', 'orange']
+ +

Implementación en ES2015

+ +
const fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];
+
+/**
+ * Filtra la matríz en función de un criterio de búsqueda (query)
+ */
+const filterItems = query => {
+  return fruits.filter((el) =>
+    el.toLowerCase().indexOf(query.toLowerCase()) > -1
+  );
+}
+
+console.log(filterItems('ap')); // ['apple', 'grapes']
+console.log(filterItems('an')); // ['banana', 'mango', 'orange']
+ +

Polyfill

+ +

filter() se añadió a la norma ECMA-262 en la 5ta edición; como tal puede no estar presente en todas las implementaciones de la norma. Puedes sobrellevarlo insertando el siguiente código al comienzo de su programa, para permitir el uso de filter() en implementaciones de ECMA-262 que no lo soporten de forma nativa. Este algoritmo es exactamente el especificado en ECMA-262, 5ta edición, supone que  fn.call evalua al valor original de {{jsxref("Function.prototype.call")}}, y que {{jsxref("Array.prototype.push")}} tiene su valor original.

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

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.4.4.20', 'Array.prototype.filter')}}{{Spec2('ES5.1')}}Definición Inicial. Implementado en JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.filter', 'Array.prototype.filter')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.filter', 'Array.prototype.filter')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.filter")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/find/index.html b/files/es/web/javascript/reference/global_objects/array/find/index.html new file mode 100644 index 0000000000..7de7850cca --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/find/index.html @@ -0,0 +1,233 @@ +--- +title: Array.prototype.find() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/find +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Prototipo + - Referencia + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/find +--- +
{{JSRef}}
+ +

El método find() devuelve el valor del primer elemento del array que cumple la función de prueba proporcionada.

+ +
{{EmbedInteractiveExample("pages/js/array-find.html","shorter")}}
+ + + + + +

Sintaxis

+ +
arr.find(callback(element[, index[, array]])[, thisArg])
+ +

Parámetros

+ +
+
callback
+
Función que se ejecuta sobre cada valor en el array, tomando tres argumentos: +
+
element
+
El elemento actual que se está procesando en el array.
+
index {{optional_inline}}
+
El índice (posición) del elemento actual que se está procesando en el array.
+
array {{optional_inline}}
+
El array desde el que se llama al método find.
+
+
+
thisArg {{optional_inline}}
+
Objeto a usar como this cuando se ejecuta callback.
+
+ +

Valor devuelto

+ +

El valor del primer elemento del array que cumple la función de prueba proporcionada; de lo contrario, devuelve {{jsxref("undefined")}}.

+ +

Descripción

+ +

El método find ejecuta la función callback una vez por cada índice del array hasta que encuentre uno en el que el callback devuelva un valor verdadero. Si es así, find devuelve inmediatamente el valor del elemento. En caso contrario, find devuelve {{jsxref("undefined")}}.

+ +

callback se invoca con tres argumentos: el valor del elemento, el índice del elemento y el objeto Array que está siendo recorrido.

+ +

Si un parámetro thisArg es proporcionado al método find, este será utilizado como this para cada invocación del callback. Si no se proporciona el parámetro, entonces se utiliza {{jsxref("undefined")}}.

+ +

El método find no transforma el array desde el cual es llamado, pero la función proporcionada en callback sí. En ese caso, los elementos procesados por find son establecidos antes de la primera invocación de callback. Por lo tanto:

+ + + +

Ejemplos

+ +

Encontrar un objeto en un array por una de sus propiedades

+ +
const inventario = [
+    {nombre: 'manzanas', cantidad: 2},
+    {nombre: 'bananas', cantidad: 0},
+    {nombre: 'cerezas', cantidad: 5}
+];
+
+function esCereza(fruta) {
+    return fruta.nombre === 'cerezas';
+}
+
+console.log(inventario.find(esCereza));
+// { nombre: 'cerezas', cantidad: 5 }
+ +

Utilizando funciones flecha y destructuring

+ +
const inventario = [
+    {nombre: 'manzanas', cantidad: 2},
+    {nombre: 'bananas', cantidad: 0},
+    {nombre: 'cerezas', cantidad: 5}
+];
+
+const resultado = inventario.find( fruta => fruta.nombre === 'cerezas' );
+
+console.log(resultado); // { nombre: 'cerezas', cantidad: 5 }
+ +

Encontrar un número primo en un array

+ +

El siguiente ejemplo encuentra un elemento en un array que sea un número primo (o devuelve {{jsxref("undefined")}} si no hay un número primo).

+ +
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, no encontrado
+console.log([4, 5, 8, 12].find(isPrime)); // 5
+
+ +

Los siguientes ejemplos muestran cómo elementos no existentes o eliminados son visitados y el valor pasado a callback es su valor cuando son visitados.

+ +
// Declarar un array sin elementos en los índices 2, 3 y 4
+const array = [0,1,,,,5,6];
+
+// Muestra todos los índices, no sólo aquellos que tienen valores asignados
+array.find(function(value, index) {
+  console.log('Visited index ' + index + ' with value ' + value);
+});
+
+// Mostrar todos los índices, incluyendo los eliminados
+array.find(function(value, index) {
+
+  // Eliminar el elemento 5 en la primera iteración
+  if (index == 0) {
+    console.log('Deleting array[5] with value ' + array[5]);
+    delete array[5];
+  }
+  // El elemento 5 se visita aun habiendo sido eliminado
+  console.log('Visited index ' + index + ' with value ' + value);
+});
+// expected output:
+// 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
+
+ +

Polyfill

+ +

Este método ha sido añadido a la espeficicación ECMAScript 2015 y puede no estar disponible en todas las implementaciones de JavaScript aún. Sin embargo, puedes utilizar el siguiente polyfill de 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 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 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
+  });
+}
+
+ +

Si necesitas dar soporte a motores de JavaScript realmente obsoletos que no soportan Object.defineProperty, es mejor no utilizar el polyfill para los métodos Array.prototype, ya que no podrás hacerlos no enumerables.

+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-array.prototype.find', 'Array.prototype.find')}}
+ +

Compatibilidad en navegadores

+ +
+

{{Compat("javascript.builtins.Array.find")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/findindex/index.html b/files/es/web/javascript/reference/global_objects/array/findindex/index.html new file mode 100644 index 0000000000..c249a3b2df --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/findindex/index.html @@ -0,0 +1,187 @@ +--- +title: Array.prototype.findIndex() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/findIndex +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Protitipo + - Referencia + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/findIndex +--- +
{{JSRef}}
+ +

El método findIndex() devuelve el índice del primer elemento de un array que cumpla con la función de prueba proporcionada. En caso contrario devuelve -1.

+ +
{{EmbedInteractiveExample("pages/js/array-findindex.html","shorter")}}
+ +

Vea también el método {{jsxref("Array.find", "find()")}}, que devuelve el valor de un elemento encontrado en el array en lugar de su índice.

+ +

Sintaxis

+ +
arr.findIndex(callback( element[, index[, array]] )[, thisArg])
+
+ +

Parámetros

+ +
+
callback
+
+

Función a ejecutar en cada uno de los valores del array hasta que devuelve true, indicando que el elemento que la cumple fue encontrado.

+ +

Recibe tres argumentos:

+ +
+
element
+
El elemento actual siendo procesado en el array.
+
index {{optional_inline}}
+
El índice del elemento actual que está siendo procesado en el array.
+
array {{optional_inline}}
+
El array findIndex() de donde fue llamado.
+
+
+
thisArg {{optional_inline}}
+
Objeto opcional para usar como this cuando se ejecuta el callback.
+
+ +

Valor devuelto

+ +

Un índice en el array si un elemento pasa la prueba; en caso contrario, -1.

+ +

Descripción

+ +

El método findIndex() ejecuta la función de callback una vez por cada índice del array hasta que encuentre uno donde callback devuelva un valor verdadero (eso es, un valor que fuerza un true).

+ +

Si dicho elemento es encontrado, findIndex() inmediatamente devuelve el índice del elemento. Si la función callback nunca devuelve un valor verdadero (o el tamaño del array es 0), findIndex devuelve -1.

+ +
+

Alerta de Edge Case: A diferencia de otros métodos de arrays como {{jsxref("Array.some()")}}, callback se ejecuta incluso en índices sin valores asignados.

+
+ +

callback se invoca con tres argumentos:

+ +
    +
  1. El valor del elemento
  2. +
  3. El índice del elemento
  4. +
  5. El Array que será recorrido.
  6. +
+ +

Si el parámetro thisArg es provisto a findIndex, entonces será usado como el this para cada invocación del callback. Si no es provisto, entonces {{jsxref("undefined")}} será utilizado. 

+ +

El rango de elementos procesados por findIndex() se establece antes de la primera invocación de la función callback. Los elementos añadidos al array después de que la llamada a findIndex() comience no serán visitados por el callback. Si un elemento existente que no ha sido visitado en el array es modificado por el callback, el valor pasado al callback que lo visite será el valor en el momento en que findIndex() visite el índice del elemento.

+ +

Los elementos eliminados aún son visitados.

+ +

Ejemplos

+ +

Encontrar el índice de un número primo en un array

+ +

El siguiente ejemplo encuentra el índice de un elemento en el array que sea número primo (o devuelve -1 si no hay ningún número primo).

+ +
function isPrime(element, index, array) {
+  var start = 2;
+  while (start <= Math.sqrt(element)) {
+    if (element % start < 1) {
+      return false;
+    } else {
+      start++;
+    }
+  }
+  return element > 1;
+}
+
+console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, no encontrado
+console.log([4, 6, 7, 12].findIndex(isPrime)); // 2
+
+ +

Encontrar un índice utilizando funciones flecha

+ +

El siguiente ejemplo encuentra el índice de una fruta utilizando funciones flecha.

+ +
const fruits = ["apple", "banana", "cantaloupe", "blueberries", "grapefruit"];
+
+const index = fruits.findIndex(fruit => fruit === "blueberries");
+
+console.log(index); // 3
+console.log(fruits[index]); // blueberries
+
+ +

Polyfill

+ +
// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
+if (!Array.prototype.findIndex) {
+  Object.defineProperty(Array.prototype, 'findIndex', {
+    value: function(predicate) {
+     // 1. Let O be ? ToObject(this value).
+      if (this == null) {
+        throw new TypeError('"this" is null or not defined');
+      }
+
+      var o = Object(this);
+
+      // 2. Let len be ? ToLength(? Get(O, "length")).
+      var len = o.length >>> 0;
+
+      // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+      if (typeof predicate !== 'function') {
+        throw new TypeError('predicate must be a function');
+      }
+
+      // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+      var thisArg = arguments[1];
+
+      // 5. Let k be 0.
+      var k = 0;
+
+      // 6. Repeat, while k < len
+      while (k < len) {
+        // a. Let Pk be ! ToString(k).
+        // b. Let kValue be ? Get(O, Pk).
+        // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+        // d. If testResult is true, return k.
+        var kValue = o[k];
+        if (predicate.call(thisArg, kValue, k, o)) {
+          return k;
+        }
+        // e. Increase k by 1.
+        k++;
+      }
+
+      // 7. Return -1.
+      return -1;
+    },
+    configurable: true,
+    writable: true
+  });
+}
+
+ +

Si necesita soporte para motores de JavaScript obsoletos que no soportan Object.defineProperty es mejor no emplear polyfills para métodos Array.prototype, ya que no puede hacerlos no-enumerables.

+ +

Especificaciones

+ + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-array.prototype.findindex', 'Array.prototype.findIndex')}}
+ +

Compatibilidad en navegadores

+ +
+

{{Compat("javascript.builtins.Array.findIndex")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/flat/index.html b/files/es/web/javascript/reference/global_objects/array/flat/index.html new file mode 100644 index 0000000000..67d1b3a4c7 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/flat/index.html @@ -0,0 +1,174 @@ +--- +title: Array.prototype.flat() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/flat +tags: + - Array + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/flat +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

El método flat() crea una nueva matriz con todos los elementos de sub-array concatenados recursivamente hasta la profundidad especificada.

+ + + + + +

Sintaxis

+ +
var newArray = arr.flat([depth]);
+ +

Parámetros

+ +
+
depth {{optional_inline}}
+
El nivel de profundidad que especifica qué tan profunda debe aplanarse una estructura de matriz anidada. El valor predeterminado es 1.
+
+ +

Valor de retorno

+ +

Una nueva matriz con los elementos de la sub-matriz concatenados en ella.

+ +

Ejemplos

+ +

Aplanar matrices anidadas

+ +
var arr1 = [1, 2, [3, 4]];
+arr1.flat();
+// [1, 2, 3, 4]
+
+var arr2 = [1, 2, [3, 4, [5, 6]]];
+arr2.flat();
+// [1, 2, 3, 4, [5, 6]]
+
+var arr3 = [1, 2, [3, 4, [5, 6]]];
+arr3.flat(2);
+// [1, 2, 3, 4, 5, 6]
+
+ +

Aplanamiento y huecos de matriz

+ +

El método de aplanar elimina las ranuras vacías en las matrices:

+ +
var arr4 = [1, 2, , 4, 5];
+arr4.flat();
+// [1, 2, 4, 5]
+
+ +

Alternativa

+ +

reduce y concat

+ +
var arr1 = [1, 2, [3, 4]];
+arr1.flat();
+
+//aplanar una matriz de nivel único
+arr1.reduce((acc, val) => acc.concat(val), []);// [1, 2, 3, 4]
+
+//o
+const flatSingle = arr => [].concat(...arr);
+
+ +

 

+ +
//para permitir el aplanamiento a nivel profundo use recursión con reduce y concat
+var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
+
+function flattenDeep(arr1) {
+   return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []);
+}
+flattenDeep(arr1); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
+
+ +

 

+ +
//aplanamiento profundo no recursivo usando un stack
+var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
+function flatten(input) {
+  const stack = [...input];
+  const res = [];
+  while (stack.length) {
+    // elimina ultimo valor del stack
+    const next = stack.pop();
+    if (Array.isArray(next)) {
+      // agrega de nuevo los items al array, sin modificar la entrada original
+      stack.push(...next);
+    } else {
+      res.push(next);
+    }
+  }
+  //invierte para restaurar el orden de entrada
+  return res.reverse();
+}
+flatten(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
+ +

 

+ +
//Aplanamiento profundo recursivo
+function flatten(array) {
+  var flattend = [];
+  !(function flat(array) {
+    array.forEach(function(el) {
+      if (Array.isArray(el)) flat(el);
+      else flattend.push(el);
+    });
+  })(array);
+  return flattend;
+}
+ +

 

+ +

Polyfill

+ +
if (!Array.prototype.flat) {
+  Array.prototype.flat = function(depth) {
+    var flattend = [];
+    (function flat(array, depth) {
+      for (let el of array) {
+        if (Array.isArray(el) && depth > 0) {
+          flat(el, depth - 1);
+        } else {
+          flattend.push(el);
+        }
+      }
+    })(this, Math.floor(depth) || 1);
+    return flattend;
+  };
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
Array.prototype.flat proposalFinalizado (4) 
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.flat")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/flatmap/index.html b/files/es/web/javascript/reference/global_objects/array/flatmap/index.html new file mode 100644 index 0000000000..0a93f97675 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/flatmap/index.html @@ -0,0 +1,128 @@ +--- +title: Array.prototype.flatMap() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/flatMap +tags: + - Array + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/flatMap +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

El método flatMap() primero mapea cada elemento usando una función de mapeo, luego aplana el resultado en una nueva matriz. Es idéntico a un map seguido de un flatten de profundidad 1, pero flatMap es a menudo útil y la fusión de ambos en un método es ligeramente más eficiente.

+ + + + + +

Sintaxis

+ +
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
+    // return element for new_array
+}[, thisArg])
+ +

Parámetros

+ +
+
callback
+
Función que produce un elemento de la nueva matriz, tomando tres argumentos: +
+
+
currentValue
+
El elemento actual que se procesa en la matriz.
+
index{{optional_inline}}
+
El índice del elemento actual que se procesa en la matriz.
+
array{{optional_inline}}
+
La matriz map fue llamada.
+
+
+
thisArg{{optional_inline}}
+
Valor para usar como this al ejecutar callback.
+
+ +

Valor de retorno

+ +

Una nueva matriz con cada elemento es el resultado de la función de devolución de llamada y se aplana a una profundidad de 1.

+ +

Descripción

+ +

Ver {{jsxref("Array.prototype.map()")}} para una descripción detallada de la función de devolución de llamada. El método flatMap es idéntico a map seguido de una llamada a flatten de profundidad 1.

+ +

Ejemplos

+ +

map y flatMap

+ +
var arr1 = [1, 2, 3, 4];
+
+arr1.map(x => [x * 2]);
+// [[2], [4], [6], [8]]
+
+arr1.flatMap(x => [x * 2]);
+// [2, 4, 6, 8]
+
+// solo un nivel es aplanado
+arr1.flatMap(x => [[x * 2]]);
+// [[2], [4], [6], [8]]
+
+ +
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
+ +

Alternativa

+ +

reduce y concat

+ +
var arr1 = [1, 2, 3, 4];
+
+arr1.flatMap(x => [x * 2]);
+// es equivalente a
+arr1.reduce((acc, x) => acc.concat([x * 2]), []);
+// [2, 4, 6, 8]
+
+ +
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
+ +

Polyfill

+ +

Este polyfill necesita Array.prototype.flat polyfill

+ +
if (!Array.prototype.flatMap) {
+  Array.prototype.flatMap = function() {
+    return Array.prototype.map.apply(this, arguments).flat(1);
+  };
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
Array.prototype.flatMap Finalizado (4)
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.flatMap")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/foreach/index.html b/files/es/web/javascript/reference/global_objects/array/foreach/index.html new file mode 100644 index 0000000000..bc6b693176 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/foreach/index.html @@ -0,0 +1,257 @@ +--- +title: Array.prototype.forEach() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/forEach +tags: + - Array + - ECMAScript5 + - JavaScript + - JavaScript 1.6 + - Method + - Prototype + - Referencia + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/forEach +--- +
{{JSRef}}
+ +

El método forEach() ejecuta la función indicada una vez por cada elemento del array.

+ +

{{EmbedInteractiveExample("pages/js/array-foreach.html")}}

+ +

Sintaxis

+ +
arr.forEach(function callback(currentValue, index, array) {
+    // tu iterador
+}[, thisArg]);
+ +

Parámetros

+ +
+
callback
+
Función a ejecutar por cada elemento, que recibe tres argumentos:
+
+
+
currentValue
+
El elemento actual siendo procesado en el array.
+
index {{optional_inline}}
+
El índice del elemento actual siendo procesado en el array.
+
array {{optional_inline}}
+
El vector en el que forEach() esta siendo aplicado.
+
+
+
thisArg {{optional_inline}}
+
Valor que se usará como this cuando se ejecute el callback.
+
+ +

Valor de retorno

+ +

{{jsxref("undefined")}}.

+ +

Descripción

+ +

forEach() ejecuta la función callback una vez por cada elemento presente en el array en orden ascendente. No es invocada para índices que han sido eliminados o que no hayan sido inicializados (Ej. sobre arrays sparse)

+ +

callback es invocada con tres argumentos:

+ +
    +
  1. el valor del elemento
  2. +
  3. el índice del elemento
  4. +
  5. el array que está siendo recorrido
  6. +
+ +

Si un parámetro thisArg es proporcionado a forEach, será usado como el valor this para cada invocación de callback como si se llamara a callback.call(thisArg, element, index, array). Si thisArg es undefined o null, el valor this dentro de la función depende si la función está o no en modo estricto (valor pasado si está en modo estricto, objeto global si está en modo no-estricto).

+ +

El rango de elementos procesados por forEach() se establece antes de la primera invocación del callback. Los elementos que sean añadidos al vector después de que inicie la llamada a forEach no serán visitados por callback. Si los valores de los elementos existentes en el vector son modificados, el valor pasado al callback será el valor al momento de que forEach los visite; no se evaluarán los elementos borrados antes de ser visitados por forEach.

+ +

forEach() ejecuta la función callback una vez por cada elemento del array; a diferencia de {{jsxref("Array.prototype.map()", "map()")}} o {{jsxref("Array.prototype.reduce()", "reduce()")}} este siempre devuelve el valor {{jsxref("undefined")}} y no es encadenable. El típico uso es ejecutar los efectos secundarios al final de la cadena.

+ +

foreach() no muta/modifica el array desde el que es llamado (aunque callback, si se invoca, podría hacerlo).

+ +
Nota : No hay forma de detener o cortar un bucle forEach que no sea lanzar una excepción. Si necesita dicho comportamiento, el método .forEach() es la herramienta equivocada, use una simple iteración en su lugar. Si está probando los elementos del array para un predicado y necesita devolver un valor boleano, puede usar {{jsxref("Array.prototype.every()", "every()")}} o {{jsxref("Array.prototype.some()", "some()")}} en su lugar.
+ +

Ejemplos

+ +

Imprimiendo el contenido de un array

+ +

El siguiente código imprime una línea por cada elemento en un array:

+ +
function logArrayElements(element, index, array) {
+    console.log("a[" + index + "] = " + element);
+}
+// Nótese que se evita el 2° índice ya que no hay ningún elemento en esa posición del array
+[2, 5, , 9].forEach(logArrayElements);
+// salida:
+// a[0] = 2
+// a[1] = 5
+// a[2] = 9
+
+ +

Usando thisArg

+ +

El siguiente ejemplo actualiza las propiedades del objeto por cada entrada en el array:

+ +
function Counter() {
+  this.sum = 0;
+  this.count = 0;
+}
+Counter.prototype.add = function(array) {
+  array.forEach(function(entry) {
+    this.sum += entry;
+    ++this.count;
+  }, this);
+  // ^---- Note
+};
+
+var obj = new Counter();
+obj.add([2, 5, 9]);
+obj.count
+// 3
+obj.sum
+// 16
+ +

Nota: Dado que el parámetro thisArg (this) se referencia en el forEach(), será pasado al callback cuando se invoque, para utilizarse como su valor this.

+ +

Ejemplo: Función que copia objetos

+ +

El siguiente código crea una copia de un objeto dado. Hay diferentes formas de crear una copia de un objeto, ésta es sólo una de ellas y sirve para explicar cómo funciona Array.prototype.forEach utilizando funciones Object.* de ECMAScript 5.

+ +
function copy(o){
+  var copy = Object.create( Object.getPrototypeOf(o) );
+  var propNames = Object.getOwnPropertyNames(o);
+
+  propNames.forEach(function(name){
+    var desc = Object.getOwnPropertyDescriptor(o, name);
+    Object.defineProperty(copy, name, desc);
+  });
+
+  return copy;
+}
+
+var o1 = {a:1, b:2};
+var o2 = copy(o1); // o2 ahora se parece a o1
+
+ +

Si el array se modifica durante la iteración, otros elementos pueden ser omitidos.

+ +

El siguiente ejemplo muestra por consola "uno", "dos", "cuatro". Cuando se alcanza el registro que contiene el valor "dos", el primer registro del array se desplaza, lo que hace que los registros restantes se muevan una posición. Debido a que el elemento "cuatro" está ahora en una posición anterior en el array, "tres" se omitirá. forEach() no hace una copia del array antes de iterar.

+ +
var words = ['uno', 'dos', 'tres', 'cuatro'];
+words.forEach(function(word) {
+  console.log(word);
+  if (word === 'dos') {
+    words.shift();
+  }
+});
+// uno
+// dos
+// cuatro
+
+ +

Polyfill

+ +

forEach se agregó de manera reciente al estándar ECMA-262; así que puede no estar presente en otras implementaciones del estándar. Se puede asegurar el uso del forEach con tan solo agregar el siguiente código al inicio de los scripts, permitiendo así el uso de forEach en implementaciones que no lo soportan de manera nativa. El algoritmo es el mismo que se especifica en la quinta versión de ECMA-262, asumiendo que {{jsxref("Object")}} y {{jsxref("TypeError")}} tienen sus valores originales y que callback.call evalúa el valor original de {{jsxref("Function.prototype.call()")}}.

+ +
// Production steps of ECMA-262, Edition 5, 15.4.4.18
+// Reference: http://es5.github.com/#x15.4.4.18
+if (!Array.prototype.forEach) {
+
+  Array.prototype.forEach = function forEach(callback, thisArg) {
+    'use strict';
+    var T, k;
+
+    if (this == null) {
+      throw new TypeError("this is null or not defined");
+    }
+
+    var kValue,
+        // 1. Let O be the result of calling ToObject passing the |this| value as the argument.
+        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).
+        len = O.length >>> 0; // Hack to convert O.length to a UInt32
+
+    // 4. If IsCallable(callback) is false, throw a TypeError exception.
+    // See: http://es5.github.com/#x9.11
+    if ({}.toString.call(callback) !== "[object 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 >= 2) {
+      T = thisArg;
+    }
+
+    // 6. Let k be 0
+    k = 0;
+
+    // 7. Repeat, while k < len
+    while (k < len) {
+
+      // 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
+  };
+}
+
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.4.4.18', 'Array.prototype.forEach')}}{{Spec2('ES5.1')}}Definición inicial. Implementada en JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.foreach', 'Array.prototype.forEach')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.foreach', 'Array.prototype.forEach')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
{{Compat("javascript.builtins.Array.forEach")}}
+ +
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/from/index.html b/files/es/web/javascript/reference/global_objects/array/from/index.html new file mode 100644 index 0000000000..a11d0ebd53 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/from/index.html @@ -0,0 +1,242 @@ +--- +title: Array.from() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/from +tags: + - ECMAScript 2015 + - JavaScript + - Referencia + - Vector + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/from +--- +
{{JSRef}}
+ +

El método Array.from() crea una nueva instancia de Array a partir de un objeto iterable.

+ +

{{EmbedInteractiveExample("pages/js/array-from.html")}}

+ +

Sintaxis

+ +
Array.from(arrayLike[, mapFn[, thisArg]])
+
+ +

Parámetros

+ +
+
arrayLike
+
Objeto iterable para convertirlo en un array.
+
mapFn{{Optional_inline}}
+
Función de mapa para llamar a cada elemento de la matriz.
+
thisArg{{Optional_inline}}
+
Valor para usar como this al ejecutar mapFn.
+
+ +

Valor de retorno

+ +

Una nueva instancia de {{jsxref("Array")}}.

+ +

Descripción

+ +

Array.from() permite crear Arrays de:

+ + + +

Array.from() tiene un parámetro opcional mapFn, que te permite ejecutar una función {{jsxref("Array.prototype.map", "map")}}  a cada elemento del array (o a la subclase del objeto) que se ha creado. Para aclararlo, Array.from(obj, mapFn, thisArg) es igual que Array.from(obj).map(mapFn, thisArg), excepto en que éste no crea un array intermedio. Esto es importante para ciertas subclases de array, vectores tipados, ya que el vector intermedio necesitaría tener valores truncados para trabajar con el tipo adecuado.

+ +

La propiedad length del método from() es 1.

+ +

En ES2015, la sintaxis de clase permite la subclasificación de clases integradas y definidas por el usuario; como resultado, los métodos estáticos como Array.from son "heredados" por subclases de Array y crean nuevas instancias de la subclase, no Array.

+ +

Ejemplos

+ +

Array desde un String

+ +
Array.from('foo');
+// [ "f", "o", "o" ]
+ +

Array desde un Set

+ +
const set = new Set(['foo', 'bar', 'baz', 'foo']);
+Array.from(set);
+// [ "foo", "bar", "baz" ]
+ +

Array desde un 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'];
+
+ +

Array desde un objeto Array-like (argumentos)

+ +
function f() {
+  return Array.from(arguments);
+}
+
+f(1, 2, 3);
+
+// [ 1, 2, 3 ]
+ +

Usando una función de flecha y Array.from

+ +
// Usando una función de flecha como función
+// para manipular los elementos
+Array.from([1, 2, 3], x => x + x);
+// [2, 4, 6]
+
+
+// Generar secuencia de números
+// Puesto que el array se inicializa con `undefined` en cada posición,
+// el valor de `v` a continuación será `undefined`
+Array.from({length: 5}, (v, i) => i);
+// [0, 1, 2, 3, 4]
+
+ +

Generador de secuencia (rango)

+ +
// Función generadora de secuencia (comúnmente llamado "rango", ej. Clojure, PHP, etc.)
+const range = (start, stop, step) => Array.from({ length: (stop - start) / step + 1}, (_, i) => start + (i * step));
+
+// Genera un rango de números entre 0..4
+range(0, 4, 1);
+// [0, 1, 2, 3, 4]
+
+// Genera un rango de números entre 1..10 con saltos de 2
+range(1, 10, 2);
+// [1, 3, 5, 7, 9]
+
+// Generar el abecedario utilizando Array.from haciendo uso de que se ordena como secuencia
+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"]
+
+ +

Polyfill

+ +

Array.from fue añadido en el estándar ECMA-262 en la 6ta edición (ES2015); así que no puede estar presente en otras implementaciones del estándar. Puedes usarlo insertando este código al comienzo de sus scripts, permitiendo el uso de Array.from en implementaciones que no lo soportan. Este algoritmo es el mismo especificado en ECMA-262, 6ta edición, suponiendo que Object y TypeError tengan sus valores originales y callback.call evalúa el valor original de {{jsxref("Function.prototype.call")}}. Adicionalmente, ya que verdaderos iterables pueden no ser polyficados, esta implementación no soporta iterables genéricos como definidos en la 6ta edición de ECMA-262.

+ +
// Pasos de producción de ECMA-262, Edición 6, 22.1.2.1
+// Referencia: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from
+if (!Array.from) {
+  Array.from = (function () {
+    var toStr = Object.prototype.toString;
+    var isCallable = function (fn) {
+      return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
+    };
+    var toInteger = function (value) {
+      var number = Number(value);
+      if (isNaN(number)) { return 0; }
+      if (number === 0 || !isFinite(number)) { return number; }
+      return (number > 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);
+    };
+
+    // La propiedad length del método from es 1.
+    return function from(arrayLike/*, mapFn, thisArg */) {
+      // 1. Deje a C ser el este valor.
+      var C = this;
+
+      // 2. Deje que los elementos sean ToObject(arrayLike).
+      var items = Object(arrayLike);
+
+      // 3. Retornar IfAbrupt(items).
+      if (arrayLike == null) {
+        throw new TypeError("Array.from requiere un objeto array-like - not null or undefined");
+      }
+
+      // 4. Si mapfn no está definida, entonces deja que sea false.
+      var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
+      var T;
+      if (typeof mapFn !== 'undefined') {
+        // 5. si no
+        // 5. a If IsCallable(mapfn) es false, lanza una excepción TypeError.
+        if (!isCallable(mapFn)) {
+          throw new TypeError('Array.from: si hay mapFn, el segundo argumento debe ser una función');
+        }
+
+        // 5. b. Si thisArg se suministró, deje que T sea thisArg; si no, deje que T esté indefinido.
+        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);
+
+      // 16. Let k be 0.
+      var k = 0;
+      // 17. Repeat, while k < len… (also steps a - h)
+      var kValue;
+      while (k < len) {
+        kValue = items[k];
+        if (mapFn) {
+          A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
+        } else {
+          A[k] = kValue;
+        }
+        k += 1;
+      }
+      // 18. Let putStatus be Put(A, "length", len, true).
+      A.length = len;
+      // 20. Return A.
+      return A;
+    };
+  }());
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-array.from', 'Array.from')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-array.from', 'Array.from')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.from")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/includes/index.html b/files/es/web/javascript/reference/global_objects/array/includes/index.html new file mode 100644 index 0000000000..3831c7d73d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/includes/index.html @@ -0,0 +1,181 @@ +--- +title: Array.prototype.includes() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/includes +tags: + - Array + - JavaScript + - Prototipo + - Referencia + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/includes +--- +
{{JSRef}}
+ +

El método includes() determina si una matriz incluye un determinado elemento, devuelve truefalse según corresponda.

+ +

{{EmbedInteractiveExample("pages/js/array-includes.html")}}

+ +

Sintaxis

+ +
arr.includes(searchElement[fromIndex])
+ +

Parámetros

+ +
+
valueToFind
+
+

El valor a buscar.

+ +
+

Nota: Al comparar cadenas de texto y caracteres, includes() distingue mayúsculas y minúsculas.

+
+
+
fromIndex {{optional_inline}}
+
Posición en la matriz en la cuál se debe comenzar a buscar valueToFind; el primer caracter a buscar se encuentra en fromIndex. Un valor negativo inicia la búsqueda desde array.length + fromIndex en adelante. El valor por defecto es 0.
+
+ +

Valor devuelto

+ +

Un {{jsxref ("Boolean")}} que es true si el valor valueToFind se encuentra dentro de la matriz (o la parte de la matriz indicada por el índice fromIndex, si se especifica). Todos los valores de cero se consideran iguales independientemente del signo (es decir, -0 se considera igual a 0 y +0), pero false no se considera igual a 0.

+ +
+

Note: Técnicamente hablando, include() usa el algoritmo sameValueZero para determinar si se encuentra el elemento dado

+
+ +

Ejemplos

+ +
[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 es mayor o igual que la longitud de la matriz

+ +

Si fromIndex es mayor o igual que la longitud de la matriz, se devuelve false. No se buscará en la matriz.

+ +
var arr = ['a', 'b', 'c'];
+
+arr.includes('c', 3);   // false
+arr.includes('c', 100); // false
+ +

El índice calculado es menor que 0

+ +

Si fromIndex es negativo, el índice calculado se calcula para usarse como una posición en la matriz en la cual comenzar a buscar searchElement. Si el índice calculado es menor que 0, se buscará la matriz completa.

+ +
// la longitud de la matriz es 3
+// fromIndex es -100
+// el índice calculado es 3 + (-100) = -97
+
+var arr = ['a', 'b', 'c'];
+
+arr.includes('a', -100); // true
+arr.includes('b', -100); // true
+arr.includes('c', -100); // true
+ +

includes() utilizado como método genérico

+ +

El método includes() es intencionalmente genérico. No requiere que este valor sea un objeto Array, por lo que se puede aplicar a otros tipos de objetos (por ejemplo, objetos tipo array). El siguiente ejemplo ilustra el método includes() llamado en el objeto de argumentos de la función.

+ +
(function() {
+  console.log([].includes.call(arguments, 'a')); // true
+  console.log([].includes.call(arguments, 'd')); // false
+})('a','b','c');
+ +

Polyfill

+ +
// https://tc39.github.io/ecma262/#sec-array.prototype.includes
+if (!Array.prototype.includes) {
+  Object.defineProperty(Array.prototype, 'includes', {
+    value: function(searchElement, fromIndex) {
+
+      if (this == null) {
+        throw new TypeError('"this" es null o no está definido');
+      }
+
+      // 1. Dejar que O sea ? ToObject(this value).
+      var o = Object(this);
+
+      // 2. Dejar que len sea ? ToLength(? Get(O, "length")).
+      var len = o.length >>> 0;
+
+      // 3. Si len es 0, devuelve false.
+      if (len === 0) {
+        return false;
+      }
+
+      // 4. Dejar que n sea ? ToInteger(fromIndex).
+      //    (Si fromIndex no está definido, este paso produce el valor 0.)
+      var n = fromIndex | 0;
+
+      // 5. Si n ≥ 0, entonces
+      //  a. Dejar que k sea n.
+      // 6. Else n < 0,
+      //  a. Dejar que k sea len + n.
+      //  b. Si k < 0, Dejar que k sea 0.
+      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+
+      function sameValueZero(x, y) {
+        return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
+      }
+
+      // 7. Repite, mientras k < len
+      while (k < len) {
+        // a. Dejar que elementK sea el resultado de ? Get(O, ! ToString(k)).
+        // b. Si SameValueZero(searchElement, elementK) es true, devuelve true.
+        if (sameValueZero(o[k], searchElement)) {
+          return true;
+        }
+        // c. Incrementa k por 1.
+        k++;
+      }
+
+      // 8. Devuelve false
+      return false;
+    }
+  });
+}
+ +

Si necesita admitir motores de JavaScript realmente obsoletos que no son compatibles con Object.defineProperty, es mejor no rellenar los métodos Array.prototype, ya que no puede hacerlos no enumerables.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES7', '#sec-array.prototype.includes', 'Array.prototype.includes')}}{{Spec2('ES7')}}Definición inicial.
{{SpecName('ESDraft', '#sec-array.prototype.includes', 'Array.prototype.includes')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.includes")}}

+
+ +
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/index.html b/files/es/web/javascript/reference/global_objects/array/index.html new file mode 100644 index 0000000000..45531c7a3e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/index.html @@ -0,0 +1,449 @@ +--- +title: Array +slug: Web/JavaScript/Referencia/Objetos_globales/Array +tags: + - Array + - JavaScript + - Matriz unidimensional + - Referencia + - Vector +translation_of: Web/JavaScript/Reference/Global_Objects/Array +--- +

{{JSRef}}
+ El objeto Array de JavaScript es un objeto global que es usado en la construcción de arrays, que son objetos tipo lista de alto nivel.

+ +

Descripción

+ +

Los arrays son objetos similares a una lista cuyo prototipo proporciona métodos para efectuar operaciones de recorrido y de mutación. Tanto la longitud como el tipo de los elementos de un array son variables. Dado que la longitud de un array puede cambiar en cualquier momento, y los datos se pueden almacenar en ubicaciones no contiguas, no hay garantía de que los arrays de JavaScript sean densos; esto depende de cómo el programador elija usarlos. En general estas características son cómodas, pero si, en su caso particular, no resultan deseables, puede considerar el uso de arrays con tipo.

+ +

Operaciones habituales

+ +

Crear un Array

+ +
let frutas = ["Manzana", "Banana"]
+
+console.log(frutas.length)
+// 2
+
+ +

Acceder a un elemento de Array mediante su índice

+ +
let primero = frutas[0]
+// Manzana
+
+let ultimo = frutas[frutas.length - 1]
+// Banana
+ +

Recorrer un Array

+ +
frutas.forEach(function(elemento, indice, array) {
+    console.log(elemento, indice);
+})
+// Manzana 0
+// Banana 1
+ +

Añadir un elemento al final de un Array

+ +
let nuevaLongitud = frutas.push('Naranja') // Añade "Naranja" al final
+// ["Manzana", "Banana", "Naranja"]
+ +

Eliminar el último elemento de un Array

+ +
let ultimo = frutas.pop() // Elimina "Naranja" del final
+// ["Manzana", "Banana"]
+ +

Añadir un elemento al principio de un Array

+ +
let nuevaLongitud = frutas.unshift('Fresa') // Añade "Fresa" al inicio
+// ["Fresa" ,"Manzana", "Banana"]
+
+ +

Eliminar el primer elemento de un Array

+ +
let primero = frutas.shift() // Elimina "Fresa" del inicio
+// ["Manzana", "Banana"]
+
+ +

Encontrar el índice de un elemento del Array

+ +
frutas.push('Fresa')
+// ["Manzana", "Banana", "Fresa"]
+
+let pos = frutas.indexOf('Banana') // (pos) es la posición para abreviar
+// 1
+ +

Eliminar un único elemento mediante su posición

+ +
+
  Ejemplo:
+
Eliminamos "Banana" del array pasándole dos parámetros: la posición del primer elemento que se elimina y el número de elementos que queremos eliminar. De esta forma, .splice(pos, 1) empieza en la posición que nos indica el valor de la variable pos y elimina 1 elemento. En este caso, como pos vale 1, elimina un elemento comenzando en la posición 1 del array, es decir "Banana".
+
+ +
let elementoEliminado = frutas.splice(pos, 1)
+// ["Manzana", "Fresa"]
+ +

Eliminar varios elementos a partir de una posición

+ +
+
  Nota:
+
Con .splice() no solo se puede eliminar elementos del array, si no que también podemos extraerlos guardándolo en un nuevo array. ¡Ojo! que al hacer esto estaríamos modificando el array de origen.
+
+ +
let vegetales = ['Repollo', 'Nabo', 'Rábano', 'Zanahoria']
+console.log(vegetales)
+// ["Repollo", "Nabo", "Rábano", "Zanahoria"]
+
+let pos = 1, numElementos = 2
+
+let elementosEliminados = vegetales.splice(pos, numElementos)
+// ["Nabo", "Rábano"] ==> Lo que se ha guardado en "elementosEliminados"
+
+console.log(vegetales)
+// ["Repollo", "Zanahoria"] ==> Lo que actualmente tiene "vegetales" 
+ +

Copiar un Array

+ +
let copiaArray = vegetales.slice();
+// ["Repollo", "Zanahoria"]; ==> Copiado en "copiaArray"
+ +

Acceso a elementos de un array

+ +

Los índices de los arrays de JavaScript comienzan en cero, es decir, el índice del primer elemento de un array es 0, y el del último elemento es igual al valor de la propiedad length del array restándole 1.

+ +

Si se utiliza un número de índice no válido, se obtendrá undefined.

+ +
let arr = ['este es el primer elemento', 'este es el segundo elemento', 'este es el último elemento']
+console.log(arr[0])              // escribe en consola 'este es el primer elemento'
+console.log(arr[1])              // escribe en consola 'este es el segundo elemento'
+console.log(arr[arr.length - 1]) // escribe en consola 'este es el último elemento'
+
+ +

Los elementos de un array pueden considerarse propiedades del objeto tanto como toString (sin embargo, para ser precisos, toString() es un método). Sin embargo, se obtendrá un error de sintaxis si se intenta acceder a un elemento de un array de la forma siguiente, ya que el nombre de la propiedad no sería válido:

+ +
console.log(arr.0) // error de sintaxis
+ +

No hay nada especial ni en los arrays de JavaScript ni en sus propiedades que ocasione esto. En JavaScript, las propiedades cuyo nombre comienza con un dígito no pueden referenciarse con la notación punto y debe accederse a ellas mediante la notación corchete.

+ +

Por ejemplo, dado un objeto con una propiedad de nombre '3d', sólo podría accederse a dicha propiedad con la notación corchete.

+ +
let decadas = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
+console.log(decadas.0)  // error de sintaxis
+console.log(decadas[0]) // funciona correctamente
+
+ +
renderizador.3d.usarTextura(modelo, 'personaje.png')
+renderizador['3d'].usarTextura(modelo, 'personaje.png')
+ +

Obsérvese que, en el último ejemplo, ha sido necesario poner '3d' entre comillas. Es posible usar también comillas con los índices del los arrays de JavaScript (p. ej., decadas['2'] en vez de decadas[2]), aunque no es necesario.

+ +

El motor de JavaScript transforma en un string el 2 de decadas[2] a través de una conversión implícita mediante toString. Por tanto, '2' y '02' harían referencia a dos posiciones diferentes en el objeto decadas, y el siguiente ejemplo podría dar true como resultado:

+ +
console.log(decadas['2'] != decadas['02'])
+ +

Relación entre length y las propiedades numéricas

+ +

La propiedad length de un array de JavaScript está conectada con algunas otras de sus propiedades numéricas.

+ +

Varios de los métodos propios de un array (p. ej., join(), slice(), indexOf(), etc.) tienen en cuenta el valor de la propiedad length de un array cuando se les llama.

+ +

Otros métodos (p. ej., push()splice(), etc.) modifican la propiedad length de un array.

+ +
const frutas = []
+frutas.push('banana', 'manzana', 'pera')
+
+console.log(frutas.length) // 3
+
+ +

Cuando se le da a una propiedad de un array JavaScript un valor que corresponda a un índice válido para el array pero que se encuentre fuera de sus límites, el motor actualizará el valor de la propiedad length como corresponda:

+ +
frutas[5] = 'fresa'
+console.log(frutas[5])           // 'fresa'
+console.log(Object.keys(frutas)) // ['0', '1', '2', '5']
+console.log(frutas.length)       // 6
+
+ +

Si se aumenta el valor de length:

+ +
frutas.length = 10
+console.log(frutas)              // ['banana', 'manzana', 'pera', <2 empty items>, 'fresa', <4 empty items>]
+console.log(Object.keys(frutas)) // ['0', '1', '2', '5']
+console.log(frutas.length)       // 10
+console.log(frutas[8])           // undefined
+
+ +

Si se disminuye el valor de la propiedad length pueden eliminarse elementos:

+ +
frutas.length = 2
+console.log(Object.keys(frutas)) // ['0', '1']
+console.log(frutas.length)       // 2
+
+ +

Hay más información sobre este tema en la página sobre Array.length.

+ +

Creación de un array a partir de una expresión regular

+ +

El resultado de una búsqueda con una RegExp en un string puede crear un array de JavaScript. Este array tendrá propiedades y elementos que proporcionan información sobre la correspondencia encontrada. Para obtener un array de esta forma puede utilizarse RegExp.exec(), String.match() o String.replace().

+ +

El siguiente ejemplo, y la tabla que le sigue, pueden ayudar a comprender mejor las propiedades y elementos a los que nos referimos:

+ +
// Buscar una d seguida de una o más b y, al final, de otra d
+// Recordar las b y la d final
+// No distinguir mayúsculas y minúsculas
+
+const miRe = /d(b+)(d)/i
+const miArray = miRe.exec('cdbBdbsbz')
+ +

Las propiedades y elementos que se obtienen de esta búsqueda son los siguientes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Propiedad/ElementoDescripciónEjemplo
input
+ {{ReadOnlyInline}}
El string original sobre el que se ha realizado la búsqueda con la expresión regular"cdbBdbsbz"
index
+ {{ReadOnlyInline}}
El índice de la correspondencia en el string, siendo cero el de la primera posición.1
[0]
+ {{ReadOnlyInline}}
Los últimos caracteres que cumplen la correspondencia"dbBd"
[1], ...[n]
+ {{ReadOnlyInline}}
Elementos que indican las correspondencias de substrings entre paréntesis (si se han incluido) de la expresión regular. No hay límite al número de substrings entre paréntesis que se puedan utilizar.[1]: "bB"
+ [2]: "d"
+ +

Constructor

+ +
+
Array()
+
Crea un nuevo objeto Array.
+
+ +

Propiedades estáticas

+ +
+
get Array[@@species]
+
La función del constructor se utiliza para crear objetos derivados.
+
+ +

Métodos estáticos

+ +
+
Array.from()
+
Crea una nueva instancia de Array a partir de similarAUnArray, un objeto iterable o parecido a un array.
+
Array.isArray()
+
Devuelve true si valor es un array, y false en caso contrario.
+
Array.of()
+
Crea una nueva instancia de Array con un número variable de parámetros, independientemente del número y del tipo de dichos parámetros.
+
+ +

Propiedades de instancia

+ +
+
Array.prototype.length
+
Indica el número de elementos de un array.
+
Array.prototype[@@unscopables]
+
Símbolo que contiene todos los nombres de las propiedades que se excluyen de un ámbito de enlace with.
+
+ +

Métodos de instancia

+ +
+
Array.prototype.concat()
+
Devuelve un nuevo array que es la concatenación de aquél sobre el que se invoca, seguido de otros array(s) o valor(es).
+
Array.prototype.copyWithin()
+
Copia una secuencia de elementos de un array dentro del propio array.
+
Array.prototype.entries()
+
Devuelve un nuevo objeto Array Iterator que contiene los pares clave/valor para cada índice del array.
+
Array.prototype.every()
+
Devuelve true si todos los elementos del array cumplen el predicado que recibe como parámetro.
+
Array.prototype.fill()
+
Asigna un valor estático a todos los elementos del array entre las posiciones inicio y fin.
+
Array.prototype.filter()
+
Devuelve un nuevo array que contiene todos los elementos de aquél para el cual se llama que cumplan el predicado que se le pasa como parámetro.
+
Array.prototype.find()
+
Devuelve el primer elemento del array que cumpla el predicado que se pasa como parámetro, o undefined si ninguno lo cumple.
+
Array.prototype.findIndex()
+
Devuelve el índice del primer elemento del array que cumpla el predicado que se pasa como parámetro, o -1 si nunguno lo cumple.
+
Array.prototype.forEach()
+
Llama a la función pasada como parámetro para todos los elementos del array.
+
Array.prototype.includes()
+
Determina si el array contiene el valorBuscado y devuelve true o false según sea el caso.
+
Array.prototype.indexOf()
+
Devuelve el índice del primer elemento del array que sea igual a elementoBuscado, o -1 si no existe.
+
Array.prototype.join()
+
Concatena en un string todos los elementos de un array.
+
Array.prototype.keys()
+
Devuelve un nuevo Array Iterator que contiene las claves de cada índice del array.
+
Array.prototype.lastIndexOf()
+
Devuelve el índice del último elemento del array que sea igual a elementoBuscado, o -1 si no existe.
+
Array.prototype.map()
+
Devuelve un nuevo array que contiene el resultado de llamar a la función pasada como parámetro a todos los elementos del array sobre el que se invoca.
+
Array.prototype.pop()
+
Elimina el último elemento de un array, y devuelve dicho elemento.
+
Array.prototype.push()
+
Añade uno o más elementos al final de un array y devuelve el nuevo valor de su propiedad length.
+
Array.prototype.reduce()
+
Aplica la función pasada como parámetro a un acumulador y a cada valor del array, que se recorre de izquierda a derecha, para reducirlo a un único valor.
+
Array.prototype.reduceRight()
+
Aplica la función pasada como parámetro a un acumulador y a cada valor del array, que se recorre de derecha a izquierda, para reducirlo a un único valor.
+
Array.prototype.reverse()
+
Invierte el orden de los elementos de un array (el primero pasa a ser el último y el último a ser el primero) en el propio array. Este método modifica el array.
+
Array.prototype.shift()
+
Elimina el primer elemento de un array, y devuelve dicho elemento.
+
Array.prototype.slice()
+
Extrae una porción del array sobre el que se llama y devuelve un nuevo array.
+
Array.prototype.some()
+
Devuelve true si al menos un elemento del array cumple con el predicado que se pasa como parámetro.
+
Array.prototype.sort()
+
Ordena los elementos de un array, modificando éste, y devuelve el array ordenado.
+
Array.prototype.splice()
+
Añade, borra o modifica elementos de un array.
+
Array.prototype.toLocaleString()
+
Devuelve un string adaptado a la configuración regional que representa el array y sus elementos. Redefine el método Object.prototype.toLocaleString().
+
Array.prototype.toString()
+
Devuelve un string que representa el array y sus elementos. Redefine el método Object.prototype.toString().
+
Array.prototype.unshift()
+
Añada uno o más elementos al inicio de un array y devuelve el nuevo valor de length para el array resultante.
+
Array.prototype.values()
+
Devuelve un nuevo objeto Array Iterator que contiene los valores para cada índice del array.
+
Array.prototype[@@iterator]()
+
Devuelve un nuevo objeto Array Iterator que contiene los valores para cada índice del array.
+
+ +

Ejemplos

+ +

Creación de una matriz unidimensional

+ +

El siguiente ejemplo crea un array mensajes con una longitud de 0, y luego asigna valores a mensajes[0] y a mensajes[99], con lo que la longitud del array pasa a ser 100.

+ +
let mensajes = [];
+mensajes[0] = "Hola";
+mensajes[99] = "mundo";
+
+if (mensajes.length === 100) {
+   console.log("La longitud es de 100.");
+}
+
+ +

Creación de una matriz de dos dimensiones

+ +

El siguiente ejemplo crea una matriz bidimensional que representa un tablero de ajedrez. El primer movimiento se realiza copiando la 'p' de tablero[6][4] en tablero[4][4]. La posición [6][4] se limpia.

+ +
let tablero = [
+  ['T','C','A','D','R','A','C','T'],
+  ['P','P','P','P','P','P','P','P'],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  ['p','p','p','p','p','p','p','p'],
+  ['t','c','a','d','r','a','c','t'] ]
+
+console.log(tablero.join('\n') + '\n\n')
+
+// Adelantar dos posiciones el peón de rey
+tablero[4][4] = tablero[6][4]
+tablero[6][4] = ' '
+console.log(tablero.join('\n'))
+ +

Este es el resultado:

+ +
T,C,A,D,R,A,C,T
+P,P,P,P,P,P,P,P
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+p,p,p,p,p,p,p,p
+t,c,a,d,r,a,c,t
+
+P,P,P,P,P,P,P,P
+ , , , , , , ,
+ , , , , , , ,
+ , , , ,p, , ,
+ , , , , , , ,
+p,p,p,p, ,p,p,p
+t,c,a,d,r,a,c,t
+
+ +

Uso de un array para tabular un conjunto de valores

+ +
valores = []
+for (let x = 0; x < 10; x++){
+ valores.push([
+  2 ** x,
+  2 * x ** 2
+ ])
+}
+console.table(valores)
+ +

da como resultado:

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

(La primera columna es el índice).

+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónPublicación inicial
{{SpecName('ESDraft', '#sec-array-objects', 'Array')}}ECMAScript 1
+ +

Compatibilidad con navegadores

+ + + +

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

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/indexof/index.html b/files/es/web/javascript/reference/global_objects/array/indexof/index.html new file mode 100644 index 0000000000..7aad7773b1 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/indexof/index.html @@ -0,0 +1,248 @@ +--- +title: Array.prototype.indexOf() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/indexOf +tags: + - Array + - JavaScript + - Method + - Prototype + - Referencia + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/indexOf +--- +
{{JSRef}}
+ +

El método indexOf() retorna el primer índice en el que se puede encontrar un elemento dado en el array, ó retorna -1 si el elemento no esta presente.

+ +
+

Nota: Para el método String, ver {{jsxref("String.prototype.indexOf()")}}.

+
+ +

Sintaxis

+ +
array.indexOf(searchElement[, fromIndex])
+ +

Parámetros

+ +
+
searchElement
+
Elemento a encontrar en el array.
+
fromIndex {{optional_inline}}
+
Indica el índice por el que se comienza la búsqueda. Por defecto es 0, por lo que se busca en todo el array. Si el índice es mayor o igual a la longitud del array, devuelve -1, ya que no se buscaría en el array. Si el valor es negativo, se toma restando posiciones desde el final del array. Hay que tener en cuenta que aunque el índice sea negativo, la búsqueda seguirá realizándose en un orden incremental. Si el índice calculado es menor de 0, la búsqueda se realizará por todo el array.
+
+ +

Valor de retorno

+ +

El primer índice del elemento en la matriz; -1 si no se encuentra.

+ +

Descripción

+ +

indexOf() compara searchElement con los elementos del array usando igualdad estricta (el mismo método que cuando se usa ===, o el operador igualdad-triple).

+ +

Ejemplos

+ +

Usando indexOf()

+ +

El siguiente ejemplo usa indexof() para localizar valores en un array 

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

Encontrar todas las apariciones de un elemento

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

Encontrar si un elemento existe en la matriz o no y actualizar la matriz

+ +
function updateVegetablesCollection (veggies, veggie) {
+    if (veggies.indexOf(veggie) === -1) {
+        veggies.push(veggie);
+        console.log('La nueva colección de vegetales es: ' + veggies);
+    } else if (veggies.indexOf(veggie) > -1) {
+        console.log(veggie + ' ya existe en la colección de verduras.');
+    }
+}
+
+var veggies = ['patata', 'tomate', 'chiles', 'pimientoverde'];
+
+updateVegetablesCollection(veggies, 'espinaca');
+// La nueva colección de verduras es : patata, tomate, chiles, pimientoverde, espinaca
+updateVegetablesCollection(veggies, 'espinaca');
+// La espinaca ya existe en la colección de verduras.
+ +

 

+ +

Polyfill

+ +

indexOf() se agregó al estándar ECMA-262 en la 5a edición; por tanto no está implementado en todos los navegadores. Puedes hacerlo funcionar insertando el siguiente código al comienzo de tus scripts, permitiendo usar  indexOf() en implementaciones que no lo soporten de forma nativa. Este algoritmo es exáctamente el especificado en ECMA-262, 5ª edición, suponiendo que {{jsxref("Global_Objects/TypeError", "TypeError")}} y {{jsxref("Math.abs()")}} tienen sus valores originales.

+ + +
if (!Array.prototype.indexOf) {
+  Array.prototype.indexOf = function indexOf(member, startFrom) {
+    /*
+    En el modo no estricto, si la variable `this` es null o indefinida, entonces se establece
+    en el objeto ventana. De lo contrario, `this` se convierte automáticamente en un objeto.
+    En modo estricto, si la variable `this` es nula o indefinida, se lanza `TypeError`.
+    */
+    if (this == null) {
+      throw new TypeError("Array.prototype.indexOf() - no se puede convertir `" + this + "` en objeto");
+    }
+
+    var
+      index = isFinite(startFrom) ? Math.floor(startFrom) : 0,
+      that = this instanceof Object ? this : new Object(this),
+      length = isFinite(that.length) ? Math.floor(that.length) : 0;
+
+    if (index >= length) {
+      return -1;
+    }
+
+    if (index < 0) {
+      index = Math.max(length + index, 0);
+    }
+
+    if (member === undefined) {
+      /*
+        Dado que `member` no está definido, las claves que no existan tendrán el valor de `same`
+        como `member` y, por lo tanto, es necesario verificarlas.
+      */
+      do {
+        if (index in that && that[index] === undefined) {
+          return index;
+        }
+      } while (++index < length);
+    } else {
+      do {
+        if (that[index] === member) {
+          return index;
+        }
+      } while (++index < length);
+    }
+
+    return -1;
+  };
+}
+ +

Sin embargo, si está más interesado en todos los pequeños trozos técnicos definidos por el estándar ECMA, y está menos preocupado por el rendimiento o la concisión, entonces usted puede encontrar esta polyfill más descriptivo que sea más útil.

+ +
// Pasos de producción de ECMA-262, Edición 5, 15.4.4.14
+// Referencia: http://es5.github.io/#x15.4.4.14
+if (!Array.prototype.indexOf) {
+  Array.prototype.indexOf = function(searchElement, fromIndex) {
+
+    var k;
+
+    // 1. Dejar que `o` sea el resultado de llamar a ToObject
+    //    pasando este valor como argumento.
+    if (this == null) {
+      throw new TypeError('"this" is null or not defined');
+    }
+
+    var o = Object(this);
+
+    // 2. Dejar que `lenValue` sea el resultado de llamar al método interno
+    //    de `o` con el argumento "length".
+    // 3. Dejar que len sea ToUint32(lenValue).
+    var len = o.length >>> 0;
+
+    // 4. Si `len` es 0, devolver -1.
+    if (len === 0) {
+      return -1;
+    }
+
+    // 5. Si se pasó el argumento `fromIndex`, deje que `n` sea
+    //    ToInteger(fromIndex); si no, que `n` sea 0.
+    var n = fromIndex | 0;
+
+    // 6. Si n >= len, devolver -1.
+    if (n >= len) {
+      return -1;
+    }
+
+    // 7. Si n >= 0, entonces deja que `k` sea `n`.
+    // 8. Si no, n<0, deja que `k` sea `len - abs(n)`.
+    //    Si `k` es menor que 0, entonces deja que `k` sea 0.
+    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+
+    // 9. Repite, mientras k < len
+    while (k < len) {
+      // a. Dejar que `Pk` sea ToString(k).
+      //   Esto está implícito para los operandos LHS del operador in
+      // b. Dejar que kPresent sea el resultado de llamar al método
+      //    interno `HasProperty` de `o` con el argumento `Pk`.
+      //   Este paso se puede combinar con `c`
+      // c. Si kPresent es verdadero, entonces
+      //    i.  Dejar que `elementK` sea el resultado de llamar al método
+      //        interno de `o` con el argumento ToString(k).
+      //   ii.  Deje que `same` sea el resultado de aplicar el
+      //        Algoritmo de comparación de igualdad estricta a
+      //        searchElement y elementK.
+      //  iii.  Si `same` es true, devuelve `k`.
+      if (k in o && o[k] === searchElement) {
+        return k;
+      }
+      k++;
+    }
+    return -1;
+  };
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.4.4.14', 'Array.prototype.indexOf')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +

{{Compat("javascript.builtins.Array.indexOf")}}

+ +

Notas de compatibilidad

+ + + +
 
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/isarray/index.html b/files/es/web/javascript/reference/global_objects/array/isarray/index.html new file mode 100644 index 0000000000..b2a115a814 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/isarray/index.html @@ -0,0 +1,128 @@ +--- +title: Array.isArray() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/isArray +tags: + - Array + - ECMAScript5 + - JavaScript + - Referencia + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/isArray +--- +
{{JSRef}}
+ +

El método Array.isArray() determina si el valor pasado es un {{jsxref("Array")}}.

+ +
Array.isArray([1, 2, 3]);  // true
+Array.isArray({foo: 123}); // false
+Array.isArray('foobar');   // false
+Array.isArray(undefined);  // false
+
+ +

Sintaxis

+ +
Array.isArray(obj)
+ +

Parámetros

+ +
+
obj
+
El objeto a evaluar.
+
+ +

Valor de retorno

+ +

true si el objeto es un {{jsxref("Array")}}; en caso contrario, false.

+ +

Descripción

+ +

Si el objeto es un {{jsxref("Array")}}, devuelve truefalse, en cualquier otro caso.

+ +

Vea el artículo “Determining with absolute accuracy whether or not a JavaScript object is an array” para más detalles.

+ +

Ejemplos

+ +
// las siguientes llamadas devuelven true
+Array.isArray([]);
+Array.isArray([1]);
+Array.isArray(new Array());
+Array.isArray(new Array('a', 'b', 'c', 'd'));
+Array.isArray(new Array(3));
+// Hecho poco conocido: Array.prototype es también un array:
+Array.isArray(Array.prototype);
+
+// todas las siguientes llamadas devuelven 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 vs isArray

+ +

Al comprobar una instancia ArrayArray.isArray es más recomendado que instanceof porque funciona a través de iframes.

+ +
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]
+
+// Comprobando correctamente un Array
+Array.isArray(arr);  // true
+// Considerado peligroso, porque no funciona a través de iframes
+arr instanceof Array; // false
+
+ +

Polyfill

+ +

Ejecutar el siguiente código antes de cualquier otro código creará un Array.isArray() si no está disponible de forma nativa.

+ +
if (!Array.isArray) {
+  Array.isArray = function(arg) {
+    return Object.prototype.toString.call(arg) === '[object Array]';
+  };
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.4.3.2', 'Array.isArray')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en JavaScript 1.8.5.
{{SpecName('ES6', '#sec-array.isarray', 'Array.isArray')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.isarray', 'Array.isArray')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{Compat("javascript.builtins.Array.isArray")}}
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/join/index.html b/files/es/web/javascript/reference/global_objects/array/join/index.html new file mode 100644 index 0000000000..ea9ba3e544 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/join/index.html @@ -0,0 +1,110 @@ +--- +title: Array.prototype.join() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/join +tags: + - Array + - JavaScript + - Matriz + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/join +--- +
{{JSRef}}
+ +

El método join() une todos los elementos de una matriz (o un objeto similar a una matriz) en una cadena y devuelve esta cadena.

+ +

{{EmbedInteractiveExample("pages/js/array-join.html")}}

+ +

Sintaxis

+ +
arr.join([separator])
+ +

Parámetros

+ +
+
separador {{optional_inline}}
+
Es una cadena usada para separar cada uno de los elementos del arreglo. El separador es convertido a una cadena si es necesario. Si este se omite, los elementos del arreglo son separados con una coma (","). Si el separador es una cadena vacía todos los elementos son unidos sin ningún carácter entre ellos.
+
+ +

Valor de retorno

+ +

Una cadena con todos los elementos de la matriz unidos. Si arr.length es 0, se devuelve la cadena vacía.

+ +

Descripción

+ +

Las conversiones de cadena de todos los elementos de la matriz se unen en una cadena.

+ +
+

Si un elemento no está definido o es nulo, se convierte en la cadena vacía.

+
+ +

Ejemplos

+ +

Uniendo un arreglo cuatro veces en diferentes formas

+ +

El siguiente ejemplo crea un arreglo a con tres elementos para luego unir el arreglo cuatro veces: usando el separador predeterminado, luego una coma y un espacio, luego un signo de suma, y finalmente una cadena vacío.

+ +
var a = ['Viento', 'Lluvia', 'Fuego'];
+var miVar1 = a.join();      // asigna 'Viento,Lluvia,Fuego' a miVar1
+var miVar2 = a.join(', ');  // asigna 'Viento, Lluvia, Fuego' a miVar2
+var miVar3 = a.join(' + '); // asigna 'Viento + Lluvia + Fuego' a miVar3
+var miVar4 = a.join('');    // asigna 'VientoLluviaFuego' a miVar4
+
+ +

Unirse a un objeto tipo matriz

+ +

El siguiente ejemplo une un objeto parecido a una matriz (argumentos), llamando a {{jsxref("Function.prototype.call")}} en Array.prototype.join.

+ +
function f(a, b, c) {
+  var s = Array.prototype.join.call(arguments);
+  console.log(s); // '1,a,true'
+}
+f(1, 'a', true);
+//resultado esperado: "1,a,true"
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
ECMAScript 1st EditionEstándarDefinición inicial. Implementado en JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.4.4.5', 'Array.prototype.join')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.join', 'Array.prototype.join')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.join', 'Array.prototype.join')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{Compat("javascript.builtins.Array.join")}}
+ +
 
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/keys/index.html b/files/es/web/javascript/reference/global_objects/array/keys/index.html new file mode 100644 index 0000000000..ff7cb593f5 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/keys/index.html @@ -0,0 +1,84 @@ +--- +title: Array.prototype.keys() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/keys +tags: + - Array + - ECMAScript 2015 + - Iterator + - JavaScript + - Matriz + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/keys +--- +
{{JSRef}}
+ +

El método keys() devuelve un nuevo objeto  Array Iterator que contiene las claves de índice con las que acceder a cada elemento en el array.

+ +

{{EmbedInteractiveExample("pages/js/array-keys.html")}}

+ +

Sintaxis

+ +
arr.keys()
+ +

Valor de retorno

+ +

Un nuevo objeto iterador {{jsxref("Array")}}.

+ +

Ejemplos

+ +

Uso básico

+ +
var arr = ['a', 'b', 'c'];
+var iterator = arr.keys();
+
+console.log(iterator.next()); // { value: 0, done: false }
+console.log(iterator.next()); // { value: 1, done: false }
+console.log(iterator.next()); // { value: 2, done: false }
+console.log(iterator.next()); // { value: undefined, done: true }
+
+ +

El iterador no ignora los huecos

+ +
var arr = ['a', , 'c'];
+var sparseKeys = Object.keys(arr);
+var denseKeys = [...arr.keys()];
+console.log(sparseKeys); // ['0', '2']
+console.log(denseKeys);  // [0, 1, 2]
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-array.prototype.keys', 'Array.prototype.keys')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-array.prototype.keys', 'Array.prototype.keys')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{Compat("javascript.builtins.Array.keys")}}
+ +
 
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/lastindexof/index.html b/files/es/web/javascript/reference/global_objects/array/lastindexof/index.html new file mode 100644 index 0000000000..19667a54af --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/lastindexof/index.html @@ -0,0 +1,164 @@ +--- +title: Array.prototype.lastIndexOf() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/lastIndexOf +tags: + - Array + - Arreglo + - ECMAScript 5 + - JavaScript + - Matriz + - Prototipo + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf +--- +
{{JSRef}}
+ +

El método lastIndexOf() devuelve el último índice en el que un cierto elemento puede encontrarse en el arreglo, ó -1 si el elemento no se encontrara. El arreglo es recorrido en sentido contrario, empezando por el índice fromIndex.

+ +

{{EmbedInteractiveExample("pages/js/array-lastindexof.html")}}

+ +

Sintaxis

+ +
arr.lastIndexOf(searchElement) arr.lastIndexOf(searchElement, fromIndex)
+ +

Parámetros

+ +
+
searchElement
+
Elemento a encontrar en el arreglo.
+
fromIndex {{optional_inline}}
+
El índice en el que empieza la búsqueda en sentido contrario. Por defecto la longitud del arreglo menos uno (arr.length - 1), es decir, todo el arreglo será recorrido. Si el índice es mayor o igual que la longitud del arreglo, todo el arreglo será recorrido. Si es un valor negatigo, se usará como inicio del desplazamiento el final del arreglo. Darse cuenta que aún cuando el índice es negativo, el arreglo todavía será recorrido desde atrás hacia delante. Si el índice calculado es menor de 0, se devolverá -1, es decir, el arreglo no será recorrido.
+
+ +

Valor de retorno

+ +

El último índice del elemento en el arreglo; -1 si no se encuentra.

+ +

Descripción

+ +

lastIndexOf compara searchElement con los elementos del arreglo usando igualdad estricta (el mismo método es usado para la ===, operador triple igualdad).

+ +

Ejemplos

+ +

Usando lastIndexOf

+ +

El siguiente ejemplo usa lastIndexOf para encontrar valores en un arreglo.

+ +
var array = [2, 5, 9, 2];
+array.lastIndexOf(2);     // 3
+array.lastIndexOf(7);     // -1
+array.lastIndexOf(2, 3);  // 3
+array.lastIndexOf(2, 2);  // 0
+array.lastIndexOf(2, -2); // 0
+array.lastIndexOf(2, -1); // 3
+
+ +

Encontrar todas las apariciones de un elemento

+ +

El siguiente ejemplo uses lastIndexOf encuentra todos los índices de un elemento en un arreglo dado, usando {{jsxref("Array.prototype.push", "push")}} añadiéndolos a otro arreglo como elementos encontrados.

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

Darse cuenta que en este caso tenemos que tratar idx == 0  de forma separada por que el elemento siempre será encontrado independiemente del valor del parámetro fromIndex  si este es el primer elemento del arreglo. Diferente de como se trata en el método {{jsxref("Array.prototype.indexOf", "indexOf")}}.

+ +

Polyfill

+ +

lastIndexOf fue añadido al estándar ECMA-262 en la 5ª edición; por tanto puede que no este presente en otras implementaciones del estándar. Puedes solucionarlo escribiendo el siguiente código al principio de tus scripts, pudiendo usar lastIndexOf en implementaciones que no tiene soporte de forma nativa. Este algoritmo es exactamente el especificado en ECMA-262, 5ª edición, suponiendo que {{jsxref("Object")}}, {{jsxref("TypeError")}}, {{jsxref("Number")}}, {{jsxref("Math.floor")}}, {{jsxref("Math.abs")}}, y {{jsxref("Math.min")}} tienen sus valores originales.

+ +
// Pasos de producción de ECMA-262, Edición 5, 15.4.4.15
+// Referencia: 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;
+  };
+}
+
+ +

De nuevo, darse cuenta que esta implementación tiene como objeto la completa compatibilidad con lastIndexOf en Firefox y el motor SpiderMonkey JavaScript, en particular en varios casos que son posiblemente extremos. Si pretendes usar esta funcionalidad en aplicaciones reales, es posible que puedes calcular from con código menos complejo si ignoras estos casos.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.4.4.15', 'Array.prototype.lastIndexOf')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.lastindexof', 'Array.prototype.lastIndexOf')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.lastindexof', 'Array.prototype.lastIndexOf')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
{{Compat("javascript.builtins.Array.lastIndexOf")}}
+ +
+ +

Notas de compatibilidad

+ + + +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/length/index.html b/files/es/web/javascript/reference/global_objects/array/length/index.html new file mode 100644 index 0000000000..cbbb1a46db --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/length/index.html @@ -0,0 +1,143 @@ +--- +title: Array.prototype.length +slug: Web/JavaScript/Referencia/Objetos_globales/Array/length +tags: + - Array + - JavaScript + - Propiedad + - Referencia + - Vector +translation_of: Web/JavaScript/Reference/Global_Objects/Array/length +--- +
{{JSRef}}
+ +

La propiedad length de un objeto que es una instancia de tipo Array establece o devuelve la cantidad de elementos en esa matriz. El valor es un entero sin signo de 32 bits que siempre es numéricamente mayor que el índice más alto en la matriz.

+ +
+

{{EmbedInteractiveExample("pages/js/array-length.html")}}

+
+ +

Descripción

+ +

El valor de la propiedad length es un número entero con un signo positivo y un valor menor que 2 a la 32a potencia (232).

+ +
var namelistA = new Array(4294967296); //2 a la 32a potencia = 4294967296
+var namelistC = new Array(-100) //signo negativo
+
+console.log(namelistA.length); //RangeError: longitud de la matriz inválida
+console.log(namelistC.length); //RangeError: longitud de la matriz inválida
+
+
+
+var namelistB = [];
+namelistB.length = Math.pow(2,32)-1; //establecer una longitud de la matriz menor que 2 a la 32ª potencia
+console.log(namelistB.length);
+
+//4294967295
+ +

Puedes establecer la propiedad length para truncar una matriz unidimensional en cualquier momento. Cuando extiende una matriz cambiando su propiedad length, el número de elementos reales aumenta; por ejemplo, si se establece length en 3 cuando actualmente es 2, la matriz ahora contiene 3 elementos, lo que hace que el tercer elemento sea undefined.

+ +
var arr = [1, 2, 3];
+printEntries(arr);
+
+arr.length = 5; // establecer la longitud de la matriz en 5 mientras que actualmente es 3.
+printEntries(arr);
+
+function printEntries(arr) {
+  var length = arr.length;
+  for (var i = 0; i < length; i++) {
+    console.log(arr[i]);
+  }
+  console.log('=== printed ===');
+}
+
+// 1
+// 2
+// 3
+// === impreso ===
+// 1
+// 2
+// 3
+// undefined
+// undefined
+// === impreso ===
+ +

Pero, la propiedad length no necesariamente indica el número de valores definidos en la matriz. Ver también Relación entre length y las propiedades numéricas.

+ +

{{js_property_attributes(1, 0, 0)}}

+ + + +

Ejemplos

+ +

Iterando sobre una matriz

+ +

En el siguiente ejemplo, la matriz numbers se itera a través de la propiedad length. El valor en cada elemento se duplica.

+ +
var numbers = [1, 2, 3, 4, 5];
+var length = numbers.length;
+for (var i = 0; i < length; i++) {
+  numbers[i] *= 2;
+}
+// numbers ahora es [2, 4, 6, 8, 10]
+ +

Acortando una matriz

+ +

El siguiente ejemplo acorta los numbers de la matriz a una longitud de 3 si la longitud actual es mayor que 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
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
ECMAScript 1ra Edición.EstándarDefinición inicial.
{{SpecName('ES5.1', '#sec-15.4.5.2', 'Array.length')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-properties-of-array-instances-length', 'Array.length')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-properties-of-array-instances-length', 'Array.length')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{Compat("javascript.builtins.Array.length")}}
+ +
 
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/map/index.html b/files/es/web/javascript/reference/global_objects/array/map/index.html new file mode 100644 index 0000000000..8b958a4945 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/map/index.html @@ -0,0 +1,360 @@ +--- +title: Array.prototype.map() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/map +tags: + - Array + - Arreglo + - Callback + - ECMAScript5 + - Polifill + - Prototype + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/map +--- +
{{JSRef}}
+ +

El método map() crea un nuevo array con los resultados de la llamada a la función indicada aplicados a cada uno de sus elementos.

+ +
var numbers = [1, 5, 10, 15];
+var doubles = numbers.map(function(x) {
+   return x * 2;
+});
+// doubles is now [2, 10, 20, 30]
+// numbers is still [1, 5, 10, 15]
+
+var numbers = [1, 4, 9];
+var roots = numbers.map(function(num) {
+    return Math.sqrt(num);
+});
+// roots is now [1, 2, 3]
+// numbers is still [1, 4, 9]
+
+ +

Sintaxis

+ +
var nuevo_array = arr.map(function callback(currentValue, index, array) {
+    // Elemento devuelto de nuevo_array
+}[, thisArg])
+ +

Parámetros

+ +
+
callback
+
Función que producirá un elemento del nuevo array, recibe tres argumentos:
+
+
+
currentValue
+
El elemento actual del array que se está procesando.
+
index
+
El índice del elemento actual dentro del array.
+
array
+
El array sobre el que se llama map.
+
+
+
thisArg
+
Opcional. Valor a usar como this al ejecutar callback.
+
+ +

Descripción

+ +

map llama a la función callback provista una vez por elemento de un array, en orden, y construye un nuevo array con los resultados. callback se invoca sólo para los índices del array que tienen valores asignados; no se invoca en los índices que han sido borrados o a los que no se ha asignado valor.

+ +

callback es llamada con tres argumentos: el valor del elemento, el índice del elemento, y el objeto array que se está recorriendo.

+ +

Si se indica un parámetro thisArg a un map, se usará como valor de this en la función callback. En otro caso, se pasará {{jsxref("Global_Objects/undefined", "undefined")}} como su valor this. El valor de this observable por el callback se determina de acuerdo a las reglas habituales para determinar el valor this visto por una función.

+ +

map no modifica el array original en el que es llamado (aunque callback, si es llamada, puede modificarlo).

+ +

El rango de elementos procesado por map es establecido antes de la primera invocación del callback. Los elementos que sean agregados al array después de que la llamada a map comience no serán visitados por el callback. Si los elementos existentes del array son modificados o eliminados, su valor pasado al callback será el valor en el momento que el map lo visita; los elementos que son eliminados no son visitados.

+ +

Ejemplos

+ +

Procesar un array de números aplicándoles la raíz cuadrada

+ +

El siguiente código itera sobre un array de números, aplicándoles la raíz cuadrada a cada uno de sus elementos, produciendo un nuevo array a partir del inicial.

+ +
var numeros= [1, 4, 9];
+var raices = numeros.map(Math.sqrt);
+// raices tiene [1, 2, 3]
+// numeros aún mantiene [1, 4, 9]
+
+ +

Usando map para dar un nuevo formato a los objetos de un array

+ +

El siguiente código toma un array de objetos y crea un nuevo array que contiene los nuevos objetos formateados.

+ +
var kvArray = [{clave:1, valor:10},
+               {clave:2, valor:20},
+               {clave:3, valor: 30}];
+
+var reformattedArray = kvArray.map(function(obj){
+   var rObj = {};
+   rObj[obj.clave] = obj.valor;
+   return rObj;
+});
+
+// reformattedArray es ahora [{1:10}, {2:20}, {3:30}],
+
+// kvArray sigue siendo:
+// [{clave:1, valor:10},
+//  {clave:2, valor:20},
+//  {clave:3, valor: 30}]
+
+ +

Mapear un array de números usando una función con un argumento

+ +

El siguiente código muestra cómo trabaja map cuando se utiliza una función que requiere de un argumento. El argumento será asignado automáticamente a cada elemento del arreglo conforme map itera el arreglo original.

+ +
var numeros = [1, 4, 9];
+var dobles  = numeros.map(function(num) {
+  return num * 2;
+});
+
+// dobles es ahora [2, 8, 18]
+// numeros sigue siendo [1, 4, 9]
+
+ +

Usando map de forma genérica

+ +

Este ejemplo muestra como usar map en {{jsxref("Global_Objects/String", "String")}} para obtener un arreglo de bytes en codifcación ASCII representando el valor de los caracteres:

+ +
var map = Array.prototype.map;
+var valores = map.call('Hello World', function(char) { return char.charCodeAt(0); });
+// valores ahora tiene [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
+
+ +

Usando map genérico con querySelectorAll

+ +

Este ejemplo muestra como iterar sobre una colección de objetos obtenidos por querySelectorAll. En este caso obtenemos todas las opciones seleccionadas en pantalla y se imprimen en la consola:

+ +
var elems = document.querySelectorAll('select option:checked');
+var values = [].map.call(elems, function(obj) {
+  return obj.value;
+});
+
+ +

Usando map para invertir una cadena

+ +
var str = '12345';
+[].map.call(str, function(x) {
+  return x;
+}).reverse().join('');
+
+// Salida: '54321'
+// Bonus: usa'===' para probar si la cadena original era un palindromo
+
+ +

Caso de uso engañoso

+ +

(inspirado por este artículo)

+ +

Es común utilizar el callback con un argumento (el elemento siendo pasado). Ciertas funciones son también usadas comunmente con un argumento, aún cuando toman argumentos adicionales opcionales.  Estos hábitos pueden llevar a comportamientos confusos.

+ +
// Considera:
+['1', '2', '3'].map(parseInt);
+// Mientras uno esperaría [1, 2, 3]
+// en realidad se obtiene [1, NaN, NaN]
+
+// parseInt se usa comúnmente con un argumento, pero toma dos.
+// El primero es una expresión y el segundo el radix.
+// a la función callback, Array.prototype.map pasa 3 argumentos:
+// el elemento, el índice y el array.
+// El tercer argumento es ignorado por parseInt, pero no el segundo,
+// de ahí la posible confusión. Véase el artículo del blog para más detalles
+
+function returnInt(element) {
+  return parseInt(element, 10);
+}
+
+['1', '2', '3'].map(returnInt); // [1, 2, 3]
+// El resultado es un arreglo de números (como se esperaba)
+
+// Un modo más simple de lograr lo de arriba, mientras de evita el "gotcha":
+['1', '2', '3'].map(Number); // [1, 2, 3]
+
+ +

Polyfill

+ +

map fue agregado al estandar ECMA-262 en la 5th edición; por lo tanto podría no estar presente en todas la implementaciones del estándar. Puedes sobrepasar esto insertando el siguiente código al comienzo de tus scripts, permitiendo el uso de map en implementaciones que no lo soportan de forma nativa. Este algoritmo es exactamente el mismo especificado en ECMA-262, 5th edición, asumiendo {{jsxref("Global_Objects/Object", "Object")}}, {{jsxref("Global_Objects/TypeError", "TypeError")}}, y {{jsxref("Global_Objects/Array", "Array")}} tienen sus valores originales y que el callback.call evalua el valor original de {{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 = thisArg;
+    }
+
+    // 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;
+  };
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.4.4.19', 'Array.prototype.map')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.map', 'Array.prototype.map')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.map', 'Array.prototype.map')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoDesktop("1.8")}}{{CompatIE("9")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("1.8")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/of/index.html b/files/es/web/javascript/reference/global_objects/array/of/index.html new file mode 100644 index 0000000000..f57c7e2bc1 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/of/index.html @@ -0,0 +1,97 @@ +--- +title: Array.of() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/of +tags: + - Array + - ECMAScript 2015 + - JavaScript + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/of +--- +
{{JSRef}}
+ +

El método Array.of() crea una nueva instancia Array con un número variable de elementos pasados como argumento, independientemente del número o del tipo.

+ +

La diferencia entre Array.of() y el constructor Array reside en como maneja los parámetros de tipo entero: Array.of(7) crea un array con un solo elemento, 7, mientras que Array(7) crea un array vacío con una propiedad length de 7 (Nota: esto implica un array de 7 ranuras vacías, no ranuras con valores undefined).

+ +
Array.of(7);       // [7]
+Array.of(1, 2, 3); // [1, 2, 3]
+
+Array(7);          // [ , , , , , , ]
+Array(1, 2, 3);    // [1, 2, 3]
+ +

Sintaxis

+ +
Array.of(elemento0[, elemento1[, ...[, elementoN]]])
+ +

Parámetros

+ +
+
elementoN
+
Valores con los que se creará el Array en su respectivo indice.
+
+

Valor de retorno

+
+
Una nueva instancia de {{jsxref("Array")}}.
+
+ +

Descripción

+ +

Esta función es parte del estándar ECMAScript 2015. Para obtener más información, consulte Array.of y Array.from proposal y Array.of polyfill.

+ +

Ejemplos

+ +
Array.of(1);         // [1]
+Array.of(1, 2, 3);   // [1, 2, 3]
+Array.of(undefined); // [undefined]
+
+ +

Polyfill

+ +

Escribiendo el siguiente código antes que cualquier otro, podemos emular la funcionalidad de Array.of() si es que ésta no está disponible de forma nativa.

+ +
if (!Array.of) {
+  Array.of = function() {
+    return Array.prototype.slice.call(arguments);
+  };
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-array.of', 'Array.of')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-array.of', 'Array.of')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.of")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/pop/index.html b/files/es/web/javascript/reference/global_objects/array/pop/index.html new file mode 100644 index 0000000000..acc6d06885 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/pop/index.html @@ -0,0 +1,94 @@ +--- +title: Array.prototype.pop() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/pop +tags: + - Array + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/pop +--- +
{{JSRef}}
+ +

El método pop() elimina el último elemento de un array y lo devuelve. Este método cambia la longitud del array.

+ +
{{EmbedInteractiveExample("pages/js/array-pop.html")}}
+ +

Sintaxis

+ +
arr.pop()
+ +

Valor devuelto

+ +

El elemento que ha sido eliminado del array; {{jsxref("undefined")}} si el array está vacío.

+ +

Descripción

+ +

El método pop elimina el último elemento de un array y devuelve su valor al método que lo llamó.

+ +

pop es intencionadamente genérico; este método puede ser {{jsxref("Function.call", "called", "", 1)}} o {{jsxref("Function.apply", "applied", "", 1)}} en objectos similares a un array. En objetos que no contengan una propiedad length, que refleje su forma en una serie de propiedades numéricas consecutivas en base cero, puede no comportarse de manera significativa.

+ +

Si se llama a pop() en un array vacío, devuelve {{jsxref("undefined")}}.

+ +

Ejemplos

+ +

Eliminando el último elemento de un array

+ +

El siguiente código crea el array myFish, que contiene cuatro elementos, a continuación, elimina su último elemento.

+ +
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
+
+var popped = myFish.pop();
+
+console.log(myFish); // ['angel', 'clown', 'mandarin' ]
+
+console.log(popped); // 'sturgeon'
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES3')}}EstándarDefinición inicial. Implementada en JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.6', 'Array.prototype.pop')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.pop', 'Array.prototype.pop')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.pop', 'Array.prototype.pop')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.pop")}}

+
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/push/index.html b/files/es/web/javascript/reference/global_objects/array/push/index.html new file mode 100644 index 0000000000..fc00ce7e7a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/push/index.html @@ -0,0 +1,140 @@ +--- +title: Array.prototype.push() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/push +tags: + - Array + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/push +--- +
{{JSRef}}
+ +

El método push() añade uno o más elementos al final de un array y devuelve la nueva longitud del array.

+ +
{{EmbedInteractiveExample("pages/js/array-push.html")}}
+ +

Sintaxis

+ +
arr.push(element1[, ...[, elementN]])
+ +

Parámetros

+ +
+
elementN
+
Los elementos a añadir al final del array.
+
+ +

Valor devuelto

+ +

La nueva propiedad {{jsxref("Array.length", "length")}} del objeto sobre el cual se efectuó la llamada.

+ +

Descripción

+ +

El método push es muy práctico para añadir valores a un array.

+ +

push es genérico intencionadamente. Este método puede ser {{jsxref("Function.call", "call()")}} o {{jsxref("Function.apply", "apply()")}} a objetos que representen arrays. El método push depende de la propiedad length para decidir donde empezar a insertar los valores dados. Si el valor de la propiedad length no puede ser convertido en numérico, el índice 0 es usado. Esto permite la posibilidad de que la propiedad length sea inexistente, y en este caso length será creado.

+ +

Los únicos objetos nativos que se asemejen al array son {{jsxref("Global_Objects/String", "strings", "", 1)}} objetos, aunque estos no se puedan usar en la aplicación de este método ya que son inmutables.

+ +

Ejemplos

+ +

Ejemplo: Añadiendo elementos a un array

+ +

El siguiente código crea el array sports que contiene dos elementos, luego añade 2 elementos más. Tras ejecutar el código, sports contiene 4 elementos: "soccer", "baseball", "football" and "swimming".

+ +
var sports = ['soccer', 'baseball'];
+var total = sports.push('football', 'swimming');
+
+console.log(sports); // ['soccer', 'baseball', 'football', 'swimming']
+console.log(total);  // 4
+
+ +

Uniendo dos arrays

+ +

This example uses {{jsxref("Function.apply", "apply()")}} to push all elements from a second array.

+ +

Do not use this method if the second array (moreVegs in the example) is very large, because the maximum number of parameters that one function can take is limited in practice. See {{jsxref("Function.apply", "apply()")}} for more details.

+ +
var vegetables = ['parsnip', 'potato'];
+var moreVegs = ['celery', 'beetroot'];
+
+// Merge the second array into the first one
+// Equivalent to vegetables.push('celery', 'beetroot');
+Array.prototype.push.apply(vegetables, moreVegs);
+
+console.log(vegetables); // ['parsnip', 'potato', 'celery', 'beetroot']
+
+ +

Using an object in an array-like fashion

+ +

Como se menciona anteriormente, push es intencionadamente genérico, y podemos usar eso a nuestro favor. Array.prototype.push puede funcionar bien con un objeto, como muestra este ejemplo. Ten en cuenta que no se crea un array para almacenar una colección de objetos. En su lugar, almacenamos la colección en el propio objeto y se utiliza el método call sobre Array.prototype.push para hacer creer al método que estamos tratando a un array, y simplemente funciona, gracias a la forma en que JavaScript nos permite establecer el contexto de la ejecución.

+ +
var obj = {
+    length: 0,
+
+    addElem: function addElem(elem) {
+        // obj.length is automatically incremented
+        // every time an element is added.
+        [].push.call(this, elem);
+    }
+};
+
+// Let's add some empty objects just to illustrate.
+obj.addElem({});
+obj.addElem({});
+console.log(obj.length);
+// → 2
+
+ +

Tenga en cuenta que aunque obj no es un array, el método push ha incrementado satisfactoriamente la propiedad length de obj tal y como si se tratara de un array.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial. Implementado en JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.7', 'Array.prototype.push')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.push', 'Array.prototype.push')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.push', 'Array.prototype.push')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.push")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/reduce/index.html b/files/es/web/javascript/reference/global_objects/array/reduce/index.html new file mode 100644 index 0000000000..68d7a9cb2f --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/reduce/index.html @@ -0,0 +1,215 @@ +--- +title: Array.prototype.reduce() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/reduce +tags: + - Array + - ECMAScript 5 + - JavaScript + - Prototype + - Reduce + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/Reduce +--- +
{{JSRef}}
+ +

El método reduce() ejecuta una función reductora sobre cada elemento de un array, devolviendo como resultado un único valor.

+ +
{{EmbedInteractiveExample("pages/js/array-reduce.html")}}
+ +

La función reductora recibe cuatro argumentos:

+ +
    +
  1. Acumulador (acc)
  2. +
  3. Valor Actual (cur)
  4. +
  5. Índice Actual (idx)
  6. +
  7. Array (src)
  8. +
+ +

El valor devuelto de la función reductora se asigna al acumulador, cuyo valor se recuerda en cada iteración de la matriz y, en última instancia, se convierte en el valor final, único y resultante.

+ +

Sintaxis

+ +
arr.reduce(callback(acumulador, valorActual[, índice[, array]])[, valorInicial])
+ +

Parámetros

+ +
+
callback
+
Función a ejecutar sobre cada elemento del array (excepto para el primero, si no se proporciona valorInicial), que recibe cuatro parámetros: +
+
acumulador
+
El acumulador acumula el valor devuelto por la función callback. Es el valor acumulado devuelto en la última invocación de callback, o el valorInicial, si se proveyó. (Ver a continuación).
+
valorActual
+
El elemento actual que está siendo procesado en el array.
+
índice {{optional_inline}}
+
El índice del elemento actual que está siendo procesado en el array. Empieza desde el índice 0 si se provee valorInicial. En caso contrario, comienza desde el índice 1.
+
array {{optional_inline}}
+
El array sobre el cual se llamó el método reduce().
+
+
+
valorInicial {{optional_inline}}
+
Un valor a usar como primer argumento en la primera llamada de la función callback. Si no se proporciona el valorInicial, el primer elemento del array será utilizado y saltado. Llamando a reduce() sobre un array vacío sin un valorInicial lanzará un {{jsxref("TypeError")}}.
+
+ +

Descripción

+ +

El método reduce() ejecuta callback una vez por cada elemento presente en el array, excluyendo los huecos del mismo, recibe cuatro argumentos:

+ + + +

La primera vez que se llama la función, valorAnterior y valorActual pueden tener uno de dos valores. Si se proveyó un valorInicial al llamar a reduce, entonces valorAnterior será igual al valorInicial y valorActual será igual al primer elemento del array. Si no se proveyó un valorInicial, entonces valorAnterior será igual al primer valor en el array y valorActual será el segundo.

+ +

Si el array está vacío y no se proveyó un valorInicial lanzará un {{jsxref("Global_Objects/TypeError", "TypeError")}}. Si el array tiene un sólo elemento (sin importar la posición) y no se proveyó un valorInicial, o si se proveyó un valorInicial pero el arreglo está vacío, se retornará ese único valor sin llamar a la función.

+ +

Suponga que ocurre el siguiente uso de reduce:

+ +
[0,1,2,3,4].reduce(function(valorAnterior, valorActual, indice, vector){
+  return valorAnterior + valorActual;
+});
+
+// Primera llamada
+valorAnterior = 0, valorActual = 1, indice = 1
+
+// Segunda llamada
+valorAnterior = 1, valorActual = 2, indice = 2
+
+// Tercera llamada
+valorAnterior = 3, valorActual = 3, indice = 3
+
+// Cuarta llamada
+valorAnterior = 6, valorActual = 4, indice = 4
+
+// el array sobre el que se llama a reduce siempre es el objeto [0,1,2,3,4]
+
+// Valor Devuelto: 10
+
+ +

Y si proporcionas un valorInicial, el resultado sería como este:

+ +
[0,1,2,3,4].reduce(function(valorAnterior, valorActual, indice, vector){
+  return valorAnterior + valorActual;
+}, 10);
+
+// Primera llamada
+valorAnterior = 10, valorActual = 0, indice = 0
+
+// Segunda llamada
+valorAnterior = 10, valorActual = 1, indice = 1
+
+// Tercera llamada
+valorAnterior = 11, valorActual = 2, indice = 2
+
+// Cuarta llamada
+valorAnterior = 13, valorActual = 3, indice = 3
+
+// Quinta llamada
+valorAnterior = 16, valorActual = 4, indice = 4
+
+// el array sobre el que se llama a reduce siempre es el objeto [0,1,2,3,4]
+
+// Valor Devuelto: 20
+
+ +

Polyfill

+ +
+

Polyfill se refiere a unas líneas de código o un plugin que permite "tener"  (en realidad se simulan de alguna otra manera) las nuevas funcionalidades   de HTML5 en aquellos navegadores que nativamente no lo soportan. Consigue que, en adelante, el código sea transparente para el programador, como si el navegador soportase la funcionalidad nativamente.

+
+ +

reduce es una extensión de JavaScript al estándar ECMA-262; como tal puede que no esté presente en otras implementaciones del estándar. Puedes trabajar con ésto insertando el siguiente código al comienzo de tus scripts, permitiendo el uso de reduce en implementaciones de ECMA-262 que no lo implementan de modo nativo. Este algoritmo es exactamente el mismo usando en Firefox y SpiderMonkey.

+ +
if (!Array.prototype.reduce)
+{
+  Array.prototype.reduce = function(fun /*, inicial*/)
+  {
+    var longitud = this.length;
+    if (typeof fun != "function")
+      throw new TypeError();
+
+    // no se devuelve ningún valor si no hay valor inicial y el array está vacío
+    if (longitud == 0 && arguments.length == 1)
+      throw new TypeError();
+
+    var indice = 0;
+    if (arguments.length >= 2)
+    {
+      var rv = arguments[1];
+    }
+    else
+    {
+      do
+      {
+        if (indice in this)
+        {
+          rv = this[indice++];
+          break;
+        }
+
+        // si el array no contiene valores, no existe valor inicial a devolver
+        if (++indice >= longitud)
+          throw new TypeError();
+      }
+      while (true);
+    }
+
+    for (; indice < longitud; indice++)
+    {
+      if (indice in this)
+        rv = fun.call(null, rv, this[indice], indice, this);
+    }
+
+    return rv;
+  };
+}
+
+ +

Ejemplos

+ +

Ejemplo: Sumar todos los valores de un array

+ +
var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });
+// total == 6
+
+ +

Ejemplo: Integrar un array a partir de varios arrays

+ +
var integrado = [[0,1], [2,3], [4,5]].reduce(function(a,b) {
+  return a.concat(b);
+});
+// integrado es [0, 1, 2, 3, 4, 5]
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-array.prototype.reduce', 'Array.prototype.reduce()')}}
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.reduce")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/reduceright/index.html b/files/es/web/javascript/reference/global_objects/array/reduceright/index.html new file mode 100644 index 0000000000..cff59fddf4 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/reduceright/index.html @@ -0,0 +1,166 @@ +--- +title: Array.prototype.reduceRight() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/reduceRight +tags: + - Array + - ECMAScript5 + - JavaScript + - JavaScript 1.8 + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Array/ReduceRight +--- +
{{JSRef("Objetos_globales", "Array")}}
+ +

Resumen

+ +

Aplica una función simultáneamente contra un acumulador y cada elemento de un array (de derecha a izquierda) para reducirlo a un único valor.

+ +

Sintaxis

+ +
array.reduceRight(
+funcion[,
+valorInicial])
+
+ +

Parámetros

+ +
+
callback
+
Función a ejecutar para cada valor del array.
+
initialValue
+
Objeto a usar como primer argumento en la primera llamada de la funcion.
+
+ +

Descripción

+ +

reduceRight ejecuta la funcion una vez para cada elemento presente en el array, excluyendo los huecos del mismo, recibiendo cuatro argumentos: el valor inicial (o valor de la llamada previa de funcion), el valor del elemento actual, el índice actual y el array sobre el que ocurre la iteración.

+ +

La llamada a la funcion de reduceRight sería similar a esto:

+ +
.reduceRight(function(valorPrevio, valorActual, indice, array){
+  // ...
+})
+
+ +

La primera vez que se llama a la función, el valorPrevio y el valorActual puede ser uno de los dos valores. Si se incluye un valorInicial en la llamada a reduceRight, entonces el valorPrevio será igual al valorInicial y el valorActual será igual al último valor del array. Si no se incluye ningún valorInicial, entonces el valorPrevio será igual al último valor del array y el valorActual será igual al penúltimo valor.

+ +

Algún ejemplo de la ejecución de la función paso a paso sería similar a esto:

+ +
[0,1,2,3,4].reduceRight(function(valorPrevio, valorActual, indice, array){
+  return valorPrevio + valorActual;
+});
+
+// First call
+valorPrevio = 4, valorActual = 3, indice = 3
+
+// Second call
+valorPrevio = 7, valorActual = 2, indice = 2
+
+// Third call
+valorPrevio = 9, valorActual = 1, indice = 1
+
+// Fourth call
+valorPrevio = 10, valorActual = 0, indice = 0
+
+// el array sobre el que se llama a reduceRight siempre es el objeto [0,1,2,3,4]
+
+// Valor Devuelto: 10
+
+ +

Y si proporcionas un valorInicial, el resultado sería como este:

+ +
[0,1,2,3,4].reduceRight(function(valorPrevio, valorActual, indice, array){
+  return valorPrevio + currentValue;
+}, 10);
+
+// Primera llamada
+valorPrevio = 10, valorActual = 4, indice = 4
+
+// Segunda llamada
+valorPrevio = 14, valorActual = 3, indice = 3
+
+// Tercera llamada
+valorPrevio = 17, valorActual = 2, indice = 2
+
+// Cuarta llamada
+valorPrevio = 19, valorActual = 1, indice = 1
+
+// Quinta llamada
+valorPrevio = 20, valorActual = 0, indice = 0
+
+// el array sobre el que se llama a reduce siempre es el objeto [0,1,2,3,4]
+
+// Valor Devuelto: 20
+
+ +

Compatibilidad

+ +

reduceRight es una extensión de JavaScript al estándar ECMA-262; como tal puede que no esté presente en otras implementaciones del estándar. Puedes trabajar con ésto insertando el siguiente código al comienzo de tus scripts, permitiendo el uso de reduceRight en implementaciones de ECMA-262 que no lo implementan de modo nativo. Este algoritmo es exactamente el mismo usando en Firefox y SpiderMonkey.

+ +
if (!Array.prototype.reduceRight)
+{
+  Array.prototype.reduceRight = function(fun /*, inicial*/)
+  {
+    var longitud = this.length;
+    if (typeof fun != "function")
+      throw new TypeError();
+
+    // no se devuelve ningún valor si no hay valor inicial y el array está vacío
+    if (longitud == 0 && arguments.length == 1)
+      throw new TypeError();
+
+    var indice = longitud - 1;
+    if (arguments.length >= 2)
+    {
+      var rv = arguments[1];
+    }
+    else
+    {
+      do
+      {
+        if (indice in this)
+        {
+          rv = this[indice--];
+          break;
+        }
+
+        // si el array no contiene valores, no existe valor incial a devolver
+        if (--indice < 0)
+          throw new TypeError();
+      }
+      while (true);
+    }
+
+    for (; indice >= 0; indice--)
+    {
+      if (indice in this)
+        rv = fun.call(null, rv, this[indice], indice, this);
+    }
+
+    return rv;
+  };
+}
+
+ +

Ejemplos

+ +

Ejemplos: Resumir todos los valores de un array

+ +
var total = [0, 1, 2, 3].reduceRight(function(a, b) { return a + b; });
+// total == 6
+
+ +

Ejemplo: Integrar un array a partir de varios arrays

+ +
var integrado = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
+  return a.concat(b);
+}, []);
+// integrado es [4, 5, 2, 3, 0, 1]
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/reverse/index.html b/files/es/web/javascript/reference/global_objects/array/reverse/index.html new file mode 100644 index 0000000000..7399f8dcda --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/reverse/index.html @@ -0,0 +1,88 @@ +--- +title: Array.prototype.reverse() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/reverse +tags: + - Array + - JavaScript + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/reverse +--- +
{{JSRef}}
+ +

El método reverse() invierte el orden de los elementos de un array in place. El primer elemento pasa a ser el último y el último pasa a ser el primero.

+ +

{{EmbedInteractiveExample("pages/js/array-reverse.html")}}

+ +

Sintaxis

+ +
a.reverse()
+ +

Valor devuelto

+ +

El array invertido.

+ +

Descripción

+ +

El método reverse cruza los elementos del objeto matriz invocados en su lugar, mutando la matriz, y retornando una referencia a la misma.

+ +

Ejemplos

+ +

Colocar al revés los elementos de un array

+ +

El siguiente ejemplo crea un array a que contiene tres elementos y luego lo invierte.
+ La llamada a reverse() devuelve una referencia al array a invertido.

+ +
const a = [1, 2, 3];
+
+console.log(a); // [1, 2, 3]
+
+a.reverse();
+
+console.log(a); // [3, 2, 1]
+
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.4.4.8', 'Array.prototype.reverse')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}{{Spec2('ESDraft')}} 
+ + + +

{{Compat("javascript.builtins.Array.reverse")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/shift/index.html b/files/es/web/javascript/reference/global_objects/array/shift/index.html new file mode 100644 index 0000000000..7391f6c325 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/shift/index.html @@ -0,0 +1,124 @@ +--- +title: Array.prototype.shift() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/shift +translation_of: Web/JavaScript/Reference/Global_Objects/Array/shift +--- +
{{JSRef}}
+ +

El método shift() elimina el primer elemento del array y lo retorna. Este método modifica la longitud del array.

+ +

Sintaxis

+ +
arr.shift()
+ +

Descripción

+ +

El método shift elimina el elemento en el índice cero y desplaza los valores consecutivos hacia abajo, devolviendo el valor eliminado. Si la propiedad {{jsxref("Array.length", "length")}} es 0, devuelve {{jsxref("undefined")}}.

+ +

shift es genérico; este método puede utilizarse con {{jsxref("Function.call", "call", "", 1)}} o {{jsxref("Function.apply", "apply", "", 1)}} a objetos simliares a arrays. Los objetos que no tengan una propiedad length que refleje el último elemento de una serie consecutiva de propiedades numéricas con índice base cero pueden no comportarse de manera significativa.

+ +

Ejemplos

+ +

Eliminando un elemento de un array

+ +

El siguiente código muestra el contenido del array miPescado antes y después de eliminar el primer elemento. También muestra el elemento eliminado:

+ +
var miPescado = ['ángel', 'payaso', 'mandarín', 'cirujano'];
+
+console.log('miPescado antes: ' + miPescado);
+// "miPescado antes: ángel,payaso,mandarín,cirujano"
+
+var eliminado = miPescado.shift();
+
+console.log('miPescado después: ' + miPescado);
+// "miPescado after: payaso,mandarín,cirujano"
+
+console.log('Elemento eliminado: ' + eliminado);
+// "Elemento eliminado: ángel"
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial. Implementado en Javascript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.9', 'Array.prototype.shift')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.shift', 'Array.prototype.shift')}}{{Spec2('ES6')}}
+ + + +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("1.0")}}{{CompatGeckoDesktop("1.7")}}{{CompatIE("5.5")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/slice/index.html b/files/es/web/javascript/reference/global_objects/array/slice/index.html new file mode 100644 index 0000000000..e3ddd7e8a5 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/slice/index.html @@ -0,0 +1,287 @@ +--- +title: Array.prototype.slice() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/slice +tags: + - Arreglo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/slice +--- +
{{JSRef}}
+ +

El método slice() devuelve una copia de una parte del array dentro de un nuevo array empezando por inicio hasta fin (fin no incluido). El array original no se modificará.

+ +

El código fuente de esta demostración interactiva está alojado en un repositorio Github. Si desea contribuir con ella, por favor clone https://github.com/mdn/interactive-examples y envíenos un "pull request".

+ +

Sintaxis 

+ +
arr.slice([inicio [, fin]])
+ +

Parámetros

+ +
+
inicio
+
Índice donde empieza la extracción. El primer elemento corresponde con el índice  0.
+
Si el índice especificado es negativo, indica un desplazamiento desde el final del array. slice(-2)extrae los dos últimos elementos del array
+
Si inicio es omitido el valor por defecto es 0.
+
Si inicio es mayor a la longitud del array, se devuelve un array vacío.
+
fin
+
Índice  que marca el final de la extracción. slice extrae hasta, pero sin incluir el final.
+
slice(1,4) extrae desde el segundo elemento hasta el cuarto  (los elementos con índices 1, 2,  y 3).
+
Con un índice negativo, fin indica un desplazamiento desde el final de la secuencia. slice(2,-1) extrae desde el tercer hasta el penúltimo elemento en la secuencia.
+
Si fin es omitido, slice extrae hasta el final de la secuencia (arr.length).
+
Si fin es mayor a la longitud del array, slice extrae hasta el final de la secuencia (arr.length).
+
+ +

Valor de retorno

+ +

Un nuevo array con los valores extraídos.

+ +

Descripción

+ +

slice no modifica el array original. Devuelve una copia plana (shallow copy) de los elementos especificados del array original. Los elementos del array original son copiados en el array devuelto de la siguiente manera:

+ + + +

Si un nuevo elemento es agregado a cualquiera de los arrays, el otro array no es afectado.

+ +

Ejemplos

+ +

Ejemplo: Devolver una porción de un array existente

+ +
var nombres = ['Rita', 'Pedro', 'Miguel', 'Ana', 'Vanesa'];
+var masculinos = nombres.slice(1, 3);
+
+// masculinos contiene ['Pedro','Miguel']
+
+ +

Ejemplo: Utilizando slice

+ +

Presta especial atención a:

+ + + +

En el siguiente ejemplo, slice crea un nuevo array, nuevoCoche, de myCoche. Los dos incluyen una referncia al objecto miHonda se cambia a púrpura, ambas matrices reflejan el cambio.

+ +
var miHonda = { color: 'red', ruedas: 4, motor: { cilindros: 4, cantidad: 2.2 } };
+var miCoche = [miHonda, 2, 'Buen estado', 'comprado 1997'];
+var nuevoCoche = miCoche.slice(0, 2);
+
+//  Muestra los valores de myCar, newCar y el color de myHonda.
+console.log('miCoche = ' + JSON.stringify(miCoche));
+console.log('nuevoCoche = ' + JSON.stringify(nuevoCoche));
+console.log('miCoche[0].color = ' + miCoche[0].color);
+console.log('nuevoCoche[0].color = ' + nuevoCoche[0].color);
+
+// Cambia el color de miHonda.
+miHonda.color = 'azul';
+console.log('El nuevo color de mi Honda es ' + miHonda.color);
+
+// Muestra el color de myHonda referenciado desde ambos arrays. 
+console.log('miCoche[0].color = ' + miCoche[0].color);
+
+console.log('nuevoCoche[0].color = ' + nuevoCoche[0].color);
+ +

Este script escribe:

+ +
miCoche = [{color: 'rojo', ruedas: 4, motor: {cilindros: 4, cantidad: 2.2}}, 2,
+         'buen estado', 'comprado 1997']
+nuevoCoche = [{color: 'rojo', ruedas: 4, motor: {cilindros: 4, cantidad: 2.2}}, 2]
+miCoche[0].color = rojo
+nuevoCoche[0].color = rojo
+El nuevo color de miHonda es azul
+miCoche[0].color = azul
+nuevoCoche[0].color = azul
+ +

Objetos array-like

+ +
+

Se dice que un objeto es array-like ( similar o que se asemeja a un array) cuando entre sus propiedades existen algunas cuyos nombres son números y en particular tiene una propiedad llamada length. Este hecho  hace  suponer que el objeto es algún tipo de colección de elementos indexados por números. Es conveniente, a veces, convertir estos objetos a arrays para otorgarles la funcionalidad que de serie se incorpora en todos los arrays a través de su prototipo. 

+
+ +

El método slice puede ser usado para convertir objetos parecidos a arrays o colecciones a un nuevo Array. Simplemente debe enlazar el método al objeto. El  {{jsxref("Functions_and_function_scope/arguments", "arguments")}} dentro de una función es un ejemplo de un objeto parecido a arrays.

+ +
function list() {
+  return Array.prototype.slice.call(arguments, 0);
+}
+
+var list1 = list(1, 2, 3); // [1, 2, 3]
+
+ +

El enlazado puede realizarse con la función .call de  {{jsxref("Function.prototype")}} y puede ser abreviado también usando  [].slice.call(arguments) en lugar de Array.prototype.slice.call. En cualquier caso, puede ser simplificado usando {{jsxref("Function.prototype.bind", "bind")}}.

+ +
var unboundSlice = Array.prototype.slice;
+var slice = Function.prototype.call.bind(unboundSlice);
+
+function list() {
+  return slice(arguments, 0);
+}
+
+var list1 = list(1, 2, 3); // [1, 2, 3]
+
+ +

Coordinación del comportamiento entre navegadores

+ +

 

+ +

La especificación permite a los objetos del host  ( entre ellos los objetos del DOM )  ser dependientes de la implementación.  Esta NO obligatoriedad, origina diferencias en el comportamiento entre aquellos comprometidos con los estándares, como Mozilla, y los que no. En lo que concierne a  Array.prototype.slice , por lo tanto, existen importantes incompatibilidades en IE < 9 . Versiones de IE a partir de la 9 permiten un comportamiento compatible más fiable.  Se puede recurrir al  “shimming”  para alcanzar la compatibilidad en otros casos.  Mientras otros navegadores modernos continúan mejorando para soportar esta habilidad, en la forma en que actualmente lo hacen Mozilla, Chrome, Safari, Opera  e IE, los desarrolladores de código preocupados por el soporte DOM que confíen en este shim no deben dejarse engañar por la semántica, deben confiar de forma segura en ella para proporcionar el comportamiento estándar que aparentemente ahora es la norma.

+ +

El shim también soluciona que IE pueda tratar con el caso de que el segundo argumento de slice() pueda ser un valor {{jsxref("Global_Objects/null", "null")}}/{{jsxref("Global_Objects/undefined", "undefined")}} explícito. Esto era un problema en versiones anteriores de IE, pero todos los navegadores modernos, incluído IE >= 9, lo hacen actualmente.

+ +
/**
+ * Shim para "solucionar" la falta de soporte de IE (IE < 9) para aplicar slice
+ * sobre objetos del host, tal como NamedNodeMap, NodeList, y HTMLCollection
+ * (técnicamente, al ser los objetos del host dependientes de la implementación,
+ * al menos anteriormente a ES2015, IE no tenía la necesidad de trabajar de este modo).
+ * También funciona sobre strings, solucionando que IE < 9 admita un undefined explícito
+ * como segundo argumento (igual que en Firefox), y previniendo errores cuando se llama
+ * sobre otros objetos del DOM.
+ */
+(function () {
+  'use strict';
+  var _slice = Array.prototype.slice;
+
+  try {
+    // Fallará al usarse con elementos DOM en IE < 9
+    _slice.call(document.documentElement);
+  } catch (e) { // Fails in IE < 9
+    // Funcionará con arrays genuinos, objetos array-like,
+    // NamedNodeMap (attributes, entities, notations),
+    // NodeList (e.g., getElementsByTagName), HTMLCollection (e.g., childNodes),
+    // and will not fail on other DOM objects (as do DOM elements in IE < 9)
+    Array.prototype.slice = function(begin, end) {
+      // A IE < 9 no le gustan los undefined como argumento end.
+      end = (typeof end !== 'undefined') ? end : this.length;
+
+      // Con objetos Array nativos, podemos usar la función slice
+      if (Object.prototype.toString.call(this) === '[object Array]'){
+        return _slice.call(this, begin, end);
+      }
+
+      // Con objetos array-like debemos manejarlo por nuestra cuenta.
+      var i, cloned = [],
+        size, len = this.length;
+
+      // Maneja valores negativos para el argumento "inicio"
+      var start = begin || 0;
+      start = (start >= 0) ? start : Math.max(0, len + start);
+
+      // Maneja valores negativos para el argumento "fin"
+      var upTo = (typeof end == 'number') ? Math.min(end, len) : len;
+      if (end < 0) {
+        upTo = len + end;
+      }
+
+      // Tamaño esperado para el slice
+      size = upTo - start;
+
+      if (size > 0) {
+        cloned = new Array(size);
+        if (this.charAt) {
+          for (i = 0; i < size; i++) {
+            cloned[i] = this.charAt(start + i);
+          }
+        } else {
+          for (i = 0; i < size; i++) {
+            cloned[i] = this[start + i];
+          }
+        }
+      }
+
+      return cloned;
+    };
+  }
+}());
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoObservaciones
ECMAScript 3ª ediciónEstandarDefinición inicial Implementado en JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.10', 'Array.prototype.slice')}}{{Spec2('ES5.1')}} 
{{SpecName('ES2015', '#sec-array.prototype.slice', 'Array.prototype.slice')}}{{Spec2('ES2015')}} 
+ +

Compatibilidad con navegadores

+ +

La tabla de compatibilidad en esta página esta generada desde datos estructurados. Si desea contribuir con los datos, por favor "checkout" https://github.com/mdn/browser-compat-data  y envíenos un "pull request".

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("1.0")}}{{CompatGeckoDesktop("1.7")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también 

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/some/index.html b/files/es/web/javascript/reference/global_objects/array/some/index.html new file mode 100644 index 0000000000..d04b57b025 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/some/index.html @@ -0,0 +1,204 @@ +--- +title: Array.prototype.some() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/some +tags: + - Array + - ECMAScript5 + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/some +--- +
{{JSRef}}
+ +

El método some() comprueba si al menos un elemento del array cumple con la condición implementada por la función proporcionada.

+ +
+

Nota: Este método devuelve false para cualquier condición puesta en un array vacío.

+
+ +
{{EmbedInteractiveExample("pages/js/array-some.html")}}
+ +

Sintaxis

+ +
arr.some(callback(element[, index[, array]])[, thisArg])
+ +

Parámetros

+ +
+
callback
+
Función que verifica cada elemento, toma tres argumentos: +
+
element
+
El elemento actual siendo procesado en el array.
+
index {{Optional_inline}}
+
El índice del elemento del array que se está procesando.
+
array {{Optional_inline}}
+
El array sobre el que ha sido llamada la función some().
+
+
+
thisArg {{Optional_inline}}
+
Valor a usar como this cuando se ejecute callback.
+
+ +

Valor devuelto

+ +

true si la función callback devuelve un valor {{Glossary("truthy")}} para cualquier elemento del array; en caso contrario, false.

+ +

Descripción

+ +

some() ejecuta la función callback una vez por cada elemento presente en el array hasta que encuentre uno donde callback retorna un valor verdadero (true). Si se encuentra dicho elemento, some() retorna true inmediatamente. Si no, some() retorna false. callback es invocada sólo para los índices del array que tienen valores asignados; no es invocada para índices que han sido borrados o a los que nunca se les han asignado valores.

+ +

callback es invocada con tres argumentos: el valor del elemento, el índice del elemento, y el objeto array sobre el que se itera.

+ +

Si se indica un parámetro thisArg a some(), se pasará a callback cuando es invocada, para usar como valor this. Si no, el valor {{jsxref("undefined")}} será pasado para usar como valor this. El valor this value observable por callback se determina de acuerdo a las reglas habituales para determinar el this visible por una función.

+ +

some() no modifica el array con el cual fue llamada.

+ +

El rango de elementos procesados por some() es configurado antes de la primera invocación de callback. Los elementos anexados al array luego de que comience la llamada a some() no serán visitados por callback. Si un elemento existente y no visitado del array es alterado por callback, su valor pasado al callback será el valor al momento que some() visita el índice del elemento; los elementos borrados no son visitados.

+ +

Ejemplos

+ +

Verificando el valor de los elementos de un array

+ +

El siguiente ejemplo verifica si algún elemento del array es mayor a 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
+
+ +

Verificando los elementos de un array usando funciones flecha

+ +

Las funciones flecha (Arrow functions) brindan una sintáxis más corta para el mismo test.

+ +
[2, 5, 8, 1, 4].some(elem => elem > 10);  // false
+[12, 5, 8, 1, 4].some(elem => elem > 10); // true
+
+ +

Comprobando si un elemento existe en un array

+ +

Para imitar la función del método includes(), esta función personalizada devuelve true si el elemento existe en el array:

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

Comprobando si un elemento existe en un array con funciones flecha

+ +
var fruits = ['apple', 'banana', 'mango', 'guava'];
+
+function checkAvailability(arr, val) {
+  return arr.some(arrVal => val === arrVal);
+}
+
+checkAvailability(fruits, 'kela');   // false
+checkAvailability(fruits, 'banana'); // true
+ +

Convirtiendo cualquier valor a Boolean

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

Polyfill

+ +

some() fue agregado al estándar ECMA-262 en la 5ta edición; por ello, puede no estar presente en todas las implementaciones del estándar. Puedes trabajar sobre esto insertando el siguiente código al comienzo de tus scripts, permitiendo el uso de some() en implementaciones que no tienen soporte nativo. Este algoritmo es exactamente el mismo especificado en ECMA-262, 5ta edición, asumiendo que {{jsxref("Global_Objects/Object", "Object")}} y {{jsxref("Global_Objects/TypeError", "TypeError")}} tienen sus valores originales y que fun.call evalúa el valor original de{{jsxref("Function.prototype.call()")}}.

+ +
// Pasos de producción de ECMA-262, Edición 5, 15.4.4.17
+// Referencia: 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;
+
+    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
+    for (var i = 0; i < len; i++) {
+      if (i in t && fun.call(thisArg, t[i], i, t)) {
+        return true;
+      }
+    }
+
+    return false;
+  };
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.4.4.17', 'Array.prototype.some')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.some', 'Array.prototype.some')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.some', 'Array.prototype.some')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.some")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/sort/index.html b/files/es/web/javascript/reference/global_objects/array/sort/index.html new file mode 100644 index 0000000000..ac28826327 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/sort/index.html @@ -0,0 +1,301 @@ +--- +title: Array.prototype.sort() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/sort +tags: + - Array + - JavaScript + - Método(2) + - Prototipo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/sort +--- +
{{JSRef}}
+ +

El método sort() ordena los elementos de un arreglo (array) localmente y devuelve el arreglo ordenado. La ordenación no es necesariamente estable. El modo de ordenación por defecto responde a la posición del valor del string de acuerdo a su valor Unicode.

+ +

La fuente de este ejemplo interactivo se almacena en un repositorio de GitHub. Si desea contribuir al proyecto de ejemplos interactivos, clone https://github.com/mdn/interactive-examples y envíenos una solicitud de extracción (pull request).

+ +

Sintaxis

+ +
arr.sort([compareFunction])
+ +

Parámetros

+ +
+
compareFunction
+
Opcional. Especifica una función que define el modo de ordenamiento. Si se omite, el array es ordenado atendiendo a la posición del valor Unicode de cada caracter, según la conversión a string de cada elemento.
+
firstEl
+
El primer elemento a comparar.
+
secondEl
+
El segundo elemento a comparar.
+
+ +

Valor devuelto

+ +

El array ordenado.

+ +

Descripción

+ +

Si no se provee compareFunction, los elementos son ordenados convirtiéndolos a strings y comparando la posición del valor Unicode de dichos strings. Por ejemplo, "Cherry" viene antes que "banana"  (porque las mayúsculas van antes que las minúsculas en la codificación Unicode) . En un ordenamiento numérico, 9 está antes que 80, pero dado que los números son convertidos a strings y ordenados según el valor Unicode, el resultado será "80" antes que "9".

+ +
var frutas = ['guindas', 'manzanas', 'bananas'];
+frutas.sort(); // ['bananas', 'guindas', 'manzanas']
+
+var puntos = [1, 10, 2, 21];
+puntos.sort(); // [1, 10, 2, 21]
+// Tenga en cuenta que 10 viene antes que 2
+// porque '10' viene antes que '2' según la posición del valor Unicode.
+
+var cosas = ['word', 'Word', '1 Word', '2 Words'];
+cosas.sort(); // ['1 Word', '2 Words', 'Word', 'word']
+// En Unicode, los números vienen antes que las letras mayúsculas
+// y estas vienen antes que las letras minúsculas.
+
+ +

Si se provee compareFunction, los elementos del array son ordenados de acuerdo al valor que retorna dicha función de comparación. Siendo a y b dos elementos comparados, entonces:

+ + + +

Entonces, la función de comparación tiene la siguiente forma:

+ +
function compare(a, b) {
+  if (a es menor que b según criterio de ordenamiento) {
+    return -1;
+  }
+  if (a es mayor que b según criterio de ordenamiento) {
+    return 1;
+  }
+  // a debe ser igual b
+  return 0;
+}
+
+ +

Para comparar números en lugar de strings, la función de comparación puede simplemente restar b de a. La siguiente función ordena el array de modo ascendente:

+ +
function compareNumbers(a, b) {
+  return a - b;
+}
+
+ +

El metodo sort puede ser usado convenientemente con {{jsxref("Operators/function", "function expressions", "", 1)}} (y closures):

+ +
var numbers = [4, 2, 5, 1, 3];
+numbers.sort(function(a, b) {
+  return a - b;
+});
+console.log(numbers);
+
+
+ +
// [1, 2, 3, 4, 5]
+ +

Los objectos pueden ser ordenados por el valor de una de sus propiedades.

+ +
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) {
+  if (a.name > b.name) {
+    return 1;
+  }
+  if (a.name < b.name) {
+    return -1;
+  }
+  // a must be equal to b
+  return 0;
+});
+
+ +

Ejemplos

+ +

Ordenando un array

+ +

Un array de elementos string, sin especificar una función de comparación:

+ +
var arr = [ 'a', 'b', 'Z', 'Aa', 'AA' ];
+arr.sort();  //[ 'AA', 'Aa', 'Z', 'a', 'b' ]
+
+ +

Un array de elementos numéricos,  sin función de comparación:

+ +
var arr = [ 40, 1, 5, 200 ];
+arr.sort();  //[ 1, 200, 40, 5 ]
+
+ +

Un array de elementos numéricos, usando una función de comparación:

+ +
var arr = [ 40, 1, 5, 200 ];
+function comparar ( a, b ){ return a - b; }
+arr.sort( comparar );  // [ 1, 5, 40, 200 ]
+ +

Lo mismo pero usando una función anónima normal:

+ +
var arr = [ 40, 1, 5, 200 ];
+arr.sort(function(a,b){return a - b;});  // [ 1, 5, 40, 200 ]
+ +

Lo mismo escrito más compacto mediante una función flecha:

+ +
var arr = [ 40, 1, 5, 200 ];
+arr.sort((a,b)=>a-b);  // [ 1, 5, 40, 200 ]
+ +

+ +

Creando, mostrando, y ordenando un array

+ +

El siguiente ejemplo abunda en la idea de ordenar con y sin función de comparación. Además, ilustra una manera de mostrar un array una vez creado. El método join es usado para convertir el array en una cadena de texto que imprimir. Al no pasarle un argumento que indique el separador, usará la coma por defecto para separar los elementos del array dentro de la cadena.

+ +
var arr = ['80', '9', '700', 40, 1, 5, 200];
+function comparar(a, b) {
+  return a - b;
+}
+console.log('original:', arr.join());
+console.log('ordenado sin función:', arr.sort());
+console.log('ordenado con función:', arr.sort(comparar));
+
+ +

El ejemplo produce el siguiente resultado. Como muestra la salida, cuando una función de comparación es usada, los números se ordenan correctamente, sean estos valores numéricos o strings numéricos.

+ +
original: 80,9,700,40,1,5,200
+ordenado sin función: 1,200,40,5,700,80,9
+ordenado con función: 1,5,9,40,80,200,700
+
+ +

Ordenando caracteres no ASCII

+ +

Para ordenar strings con characters no ASCII, i.e. strings con caracteres con acento (e, é, è, a, ä, etc.), strings de lenguajes diferentes al inglés: use {{jsxref("String.localeCompare")}}. Esta función puede comparar esos caracteres para que aparezcan en el orden correcto.

+ +
var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
+items.sort(function (a, b) {
+  return a.localeCompare(b);
+});
+
+// items is ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']
+
+ +

Ordenando con map

+ +

La compareFunction puede ser invocada múltiples veces por elemento dentro del array. Dependiendo de la naturaleza de compareFunction, este puede resultar en una alta penalización de rendimiento. Cuanto más trabajo hace una compareFunction y más elementos hay para ordenar, resulta más recomendable usar una función map para ordenar. La idea es recorrer el array una sola vez para extraer los valores usados para ordenar en un array temporal, ordenar el array temporal y luego recorrer el array para lograr el orden correcto.

+ +
// el array a ordenar
+var list = ['Delta', 'alpha', 'CHARLIE', 'bravo'];
+
+// array temporal contiene objetos con posición y valor de ordenamiento
+var mapped = list.map(function(el, i) {
+  return { index: i, value: el.toLowerCase() };
+})
+
+// ordenando el array mapeado que contiene los valores reducidos
+mapped.sort(function(a, b) {
+  if (a.value > b.value) {
+    return 1;
+  }
+  if (a.value < b.value) {
+    return -1;
+  }
+  return 0;
+});
+
+// contenedor para el orden resultante
+var result = mapped.map(function(el){
+  return list[el.index];
+});
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
ECMAScript 1st EditionStandardDefinicióñ inicial.
{{SpecName('ES5.1', '#sec-15.4.4.11', 'Array.prototype.sort')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.sort', 'Array.prototype.sort')}}{{Spec2('ES6')}}
+ +

Compatibilidad en navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome("1.0")}}{{CompatGeckoDesktop("1.7")}}{{CompatIE("5.5")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Compatibilidad en navegadores

+ +

La tabla de compatibilidad en esta página es generada por una data estructurada. Si deseas contribuir a la data, por favor entra a https://github.com/mdn/browser-compat-data y envíanos un pull request.

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/splice/index.html b/files/es/web/javascript/reference/global_objects/array/splice/index.html new file mode 100644 index 0000000000..5d7992a2c4 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/splice/index.html @@ -0,0 +1,148 @@ +--- +title: Array.prototype.splice() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/splice +tags: + - Array + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/splice +--- +
{{JSRef}}
+ +

El método splice() cambia el contenido de un array eliminando elementos existentes y/o agregando nuevos elementos.

+ +

{{EmbedInteractiveExample("pages/js/array-splice.html")}}

+ +

Sintaxis

+ +
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
+
+ +

Parámetros

+ +
+
start
+
Índice donde se comenzará a cambiar el array (con 0 como origen). Si es mayor que la longitud del array, el punto inicial será la longitud del array. Si es negativo, empezará esa cantidad de elementos contando desde el final.
+
deleteCount {{optional_inline}}
+
Un entero indicando el número de elementos a eliminar del array antiguo.
+
Si deleteCount se omite, o si su valor es mayor que arr.length - start (esto significa, si es mayor que el número de elementos restantes del array, comenzando desde start), entonces todos los elementos desde start hasta el final del array serán eliminados.
+
Si deleteCount es igual a 0 o negativo, no se eliminará ningún elemento. En este caso, se debe especificar al menos un nuevo elemento (ver más abajo).
+
item1, item2, ...  {{optional_inline}}
+
Los elementos que se agregarán al array, empezando en el índice start. Si no se especifica ningún elemento, splice() solamente eliminará elementos del array.
+
+ +

Valor devuelto

+ +

Un array que contiene los elementos eliminados. Si sólo se ha eliminado un elemento, devuelve un array con un solo elemento. Si no se ha eliminado ningún elemento, devuelve un array vacío.

+ +

Descripción

+ +

Si especifica un número diferente de elementos a agregar que los que se eliminarán, el array tendrá un tamaño diferente al original una vez finalizada la llamada.

+ +

Ejemplos

+ +

Eliminar 0 elementos desde el índice 2 e insertar "drum"

+ +
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
+var removed = myFish.splice(2, 0, 'drum');
+
+// myFish is ["angel", "clown", "drum", "mandarin", "sturgeon"]
+// removed is [], no elements removed
+
+ +

Eliminar 1 elemento desde el índice 3

+ +
var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'];
+var removed = myFish.splice(3, 1);
+
+// removed is ["mandarin"]
+// myFish is ["angel", "clown", "drum", "sturgeon"]
+
+ +

Eliminar 1 elemento desde el índice 2 e insertar "trumpet"

+ +
var myFish = ['angel', 'clown', 'drum', 'sturgeon'];
+var removed = myFish.splice(2, 1, 'trumpet');
+
+// myFish is ["angel", "clown", "trumpet", "sturgeon"]
+// removed is ["drum"]
+ +

Eliminar 2 elementos desde el índice 0 e insertar "parrot", "anemone" y "blue"

+ +
var myFish = ['angel', 'clown', 'trumpet', 'sturgeon'];
+var removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue');
+
+// myFish is ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
+// removed is ["angel", "clown"]
+ +

Eliminar 2 elementos desde el índice 2

+ +
var myFish = ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon'];
+var removed = myFish.splice(myFish.length - 3, 2);
+
+// myFish is ["parrot", "anemone", "sturgeon"]
+// removed is ["blue", "trumpet"]
+ +

Eliminar 1 elemento desde el índice -2

+ +
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
+var removed = myFish.splice(-2, 1);
+
+// myFish is ["angel", "clown", "sturgeon"]
+// removed is ["mandarin"]
+ +

Eliminar todos los elementos tras el índice 2 (incl.)

+ +
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
+var removed = myFish.splice(2);
+
+// myFish is ["angel", "clown"]
+// removed is ["mandarin", "sturgeon"]
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Initial definition. Implemented in JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.12', 'Array.prototype.splice')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.splice', 'Array.prototype.splice')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.splice', 'Array.prototype.splice')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.splice")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/tolocalestring/index.html b/files/es/web/javascript/reference/global_objects/array/tolocalestring/index.html new file mode 100644 index 0000000000..0fc418ab47 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/tolocalestring/index.html @@ -0,0 +1,177 @@ +--- +title: Array.prototype.toLocaleString() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/toLocaleString +translation_of: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString +--- +
{{JSRef}}
+ +

El método toLocaleString() devuelve una cadena de texto representando los elementos del array. Los elementos son convertidos a texto usando su método toLocaleString  y dichos Strings son separados por un caracter específico para la localidad (como una coma para la separación de decimales “,”).

+ +
{{EmbedInteractiveExample("pages/js/array-tolocalestring.html")}}
+ +

Sintaxis

+ +
arr.toLocaleString([locales[, options]]);
+
+ +

Parámetros

+ +
+
locales {{optional_inline}}
+
Una cadena de texto con una etiqueta de idioma BCP 47, o un array de dichos strings. Para la forma general e interpretación the los argumentos locales, ver la página {{jsxref("Intl")}}.
+
options {{optional_inline}}
+
Un objeto con las configuraciones, para números ver {{jsxref("Number.prototype.toLocaleString()")}}, y para fechas ver {{jsxref("Date.prototype.toLocaleString()")}}.
+
+ +

Valor de retorno

+ +

Una cadena de texto representando los elementos del array.

+ +

Ejemplos

+ +

Usando locales y options

+ +

Los elementos del array son convertidos a strings usando sus métodos toLocaleString.

+ + + +

Siempre mostrar la moneda para los strings y números en el array precios:

+ +
var precios = ['$7', 500, 8123, 12];
+precios.toLocaleString('es-AR', { style: 'currency', currency: 'ARS' });
+
+// "$7, $500, $8.123, $12"
+
+ +

Para más ejemplos, ver también {{jsxref("Intl")}}, {{jsxref("NumberFormat")}}, y {{jsxref("DateTimeFormat")}}.

+ +

Polyfill

+ +
// https://tc39.github.io/ecma402/#sup-array.prototype.tolocalestring
+if (!Array.prototype.toLocaleString) {
+  Object.defineProperty(Array.prototype, 'toLocaleString', {
+    value: function(locales, options) {
+      // 1. Let O be ? ToObject(this value).
+      if (this == null) {
+        throw new TypeError('"this" is null or not defined');
+      }
+
+      var a = Object(this);
+
+      // 2. Let len be ? ToLength(? Get(A, "length")).
+      var len = a.length >>> 0;
+
+      // 3. Let separator be the String value for the
+      //    list-separator String appropriate for the
+      //    host environment's current locale (this is
+      //    derived in an implementation-defined way).
+      // NOTE: In this case, we will use a comma
+      var separator = ',';
+
+      // 4. If len is zero, return the empty String.
+      if (len === 0) {
+        return '';
+      }
+
+      // 5. Let firstElement be ? Get(A, "0").
+      var firstElement = a[0];
+      // 6. If firstElement is undefined or null, then
+      //  a.Let R be the empty String.
+      // 7. Else,
+      //  a. Let R be ?
+      //     ToString(?
+      //       Invoke(
+      //        firstElement,
+      //        "toLocaleString",
+      //        « locales, options »
+      //       )
+      //     )
+      var r = firstElement == null ?
+        '' : firstElement.toLocaleString(locales, options);
+
+      // 8. Let k be 1.
+      var k = 1;
+
+      // 9. Repeat, while k < len
+      while (k < len) {
+        // a. Let S be a String value produced by
+        //   concatenating R and separator.
+        var s = r + separator;
+
+        // b. Let nextElement be ? Get(A, ToString(k)).
+        var nextElement = a[k];
+
+        // c. If nextElement is undefined or null, then
+        //   i. Let R be the empty String.
+        // d. Else,
+        //   i. Let R be ?
+        //     ToString(?
+        //       Invoke(
+        //        nextElement,
+        //        "toLocaleString",
+        //        « locales, options »
+        //       )
+        //     )
+        r = nextElement == null ?
+          '' : nextElement.toLocaleString(locales, options);
+
+        // e. Let R be a String value produced by
+        //   concatenating S and R.
+        r = s + r;
+
+        // f. Increase k by 1.
+        k++;
+      }
+
+      // 10. Return R.
+      return r;
+    }
+  });
+}
+
+ +

Si necesitas soportar motores de JavaScript obsoletos que no compatibilizan con Object.defineProperty, es mejor no utilizar los métodos Array.prototype, ya que no se pueden hacer no-enumerables.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ESDraft', '#sec-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}{{Spec2('ESDraft')}}La definicion original fue en ECMAScript 3.
{{SpecName('ES Int Draft', '#sup-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}{{Spec2('ES Int Draft')}}Esta definición reemplaza la proporcionada en ECMA-262.
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.toLocaleString")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/tosource/index.html b/files/es/web/javascript/reference/global_objects/array/tosource/index.html new file mode 100644 index 0000000000..ffd8df0b3b --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/tosource/index.html @@ -0,0 +1,112 @@ +--- +title: Array.prototype.toSource() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/toSource +translation_of: Web/JavaScript/Reference/Global_Objects/Array/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

El método toSource() devuelve un string representando el código fuente de un arreglo.

+ +

Sintaxis

+ +
arr.toSource()
+ +

Valor devuelto

+ +

Un string representando el código fuente del arreglo.

+ +

Descripción

+ +

El método toSourcer retorna los siguientes valores:

+ + + +

Este método suele ser llamado internamente por JavaScript y no explícitamente en código. Puede usar toSource mientras depura para examinar el contenido de un arreglo.

+ +

Ejemplos

+ +

Examinar el código fuente de un arreglo

+ +

Para examinar el código fuente de un arreglo:

+ +
var alpha = new Array('a', 'b', 'c');
+
+alpha.toSource();
+//devuelve ['a', 'b', 'c']
+
+ +

Especificaciones

+ +

No hace parte de ningún estándar. Implementado en JavaScript 1.3.

+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatNo}}{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básicot{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/tostring/index.html b/files/es/web/javascript/reference/global_objects/array/tostring/index.html new file mode 100644 index 0000000000..402f011e0f --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/tostring/index.html @@ -0,0 +1,78 @@ +--- +title: Array.prototype.toString() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/toString +tags: + - Array + - JavaScript + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/toString +--- +
{{JSRef}}
+ +

El método toString() devuelve una cadena de caracteres representando el array especificado y sus elementos.

+ +

{{EmbedInteractiveExample("pages/js/array-tostring.html")}}

+ +

Sintaxis 

+ +
arr.toString()
+ +

Valor devuelto

+ +

Una cadena de caracteres representando los elementos del array.

+ +

Descripción

+ +

El objeto {{jsxref("Array")}} sustituye al método toString de {{jsxref("Object")}}. Para los objetos Array, el método toString une el array y devuelve una cadena de caracteres que contiene cada elemento del array separado por comas.

+ +

JavaScript llama al método toString automáticamente cuando un array va a ser representado como un valor de texto o cuando se referencia a un array en una concatenación de caracteres.

+ +

Semántica de ECMAScript 5 

+ +

Desde JavaScript 1.8.5 (Firefox 4), y consistente con la 5ª edición de semántica de ECMAScript, el método toString() es genérico y puede ser usado con cualquier objeto. {{jsxref("Object.prototype.toString()")}} será llamado y devolverá el valor resultante.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.4.4.2', 'Array.prototype.toString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.tostring', 'Array.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.tostring', 'Array.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Array.toString")}}

+
> + +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/unshift/index.html b/files/es/web/javascript/reference/global_objects/array/unshift/index.html new file mode 100644 index 0000000000..4641a05d98 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/unshift/index.html @@ -0,0 +1,100 @@ +--- +title: Array.prototype.unshift() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/unshift +tags: + - Array + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/unshift +--- +
{{JSRef}}
+ +

El método unshift() agrega uno o más elementos al inicio del array, y devuelve la nueva longitud del array.

+ +

{{EmbedInteractiveExample("pages/js/array-unshift.html")}}

+ +

Sintaxis

+ +
arr.unshift(elemento1[, ...[, elementoN]])
+ +

Parámetros

+ +
+
elementoN
+
Elementos a agregar al inicio del array.
+
+ +

Devuelve

+ +

La nueva propiedad {{jsxref("Array.length", "length")}} del objeto sobre el cual el método fue llamado.

+ +

Descripción

+ +

El método unshift inserta los valores proporcionados al inicio de un objeto del tipo array.

+ +

unshift es intencionalmente genérico; este método puede ser {{jsxref("Function.call", "called", "", 1)}} o {{jsxref("Function.apply", "applied", "", 1)}} a objetos similares a arrays. Objetos que no contengan una propiedad length reflejando una serie de propiedades numéricas consecutivas, comenzada a partir del cero, pueden no comportarse de una manera comprensible.

+ +

Ejemplos

+ +
var arr = [1, 2];
+
+arr.unshift(0); // resultado de la llamada es 3, la nueva longitud del array
+// arr es [0, 1, 2]
+
+arr.unshift(-2, -1); // = 5
+// arr es [-2, -1, 0, 1, 2]
+
+arr.unshift([-3]);
+// arr es [[-3], -2, -1, 0, 1, 2]
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónStatusComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Initial definition. Implemented in JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.13', 'Array.prototype.unshift')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.unshift', 'Array.prototype.unshift')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.unshift', 'Array.prototype.unshift')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ +
+ + +

{{Compat("javascript.builtins.Array.unshift")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/array/values/index.html b/files/es/web/javascript/reference/global_objects/array/values/index.html new file mode 100644 index 0000000000..dbc76e8634 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/array/values/index.html @@ -0,0 +1,82 @@ +--- +title: Array.prototype.values() +slug: Web/JavaScript/Referencia/Objetos_globales/Array/values +tags: + - Array + - ECMAScript 2015 + - Iterador + - JavaScript + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Array/values +--- +
{{JSRef}}
+ +

El método values() devuelve un nuevo objeto Array Iterator que contiene los valores para cada índice del array.

+ +
var a = ['w', 'y', 'k', 'o', 'p'];
+var iterator = a.values();
+
+console.log(iterator.next().value); // w 
+console.log(iterator.next().value); // y 
+console.log(iterator.next().value); // k 
+console.log(iterator.next().value); // o 
+console.log(iterator.next().value); // p
+
+ +

Sintaxis

+ +
arr.values()
+
+ +

Valor devuelto

+ +

Un nuevo objeto {{jsxref("Array")}} iterator.

+ +

Ejemplos

+ +

Iteración usando un bucle for...of

+ +
var arr = ['w', 'y', 'k', 'o', 'p'];
+var iterador = arr.values();
+
+for (let letra of iterador) {
+  console.log(letra);
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-array.prototype.values', 'Array.prototype.values')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-array.prototype.values', 'Array.prototype.values')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{Compat("javascript.builtins.Array.values")}}
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/arraybuffer/@@species/index.html b/files/es/web/javascript/reference/global_objects/arraybuffer/@@species/index.html new file mode 100644 index 0000000000..ab87242260 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/arraybuffer/@@species/index.html @@ -0,0 +1,72 @@ +--- +title: 'get ArrayBuffer[@@species]' +slug: Web/JavaScript/Referencia/Objetos_globales/ArrayBuffer/@@species +tags: + - ArrayBuffer + - JavaScript + - Propiedad + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species +--- +
{{JSRef}}
+ +

La propiedad de acceso ArrayBuffer[@@species] devuelve el constructor ArrayBuffer.

+ +

Sintaxis

+ +
ArrayBuffer[Symbol.species]
+
+ +

Descripción

+ +

La propiedad de acceso species devuelve el constructor predeterminado para los objetos ArrayBuffer. Los constructores de subclase pueden anularlo para cambiar la asignación del constructor.

+ +

Ejemplos

+ +

La propiedad species devuelve la función constructora predeterminada, que es el constructor ArrayBuffer para los objetos ArrayBuffer:

+ +
ArrayBuffer[Symbol.species]; // función ArrayBuffer()
+ +

En un objeto de colección derivado (por ejemplo, su búfer de array personalizado MyArrayBuffer), MyArrayBuffer species es el constructor MyArrayBuffer. Sin embargo, es posible que desee sobrescribir esto para devolver objetos ArrayBuffer principales en sus métodos de clase derivados:

+ +
class MyArrayBuffer extends ArrayBuffer {
+  // Overwrite MyArrayBuffer species to the parent ArrayBuffer constructor
+  static get [Symbol.species]() { return ArrayBuffer; }
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.ArrayBuffer.@@species")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html b/files/es/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html new file mode 100644 index 0000000000..e553024b1e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html @@ -0,0 +1,70 @@ +--- +title: ArrayBuffer.prototype.byteLength +slug: Web/JavaScript/Referencia/Objetos_globales/ArrayBuffer/byteLength +tags: + - ArrayBuffer + - JavaScript + - Propiedad + - Prototipo +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength +--- +
{{JSRef}}
+ +

La propiedad de acceso byteLength representa la longitud de {{jsxref("ArrayBuffer")}} en bytes.

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-bytelength.html")}}
+ + + +

Sintaxis

+ +
arraybuffer.byteLength
+ +

Descripción

+ +

La propiedad byteLength es una propiedad de acceso cuya función de acceso de conjunto es undefined, lo que significa que solo puede leer esta propiedad. El valor se establece cuando la matriz se construye y no se puede cambiar. Esta propiedad devuelve 0 si este ArrayBuffer ha sido separado.

+ +

Ejemplos

+ +
var buffer = new ArrayBuffer(8);
+buffer.byteLength; // 8
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Reemplazado por ECMAScript 2015.
{{SpecName('ES2015', '#sec-get-arraybuffer.prototype.bytelength', 'ArrayBuffer.prototype.byteLength')}}{{Spec2('ES2015')}}Definición inicial en un estándar ECMA.
{{SpecName('ESDraft', '#sec-get-arraybuffer.prototype.bytelength', 'ArrayBuffer.prototype.byteLength')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.byteLength")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/arraybuffer/index.html b/files/es/web/javascript/reference/global_objects/arraybuffer/index.html new file mode 100644 index 0000000000..4a83b5a24d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/arraybuffer/index.html @@ -0,0 +1,139 @@ +--- +title: ArrayBuffer +slug: Web/JavaScript/Referencia/Objetos_globales/ArrayBuffer +tags: + - ArrayBuffer + - Constructor + - JavaScript + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer +--- +
{{JSRef}}
+ +

El objeto ArrayBuffer se usa para representar un buffer genérico, de datos binarios crudos (raw) con una longitud específica. No se puede manipular directamente el contenido de un ArrayBuffer; sin embargo, puedes crear uno de los arrays tipados o un objeto {{jsxref("DataView")}} que representa el buffer en un formato especifico, y usarlo para leer y escribir el contenido del buffer.

+ +

{{EmbedInteractiveExample("pages/js/arraybuffer-constructor.html")}}

+ +

Sintaxis

+ +
new ArrayBuffer(length)
+
+ +

Parámetros

+ +
+
length
+
El tamaño en bytes, del array buffer que quieres crear.
+
+ +

Valor de retorno

+ +

Un nuevo objeto ArrayBuffer de tamaño específico. Su contenido se inicializa a cero.

+ +

Excepciones

+ +

Se lanza un {{jsxref("RangeError")}} si la longitud (length) es mayor que {{jsxref("Number.MAX_SAFE_INTEGER")}} (> = 2 ** 53) o negativa.

+ +

Descripción

+ +

El constructor de ArrayBuffer crea un nuevo ArrayBuffer del tamaño especificado en bytes.

+ +

Obtener un array buffer sobre datos existentes

+ + + +

Propiedades

+ +
+
ArrayBuffer.length
+
El tamaño de constructor de ArrayBuffer cuyo valor es 1.
+
{{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}}
+
La función de constructor que se usa para crear objetos derivados.
+
{{jsxref("ArrayBuffer.prototype")}}
+
Permite añadir propiedades a todos los objetos ArrayBuffer.
+
+ +

Métodos

+ +
+
{{jsxref("ArrayBuffer.isView", "ArrayBuffer.isView(arg)")}}
+
Devuelve true si arg es una de las vistas de ArrayBuffer, como pueden ser los arrays tipados o un {{jsxref("DataView")}}. Sino devuelve false.
+
{{jsxref("ArrayBuffer.transfer", "ArrayBuffer.transfer(oldBuffer [, newByteLength])")}} {{experimental_inline}}
+
+
Devuelve un nuevo ArrayBuffer cuyo contenido se toma de los datos de oldBuffer y luego es truncado o extendido por cero por newByteLength.
+
+
+ +

Instancias

+ +

Todas las instancias de ArrayBuffer heredan de {{jsxref("ArrayBuffer.prototype")}}.

+ +

Propiedades

+ +

{{page('es/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/prototype','Propiedades')}}

+ +

Métodos

+ +

{{page('es/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/prototype','Métodos')}}

+ +
+
{{jsxref("ArrayBuffer.slice()")}} {{non-standard_inline}}
+
Tiene la misma funcionalidad que {{jsxref("ArrayBuffer.prototype.slice()")}}.
+
+ +

Ejemplo

+ +

En este ejemplo creamos un buffer de 8-bytes con una vista del tipo {{jsxref("Global_Objects/Int32Array", "Int32Array")}} referenciando dicho buffer:

+ +
var buffer = new ArrayBuffer(8);
+var view   = new Int32Array(buffer);
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Sustituida por ECMAScript 6.
{{SpecName('ES6', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}{{Spec2('ES6')}}Definición inicial en un estándar ECMA. Especifica que new es obligatorio.
{{SpecName('ESDraft', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +

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

+ +

Notas de compatibilidad

+ +

Desde el ECMAScript 2015, los constructores de ArrayBuffer requieren ser instanciados usando el operador {{jsxref("Operators/new", "new")}}. Ejecutar el constructor de un ArrayBuffer como una funciónsin el new, lanzará un {{jsxref("TypeError")}} de ahora en adelante.

+ +
var dv = ArrayBuffer(10);
+// TypeError: llamar al constructor ArrayBuffer sin new está prohibido
+ +
var dv = new ArrayBuffer(10);
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/asyncfunction/index.html b/files/es/web/javascript/reference/global_objects/asyncfunction/index.html new file mode 100644 index 0000000000..bdb37b012c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/asyncfunction/index.html @@ -0,0 +1,122 @@ +--- +title: Funciones asíncronas +slug: Web/JavaScript/Referencia/Objetos_globales/Funcionesasíncronas +translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction +--- +
{{JSRef}}
+ +
El constructor de las funciones asíncronas crea un nuevo objecto {{jsxref("Statements/async_function", "async function")}}. En JavaScript cada función asíncrona es un objeto AsyncFunction.
+ +
+ +
Nota: AsyncFunction no es un objeto global. Este puede ser obtenido como resultado del siguiente código.
+ +
+ +
Object.getPrototypeOf(async function(){}).constructor
+
+ +

Syntax

+ +
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
+ +

Parametros

+ +
+
arg1, arg2, ... argN
+
Nombres a ser usados por la función como los nombres de los argumentos. Cada uno debe ser una cadena que corresponda a un identificador válido en JavaScript o una lista de cadenas separadas por coma, ejemplo: "x", "theValue", or "a,b".
+
functionBody
+
Una cadena que contiene las declaraciones de JavaScript que comprenden la definición de la función.
+
+ +

Descripción

+ +

{{jsxref("Statements/async_function", "async function")}} los objetos creados con el constructor AsyncFunction son analizados gramaticalmente en el momento que la función es creada. Esto es menos eficiente que declarar una función asincrona con un {{jsxref("Statements/async_function", "async function expression")}} y llamarla con eso en tu código , ya que las funciones están analizadas gramaticalmento junto al resto del código.

+ +

Todos los argumentos que son pasados por la función son tratados por los nombres de los identificadores con los que fueron creados, en el orden en que son pasados por la función.

+ +
+

Note: {{jsxref("Statements/async_function", "async functions")}} created with the AsyncFunction constructor do not create closures to their creation contexts; they are always created in the global scope. When running them, they will only be able to access their own local variables and global ones, not the ones from the scope in which the AsyncFunction constructor was called. This is different from using {{jsxref("Global_Objects/eval", "eval")}} with code for an async function expression.

+
+ +

Invoking the AsyncFunction constructor as a function (without using the new operator) has the same effect as invoking it as a constructor.

+ +

Propiedades

+ +
+
AsyncFunction.length
+
The AsyncFunction constructor's length property whose value is 1.
+
{{jsxref("AsyncFunction.prototype")}}
+
Allows the addition of properties to all async function objects.
+
+ +

El objeto prototipo  AsyncFunction 

+ +

Propiedades

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

AsyncFunction y sus instancias

+ +

Una instancia de AsyncFunction  hereda métodos y propiedades de {{jsxref("AsyncFunction.prototype")}}. Como son todos los constructores, puedes cambiar el constructor del objeto prototipo para aplicar cambios a todas las instancias de AsyncFunction .

+ +

Ejemplos

+ +

Creating an async function from an AsyncFunction constructor

+ +
function resolveAfter2Seconds(x) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      resolve(x);
+    }, 2000);
+  });
+}
+
+var AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
+
+var a = new AsyncFunction('a',
+                          'b',
+                          'return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);');
+
+a(10, 20).then(v => {
+  console.log(v); // prints 30 after 4 seconds
+});
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ESDraft', '#sec-async-function-objects', 'AsyncFunction object')}}{{Spec2('ESDraft')}}Initial definition in ES2017.
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/boolean/boolean/index.html b/files/es/web/javascript/reference/global_objects/boolean/boolean/index.html new file mode 100644 index 0000000000..924ab7ccef --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/boolean/boolean/index.html @@ -0,0 +1,75 @@ +--- +title: Boolean() constructor +slug: Web/JavaScript/Referencia/Objetos_globales/Boolean/Boolean +tags: + - Booleano + - Constructor + - JavaScript + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/Boolean +--- +
{{JSRef}}
+ +

El constructor Boolean() se usa para crear objetos {{jsxref("Boolean")}}.

+ +
{{EmbedInteractiveExample("pages/js/boolean-constructor.html", "shorter")}}
+ + + +

Sintaxis

+ +
new Boolean([value])
+ +

Parámetros

+ +
+
value {{optional_inline}}
+
El valor inicial del objeto Boolean.
+
+ +

Ejemplos

+ +

Creación de objetos Boolean con un valor inicial de false

+ +
var bNoParam = new Boolean();
+var bZero = new Boolean(0);
+var bNull = new Boolean(null);
+var bEmptyString = new Boolean('');
+var bfalse = new Boolean(false);
+
+ +

Creación de objetos Boolean con un valor inicial de 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({});
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-boolean-constructor', 'Boolean constructor')}}
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/boolean/index.html b/files/es/web/javascript/reference/global_objects/boolean/index.html new file mode 100644 index 0000000000..17a0f7d9e9 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/boolean/index.html @@ -0,0 +1,126 @@ +--- +title: Booleano +slug: Web/JavaScript/Referencia/Objetos_globales/Boolean +tags: + - Boolean + - Clase + - Class + - Constructor + - JavaScript + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean +--- +
{{JSRef}}
+ +

El objeto Boolean es un objeto contenedor para un valor booleano.

+ +

Descripción

+ +

El valor pasado como primer parámetro se convierte en un valor booleano, si es necesario. Si el valor se omite o es 0, -0, {{jsxref("null")}}, false, {{jsxref("NaN")}}, {{jsxref("undefined")}}, o la cadena vacía (""), el objeto tiene un valor inicial de false. Todos los demás valores, incluido cualquier objeto, un arreglo vacío ([]) o la cadena "false", crean un objeto con un valor inicial de true.

+ +

No confundas los valores del Boolean {{Glossary("Primitive", "primitivo")}}, true y false con los valores true y false del objeto Boolean.

+ +

Cualquier objeto cuyo valor no sea {{jsxref("undefined")}} o {{jsxref("null")}}, incluido un objeto Boolean cuyo valor es false, se evalúa como true cuando se pasa a una declaración condicional. Por ejemplo, la condición en la siguiente declaración {{jsxref("Statements/if...else", "if")}} se evalúa como true:

+ +
var x = new Boolean(false);
+if (x) {
+  // este código se ejecuta
+}
+
+ +

Este comportamiento no se aplica a los Boolean primitivos. Por ejemplo, la condición en la siguiente instrucción {{jsxref("Statements/if...else", "if")}} se evalúa como false:

+ +
var x = false;
+if (x) {
+  // este código no se ejecuta
+}
+
+ +

No utilices un objeto Boolean para convertir un valor no booleano en un valor booleano. Para realizar esta tarea, en su lugar, usa Boolean como función, o un operador NOT doble:

+ +
var x = Boolean(expression);     // usa esta...
+var x = !!(expression);          // ... o esta
+var x = new Boolean(expression); // ¡no uses esta!
+
+ +

Si especificas cualquier objeto, incluido un objeto Boolean cuyo valor es false, como valor inicial de un objeto Boolean, el nuevo objeto Boolean tiene un valor de true.

+ +
var myFalse = new Boolean(false);   // valor inicial de false
+var g = Boolean(myFalse);           // valor inicial de true
+var myString = new String('Hola');  // objeto string
+var s = Boolean(myString);          // valor inicial de true
+
+ +

No utilices un objeto Boolean en lugar de un Boolean primitivo.

+ +
+

Nota Cuando la propiedad no estándar document.all se usa como argumento para este constructor, el resultado es un objeto Boolean con el valor false. Esta propiedad es heredada y no estándar y no se debe usar.

+
+ +

Constructor

+ +
+
{{jsxref("Global_Objects/Boolean/Boolean", "Boolean()")}}
+
Crea un nuevo objeto Boolean.
+
+ +

Métodos de instancia

+ +
+
{{jsxref("Boolean.prototype.toString()")}}
+
Devuelve una cadena de true o false dependiendo del valor del objeto. Redefine el método {{jsxref("Object.prototype.toString()")}}.
+
{{jsxref("Boolean.prototype.valueOf()")}}
+
Devuelve el valor primitivo del objeto {{jsxref("Boolean")}}. Redefine el método {{jsxref("Object.prototype.valueOf()")}}.
+
+ +

Ejemplos

+ +

Creación de objetos Boolean con un valor inicial de false

+ +
var bNoParam = new Boolean();
+var bZero = new Boolean(0);
+var bNull = new Boolean(null);
+var bEmptyString = new Boolean('');
+var bfalse = new Boolean(false);
+
+ +

Creación de objetos Boolean con un valor inicial de 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({});
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-boolean-objects', 'Boolean')}}
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/boolean/tosource/index.html b/files/es/web/javascript/reference/global_objects/boolean/tosource/index.html new file mode 100644 index 0000000000..e42f79f26b --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/boolean/tosource/index.html @@ -0,0 +1,36 @@ +--- +title: Boolean.prototype.toSource() +slug: Web/JavaScript/Referencia/Objetos_globales/Boolean/toSource +tags: + - Boolean + - JavaScript + - Method + - Non-standard + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/toSource +--- +
+ {{JSRef("Objetos_globales", "Boolean")}} {{ Non-standard_header() }}
+

Resumen

+

Devuelve una cadena que representa el código fuente del objeto.

+

Sintaxis

+

toSource()

+

Parámetros

+

Ninguno.

+

Descripción

+

El método toSource devuelve los siguientes valores:

+ +
function Boolean() {
+   [código nativo]
+}
+
+ +

Este método se utiliza habitualmente en llamadas internas por JavaScript y no en código explícito.

+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/date/getdate/index.html b/files/es/web/javascript/reference/global_objects/date/getdate/index.html new file mode 100644 index 0000000000..451f889003 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/getdate/index.html @@ -0,0 +1,119 @@ +--- +title: Date.prototype.getDate() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getDate +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDate +--- +
{{JSRef}}
+ +

El método getDate() devuelve el día del mes para la fecha especificada de acuerdo con la hora local.

+ +

Sintaxis

+ +
dateObj.getDate()
+ +

Parámetros

+ +

Ninguno.

+ +

Valor de retorno

+ +

El valor devuelto por getDate() es un número entero, entre 1 y 31, que representa el día del mes para la fecha dada según la hora local.

+ +

Ejemplos

+ +

Uso de getDate()

+ +

La segunda instrucción asigna el valor 25 a la variable day, en función del valor del objeto {{jsxref("Date")}} Xmas95.

+ +
var Xmas95 = new Date('December 25, 1995 23:15:30');
+var day = Xmas95.getDate();
+
+console.log(day); // 25
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-date.prototype.getdate', 'Date.prototype.getDate')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-15.9.5.14', 'Date.prototype.getDate')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implantado en JavaScript 1.1.
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/getday/index.html b/files/es/web/javascript/reference/global_objects/date/getday/index.html new file mode 100644 index 0000000000..f384f21b71 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/getday/index.html @@ -0,0 +1,124 @@ +--- +title: Date.prototype.getDay() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getDay +tags: + - Date + - JavaScript + - Prototype + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDay +--- +
{{JSRef}}
+ +

El método getDay() devuelve el día de la semana de la fecha especificada en función de la fecha local; siendo 0 (Domingo) el primer día.

+ +

Sintaxis

+ +
dateObj.getDay()
+ +

Parámetros

+ +

Ninguno.

+ +

Valor devuelto

+ +

El valor devuelto por getDay() es un entero correspondiente al día de la semana; siendo 0 (Domingo) el primer día, 1 (Lunes) el segundo, etcétera. 

+ +

Ejemplos

+ +

Usos de getDay()

+ +

La segunda sentencia asigna el valor 1 a weekday, basado en el valor del objeto Xmas95  {{jsxref("Date")}}. December 25, 1995,  que corresponde a Lunes.

+ +
var Xmas95 = new Date('December 25, 1995 23:15:30');
+var weekday = Xmas95.getDay();
+
+console.log(weekday); // 1
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-date.prototype.getday', 'Date.prototype.getDay')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-15.9.5.16', 'Date.prototype.getDay')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JS 1.0.
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte báisco{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/getfullyear/index.html b/files/es/web/javascript/reference/global_objects/date/getfullyear/index.html new file mode 100644 index 0000000000..0d047fbbc3 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/getfullyear/index.html @@ -0,0 +1,67 @@ +--- +title: Date.prototype.getFullYear() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getFullYear +tags: + - Fecha + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getFullYear +--- +
{{JSRef}}
+ +

El método getFullYear() devuelve el año de la fecha indicada acorde a la hora local.

+ +

Usa este método en lugar del método {{jsxref("Date.prototype.getYear()", "getYear()")}}.

+ +
{{EmbedInteractiveExample("pages/js/date-getfullyear.html","shorter")}}
+ +

Sintaxis

+ +
dateObj.getFullYear()
+ +

Valor devuelto

+ +

Un número correspondiente al año de la fecha indicada, según la hora local.

+ +

Descripción

+ +

El valor devuelto por getFullYear() es un número absoluto. Para fechas entre los años 1000 y 9999, getFullYear() devuelve un número de cuatro cifras, por ejemplo, 1995. Utiliza esta función para obtener un año que cumpla con los años posteriores al 2000.

+ +

Ejemplos

+ +

Utilizando getFullYear()

+ +

El siguiente ejemplo asigna el valor de cuatro dígitos del año actual a la variable year.

+ +
var today = new Date();
+var year = today.getFullYear();
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-date.prototype.getfullyear', 'Date.prototype.getFullYear')}}
+ +

Compatibilidad con navegadores

+ +

{{Compat("javascript.builtins.Date.getFullYear")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/gethours/index.html b/files/es/web/javascript/reference/global_objects/date/gethours/index.html new file mode 100644 index 0000000000..b669c976c7 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/gethours/index.html @@ -0,0 +1,119 @@ +--- +title: Date.prototype.getHours() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getHours +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getHours +--- +
{{JSRef}}
+ +

El método getHours() retorna la hora de la fecha especificada, de acuerdo a la hora local.

+ +

Sintaxis

+ +
dateObj.getHours()
+ +

Valor de retorno

+ +

Un número entero, entre 0 y 23, representando la hora de la fecha dada de acuerdo a la hora local.

+ +

Ejemplos

+ +

Usando getHours()

+ +

La segunda sentencia abajo asigna el valor 23 a la variable hours, basado en el valor del objeto {{jsxref("Global_Objects/Date", "Date")}} Xmas95.

+ +
var Xmas95 = new Date('December 25, 1995 23:15:30');
+var hours = Xmas95.getHours();
+
+console.log(hours); // 23
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definicion inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.18', 'Date.prototype.getHours')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.gethours', 'Date.prototype.getHours')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.gethours', 'Date.prototype.getHours')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegador

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver tambien

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/getmilliseconds/index.html b/files/es/web/javascript/reference/global_objects/date/getmilliseconds/index.html new file mode 100644 index 0000000000..cf673a530a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/getmilliseconds/index.html @@ -0,0 +1,121 @@ +--- +title: Date.prototype.getMilliseconds() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getMilliseconds +tags: + - Fecha + - Milisegundos + - Prototipo +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds +--- +
{{JSRef}}
+ +

El método getMilliseconds() devuelve la cantidad de milisegundos en el objeto fecha especificado de acuerdo a la hora local.

+ +

Sintaxis

+ +
dateObj.getMilliseconds()
+ +

Valor de Retorno

+ +

Un número, entre 0 y 999, que representa la cantidad de milisegundos en la fecha dada, de acuerdo a la hora local.

+ +

Ejemplos

+ +

Usando getMilliseconds()

+ +

El siguiente ejemplo asigna la cantidad de milisegundos de la hora actual a la variable milisegundos:

+ +
var ahora = new Date();
+var milisegundos = ahora.getMilliseconds();
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.24', 'Date.prototype.getMilliseconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getmilliseconds', 'Date.prototype.getMilliseconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getmilliseconds', 'Date.prototype.getMilliseconds')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en Navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/getminutes/index.html b/files/es/web/javascript/reference/global_objects/date/getminutes/index.html new file mode 100644 index 0000000000..9b144239b9 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/getminutes/index.html @@ -0,0 +1,118 @@ +--- +title: Date.prototype.getMinutes() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getMinutes +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMinutes +--- +
{{JSRef}}
+ +

El método getMinutes() devuelve los minutos de la fecha especificada en función de la hora local. 

+ +

Sintaxis

+ +
dateObj.getMinutes()
+ +

Parámetros

+ +

Ninguno.

+ +

Devuelve

+ +

El valor devuelto por getMinutes() es un número entero entre 0 y 59.

+ +

Ejemplos

+ +

Uso de getMinutes()

+ +

La segunda declaración del código mostrado a continuación le asigna el valor 15 a la variable minutos, basado en el valor del {{jsxref("Global_Objects/Date", "Date")}} objeto Xmas95.

+ +
var Xmas95 = new Date('December 25, 1995 23:15:30');
+var minutos = Xmas95.getMinutes();
+
+console.log(minutos); // 15
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.20', 'Date.prototype.getMinutes')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getminutes', 'Date.prototype.getMinutes')}}{{Spec2('ES6')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/getmonth/index.html b/files/es/web/javascript/reference/global_objects/date/getmonth/index.html new file mode 100644 index 0000000000..08a7e1d143 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/getmonth/index.html @@ -0,0 +1,125 @@ +--- +title: Date.prototype.getMonth() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getMonth +tags: + - Date + - JavaScript + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMonth +--- +
{{JSRef}}
+ +

Resumen

+ +

El método getMonth() devuelve el mes del objeto Date según la hora local, donde el número cero indica el primer mes del año.

+ +

Sintaxis

+ +
dateObj.getMonth()
+ +

Parámetros

+ +

Ninguno.

+ +

Resultado

+ +

El valor devuelto por getMonth() es un entero entre 0 y 11, donde 0 corresponde a Enero, 1 a Febrero y así sucesivamente.

+ +

Ejemplos

+ +

Usando getMonth()

+ +

En el siguiente ejemplo, la segunda línea asigna el valor 11 a la variable mes, basado en el valor del objeto {{jsxref("Date")}} Navidad.

+ +
var Navidad = new Date('December 25, 2014 23:15:30');
+var mes = Navidad.getMonth();
+
+console.log(mes); // 11
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Primera definición. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.12', 'Date.prototype.getMonth')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getmonth', 'Date.prototype.getMonth')}}{{Spec2('ES6')}} 
+ +

Compatibilidad

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/getseconds/index.html b/files/es/web/javascript/reference/global_objects/date/getseconds/index.html new file mode 100644 index 0000000000..875fe3f48b --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/getseconds/index.html @@ -0,0 +1,83 @@ +--- +title: Date.prototype.getSeconds() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getSeconds +tags: + - Fecha + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getSeconds +--- +
{{JSRef}}
+ +

El método getSeconds() devuelve los segundos en la fecha especificada de acuerdo a la hora local.

+ +
{{EmbedInteractiveExample("pages/js/date-getseconds.html")}}
+ + + +

Sintaxis

+ +
dateObj.getSeconds()
+ +

Valor devuelto

+ +

Un número entero, entro 0 y 59, representando los segundos en la fecha dada de acuerdo a la hora local.

+ +

Ejemplos

+ +

Utilizando getSeconds()

+ +

La segunda sentencia asigna el valor 30 a la variable seconds, en base al valor del objeto {{jsxref("Global_Objects/Date", "Date")}} Xmas95.

+ +
var Xmas95 = new Date('December 25, 1995 23:15:30');
+var seconds = Xmas95.getSeconds();
+
+console.log(seconds); // 30
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.22', 'Date.prototype.getSeconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getseconds', 'Date.prototype.getSeconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getseconds', 'Date.prototype.getSeconds')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.Date.getSeconds")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/gettime/index.html b/files/es/web/javascript/reference/global_objects/date/gettime/index.html new file mode 100644 index 0000000000..f08882be5e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/gettime/index.html @@ -0,0 +1,140 @@ +--- +title: Date.prototype.getTime() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getTime +tags: + - Date + - Metodo getTime() + - Referencia + - getTime +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getTime +--- +
{{JSRef("Global_Objects", "Date")}}
+ +

Resumen

+ +

El método getTime() devuelve el valor numérico correspondiente a la hora para la fecha especificada según la hora universal.

+ + + +

Puede utilizar este método para ayudar a asignar una fecha y hora a otro objeto {{jsxref("Global_Objects/Date", "Date")}}. Este método es funcionalmente equivalente al metodo {{jsxref("Date.valueof", "valueOf()")}}.

+ +

Sintaxis

+ +
dateObj.getTime()
+
+ +

Valor devuelto

+ +

El valor devuelto por el método getTime() es un número de milisegundos desde el 1 de enero de 1970 00:00:00 UTC.

+ +

Ejemplos

+ +

Ejemplo: Uso de getTime() para copiar fechas.

+ +

Construir un objeto de fecha con el mismo valor de tiempo.

+ +
var birthday = new Date(1994, 12, 10);
+var copy = new Date();
+copy.setTime(birthday.getTime());
+
+ +

Ejemplo: Medir el tiempo de ejecución

+ +

Restando dos llamadas getTime() subsiguientes en objetos {{jsxref("Global_Objects/Date", "Date")}} recién generados, dé el intervalo de tiempo entre estas dos llamadas. Esto se puede utilizar para calcular el tiempo de ejecución de algunas operaciones.

+ +
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');
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
ECMAScript 1st Edition.StandardInitial definition. Implemented in JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.9', 'Date.prototype.getTime')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-date.prototype.gettime', 'Date.prototype.getTime')}}{{Spec2('ES6')}}
+ +

Compatibilidad del navegador

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/getutcfullyear/index.html b/files/es/web/javascript/reference/global_objects/date/getutcfullyear/index.html new file mode 100644 index 0000000000..f2133bfc02 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/getutcfullyear/index.html @@ -0,0 +1,121 @@ +--- +title: Date.prototype.getUTCFullYear() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getUTCFullYear +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear +--- +
{{JSRef}}
+ +

El método getUTCFullYear() devuelve el año en la fecha especificada en tiempo universal.

+ +

Sintaxis

+ +
objectoFecha.getUTCFullYear()
+ +

Valor devuelto

+ +

Un número que representa el año en la fecha representada por el objectoFecha en tiempo universal.

+ +

Descripción

+ +

El valor devuelto por getUTCFullYear() es un número que no está afectado por  el efecto año 2000, por ejemplo, 1995.

+ +

Ejemplos

+ +

Empleo de getUTCFullYear()

+ +

El siguiente ejemplo asigna el valor de cuatro digitos del año actual a la variable year.

+ +
var today = new Date();
+var year = today.getUTCFullYear();
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementada en JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.11', 'Date.prototype.getUTCFullYear')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcfullyear', 'Date.prototype.getUTCFullYear')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcfullyear', 'Date.prototype.getUTCFullYear')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/getutchours/index.html b/files/es/web/javascript/reference/global_objects/date/getutchours/index.html new file mode 100644 index 0000000000..1e7a7a1ce2 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/getutchours/index.html @@ -0,0 +1,117 @@ +--- +title: Date.prototype.getUTCHours() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/getUTCHours +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCHours +--- +
{{JSRef}}
+ +

El método getUTCHours() retorna las horas especificadas en la fecha deacuerdo al horario universal.

+ +

Syntax

+ +
dateObj.getUTCHours()
+ +

Return value

+ +

An integer number, between 0 and 23, representing the hours in the given date according to universal time.

+ +

Examples

+ +

Using getUTCHours()

+ +

The following example assigns the hours portion of the current time to the variable hours.

+ +
var today = new Date();
+var hours = today.getUTCHours();
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES1')}}{{Spec2('ES1')}}Initial definition. Implemented in JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.19', 'Date.prototype.getUTCHours')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutchours', 'Date.prototype.getUTCHours')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutchours', 'Date.prototype.getUTCHours')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/index.html b/files/es/web/javascript/reference/global_objects/date/index.html new file mode 100644 index 0000000000..20e05539e5 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/index.html @@ -0,0 +1,132 @@ +--- +title: Date +slug: Web/JavaScript/Referencia/Objetos_globales/Date +tags: + - Date + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/Date +--- +
{{JSRef("Objetos_globales", "Date")}}
+ +

Resumen

+ +

Permite trabajar con fechas y horas.

+ +

El constructor

+ +

El constructor Date:

+ +
new Date()
+new Date(milisegundos)
+new Date(cadenaFecha)
+new Date(año_num,mes_num,dia_num
+        [,hor_num,min_num,seg_num,mils_num])
+
+ +

Parámetros

+ +
+
milisegundos
+
Valor entero que representa el número de milisegundos desde las 00:00:00 UTC del 1 de enero de 1970.
+
+ +
+
cadenaFecha
+
Valor de tipo cadena que representa una fecha. La cadena debería estar en un formato reconocido por el método {{jsxref("Date.parse()")}}.
+
+ +
+
año_num, mes_num, dia_num
+
Valores enteros con las representaciones de las partes de una fecha. Como valor entero, el mes se representa de 0 a 11, con 0=enero and 11=diciembre.
+
+ +
+
hor_num, min_num, seg_num, mils_num
+
Valores enteros que representan las partes de una hora completa.
+
+ +

Descripción

+ +

Si no proporciona argumentos, el constructor crea un objeto Date con la hora y fecha de hoy según la hora local.

+ +

Si proporciona algunos argumentos, debe proporcionar al menos 2 argumentos. Los argumentos vacíos se establecen a 0 (ó 1 si falta el día). 

+ +

La fecha se mide en milisegundos desde la media noche exacta del 01 de enero de 1970 en formato UTC. Un día contiene 86.400.000 milisegundos. El rango del objeto Date va desde -100,000,000 días hasta 100,000,000 días respecto del 01 de enero de 1970 UTC.

+ +

El objeto Date proporciona un comportamiento uniforme entre plataformas.

+ +

El objeto Date soporta métodos UTC (universales), además de métodos horarios locales. UTC, también conocido como Greenwich Mean Time (GMT), se refiere a la hora según el Estádar Horario Mundial (World Time Standard). La hora local es la hora establecida por el ordenador donde se ejecuta JavaScript.

+ +

Por compatibilidad con los cálculos del nuevo milenio (en otras palabras, para tener en cuenta el efecto 2000), debería especificar siempre el año completo; por ejemplo, utilice 1998, y no 98. Para ayudarle a especificar el año completo, JavaScript incluye los métodos {{jsxref("Date.prototype.getFullYear()")}}, {{jsxref("Date.prototype.setFullYear()")}}, {{jsxref("Date.prototype.getUTCFullYear()")}}, y {{jsxref("Date.prototype.setUTCFullYear()")}}.

+ +

El siguiente ejemplo devuelve el tiempo transcurrido entre horaA y horaB en milisegundos.

+ +
horaA = new Date();
+// Sentencias que realizan alguna acción.
+horaB = new Date();
+diferenciaHoras = horaB - horaA;
+
+ +

Propiedades

+ +
+
{{jsxref("Date.prototype")}}
+
Permite añadir propiedades a un objeto Date.
+
+ +

{{ jsOverrides("Function", "properties", "prototype") }}

+ +

Métodos

+ +
+
{{jsxref("Date.now()")}}
+
Devuelve el valor numérico correspondiente a la hora actual.
+
+ +
+
{{jsxref("Date.parse()")}}
+
Transforma una cadena que representa una fecha, y devuelve el número de milisegundos desde el 1 de enero de 1970, hora local 00:00:00.
+
+ +
+
{{jsxref("Date.UTC()")}}
+
Acepta los mismos parámetros que la forma más larga del constructor, y devuelve el número de milisegundos en un objeto Date desde el 1 de enero de 1970, hora universal 00:00:00.
+
+ +

Instancias de  Date

+ +

Métodos

+ +

{{ page("/es/docs/Web/JavaScript/Referencia/Objetos_globales/Date/prototype", "M.C3.A9todos") }}

+ +

Ejemplos

+ +

Ejemplo: Diversas maneras de asignar fechas

+ +

Los ejemplos siguientes muestran diversos modos de asignar fechas:

+ +
hoy = new Date();
+cumpleanos = new Date("December 17, 1995 03:24:00");
+cumpleanos = new Date(1995,11,17);
+cumpleanos = new Date(1995,11,17,3,24,0);
+
+ +

Ejemplo: Calcular el tiempo transcurrido

+ +

Los siguientes ejemplos muestran como determinar el tiempo transcurrido entre dos fechas:

+ +
// usando métodos estáticos
+var inicio = Date.now();
+// el evento cuyo tiempo ha transcurrido aquí:
+hacerAlgoPorAlgunTiempo();
+var fin = Date.now();
+var transcurso = fin - inicio; // tiempo en milisegundos
+
+ +
// si tiene objetos Date
+var inicio = new Date();
+// el evento cuyo tiempo ha transcurrido aquí:
+hacerAlgoPorAlgunTiempo();
+var fin = new Date();
+var transcurso = fin.getTime() - inicio.getTime(); // tiempo en milisegundos
+
diff --git a/files/es/web/javascript/reference/global_objects/date/now/index.html b/files/es/web/javascript/reference/global_objects/date/now/index.html new file mode 100644 index 0000000000..6c611710bb --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/now/index.html @@ -0,0 +1,30 @@ +--- +title: Date.now() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/now +tags: + - Date + - JavaScript + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/now +--- +
+ {{JSRef("Objetos_globales", "Date")}}
+

Resumen

+

Devuelve el número de milisegundos transcurridos desde las 00:00:00 UTC del 1 de enero de 1970.

+

Sintaxis

+
var fechaEnMiliseg = Date.now();
+
+

Descripción

+

El método now devuelve los milisegundos transcurridos desde las 00:00:00 UTC del 1 de enero de 1970 justo hasta ahora como un {{jsxref("Number")}}.

+

Cuando se usa now para crear registros temporales or identificadores únicos, tenga en cuenta que la precisión de Windows puede ser de 15 milisegundos (vea {{Bug(363258)}}), lo que puede provocar valores iguales si now se llama múltiples veces en un breve intervalo de tiempo.

+

Ejemplos

+

Ejemplo: Usando now

+

El siguiente ejemplo usa now para crear un registro temporal.

+
var registro = Date.now();
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/date/parse/index.html b/files/es/web/javascript/reference/global_objects/date/parse/index.html new file mode 100644 index 0000000000..15536775d7 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/parse/index.html @@ -0,0 +1,35 @@ +--- +title: Date.parse() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/parse +tags: + - Date + - JavaScript + - Method +translation_of: Web/JavaScript/Reference/Global_Objects/Date/parse +--- +
+ {{JSRef("Objetos_globales", "Date")}}
+

Resumen

+

Transforma una cadena con la representación de una fecha y hora, y devuelve el número de milisegundos desde las 00:00:00 del 1 de enero de 1970, hora local.

+

Sintaxis

+
Date.parse(cadenaFecha)
+

Parámetros

+
+
+ cadenaFecha
+
+ Una cadena con la representación de una fecha y hora.
+
+

Descripción

+

El método parse toma una cadena con una fecha en inglés (como por ejemplo "Dec 25, 1995") y devuelve el número de milisegundos desde las 00:00:00 del 1 de enero de 1970 (hora local). Esta función es útil para establecer valores de fecha basados en cadenas con fechas, por ejemplo junto con el método {{jsxref("Date.prototype.setTime()")}} y el objeto {{jsxref("Date")}}.

+

Dada una cadena con una hora, parse devuelve el valor de la hora. Acepta la sintaxis del estándar IETF (en inglés): "Mon, 25 Dec 1995 13:30:00 GMT". Comprende las abreviaciones de la zona horaria continental de Estados Unidos, pero para su uso general, use la diferencia de zona horaria, como por ejemplo, "Mon, 25 Dec 1995 13:30:00 GMT+0430" (4 horas, 30 minutos al oeste del meridiano de Greenwich). Si no se especifica una zona horaria, se asumirá la zona de la hora local. GMT y UTC se consideran equivalentes.

+

Debido a que parse es un método estático de Date, úselo siempre como Date.parse(), en vez de como un método del objeto Date que usted cree.

+

Ejemplos

+

Ejemplo: Usando parse

+

Si IPOfecha es un objeto existente Date, entonces usted puede asignarlo a 9 de agosto de 1995 de la manera siguiente:

+
IPOfecha.setTime(Date.parse("Aug 9, 1995")) ;
+
+

Vea también

+ diff --git a/files/es/web/javascript/reference/global_objects/date/setfullyear/index.html b/files/es/web/javascript/reference/global_objects/date/setfullyear/index.html new file mode 100644 index 0000000000..e272f78fc3 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/setfullyear/index.html @@ -0,0 +1,133 @@ +--- +title: Date.prototype.setFullYear() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/setFullYear +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setFullYear +--- +
{{JSRef}}
+ +

El método setFullYear() fija el año completo para una fecha específica de acuerdo a la zona horaria local. Devuelve un nuevo valor de tipo timestamp.

+ +

Sintaxis

+ +
dateObj.setFullYear(valorAño[, valorMes[, valorDia]])
+ +

Parámetros

+ +
+
valorAño
+
Valor de tipo entero que contiene el valor numérico del año, por ejemplo, 1995.
+
valorMes
+
Opcional. Valor entero entre 0 y 11 que representa el mes de Enero a Diciembre.
+
valorDia
+
Opcional. Valor entero entre 1 y 31 que representa el día del mes. Si se especifica este parámetro debe incluirse también el parámetro valorMes.
+
+ +

Valor devuelto

+ +

El número de milisegundos entre 1 Enero 1970 00:00:00 UTC y a la fecha actualizada con el valor del año.

+ +

Descripción

+ +

Si en la invocación al método no se especifican los parámetros valorMesvalorDia, se emplean en su lugar los valores devueltos por  {{jsxref("Date.prototype.getMonth()", "getMonth()")}} y {{jsxref("Date.prototype.getDate()", "getDate()")}}.

+ +

Si se especifica un parámetro con un valor fuera del rango esperado,  setFullYear() intenta actualizar el resto de parámetros y la informacion de fecha en el objeto {{jsxref("Date")}} de manera consistente. Por ejemplo, si se especifica el valor 15 para el parametro valorMes, el parámetro año se incrementa en 1  (valorAño+ 1), y se emplea  3 como valor para el parámetro mes.

+ +

Ejemplos

+ +

Uso de setFullYear()

+ +
var theBigDay = new Date();
+theBigDay.setFullYear(1997);
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.40', 'Date.prototype.setFullYear')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setfullyear', 'Date.prototype.setFullYear')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setfullyear', 'Date.prototype.setFullYear')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/setmonth/index.html b/files/es/web/javascript/reference/global_objects/date/setmonth/index.html new file mode 100644 index 0000000000..04aa9ec82a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/setmonth/index.html @@ -0,0 +1,78 @@ +--- +title: Date.prototype.setMonth() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/setMonth +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMonth +--- +
{{JSRef}}
+ +
El método setMonth() establece el mes para una fecha específica de acuerdo con el año establecido actualmente.
+ +
{{EmbedInteractiveExample("pages/js/date-setmonth.html")}}
+ +

Sintaxis

+ +
dateObj.setMonth(monthValue[,dayValue])
+ +

Versiones anteriores a JavaScript 1.3

+ +
dateObj.setMonth(monthValue)
+ +

Parámetros

+ +
+
monthValue
+
Un entero entre 0 y 11, representando los meses de Enero a Diciembre.
+
dayValue
+
Opcional. Un entero de 1 a 31, representando el dia del mes.
+
+ +

Resultado

+ +

El valor retornado es el número de milisegundos entre el 1 de Enero de 1970 00:00:00 UTC y la fecha actualizada.

+ +

Descripción

+ +

Si no especificas el parámetro dayValue, el valor retornado del metodo {{jsxref("Date.prototype.getDate()", "getDate()")}} es usado.

+ +

Si un parámetro especificado esta fuera del rango esperado, setMonth() intenta actualizar la información de la fecha en el objeto {{jsxref("Date")}} en consecuencia. Por ejemplo, si usted usa 15 para monthValue, usa 12 para incrementar el año en 1, y los 3 restantes para calcular el mes.

+ +

El día actual del mes tendrá un impacto en el comportamiento de este método. Conceptualmente agregará el número de días dados por el día actual del mes al primer día del nuevo mes especificado como parámetro, para devolver la nueva fecha. Por ejemplo, si el valor actual es el 31 de agosto de 2016, llamar a setMonth con un valor de 1 devolverá el 2 de marzo de 2016. Esto se debe a que en febrero de 2016 tuvo 29 días.

+ +

Ejemplos

+ +

Usando setMonth()

+ +
var theBigDay = new Date();
+theBigDay.setMonth(6);
+
+//Cuidado con las transiciones de fin de mes
+var endOfMonth = new Date(2016, 7, 31);
+endOfMonth.setMonth(1);
+console.log(endOfMonth); //Wed Mar 02 2016 00:00:00
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-date.prototype.setmonth', 'Date.prototype.setMonth')}}
+ +

Compatibilidad del navegador

+ + + +

{{Compat("javascript.builtins.Date.setMonth")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/todatestring/index.html b/files/es/web/javascript/reference/global_objects/date/todatestring/index.html new file mode 100644 index 0000000000..b0a3b5f431 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/todatestring/index.html @@ -0,0 +1,88 @@ +--- +title: Date.prototype.toDateString() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/toDateString +tags: + - Fecha + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toDateString +--- +
{{JSRef}}
+ +

El método toDateString() devuelve la porción de la fecha de un objeto {{jsxref("Date")}} en formato humano legible en Inglés Americano.

+ +

Sintaxis

+ +
dateObj.toDateString()
+ +

Valor devuelto

+ +

Una cadena que representa la porción de fecha de un determinado objeto {{jsxref("Date")}} en formato humano legible en Inglés Americano.

+ +

Descripción

+ +

Las instancias de {{jsxref("Date")}} representan momentos especificos en el tiempo. Un llamado a {{jsxref("Date.prototype.toString()", "toString()")}} devolverá la fecha formateada en un formato humano legible en Inglés Americano. En SpiderMonkey, esto consiste en la porción de la fecha (día, mes, y año) seguido por la porción de la hora (horas, minutos, segundos, y zona horaria). Algunas veces sólo se necesita obtener una cadena de la porción de la hora; esto puede lograrse con el método toTimeString().

+ +

El método toDateString() es especialmente útil, pues los distintos motores compatibles que implementan ECMA-262 pueden diferir en la cadena obtenida al ejecutar {{jsxref("Date.prototype.toString()", "toString()")}} para los objetos de tipo {{jsxref("Date")}}, pues dicho formato depende de la implementación, por lo que es posible que el enfoque de la segmentación simple de cadenas no produzca resultados consistentes entre distintos motores.

+ +

Ejemplos

+ +

Uso básico de toDateString()

+ +
var d = new Date(1993, 5, 28, 14, 39, 7);
+
+console.log(d.toString());     // logs Wed Jun 28 1993 14:39:07 GMT-0600 (PDT)
+console.log(d.toDateString()); // logs Wed Jun 28 1993
+
+ +
+

Nota: Los meses son 0-indexados cuando son utilizados como parámetros de {{jsxref("Date")}} (Siendo así, el cero (0) corresponde a Enero y el once (11) a Diciembre).

+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpecificaciónEstatusComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial.
{{SpecName('ES5.1', '#sec-15.9.5.3', 'Date.prototype.toDateString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.todatestring', 'Date.prototype.toDateString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.todatestring', 'Date.prototype.toDateString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad entre navegadores

+ + + +

{{Compat("javascript.builtins.Date.toDateString")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/toisostring/index.html b/files/es/web/javascript/reference/global_objects/date/toisostring/index.html new file mode 100644 index 0000000000..b3461f355d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/toisostring/index.html @@ -0,0 +1,144 @@ +--- +title: Date.prototype.toISOString() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/toISOString +tags: + - Date + - JavaScript + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toISOString +--- +
{{JSRef}}
+ +

El método toISOString() devuelve una cadena en el formato simplificado extendido ISO (ISO 8601), que siempre mide 24 o 27 caracteres de largo: (YYYY-MM-DDTHH:mm:ss.sssZ or ±YYYYYY-MM-DDTHH:mm:ss.sssZ, respectivamente). El uso horario no tiene retraso respecto a UTC, como lo denota el sufijo "Z".

+ +

Sintaxis

+ +
dateObj.toISOString()
+
+ +

Valor devuelto

+ +

Una cadena que representa la fecha dada en el formato ISO 8601 según la hora universal.

+ +

Ejemplos

+ +

Usando toISOString()

+ +
var today = new Date('05 October 2011 14:48 UTC');
+
+console.log(today.toISOString()); // Devuelve 2011-10-05T14:48:00.000Z
+
+ +

El ejemplo de arriba usa una cadena no estándar que podría no ser interpretada correctamente en navegadores distintos de Firefox.

+ +

Polyfill

+ +

Este método fue estandarizado en ECMA-262 5° edición. Los motores javascript que no han sido actualizados para soportar este método pueden solucionar su ausencia de la siguiente manera:

+ +
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';
+    };
+
+  }());
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES5.1', '#sec-15.9.5.43', 'Date.prototype.toISOString')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en javascript 1.8
{{SpecName('ES6', '#sec-date.prototype.toisostring', 'Date.prototype.toISOString')}}{{Spec2('ES6')}}
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatIE("9")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/tojson/index.html b/files/es/web/javascript/reference/global_objects/date/tojson/index.html new file mode 100644 index 0000000000..7d44a716c2 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/tojson/index.html @@ -0,0 +1,61 @@ +--- +title: Date.prototype.toJSON() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/toJSON +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toJSON +--- +
{{JSRef}}
+ +

El metodo toJSON() retorna una representacion de cadena del objeto {{jsxref("Date")}}

+ +
{{EmbedInteractiveExample("pages/js/date-tojson.html")}}
+ + + +

Syntaxis

+ +
dateObj.toJSON()
+ +

Valor retornado

+ +

Una representación de cadena de la fecha dada.

+ +

Descripción

+ +

{{jsxref("Date")}} las instancias se refieren a un momento específico en el tiempo. Llamando a toJSON() retorna un string (usando {{jsxref("Date.prototype.toISOString()", "toISOString()")}}) representando el {{jsxref("Date")}} valor del objeto. Este método generalmente está destinado, de forma predeterminada, a serializar de manera útil {{jsxref("Date")}} objetos durante la serialización JSON .

+ +

Ejemplos

+ +

Usando toJSON()

+ +
var jsonDate = (new Date()).toJSON();
+var backToDate = new Date(jsonDate);
+
+console.log(jsonDate); //2015-10-26T07:46:36.611Z
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-date.prototype.tojson', 'Date.prototype.toJSON')}}
+ +

Compatibilidad en buscadores

+ + + +

{{Compat("javascript.builtins.Date.toJSON")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/tolocaledatestring/index.html b/files/es/web/javascript/reference/global_objects/date/tolocaledatestring/index.html new file mode 100644 index 0000000000..26b773ba9a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/tolocaledatestring/index.html @@ -0,0 +1,159 @@ +--- +title: Date.prototype.toLocaleDateString() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/toLocaleDateString +tags: + - Fecha + - IANA formato horario + - Internacionalizacion + - JavaScript + - Prototipo + - Prototype + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString +--- +
{{JSRef}}
+ +

El método toLocaleDateString() devuelve una cadena con una representación de la fecha sensible al lenguaje. Los nuevos argumentos locales y options permiten a las aplicaciones especificar el lenguaje cuyas convenciones de formato deben usarse y permitir personalizar el comportamiento de la función. En implementaciones anteriores, las cuales ignoran los argumentos locales y options, el configuración regional usada y el formato de cadena devuelto dependen completamente de la implementación.

+ +
{{EmbedInteractiveExample("pages/js/date-tolocaledatestring.html")}}
+ + + +

Sintaxis

+ +
dateObj.toLocaleDateString([locales [, options]])
+ +

Parámetros

+ +

Compruebe la sección de Compatibilidad con su navegador para ver qué navegadores suportan los argumentos locales y options, y el Ejemplo: Comprobando el soporte para los argumentos locales y options para detectar dicha característica.

+ +
{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat', 'Parameters')}}
+ +

El valor por defecto para cada propiedad del componente date-time es {{jsxref("undefined")}}, pero si las propiedades weekday, year, month, day son todas {{jsxref("undefined")}}, entonces year, month, y day se asumen tener el valor "numeric".

+ +

Valor devuelto

+ +

Una cadena representando una porción de fecha de la instancia {{jsxref("Global_Objects/Date", "Date")}} indicada de acuerdo con las convenciones específicas del lenguaje.

+ +

Ejemplos

+ +

Usando toLocaleDateString()

+ +

En un caso básico sin especificar una configuración regional, se devolverá una cadena formateada en la configuración regional y las opciones por defecto.

+ +
var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// toLocaleDateString() sin argumentos dependientes de la implementación,
+// de la configuración regional por defecto y la zona horaria por defecto
+console.log(date.toLocaleDateString());
+// → "12/11/2012" si se ejecuta en una configuración regional en-US con zona horaria America/Los_Angeles
+
+ +

Comprobando el soporte para los argumentos locales y options

+ +

Los argumentos locales y options no son soportados aún por todos los navegadores. Para comprobar si una implementación los soporta, puede usar el requerimiento To check whether an implementation supports them already, you can use the requirement that illegal language tags are rejected with a {{jsxref("RangeError")}} exception:

+ +
function toLocaleDateStringSupportsLocales() {
+  try {
+    new Date().toLocaleDateString('i');
+  } catch (e) {
+    return e.name === 'RangeError';
+  }
+  return false;
+}
+
+Using locales
+ +

Usando locales

+ +

Este ejemplo muestra algunas de las variaciones en los formatos de configuración regional de las fechas. Para poder obtener el formato del idioma usado en la interfaz de usuario de su aplicación, asegúrese de especificar el idioma (y posiblemente algunos idiomas alternativos) usando el argumento locales:

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Los formatos de abajo asumen la zona horaria local de la configuración regional;
+// America/Los_Angeles para US
+
+// El inglés de USA hace uso de orden mes-día-año
+console.log(date.toLocaleDateString('en-US'));
+// → "12/19/2012"
+
+// El inglés británico hace uso del orden día-mes-año
+console.log(date.toLocaleDateString('en-GB'));
+// → "20/12/2012"
+
+// El coreano hace uso del orden año-mes-día
+console.log(date.toLocaleDateString('ko-KR'));
+// → "2012. 12. 20."
+
+// Evento para persa. Es difícil convertir manualmente la fecha a Solar Hijri
+console.log(date.toLocaleDateString('fa-IR'));
+// → "۱۳۹۱/۹/۳۰"
+
+// El árave en la mayoría de paises arabehablantes hace uso de los dígitos árabes
+console.log(date.toLocaleDateString('ar-EG'));
+// → "٢٠‏/١٢‏/٢٠١٢"
+
+// Para el japonés, las aplicaciones quieren poder usar el calendario japonés,
+// donde 2012 era el año 24 de la era Heisei
+console.log(date.toLocaleDateString('ja-JP-u-ca-japanese'));
+// → "24/12/20"
+
+// Cuando solicite un idioma que no esté soportado, por ejemplo el balinés,
+// incluya un idioma alternativo, en este caso el indonesio
+console.log(date.toLocaleDateString(['ban', 'id']));
+// → "20/12/2012"
+
+ +

Usando options

+ +

Los resultados aportados por toLocaleDateString() pueden ser personalizados usando el argumento options:

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Solicita el día de la semana junto a una fecha larga
+var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
+console.log(date.toLocaleDateString('de-DE', options));
+// → "Donnerstag, 20. Dezember 2012"
+
+// Una aplicación puede querer usar UTC y hacer que sea visible
+options.timeZone = 'UTC';
+options.timeZoneName = 'short';
+console.log(date.toLocaleDateString('en-US', options));
+// → "Thursday, December 20, 2012, GMT"
+
+ +

Performance

+ +

Cuando se formatea números largos de fechas, es mejor crear un objeto {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} y usar la función aportada por esta propiedad {{jsxref("DateTimeFormat.prototype.format", "format")}}.

+ +

Especificaciones

+ + + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-date.prototype.tolocaledatestring', 'Date.prototype.toLocaleDateString')}}
{{SpecName('ES Int Draft', '#sup-date.prototype.tolocaledatestring', 'Date.prototype.toLocaleDateString')}}
+ +

Compatibilidad con el navegador

+ + + +

{{Compat("javascript.builtins.Date.toLocaleDateString")}}

+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/tolocalestring/index.html b/files/es/web/javascript/reference/global_objects/date/tolocalestring/index.html new file mode 100644 index 0000000000..77f48344d3 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/tolocalestring/index.html @@ -0,0 +1,163 @@ +--- +title: Date.prototype.toLocaleString() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/toLocaleString +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleString +--- +
{{JSRef}}
+ +

El método toLocaleString() devuelve un cadena con la representación al idioma de la fecha especificada. Los nuevos argumentos locales y options permiten a las aplicaciones especificar el idioma cuyas convenciones de formato deben usarse y personalizar el comportamiento de la función. En implementaciones anteriores, ignoran los argumentos de las configuraciones localesoptions , la configuración regional utilizada y la forma de la cadena devuelta dependen completamente de la implementación .

+ +
{{EmbedInteractiveExample("pages/js/date-tolocalestring.html")}}
+ + + +

Syntax

+ +
dateObj.toLocaleString([locales[, options]])
+ +

Parametros

+ +

Los argumentos locales y de options  personalizan el comportamiento de la función y permiten que las aplicaciones especifiquen el lenguaje cuyas convenciones de formato deben ser utilizadas. En las implementaciones, que ignoran los argumentos, localesoptions, el locale utilizado y la forma de la cadena devuelta dependen totalmente de la implementación.

+ +

Vea el  constructor de Intl.DateTimeFormat() para detalles en esos parametros y como se usan.

+ +

El valor por defecto para cada componente date-time es  {{jsxref("undefined")}}, pero si las propiedades weekday, year, month, day son todas {{jsxref("undefined")}}, entonces year, month, y day son asumidas como "numeric".

+ +

Return value

+ +

A string representing the given date according to language-specific conventions.

+ +

Examples

+ +

Using toLocaleString()

+ +

In basic use without specifying a locale, a formatted string in the default locale and with default options is returned.

+ +
var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// toLocaleString() without arguments depends on the implementation,
+// the default locale, and the default time zone
+console.log(date.toLocaleString());
+// → "12/11/2012, 7:00:00 PM" if run in en-US locale with time zone America/Los_Angeles
+
+ +

Checking for support for locales and options arguments

+ +

The locales and options arguments are not supported in all browsers yet. To check whether an implementation supports them already, you can use the requirement that illegal language tags are rejected with a {{jsxref("RangeError")}} exception:

+ +
function toLocaleStringSupportsLocales() {
+  try {
+    new Date().toLocaleString('i');
+  } catch (e) {
+    return e instanceof RangeError;
+  }
+  return false;
+}
+
+ +

Using locales

+ +

This example shows some of the variations in localized date and time formats. In order to get the format of the language used in the user interface of your application, make sure to specify that language (and possibly some fallback languages) using the locales argument:

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// formats below assume the local time zone of the locale;
+// America/Los_Angeles for the US
+
+// US English uses month-day-year order and 12-hour time with AM/PM
+console.log(date.toLocaleString('en-US'));
+// → "12/19/2012, 7:00:00 PM"
+
+// British English uses day-month-year order and 24-hour time without AM/PM
+console.log(date.toLocaleString('en-GB'));
+// → "20/12/2012 03:00:00"
+
+// Korean uses year-month-day order and 12-hour time with AM/PM
+console.log(date.toLocaleString('ko-KR'));
+// → "2012. 12. 20. 오후 12:00:00"
+
+// Arabic in most Arabic speaking countries uses real Arabic digits
+console.log(date.toLocaleString('ar-EG'));
+// → "٢٠‏/١٢‏/٢٠١٢ ٥:٠٠:٠٠ ص"
+
+// for Japanese, applications may want to use the Japanese calendar,
+// where 2012 was the year 24 of the Heisei era
+console.log(date.toLocaleString('ja-JP-u-ca-japanese'));
+// → "24/12/20 12:00:00"
+
+// when requesting a language that may not be supported, such as
+// Balinese, include a fallback language, in this case Indonesian
+console.log(date.toLocaleString(['ban', 'id']));
+// → "20/12/2012 11.00.00"
+
+ +

Using options

+ +

The results provided by toLocaleString() can be customized using the options argument:

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// request a weekday along with a long date
+var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
+console.log(date.toLocaleString('de-DE', options));
+// → "Donnerstag, 20. Dezember 2012"
+
+// an application may want to use UTC and make that visible
+options.timeZone = 'UTC';
+options.timeZoneName = 'short';
+console.log(date.toLocaleString('en-US', options));
+// → "Thursday, December 20, 2012, GMT"
+
+// sometimes even the US needs 24-hour time
+console.log(date.toLocaleString('en-US', { hour12: false }));
+// → "12/19/2012, 19:00:00"
+
+ +

Avoid comparing formatted date values to static values

+ +

Most of the time, the formatting returned by toLocaleString() is consistent. However, this might change in the future and isn't guaranteed for all languages — output variations are by design and allowed by the specification. Most notably, the IE and Edge browsers insert bidirectional control characters around dates, so the output text will flow properly when concatenated with other text.

+ +

For this reason you cannot expect to be able to compare the results of toLocaleString() to a static value:

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

Note: See also this StackOverflow thread for more details and examples.

+
+ +

Performance

+ +

When formatting large numbers of dates, it is better to create an {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} object and use the function provided by its {{jsxref("DateTimeFormat.prototype.format", "format")}} property.

+ +

Specifications

+ + + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleString')}}
{{SpecName('ES Int Draft', '#sup-date.prototype.tolocalestring', 'Date.prototype.toLocaleString')}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Date.toLocaleString")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/tolocaletimestring/index.html b/files/es/web/javascript/reference/global_objects/date/tolocaletimestring/index.html new file mode 100644 index 0000000000..c3954096f6 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/tolocaletimestring/index.html @@ -0,0 +1,152 @@ +--- +title: Date.prototype.toLocaleTimeString() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/toLocaleTimeString +tags: + - Date + - Fecha + - Internacionalizacion + - JavaScript + - Method + - Prototype + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString +--- +
{{JSRef}}
+ +

El método toLocaleTimeString() devuelve una cadena con una representación de la parte del tiempo de esta fecha sensible al idioma. Los nuevos argumentos locales y options le permiten a la aplicación especificar el idioma cuyas convenciones de formato deben usarse y personalizan el comportamiento de esta función. En implementaciones antiguas que ignoran los argumentos locales y options la localidad usada y la forma de la cadena devuelta son completamente dependientes de la implementación.

+ +
{{EmbedInteractiveExample("pages/js/date-tolocaletimestring.html")}}
+ + + +

Sintaxis

+ +
dateObj.toLocaleTimeString([locales[, options]])
+ +

Parámetros

+ +

Los argumentos locales y options personalizan el comportamiento de la función y le permiten a la aplicación especificar el idioma cuyas convenciones de formato deben usarse. En las implementaciones que ignoran los argumentos locales y options, la localidad y la forma de la cadena devuelta son dependientes por completo de la implementación.

+ +

Vea el constructor Intl.DateTimeFormat() para los detalles de estos parámetros y sobre cómo usarlos.

+ +

El valor predeterminado de cada componente de fecha-hora es {{jsxref("undefined")}}, pero si las propiedades weekday, year, month y day son todas {{jsxref("undefined")}}, entonces year, month y day se asumen como "numeric".

+ +

Valor devuelto

+ +

Una cadena representando la porción de tiempo de la instancia {{jsxref("Global_Objects/Date", "Date")}} dada, conforme a las convenciones específicas del idioma.

+ +

Ejemplos

+ +

Usando toLocaleTimeString()

+ +

En el uso básico sin especificar una localidad, una cadena con formato en la localidad y opciones predeterminadas es devuelta.

+ +
var fecha = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// toLocaleTimeString() sin argumentos depende de la implementación,
+// la localidad y la zona horaria predeterminadas
+console.log(date.toLocaleTimeString());
+// → "21:00:00" si se ejecuta en la localidad es-MX con la zona horaria America/Mexico_City
+
+ +

Verificando el soporte de argumentos locales y options

+ +

Los argumentos locales y options aún no están soportados en todos los navegadores. Para verificar si alguna implementación ya los soporta, puede usar el requerimiento de que etiquetas inválidas son rechazadas con una excepción {{jsxref("RangeError")}}:

+ +
function toLocaleTimeStringSoportaLocales() {
+  try {
+    new Date().toLocaleTimeString('i');
+  } catch (e) {
+    return e​.name === 'RangeError';
+  }
+  return false;
+}
+
+ +

Usando locales

+ +

Este ejemplo muestra una de las variaciones en formatos de tiempo localizados. Para obtener el formato del idioma usado en la interfaz de su aplicación, asegúrese de especificar ese idioma (y posiblemente algunos de fallback) usando el argumento locales:

+ +
var fecha = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// los siguientes formatos asumen la zona horaria de la localidad;
+// America/Los_Angeles para los EEUU
+
+// El inglés americano usa formato de 12 horas con AM/PM
+console.log(fecha.toLocaleTimeString('en-US'));
+// → "7:00:00 PM"
+
+// El inglés británico usa formato de 24 horas sin AM/PM
+console.log(date.toLocaleTimeString('en-GB'));
+// → "03:00:00"
+
+// El koreano usa formato de 12 horas con AM/PM
+console.log(date.toLocaleTimeString('ko-KR'));
+// → "오후 12:00:00"
+
+// En muchos países donde hablan árabe se usan dígitos árabes
+console.log(date.toLocaleTimeString('ar-EG'));
+// → "٧:٠٠:٠٠ م"
+
+// cuando se pide un idioma que puede no estar disponible, como
+// balinés, incluya un idioma de respaldo, como en este caso, indonesio
+console.log(date.toLocaleTimeString(['ban', 'id']));
+// → "11.00.00"
+
+ +

Usando options

+ +

Los resultados provistos por toLocaleTimeString() pueden ser personalizados usando el argumento options:

+ +
var fecha = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// una aplicación puede querer usar UTC y visibilizarlo:
+var options = { timeZone: 'UTC', timeZoneName: 'short' };
+console.log(date.toLocaleTimeString('en-US', options));
+// → "3:00:00 AM GMT"
+
+// algunas veces incluso en EEUU necesitan el tiempo en 24 horas
+console.log(date.toLocaleTimeString('en-US', { hour12: false }));
+// → "19:00:00"
+
+// mostrar únicamente horas y minutos, use options con la localidad predeterminada - usar un arreglo vacío
+console.log(date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }));
+// → "20:01"
+
+
+ +

Rendimiento

+ +

Cuando se da formato a un gran número de fechas, es mejor crear un objeto {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} y usar su método {{jsxref("DateTimeFormat.prototype.format", "format")}}.

+ +

Especificaciones

+ + + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-date.prototype.tolocaletimestring', 'Date.prototype.toLocaleTimeString')}}
{{SpecName('ES Int Draft', '#sup-date.prototype.tolocaletimestring', 'Date.prototype.toLocaleTimeString')}}
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.Date.toLocaleTimeString")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/toutcstring/index.html b/files/es/web/javascript/reference/global_objects/date/toutcstring/index.html new file mode 100644 index 0000000000..4742a6eacf --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/toutcstring/index.html @@ -0,0 +1,105 @@ +--- +title: Date.prototype.toUTCString() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/toUTCString +tags: + - Date + - JavaScript + - Method + - Prototype + - Reference + - UTC +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toUTCString +--- +
{{JSRef}}
+ +

El métodotoUTCString() convierte una fecha en una cadena, utilizando la zona horaria UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-toutcstring.html")}}
+ + + +

Sintaxis

+ +
dateObj.toUTCString()
+ +

Valor de retorno

+ +

Una cadena que representa la fecha dada usando la zona horaria UTC

+ +

Descripción

+ +

El valor devuelto por toUTCString() es una cadena con la forma

+ +

Www, dd Mmm yyyy hh:mm:ss GMT

+ +

donde:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
WwwDía de la semana, como tres letras (ej. Sun, Mon, ...)
ddDía del mes, como dos dígitos, con cero a la izquierda si es necesario.
MmmMes, como tres letras (ej. Jan, Feb, ...)
yyyyAño, como cuatro o más dígitos con cero a la izquierda si es necesario.
hhHora, como dos dígitos con cero a la izquierda si es necesario.
mmMinutos, como dos dígitos con cero a la izquierda si es necesario.
ssSegundos, como dos dígitos con cero a la izquierda si es necesario.
+ +

Antes de ECMAScript 2018, el formato del valor devuelto variaba según la plataforma. El valor devuelto más comun era un sello de fecha con formato RFC-1123, que es una versión ligeramente actualizada de los sellos de fecha RFC-822.

+ +

Ejemplos

+ +

Usando toUTCString()

+ +
var today = new Date('Wed, 14 Jun 2017 00:00:00 PDT');
+var UTCstring = today.toUTCString(); // Wed, 14 Jun 2017 07:00:00 GMT
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-date.prototype.toutcstring', 'Date.prototype.toUTCString')}}
+ +

Compatibilidad del navegador

+ + + +

{{Compat("javascript.builtins.Date.toUTCString")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/date/utc/index.html b/files/es/web/javascript/reference/global_objects/date/utc/index.html new file mode 100644 index 0000000000..605ae2819d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/date/utc/index.html @@ -0,0 +1,78 @@ +--- +title: Date.UTC() +slug: Web/JavaScript/Referencia/Objetos_globales/Date/UTC +tags: + - Date + - JavaScript + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/UTC +--- +
+ {{JSRef("Objetos_globales", "Date")}}
+

Resumen

+

Accepts the same parameters as the longest form of the constructor, and returns the number of milliseconds in a Date object since January 1, 1970, 00:00:00, universal time.

+

Sintaxis

+
Date.UTC(año,mes[, dia[, hora[, minutos[, segundos, milisegundos]]]])
+

Parámetros

+
+
+ año
+
+ Un año mayor de 1900.
+
+
+
+ mes
+
+ Un entero entre 0 y 11 que representa al mes.
+
+
+
+ dia
+
+ Un entero entre 1 y 31 que representa al día del mes.
+
+
+
+ hora
+
+ Un entero entre 0 y 23 que representa la hora.
+
+
+
+ minutos
+
+ Un entero entre 0 y 59 que representa los minutos.
+
+
+
+ segundos
+
+ Un entero entre 0 y 59 que representa los segundos.
+
+
+
+ milisegundos
+
+ Un entero entre 0 y 999 que representa los milisegundos.
+
+

Descripción

+

UTC toma los parámetros de la fecha delimitados por punto y comay devuelve el número de milisegundos entre las 00:00:00 del 1 de enero de 1970 (hora universal) y la hora que especifique.

+

Debería especificar los dígitos del año completo; por ejemplo, 1998. Si se especifica un año entre 0 y 99, el método convierte dicho año en uno del siglo XX (1900 + año); por ejemplo, si especifica 95, se usará el año 1995.

+

El método UTC difiere del constructor de Date de dos modos.

+ +

Si especifica un parámetro fuera del rango esperado, el método UTC modifica los otros parámetros para tener en cuenta su número. Por ejemplo, si usa 15 para el mes, el año será incrementado en 1 (año + 1), y 3 se usará para el mes.

+

Debido a que UTC es un método estático de Date, utilícelo siempre como Date.UTC(), en vez de como un método del objeto Date que usted cree.

+

Ejemplos

+

Ejemplo: Usando Date.UTC

+

La sentencia siguiente crea un objeto Date usando GMT en vez de la hora local:

+
fechaGmt = new Date(Date.UTC(96, 11, 1, 0, 0, 0));
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/decodeuri/index.html b/files/es/web/javascript/reference/global_objects/decodeuri/index.html new file mode 100644 index 0000000000..dc8264eebe --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/decodeuri/index.html @@ -0,0 +1,38 @@ +--- +title: decodeURI() +slug: Web/JavaScript/Referencia/Objetos_globales/decodeURI +tags: + - JavaScript + - URI +translation_of: Web/JavaScript/Reference/Global_Objects/decodeURI +--- +
{{jsSidebar("Objects")}}
+ +

Sumario

+ +

Decodifica un Identificador de Recurso Uniforme (Uniform Resource Identifier, URI) previamente creado por {{jsxref("encodeURI")}} o por una rutina similar.

+ +

Sintaxis

+ +

decodeURI(encodedURI)

+ +

Parámetros

+ +
+
encodedURI
+
Un completo, Identificador de Recurso Uniforme.
+
+ +

Descripción

+ +

Sustituye a cada secuencia de escape codificado en URI con el carácter que representa.

+ +

No decodifica secuencias de escape que no se puedan haber introducido por {{jsxref("encodeURI")}}.

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/decodeuricomponent/index.html b/files/es/web/javascript/reference/global_objects/decodeuricomponent/index.html new file mode 100644 index 0000000000..05d9bd4b52 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/decodeuricomponent/index.html @@ -0,0 +1,42 @@ +--- +title: decodeURIComponent +slug: Web/JavaScript/Referencia/Objetos_globales/decodeURIComponent +tags: + - JavaScript + - JavaScript Reference + - URI +translation_of: Web/JavaScript/Reference/Global_Objects/decodeURIComponent +--- +
{{jsSidebar("Objects")}}
+ +

Sumario

+ +

Decodifica un Identificador de Recurso Uniforme (Uniform Resource Identifier, URI) previamente creado por {{jsxref("encodeURIComponent")}} o por una rutina similar.

+ +

Sintaxis

+ +

decodeURIComponent(encodedURI)

+ +

Parámetros

+ +
+
encodedURI
+
Un Identificador de Recurso Uniforme codificado.
+
 
+
+ +

Valor retornado

+ +

Retorna una nueva cadena representando la version decodificada del componente URI dado

+ +

Descripción

+ +

Sustituye a cada secuencia de escape codificado en URI con el carácter que representa.

+ +

Ver También

+ + diff --git a/files/es/web/javascript/reference/global_objects/encodeuri/index.html b/files/es/web/javascript/reference/global_objects/encodeuri/index.html new file mode 100644 index 0000000000..51277231e0 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/encodeuri/index.html @@ -0,0 +1,61 @@ +--- +title: encodeURI +slug: Web/JavaScript/Referencia/Objetos_globales/encodeURI +tags: + - JavaScript + - URI +translation_of: Web/JavaScript/Reference/Global_Objects/encodeURI +--- +
{{jsSidebar("Objects")}}
+ +

Sumario

+ +

Codifica un Identificador de Recurso Uniforme (Uniform Resource Identifier, URI) reemplazando cada instancia de ciertos carácteres por uno, dos o tres secuencias de escape representando el carácter codificado en UTF-8.

+ +

Sintaxis

+ +

encodeURI(URI)

+ +

Parámetros

+ +
+
URI
+
Un Identificador de Recurso Uniforme codificado.
+
+ +

Descripción

+ +

Se asume que el URI es un URI completo, a fin de no codificar caracteres reservados que tienen un significado especial en la URI.

+ +

encodeURI reemplaza todos los caracteres excepto los siguientes con las secuencias de escape UTF-8:

+ + + + + + + + + + + + + + + + + + + + +
TipoIncluye
Caracteres reservados; , / ? : @ & = + $
Caracteres No escapeAlfabéticos, dígitos decimales, - _ . ! ~ * ' ( )
Almohadilla#
+ +

Tenga en cuenta que encodeURI por sí sola no puede formar solicitudes correctas HTTP GET y POST, como por XMLHTTPRequests, porque "&", "+", y "=" no están codificados, los cuales son tratados como caracteres especiales en las solicitudes GET y POST. encodeURIComponent, sin embargo, codifica estos caracteres. Lo más probable es que estos comportamientos no sean compatibles en los navegadores Web.

+ +

Ver También

+ + diff --git a/files/es/web/javascript/reference/global_objects/encodeuricomponent/index.html b/files/es/web/javascript/reference/global_objects/encodeuricomponent/index.html new file mode 100644 index 0000000000..53af149970 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/encodeuricomponent/index.html @@ -0,0 +1,161 @@ +--- +title: encodeURIComponent +slug: Web/JavaScript/Referencia/Objetos_globales/encodeURIComponent +tags: + - JavaScript + - URI +translation_of: Web/JavaScript/Reference/Global_Objects/encodeURIComponent +--- +
{{jsSidebar("Objects")}}
+ +

Resumen

+ +

El método encodeURIComponent() codifica un componente URI (Identificador Uniforme de Recursos) al reemplazar cada instancia de ciertos caracteres por una, dos, tres o cuatro secuencias de escape que representan la codificación UTF-8 del carácter (solo serán cuatro secuencias de escape para caracteres compuestos por dos carácteres "sustitutos").

+ +

Sintaxis

+ +
encodeURIComponent(str);
+ +

Parámetros

+ +
+
str
+
Cadena. Un componente de un URI.
+
+ +

Descripción

+ +

encodeURIComponent escapes all characters except the following: alphabetic, decimal digits, - _ . ! ~ * ' ( )

+ +

Note that an {{jsxref("Objetos_globales/URIError", "URIError")}} will be thrown if one attempts to encode a surrogate which is not part of a high-low pair, e.g.,

+ +
// high-low pair ok
+alert(encodeURIComponent('\uD800\uDFFF'));
+
+// lone high surrogate throws "URIError: malformed URI sequence"
+alert(encodeURIComponent('\uD800'));
+
+// lone low surrogate throws "URIError: malformed URI sequence"
+alert(encodeURIComponent('\uDFFF'));
+
+ +

To avoid unexpected requests to the server, you should call encodeURIComponent on any user-entered parameters that will be passed as part of a URI. For example, a user could type "Thyme &time=again" for a variable comment. Not using encodeURIComponent on this variable will give comment=Thyme%20&time=again. Note that the ampersand and the equal sign mark a new key and value pair. So instead of having a POST comment key equal to "Thyme &time=again", you have two POST keys, one equal to "Thyme " and another (time) equal to again.

+ +

For application/x-www-form-urlencoded (POST), spaces are to be replaced by '+', so one may wish to follow a encodeURIComponent replacement with an additional replacement of "%20" with "+".

+ +

To be more stringent in adhering to RFC 3986 (which reserves !, ', (, ), and *), even though these characters have no formalized URI delimiting uses, the following can be safely used:

+ +
function fixedEncodeURIComponent (str) {
+  return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
+}
+
+ +

Examples

+ +

The following example provides the special encoding required within UTF-8 Content-Disposition and Link server response header parameters (e.g., UTF-8 filenames):

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

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
ECMAScript 3rd Edition.StandardInitial definition.
{{SpecName('ES5.1', '#sec-15.1.3.4', 'encodeURIComponent')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-encodeuricomponent-uricomponent', 'encodeURIComponent')}}{{Spec2('ES6')}}
+ +

Browser compatibility

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/error/error/index.html b/files/es/web/javascript/reference/global_objects/error/error/index.html new file mode 100644 index 0000000000..114831c512 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/error/error/index.html @@ -0,0 +1,69 @@ +--- +title: Constructor Error() +slug: Web/JavaScript/Referencia/Objetos_globales/Error/constructor_Error +tags: + - Constructor + - JavaScript + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Error/Error +--- +
{{JSRef}}
+ +

El constructor Error crea un objeto Error.

+ +

Sintaxis

+ +
new Error([message[, fileName[, lineNumber]]])
+ +

Parámetros

+ +
+
message{{Optional_Inline}}
+
Una descripción del error legible para los humanos.
+
fileName {{Optional_Inline}}{{Non-standard_inline}}
+
El valor de la propiedad fileName en el objeto Error creado. De manera predeterminada, el nombre del archivo que contiene el código que llamó al constructor Error().
+
lineNumber {{Optional_Inline}}{{Non-standard_inline}}
+
El valor de la propiedad lineNumber en el objeto Error creado. De manera predeterminada, el número de línea que contiene la invocación del constructor Error().
+
+ +

Ejemplos

+ +

Llamada a función o construcción new

+ +

Cuando se usa Error como una función, sin {{JSxRef("Operators/new", "new")}}, devolverá un objeto Error. Por lo tanto, una simple llamada a Error producirá el mismo resultado que la construcción de un objeto Error mediante la palabra clave new.

+ +
// esto...
+const x = Error('¡Fui creado usando una llamada a función!')
+
+    // ...tiene la misma funcionalidad que esta.
+const y = new Error('¡Fui construido con la palabra clave "new"!') 
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-error-constructor', 'Error constructor')}}
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/error/filename/index.html b/files/es/web/javascript/reference/global_objects/error/filename/index.html new file mode 100644 index 0000000000..8e633934e0 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/error/filename/index.html @@ -0,0 +1,48 @@ +--- +title: Error.prototype.fileName +slug: Web/JavaScript/Referencia/Objetos_globales/Error/fileName +tags: + - JavaScript + - No estandar + - Propiedad + - Prototipo +translation_of: Web/JavaScript/Reference/Global_Objects/Error/fileName +--- +
{{jsRef}} {{non-standard_header}}
+ +

La propiedad fileName contiene la ruta al archivo que generó este error.

+ +

Descripción

+ +

Esta propiedad no estándar contiene la ruta al archivo que generó este error. Si se llama desde un contexto de depuración, devuelve las herramientas de desarrollo de Firefox, por ejemplo, "código de evaluación del depurador".

+ +

Ejemplos

+ +

Usar fileName

+ +
var e = new Error('No se pudo procesar la entrada');
+throw e;
+// e.fileName podría verse como "file:///C:/ejemplo.html"
+
+ +

Especificaciones

+ +

No forma parte de ningún estándar.

+ +

Compatibilidad del navegador

+ +
+
+ + +

{{Compat("javascript.builtins.Error.fileName")}}

+
+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/error/index.html b/files/es/web/javascript/reference/global_objects/error/index.html new file mode 100644 index 0000000000..03cbd038da --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/error/index.html @@ -0,0 +1,219 @@ +--- +title: Error +slug: Web/JavaScript/Referencia/Objetos_globales/Error +tags: + - Error + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/Error +--- +
{{JSRef}}
+ +

Los objetos Error se lanzan cuando ocurren errores en tiempo de ejecución. También puedes utilizar el objeto Error como objeto base para excepciones definidas por el usuario. Ve más adelante los tipos de errores estándar integrados.

+ +

Descripción

+ +

Los errores en tiempo de ejecución dan como resultado la creación y lanzamiento de nuevos objetos Error.

+ +

Tipos Error

+ +

Además del constructor genérico Error, hay otros siete constructores de errores en el núcleo de JavaScript. Para conocer las excepciones de lado del cliente, consulta {{JSxRef("../Guide/Control_de_flujo_y_manejo_de_errores", "Declaraciones para el manejo de excepciones", "#Sentencias_de_manejo_de_excepciones", 1)}}.

+ +
+
{{JSxRef("EvalError")}}
+
Crea una instancia que representa un error que ocurre con respecto a la función global {{JSxRef("eval", "eval()")}}.
+
{{JSxRef("InternalError")}}
+
Crea una instancia que representa un error que ocurre cuando se produce un error interno en el motor de JavaScript. Por ejemplo: "demasiada recursividad".
+
{{JSxRef("RangeError")}}
+
Crea una instancia que representa un error que ocurre cuando una variable numérica o parámetro está fuera de su rango válido.
+
{{JSxRef("ReferenceError")}}
+
Crea una instancia que representa un error que ocurre cuando se quita la referencia a una referencia no válida.
+
{{JSxRef("SyntaxError")}}
+
Crea una instancia que representa un error de sintaxis.
+
{{JSxRef("TypeError")}}
+
Crea una instancia que representa un error que ocurre cuando una variable o parámetro no es de un tipo válido.
+
{{JSxRef("URIError")}}
+
Crea una instancia que representa un error que ocurre cuando {{JSxRef("encodeURI", "encodeURI()")}} o {{JSxRef("decodeURI", "decodeURI()")}} pasan parámetros no válidos.
+
+ +

Constructor

+ +
+
{{JSxRef("Objetos_globales/Error/Error", "Error()")}}
+
Crea un nuevo objeto Error.
+
+ +

Métodos estáticos

+ +
+
{{JSxRef("Error.captureStackTrace()")}}
+
Una función V8 no estándar que crea la propiedad {{JSxRef("Error.prototype.stack", "stack")}} en una instancia de Error.
+
+ +

Propiedades de la instancia

+ +
+
{{jsxref("Error.prototype.message")}}
+
Mensaje de error.
+
{{jsxref("Error.prototype.name")}}
+
Nombre del error.
+
{{jsxref("Error.prototype.description")}}
+
Una propiedad no estándar de Microsoft para la descripción del error. Similar a {{jsxref("Error.prototype.message", "message")}}.
+
{{jsxref("Error.prototype.number")}}
+
Una propiedad no estándar de Microsoft para un número de error.
+
{{jsxref("Error.prototype.fileName")}}
+
Una propiedad no estándar de Mozilla para la ruta al archivo que generó este error.
+
{{JSxRef("Error.prototype.lineNumber")}}
+
Una propiedad no estándar de Mozilla para el número de línea en el archivo que generó este error.
+
{{JSxRef("Error.prototype.columnNumber")}}
+
Una propiedad no estándar de Mozilla para el número de columna en la línea que generó este error.
+
{{JSxRef("Error.prototype.stack")}}
+
Una propiedad no estándar de Mozilla para un seguimiento de la pila.
+
+ +

Métodos de instancia

+ +
+
{{jsxref("Error.prototype.toString()")}}
+
Devuelve una cadena que representa el objeto especificado. Redefine el método {{JSxRef("Object.prototype.toString()")}}.
+
+ +

Ejemplos

+ +

Lanzar un error genérico

+ +

Normalmente, creas un objeto Error con la intención de generarlo utilizando la palabra clave {{JSxRef("Sentencias/throw", "throw")}}. Puedes manejar el error usando la construcción {{JSxRef("Sentencias/try...catch", "try...catch")}}:

+ +
try {
+  throw new Error('¡Ups!')
+} catch (e) {
+  console.error(e.name + ': ' + e.message)
+}
+
+ +

Manejar de un error específico

+ +

Puede elegir manejar solo tipos de error específicos probando el tipo de error con la propiedad {{JSxRef("Object.prototype.constructor", "constructor")}} del error o, si estás escribiendo para motores JavaScript modernos, la palabra clave {{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
+}
+
+ +

Tipos Error personalizados

+ +

Posiblemente desees definir tus propios tipos de error derivados de Error para poder lanzarlo con throw new MyError() y usar instanceof MyError para verificar el tipo de error en el controlador de excepciones. Esto da como resultado un código de manejo de errores más limpio y consistente.

+ +

Consulta "¿Cuál es una buena manera de extender Error en JavaScript?" en StackOverflow para una discusión en profundidad.

+ +

Clase Error personalizado en ES6

+ +
+

Las versiones de Babel anteriores a la 7 pueden manejar métodos de clase CustomError, pero solo cuando se declaran con {{JSxRef("Objetos_globales/Object/defineProperty", "Object.defineProperty()")}}. De lo contrario, las versiones antiguas de Babel y otros transpiladores no manejarán correctamente el siguiente código sin configuración adicional.

+
+ +
+

Algunos navegadores incluyen el constructor CustomError en el seguimiento de la pila cuando se utilizan clases de ES2015.

+
+ +
class CustomError extends Error {
+  constructor(foo = 'bar', ...params) {
+    // Pasa los argumentos restantes (incluidos los específicos del proveedor) al constructor padre
+    super(...params)
+
+    // Mantiene un seguimiento adecuado de la pila para el lugar donde se lanzó nuestro error (solo disponible en V8)
+    if (Error.captureStackTrace) {
+      Error.captureStackTrace(this, CustomError)
+    }
+
+    this.name = 'CustomError'
+    // Información de depuración personalizada
+    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
+}
+ +

Objeto Error personalizado ES5

+ +
+

Todos los navegadores incluyen el constructor CustomError en el seguimiento de la pila cuando se usa una declaración de prototipo.

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

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/error/linenumber/index.html b/files/es/web/javascript/reference/global_objects/error/linenumber/index.html new file mode 100644 index 0000000000..0efec0696f --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/error/linenumber/index.html @@ -0,0 +1,101 @@ +--- +title: Error.prototype.lineNumber +slug: Web/JavaScript/Referencia/Objetos_globales/Error/lineNumber +translation_of: Web/JavaScript/Reference/Global_Objects/Error/lineNumber +--- +
No es una norma
+Esta característica no es una norma y no está en la lista de normas. No la utilice en sitios de producción que enfrenta la Web: no va a funcionar para todos los usuarios. También puede haber grandes incompatibilidades entre implementaciones y el comportamiento puede cambiar en el futuro.
+ +
 
+ +
La propiedad lineNumber contiene el número de linea en el archivo que arrojó el error.
+ +
 
+ +

Ejemplos

+ +

Utilizando lineNumber

+ +
var e = new Error('No fue posible analizar el dato introducido');
+throw e;
+console.log(e.lineNumber) // 2
+
+ +

Ejemplo alternativo utilizando el evento 'error'

+ +
window.addEventListener('error', function(e) {
+  console.log(e.lineno); // 5
+});
+var e = new Error('No fue posible analizar el dato introducido');
+throw e;
+
+ +

Esta es una norma soportada por Chrome, Firefox entre otros.

+ +

Especificaciones

+ +

No forma parte de ninguna especificación. No es una norma.

+ + + +
+

 

+ +

Tabla de compatibilidad

+ + + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básicoCompatible [1]CompatibleNo compatibleNo compatibleNo compatible
+ +

 [1] Objeto error en errores manejados.

+ + + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChorme para AndroidFirefox Móvil (Gecko)IE MóvilOpera MóvilSafari Móvil
Soporte básicoNo compatibleNo compatibleCompatibleNo compatibleNo compatibleNo compatible
+
+ +

 

+ +

Vea también:

+ + diff --git a/files/es/web/javascript/reference/global_objects/error/message/index.html b/files/es/web/javascript/reference/global_objects/error/message/index.html new file mode 100644 index 0000000000..3f14983d6e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/error/message/index.html @@ -0,0 +1,114 @@ +--- +title: Error.prototype.message +slug: Web/JavaScript/Referencia/Objetos_globales/Error/message +translation_of: Web/JavaScript/Reference/Global_Objects/Error/message +--- +
{{JSRef}}
+ +

La propiedad message es una descripción legible del error.

+ +

Descripción

+ +

Esta propiedad contiene una breve descripción del error, si está disponible o ha sido fijado. SpiderMonkey hace un amplio uso de esta propiedad para las excepciones. Esta porpiedad combinada con la propiedad {{jsxref("Error.prototype.name", "name")}} es usada por el método {{jsxref("Error.prototype.toString()")}} para crear una cadena de texto del objeto Error.

+ +

Por defecto, la propiedad message es una cadena vacía, pero se puede especificar un mensaje a través del primer parámetro del {{jsxref("Error", "constructor Error")}}.

+ +

Ejemplo

+ +

Lanzar un error personalizado

+ +
var e = new Error('No se pudo analizar la entrada');
+// e.message es 'No se pudo analizar la entrada'
+throw e;
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial.
{{SpecName('ES5.1', '#sec-15.11.4.3', 'Error.prototype.message')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-error.prototype.message', 'Error.prototype.message')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-error.prototype.message', 'Error.prototype.message')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/error/name/index.html b/files/es/web/javascript/reference/global_objects/error/name/index.html new file mode 100644 index 0000000000..841cc7cbc4 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/error/name/index.html @@ -0,0 +1,58 @@ +--- +title: Error.prototype.name +slug: Web/JavaScript/Referencia/Objetos_globales/Error/name +tags: + - Error + - JavaScript + - Propiedad + - Prototipo +translation_of: Web/JavaScript/Reference/Global_Objects/Error/name +--- +
{{JSRef}}
+ +

La propiedad name representa un nombre para el tipo de error. El valor inicial es "Error".

+ +

Descripción

+ +

De forma predeterminada, las instancias {{JSxRef("Error")}} reciben el nombre "Error". La propiedad name, además de la propiedad {{JSxRef("Error.prototype.message", "message")}}, la utiliza el método {{JSxRef("Error.prototype.toString()")}} para crear una representación de cadena del error.

+ +

Ejemplos

+ +

Lanzar un error personalizado

+ +
var e = new Error('Entrada mal formada'); // e.name es 'Error'
+
+e.name = 'ParseError';
+throw e;
+// e.toString() devolverá 'ParseError: Entrada mal formada'
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-error.prototype.name', 'Error.prototype.name')}}
+ +

Compatibilidad del navegador

+ +
+
+ + +

{{Compat("javascript.builtins.Error.name")}}

+
+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/error/tosource/index.html b/files/es/web/javascript/reference/global_objects/error/tosource/index.html new file mode 100644 index 0000000000..fb1b429884 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/error/tosource/index.html @@ -0,0 +1,60 @@ +--- +title: Error.prototype.toSource() +slug: Web/JavaScript/Referencia/Objetos_globales/Error/toSource +tags: + - JavaScript + - No estandar + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Error/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

El método toSource() devuelve código que podría evaluar el mismo error.

+ +

Sintaxis

+ +
e.toSource()
+ +

Valor de retorno

+ +

Una cadena que contiene el código fuente del error.

+ +

Ejemplos

+ +

Usar toSource

+ +

Llamar al método toSource de una instancia {{JSxRef("Error")}} (incluido {{JSxRef("Global_Objects/Error", "NativeErrors", "#Error_types")}}) devolverá una cadena que contiene el código fuente del error. Esta cadena se puede evaluar para crear un objeto (aproximadamente) igual. Naturalmente, la cadena que contiene la fuente sigue la estructura del constructor {{JSxRef("Error")}}. Por ejemplo:

+ +
(newname(message ,fileName,lineNumber))
+
+ +

donde estos atributos corresponden a las propiedades respectivas de la instancia de error.

+ +
+

Nota: Ten en cuenta que las propiedades utilizadas por el método toSource en la creación de esta cadena son mutables y es posible que no reflejen con precisión la función utilizada para crear una instancia de error o el nombre de archivo o número de línea donde ocurrió un error real.

+
+ +

Especificaciones

+ +

No forma parte de ningún estándar.

+ +

Compatibilidad del navegador

+ +
+
+ + +

{{Compat("javascript.builtins.Error.toSource")}}

+
+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/error/tostring/index.html b/files/es/web/javascript/reference/global_objects/error/tostring/index.html new file mode 100644 index 0000000000..f4ea4a44b9 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/error/tostring/index.html @@ -0,0 +1,98 @@ +--- +title: Error.prototype.toString() +slug: Web/JavaScript/Referencia/Objetos_globales/Error/toString +tags: + - JavaScript + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Error/toString +--- +
{{JSRef}}
+ +

El método toString() devuelve una cadena que representa el objeto {{JSxRef("Error")}} especificado.

+ +

Sintaxis

+ +
e.toString()
+ +

Valor de retorno

+ +

Una cadena que representa el objeto {{JSxRef("Error")}} especificado.

+ +

Descripción

+ +

El objeto {{JSxRef("Error")}} redefine el método {{JSxRef("Object.prototype.toString()")}} heredado por todos los objetos. Su semántica es la siguiente (asumiendo que {{JSxRef("Object")}} y {{JSxRef("String")}} tienen sus valores originales):

+ +
Error.prototype.toString = function() {
+  'use strict';
+
+  var obj = Object(this);
+  if (obj !== this) {
+    throw new TypeError();
+  }
+
+  var name = this.name;
+  name = (name === undefined) ? 'Error' : String(name);
+
+  var msg = this.message;
+  msg = (msg === undefined) ? '' : String(msg);
+
+  if (name === '') {
+    return msg;
+  }
+  if (msg === '') {
+    return name;
+  }
+
+  return name + ': ' + msg;
+};
+
+ +

Ejemplos

+ +

Usar toString()

+ +
var e = new Error('fatal error');
+console.log(e.toString()); // 'Error: error fatal'
+
+e.name = undefined;
+console.log(e.toString()); // 'Error: error fatal'
+
+e.name = '';
+console.log(e.toString()); // 'error fatal'
+
+e.message = undefined;
+console.log(e.toString()); // ''
+
+e.name = 'hola';
+console.log(e.toString()); // 'hola'
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-error.prototype.tostring', 'Error.prototype.toString')}}
+ +

Compatibilidad del navegador

+ +
+ + +

{{Compat("javascript.builtins.Error.toString")}}

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/escape/index.html b/files/es/web/javascript/reference/global_objects/escape/index.html new file mode 100644 index 0000000000..4925618b0e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/escape/index.html @@ -0,0 +1,91 @@ +--- +title: escape() +slug: Web/JavaScript/Referencia/Objetos_globales/escape +tags: + - JavaScript + - Obsoleto + - escape +translation_of: Web/JavaScript/Reference/Global_Objects/escape +--- +
{{Deprecated_header}} Advertencia escape() no esta estrictamente en desuso("eliminada por los estándares Web"), esta definida en  Anexo B El estándar ECMA-262 , cuya introducción establece: +
… Todos las características especificas y comportamientos del lenguaje en este anexo tienen mas de una caracterísitca indeseable y en ausencia del legado sera eliminada de esta especificación. …
+… Los programadores no deben usar o suponer la existencia de estas características y/o comportamientos al escribir nuevo código ECMAScript …
+
+ +
+ +

La función obsoleta escape() crea una nueva cadena de caracteres en los que ciertos caracteres han sido sustituidos por una secuencia hexadecimal de escape.

+ +

Sintaxis

+ +
escape(str)
+ +

Parametros

+ +
+
str
+
Cadena a codificar.
+
+ +

Devuelve

+ +

Una nueva cadena en la que ciertos caracteres han sido sustituidos.

+ +

Descripción

+ +

La función escape es una propiedad del objeto global. SLos caracteres especiales son codificados a excepción de: @*_+-./

+ +

La forma hexadecimal de los caracteres cuyo valor es 0xFF o menor, es una secuencia de escape de dos digitos: %xx. Para caracteres un valor superior, se usa el fomato de cuatro digitos: %uxxxx.

+ +

Ejemplos

+ +
escape('abc123');     // "abc123"
+escape('äöü');        // "%E4%F6%FC"
+escape('ć');          // "%u0107"
+
+// caracteres especiales
+escape('@*_+-./');    // "@*_+-./"
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES1')}}{{Spec2('ES1')}}Initial definition.
{{SpecName('ES5.1', '#sec-B.2.1', 'escape')}}{{Spec2('ES5.1')}}Defined in the (informative) Compatibility Annex B
{{SpecName('ES6', '#sec-escape-string', 'escape')}}{{Spec2('ES6')}}Defined in the (normative) Annex B for Additional ECMAScript Features for Web Browsers
{{SpecName('ESDraft', '#sec-escape-string', 'escape')}}{{Spec2('ESDraft')}}Defined in the (normative) Annex B for Additional ECMAScript Features for Web Browsers
+ +

Compatibilidad con navegadores

+ +

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

+ +

Ver más

+ + diff --git a/files/es/web/javascript/reference/global_objects/eval/index.html b/files/es/web/javascript/reference/global_objects/eval/index.html new file mode 100644 index 0000000000..52375445c4 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/eval/index.html @@ -0,0 +1,309 @@ +--- +title: eval +slug: Web/JavaScript/Referencia/Objetos_globales/eval +tags: + - JavaScript + - eval +translation_of: Web/JavaScript/Reference/Global_Objects/eval +--- +
{{jsSidebar("Objects")}}
+ +

Resumen

+ +

La función eval() evalúa un código JavaScript representado como una cadena de caracteres (string), sin referenciar a un objeto en particular.

+ +

Sintaxis

+ +
eval(cadena de caracteres o string)
+
+ +

Parámetros

+ +
+
cadena de caracteres (string)
+
Una cadena de caracteres (string) que representa una expresión, sentencia o secuencia de sentencias en JavaScript. La expresión puede incluir variables y propiedades de objetos existentes.
+
+

Valores retornados o devueltos

+
+
+ +

El valor que resulta de la evaluación del código proporcionado. Si este valor está vacío. {{jsxref("undefined")}} (artículo en inglés) es devuelto.

+ +

Descripción

+ +

eval() es una propiedad de la función del objeto global.

+ +

El argumento de la función eval es una cadena de caracteres. Si la cadena de caracteres representa una expresión, eval() evalúa la expresión. Si el argumento representa una o más sentencias JavaScript, eval() evalúa las sentencias. No se debe llamar a eval() para evaluar una expresión aritmética; ya que JavaScript evalúa las expresiones aritméticas automáticamente.

+ +

Si construye una expresión aritmética como una cadena de caracteres, puede usar eval() para evaluarla más tarde. Por ejemplo, suponga que tiene la variable x. Puede posponer la evaluación de una expresión que involucre a x mediante la asignación del valor de la cadena de caracteres de la expresión, asignando "3 * x + 2" a la variable, y entonces llamar a eval() posteriormente en el script.

+ +

Si el argumento de eval() no es una cadena de caracteres, eval() devuelve el argumento sin cambio. En el siguiente ejemplo, el constructor String es especificado, y eval() devuelve un objeto String en lugar de evaluar la cadena de caracteres.

+ +
eval(new String("2 + 2")); // devuelve un objeto String que contiene "2 + 2"
+eval("2 + 2");             // devuelve 4
+
+ +

Puede trabajar sobre esta limitación de una manera genérica utilizando toString().

+ +
var expresion = new String("2 + 2");
+eval(expresion.toString());
+
+ +

Si utiliza la función eval() indirectamente, invocándola a través de una referencia distinta de eval, a partir de ECMAScript 5, ésta funciona en el ámbito global en lugar de hacerlo en el ámbito local; esto quiere decir, por ejemplo, que las declaraciones de función crean funciones globales, y que el código siendo evaluado no tiene acceso a las variables locales dentro del ámbito en donde está siendo llamada.

+ +
function test() {
+  var x = 2, y = 4;
+  console.log(eval("x + y"));  // Llamada directa, utiliza el ámbito local, el resultado es 6
+  var geval = eval;
+  console.log(geval("x + y")); // Llamada indirecta, utiliza el ámbito global, através de ReferenceError por que `x` es indefinida
+}
+ +

No utilice eval innecesariamente

+ +

eval() es una función peligrosa, quel ejecuta el código el cual es pasado con los privilegios de quien llama.  Si ejecuta eval() con una cadena de carcteres que podría ser afectada por un elemento malicioso, podría terminar ejecutando código malicioso dentro de la computadora del usuario con los permisos de su página o extensión web . Más importante aún, una parte del código de terceros podría accesar al ámbito en el cual eval() fue invocada, lo que puede permitir la entrada a posibles ataques de formas a las que el constructor {{jsxref("Global_Objects/Function", "Function")}} (art. en inglés) el cual es similar, no es susceptible.

+ +

eval() es generalmente también más lenta que otras alternativas desde que se invoca en el intérprte de JS, mientras que otros muchos constructores son optimizados por los motores JS modernos.

+ +

Existen alternativas más seguras (y rápidas) que eval() para casos de uso común.

+ +

Accediendo a propiedades de los miembros

+ +

No debería utilizar eval() con el fin de convertir nombres de propiedades en propiedades. Observe el siguiente ejemplo en el cual la función getNombreCampo(n) devuelve el nombre del elemento del formulario especificado como una cadena. La primera sentencia asigna el valor de cadena del tercer elemento del formulario a la variable campo. La segunda sentencia utiliza eval para mostrar el valor del elemento del formulario.

+ +
var campo = getNombreCampo(3);
+document.write("El campo llamado ", campo, " tiene un valor de ", eval(campo + ".value"));
+
+ +

Sin embargo, eval() no es necesario en este código. De hecho, su uso aquí no se recomienda. En su lugar, utilice los operadores de miembro (art. en inglés), que son mucho más rápidos y seguros:

+ +
var campo = getFieldName(3);
+document.write("El campo llamado ", campo, " tiene un valor de ", campo[valor]);
+
+ +

Considere ahora este nuevo ejemplo, en donde la propiedad del objeto a ser accesado no es conocida hasta que el código es ejecutado. Esto puede hacerse con eval:

+ +
var obj = { a: 20, b: 30 };
+var nombreProp = obtenerNombreProp();  // devuelve "a" o "b"
+
+eval( "var resultado = obj." + nombreProp );
+ +

Y con el uso de los accesores de propiedades (artículo en inglés), el cual es mucho más rápido y seguro, sería así:

+ +
var obj = { a: 20, b: 30 };
+var nombreProp = obtenerNombreProp(); // devuelve "a" o "b"
+var resultado = obj[ nombreProp ];  //  obj[ "a" ] es el mismo que obj.a
+ +

Puede incluso utilizar este método para acceder a las propiedades de los descendientes. Utilizando eval() esto sería de la siguiente forma:

+ +
var obj = {a: {b: {c: 0}}};
+var propPath = getPropPath();  // returns e.g. "a.b.c"
+
+eval( "var result = obj." + propPath );
+ +

Evitando eval(), esto podría hacerse dividiendo la ruta de propiedad y haciendo un bucle a través de las diferentes propiedades:

+ +
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();  // returns e.g. "a.b.c"
+var result = getDescendantProp(obj, propPath);
+ +

Estableciendo una propiedad que funcione de modo similar:

+ +
function setDescendantProp(obj, desc, value) {
+  var arr = desc.split(".");
+  while(arr.length > 1) {
+    obj = obj[arr.shift()];
+  }
+  obj[arr[0]] = value;
+}
+
+var obj = {a: {b: {c: 0}}};
+var propPath = getPropPath();  // returns e.g. "a.b.c"
+var result = setDescendantProp(obj, propPath, 1);  // test.a.b.c will now be 1
+ +

Utilice funciones en lugar de evaluar fragmentos de código

+ +

JavaScript tiene funciones de primera clase (artículo en inglés), lo que quiere decir que usted puede pasar funciones como argumentos a otras APIs, almacenarlas en variables y propiedades de objetos, etc. Muchas APIs de DOM están diseñadas con esto en mente, o sea que usted puede (y debería) escribir:

+ +
// instead of setTimeout(" ... ", 1000) use:
+setTimeout(function() { ... }, 1000);
+
+// instead of elt.setAttribute("onclick", "...") use:
+elt.addEventListener("click", function() { ... } , false);
+ +

Las clausuras o cierres (art. en inglés) son muy útiles como forma de crear funciones parametrizadas sin la concatenación de cadenas de caracteres o strings.

+ +

Analizando JSON (convirtiendo cadenas de caracteres (strings) hacia objetos de JavaScript)

+ +

Si la cadena de caracteres que usted esta llamando eval() contiene datos (por ejemplo, un array: "[1, 2, 3]"), en contraposición al código, debería considerar un cambio a JSON (art. en inglés), el cual permite a la cadena de caracteres utilizar un subconjunto de sintaxis de JavaScript para representar los datos. Vea también Descargando JSON y JavaScript en extensiones (art. en inglés).

+ +

Observe, que ya que la sintaxis de JSON es limitada en comparación con la sintaxis de JavaScript, muchas literales válidas de JavaScript no serán analizadas como JSON. Por ejemplo, seguir comas no está permitido en JSON, y los nombres de propiedades (keys) en literales de objeto deben ser entrecomilladas. Asegúrese de utilizar un serializados de JSON para generar cadenas de caracteres que posteriormente sean analizadas como JSON.

+ +

Pasar datos en lugar de código

+ +

Por ejemplo, una extensión diseñada para arrastar contenido de páginas web podría tener reglas de arrastre definidas en XPath (art. en inglés) en lugar de código JavaScript.

+ +

Ejecutar código sin privilegos limitados

+ +

Si usted debe ejecutar código, considere ejecutarlo con privilegios reducidos. Este consejo aplica principalmente para las extensiones y las aplicaciones XUL, para lo cual puede utilizar Components.utils.evalInSandbox (art. en inglés).

+ +

Ejemplos

+ +

Los siguientes ejemplos muestran el resultado usando document.write. En JavaScript del lado servidor, puede mostrar el mismo resultado llamando a la función write en vez de document.write.

+ +

Utlizando eval

+ +

En el siguiente código, las dos sentencias que contienen eval devuelven 42. La primera evalúa la cadena "x + y + 1"; la segunda evalúa la cadena "42".

+ +
var x = 2;
+var y = 39;
+var z = "42";
+eval("x + y + 1"); // returns 42
+eval(z);           // returns 42
+
+ +

Utilizando eval para evaluar una cadena de caracteres (string) como sentencias de JavaScript

+ +

El siguiente ejemplo utiliza eval para evaluar una cadena de caracteres str. Esta cadena consiste de sentencias de JavaScript que abren un diálogo Alert y asignan a z un valor de 42 si x es cinco, y asigna 0 a z en caso contrario. Cuando se ejecuta la segunda sentencia, eval ocasionará que estas sentencias sean ejecutadas, y también evaluará el conjunto de sentencias y devolverá que el valor es asignado a z.

+ +
var x = 5;
+var str = "if (x == 5) {alert('z is 42'); z = 42;} else z = 0; ";
+
+document.write("<P>z es ", eval(str));
+
+ +

La última espresión es evaluada

+ +

eval() devuelve el valor de la última expresión evaluada

+ +
var str = "if ( a ) { 1+1; } else { 1+2; }";
+var a = true;
+var b = eval(str);  // devuelve 2
+
+console.log("b is : " + b);
+
+a = false;
+b = eval(str);  // devuelve 3
+
+console.log("b is : " + b);
+ +

eval como una cadena de caracteres (string) definiendo funciones requiere "(" y ")" como prefijo y sufijo

+ +
var fctStr1 = "function a() {}"
+var fctStr2 = "(function a() {})"
+var fct1 = eval(fctStr1)  // devuelve undefined
+var fct2 = eval(fctStr2)  // deuelve una función
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificacionesStatusComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial.
{{SpecName('ES5.1', '#sec-15.1.2.1', 'eval')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-eval-x', 'eval')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-eval-x', 'eval')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
Carác.ChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Observaciones específicas para Gecko

+ + + +

Compatibilidad Hacia Atrás

+ +

JavaScript 1.3 y anteriores

+ +

Puede usar eval indirectamente, aunque ésto está desaconsejado.

+ +

JavaScript 1.1

+ +

eval también es un método de todos los objetos.

+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/evalerror/index.html b/files/es/web/javascript/reference/global_objects/evalerror/index.html new file mode 100644 index 0000000000..13fbe371e4 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/evalerror/index.html @@ -0,0 +1,163 @@ +--- +title: EvalError +slug: Web/JavaScript/Referencia/Objetos_globales/EvalError +tags: + - Error +translation_of: Web/JavaScript/Reference/Global_Objects/EvalError +--- +
{{JSRef}}
+ +

El objeto EvalError indica un error con respecto a la función global {{jsxref("Global_Objects/eval", "eval()")}}. Esta excepción ya no es lanzada por JavaScript, sin embargo, el objeto EvalError se mantiene por motivos de compatibilidad.

+ +

Sintaxis

+ +
new EvalError([mensaje[, nombreArchivo[, lineaNumero]]])
+ +

Parámetros

+ +
+
mensaje
+
Opcional. Descripción del error en formato legible.
+
nombreArchivo{{non-standard_inline}}
+
+

Opcional. El nombre del archivo que contiene el código que causó la excepción.

+
+
lineaNumero{{non-standard_inline}}
+
+

Opcional. El número de línea del código que causó la excepción.

+
+
+ +

Propiedades

+ +
+
{{jsxref("EvalError.prototype")}}
+
+

Permite la adición de propiedades a un objeto EvalError.

+
+
+ +

Métodos

+ +

El objeto global EvalError no contiene ningún método propio, sin embargo, hereda algunos métodos a través de la cadena de prototipos.

+ +

Instancias de EvalError

+ +

Propiedades

+ +
{{page('/es/docs/Web/JavaScript/Referencia/Objetos_globales/Error/prototype', 'Properties')}}
+ +

Métodos

+ +
{{page('/es/docs/Web/JavaScript/Referencia/Objetos_globales/Error/prototype', 'Métodos')}}
+ +

Ejemplos

+ +

EvalError no se usa en la especificación actual de ECMAScript y, por ende, no será lanzado en tiempo de ejecución. Sin embargo, el mismo permanece para compatibilidad con versiones anteriores de la especificación.

+ +

Creando un 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"
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial.
{{SpecName('ES5.1', '#sec-15.11.6.1', 'EvalError')}}{{Spec2('ES5.1')}}No usado en esta especificación. Presente por compatibilidad con versiones anteriores.
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-evalerror', 'EvalError')}}{{Spec2('ES6')}}No usado en esta especificación. Presente por compatibilidad con versiones anteriores.
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-evalerror', 'EvalError')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad en Navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/function/apply/index.html b/files/es/web/javascript/reference/global_objects/function/apply/index.html new file mode 100644 index 0000000000..07f47b42f2 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/apply/index.html @@ -0,0 +1,233 @@ +--- +title: Function.prototype.apply() +slug: Web/JavaScript/Referencia/Objetos_globales/Function/apply +tags: + - Function + - JavaScript + - Method + - función + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Function/apply +--- +
{{JSRef("Objetos_globales", "Function")}}
+ +

Resumen

+ +

El método apply() invoca una determinada función asignando explícitamente el objeto this y un array o similar (array like object) como parámetros (argumentos) para dicha función.

+ +
NOTA: Aunque la sintaxis de esta función es casi idéntica a {{jsxref("Function.call", "call()")}}, la diferencia fundamental es que call() acepta una lista de argumentos, mientras que apply() acepta un simple array con los argumentos.
+ +

Sintaxis

+ +
fun.apply(thisArg[, argsArray])
+ +

Parámetros

+ +
+
thisArg
+
El valor del objeto this a utilizar dentro de la llamada a fun. Cabe mencionar que éste puede no ser el valor visto por el método: si el método es una función del tipo {{jsxref("Functions_and_function_scope/Strict_mode", "non-strict mode", "", 1)}}, {{jsxref("Global_Objects/null", "null")}} o {{jsxref("Global_Objects/undefined", "undefined")}} será reemplazado por el objeto global, y los valores primitivos serán encapsulados.
+
argsArray
+
Un objeto similar a un array (array like object), que contiene los parámetros con los que será llamada fun, o null o {{jsxref("undefined")}} si ningún argumento es estipulado. Desde la versión 5 de ECMAScript estos parámetros pueden estar en un objeto similar a un array en lugar de un array. Véase {{anch("Browser_compatibility", "browser compatibility")}} para mayor información.
+
+

Valor de retorno

+ +

El resultado de llamar a la función con el valor dado this y argumentos.

+
+
+ +

Descripción

+ +

Puede estipularse un objeto this diferente al llamar una función. this se refiere al objeto actual, el objeto haciendo la llamada. Con apply, puede escribirse un método una vez y heredarlo a otro objeto, sin necesidad de reescribir el método para adecuarlo al nuevo objeto.

+ +

apply es muy similar a {{jsxref("Function.call", "call()")}}, excepto por el tipo de argumentos que soporta. Puede utilizarse un arreglo de parámetros en lugar de un conjunto de pares nombre-valor. Con apply, puede utilizarse un arreglo literal, por ejemplo, fun.apply(this, ['eat', 'bananas']), o un objeto Array, por ejemplo, fun.apply(this, new Array('eat', 'bananas')).

+ +

Puede también utilizarse {{jsxref("Funciones/arguments", "arguments")}} como parámetro argsArray. arguments es una variable local a la función. Puede utilizarse para acceder a todos los argumentos no específicados en la llamada al objeto. Por lo tanto, no se requiere conocer todos los argumentos del objeto invocado cuando se utiliza el método apply. Puede utilizarse arguments para pasar los argumentos al objeto invocado. El objeto invocado es entonces responsable por el manejo de los argumentos.

+ +

Desde la 5ta edición de ECMAScript se puede utilizar también cualquier tipo de objeto similar a un arreglo, que en términos prácticos significa que tendrá una propiedad length y propiedades integer en el rango (0...length). Por ejemplo, ahora puede utilizarse un {{domxref("NodeList")}} o un objeto personalizado como: {'length': 2, '0': 'eat', '1': 'bananas'}.

+ +
{{ note("La mayoría de los navegadores, incluidos Chrome 14 e Internet Explorer 9, aún no soportan el uso de objetos similares a un array y arrojarán una excepción.") }}
+ +
 
+ +

Ejemplos

+ +

Utilizando apply para encadenar constructores

+ +

Puedes utilizar apply para encadenar {{jsxref("Operadores/new", "constructors")}} para un objeto, similar a Java. En el ejemplo siguiente se crea un método global a {{jsxref("Function")}} llamado construct, en cual posibilita el uso de un objeto similar a un arreglo en un constructor en lugar de una lista de argumentos.

+ +
Function.prototype.construct = function (aArgs) {
+    var fConstructor = this, fNewConstr = function () { fConstructor.apply(this, aArgs); };
+    fNewConstr.prototype = fConstructor.prototype;
+    return new fNewConstr();
+};
+ +

Ejemplo de uso:

+ +
function MyConstructor () {
+    for (var nProp = 0; nProp < arguments.length; nProp++) {
+        this["property" + nProp] = arguments[nProp];
+    }
+}
+
+var myArray = [4, "Hello world!", false];
+var myInstance = MyConstructor.construct(myArray);
+
+alert(myInstance.property1); // alerts "Hello world!"
+alert(myInstance instanceof MyConstructor); // alerts "true"
+alert(myInstance.constructor); // alerts "MyConstructor"
+ +
Nota: El método Function.construct no nativo no funcionará con algunos constructores nativos (como {{jsxref("Date")}}, por ejemplo). En estos casos se deberá utilizar el método {{jsxref("Function.bind")}} (por ejemplo, supóngase un arreglo como el siguiente para utilizar con el constructor Date: [2012, 11, 4]; en este caso se tendría que escribir algo como: new (Function.prototype.bind.apply(Date, [null].concat([2012, 11, 4])))() – de cualquier manera, ésta no es la mejor manera de hacerlo y probablemente no debería utilizarse en ningún entorno en producción).
+ +

apply y funciones built-in

+ +

El uso inteligente de apply permite utilizar funciones built-in para algunas tareas que, de otra manera, habrían sido escritas recorriendo los valores del arreglo dentro de un bucle. Como ejemplo, vamos a utilizar Math.max/Math.min para encontrar el máximo/mínimo valor en un arreglo.

+ +
/* min/max number in an array */
+var numbers = [5, 6, 2, 3, 7];
+
+/* using Math.min/Math.max apply */
+var max = Math.max.apply(null, numbers); /* This about equal to Math.max(numbers[0], ...) or Math.max(5, 6, ..) */
+var min = Math.min.apply(null, numbers);
+
+/* vs. simple loop based algorithm */
+max = -Infinity, min = +Infinity;
+
+for (var i = 0; i < numbers.length; i++) {
+  if (numbers[i] > max)
+    max = numbers[i];
+  if (numbers[i] < min)
+    min = numbers[i];
+}
+ +

Pero cuidado: utilizando apply de esta manera estás corriendo el riesgo de exceder el límite de argumentos permitido por el motor de JavaScript. Las consecuencias de aplicar una función con demasiados argumentos (imagínate más de decenas de miles de argumentos) varían entre los distintos motores (JavaScriptCore tiene un límite de argumentos fijo de 65536), porque el límite (de hecho, incluso el comportamiento de cualquier pila excesivamente larga) no está especificado. Algunos motores lanzarán una excepción. Más perniciosamente, otros limitarán de manera arbitraria el número de argumentos que se están pasando en realidad a la función. (Para ilustrar este último caso: si un motor tuviera un límite de cuatro argumentos [por supuesto, los límites reales son significamente mayores], sería como si los argumentos 5, 6, 2 y 3 hubieran sido pasados a apply en los ejemplos anteriores, en lugar del arreglo completo). Si el valor de tu arreglo pudiera crecer en decenas de miles, utiliza una estrategia híbrida: aplica a tu función trozos del array a la vez:

+ +
function minOfArray(arr) {
+  var min = Infinity;
+  var 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;
+}
+
+var min = minOfArray([5, 6, 2, 3, 7]);
+ +

Utilizando apply en "monkey-patching" 

+ +

(Reemplazando de manera dinámica los argumentos en tiempo de ejecución)

+ +

apply puede ser la mejor manera de reemplazar dinámicamente una función 'built-in' de Firefox, o de una librería de JavaScript. Dada una función someobject.foo, puedes modificar la función de una forma 'hacker', como ésta:

+ +
var originalfoo = someobject.foo;
+someobject.foo = function() {
+  // Haz algo antes de llamar a la función
+  console.log(arguments);
+  // Llama a la función como la hubieras llamado normalmente
+  originalfoo.apply(this, arguments);
+  // Aquí, ejecuta algo después
+}
+ +

Este método es especialmente útil cuando quieres depurar eventos, o interfaces con algún elemento que no tiene API, al igual que los diversos .on (eventos [event]..., como los que se usan en el Devtools Inspector)

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición Inicial. Implementada in JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.3.4.3', 'Function.prototype.apply')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-function.prototype.apply', 'Function.prototype.apply')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-function.prototype.apply', 'Function.prototype.apply')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad entre navegadores

+ +

{{CompatibilityTable}}

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
ES 5.1 generic array-like object as {{jsxref("Functions/arguments", "arguments")}}{{CompatUnknown}}{{CompatGeckoDesktop("2.0")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
ES 5.1 generic array-like object as {{jsxref("Functions/arguments", "arguments")}}{{CompatUnknown}}
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/function/arguments/index.html b/files/es/web/javascript/reference/global_objects/function/arguments/index.html new file mode 100644 index 0000000000..f0f8f6ca90 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/arguments/index.html @@ -0,0 +1,44 @@ +--- +title: Function.arguments +slug: Web/JavaScript/Referencia/Objetos_globales/Function/arguments +translation_of: Web/JavaScript/Reference/Global_Objects/Function/arguments +--- +
{{JSRef("Objetos_globales", "Function")}} {{deprecated_header}}
+ +

Resumen

+ +

Un objeto de tipo arreglo correspondiente a los argumentos pasados a la función.

+ +

Descripción

+ +

Use el objeto arguments disponible dentro de las funciones en vez de Function.arguments.

+ +

Notas

+ +

En caso de recursividad, es decir, si la función f aparece varias veces en la pila de llamada, el valor de f.arguments representa los argumentos correspondientes a la invocación más reciente de la función.

+ +

Ejemplo

+ +
function f(n) { g(n-1) }
+function g(n) {
+  print("antes: " + g.arguments[0]);
+  if(n>0)
+    f(n);
+  print("después: " + g.arguments[0]);
+}
+f(2)
+
+ +

resultados:

+ +
antes: 1
+antes: 0
+después: 0
+después: 1
+
+ +

 

+ +
 
+ +

{{ languages( { "en": "en/Core_JavaScript_1.5_Reference/Global_Objects/Function/arguments", "pl": "pl/Dokumentacja_j\u0119zyka_JavaScript_1.5/Obiekty/Function/arguments" } ) }}

diff --git a/files/es/web/javascript/reference/global_objects/function/bind/index.html b/files/es/web/javascript/reference/global_objects/function/bind/index.html new file mode 100644 index 0000000000..bdc7b5b73c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/bind/index.html @@ -0,0 +1,293 @@ +--- +title: Function.prototype.bind() +slug: Web/JavaScript/Referencia/Objetos_globales/Function/bind +translation_of: Web/JavaScript/Reference/Global_Objects/Function/bind +--- +
{{JSRef("Global_Objects", "Function")}}
+ +

Resumen

+ +

El método bind() crea una nueva función, que cuando es llamada, asigna a su operador  this el valor entregado, con una secuencia de argumentos dados precediendo a cualquiera entregados cuando la función es llamada. 

+ +

El valor de this es ignorado cuando la función es llamada con el operador new.

+ +

Sintaxis

+ +
fun.bind(thisArg[, arg1[, arg2[, ...]]])
+ +

Parametros

+ +
+
thisArg
+
Es un valor que será enviado a la función destino cuando se llame a la función de enlace. Este valor será ignorado si la función de enlace es construida usando el operador {{jsxref("Operators/new", "new")}}.
+
arg1, arg2, ...
+
Son los argumentos que se enviarán además de los provistos a la función de enlace cuando se invoque la función destino.
+
+ +

Valor de retorno

+ +

Una copia de la función entregada con el valor especificado this y los argumentos iniciales.

+ +

Descripción

+ +

La función bind() crea una nueva función (función ligada) con el mismo cuerpo (propiedad interna {{jsxref("Function.prototype.call", "call")}} en términos de ECMAScript 5) como la función que será llamada (la función objetivo de la función ligada) con la referencia this asociada al primer argumento de bind(), el cual no podrá ser sobreescrito. bind() también acepta parámetros predeterminados que antecederán al resto de los parámetros específicos cuando la función objetivo sea llamada. Una función ligada también puede ser construída utilizando el operador {{jsxref("Operators/new", "new")}}: al hacerlo, actuará como si en su lugar hubiera sido construída la función objetivo.

+ +

En este último caso, el parámetro correspondiente para this será ignorado, aunque los parámetros predeterminados que antecederán al resto sí serán provistos para la función emulada.

+ +

Ejemplos

+ +

Ejemplo: Crear una función ligada

+ +

El uso más simple de bind() es hacer que una función que, sin importar cómo es llamada, siempre apunte al mismo objeto con la referencia this. Un error común para nuevos programadores de JavaScript es que obtienen una referencia a un método de un objeto, posteriormente ejecutan ese método desde la referencia externa y esperan que la referencia de this siga apuntando al objeto original de donde se obtuvo el método (v.g. cuando se usa ese método en un callback). Sin el debido cuidado, el objeto original es comúnmente perdido. Creando una función ligada desde la función  empleando el objeto original, resuelve limpiamente este problema:

+ +
this.x = 9;
+var module = {
+  x: 81,
+  getX: function() { return this.x; }
+};
+
+module.getX(); // 81
+
+var getX = module.getX;
+getX(); // 9, porque en este caso, "this" apunta al objeto global
+
+// Crear una nueva función con 'this' asociado al objeto original 'module'
+var boundGetX = getX.bind(module);
+boundGetX(); // 81
+ +

Ejemplo: Funciones Parciales

+ +

El siguiente uso simple de bind() es definir una función con argumentos predeterminados que precederán a los argumentos finales de la función ligada. Estos argumentos iniciales (en caso de haberlos) se definen a continuación de lo que será la referencia de this y son entonces enviados como argumentos de la función objetivo, seguidos por los argumentos enviados a la función ligada cada vez que dicha función sea llamada.

+ +
function list() {
+  return Array.prototype.slice.call(arguments);
+}
+
+var list1 = list(1, 2, 3); // [1, 2, 3]
+
+// Crear funcion (sin referencia this) con argumento inicial predeterminado
+var leadingThirtysevenList = list.bind(undefined, 37);
+
+var list2 = leadingThirtysevenList(); // [37]
+var list3 = leadingThirtysevenList(1, 2, 3); // [37, 1, 2, 3]
+
+ +

Ejemplo: Con setTimeout

+ +

De manera predeterminada, dentro de {{ domxref("window.setTimeout()") }}, la palabra reservada this será setteada al objeto {{ domxref("window") }} (o a global). Cuando se esté trabajando con métodos de clase que requieran que this se refiera a instancias de clase, usted puede explícitamente ligar this a la función callback para mantener la referencia de la instancia.

+ +
function LateBloomer() {
+  this.petalCount = Math.ceil(Math.random() * 12) + 1;
+}
+
+// Declare bloom after a delay of 1 second
+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!');
+};
+
+ +

Ejemplo: Funciones ligadas usadas como constructores

+ +
+

Advetencia: Esta sección demuestra las capacidades de JavaScript y documenta algunos usos extremos del método bind(). Los métodos mostrados a continuación no son la mejor forma de hacer las cosas y probablemente no deberían ser utilizados en ningún ambiente productivo.

+
+ +

Las funciones ligadas son automáticamente adecuadas para usarse con el operador {{jsxref("Operators/new", "new")}} para construir nuevas instancias creadas por la función objetivo. Cuando una función ligada es utilizada para construir un valor, el parámetro enviado para reemplazar la referencia this es ignorado. De cualquier forma, los argumentos iniciales sí son tomados en consideración y antecederán a los parámetros que se envíen al constructor:

+ +
function Point(x, y) {
+  this.x = x;
+  this.y = y;
+}
+
+Point.prototype.toString = function() {
+  return this.x + ',' + this.y;
+};
+
+var p = new Point(1, 2);
+p.toString(); // '1,2'
+
+
+var emptyObj = {};
+var YAxisPoint = Point.bind(emptyObj, 0/*x*/);
+// not supported in the polyfill below,
+// works fine with native bind:
+var YAxisPoint = Point.bind(null, 0/*x*/);
+
+var axisPoint = new YAxisPoint(5);
+axisPoint.toString(); // '0,5'
+
+axisPoint instanceof Point; // true
+axisPoint instanceof YAxisPoint; // true
+new Point(17, 42) instanceof YAxisPoint; // true
+
+ +

Note que no necesita hacer nada especial para crear una función ligada para usarse con {{jsxref("Operators/new", "new")}}. El razonamiento es que usted no necesita hacer nada especial para crear una función ligada para ser llamada planamente, aún si usted prefiriera requerir que la función ligada sea llamada únicamente utilizando {{jsxref("Operators/new", "new")}}.

+ +
// Ejemplo que puede ser ejecutado directamente en tu consola JavaScript
+// ...continúa de arriba
+
+// Aún puede ser invocada como una función normal
+// (aunque es usualmente indeseable)
+YAxisPoint(13);
+
+emptyObj.x + ',' + emptyObj.y;
+// >  '0,13'
+
+ +

Si desea utilizar una función ligada únicamente usando {{jsxref("Operators/new", "new")}}, o únicamente mediante una llamada directa, la función objetivo debe forzar esa restricción.

+ +

Ejemplo: Crear atajos

+ +

bind() también es útil en casos en los que desea crear un atajo para una función que requiere una referencia específica para this.

+ +

Tomando {{jsxref("Array.prototype.slice")}}, por ejemplo, el cual se desearía utilizar para convertir un objeto tipo array a un arreglo real. Podría crear un atajo como el siguiente:

+ +
var slice = Array.prototype.slice;
+
+// ...
+
+slice.call(arguments);
+
+ +

Con bind(), esto puede ser simplificado. En el siguiente fragmento de código, slice es una función ligada a la función {{jsxref("Function.prototype.call()", "call()")}} de {{jsxref("Function.prototype")}}, con la referencia this setteada a la función {{jsxref("Array.prototype.slice()", "slice()")}} de {{jsxref("Array.prototype")}}. Esto significa que llamadas adicionales a call() pueden omitirse:

+ +
// same as "slice" in the previous example
+var unboundSlice = Array.prototype.slice;
+var slice = Function.prototype.call.bind(unboundSlice);
+
+// ...
+
+slice(arguments);
+
+ +

Polyfill

+ +

La función bind() fue añadida a la especificación ECMA-262, 5a edición; por lo tanto podría no estar presente en todos los navegadores. Usted puede parcialmente simularla al insertar el siguiente código al inicio de sus scripts, permitiendo emplear muchas de las funcionalidades de bind() en implementaciones que no la soportan nativamente.

+ +
if (!Function.prototype.bind) {
+  Function.prototype.bind = function(oThis) {
+    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 aArgs   = Array.prototype.slice.call(arguments, 1),
+        fToBind = this,
+        fNOP    = function() {},
+        fBound  = function() {
+          return fToBind.apply(this instanceof fNOP && oThis
+                 ? this
+                 : oThis,
+                 aArgs.concat(Array.prototype.slice.call(arguments)));
+        };
+
+    fNOP.prototype = this.prototype;
+    fBound.prototype = new fNOP();
+
+    return fBound;
+  };
+}
+
+ +

Algunas de las muchas diferencias (bien podría haber otras, en tanto la siguiente lista no intenta ser exhaustiva) entre este algoritmo y el algoritmo de la especificación son:

+ + + +

Si elige usar esta implementación parcial, no debe de utilizarla en los casos en los que el comportamiento es distinto al de la especificación ECMA-262, 5th edition! Con un poco de cuidado, de cualquier manera (y tal vez con algunas modificaciones adicionales para adecuarse a sus necesidades específicas), esta implementación parcial podría ser un puente razonable al momento en que bind() sea ampliamente implementada acorde a a la especificación.

+ +

Por favor checa https://github.com/Raynos/function-bind para ver una solución más profunda.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES5.1', '#sec-15.3.4.5', 'Function.prototype.bind')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en JavaScript 1.8.5.
{{SpecName('ES6', '#sec-function.prototype.bind', 'Function.prototype.bind')}}{{Spec2('ES6')}} 
+ +

Compatibilidad de navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome("7")}}{{CompatGeckoDesktop("2")}}{{CompatIE("9")}}{{CompatOpera("11.60")}}{{CompatSafari("5.1.4")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatAndroid("4.0")}}{{CompatChrome("0.16")}}{{CompatGeckoMobile("2")}}{{CompatUnknown}}{{CompatOperaMobile("11.50")}}{{CompatSafari("6.0")}}
+
+ +

Basado en Kangax's compat tables.

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/function/call/index.html b/files/es/web/javascript/reference/global_objects/function/call/index.html new file mode 100644 index 0000000000..4200c5d2a5 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/call/index.html @@ -0,0 +1,113 @@ +--- +title: Function.prototype.call() +slug: Web/JavaScript/Referencia/Objetos_globales/Function/call +tags: + - Function + - JavaScript + - Method +translation_of: Web/JavaScript/Reference/Global_Objects/Function/call +--- +
{{JSRef("Objetos_globales", "Function")}}
+ +

Resumen

+ +

El método call() llama a una función con un valor dado this y con argumentos provistos individualmente.

+ +

Sintaxis

+ +
function.call(thisArg[, arg1[, arg2[, ...]]])
+ +

Parametros

+ +
+
thisArg {{optional_inline}}
+
El valor a usar como this cuando se llama a function.
+
+
+

Cuidado: En ciertos casos, thisArg puede no ser el valor actual visto por el método.

+ +

Si el método es una función en {{jsxref("Strict_mode", "non-strict mode", "", 1)}}, {{jsxref("Global_Objects/null", "null")}} y {{jsxref("Global_Objects/undefined", "undefined")}} serán reemplazados con el objeto global, y valores primitivos serán convertidos a objetos.

+
+
+
arg1, arg2, ...
+
Argumentos para el objeto.
+
+

Valor de retorno

+
+
El resultado de llamar a la función con el this especificado y los argumentos.
+
+ +

Descripción

+ +

call() permite que una función/método que pertenece a un objeto, ser asignada y llamada para un objeto diferente.

+ +

call() provee un nuevo valor de this a la función/método. Con call(), puedes escribir un método ona vez y heredarlo a otro objeto, sin tener que reescribir el método en el nuevo objeto.

+ +
Nota: Mientras la sintaxis de esta función es casi identica a la función {{jsxref("Function.apply", "apply()")}}, la diferencia fundamental es que call() acepta una lista de argumentos, mientras apply() accepta un arreglo sencillo de argumentos.
+ +

Ejemplos

+ +

Usando call para encadenar constructores para un objeto

+ +

Puede usar call para encadenar constructores para un objeto (similar a Java).

+ +

En el siguiente ejemplo, el constructor para el objeto Producto es definido con dos parametros, nombre y precio.

+ +

Otras dos funciones Comida y Juguete invocan a Producto, pasándo thisnombre y precio. Producto inicializa las propiedades nombre y precio, ambas funciones especializadas definen la categoria.

+ +
function Producto(nombre, precio) {
+  this.nombre = nombre;
+  this.precio = precio;
+
+  if (precio < 0)
+    throw RangeError('No se puede crear el producto "' + nombre + '" con un precio negativo');
+  return this;
+}
+
+function Comida(nombre, precio) {
+  Producto.call(this, nombre, precio);
+  this.categoria = 'comida';
+}
+Comida.prototype = new Producto();
+
+function Juguete(nombre, precio) {
+  Producto.call(this, nombre, precio);
+  this.categoria = 'juguete';
+}
+Juguete.prototype = new Producto();
+
+var queso = new Comida('feta', 5);
+var diversion = new Juguete('robot', 40);
+
+ +

Usando call para invocar una función anónima

+ +

En este ejemplo, creamos una función anónima y usamos call para invocarla en cada objeto en un arreglo.

+ +

El propósito principal de la función anónima aquí es agregar una función print  a cada objeto, el cual puede imprimir el índice correcto en el arreglo.

+ +
+

Pasar el objeto como valor this no es estrictamente necesario, pero se hace con propósito explicativo.

+
+ +
var animales = [
+  {especie: 'Leon', nombre: 'Rey'},
+  {especie: 'Whale', nombre: 'Fail'}
+];
+
+for (var i = 0; i < animales.length; i++) {
+  (function (i) {
+    this.imprimir = function () {
+      console.log('#' + i  + ' ' + this.especie + ': ' + this.nombre);
+    }
+    this.imprimir();
+  }).call(animales[i], i);
+}
+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/function/caller/index.html b/files/es/web/javascript/reference/global_objects/function/caller/index.html new file mode 100644 index 0000000000..942df69a68 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/caller/index.html @@ -0,0 +1,128 @@ +--- +title: Function.caller +slug: Web/JavaScript/Referencia/Objetos_globales/Function/caller +tags: + - Función Javascript No-standard Propiedad +translation_of: Web/JavaScript/Reference/Global_Objects/Function/caller +--- +
{{JSRef("Global_Objects", "Function")}} {{non-standard_header}}
+ +

Resumen

+ +

La propiedad function.caller retorna la función que llamó a la función especificada.

+ +

Descripción

+ +

Si la función f fue llamada por desde nivel raiz (top level code), el valor de f.caller es {{jsxref("Global_Objects/null", "null")}}, de lo contrario se retorna la función que llamó a f.

+ +

Esta propiedad reemplaza a la propiedad obsoleta {{jsxref("Functions_and_function_scope/arguments/caller", "arguments.caller")}} del objeto {{jsxref("Funciones/arguments", "arguments")}}.

+ +

la propiedad especial __caller__, la cual retornaba el objeto de activación del llamador y permitía reconstruir la pila de llamadas, ha sido removida por motivos de seguridad.

+ +

Notas

+ +

En caso de recursión se puede reconstruir la pila de llamada utilizando esta propiedad, tal como se muestra a continuación:

+ +
function f(n) { g(n - 1); }
+function g(n) { if (n > 0) { f(n); } else { stop(); } }
+f(2);
+
+ +

Al momento de ejecutar stop() este se llama con la siguiente pila de llamadas:

+ +
f(2) -> g(1) -> f(1) -> g(0) -> stop()
+
+ +

Siendo verdadero la siguiente consideración:

+ +
stop.caller === g && f.caller === g && g.caller === f
+
+ +

Por lo tanto si se intenta obtener el rastro de llamadas (stack trace) de la función stop() como se muestra a continuación:

+ +
var f = stop;
+var stack = 'Stack trace:';
+while (f) {
+  stack += '\n' + f.name;
+  f = f.caller;
+}
+
+ +

se provocará una bucle que nunca termina.

+ +

Ejemplos

+ +

Ejemplo: Verificar el valor de la propiedad caller de una función

+ +

El siguiente código verifica el valor de la propiedad caller de una función.

+ +
function myFunc() {
+  if (myFunc.caller == null) {
+    return 'The function was called from the top!';
+  } else {
+    return 'This function\'s caller was ' + myFunc.caller;
+  }
+}
+
+ +

Especificación

+ +

No es parte de ninguna especificación. Se implementa en JavaScript 1.5.

+ +

Compatiblilidad de Navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Básico{{CompatVersionUnknown}}{{CompatGeckoDesktop("1.0")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("1.0")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/function/displayname/index.html b/files/es/web/javascript/reference/global_objects/function/displayname/index.html new file mode 100644 index 0000000000..d464266838 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/displayname/index.html @@ -0,0 +1,77 @@ +--- +title: Function.displayName +slug: Web/JavaScript/Referencia/Objetos_globales/Function/displayName +translation_of: Web/JavaScript/Reference/Global_Objects/Function/displayName +--- +
{{JSRef}} {{non-standard_header}}
+ +

The function.displayName property returns the display name of the function.

+ +

Description

+ +

Cuando se define la propiedad displayName , retorna un mensaje con el nombre para mostrar en una función:

+ +
function doSomething() {}
+
+console.log(doSomething.displayName); // "undefined"
+
+var popup = function(content) { console.log(content); };
+
+popup.displayName = 'Show Popup';
+
+console.log(popup.displayName); // "Show Popup"
+
+ +

Tu puedes definir una funcion con un nombre a mostrar en un {{jsxref("Functions", "function expression", "", 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
+
+ +

Puedes cambiar dinámicamente el displayName de una función:

+ +
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)"
+
+ +

Ejemplos

+ +

Normalmente, se prefiere por consolas y profilers sobre {{jsxref("Function.name", "func.name")}} a mostrar el nombre de una función.

+ +

Al ingresar lo siguiente en una consola, debería mostrarse como algo así como "function My Function()":

+ +
var a = function() {};
+a.displayName = 'My Function';
+
+a; // "function My Function()"
+ +

Specifications

+ +

Not part of any specification.

+ +

Browser compatibility

+ +
+ + +

{{Compat("javascript.builtins.Function.displayName")}}

+
+ +
 
diff --git a/files/es/web/javascript/reference/global_objects/function/function/index.html b/files/es/web/javascript/reference/global_objects/function/function/index.html new file mode 100644 index 0000000000..af4dff0361 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/function/index.html @@ -0,0 +1,92 @@ +--- +title: Function() constructor +slug: Web/JavaScript/Referencia/Objetos_globales/Function/Función +tags: + - Constructor + - Function + - JavaScript + - Referencia + - función +translation_of: Web/JavaScript/Reference/Global_Objects/Function/Function +--- +
{{JSRef("Objetos_globales", "Function")}}
+ +

El constructor Function crea un nuevo objeto Function. Llamar al constructor directamente puede crear funciones dinámicamente, pero tiene problemas de seguridad y de rendimiento similares (pero mucho menos importantes) para {{jsxref("eval")}}. Sin embargo, a diferencia de eval, el constructor Function crea funciones que solo se ejecutan en el ámbito global.

+ +
{{EmbedInteractiveExample("pages/js/function-constructor.html","shorter")}}
+ + + +

Sintaxis

+ +
new Function([arg1 [, arg2 [, ...argN]] ,] functionBody)
+ +

Parámetros

+ +
+
arg1, arg2, ... argN
+
Nombres que utilizará la función como nombres de argumentos formales. Cada uno debe ser una cadena que corresponda a un identificador JavaScript válido, o una lista de dichas cadenas separadas por una coma. Por ejemplo: "x", "theValue" —o "x,theValue".
+
functionBody
+
Una cadena que contiene las declaraciones de JavaScript que comprenden la definición de función.
+
+ +

Descripción

+ +

Los objetos Function creados con el constructor Function se procesan cuando se crea la función. Esto es menos eficiente que declarar una función con una {{jsxref("Operators/function", "expresión de función")}} o {{jsxref("Statements/function", "declaración de función")}} y llamarla dentro de tu código porque tales funciones se procesan con el resto del código.

+ +

Todos los argumentos pasados a la función se tratan como los nombres de los identificadores de los parámetros en la función que se va a crear, en el orden en que se pasan. Omitir un argumento dará como resultado que el valor de ese parámetro sea undefined.

+ +

Invocar el constructor Function como función (sin usar el operador new) tiene el mismo efecto que invocarlo como constructor.

+ +

Ejemplos

+ +

Especificar argumentos con el constructor Function

+ +

El siguiente código crea un objeto Function que toma dos argumentos.

+ +
// El ejemplo se puede ejecutar directamente en tu consola JavaScript
+
+// Crea una función que toma dos argumentos y devuelve la suma de esos argumentos
+const adder = new Function('a', 'b', 'return a + b');
+
+// Llama a la función
+adder(2, 6);
+// 8
+
+ +

Los argumentos "a" y "b" son nombres de argumentos formales que se utilizan en el cuerpo de la función, "return a + b".

+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-function-constructor', 'Constructor Function')}}
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/function/index.html b/files/es/web/javascript/reference/global_objects/function/index.html new file mode 100644 index 0000000000..5b586f3611 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/index.html @@ -0,0 +1,118 @@ +--- +title: Function +slug: Web/JavaScript/Referencia/Objetos_globales/Function +tags: + - Clase + - Class + - Declaración + - Expresión + - Function + - JavaScript + - función +translation_of: Web/JavaScript/Reference/Global_Objects/Function +--- +
{{JSRef("Objetos_globales", "Function")}}
+ +

Cada función de JavaScript en realidad es un objeto Function. Esto se puede ver con el código (function() {}).constructor === Function, que devuelve true.

+ +

Constructor

+ +
+
{{jsxref("Function/Function", "Function()", "", 1)}}
+
Crea un nuevo objeto Function. Llamar al constructor directamente puede crear funciones dinámicamente, pero tiene problemas de seguridad y de rendimiento similares (pero mucho menos importantes) para {{jsxref("eval")}}. Sin embargo, a diferencia de eval, el constructor Function crea funciones que solo se ejecutan en el ámbito global.
+
+ +

Propiedades de la instancia

+ +
+
{{jsxref("Function.arguments")}}
+
Un arreglo que corresponde a los argumentos pasados a una función.
+ Esto está obsoleto como propiedad de {{jsxref("Function")}}. En su lugar, utiliza el objeto {{jsxref("Functions/arguments", "arguments", "", 1)}} (disponible dentro de la función).
+
{{jsxref("Function.caller")}}
+
Especifica la función que invocó a la función que se está ejecutando actualmente.
+ Esta propiedad está obsoleta, y solo es funcional para algunas funciones no estrictas.
+
{{jsxref("Function.displayName")}}
+
El nombre a mostrar de la función.
+
{{jsxref("Function.length")}}
+
Especifica el número de argumentos que espera la función.
+
{{jsxref("Function.name")}}
+
El nombre de la función.
+
+ +

Métodos de instancia

+ +
+
{{jsxref("Function.prototype.apply()", "Function.prototype.apply(thisArg [, argsArray])")}}
+
Llama a una función y establece su this en el thisArg proporcionado. Los argumentos se pueden pasar como un objeto {{jsxref("Array")}}.
+
{{jsxref("Function.prototype.bind()", "Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])")}}
+
Crea una nueva función que, cuando se llama, tiene su this configurado en el thisArg. Opcionalmente, una determinada secuencia de argumentos se antepondrá a los argumentos siempre que se llame a la función recién invocada.
+
{{jsxref("Function.prototype.call()", "Function.prototype.call(thisArg[, arg1, arg2, ...argN])")}}
+
Llama a una función y establece su this en el valor proporcionado. Los argumentos se pueden pasar tal cual.
+
{{jsxref("Function.prototype.toString()", "Function.prototype.toString()")}}
+
Devuelve una cadena que representa el código fuente de la función.
+ Redefine el método {{jsxref("Object.prototype.toString()")}}.
+
+ +

Ejemplos

+ +

Diferencia entre el constructor Function y la declaración function

+ +

Las funciones creadas con el constructor Function no crean cierres para sus contextos de creación; siempre se crean en el ámbito global. Al ejecutarlos, solo podrán acceder a sus propias variables locales y globales, no a las del ámbito en el que se creó el constructor Function. Esto es diferente de usar {{jsxref("eval")}} con código para una expresión de función.

+ +
var x = 10;
+
+function createFunction1() {
+    var x = 20;
+    return new Function('return x;'); // esta |x| se refiere a la |x| global
+}
+
+function createFunction2() {
+    var x = 20;
+    function f() {
+        return x; // esta |x| se refiere a la |x| local
+    }
+    return f;
+}
+
+var f1 = createFunction1();
+console.log(f1());          // 10
+var f2 = createFunction2();
+console.log(f2());          // 20
+
+ +

Si bien este código funciona en los navegadores web, f1() producirá un ReferenceError en Node.js, ya que no encontrará a x. Esto se debe a que el ámbito de nivel superior en Node no es el ámbito global, y x será local para el módulo.

+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-function-objects', 'Function')}}
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/function/length/index.html b/files/es/web/javascript/reference/global_objects/function/length/index.html new file mode 100644 index 0000000000..7638859bba --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/length/index.html @@ -0,0 +1,151 @@ +--- +title: Function.length +slug: Web/JavaScript/Referencia/Objetos_globales/Function/length +tags: + - JavaScript + - Propiedad + - función +translation_of: Web/JavaScript/Reference/Global_Objects/Function/length +--- +
{{JSRef("Global_Objects", "Function")}}
+ +

Sumario

+ +

La propiedad length especifica el número de argumentos esperados por la función.

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

Descripción

+ +

length es la propiedad de una función objeto, e indica el número de argumentos que una función requiere, por ejemplo, el número de parámetros formales. Este número no incluye {{jsxref("rest_parameters", "rest parameter", "", 1)}}. En cambio, {{jsxref("Functions_and_function_scope/arguments/length", "arguments.length")}} es local a una función y aporta el número de argumentos actuales pasados a una función.

+ +

Propiedades de la Función constructora

+ +

El {{jsxref("Global_Objects/Function", "Function")}} constructor en sí mismo es {{jsxref("Global_Objects/Function", "Function")}} un objeto. Sú propiedad length tiene el valor 1. Los atributos son: Grabable: false, Enumerable: false, Configurable: true.

+ +

Propiedad de la  Función prototype object

+ +

La propiedad length del {{jsxref("Global_Objects/Function", "Function")}} objeto prototype tiene el valor 0.

+ +

Ejemplos

+ +
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, resto de parámetros no se contemplan */
+console.log((function(a, b = 1, c) {}).length); /* 1, solo parámetros antes del primero con un valor por defecto son contados */
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
ECMAScript 1st Edition.StandardDefinición inicial. Implementado en JavaScript 1.1.
length property of the {{jsxref("Global_Objects/Function", "Function")}} constructor:
+ {{SpecName('ES5.1', '#sec-15.3.3.2', 'Function.length')}}
+ length property of the {{jsxref("Global_Objects/Function", "Function")}} prototype object:
+ {{SpecName('ES5.1', '#sec-properties-of-the-function-prototype-object', 'Function.length')}}
+ length property of {{jsxref("Global_Objects/Function", "Function")}} instances:
+ {{SpecName('ES5.1', '#sec-15.3.5.1', 'Function.length')}}
{{Spec2('ES5.1')}}
length property of the {{jsxref("Global_Objects/Function", "Function")}} constructor:
+ {{SpecName('ES6', '#sec-function.length', 'Function.length')}}
+ length property of the {{jsxref("Global_Objects/Function", "Function")}} prototype object:
+ {{SpecName('ES6', '#sec-15.3.4', 'Function.length')}}
+ length property of {{jsxref("Global_Objects/Function", "Function")}} instances:
+ {{SpecName('ES6', '#sec-function-instances-length', 'Function.length')}}
{{Spec2('ES6')}}El atributo configurable de esta propiedad ahora es true.
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Configurable: true{{CompatUnknown}}{{CompatGeckoDesktop(37)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Configurable: true{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile(37)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/function/name/index.html b/files/es/web/javascript/reference/global_objects/function/name/index.html new file mode 100644 index 0000000000..2440bd60f1 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/name/index.html @@ -0,0 +1,223 @@ +--- +title: Function.name +slug: Web/JavaScript/Referencia/Objetos_globales/Function/name +translation_of: Web/JavaScript/Reference/Global_Objects/Function/name +--- +
{{JSRef}}
+ +

La propiedad function.name retorna el nombre de la función o retorna "anonymous" por funciones creadas anónimamente.

+ +
{{js_property_attributes(0,0,1)}}
+ +
Nótese que en implementaciones no estándar previas a ES2015 el atributo configurable también era false.
+ +

Ejemplos

+ +

Nombre de una declaración de función

+ +

La propiedad name retorna el nombre de una declaración de función.

+ +
function doSomething() {}
+
+console.log(doSomething.name); // imprime en pantalla "doSomething"
+
+ +

Nombre de constructor de función

+ +

Las funciones creadas con la sintaxis new Function(...) o simplemente Function(...) tienen como propiedad name una cadena vacía. En los ejemplos a continuación se crean funciones anónimas, tales que su name retorna una cadena vacía:

+ +
var f = function() {};
+var object = {
+  someMethod: function() {}
+};
+
+console.log(f.name == ''); // true
+console.log(object.someMethod.name == ''); // también true
+
+ +

Nombres de función inferidos

+ +

Los navegadores que implementan funciones ES2015 pueden inferir el nombre de una función anónima de su posición sintáctica. Por ejemplo:

+ +
var f = function() {};
+console.log(f.name); // "f"
+ +

Se puede definir una función con un nombre en un {{jsxref("Operators/Function", "function expression", "", 1)}}:

+ +
var object = {
+  someMethod: function object_someMethod() {}
+};
+console.log(object.someMethod.name); // imprime "object_someMethod"
+
+try { object_someMethod } catch(e) { console.log(e); }
+// ReferenceError: object_someMethod is not defined
+
+ +

No se puede cambiar el nombre de una función, esta propiedad es de solo lectura:

+ +
var object = {
+  // anonymous
+  someMethod: function() {}
+};
+
+object.someMethod.name = 'someMethod';
+console.log(object.someMethod.name); // cadena vacía, someMethod es anónimo
+
+ +

Sin embargo, se puede usar {{jsxref("Object.defineProperty()")}} para cambiarlo.

+ +

Nombres de métodos

+ +
var o = {
+  foo(){}
+};
+o.foo.name; // "foo";
+ +

Nombres de funciones atadas (creadas con .bind())

+ +

{{jsxref("Function.bind()")}} produce una función cuyo nombre es igual a "bound " seguido del nombre de la función original.

+ +
function foo() {};
+foo.bind({}).name; // "bound foo"
+ +

Nombres de funciones getters y setters

+ +

Cuando se usan getset, "get" y "set" aparecerán en el nombre de la función.

+ +
var o = {
+  get foo(){},
+  set foo(x){}
+};
+
+var descriptor = Object.getOwnPropertyDescriptor(o, "foo");
+descriptor.get.name; // "get foo"
+descriptor.set.name; // "set foo";
+ +

Ejemplos

+ +

Se puede usar obj.constructor.name para saber cuál es la "clase" de un objeto:

+ +
function a() {}
+
+var b = new a();
+
+console.log(b.constructor.name); // imprime "a"
+
+ +

Polyfill

+ +

Para versiones de IE < 9, se puede usar fn._name() en su lugar. Para IE9 o posteriores se puede usar el siguiente polyfill.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES2015', '#sec-name', 'name')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-name', 'name')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome(33.0)}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Configurable: true{{CompatChrome(43.0)}}{{CompatGeckoDesktop(38)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Nombres inferidos en funciones anónimas{{CompatChrome(51.0)}}{{CompatNo}} [1]{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidAndroid WebviewFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Configurable: true{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile(38)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Nombres inferidos en funciones anónimas{{CompatNo}}{{CompatChrome(51.0)}}{{CompatNo}} [1]{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatChrome(51.0)}}
+
+ +

[1] See {{bug(883377)}}.

diff --git a/files/es/web/javascript/reference/global_objects/function/tosource/index.html b/files/es/web/javascript/reference/global_objects/function/tosource/index.html new file mode 100644 index 0000000000..3cee3c1d4c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/tosource/index.html @@ -0,0 +1,97 @@ +--- +title: Function.prototype.toSource() +slug: Web/JavaScript/Referencia/Objetos_globales/Function/toSource +translation_of: Web/JavaScript/Reference/Global_Objects/Function/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

El método toSource() devuelve un string representando el código fuente del objeto.

+ +

Sintaxis

+ +
function.toSource();
+Function.toSource();
+
+ +

Parámetros

+ +

Ninguno.

+ +

Descripción

+ +

El método toSource devuelve los siguientes valores:

+ + + +

Éste método es usado de forma interna por JavaScript y no explicitamente desde el código. Puedes usar toSource mientras depuras para examinar el contenido de un objeto.

+ +

Especificaciones

+ +

No está reflejado en ningún estándar. Implementaso en JavaScript 1.3.

+ +

Browser compatibility

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatNo}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatUnknown}}{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/function/tostring/index.html b/files/es/web/javascript/reference/global_objects/function/tostring/index.html new file mode 100644 index 0000000000..b5ee70147e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/function/tostring/index.html @@ -0,0 +1,130 @@ +--- +title: Function.prototype.toString() +slug: Web/JavaScript/Referencia/Objetos_globales/Function/toString +translation_of: Web/JavaScript/Reference/Global_Objects/Function/toString +--- +
{{JSRef}}
+ +

El método toString() retorna una cadena representando el código fuente de la función.

+ +

Sintaxis

+ +
function.toString(indentation)
+ +

Parámetros

+ +
+
indentation {{non-standard_inline}} {{obsolete_inline(17)}}
+
La cantidad de espacios a indentar en la representación de cadena del código fuente. Si indentation es menor o igual a -1, la mayoría de los espacios innecesarios son eliminados.
+
+ +

Descripción

+ +

El objeto {{jsxref("Function")}} reconduce el método {{jsxref("Object.prototype.toString", "toString")}} heredado de  {{jsxref("Object")}}; no hereda {{jsxref("Object.prototype.toString")}}. Para objetos {{jsxref("Function")}}, el método toString retorna una representación de cadena del objeto en forma de declaración de función. Esto es, toString descompila la función y la cadena retornada incluye la palabra clave function, la lista de argumentos, llaves y el código fuente del cuerpo de la función.

+ +

JavaScript llama al método toString automáticamente cuando una {{jsxref("Function")}} va a ser representada como un valor de texto, p.e. cuando una función es concatenada con un valor de cadena (string).

+ +

El método toString() producirá una excepción {{jsxref("TypeError")}} ("Function.prototype.toString called on incompatible object"), si el valor de su objeto this no es un objeto Function. Esto también ocurrirá para objetos {{jsxref("Proxy")}}, por ejemplo:

+ +
Function.prototype.toString.call("foo"); // TypeError
+
+var proxy = new Proxy(function() {}, {});
+Function.prototype.toString.call(proxy); // TypeError
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoObservaciones
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.3.4.2', 'Function.prototype.toString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-function.prototype.tostring', 'Function.prototype.toString')}}{{Spec2('ES6')}}Añadidos requerimientos más específicos para la representación de cadena.
{{SpecName('ESDraft', '#sec-function.prototype.tostring', 'Function.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
PrestaciónChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
PrestaciónAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Notas específicas para Gecko

+ + + +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/generator/index.html b/files/es/web/javascript/reference/global_objects/generator/index.html new file mode 100644 index 0000000000..ec92ca413f --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/generator/index.html @@ -0,0 +1,228 @@ +--- +title: Generador +slug: Web/JavaScript/Referencia/Objetos_globales/Generador +tags: + - ECMAScript2015 + - ECMAScript6 + - Generador + - Generador Legado + - Iterador Legado + - JavaScript + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Generator +--- +
{{JSRef}}
+ +
+ +

El objeto Generator es retornado por una {{jsxref("Statements/function*", "función generator", "", 1)}} y es conformado tanto el protocolo iterable como el protocolo iterador.

+ +

Constructor

+ +

Este objeto no puede ser instanciado directamente. En su lugar, una instancia del objeto Generator puede ser devuelta por una función generator:

+ +
	function* gen() {
+	  yield 1;
+	  yield 2;
+	  yield 3;
+	}
+
+	var g = gen(); // "Generator { }"
+ +
+
+ +

Métodos de instanciación

+ +

Tambien hereda propiedades de {{JSxRef("Iterator")}}

+ +
+
{{jsxref("Generator.prototype.next()")}}
+
Retorna el valor ofecido por la expresión {{jsxref("Operators/yield", "yield")}}
+
{{jsxref("Generator.prototype.return()")}}
+
Retorna el valor dado y finaliza el generador.
+
{{jsxref("Generator.prototype.throw()")}}
+
Lanza un error al generador (también finaliza el generador, a menos que sea atrapado desde ese generador)
+
+ +

Propiedades

+ +

Tambien hereda propiedades de {{JSxRef("Iterator")}}

+ +
+
Generator.prototype.constructor
+
Especifica la funciòn que construye el prototipo del objeto.
+
+ +
+
Generator.prototype[@@toStringTag]
+
La cuerda "Generator".
+
+ +

Ejemplo

+ +

Un iterador infinito

+ +
	function* idMaker() {
+	    var index = 0;
+	    while(true)
+	        yield index++;
+	}
+
+	var gen = idMaker(); // "Generator { }"
+
+	console.log(gen.next().value); // 0
+	console.log(gen.next().value); // 1
+	console.log(gen.next().value); // 2
+	// ...
+ +

Objetos generadores legados

+ +

Firefox(SpderMonkey) tambén implementa una versón mas temprana de generadores en JavaScript 1.7, donde el asterisco (*) en la declaración de la funcion no era necesario(sólo use la palabra reservada yield en el cuerpo de la función). Sin embargo, los generadores legados se encuentran depreciados. No los use. Serán removidos ({{bug(1083482)}}).

+ +

Métodos de generadores legados

+ +
+
Generator.prototype.next() {{non-standard_inline}}
+
+
Retorna el valor ofrecido por la expresión {{jsxref("Operators/yield", "yield")}}.  Esto se corresponde con el método next() en el objeto generador de ES2015.
+
+
Generator.prototype.close() {{non-standard_inline}}
+

+ Cierra el generador. Sí el método next() es llamado por la expresión {{jsxref("StopIteration")}}, un error será lanzado. Esto se corresponde con el método return() del objeto generador de ES2015.
+
Generator.prototype.send() {{non-standard_inline}}
+
Utilizado para enviar un valor al generador. El valor es retornado por la expresion {{jsxref("Operators/yield", "yield")}}, y retorna el valor ofrecido por la siguiente expresion {{jsxref("Operators/yield", "yield")}}. send(x) Se corresponde a next(x) en el objeto generador de ECMAScript 2015.
+
Generator.prototype. throw() {{non-standard_inline}}
+
Lanza un error al generador. Esto se corresponde con el metodo throw() en el objeto genererador de ES2015.
+
+ +

Ejemplo de generador legado

+ +
	function fibonacci() {
+	  var a = yield 1;
+	  yield a * 2;
+	}
+
+	var it = fibonacci();
+	console.log(it);          // "Generator {  }"
+	console.log(it.next());   // 1
+	console.log(it.send(10)); // 20
+	console.log(it.close());  // undefined
+	console.log(it.next());   // throws StopIteration (as the generator is now closed)
+	
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-generator-objects', 'Generator objects')}}{{Spec2('ES2015')}}Definición inicial
{{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
FuncionalidadChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte basico{{CompatChrome(39.0)}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FuncionalidadAndroidAndroid WebviewEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Soporte básico{{CompatNo}}{{CompatChrome(39.0)}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatChrome(39.0)}}
+
+ +

+ +

Vea también

+ +

Generadores Legados

+ + + +

Generadores ES2015

+ + diff --git a/files/es/web/javascript/reference/global_objects/generator/next/index.html b/files/es/web/javascript/reference/global_objects/generator/next/index.html new file mode 100644 index 0000000000..6b6bf61cbe --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/generator/next/index.html @@ -0,0 +1,109 @@ +--- +title: Generator.prototype.next() +slug: Web/JavaScript/Referencia/Objetos_globales/Generador/next +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/next +--- +
{{JSRef}}
+ +

El método next() regresa un objeto con las propiedades done y value. También puedes pasar un parámetro al método next para enviar un valor al generador.

+ +

Sintaxis

+ +
gen.next(valor)
+ +

Parámetros

+ +
+
valor
+
El valor a enviar al generador.
+
+ +

Valor de retorno

+ +

Un {{jsxref("Object")}} con dos propiedades:

+ + + +

Examples

+ +

Using next()

+ +

The following example shows a simple generator and the object that the next method returns:

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+var g = gen(); // "Generator { }"
+g.next();      // "Object { value: 1, done: false }"
+g.next();      // "Object { value: 2, done: false }"
+g.next();      // "Object { value: 3, done: false }"
+g.next();      // "Object { value: undefined, done: true }"
+
+ +

Sending values to the generator

+ +

In this example, next is called with a value. Note that the first call did not log anything, because the generator was not yielding anything initially.

+ +
function* gen() {
+  while(true) {
+    var value = yield null;
+    console.log(value);
+  }
+}
+
+var g = gen();
+g.next(1);
+// "{ value: null, done: false }"
+g.next(2);
+// 2
+// "{ value: null, done: false }"
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-generator.prototype.next', 'Generator.prototype.next')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-generator.prototype.next', 'Generator.prototype.next')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ +
+ + +

{{Compat("javascript.builtins.Generator.next")}}

+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/generator/return/index.html b/files/es/web/javascript/reference/global_objects/generator/return/index.html new file mode 100644 index 0000000000..649d5b8dec --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/generator/return/index.html @@ -0,0 +1,102 @@ +--- +title: Generator.prototype.return() +slug: Web/JavaScript/Referencia/Objetos_globales/Generador/return +tags: + - ECMAScript 2015 + - Generador + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/return +--- +
{{JSRef}}
+ +

El método return() regresa el valor dado y finaliza al generador.

+ +

Sintaxis

+ +
gen.return(valor)
+ +

Parámetros

+ +
+
valor
+
El valor a regresar.
+
+ +

Valor de retorno

+ +

El valor dado como argumento.

+ +

Ejemplos

+ +

Utilizando return()

+ +

El siguiente ejemplo muestra un generador simple y su método return.

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+var g = gen();
+
+g.next();        // { value: 1, done: false }
+g.return('foo'); // { value: "foo", done: true }
+g.next();        // { value: undefined, done: true }
+
+ +

Si return(valor) es invocado en un generador que ya está en su estado "completado", el generador permanecerá en estado "completado". Si no se da ningún argumento, el objeto regresado es el mismo a que si se invocara .next(). Si se da un argumento, éste se asignará como valor en la propiedad value del objeto regresado.

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+var g = gen();
+g.next(); // { value: 1, done: false }
+g.next(); // { value: 2, done: false }
+g.next(); // { value: 3, done: false }
+g.next(); // { value: undefined, done: true }
+g.return(); // { value: undefined, done: true }
+g.return(1); // { value: 1, done: true }
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-generator.prototype.return', 'Generator.prototype.return')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-generator.prototype.return', 'Generator.prototype.return')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.Generator.return")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/generator/throw/index.html b/files/es/web/javascript/reference/global_objects/generator/throw/index.html new file mode 100644 index 0000000000..9f4cd76fbe --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/generator/throw/index.html @@ -0,0 +1,94 @@ +--- +title: Generator.prototype.throw() +slug: Web/JavaScript/Referencia/Objetos_globales/Generador/throw +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/throw +--- +
{{JSRef}}
+ +

El método throw() reanuda la ejecución de un generador al lanzar un error en éste y regresar un objeto con las dos propiedades done y value.

+ +

Sintaxis

+ +
gen.throw(excepción)
+ +

Parámetros

+ +
+
excepción
+
La excepción a lanzar. Al hacer depuración, es útil que la excepción cumpla con instanceof {{jsxref("Error")}}.
+
+ +

Valor de retorno

+ +

Un {{jsxref("Object")}} con dos propiedades:

+ + + +

Examples

+ +

Using throw()

+ +

The following example shows a simple generator and an error that is thrown using the throw method. An error can be caught by a try...catch block as usual.

+ +
function* gen() {
+  while(true) {
+    try {
+       yield 42;
+    } catch(e) {
+      console.log('Error caught!');
+    }
+  }
+}
+
+var g = gen();
+g.next();
+// { value: 42, done: false }
+g.throw(new Error('Something went wrong'));
+// "Error caught!"
+// { value: 42, done: false }
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ +
+ + +

{{Compat("javascript.builtins.Generator.throw")}}

+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/index.html b/files/es/web/javascript/reference/global_objects/index.html new file mode 100644 index 0000000000..9946b3f648 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/index.html @@ -0,0 +1,203 @@ +--- +title: Objetos globales +slug: Web/JavaScript/Referencia/Objetos_globales +tags: + - JavaScript + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects +--- +
{{jsSidebar("Objects")}}
+ +

Este capítulo documenta todo acerca de estándares de Javascript, los objetos integrados en  JavaScript, así como los métodos y propiedades de cada uno.

+ +

El término "objetos globales" (u objetos incorporados estándar) aquí no debe confundirse con el objeto global. Aquí, los objetos globales se refieren a objetos en el ámbito global. Se puede acceder al objeto global en sí usando el operador {{jsxref("Operadores/this", "this")}} en el ámbito global (pero solo si no se usa el modo estricto ECMAScript 5, en ese caso devuelve {{jsxref("undefined")}}). De hecho, el alcance global consiste en las propiedades del objeto global, incluidas las propiedades heredadas, si las hay.

+ +

Otros objetos en el alcance global son creados por el script de usuario o son proporcionados por la aplicación host. Los objetos host disponibles en los contextos del navegador están documentados en la referencia de la API. Para obtener más información acerca de la distinción entre el DOM y el núcleo de JavaScript, vea Introducción a las tecnologías JavaScript.

+ +

Objetos estándar por categoría

+ +

Propiedades de valor

+ +

Estas propiedades globales devuelven un valor simple; ellos no tienen propiedades o métodos.

+ + + +

Propiedades de funciones

+ +

Estas funciones globales -funciones llamadas globalmente en lugar de un objeto- devuelven directamente sus resultados a la persona que llama.

+ + + +

Objetos fundamentales

+ +

Estos son los objetos fundamentales y básicos sobre los que se basan todos los demás objetos. Esto incluye objetos que representan objetos generales, funciones y errores.

+ + + +

Números y fechas

+ +

Estos son los objetos base que representan números, fechas y cálculos matemáticos.

+ + + +

Procesamiento de texto

+ +

Estos objetos representan cadenas y soporte para manipularlos.

+ + + +

Colecciones indexadas

+ +

Estos objetos representan colecciones de datos que están ordenadas por un valor de índice. Esto incluye matrices (tipadas) y construcciones tipo array.

+ + + +

Colecciones con clave

+ +

Estos objetos representan colecciones que usan claves; estos contienen elementos que son iterables en el orden de inserción.

+ + + +

Colecciones de vectores

+ +

Los tipos de datos vectoriales {{Glossary("SIMD")}} son objetos donde los datos se organizan en carriles.

+ + + +

Datos estructurados

+ +

Estos objetos representan e interactúan con los búferes de datos estructurados y los datos codificados utilizando la notación de objetos JavaScript (JSON del inglés JavaScript Object Notation).

+ + + +

Objetos de abstracción de control

+ + + +

Reflexión

+ + + +

Internacionalización

+ +

Adiciones al núcleo de ECMAScript para funcionalidades sensibles al lenguaje.

+ + + +

WebAssembly

+ + + +

Otro

+ + diff --git a/files/es/web/javascript/reference/global_objects/infinity/index.html b/files/es/web/javascript/reference/global_objects/infinity/index.html new file mode 100644 index 0000000000..2a0a716eeb --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/infinity/index.html @@ -0,0 +1,96 @@ +--- +title: Infinity +slug: Web/JavaScript/Referencia/Objetos_globales/Infinity +tags: + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/Infinity +--- +
+ {{jsSidebar("Objects")}}
+

Resumen

+

La propiedad global Infinity es un valor numérico que representa el infinito.

+

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

+

Sintaxis

+
Infinity
+

Description

+

Infinity es una del objeto global, es decir, esta es una variable de alcance global.

+

El valor inicial de Infinity es {{jsxref("Number.POSITIVE_INFINITY")}}. El valor de Infinity (infinito positivo) es mayor que cualquier otro numero incluido el mismo. Este valor se comporta matematicamente como el infinito matemático; por ejemplo, cualquier numero multiplicado por Infinity da como resultado Infinity, y cualquier numero divido por Infinity da como resultado cero.

+

Para la especificación ECMAScript 5, Infinity es de solo lectura (implementado en JavaScript 1.8.5  / Firefox 4).

+

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
ECMAScript 1ra edición.EstándarDefinición inicial. Implementada en JavaScript 1.3
{{SpecName('ES5.1', '#sec-15.1.1.2', 'Infinity')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-value-properties-of-the-global-object-infinity', 'Infinity')}}{{Spec2('ES6')}} 
+

Compatibilidad con navegadores

+

{{ CompatibilityTable() }}

+
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico(Si)(Si)(Si)(Si)(Si)
+
+
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico(Si)(Si)(Si)(Si)(Si)(Si)
+
+

Ver también

+ diff --git a/files/es/web/javascript/reference/global_objects/internalerror/index.html b/files/es/web/javascript/reference/global_objects/internalerror/index.html new file mode 100644 index 0000000000..e7754d1575 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/internalerror/index.html @@ -0,0 +1,98 @@ +--- +title: InternalError +slug: Web/JavaScript/Referencia/Objetos_globales/InternalError +tags: + - Clase + - Class + - InternalError + - JavaScript + - Objeto +translation_of: Web/JavaScript/Reference/Global_Objects/InternalError +--- +
{{JSRef}} {{non-standard_header}}
+ +

El objeto InternalError indica un error que se produjo internamente en el motor JavaScript.

+ +

Los principalmente casos de ejemplo son cuando algo es demasiado grande, por ejemplo:

+ + + +

Constructor

+ +
+
{{JSxRef("Global_Objects/InternalError/InternalError", "InternalError()")}}
+
Crea un nuevo objeto InternalError.
+
+ +

Propiedades de la instancia

+ +
+
{{jsxref("Error.prototype.message", "InternalError.prototype.message")}}
+
Mensaje de error. Heredado de {{JSxRef("Error")}}.
+
{{jsxref("Error.prototype.name", "InternalError.prototype.name")}}
+
Nombre del error. Heredado de {{JSxRef("Error")}}.
+
{{jsxref("Error.prototype.fileName", "InternalError.prototype.fileName")}}
+
Ruta al archivo que generó este error. Heredado de {{JSxRef("Error")}}.
+
{{jsxref("Error.prototype.lineNumber", "InternalError.prototype.lineNumber")}}
+
Número de línea en el archivo que generó este error. Heredado de {{JSxRef("Error")}}.
+
{{jsxref("Error.prototype.columnNumber", "InternalError.prototype.columnNumber")}}
+
Número de columna en la línea que generó este error. Heredado de {{JSxRef("Error")}}.
+
{{jsxref("Error.prototype.stack", "InternalError.prototype.stack")}}
+
Seguimiento de la pila. Heredado de {{JSxRef("Error")}}.
+
+ +

Ejemplos

+ +

Demasiada recursividad

+ +

Esta función recursiva se ejecuta 10 veces, según la condición de salida.

+ +
function loop(x) {
+  if (x >= 10) // "x >= 10" es la condición de salida
+    return;
+  // hacer cosas
+  loop(x + 1); // la llamada recursiva
+}
+loop(0);
+ +

Establecer esta condición en un valor extremadamente alto, no funcionará:

+ +
function loop(x) {
+  if (x >= 1000000000000)
+    return;
+  // hacer cosas
+  loop(x + 1);
+}
+loop(0);
+
+// InternalError: demasiada recursividad
+ +

Para obtener más información, consulta {{JSxRef("Errors/Too_much_recursion", "InternalError: demasiada recursividad.")}}

+ +

Especificaciones

+ +

No forma parte de ningún estándar.

+ +

Compatibilidad del navegador

+ +
+
+ + +

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

+
+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/internalerror/internalerror/index.html b/files/es/web/javascript/reference/global_objects/internalerror/internalerror/index.html new file mode 100644 index 0000000000..ba895aaff9 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/internalerror/internalerror/index.html @@ -0,0 +1,55 @@ +--- +title: Constructor InternalError() +slug: >- + Web/JavaScript/Referencia/Objetos_globales/InternalError/Constructor_InternalError +tags: + - Constructor + - JavaScript + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/InternalError/InternalError +--- +
{{JSRef}} {{non-standard_header}}
+ +

El constructor InternalError() crea un error que indica un error que ocurrió internamente en el motor de JavaScript. Por ejemplo: "InternalError: demasiada recursividad".

+ +

Sintaxis

+ +
new InternalError([message[, fileName[, lineNumber]]])
+ +

Parámetros

+ +
+
message
+
Opcional. Una descripción del error legible para los humanos.
+
fileName
+
Opcional. El nombre del archivo que contiene el código que provocó la excepción.
+
lineNumber
+
Opcional. El número de línea del código que provocó la excepción.
+
+ +

Ejemplos

+ +

Crear un nuevo InternalError

+ +
new InternalError("Fallo del motor");
+
+ +

Especificaciones

+ +

No forma parte de ningún estándar.

+ +

Compatibilidad del navegador

+ +
+
+ + +

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

+
+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/intl/index.html b/files/es/web/javascript/reference/global_objects/intl/index.html new file mode 100644 index 0000000000..c1a2a47243 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/intl/index.html @@ -0,0 +1,126 @@ +--- +title: Intl +slug: Web/JavaScript/Referencia/Objetos_globales/Intl +translation_of: Web/JavaScript/Reference/Global_Objects/Intl +--- +
{{JSRef}}
+ +

El objeto de ámbito global Intl es el espacio de nombres para el API de Internacionalización de ECMAScript, éste provee comparación de cadenas y formato de números, fechas y tiempos con sensibilidad al lenguaje. Los constructores para los objetos {{jsxref("Collator")}}, {{jsxref("NumberFormat")}}, y {{jsxref("DateTimeFormat")}} son propiedades del objeto Intl. En ésta página se documentan tales propiedades, así como la funcionalidad común a los constructores de internacionalización y otras funciones sensibles al lenguaje.

+ +

Propiedades

+ +
+
{{jsxref("Global_Objects/Collator", "Intl.Collator")}}
+
Constructor para collators, objetos que permiten la comparación de cadenas con sensibilidad al lenguaje.
+
{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}
+
Constructor para objetos que permiten el formato de fecha y tiempos con sensibilidad al lenguaje.
+
{{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}}
+
Constructor para objetos que permiten el formato de números con sensibilidad al lenguaje.
+
{{jsxref("Global_Objects/PluralRules", "Intl.PluralRules")}}
+
Por definir
+
+ +

Métodos

+ +
+
{{jsxref("Intl.getCanonicalLocales()")}}
+
Método que retorna los nombres canónicos de las diferentes variantes de lenguaje.
+
+ +

Identificación de variantes de lenguaje y negociación

+ +

Los constructores de internacionalización, así como otros metodos de constructores sensibles al lenguaje (listados bajo {{anch("See_also", "Ver más")}}) siguen un mismo patrón para identificar variantes de lenguaje y determinar aquella a utilizar: todos aceptan los argumentos locales y options, y negocian las variantes requeridas contra aquellas que soportan utilizando un algoritmo especificado en la propiedad options.localeMatcher.

+ +

locales

+ +

El argumento locales debe ser tanto una cadena que contenga una  Etiqueta de Idioma BCP 47, o una matriz de etiquetas de dicho idioma. Si el argumento locales no es provisto o es indefinido, será usado la localicacion predeterminada.

+ +

Una etiqueta de idioma BCP 47 define un idioma y minimamente contiene un código primario de idioma. En estos la forma mas comun puede contener, : un código de idioma, un código del sistema de escritura, y un código de país o región, todo separado por guiones. Mientras la etiqueta no es case sensitive, es recomendable usar un titulo para el código del sistema de escritura, mayúsculas para el país y región y minúsculas para todo lo demás.

+ +

Ejemplos:

+ + + +

Las subetiquetas que identifican idiomas, scripts, países (regiones), y (raramente utilizadas) variantes en las etiquetas de idiomas BCP 47 pueden ser encontradas en el Registro de subetiquetas de idioma de la IANA.

+ +

BCP 47 permite también extensiones. Las funciones de internacionalización de JavaScript utilizan la extensión "u" (Unicode), misma que puede emplearse para requerir personalizacioón de los objetos {{jsxref("Collator")}}, {{jsxref("NumberFormat")}}, o {{jsxref("DateTimeFormat")}}. A continuación algunos ejemplos:

+ + + +

Locale negotiation

+ +

The locales argument, after stripping off all Unicode extensions, is interpreted as a prioritized request from the application. The runtime compares it against the locales it has available and picks the best one available. Two matching algorithms exist: the "lookup" matcher follows the Lookup algorithm specified in BCP 47; the "best fit" matcher lets the runtime provide a locale that's at least, but possibly more, suited for the request than the result of the Lookup algorithm. If the application doesn't provide a locales argument, or the runtime doesn't have a locale that matches the request, then the runtime's default locale is used. The matcher can be selected using a property of the options argument (see below).

+ +

If the selected language tag had a Unicode extension substring, that extension is now used to customize the constructed object or the behavior of the function. Each constructor or function supports only a subset of the keys defined for the Unicode extension, and the supported values often depend on the language tag. For example, the "co" key (collation) is only supported by {{jsxref("Collator")}}, and its "phonebk" value is only supported for German.

+ +

options argument

+ +

The options argument must be an object with properties that vary between constructors and functions. If the options argument is not provided or is undefined, default values are used for all properties.

+ +

One property is supported by all language sensitive constructors and functions: The localeMatcher property, whose value must be a string "lookup" or "best fit" and which selects one of the locale matching algorithms described above.

+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES Int 1.0', '#sec-8', 'Intl')}}{{Spec2('ES Int 1.0')}}Initial definition.
{{SpecName('ES Int 2.0', '#sec-8', 'Intl')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#intl-object', 'Intl')}}{{Spec2('ES Int Draft')}}Added Intl.getCanonicalLocales in the 4th edition.
+ +

Browser compatibility

+ +
+ + +

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

+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/intl/numberformat/format/index.html b/files/es/web/javascript/reference/global_objects/intl/numberformat/format/index.html new file mode 100644 index 0000000000..713302ea3c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/intl/numberformat/format/index.html @@ -0,0 +1,92 @@ +--- +title: Intl.NumberFormat.prototype.format() +slug: Web/JavaScript/Referencia/Objetos_globales/Intl/NumberFormat/format +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/format +--- +
{{JSRef}}
+ +

El método Intl.NumberFormat.prototype.format() formatea un número de acuerdo con la configuración regional y las opciones de formato de este objeto {{jsxref("NumberFormat")}}.

+ +
{{EmbedInteractiveExample("pages/js/intl-numberformat-prototype-format.html")}}
+ + + +

Syntax

+ +
numberFormat.format(number)
+ +

Parametros

+ +
+
number
+
A {{jsxref("Number")}} or {{jsxref("BigInt")}} to format.
+
+ +

Descripción

+ +

The format getter function formats a number into a string according to the locale and formatting options of this {{jsxref("NumberFormat")}} object.

+ +

Ejemplos

+ +

Usando format

+ +

Use the format getter function for formatting a single currency value, here for Russia:

+ +
var options = { style: 'currency', currency: 'RUB' };
+var numberFormat = new Intl.NumberFormat('ru-RU', options);
+console.log(numberFormat.format(654321.987));
+// → "654 321,99 руб."
+
+ +

Usando format con map

+ +

Use the format getter function for formatting all numbers in an array. Note that the function is bound to the {{jsxref("NumberFormat")}} from which it was obtained, so it can be passed directly to {{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"
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES Int 1.0', '#sec-11.3.2', 'Intl.NumberFormat.prototype.format')}}{{Spec2('ES Int 1.0')}}Initial definition.
{{SpecName('ES Int 2.0', '#sec-11.3.2', 'Intl.NumberFormat.prototype.format')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#sec-intl.numberformat.prototype.format', 'Intl.NumberFormat.prototype.format')}}{{Spec2('ES Int Draft')}}
+ +

Browser compatibility

+ +
+ + +

{{Compat("javascript.builtins.Intl.NumberFormat.format")}}

+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/intl/numberformat/index.html b/files/es/web/javascript/reference/global_objects/intl/numberformat/index.html new file mode 100644 index 0000000000..7ee880d0e8 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/intl/numberformat/index.html @@ -0,0 +1,188 @@ +--- +title: Intl.NumberFormat +slug: Web/JavaScript/Referencia/Objetos_globales/Intl/NumberFormat +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat +--- +
{{JSRef("Global_Objects", "NumberFormat", "Intl,Collator,DateTimeFormat")}}
+ +

Resumen

+ +

El objeto Intl.NumberFormat es un constructor para objetos que permiten un formato numérico sensible al idioma.

+ +

Sintaxis

+ +
new Intl.NumberFormat([locales [, options]])
+
+Intl.NumberFormat.call(this [, locales [, options]])
+ +

Parámetros

+ +
+
locales
+
+

Cadena o arreglo de cadenas identificadoras para el código de idioma, conforme a BCP 47. Para mayor información con respecto a la forma e interpretación del argumento locales, visite el siguiente enlace: página de Intl. Se admite la siguiente clave de extension Unicode:

+ +
+
nu
+
El sistema numérico a ser utilizado. Los siguientes son valores admisibles: "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
+
+
+
options
+
+

Objeto con alguna o todas las propiedas listadas a continuación:

+ +
+
localeMatcher
+
Algoritmo a emplear para establecer el idioma. Los valores admitidos son "lookup" (coincidencia exacta) y "best fit" (mejor coincidencia); el valor por defecto es "best fit". Para mayor información respecto a esta opción visite el siguiente enlace: página de Intl.
+
style
+
El estilo de formato a utilizar. Los valores admisibles son "decimal" para un formato numérico simple, "currency" para un formato de divisa, y "percent" para un formato porcentual; el valor por defecto es "decimal".
+
currency
+
La divisa a utilizar para el formato de divisa. Los valores admisibles son los establecidos en ISO 4217, por ejemplo "USD" para el dólar americano, "EUR" para el euro, o "CNY" para el RMB chino - para mayor información se recomienda visitar el siguiente enlace: lista actual de códigos de divisa y fondos. No existe un valor por defecto, por lo que si es valor del parámetro style es "currency", deberá proveerse también un valor para la propiedad currency.
+
currencyDisplay
+
Descriptor a utilizar para denotar el valor expresado como divisa. Los valores admisibles son "symbol" para utilizar el símbolo local a su contexto, por ejemplo €, "code" para utilizar el código de divisa ISO, "name" para utilizar el nombre local de la divisa, por ejemplo "dollar"; el valor por defecto es "symbol".
+
useGrouping
+
Si deberán emplearse o no separadores para agrupamiento, como es el caso de los separadores para millares o separadores millares/lakh/crore. Los valores admisibles son true y false; el valor por defecto es true.
+
+ +

Las propiedades descritas a continuación se dividen en dos grupos: por un lado minimumIntegerDigits, minimumFractionDigits y maximumFractionDigits, por el otro minimumSignificantDigits y maximumSignificantDigits. Si al menos una propiedad del segundo grupo es definida, todas aquellas del primero serán ignoradas.

+ +
+
minimumIntegerDigits
+
El número mínimo de digitos enteros a utilizar. El rango de valores admisibles va desde 1 hasta 21; el valor por defecto es 1.
+
minimumFractionDigits
+
El número mínimo de digitos fraccionarios a utilizar. El rango de valores admisibles va desde 0 hasta 20; el valor por defecto para formato simple y porcentual es 0; el valor por defecto para formato de divisa es el indicado en la lista de códigos de moneda ISO 4217 para subdivisiones de tal divisa (o 2 si la lista no establece un valor).
+
maximumFractionDigits
+
El número máximo de dígitos de fraccionarios a utilizar. El rango de valores admisibles va desde 0 hasta 20; el valor por defecto para formato simple es el valor más alto admisible en minimumFractionDigits y 3; el valor por defecto para el formato de moneda es el valor más alto admisible en minimumFractionDigits y el indicado en la lista de cógidos de moneda ISO 4217 para subdivisiones de tal divisa (o 2 si la lista no establece un valor); el valor por defecto en el formato porcentual es el valor más alto admisible en minimumFractionDigits y 0.
+
minimumSignificantDigits
+
El número mínimo de dígitos significativos a utilizar. El rango de valores admisibles va desde 1 hasta 21; el valor por defecto es 1.
+
maximumSignificantDigits
+
El número máximo de dígitos significativos a utilizar. El rango de valores admisibles va desde 1 hasta 21; el valor por defecto es minimumSignificantDigits.
+
+
+
+ +

Descripción

+ +

Propiedades

+ +
+
{{jsxref("NumberFormat.prototype", "Intl.NumberFormat.prototype")}}
+
Permite agregar nuevas propiedades a todos los objetos.
+
+ +

Métodos

+ +
+
{{jsxref("NumberFormat.supportedLocalesOf", "Intl.NumberFormat.supportedLocalesOf()")}}
+
Regresa un arreglo con aquellos códigos de idioma proveídos y que son soportados sin necesidad de recurrir a la configuración por defecto en el entorno de ejecucion.
+
+ +

Instancias NumberFormat

+ +

Propiedades

+ +

Toda instancia de NumberFormat hereda las siguientes propiedades de su prototipo:

+ +
{{page('en-US/docs/JavaScript/Reference/Global_Objects/NumberFormat/prototype','Properties')}}
+ +

Métodos

+ +
+

Toda instancia de NumberFormat hereda los siguientes métodos de su prototipo:

+{{page('en-US/docs/JavaScript/Reference/Global_Objects/NumberFormat/prototype','Methods')}}
+ +

Ejemplos

+ +

Al no especificar un código de idioma, se regresa una cadena con el formato correspondiente al código de idioma y opciones disponibles por defecto en el entorno de ejecución.

+ +
var number = 3500;
+
+alert(new Intl.NumberFormat().format(number));
+// → "3,500" si el código de idioma es US English
+
+ +

Ejemplo: Utilizando locales

+ +

Este ejemplo muestra algunas de las variantes en formato numérico con diferentes contextos locales. A fin de emplear el idioma correspondiente a aquél en la interfaz del usuario para su aplicación, asegúrese de especificar dicho idioma ( y de ser posible alternativas) utilizando el argumento locales:

+ +
var number = 123456.789;
+
+// En el alemán la coma se utiliza como separador decimal y el punto para los millares
+alert(new Intl.NumberFormat("de-DE").format(number));
+// → 123.456,789
+
+// En la mayoría de los países de lengua arábiga se utilizan también símbolos arábigos
+alert(new Intl.NumberFormat("ar-EG").format(number));
+// → ١٢٣٤٥٦٫٧٨٩
+
+// En la India se utilizan separadores millares/lakh/crore
+alert(new Intl.NumberFormat("en-IN").format(number));
+// → 1,23,456.789
+
+// use de nu para establecer un sistema numérico, el sistema decimal chino por ejemplo
+alert(new Intl.NumberFormat("zh-Hans-CN-u-nu-hanidec").format(number));
+// → 一二三,四五六.七八九
+
+// cuando se requiera un lenguaje que pudiera no ser soportado, como es el caso del Balinés
+// se recomienda incluir un lenguaje alternativo, en éste caso Indonesio
+alert(new Intl.NumberFormat(["ban", "id"]).format(number));
+// → 123.456,789
+
+ +

Ejemplo: Utilizando options

+ +

El valor que regresa la función toLocaleString puede ser modificado utilizando el argumento options:

+ +
var number = 123456.789;
+
+// se establece un formato de divisa
+alert(new Intl.NumberFormat("de-DE", {style: "currency", currency: "EUR"}).format(number));
+// → 123.456,79 €
+
+// el yen japonés no tiene ninguna subdivisión
+alert(new Intl.NumberFormat("ja-JP", {style: "currency", currency: "JPY"}).format(number))
+// → ¥123,457
+
+// limitamos a tres los dígitos significativos
+alert(new Intl.NumberFormat("en-IN", {maximumSignificantDigits: 3}).format(number));
+// → 1,23,000
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstado actualComentario
{{SpecName('ES Int 1.0', '#sec-11.1', 'Intl.NumberFormat')}}{{Spec2('ES Int 1.0')}}Definición inicial
{{SpecName('ES Int 2.0', '#sec-11.1', 'Intl.NumberFormat')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#numberformat-objects', 'Intl.NumberFormat')}}{{Spec2('ES Int Draft')}}
+ +

Compatibilidad de los navegadores

+ +
+ + +

{{Compat("javascript.builtins.Intl.NumberFormat")}}

+
+ +

Vea también

+ +

{{page('en-US/docs/JavaScript/Reference/Global_Objects/Intl','See_also')}}

diff --git a/files/es/web/javascript/reference/global_objects/intl/relativetimeformat/index.html b/files/es/web/javascript/reference/global_objects/intl/relativetimeformat/index.html new file mode 100644 index 0000000000..fc15049fa6 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/intl/relativetimeformat/index.html @@ -0,0 +1,106 @@ +--- +title: Intl.RelativeTimeFormat +slug: Web/JavaScript/Referencia/Objetos_globales/Intl/RelativeTimeFormat +tags: + - RelatimeTimeFormat +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat +--- +
{{JSRef}}
+ +

El objeto Intl.RelativeTimeFormat te proporciona una manera de formatear tiempos relativos con traducciones.

+ +
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat.html")}}
+ + + +

Constructor

+ +
+
{{jsxref("RelativeTimeFormat.RelativeTimeFormat()", "Intl.RelativeTimeFormat.RelativeTimeFormat()")}}
+
Crea una nueva instancia de Intl.RelativeTimeFormat.
+
+ +

Métodos estáticos

+ +
+
{{jsxref("RelativeTimeFormat.supportedLocalesOf", "Intl.RelativeTimeFormat.supportedLocalesOf()")}}
+
Devuelve un {{jsxref("Array")}} con todos los idiomas disponibles sin necesidad de usar el que hay por defecto.
+
+ +

Métodos de instancia

+ +
+
{{jsxref("RelativeTimeFormat.format", "Intl.RelativeTimeFormat.prototype.format()")}}
+
Formatea value y unit conforme al idioma y las opciones de formateo al crear la instancia con Intl.RelativeTimeFormat.
+
{{jsxref("RelativeTimeFormat.formatToParts", "Intl.RelativeTimeFormat.prototype.formatToParts()")}}
+
Devuelve un {{jsxref("Array")}} de objetos representando el tiempo relativo en partes que pueden ser usadas en traducciones.
+
{{jsxref("RelativeTimeFormat.resolvedOptions", "Intl.RelativeTimeFormat.prototype.resolvedOptions()")}}
+
Devuelve un nuevo objeto con las propiedades que reflejan las opciones de localización y formato usadas durante la inicialización del objeto.
+
+ +

Ejemplos

+ +

Ejemplo básico

+ +

El siguiente ejemplo muestra cómo conseguir el tiempo relativo para el mejor idioma según el usuario.

+ +
// Crea un formateador de tiempo relativo en tu lenguaje
+// con los valores por defectos pasados expresamente.
+const rtf = new Intl.RelativeTimeFormat("en", {
+    localeMatcher: "best fit", // otros valores: "lookup"
+    numeric: "always", // otros valores: "auto"
+    style: "long", // otros valores: "short" or "narrow"
+});
+
+// Formatea el tiempo relativo con valores negativos (-1).
+rtf.format(-1, "day");
+// > "Hace 1 día"
+
+// Formatea el tiempo relativo con valores positivos (1).
+rtf.format(1, "day");
+// > "Dentro de 1 día"
+ +

Usando formatToParts

+ +

El siguiente ejemplo muestra cómo crear un formateador de tiempo relativo que devuelve las partes separadas:

+ +
const rtf = new Intl.RelativeTimeFormat("es", { numeric: "auto" });
+
+// Formatea el tiempo relativo usando día como unidad.
+rtf.formatToParts(-1, "day");
+// > [{ type: "literal", value: "ayer"}]
+
+rtf.formatToParts(100, "day");
+// > [{ type: "literal", value: "Dentro de " },
+// >  { type: "integer", value: "100", unit: "day" },
+// >  { type: "literal", value: " días" }]
+
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES Int Draft', '#relativetimeformat-objects', 'RelativeTimeFormat')}}
+ +

Compatibilidad en navegadores

+ + + +

{{Compat("javascript.builtins.Intl.RelativeTimeFormat")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/isfinite/index.html b/files/es/web/javascript/reference/global_objects/isfinite/index.html new file mode 100644 index 0000000000..1227071c44 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/isfinite/index.html @@ -0,0 +1,114 @@ +--- +title: isFinite() +slug: Web/JavaScript/Referencia/Objetos_globales/isFinite +tags: + - Function + - JavaScript + - isFinite() +translation_of: Web/JavaScript/Reference/Global_Objects/isFinite +--- +
+ {{jsSidebar("Objects")}}
+

Resumen

+

La función global isFinite() determina si el valor que se le pasa como argumento es un numero finito. Si es necesario, realiza una conversión a un numero al parametro pasado.

+

Sintaxis

+
isFinite(testValue)
+

Parámetros

+
+
+ testvalue
+
+ Valor a ser evaluado.
+
+

Descripción

+

isFinite es una función de alto nivel y no está asociada a ningún objeto.

+

Puede usar esta función para determinar si un número es un número finito. La función isFinite examina el número de su argumento. Si el argumento es NaN, infinito positivo o infinito negativo, este método devuelve false, de otro modo devuelve true.

+

Ejemplos

+
isFinite(Infinity);    // falso
+isFinite(NaN);         // falso
+isFinite(-Inifinity);  // falso
+
+isFinite(0);           // verdadero
+isFinite(2e64);        // verdadero
+
+isFinite("0");         // verdadero, hubiera sido falso en el caso de usar Number.isFinite("0") que es mas robusta
+

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + +
EspecificacionesEstadoComentarios
ECMAScript 2nd Edition.EstándarDefinición inicial
{{SpecName('ES5.1', '#sec-15.1.2.5', 'isFinite')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-isfinite-number', 'isFinite')}}{{Spec2('ES6')}} 
+

Compatibilidad con navegadores

+

{{ CompatibilityTable() }}

+
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soprte básico(Si)(Si)(Si)(Si)(Si)
+
+
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico(Si)(Si)(Si)(Si)(Si)(Si)
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/isnan/index.html b/files/es/web/javascript/reference/global_objects/isnan/index.html new file mode 100644 index 0000000000..d2607d0134 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/isnan/index.html @@ -0,0 +1,88 @@ +--- +title: isNaN +slug: Web/JavaScript/Referencia/Objetos_globales/isNaN +translation_of: Web/JavaScript/Reference/Global_Objects/isNaN +--- +
{{jsSidebar("Objects")}} +

La función isNaN() determina cuando el valor es {{jsxref("NaN")}} o no. Tenga presente que la coerción dentro de la función isNaN tiene reglas interesantes; tal vez quieras usar de forma alternativa Number.isNaN(), como fue definido en ECMAScript 2015.

+ +
{{EmbedInteractiveExample("pages/js/globalprops-isnan.html")}}
+
+ +

Sintaxis

+ +
isNaN(valor)
+ +

Parámetros

+ +
+
valor
+
El valor a probar o evaluar.
+
+ +

Valor de retorno

+ +

true si es valor dado es {{jsxref("NaN")}}, de otro modo, false.

+ +

Descripción

+ +

isNaN es una función de alto nivel y no está asociada a ningún objeto.

+ +

isNaN intenta convertir el parámetro pasado a un número. Si el parámetro no se puede convertir, devuelve true; en caso contrario, devuelve false.

+ +

Esta función es útil ya que el valor {{jsxref("Objetos_globales/NaN", "NaN")}} no puede se probado correctamente con operadores de igualdad. x == NaN y x === NaN son siempre false, sin importar lo que sea x, incluso si x es NaN. Por ejemplo, tanto 1 == NaN como NaN == NaN devuelven false.

+ +

Ejemplos

+ +
isNaN(NaN) //devuelve true
+isNaN("string") //devuelve true
+isNaN("12") //devuelve false
+isNaN(12) //devuelve false
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial
{{SpecName('ES5.1', '#sec-15.1.2.4', 'isNaN')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-isnan-number', 'isNaN')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-isnan-number', 'isNaN')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad de navegadores

+ + + +

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

+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/json/index.html b/files/es/web/javascript/reference/global_objects/json/index.html new file mode 100644 index 0000000000..2744fb71e5 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/json/index.html @@ -0,0 +1,231 @@ +--- +title: JSON +slug: Web/JavaScript/Referencia/Objetos_globales/JSON +tags: + - JSON + - JavaScript + - NeedsTranslation + - Object + - TopicStub +translation_of: Web/JavaScript/Reference/Global_Objects/JSON +--- +
{{JSRef("Objetos_globales", "JSON")}}
+ +

Resumen

+ +

El objeto JSON contiene métodos para analizar JavaScript Object Notation (JSON) y convertir valores a JSON. No puede ser llamado o construído, y aparte de estas dos propiedades, no tiene funcionalidad interesante por sí mismo.

+ +

Descripción

+ +

JavaScript Object Notation

+ +

JSON es una sintaxis para serializar objetos, arreglos, números, cadenas, booleanos y nulos. Está basado sobre sintaxis JavaScript pero es diferente a ella: algo JavaScript no es JSON, y algo JSON no es JavaScript. Mira también: JSON: The JavaScript subset that isn't.

+ + + + + + + + + + + + + + + + + + + + + + + +
Diferencias entre JavaScript y JSON
Tipo JavaScriptDiferencia JSON
Objetos y arreglos +

Los nombres de las propiedades deben tener doble comilla; las comas finales están prohibidas.

+
NúmerosLos ceros a la izquierda están prohibidos; un punto decimal debe ser seguido al menos por un dígito.
Cadenas +

Solo un limitado conjunto de caracteres pueden ser de escape; ciertos caracteres de control estan prohibidos; los caracteres de separador de linea Unicode (U+2028) y el separador de parrafo (U+2029) son permitidos; las cadenas deben estar entre comillas dobles. Mira el siguiente ejemplo donde {{jsxref("JSON.parse")}} funciona bien y un{{jsxref("SyntaxError")}} es generado cuando se evalua el codigo como JavaScript:

+ +
+var code = '"\u2028\u2029"';
+JSON.parse(code); // works fine
+eval(code); // fails
+
+ +

La sintaxis JSON completa es la siguiente:

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

Espacios en blanco insignificantes pueden estar presentes en cualquier lugar excepto en un JSONNumber (los números no deben contener ningún espacio) o en una JSONString (donde es interpretado como el caracter correspondiente en la cadena, o podría causar un error). Los caracteres de Tabulación (U+0009), de retorno de carro (U+000D), de nueva línea (U+000A), y de espacio (U+0020) son los únicos caracteres de espacios en blanco válidos.

+ +

Métodos

+ +
+
{{jsxref("JSON.parse()")}}
+
Analiza una cadena de texto JSON, opcionalmente transformando el valor producido y sus propiedades, retornando el valor.
+
{{jsxref("JSON.stringify()")}}
+
Devuelve un string JSON correspondiente al valor especificado, incluyendo opcionalmente ciertas propiedades o reemplazando valores de propiedades de la manera definida por el usuario.
+
+ +

Polyfill

+ +

El objeto JSON no es soportado por navegadores antiguos. Se puede solucionar esto insertando el siguiente código al inicio del script, permitiendo usar el objeto JSON en navegadores que no soportan su implementación de forma nativa (por ejemplo en Internet Explorer 6).

+ +

El siguiente algoritmo es una imitación del objeto JSON nativo:

+ +
if (!window.JSON) {
+  window.JSON = {
+    parse: function (sJSON) { return eval("(" + sJSON + ")"); },
+    stringify: function (vContent) {
+      if (vContent instanceof Object) {
+        var sOutput = "";
+        if (vContent.constructor === Array) {
+          for (var nId = 0; nId < vContent.length; sOutput += this.stringify(vContent[nId]) + ",", nId++);
+            return "[" + sOutput.substr(0, sOutput.length - 1) + "]";
+        }
+        if (vContent.toString !== Object.prototype.toString) {
+          return "\"" + vContent.toString().replace(/"/g, "\\$&") + "\"";
+        }
+        for (var sProp in vContent) {
+          sOutput += "\"" + sProp.replace(/"/g, "\\$&") + "\":" + this.stringify(vContent[sProp]) + ",";
+        }
+        return "{" + sOutput.substr(0, sOutput.length - 1) + "}";
+     }
+     return typeof vContent === "string" ? "\"" + vContent.replace(/"/g, "\\$&") + "\"" : String(vContent);
+    }
+  };
+}
+
+ +

Los objectos JSON2 y JSON3 son mas complejos que el objeto JSON ya que manejan polyfills.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.12', 'JSON')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-json-object', 'JSON')}}{{Spec2('ES6')}}
+ +

Compatibilidad con navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{ CompatVersionUnknown() }}{{ CompatGeckoDesktop("1.9.1") }}8.010.54.0
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatGeckoMobile("1.0") }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

Basado en Kangax's compat table.

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/json/parse/index.html b/files/es/web/javascript/reference/global_objects/json/parse/index.html new file mode 100644 index 0000000000..d8816fe8ff --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/json/parse/index.html @@ -0,0 +1,178 @@ +--- +title: JSON.parse() +slug: Web/JavaScript/Referencia/Objetos_globales/JSON/parse +tags: + - ECMAScript5 + - JSON + - JavaScript + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/JSON/parse +--- +
{{JSRef("Global_Objects", "JSON")}}
+ +

Resumen

+ +

El método JSON.parse() analiza una cadena de texto como JSON, transformando opcionalmente  el valor producido por el análisis.

+ +

Sintaxis

+ +
JSON.parse(text[, reviver])
+ +

Parámetros

+ +
+
text
+
El texto que se convertirá a JSON. Vea el objeto {{jsxref("JSON")}} para una descripción de la sintaxis JSON.
+
reviver {{optional_inline()}}
+
Si una función, prescribe cómo se transforma el valor producido originalmente por el parsing, antes de retornar.
+
+ +

Returns

+ +

Retorna el objeto que se corresponde con el texto JSON entregado.

+ +

Exceptions

+ +

Lanza una excepción {{jsxref("SyntaxError")}} si la cadena a transformar no es un JSON válido.

+ +

Ejemplos

+ +

Ejemplo: Usando JSON.parse()

+ +
JSON.parse('{}');              // {}
+JSON.parse('true');            // true
+JSON.parse('"foo"');           // "foo"
+JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
+JSON.parse('null');            // null
+
+ +

Ejemplo: Usando el parámetro reviver

+ +

Si se especifica un reviver, el valor computado por el parsing es transformado antes de retornar. Específicamente, el valor computado, y todas sus propiedades (comenzando con las propiedades más anidadas y siguiendo al propio valor original), son individualmente ejecutados a través del reviver, el cual es llamado con el objeto que contiene la propiedad que está siendo procesada como this y con el nombre de la propiedad como cadena y el valor de la propiedad como argumentos. Si la función reviver retorna undefined (o no retorna algún valor, por ejemplo: si la ejecución cae el final de la función), la propiedad es eliminada del objeto. De otra manera, la propiedad es redefinidad para ser el valor de retorno.

+ +

El reviver es llamada último con la cadena vacía y el valor más alto para permitir la transformación del valor más alto. Asegúrese de manejar este caso adecuadamente, por lo general mediante la devolución del valor proporcionado, o JSON.parse will retorna undefined.

+ +
JSON.parse('{"p": 5}', function (k, v) {
+    if(k === "") return v;     // if topmost value, return it,
+    return v * 2;              // else return v * 2.
+});                            // { p: 10 }
+
+JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
+    console.log(k);            // log the current property name, the last is "".
+    return v;                  // return the unchanged property value.
+});
+
+// 1
+// 2
+// 4
+// 6
+// 5
+// 3
+// ""
+
+ +

JSON.parse() no admite comas finales

+ +
// ambos lanzarán un SyntaxError
+JSON.parse('[1, 2, 3, 4, ]');
+JSON.parse('{"foo" : 1, }');
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.12.2', 'JSON.parse')}}{{Spec2('ES5.1')}}Definición inicial.
+ Implementado en JavaScript 1.7.
{{SpecName('ES6', '#sec-json.parse', 'JSON.parse')}}{{Spec2('ES6')}} +

 

+
{{SpecName('ESDraft', '#sec-json.parse', 'JSON.parse')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{ CompatVersionUnknown() }}{{ CompatGeckoDesktop("1.9.1") }}8.010.54.0
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatGeckoMobile("1.0") }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

Based on Kangax's compat table.

+ +

Especificaciones Gecko

+ +

Comenzando con Gecko 29 {{geckoRelease("29")}}, unas cadenas JSON malformadas producen un mensaje de error más detallado que contiene el número de línea y columna que provocó el error de parsing. Esto es útil cuando se está haciendo debug de un JSON grande.

+ +
JSON.parse('[1, 2, 3,]')
+// SyntaxError: JSON.parse: unexpected character at
+// line 1 column 10 of the JSON data
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/json/stringify/index.html b/files/es/web/javascript/reference/global_objects/json/stringify/index.html new file mode 100644 index 0000000000..13f508d7f7 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/json/stringify/index.html @@ -0,0 +1,265 @@ +--- +title: JSON.stringify() +slug: Web/JavaScript/Referencia/Objetos_globales/JSON/stringify +tags: + - JSON + - JavaScript + - Method + - stringify +translation_of: Web/JavaScript/Reference/Global_Objects/JSON/stringify +--- +

{{JSRef}}

+ +

El método JSON.stringify() convierte un objeto o valor de JavaScript en una cadena de texto JSON, opcionalmente reemplaza valores si se indica una función de reemplazo, o si se especifican las propiedades mediante un array de reemplazo.

+ +
{{EmbedInteractiveExample("pages/js/json-stringify.html")}}
+ +

Sintaxis

+ +
JSON.stringify(value[, replacer[, space]])
+ +

Parámetros

+ +
+
value
+
El valor que será convertido a una cadena JSON.
+
replacer{{Optional_Inline}}
+
Una función que altera el comportamiento del proceso de conversión a cadena de texto, o un array de objetos {{JSxRef("String")}} o {{JSxRef("Number")}} que representan una lista de elementos válidos que se incluyen en la cadena JSON. Si este valor es {{JSxRef("null")}} o no se define, todas las propiedades del objeto son incluidas en la cadena de texto JSON resultante.
+
space{{Optional_Inline}}
+
Un objeto de tipo {{JSxRef("String")}} o {{JSxRef("Number")}} que se utiliza para insertar un espacio en blanco dentro de la cadena de salida JSON para mejorar su legibilidad. +

Si es de tipo Number, indica el número de espacios a usar como espacios en blanco; este número está limitado se limita a 10 (si es mayor, el valor es sólo 10). Los valores inferiores a 1 indican que no se deben utilizar espacios.

+ +

Si es de tipo String, la cadena de texto (o sus 10 primeros caracteres, si es mayor) se utiliza como espacios en blanco. Si este parámetro no se define o es {{JSxRef("null")}}, no se utilizará ningún espacio en blanco.

+
+
+ +

Valor devuelto

+ +

Una cadena de texto JSON que representa el valor dado.

+ +

Excepciones

+ +

Lanza una excepción {{JSxRef("TypeError")}} ("cyclic object value") cuando encuentra una referencia circular.

+ +

Descripción

+ +

JSON.stringify convierte un valor a notación JSON representándolo:

+ + + +
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]'
+
+// Elementos de array identificados por string no son enumerables y no tienen sentido en 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]}'
+
+// Estructuras de datos standard
+JSON.stringify([new Set([1]), new Map([[1, 2]]), new WeakSet([{a: 1}]), new WeakMap([[{a: 1}, 2]])]);
+// '[{},{},{},{}]'
+
+// TypedArray
+JSON.stringify([new Int8Array([1]), new Int16Array([1]), new Int32Array([1])]);
+// '[{"0":1},{"0":1},{"0":1}]'
+JSON.stringify([new Uint8Array([1]), new Uint8ClampedArray([1]), new Uint16Array([1]), new Uint32Array([1])]);
+// '[{"0":1},{"0":1},{"0":1},{"0":1}]'
+JSON.stringify([new Float32Array([1]), new Float64Array([1])]);
+// '[{"0":1},{"0":1}]'
+
+// toJSON()
+JSON.stringify({ x: 5, y: 6, toJSON(){ return this.x + this.y; } });
+// '11'
+
+// Símbolos:
+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
+
+// Propiedades no enumerables:
+JSON.stringify( Object.create(null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } }) );
+// '{"y":"y"}'
+
+ +

El parámetro replacer

+ +

El parámetro replacer (de reemplazo) puede ser tanto una función como o un array.

+ +

Como una función toma dos parámetros: el valor y la clave que van a ser procesados. El objeto al cual pertenece la clave representa el parametro this del reemplazo.

+ +

Inicialmente es llamado con una clave vacía y representa el objeto que se va a procesar, y solo después es llamado por cada propiedad en el objeto o array que se va a procesar.

+ +

Devuelve el valor que se va a agregar a la cadena JSON, de la siguiente manera:

+ + + +
Nota: No se puede usar la función de reemplazo para borrar los valores de un array. Si se devuelve undefined o una función, entonces se usara null en su lugar.
+ +

Ejemplo con una función

+ +
function replacer(key, value) {
+  // Filtrando propiedades 
+  if (typeof value === "string") {
+    return undefined;
+  }
+  return value;
+}
+
+var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
+var jsonString = JSON.stringify(foo, replacer);
+// '{"week":45, "month":7}'
+
+ +

El resultado en una cadena JSON sería:  {"week":45,"month":7}.

+ +

Ejemplo con un array

+ +

Si el reemplazo es un array, los valores indican los nombres de las propiedades del objeto que se va a incluir en la cadena JSON resultado.

+ +
JSON.stringify(foo, ['week', 'month']);  
+// '{"week":45,"month":7}', sólo mantiene las propiedades de "week" y de "month"
+
+ +

Argumento space

+ +

Este argumento puede ser empleado para controlar el espaciado en la cadena final. Si es un número, los niveles sucesivos del proceso serán identados cada uno por tantos espacios como se indique (hasta 10). Si es una cadena, serán identados con dicha cadena (o los primeros diez caracteres de la misma).

+ +
JSON.stringify({ a: 2 }, null, ' ');
+// regresa la cadena de texto:
+// '{
+//  "a": 2
+// }'
+ +

Usar el carácter tabulador simula la apariencia de impresión:

+ +
JSON.stringify({ uno: 1, dos : 2 }, null, '\t')
+// devuelve el string:
+// '{            \
+//     "uno": 1, \
+//     "dos": 2  \
+// }' 
+ +

Comportamiento toJSON()

+ +

Si un objeto que sera estringificado tiene una propiedad llamada toJSON donde su valor es una función, entonces el método toJSON modifica el comportamiento de la estringificación JSON: en lugar del objeto que esta siendo serializado, el valor retornado por el método toJSON será serializado cuando el mismo sea llamado. Por ejemplo:

+ +
var obj = {
+  foo: 'foo',
+  toJSON: function () {
+    return 'bar';
+  }
+};
+var json = JSON.stringify({x: obj}); // '{"x":"bar"}'.
+
+ +

Ejemplo de como usar JSON.stringify() con localStorage

+ +

En dado caso en el cual se requiera que un objeto creado por el usuario y al cual se le permita ser restaurado incluso cuando el navegador ha sido cerrado, el siguiente ejemplo es un modelo de la aplicabilidad del metodo JSON. stringify().

+ +
+

Las funciones no son un tipo de dato valido por lo cual estas no funcionaran. Algunos objetos como tipo DATE, se convertiran a cadenas de texto despues de ejecutar JSON.parse().

+
+ +
// Creando un ejemplo de 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 });
+
+// Convirte el JSON string con JSON.stringify()
+// entonces guarda con localStorage con el nombre de la sesión
+localStorage.setItem('session', JSON.stringify(session));
+
+// Ejemplo de como transformar el String generado usando
+// JSON.stringify() y guardándolo en localStorage como objeto JSON otra vez
+var restoredSession = JSON.parse(localStorage.getItem('session'));
+
+// Ahora la variable restoredSession contiene el objeto que fue guardado
+// en localStorage
+console.log(restoredSession);
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.12.3', 'JSON.stringify')}}{{Spec2('ES5.1')}}Definición incial.
+ Implementada en JavaScript 1.7.
{{SpecName('ES6', '#sec-json.stringify', 'JSON.stringify')}}{{Spec2('ES6')}} +

 

+
{{SpecName('ESDraft', '#sec-json.stringify', 'JSON.stringify')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +

{{Compat("javascript.builtins.JSON.stringify")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/clear/index.html b/files/es/web/javascript/reference/global_objects/map/clear/index.html new file mode 100644 index 0000000000..67e8288ad2 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/clear/index.html @@ -0,0 +1,109 @@ +--- +title: Map.prototype.clear() +slug: Web/JavaScript/Referencia/Objetos_globales/Map/clear +translation_of: Web/JavaScript/Reference/Global_Objects/Map/clear +--- +
{{JSRef}}
+ +

El método clear() elimina todos los elementos de un objeto Map.

+ +

Sintaxis

+ +
myMap.clear();
+ +

Ejemplos

+ +

Usando el método 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
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoObservaciones
{{SpecName('ES6', '#sec-map.prototype.clear', 'Map.prototype.clear')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-map.prototype.clear', 'Map.prototype.clear')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico.38{{CompatGeckoDesktop("19.0")}}11257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico.{{CompatNo}}38{{CompatGeckoMobile("19.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/delete/index.html b/files/es/web/javascript/reference/global_objects/map/delete/index.html new file mode 100644 index 0000000000..cbd6e02a50 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/delete/index.html @@ -0,0 +1,114 @@ +--- +title: Map.prototype.delete() +slug: Web/JavaScript/Referencia/Objetos_globales/Map/delete +translation_of: Web/JavaScript/Reference/Global_Objects/Map/delete +--- +
{{JSRef}}
+ +

El método delete() elimina el elemento especificado de un objeto Map.

+ +

Sintaxis

+ +
myMap.delete(clave);
+ +

Parámetros

+ +
+
clave
+
Requerido. La clave del elemento a eliminar del objeto Map.
+
+ +

Valor de retorno

+ +

Retorna true si el elemento existe en el objeto Map objecty fue eliminado, o false si el elemento no existe.

+ +

Ejemplo

+ +

Usando el método delete

+ +
var myMap = new Map();
+myMap.set("bar", "foo");
+
+myMap.delete("bar"); // Retorna true. Eliminado con éxito.
+myMap.has("bar");    // Retorna false. El elemento "bar" ya no está presente.
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoObservaciones
{{SpecName('ES6', '#sec-map.prototype.delete', 'Map.prototype.delete')}}{{Spec2('ES6')}}Definición inicial
{{SpecName('ESDraft', '#sec-map.prototype.delete', 'Map.prototype.delete')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
PrestaciónChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico38{{CompatGeckoDesktop("13.0")}}11257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
PrestaciónAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatNo}}38{{CompatGeckoMobile("13.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/entries/index.html b/files/es/web/javascript/reference/global_objects/map/entries/index.html new file mode 100644 index 0000000000..76a4ca10b7 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/entries/index.html @@ -0,0 +1,109 @@ +--- +title: Map.prototype.entries() +slug: Web/JavaScript/Referencia/Objetos_globales/Map/entries +translation_of: Web/JavaScript/Reference/Global_Objects/Map/entries +--- +
{{JSRef}}
+ +

El método entries() retorna un nuevo objeto Iterator que contiene los pares [clave, valor] para cada elemento en el objeto Map en orden de inserción.

+ +

Sintaxis

+ +
myMap.entries()
+ +

Ejemplos

+ +

Usando entries()

+ +
var myMap = new Map();
+myMap.set("0", "foo");
+myMap.set(1, "bar");
+myMap.set({}, "baz");
+
+var mapIter = myMap.entries();
+
+console.log(mapIter.next().value); // ["0", "foo"]
+console.log(mapIter.next().value); // [1, "bar"]
+console.log(mapIter.next().value); // [Object, "baz"]
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoObservaciones
{{SpecName('ES6', '#sec-map.prototype.entries', 'Map.prototype.entries')}}{{Spec2('ES6')}}Definición
{{SpecName('ESDraft', '#sec-map.prototype.entries', 'Map.prototype.entries')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
PrestaciónChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support38{{ CompatGeckoDesktop("20") }}{{CompatNo}}257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
PrestaciónAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico.{{CompatNo}}38{{CompatGeckoMobile("20")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/foreach/index.html b/files/es/web/javascript/reference/global_objects/map/foreach/index.html new file mode 100644 index 0000000000..00d8e85ff8 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/foreach/index.html @@ -0,0 +1,94 @@ +--- +title: Map.prototype.forEach() +slug: Web/JavaScript/Referencia/Objetos_globales/Map/forEach +translation_of: Web/JavaScript/Reference/Global_Objects/Map/forEach +--- +
{{JSRef}}
+ +

El método forEach() ejecuta una función por cada par clave / valor en el objeto Map, en orden de inserción.

+ +

Sintaxis

+ +
myMap.forEach(callback[, thisArg])
+ +

Parámetros

+ +
+
callback
+
Función ejecutada en cada elemento.
+
thisArg
+
Valor a usar por la funcion callback.
+
+ +

Valor de Retorno

+ +

{{jsxref("undefined")}}.

+ +

Descripción

+ +

El método forEach ejecuta la devolución de llamada (callback) proporcionada una vez para cada clave del mapa que realmente exista. No se invoca para las claves que se han eliminado. Sin embargo, se ejecuta para los valores que están presentes pero tienen el valor indefinido (undefined).

+ +

La función (callback) es invocada con 3 argumentos:

+ + + +

Si se provee un parámetro thisArg al método forEach, pasará al callback cuando sea invocado, para ser utilizado como su valor this. De otra manera, el valor undefined pasará para ser usado como su valor this. El valor this finalmente observable por el callback se determina de acuerdo a las reglas usuales para determinar la visibilidad de this por una función.

+ +

Cada valor es usado una vez, excepto en este caso cuando es eliminado y agregado de nuevo antes de que el forEach haya terminado. callback no es invocado para valores eliminados antes de que sean usados. 

+ +

El método forEach ejecuta la función callback una vez para cada elemento en el objeto Map; No se retornan valores.

+ +

Ejemplos

+ +

Imprimiendo el contenido de un objeto Map

+ +

El siguiente código imprime una línea por cada elemento en el objeto Map:

+ +
function logMapElements(value, key, map) {
+    console.log(`m[${key}] = ${value}`);
+}
+new Map([['foo', 3], ['bar', {}], ['baz', undefined]]).forEach(logMapElements);
+// logs:
+// "m[foo] = 3"
+// "m[bar] = [object Object]"
+// "m[baz] = undefined"
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}{{Spec2('ES2015')}}Definición Inicial.
{{SpecName('ESDraft', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.Map.forEach")}}

+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/get/index.html b/files/es/web/javascript/reference/global_objects/map/get/index.html new file mode 100644 index 0000000000..7f53d850e3 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/get/index.html @@ -0,0 +1,77 @@ +--- +title: Map.prototype.get() +slug: Web/JavaScript/Referencia/Objetos_globales/Map/get +tags: + - JavaScript + - Map +translation_of: Web/JavaScript/Reference/Global_Objects/Map/get +--- +
{{JSRef}}
+ +

El método get() devuelve un elemento específico de un objeto Map.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-get.html")}}
+ + + +

Sintaxis

+ +
miMapa.get(clave);
+ +

Parametros

+ +
+
clave
+
Requerido. La clave del elemento del objeto Map que queremos obtener.
+
+ +

Valor devuelto

+ +

Devuelve el elemento asociado a la clave indicada o undefined si la clave no ha sido encontrada en el objeto Map.

+ +

Ejemplos

+ +

Usando el método get

+ +
var miMapa = new Map();
+miMapa.set('bar', 'foo');
+
+miMapa.get('bar');  // Devuelve "foo".
+miMapa.get('baz');  // Devuelve undefined.
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES2015', '#sec-map.prototype.get', 'Map.prototype.get')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-map.prototype.get', 'Map.prototype.get')}}{{Spec2('ESDraft')}} 
+ +

Compatiblidad con navegadores

+ + + +

{{Compat("javascript.builtins.Map.get")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/has/index.html b/files/es/web/javascript/reference/global_objects/map/has/index.html new file mode 100644 index 0000000000..c556a00dae --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/has/index.html @@ -0,0 +1,65 @@ +--- +title: Map.prototype.has() +slug: Web/JavaScript/Referencia/Objetos_globales/Map/has +translation_of: Web/JavaScript/Reference/Global_Objects/Map/has +--- +
{{JSRef}}
+ +

El método has() devuelve un booleano indicando si el elemento con la llave especificada existe o no.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-has.html")}}
+ + + +

Sintaxis

+ +
myMap.has(key)
+ +

Parameteros

+ +
+
key
+
La llave del elemento a probar si esta presente en el objeto Map.
+
+ +

Valor devuelto

+ +

true si el elemento con la llave especificada existe en el objeto Map; de lo contrario false.

+ +

Ejemplos

+ +

Usando has()

+ +
let myMap = new Map()
+myMap.set('bar', "foo")
+
+myMap.has('bar')   // returns true
+myMap.has('baz')   // returns false
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-map.prototype.has', 'Map.prototype.has')}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Map.has")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/index.html b/files/es/web/javascript/reference/global_objects/map/index.html new file mode 100644 index 0000000000..e3ad7812b7 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/index.html @@ -0,0 +1,213 @@ +--- +title: Map +slug: Web/JavaScript/Referencia/Objetos_globales/Map +tags: + - ECMAScript2015 + - JavaScript + - Map +translation_of: Web/JavaScript/Reference/Global_Objects/Map +--- +
{{JSRef("Global_Objects", "Map")}}
+ +

Resumen

+ +

El objeto Map almacena pares clave/valor. Cualquier valor (tanto objetos como {{Glossary("Primitive", "valores primitivos")}}) pueden ser usados como clave o valor.

+ +

Sintaxis

+ +
new Map([iterable])
+
+ +

Parámetros

+ +
+
iterable
+
Iterable es un array o cualquier otro objeto iterable cuyos elementos son pares clave-valor (arrays de 2 elementos). Cada par clave-valor será agregado al nuevo Map.
+
+ +

Descripción

+ +

Un objeto Map puede iterar sobre sus elementos en orden de inserción. Un bucle for..of devolverá un array de [clave, valor] en cada iteración.

+ +

Cabe destacar que un Map el cual es un mapa de un objeto, especialmente un diccionario de diccionarios, solo se va a mapear en el orden de inserción del objeto — el cual es aleatorio y no ordenado.

+ +

Igualdad de claves

+ +

La igualdad de claves esta basada en el algoritmo "SameValueZero": NaN es considerado lo mismo que NaN (sin importar que NaN !== NaN) y todos los otros operadores son considerados iguales de acuerdo a la semantica del operador ===. En las primeras versiones de ECMAScript 6 -0 y +0 eran considarados distintos (even though -0 === +0), esto fue cambiado en posteriores versiones y ha sido implementado en Gecko 29 {{geckoRelease("29")}} ({{bug("952870")}}) and a recent nightly Chrome.

+ +

Objetos y mapas comparados

+ +

Los {{jsxref("Object", "Objetos")}} son similares a los Maps en cuanto a que ambos permiten establecer claves a valores, recuperar dichos valores, eliminar claves, y detectar si existe algo almacenado en una clave determinada. Por esto, los Objects han sido usados históricamente como Maps; no obstante, hay diferencias importantes entre  Objects y Maps que hacen mejor usar un  Map  en la mayoría de casos.

+ + + +

Propiedades

+ +
+
Map.length
+
El valor de la propiedad de longitud es 0
+
{{jsxref("Map.@@species", "get Map[@@species]")}}
+
La función constructor que se usa para crear objetos derivados.
+
{{jsxref("Map.prototype")}}
+
Representa el prototipo para el constructor de Map. Permite añadir propiedades a todos los objetos Map.
+
+ +

Instancias de Map

+ +

Todas las instancias de Map heredan de {{jsxref("Map.prototype")}}.

+ +

Propiedades

+ +

{{page('es/docs/Web/JavaScript/Referencia/Objetos_globales/Map/prototype','Propiedades')}}

+ +

Métodos

+ +

{{page('es/docs/Web/JavaScript/Referencia/Objetos_globales/Map/prototype','Métodos')}}

+ +

Ejemplos

+ +

Ejemplo: Usando el objeto Map

+ +
var miMapa = new Map();
+
+var claveObj = {},
+    claveFunc = function () {},
+    claveCadena = "una cadena";
+
+// asignando valores
+miMapa.set(claveCadena, "valor asociado con 'una cadena'");
+miMapa.set(claveObj, "valor asociado con claveObj");
+miMapa.set(claveFunc, "valor asociado with claveFunc");
+
+miMapa.size; // 3
+
+// obteniendo los valores
+miMapa.get(claveCadena);    // "valor asociado con 'una cadena'"
+miMapa.get(claveObj);       // "valor asociado con claveObj"
+miMapa.get(claveFunc);      // "valor asociado con claveFunc"
+
+miMapa.get("una cadena");   // ""valor asociado con 'una cadena'"
+                         // porque claveCadena === 'una cadena'
+miMapa.get({});           // undefined, porque claveObj !== {}
+miMapa.get(function() {}) // undefined, porque claveFunc !== function () {}
+
+ +

Ejemplo: Usando NaN como claves de Map

+ +

NaN también puede ser usado como una clave. Aún cuando cada clave NaN no es igual a sí misma (NaN !== NaN es verdadera), el siguiente ejemplo funciona, porque las claves NaNs NaNs no son distinguibles unas de otras:

+ +
var miMapa = new Map();
+miMapa.set(NaN, "no es un número");
+
+miMapa.get(NaN); // "no es un número"
+
+var otroNaN = Number("foo");
+miMapa.get(otroNaN); // "no es un número"
+
+ +

Ejemplo: Iterando Map con for..of

+ +

Los Map pueden ser iterados usando un bucle for..of:

+ +
var miMapa = new Map();
+miMapa.set(0, "cero");
+miMapa.set(1, "uno");
+for (var [clave, valor] of miMapa) {
+  alert(clave + " = " + valor);
+}
+// Mostrará 2 alertas; primero con "0 = cero" y segundo con "1 = uno"
+
+for (var clave of miMapa.keys()) {
+  alert(clave);
+}
+// Mostrará 2 alertas; primero con "0" y segundo con "1"
+
+for (var valor of miMapa.values()) {
+  alert(valor);
+}
+// Mostrará 2 alertas; primero con "cero" y segundo con "uno"
+
+for (var [clave, valor] of miMapa.entries()) {
+  alert(clave + " = " + valor);
+}
+// Mostrará 2 alertas; primero con "0 = cero" y segundo con "1 = uno"
+
+miMapa.forEach(function(valor, clave, miMapa) {
+  alert(clave + " = " + valor);
+})
+// Mostrará 2 alertas; primero con "0 = cero" y segundo con "1 = uno"
+
+ +

Iterando Maps usando forEach()

+ +

Los Map pueden ser iterados usando el método forEach():

+ +
miMapa.forEach(function(valor, clave) {
+  console.log(clave + ' = ' + valor);
+});
+// Mostrará 2 logs; el primero con "0 = cero" y el segundo con "1 = uno"
+ +

Ejemplo: Relación con los objetos Array

+ +
var kvArray = [["clave1", "valor1"], ["clave2", "valor2"]];
+
+// El constructor por defecto de Map para transforar un Array 2D (clave-valor) en un mapa
+var miMapa = new Map(kvArray);
+
+miMapa.get("clave1"); // devuelve "valor1"
+
+// Usando la función Array.from para transformar el mapa a un Array 2D clave-valor.
+console.log(Array.from(miMapa)); // Muestra exactamente el mismo Array que kvArray
+
+// O usando los iteradores de claves o valores y convirtiendo a array.
+console.log(Array.from(miMapa.keys())); // Muestra ["clave1", "clave2"]
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-map-objects', 'Map')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-map-objects', 'Map')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con Navegadores

+ +

 

+ + + +

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

+ +

 

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/keys/index.html b/files/es/web/javascript/reference/global_objects/map/keys/index.html new file mode 100644 index 0000000000..6f67e49dee --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/keys/index.html @@ -0,0 +1,109 @@ +--- +title: Map.prototype.keys() +slug: Web/JavaScript/Referencia/Objetos_globales/Map/keys +translation_of: Web/JavaScript/Reference/Global_Objects/Map/keys +--- +
{{JSRef}}
+ +

El metodo keys() returna un nuevo objeto Iterator que contiene las llaves/keys por cada elemento en el objeto en orden de insercion.

+ +

Syntax

+ +
myMap.keys()
+ +

Ejemplos

+ +

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

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-map.prototype.keys', 'Map.prototype.keys')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-map.prototype.keys', 'Map.prototype.keys')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support38{{CompatGeckoDesktop("20")}}{{CompatNo}}257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}38{{CompatGeckoMobile("20") }}{{CompatNo}}{{CompatNo}}8
+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/set/index.html b/files/es/web/javascript/reference/global_objects/map/set/index.html new file mode 100644 index 0000000000..27faa5a1a6 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/set/index.html @@ -0,0 +1,133 @@ +--- +title: Map.prototype.set() +slug: Web/JavaScript/Referencia/Objetos_globales/Map/set +tags: + - ECMAScript6 + - JavaScript + - Mapa + - Prototype + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Map/set +--- +
{{JSRef}}
+ +

El método set() agrega un nuevo elemento al objeto Map con la llave y el valor especificado.

+ +

Syntax

+ +
myMap.set(llave, valor);
+ +

Parámetros

+ +
+
llave
+
Requerido. La llave del elemento a agregar al objeto Map.
+
valor
+
Requerido. El valor del elemento a agregar al objeto Map.
+
+ +

Valor de retorno

+ +

El objeto Map.

+ +

Ejemplos

+ +

Usando el método set

+ +
var miMapa = new Map();
+
+// Agregar nuevos elementos al mapa
+miMapa.set("bar", "foo");
+miMapa.set(1, "foobar");
+
+// Actualizar un elemento en el mapa
+miMapa.set("bar", "baz");
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-map.prototype.set', 'Map.prototype.set')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-map.prototype.set', 'Map.prototype.set')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con Navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteríticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Básico38{{CompatGeckoDesktop("13.0")}}11257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracteríticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Básico{{CompatNo}}38{{CompatGeckoMobile("13.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Notas de compatibilidad

+ + + +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/size/index.html b/files/es/web/javascript/reference/global_objects/map/size/index.html new file mode 100644 index 0000000000..3ca4d446db --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/size/index.html @@ -0,0 +1,110 @@ +--- +title: Map.prototype.size +slug: Web/JavaScript/Referencia/Objetos_globales/Map/size +translation_of: Web/JavaScript/Reference/Global_Objects/Map/size +--- +
{{JSRef}}
+ +

La propiedad evaluada size retorna el número de elementos en un objeto  {{jsxref("Map")}}.

+ +

Descripción

+ +

El valor de size es un entero representando cuántas entradas tiene el objeto Map. No hay definida una función de evalador set  para size; uted no puede cambiar esta propiedad.

+ +

Ejemplos

+ +

Usando size

+ +
var myMap = new Map();
+myMap.set("a", "alpha");
+myMap.set("b", "beta");
+myMap.set("g", "gamma");
+
+myMap.size // 3
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoObservaciones
{{SpecName('ES6', '#sec-get-map.prototype.size', 'Map.prototype.size')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-get-map.prototype.size', 'Map.prototype.size')}}{{Spec2('ESDraft')}} 
+ +

Compatibildad entre navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico38{{ CompatGeckoDesktop("19") }}{{ CompatIE("11") }}257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatNo}}38{{CompatGeckoMobile("19")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Notas específicas para Gecko

+ + + +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/map/values/index.html b/files/es/web/javascript/reference/global_objects/map/values/index.html new file mode 100644 index 0000000000..c81b54dbe7 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/map/values/index.html @@ -0,0 +1,77 @@ +--- +title: Map.prototype.values() +slug: Web/JavaScript/Referencia/Objetos_globales/Map/values +tags: + - ECMAScript 2015 + - Iterador + - JavaScript + - Map + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Map/values +--- +
{{JSRef}}
+ +

El método values() devuelve un nuevo objeto Iterador que contiene los valores para cada elemento en el objeto Map en el mismo orden de inserción.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-values.html")}}
+ + + +

Sintaxis

+ +
myMap.values()
+ +

Valor devuelto

+ +

Un nuevo objeto iterador {{jsxref("Map")}}.

+ +

Ejemplos

+ +

Utilizando 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"
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-map.prototype.values', 'Map.prototype.values')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-map.prototype.values', 'Map.prototype.values')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ + + +

{{Compat("javascript.builtins.Map.values")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/abs/index.html b/files/es/web/javascript/reference/global_objects/math/abs/index.html new file mode 100644 index 0000000000..eb286dcc59 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/abs/index.html @@ -0,0 +1,149 @@ +--- +title: Math.abs() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/abs +tags: + - JavaScript + - Math + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Math/abs +--- +
{{JSRef}}
+ +

La función Math.abs() retorna el valor absoluto de un número, que es 

+ +

Math.abs(x)=|x|={xifx>00ifx=0-xifx<0{\mathtt{\operatorname{Math.abs}(x)}} = {|x|} = \begin{cases} x & \text{if} \quad x \geq 0 \\ -x & \text{if} \quad x < 0 \end{cases}

+ +

Sintaxis

+ +
Math.abs(x)
+ +

Parámetros

+ +
+
x
+
Un número.
+
+

Valor de retorno

+ +

El valor absoluto del número dado.

+ +

+
+
+ +

Descripción

+ +

Como abs() es un método estático de Math, deberías siempre usar Math.abs(), en lugar de un método de un objeto Math que crees (Math no es un constructor).

+ +

Ejemplos

+ +

Comportamiento de Math.abs()

+ +

Pasando un string no-numérico o una variable {{jsxref("undefined")}}/empty retorna {{jsxref("NaN")}}. Pasando {{jsxref("null")}} retorna 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
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.1', 'Math.abs')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.abs', 'Math.abs')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.abs', 'Math.abs')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad en navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/acos/index.html b/files/es/web/javascript/reference/global_objects/math/acos/index.html new file mode 100644 index 0000000000..3280a9b17f --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/acos/index.html @@ -0,0 +1,99 @@ +--- +title: Math.acos() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/acos +tags: + - JavaScript + - Math + - Métodos + - Referências +translation_of: Web/JavaScript/Reference/Global_Objects/Math/acos +--- +
{{JSRef}}
+ +

La función Math.acos() devuelve el arco coseno (en radianes) de un número que es

+ +

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

+ +

Sintaxis

+ +
Math.acos(x)
+ +

Parámetros

+ +
+
x
+
Un número.
+
+ +

Valor devuelto

+ +

El arco coseno (en radianes) de un número dado si se encuentra entre -1 y 1; de otro modo, {{jsxref("NaN")}}.

+ +

Descripción

+ +

El método Math.acos() devuelve un valor numérico entre 0 y π radianes para x entre -1 y 1. Si el valor de x está fuera de este rango, devuelve {{jsxref("NaN")}}.

+ +

Debido a que acos() es un método estático de Math, siempre debe usarse como Math.acos(), en vez de como un método de un objeto Math creado (Math no es un constructor).

+ +

Ejemplos

+ +

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

Para valores menores que  -1 o mayores que 1, Math.acos() devuelve {{jsxref("NaN")}}.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.2', 'Math.acos')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.acos', 'Math.acos')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.acos', 'Math.acos')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegador

+ + + +

{{Compat("javascript.builtins.Math.acos")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/acosh/index.html b/files/es/web/javascript/reference/global_objects/math/acosh/index.html new file mode 100644 index 0000000000..8819e3c69a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/acosh/index.html @@ -0,0 +1,94 @@ +--- +title: Math.acosh() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/acosh +tags: + - JavaScript + - Math + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Math/acosh +--- +
{{JSRef}}
+ +

La función Math.acosh() retorna el arco coseno hiperbólico de un número que es: 

+ +

Para todo x mayor ó igual a 1,se cumple que : la funcion Math.acosh(x) = arcosh(x) = al único y mayor ó igual a 0 ; tal que; cosh(y) = x

+ +

Sintaxis

+ +
Math.acosh(x)
+ +

Parámetros

+ +
+
x
+
Un número.
+
+ +

Valor retornado

+ +

El arco coseno hiperbólico del número dado. Si el número es menor que 1, {{jsxref("NaN")}}.

+ +

Descripción

+ +

Como acosh() es un método estático de Math, siempre debe ser usado como Math.acosh(), en vez de como un método de un objeto Math creado (Math no es constructor).

+ +

Ejemplos

+ +

Utilizando Math.acosh()

+ +
Math.acosh(-1);  // NaN
+Math.acosh(0);   // NaN
+Math.acosh(0.5); // NaN
+Math.acosh(1);   // 0
+Math.acosh(2);   // 1.3169578969248166
+
+ +

Para valores menores que 1 Math.acosh() retorna {{jsxref("NaN")}}.

+ +

Polyfill

+ +

Para todo x1x mayor ó igual a 1, se tiene que el arcosh(x) = ln(x + la raiz cuadrada de(x cuadrado - 1))  y esto puede ser emulado con la siguiente funcion:

+ +
Math.acosh = Math.acosh || function(x) {
+  return Math.log(x + Math.sqrt(x * x - 1));
+};
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónStatusComentario
{{SpecName('ES6', '#sec-math.acosh', 'Math.acosh')}}{{Spec2('ES6')}}Definición inicial.
{{ SpecName('ESDraft', '#sec-math.acosh', 'Math.acosh')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegador

+ + + +

{{Compat("javascript.builtins.Math.acosh")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/asin/index.html b/files/es/web/javascript/reference/global_objects/math/asin/index.html new file mode 100644 index 0000000000..1a6c78d6a5 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/asin/index.html @@ -0,0 +1,144 @@ +--- +title: Math.asin() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/asin +translation_of: Web/JavaScript/Reference/Global_Objects/Math/asin +--- +
{{JSRef}}
+ +

La Funcion Math.asin() retorna El arco seno (en radianes) de un número, eso es.

+ +

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

+ +

Syntax

+ +
Math.asin(x)
+ +

Parametros

+ +
+
x
+
Un Numero.
+
+ +

Return value

+ +

The arcsine (in radians) of the given number if it's between -1 and 1; otherwise, {{jsxref("NaN")}}.

+ +

Descripcion

+ +

The Math.asin() method returns a numeric value between -π2-\frac{\pi}{2} and π2\frac{\pi}{2} radians for x between -1 and 1. If the value of x is outside this range, it returns {{jsxref("NaN")}}.

+ +

Because asin() is a static method of Math, you always use it as Math.asin(), rather than as a method of a Math object you created (Math is not a constructor).

+ +

Ejemplos

+ +

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

For values less than -1 or greater than 1, Math.asin() returns {{jsxref("NaN")}}.

+ +

Espesificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspesificacionEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Initial definition. Implemented in JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.3', 'Math.asin')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.asin', 'Math.asin')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.asin', 'Math.asin')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con Navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver Mas

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/asinh/index.html b/files/es/web/javascript/reference/global_objects/math/asinh/index.html new file mode 100644 index 0000000000..9a3204a6a8 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/asinh/index.html @@ -0,0 +1,90 @@ +--- +title: Math.asinh() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/asinh +translation_of: Web/JavaScript/Reference/Global_Objects/Math/asinh +--- +
{{JSRef}}
+ +

La función Math.asinh() retorna el arcoseno hyperbólico de un número, es decir

+ +

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

+ +

Sintáxis

+ +
Math.asinh(x)
+ +

Parámetros

+ +
+
x
+
Un número.
+
+ +

Valor de retorno

+ +

El arcoseno hyperbólico del número dado.

+ +

Descripción

+ +

Debido a que asinh() es un método estático de  Math, siempre hay que usarlo como Math.asinh(), en lugar de como un método del objeto Math que se hayamos creado (Math no es un constructor).

+ +

Ejemplos

+ +

Usos de Math.asinh()

+ +
Math.asinh(1);  // 0.881373587019543
+Math.asinh(0);  // 0
+
+ +

Polyfill

+ +

As a quick and dirty hack the expression arsinh(x)=ln(x+x2+1)\operatorname {arsinh} (x) = \ln \left(x + \sqrt{x^{2} + 1} \right) may be used directly for a coarse emulation by the following function:

+ +
Math.asinh = Math.asinh || function(x) {
+  if (x === -Infinity) {
+    return x;
+  } else {
+    return Math.log(x + Math.sqrt(x * x + 1));
+  }
+};
+
+ +

Been formally correct it suffers from a number of issues related to floating point computations. Accurate result requires special handling of positive/negative, small/large arguments as it done e.g. in glibc or GNU Scientific Library.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-math.asinh', 'Math.asinh')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-math.asinh', 'Math.asinh')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidades de buscadores

+ + + +

{{Compat("javascript.builtins.Math.asinh")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/atan/index.html b/files/es/web/javascript/reference/global_objects/math/atan/index.html new file mode 100644 index 0000000000..abb0453e6c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/atan/index.html @@ -0,0 +1,107 @@ +--- +title: Math.atan() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/atan +tags: + - JavaScript + - Matemática + - Math + - Method + - Trigonometría +translation_of: Web/JavaScript/Reference/Global_Objects/Math/atan +--- +
{{JSRef}}
+ +

La función Math.atan() retorna el arcotangente (en radianes) de un number, esto es

+ +

Math.atan(x)=arctan(x)= el único y[-π2;π2] tal quetan(y)=x\mathtt{\operatorname{Math.atan}(x)} = \arctan(x) = \text{ the unique } \; y \in \left[-\frac{\pi}{2}; \frac{\pi}{2}\right] \, \text{such that} \; \tan(y) = x

+ +
{{EmbedInteractiveExample("pages/js/math-atan.html")}}
+ + + +

Sintaxis

+ +
Math.atan(x)
+ +

Parámetros

+ +
+
x
+
Un número.
+
+ +

Valor de retorno

+ +

El arcotangente (en radianes) de el número dado.

+ +

Descripción

+ +

El método Math.atan() retorna un valor numérico entre -π2-\frac{\pi}{2} y π2\frac{\pi}{2} radianes.

+ +

Dado que atan() es un método estático de Math, siempre debes usarlo como Math.atan(), y no como un método de un objeto Math que hayas creado (Math no es un constructor).

+ +

Ejemplos

+ +

Usando 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
+
+// El ángulo que la línea [(0,0);(x,y)] forma con el eje-x en un sistema de coordenadas Cartesianas.
+Math.atan(y / x);
+
+ +

Nota que podrías querer evitar usar ±Infinity por razones de estilo. En este caso, {{jsxref("Math.atan2()")}} con 0 como segundo argumento puede ser una mejor solución.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementada en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.4', 'Math.atan')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.atan', 'Math.atan')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.atan', 'Math.atan')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con el navegador

+ + + +

{{Compat("javascript.builtins.Math.atan")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/atan2/index.html b/files/es/web/javascript/reference/global_objects/math/atan2/index.html new file mode 100644 index 0000000000..7b0dc147da --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/atan2/index.html @@ -0,0 +1,141 @@ +--- +title: Math.atan2() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/atan2 +translation_of: Web/JavaScript/Reference/Global_Objects/Math/atan2 +--- +
{{JSRef("Global_Objects", "Math")}}
+ +

Resumen

+ +

La función Math.atan2() retorna la arcotangente del cociente de los argumentos.

+ +

Sintaxis

+ +
Math.atan2(y, x)
+ +

Parámetros

+ +
+
y
+
Primer número.
+
x
+
Segundo número.
+
+ +

Descripción

+ +

El método Math.atan2() retorna un valor númerico entre -π y π representando el ángulo theta de un punto (x, y). Este es un ángulo en sentido antihorario, medido en radianes, entre el eje positivo X, y el punto (x, y). Tenga en cuenta que esta función recibe la coordenada Y como primer argumento y X como segundo.

+ +

A la función Math.atan2() se  le pasan los argumentos x y y por separado, y a Math.atan() se le pasa la relación de los dos argumentos.

+ +

Debido a que  atan2() es un método estatico de Math, siempre se debe usar Math.atan2(), en vez de usarlo como un método creado por el objeto Math (Math no es un contructor).

+ +

Ejemplos

+ +

Ejemplo: Usando 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.
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
ECMAScript 1st Edition.StandardInitial definition. Implemented in JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.5', 'Math.atan2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.atan2', 'Math.atan2')}}{{Spec2('ES6')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/atanh/index.html b/files/es/web/javascript/reference/global_objects/math/atanh/index.html new file mode 100644 index 0000000000..85022b4138 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/atanh/index.html @@ -0,0 +1,87 @@ +--- +title: Math.atanh() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/atanh +translation_of: Web/JavaScript/Reference/Global_Objects/Math/atanh +--- +
{{JSRef}}
+ +

La función Math.atanh() nos retorna un arco hiperbólico de un numero, eso es:

+ +

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{ el unico } \; y \; \text{de tal manera que} \; \tanh(y) = x

+ +
{{EmbedInteractiveExample("pages/js/math-atanh.html")}}
+ + + +

Sintaxis

+ +
Math.atanh(x)
+ +

Parametros

+ +
+
x
+
Un numero.
+
+ +

Retorna un valor

+ +

El arco hiperbolico tangible nos otorga un numero.

+ +

Descripción

+ +

Por que atanh() es un metodo estatico de Math, tu siempre puedes usar eso como Math.atanh(), se puede usar como un metod de Math objeto que tu creaste (Math no es un constructor).

+ +

Polimorfismo

+ +

Para |x|<1\left|x\right| < 1, tenemos artanh(x)=12ln(1+x1-x)\operatorname {artanh} (x) = \frac{1}{2}\ln \left( \frac{1 + x}{1 - x} \right) por lo que esto puede estar emulado con la siguiente función:

+ +
Math.atanh = Math.atanh || function(x) {
+  return Math.log((1+x)/(1-x)) / 2;
+};
+
+ +

Ejemplos

+ +

Using Math.atanh()

+ +
Math.atanh(-2);  // NaN
+Math.atanh(-1);  // -Infinito
+Math.atanh(0);   // 0
+Math.atanh(0.5); // 0.5493061443340548
+Math.atanh(1);   // Infinito
+Math.atanh(2);   // NaN
+
+ +

Para valores mayores a 1 o menores a -1, {{jsxref("NaN")}} retorna.

+ +

Especificaciones

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-math.atanh', 'Math.atanh')}}
+ +

Compatibilidad entre navegadores

+ + + +

{{Compat("javascript.builtins.Math.atanh")}}

+ +

Puedes leer

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/cbrt/index.html b/files/es/web/javascript/reference/global_objects/math/cbrt/index.html new file mode 100644 index 0000000000..350bc03054 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/cbrt/index.html @@ -0,0 +1,96 @@ +--- +title: Math.cbrt() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/cbrt +translation_of: Web/JavaScript/Reference/Global_Objects/Math/cbrt +--- +
{{JSRef}}
+ +

La función Math.cbrt() nos retorna la raíz del cubo del numero, eso es

+ +

Math.cbrt(x)=x3=the uniqueysuch thaty3=x\mathtt{Math.cbrt(x)} = \sqrt[3]{x} = \text{un unico} \; y \; \text{de tal manera que} \; y^3 = x

+ +
{{EmbedInteractiveExample("pages/js/math-cbrt.html")}}
+ + + +

Sintaxis

+ +
Math.cbrt(x)
+ +

Parametros

+ +
+
x
+
Un numero
+
+ +

Valor retornado

+ +

La raíz cubica del numero proporcionado

+ +

Descripción

+ +

Al cbrt() ser un metodo estatico de Math, tu siempre la puedes usar como Math.cbrt(),un metodo de Math que es un objeto que se crea (Math no es un constructor).

+ +

Poliformismo

+ +

Para x0x \geq 0, tenemos x3=x1/3\sqrt[3]{x} = x^{1/3} esto puede ser emulado con la siguiente función:

+ +
if (!Math.cbrt) {
+  Math.cbrt = (function(pow) {
+    return function cbrt(x){
+      // Esto asegura que numeros negativos sigan siendo negativos
+      return x < 0 ? -pow(-x, 1/3) : pow(x, 1/3);
+    };
+  })(Math.pow); // Localiza Math.pow para una mayor eficiencía
+}
+
+ +

Ejemplos

+ +

Usando Math.cbrt()

+ +
Math.cbrt(NaN); // NaN
+Math.cbrt(-1); // -1
+Math.cbrt(-0); // -0
+Math.cbrt(-Infinity); // -Infinito
+Math.cbrt(0); // 0
+Math.cbrt(1); // 1
+Math.cbrt(Infinity); // Infinito
+Math.cbrt(null); // 0
+Math.cbrt(2);  // 1.2599210498948732
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-math.cbrt', 'Math.cbrt')}}
+ +

Compatibilidad

+ + + + + +

and send us a pull request.

+ +

{{Compat("javascript.builtins.Math.cbrt")}}

+ +

Puedes leer

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/ceil/index.html b/files/es/web/javascript/reference/global_objects/math/ceil/index.html new file mode 100644 index 0000000000..52b43cd3a2 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/ceil/index.html @@ -0,0 +1,166 @@ +--- +title: Math.ceil() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/ceil +tags: + - JavaScript + - Math + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Math/ceil +--- +
{{JSRef}}
+ +

La función Math.ceil() devuelve el entero mayor o igual más próximo a un número dado.

+ +
{{EmbedInteractiveExample("pages/js/math-ceil.html")}}
+ +

Sintaxis

+ +
Math.ceil(x)
+ +

Parámetros

+ +
+
x
+
Un número.
+
+ +

Valor devuelto

+ +

El número entero mayor o igual más próximo que el número dado.

+ +

Descripción

+ +

Como ceil() es un método estático de Math, siempre debe usarlo como Math.ceil(), en lugar de como un método de un objeto que ha creado Math (Math no es un constructor).

+ +

Ejemplos

+ +

Utilizando Math.ceil()

+ +

El siguiente ejemplo muestra el uso de Math.ceil().

+ +
Math.ceil(.95);    // 1
+Math.ceil(4);      // 4
+Math.ceil(7.004);  // 8
+Math.ceil(-0.95);  // -0
+Math.ceil(-4);     // -4
+Math.ceil(-7.004); // -7
+
+ +

Ajuste decimal

+ +
// Closure
+(function() {
+  /**
+   * Ajuste decimal de un número.
+   *
+   * @param {String}  type  El tipo de ajuste.
+   * @param {Number}  value El número.
+   * @param {Integer} exp   El exponente (El logaritmo de ajuste en base 10).
+   * @returns {Number} El valor ajustado.
+   */
+  function decimalAdjust(type, value, exp) {
+    // Si exp es undefined o cero...
+    if (typeof exp === 'undefined' || +exp === 0) {
+      return Math[type](value);
+    }
+    value = +value;
+    exp = +exp;
+    // Si el valor no es un número o exp no es un entero...
+    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
+
+ +

Espicificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.6', 'Math.ceil')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.ceil', 'Math.ceil')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.ceil', 'Math.ceil')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad en navegadores

+ +

{{Compat("javascript.builtins.Math.ceil")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/cos/index.html b/files/es/web/javascript/reference/global_objects/math/cos/index.html new file mode 100644 index 0000000000..82a0793769 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/cos/index.html @@ -0,0 +1,74 @@ +--- +title: Math.cos() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/cos +translation_of: Web/JavaScript/Reference/Global_Objects/Math/cos +--- +
{{JSRef}}
+ +

La función estática Math.cos() devuelve el coseno del ángulo especificado, que debe ser especificado en radianes. Este valor es longitud adyacente longitud hipotenusa .

+ +
{{EmbedInteractiveExample("pages/js/math-cos.html")}}
+ + + +

Sintaxis

+ +
Math.cos(x)
+ +

Parametros

+ +
+
x
+
El ángulo en radianes por el cual devolverá el coseno.
+
+ +

Valor de retorno

+ +

El coseno del número dado.

+ +

Descripción

+ +

El método Math.cos() retorna un valor numérico entre -1 y 1, que representa el coseno del ángulo.

+ +

Debido a que cos() es un método estático de Math, siempre debes utilizarlo como Math.cos(), en lugar de como un método de un objeto Math que hayas creado (Math no es un constructor).

+ +

Ejemplos

+ +

Usando Math.cos()

+ +
Math.cos(0);           // 1
+Math.cos(1);           // 0.5403023058681398
+
+Math.cos(Math.PI);     // -1
+Math.cos(2 * Math.PI); // 1
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-math.cos', 'Math.cos')}}
+ +

Compatibilidad de navegadores

+ + + +

{{Compat("javascript.builtins.Math.cos")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/e/index.html b/files/es/web/javascript/reference/global_objects/math/e/index.html new file mode 100644 index 0000000000..2fdc92d125 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/e/index.html @@ -0,0 +1,83 @@ +--- +title: Math.E +slug: Web/JavaScript/Referencia/Objetos_globales/Math/E +tags: + - JavaScript + - Math + - Property + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Math/E +--- +
{{JSRef}}
+ +

La propiedad Math.E representa la base de los logaritmos naturales, e, aproximadamente 2.718.

+ +

Math.E=e2.718\mathtt{\mi{Math.E}} = e \approx 2.718

+ +

{{EmbedInteractiveExample("pages/js/math-e.html")}}

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

Descripción

+ +

Porque E es una propiedad estática de Math, siempre usted lo usa como Math.E, en lugar de como una propiedad de un objeto Math creado (Math no es un constructor).

+ +

Ejemplos

+ +

Utilizando Math.E

+ +

La función siguiente devuelve e:

+ +
function getNapier() {
+   return Math.E
+}
+
+getNapier(); // 2.718281828459045
+ +

 

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.1', 'Math.E')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.e', 'Math.E')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.e', 'Math.E')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +

{{Compat("javascript.builtins.Math.E")}}

+ +

 

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/exp/index.html b/files/es/web/javascript/reference/global_objects/math/exp/index.html new file mode 100644 index 0000000000..ca60758600 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/exp/index.html @@ -0,0 +1,136 @@ +--- +title: Math.exp() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/exp +translation_of: Web/JavaScript/Reference/Global_Objects/Math/exp +--- +
{{JSRef}}
+ +
La función Math.exp() devuelve ex, donde x es el argumento, y e es {{jsxref("Math.E", "El número de Euler (también conocido como la constante de Napier)", "", 1)}}, la base de los algoritmos naturales.
+ +
 
+ +

Sintaxis

+ +
Math.exp(x)
+ +

Parámetros

+ +
+
x
+
Un número.
+
+ +

Valor devuelto

+ +

Un número represetando ex, donde e es {{jsxref("Math.E", "número de Euler", "", 1)}} y x es el argumento.

+ +

Descripción

+ +

Porque exp() es un método estático de Math, siempre úsalo como Math.exp(), en vez de un método de un objeto Math que hayas creado (Math no es un constructor).

+ +

Ejemplos

+ +

Usando Math.exp()

+ +
Math.exp(-1); // 0.36787944117144233
+Math.exp(0);  // 1
+Math.exp(1);  // 2.718281828459045
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}} +

Definición inicial. Implementado en JavaScript 1.0.

+
{{SpecName('ES5.1', '#sec-15.8.2.8', 'Math.exp')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.exp', 'Math.exp')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.exp', 'Math.exp')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/expm1/index.html b/files/es/web/javascript/reference/global_objects/math/expm1/index.html new file mode 100644 index 0000000000..d8679d9230 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/expm1/index.html @@ -0,0 +1,89 @@ +--- +title: Math.expm1() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/expm1 +tags: + - JavaScript + - Matemáticas + - Math + - Method + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Math/expm1 +--- +
{{JSRef}}
+ +

La función Math.expm1() regresa ex - 1, donde x es el argumento, y {{jsxref("Math.E", "e", "", 1)}} la base del logaritmo natural.

+ +
{{EmbedInteractiveExample("pages/js/math-expm1.html")}}
+ + + +

Sintaxis

+ +
Math.expm1(x)
+ +

Parámetos

+ +
+
x
+
Un número.
+
+ +

Valor de retorno

+ +

Un número representando ex - 1, donde e es {{jsxref("Math.E", "Número de Euler", "", 1)}} y  x es el argumento.

+ +

Descripción

+ +

Debido a que expm1() es un método estático de Math, uselo siempre como Math.expm1(), en lugar de como un método del objeto Math que creó (Math no es un constructor).

+ +

Ejemplos

+ +

Usando Math.expm1()

+ +
Math.expm1(-1); // -0.6321205588285577
+Math.expm1(0);  // 0
+Math.expm1(1);  // 1.718281828459045
+
+ +

Polyfill

+ +

Esto puede ser emulado con la ayuda de la función {{jsxref("Math.exp()")}}:

+ +
Math.expm1 = Math.expm1 || function(x) {
+  return Math.exp(x) - 1;
+};
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-math.expm1', 'Math.expm1')}}
+ +

Compatibilidad de navegadores

+ + + +

{{Compat("javascript.builtins.Math.expm1")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/floor/index.html b/files/es/web/javascript/reference/global_objects/math/floor/index.html new file mode 100644 index 0000000000..867f3e8dac --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/floor/index.html @@ -0,0 +1,124 @@ +--- +title: Math.floor() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/floor +tags: + - JavaScript + - Math + - Method +translation_of: Web/JavaScript/Reference/Global_Objects/Math/floor +--- +
{{JSRef("Objetos_globales", "Math")}}
+ +

Sumario

+ +

Devuelve el máximo entero menor o igual a un número.

+ +

Sintaxis

+ +
Math.floor(x) 
+ +

Parámetros

+ +
+
x
+
Es número.
+
+ +

Descripción

+ +

Como floor es un método estático de Math, siempre debe usarse como Math.floor(), en lugar de usarlo como un método de un objeto Math creado.

+ +

Ejemplos

+ +

Ejemplo: Usando Math.floor

+ +

La siguiente función devuelve el valor entero redondeado más bajo de la variable x:

+ +
function getFloor(x) {
+   return Math.floor(x);
+}
+ +

Si se pasa 45.95 a getFloor, éste devuelve 45; si se le pasa -45.95,  devuelve -46.

+ +

Ejemplo: Ajuste decimal

+ +
// Cierre
+(function(){
+
+	/**
+	 * Ajuste decimal de un número.
+	 *
+	 * @param	{String}	type	El tipo de ajuste.
+	 * @param	{Number}	value	El número.
+	 * @param	{Integer}	exp		El exponente(el logaritmo en base 10 del ajuste).
+	 * @returns	{Number}			El valor ajustado.
+	 */
+	function decimalAdjust(type, value, exp) {
+		// Si el exp es indefinido o cero...
+		if (typeof exp === 'undefined' || +exp === 0) {
+			return Math[type](value);
+		}
+		value = +value;
+		exp = +exp;
+		// Si el valor no es un número o el exp no es un entero...
+		if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
+			return NaN;
+		}
+		// Cambio
+		value = value.toString().split('e');
+		value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
+		// Volver a cambiar
+		value = value.toString().split('e');
+		return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
+	}
+
+	// Redondeo decimal
+	if (!Math.round10) {
+		Math.round10 = function(value, exp) {
+			return decimalAdjust('round', value, exp);
+		};
+	}
+	// Redondeo hacia abajo
+	if (!Math.floor10) {
+		Math.floor10 = function(value, exp) {
+			return decimalAdjust('floor', value, exp);
+		};
+	}
+	// Redondeo hacia arriba
+	if (!Math.ceil10) {
+		Math.ceil10 = function(value, exp) {
+			return decimalAdjust('ceil', value, exp);
+		};
+	}
+
+})();
+
+// Redondeo
+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
+// Piso
+Math.floor10(55.59, -1); // 55.5
+Math.floor10(59, 1); // 50
+Math.floor10(-55.51, -1); // -55.6
+Math.floor10(-51, 1); // -60
+// Techo
+Math.ceil10(55.51, -1); // 55.6
+Math.ceil10(51, 1); // 60
+Math.ceil10(-55.59, -1); // -55.5
+Math.ceil10(-59, 1); // -50
+
+ +

Ven También

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/fround/index.html b/files/es/web/javascript/reference/global_objects/math/fround/index.html new file mode 100644 index 0000000000..73d773e5b0 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/fround/index.html @@ -0,0 +1,199 @@ +--- +title: Math.fround() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/fround +tags: + - JavaScript + - Math + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Math/fround +--- +
{{JSRef}}
+ +

The Math.fround() function returns the nearest 32-bit single precision float representation of a {{jsxref("Number")}}.

+ +
{{EmbedInteractiveExample("pages/js/math-fround.html")}}
+ + + +

Syntax

+ +
var singleFloat = Math.fround(doubleFloat);
+ +

Parameters

+ +
+
doubleFloat
+
A {{jsxref("Number")}}. If the parameter is of a different type, it will get converted to a number or to {{jsxref("NaN")}} if it cannot be converted.
+
+ +

Return value

+ +

The nearest 32-bit single precision float representation of the given number.

+ +

Description

+ +

JavaScript uses 64-bit double floating-point numbers internally, which offer a very high precision. However, sometimes you may be working with 32-bit floating-point numbers, for example if you are reading values from a {{jsxref("Float32Array")}}. This can create confusion: Checking a 64-bit float and a 32-bit float for equality may fail even though the numbers are seemingly identical.

+ +

To solve this, Math.fround() can be used to cast the 64-bit float to a 32-bit float. Internally, JavaScript continues to treat the number as a 64-bit float, it just performs a "round to even" on the 23rd bit of the mantissa, and sets all following mantissa bits to 0. If the number is outside the range of a 32-bit float, {{jsxref("Infinity")}} or -Infinity is returned.

+ +

Because fround() is a static method of Math, you always use it as Math.fround(), rather than as a method of a Math object you created (Math is not a constructor).

+ +

Examples

+ +

Using Math.fround()

+ +

The number 1.5 can be precisely represented in the binary numeral system, and is identical in 32-bit and 64-bit:

+ +
Math.fround(1.5); // 1.5
+Math.fround(1.5) === 1.5; // true
+
+ +

However, the number 1.337 cannot be precisely represented in the binary numeral system, so it differs in 32-bit and 64-bit:

+ +
Math.fround(1.337); // 1.3370000123977661
+Math.fround(1.337) === 1.337; // false
+
+ +

21502^150 is too big for a 32-bit float, so Infinity is returned:

+ +
2 ** 150; // 1.42724769270596e+45
+Math.fround(2 ** 150); // Infinity
+
+ +

If the parameter cannot be converted to a number, or it is not-a-number (NaN), Math.fround() will return NaN:

+ +
Math.fround('abc'); // NaN
+Math.fround(NaN); // NaN
+
+ +

Polyfill

+ +

This can be emulated with the following function, if {{jsxref("Float32Array")}} are supported:

+ +
Math.fround = Math.fround || (function (array) {
+  return function(x) {
+    return array[0] = x, array[0];
+  };
+})(new Float32Array(1));
+
+ +

Supporting older browsers is slower, but also possible:

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

Faster Alternative Polyfill (Work In Progress)

+ +

The below polyfill is much faster and uses double-precision rounding errors to emulate the rounding errors caused by floating point narrowing. Although the polyfill higher on the page is good for comprehension, all of the complex Math function that it uses make it terrible slow. Although this polyfill is much faster, it is off by a bit in about 1 out of 2048 of the tests due to the tendency to round upwards like Math.ceil instead of like Math.round in the division of the subnormal-handling section of the code. Because single precision floating points have 23 bits of precision, the mean error deviation from the correct value is roughly 2**-28 or 0.0000000058%. This deviation from the correct value should be insignifigant in most circumstances, however please edit this polyfill if you have some tweaks to increase correctness without bloating the code size too much. NaN is not optimized for because it is most likely (almost certain) that you will not be calling Math.fround with NaN exclusively in a tight loop. Moreover, an additional check just for NaN instead of letting NaN naturally arise would induce a performance penalty for this function in older browsers when not called with NaN. Thus, the code below handles NaN correctly, but inefficiently for good reason.

+ +
const Math_round = Math.round;
+if (!Math.fround) Math.fround = function(x) {
+    if (x > 3.402823669209385e+38) return Infinity; // maximum float is 2**128
+    if (x < -3.402823669209385e+38) return -Infinity; // minimum is -2**128
+    if (-1.1754943508222875e-38 < x && x < 1.1754943508222875e-38) {
+        if (-1.401298464324817e-45 < x && x < 1.401298464324817e-45) return 0;
+        // else, it is a subnormal
+        var mul = Math_round(x/1.4012984643e-45)*1e-323;
+        return mul * 1.418129833677085e+278;
+    }
+
+    var hi = x * 9007199254740992; // 9007199254740992 is 2**53 which is the maximum of double precision
+    var exp = (x + hi) - hi; // adding this number chops off all lower bits, rounding the number.
+    exp /= 16777216; // 8388608 = 2**23 * 2, so preserve 23 bits in x because there are 23 bits in a float
+                     //            The "* 2" compensates for the addition shifting up the bits unwantedly
+    return Math_round(x / exp) * exp;
+}
+
+ +

Below is code used to test for deviations from the correct value. The code below is meant for testing the merit of the function, not for polyfilling older browsers (as evidenced by the fact that the native Math.fround function is used).

+ +
requestIdleCallback(function(){"use strict";
+    const Math_fround = Math.fround;
+    const Math_round = Math.round;
+    function my_fround(x) {
+        if (x > 3.402823669209385e+38) return Infinity; // maximum float is 2**128
+        if (x < -3.402823669209385e+38) return -Infinity; // minimum is -2**128
+        if (-1.1754943508222875e-38 < x && x < 1.1754943508222875e-38) {
+            if (-1.401298464324817e-45 < x && x < 1.401298464324817e-45) return 0;
+            // else, it is a subnormal
+            var mul = Math_round(x/1.4012984643e-45)*1e-323;
+            return mul * 1.418129833677085e+278;
+        }
+
+        var hi = x * 9007199254740992; // 9007199254740992 is 2**53 which is the maximum of double precision
+        var exp = (x + hi) - hi; // adding this number chops off all lower bits, rounding the number.
+        exp /= 16777216; // 8388608 = 2**23 * 2, so preserve 23 bits in x because there are 23 bits in a float
+                         //            The "* 2" compensates for the addition shifting up the bits unwantedly
+        return Math_round(x / exp) * exp;
+    }
+
+    const doublesArray = new Float64Array(8192);
+    const int32s = new Uint32Array(doublesArray.buffer);
+
+    const crypto = window.crypto;
+
+    var hasWarned = false, warnings=0;
+    for (var i=0; i<4; i=i+1|0) {
+        crypto.getRandomValues(int32s);
+        for (var k=0; k<8192; k=k+1|0) {
+            const myValue = my_fround(doublesArray[k]);
+            const froundVal = Math_fround(doublesArray[k]);
+            // quicker version of Object.is because of no function call overhead:
+            if (myValue === myValue ? myValue !== froundVal : froundVal === froundVal) {
+                if (!hasWarned) console.error(doublesArray[k]); // only show the first incorrect number
+                hasWarned = true;
+                warnings = warnings + 1|0;
+            }
+        }
+    }
+    console[warnings > 0 ? "warn" : "log"]( "Total number of mishandled floats: " + warnings );
+});
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-math.fround', 'Math.fround')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-math.fround', 'Math.fround')}}{{Spec2('ESDraft')}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Math.fround")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/hypot/index.html b/files/es/web/javascript/reference/global_objects/math/hypot/index.html new file mode 100644 index 0000000000..21d6850e44 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/hypot/index.html @@ -0,0 +1,124 @@ +--- +title: Math.hypot() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/hypot +tags: + - JavaScript + - Math +translation_of: Web/JavaScript/Reference/Global_Objects/Math/hypot +--- +
{{JSRef}}
+ +

La función Math.hypot() retorna la raíz cuadrada de la suma de los cuadrados de sus argumentos, es decir:

+ +

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

Sintaxis

+ +
Math.hypot(valor1, valor2, ..., valorN)
+ +

Parámetros

+ +
+
Valor1, Valor2, ...
+
Números.
+
+ +

Valor de Retorno

+ +

La raíz cuadrada de la suma de los cuadrados de los argumentos proporcionados. Si tan sólo uno de los argumentos no pudiese ser convertido a un número, se retornaría {{jsxref("NaN")}}.

+ +

Descripción

+ +

Para calcular la hipotenusa de un triángulo rectángulo, o la magnitud de un número complejo, se usa el Teorema de Pitágoras, representado en la siguiente fórmula Math.sqrt(v1*v1 + v2*v2) donde v1 y v2 son, o los catetos del triángulo, o los valores reales y complejos usados para hallar la mencionada magnitud. Para calcular distancias de dos o más dimensiones, simplemente añade más valores al cuadrado (multiplicado por sí mismo) dentro de el método sqrt() del objeto Math, algo como: Math.sqrt(v1*v1 + v2*v2 + v3*v3 + v4*v4).  

+ +

Esta función lo hace un poco más fácil y rápido, sólo coloca: Math.hypot(v1, v2) , o Math.hypot(v1, v2, v3, v4, ...) .  

+ +

Esto también evita un problema si la magnitud de tus números es muy elevada. El número más largo que puedes representar en JavaScript es Number.MAX_VALUE = 1.797...e+308 .  Si tus números son mayores que 1e154, tomando el cuadrado de esos valores resultaría en infinito destruyendo así tus resultados. Por ejemplo, Math.sqrt(1e200*1e200 + 1e200*1e200) = Infinito. Si usas hypot() en su lugar, tú obtendrías un buen resultado Math.hypot(1e200, 1e200) = 1.4142...e+200 .  Eso también es verdad con números demasiados pequeños.  Math.sqrt(1e-200*1e-200 + 1e-200*1e-200) = 0, pero si en su lugar, usamos Math.hypot(1e-200, 1e-200) =1.4142...e-200, obtendríamos un buen resultado una vez más.

+ +

Debido a que hypot() es un método estático de Math, siempre úsalo como Math.hypot(), en lugar de un método del objeto Math que hayas creado (Math no es un constructor).

+ +

Si ningún argumento es provisto, el resultado es 0.

+ +

Con sólo un argumento, Math.hypot() retornaría lo mismo que Math.abs().

+ +

Ejemplos

+ +

Usando Math.hypot()

+ +
Math.hypot(3, 4);        // 5
+Math.hypot(3, 4, 5);     // 7.0710678118654755
+Math.hypot();            // 0
+Math.hypot(NaN);         // NaN
+Math.hypot(3, 4, 'foo'); // NaN, +'foo' => NaN
+Math.hypot(3, 4, '5');   // 7.0710678118654755, +'5' => 5
+Math.hypot(-3);          // 3, lo mismo que Math.abs(-3)
+
+ +

Polyfill

+ +

Esto puede ser emulado usando la siguiente función:

+ +
Math.hypot = Math.hypot || function() {
+  var y = 0, i = arguments.length;
+  while (i--) y += arguments[i] * arguments[i];
+  return Math.sqrt(y);
+};
+
+ +

Un polyfill que evita subdesbordamientos (underflows) y desbordamientos (overflows):

+ +
Math.hypot = function (x, y) {
+  // https://bugzilla.mozilla.org/show_bug.cgi?id=896264#c28
+  var max = 0;
+  var s = 0;
+  for (var i = 0; i < arguments.length; i += 1) {
+    var arg = Math.abs(Number(arguments[i]));
+    if (arg > max) {
+      s *= (max / arg) * (max / arg);
+      max = arg;
+    }
+    s += arg === 0 && max === 0 ? 0 : (arg / max) * (arg / max);
+  }
+  return max === 1 / 0 ? 1 / 0 : max * Math.sqrt(s);
+};
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-math.hypot', 'Math.hypot')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-math.hypot', 'Math.hypot')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ + + +

{{Compat("javascript.builtins.Math.hypot")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/index.html b/files/es/web/javascript/reference/global_objects/math/index.html new file mode 100644 index 0000000000..bdf0d21e74 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/index.html @@ -0,0 +1,196 @@ +--- +title: Math +slug: Web/JavaScript/Referencia/Objetos_globales/Math +tags: + - JavaScript + - Math + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Math +--- +
{{JSRef}}
+ +

Math es un objeto incorporado que tiene propiedades y métodos para constantes y funciones matemáticas. No es un objeto de función.

+ +

Math funciona con el tipo {{jsxref("Number")}}. No funciona con {{jsxref("BigInt")}}.

+ +

Descripción

+ +

A diferencia de los demás objetos globales, el objeto Math no se puede editar. Todas las propiedades y métodos de Math son estáticos. Usted se puede referir a la constante pi como Math.PI y puede llamar a la función seno como Math.sin(x), donde x es el argumento del método. Las constantes se definen con la precisión completa de los números reales en JavaScript.

+ +

Propiedades

+ +
+
{{jsxref("Math.E")}}
+
Constante de Euler, la base de los logaritmos naturales, aproximadamente 2.718.
+
{{jsxref("Math.LN2")}}
+
Logaritmo natural de 2, aproximadamente 0.693.
+
{{jsxref("Math.LN10")}}
+
Logaritmo natural de 10, aproximadamente 2.303.
+
{{jsxref("Math.LOG2E")}}
+
Logaritmo de E con base 2, aproximadamente 1.443.
+
{{jsxref("Math.LOG10E")}}
+
Logaritmo de E con base 10, aproximadamente 0.434.
+
{{jsxref("Math.PI")}}
+
Ratio de la circunferencia de un circulo respecto a su diámetro, aproximadamente 3.14159.
+
{{jsxref("Math.SQRT1_2")}}
+
Raíz cuadrada de 1/2; Equivalentemente, 1 sobre la raíz cuadrada de 2, aproximadamente 0.707.
+
{{jsxref("Math.SQRT2")}}
+
Raíz cuadrada de 2, aproximadamente 1.414.
+
+ +

Métodos

+ +
+

Tenga en cuenta que las funciones trigonométricas (sin(), cos(), tan(), asin(), acos(), atan(), atan2()) devuelven ángulos en radianes. Para convertir radianes a grados, divida por (Math.PI / 180), y multiplique por esto para convertir a la inversa.

+
+ +
+

Tenga en cuenta que muchas de las funciones matemáticas tienen una precisión que es dependiente de la implementación. Esto significa que los diferentes navegadores pueden dar un resultado diferente, e incluso el mismo motor de JS en un sistema operativo o arquitectura diferente puede dar resultados diferentes.

+
+ +
+
{{jsxref("Global_Objects/Math/abs", "Math.abs(x)")}}
+
Devuelve el valor absoluto de un número.
+
{{jsxref("Global_Objects/Math/acos", "Math.acos(x)")}}
+
Devuelve el arco coseno de un número.
+
{{jsxref("Global_Objects/Math/acosh", "Math.acosh(x)")}}
+
Devuelve el arco coseno hiperbólico de un número.
+
{{jsxref("Global_Objects/Math/asin", "Math.asin(x)")}}
+
Devuelve el arco seno de un número.
+
{{jsxref("Global_Objects/Math/asinh", "Math.asinh(x)")}}
+
Devuelve el arco seno hiperbólico de un número.
+
{{jsxref("Global_Objects/Math/atan", "Math.atan(x)")}}
+
Devuelve el arco tangente de un número.
+
{{jsxref("Global_Objects/Math/atanh", "Math.atanh(x)")}}
+
Devuelve el arco tangente hiperbólico de un número.
+
{{jsxref("Global_Objects/Math/atan2", "Math.atan2(y, x)")}}
+
Devuelve el arco tangente del cuociente de sus argumentos.
+
{{jsxref("Global_Objects/Math/cbrt", "Math.cbrt(x)")}}
+
Devuelve la raíz cúbica de un número.
+
{{jsxref("Global_Objects/Math/ceil", "Math.ceil(x)")}}
+
Devuelve el entero más pequeño mayor o igual que un número.
+
{{jsxref("Global_Objects/Math/clz32", "Math.clz32(x)")}}
+
Devuelve el número de ceros iniciales de un entero de 32 bits.
+
{{jsxref("Global_Objects/Math/cos", "Math.cos(x)")}}
+
Devuelve el coseno de un número.
+
{{jsxref("Global_Objects/Math/cosh", "Math.cosh(x)")}}
+
Devuelve el coseno hiperbólico de un número.
+
{{jsxref("Global_Objects/Math/exp", "Math.exp(x)")}}
+
Devuelve Ex, donde x es el argumento, y E es la constante de Euler (2.718...), la base de los logaritmos naturales.
+
{{jsxref("Global_Objects/Math/expm1", "Math.expm1(x)")}}
+
Devuelve ex - 1.
+
{{jsxref("Global_Objects/Math/floor", "Math.floor(x)")}}
+
Devuelve el mayor entero menor que o igual a un número.
+
{{jsxref("Global_Objects/Math/fround", "Math.fround(x)")}}
+
Devuelve la representación flotante de precisión simple más cercana de un número.
+
{{jsxref("Global_Objects/Math/hypot", "Math.hypot([x[, y[, …]]])")}}
+
Devuelve la raíz cuadrada de la suma de los cuadrados de sus argumentos.
+
{{jsxref("Global_Objects/Math/imul", "Math.imul(x, y)")}}
+
Devuelve el resultado de una multiplicación de enteros de 32 bits.
+
{{jsxref("Global_Objects/Math/log", "Math.log(x)")}}
+
Devuelve el logaritmo natural (log, también ln) de un número.
+
{{jsxref("Global_Objects/Math/log1p", "Math.log1p(x)")}}
+
Devuelve el logaritmo natural de x + 1 (loge, también ln) de un número.
+
{{jsxref("Global_Objects/Math/log10", "Math.log10(x)")}}
+
Devuelve el logaritmo en base 10 de x.
+
{{jsxref("Global_Objects/Math/log2", "Math.log2(x)")}}
+
Devuelve el logaritmo en base 2 de x.
+
{{jsxref("Global_Objects/Math/max", "Math.max([x[, y[, …]]])")}}
+
Devuelve el mayor de cero o más números.
+
{{jsxref("Global_Objects/Math/min", "Math.min([x[, y[, …]]])")}}
+
Devuelve el más pequeño de cero o más números.
+
{{jsxref("Global_Objects/Math/pow", "Math.pow(x, y)")}}
+
Las devoluciones de base a la potencia de exponente, que es, baseexponent.
+
{{jsxref("Global_Objects/Math/random", "Math.random()")}}
+
Devuelve un número pseudo-aleatorio entre 0 y 1.
+
{{jsxref("Global_Objects/Math/round", "Math.round(x)")}}
+
Devuelve el valor de un número redondeado al número entero más cercano.
+
{{jsxref("Global_Objects/Math/sign", "Math.sign(x)")}}
+
Devuelve el signo de la x, que indica si x es positivo, negativo o cero.
+
{{jsxref("Global_Objects/Math/sin", "Math.sin(x)")}}
+
Devuelve el seno de un número.
+
{{jsxref("Global_Objects/Math/sinh", "Math.sinh(x)")}}
+
Devuelve el seno hiperbólico de un número.
+
{{jsxref("Global_Objects/Math/sqrt", "Math.sqrt(x)")}}
+
Devuelve la raíz cuadrada positiva de un número.
+
{{jsxref("Global_Objects/Math/tan", "Math.tan(x)")}}
+
Devuelve la tangente de un número.
+
{{jsxref("Global_Objects/Math/tanh", "Math.tanh(x)")}}
+
Devuelve la tangente hiperbólica de un número.
+
+
Math.toSource() {{non-standard_inline}}
+
+
Devuelve la cadena "Math".
+
{{jsxref("Global_Objects/Math/trunc", "Math.trunc(x)")}}
+
Devuelve la parte entera del número x, la eliminación de los dígitos fraccionarios.
+
+ +

Extendiendo el objeto Math

+ +

Como muchos de los objetos incluidos en JavaScript, el objeto Math puede ser extendido con propiedades y métodos personalizados. Para extender el objeto Math no se debe usar 'prototype'. Es posible extender directamente Math:

+ +
Math.propName = propValue;
+Math.methodName = methodRef;
+ +

Como demostración, el siguiente ejemplo agrega un método al objeto Math para calcular el máximo común divisor de una lista de argumentos.

+ +
/* Función variádica -- Retorna el máximo común divisor de una lista de argumentos */
+Math.gcd = function() {
+    if (arguments.length == 2) {
+        if (arguments[1] == 0)
+            return arguments[0];
+        else
+            return Math.gcd(arguments[1], arguments[0] % arguments[1]);
+    } else if (arguments.length > 2) {
+        var result = Math.gcd(arguments[0], arguments[1]);
+        for (var i = 2; i < arguments.length; i++)
+            result = Math.gcd(result, arguments[i]);
+        return result;
+    }
+};
+ +

Pruébalo:

+ +
console.log(Math.gcd(20, 30, 15, 70, 40)); // `5`
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición Inicial. Implementado en JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.8', 'Math')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math-object', 'Math')}}{{Spec2('ES6')}}Nuevos métodos {{jsxref("Math.log10()", "log10()")}}, {{jsxref("Math.log2()", "log2()")}}, {{jsxref("Math.log1p()", "log1p()")}}, {{jsxref("Math.expm1()", "expm1()")}}, {{jsxref("Math.cosh()", "cosh()")}}, {{jsxref("Math.sinh()", "sinh()")}}, {{jsxref("Math.tanh()", "tanh()")}}, {{jsxref("Math.acosh()", "acosh()")}}, {{jsxref("Math.asinh()", "asinh()")}}, {{jsxref("Math.atanh()", "atanh()")}}, {{jsxref("Math.hypot()", "hypot()")}}, {{jsxref("Math.trunc()", "trunc()")}}, {{jsxref("Math.sign()", "sign()")}}, {{jsxref("Math.imul()", "imul()")}}, {{jsxref("Math.fround()", "fround()")}}, {{jsxref("Math.cbrt()", "cbrt()")}} y {{jsxref("Math.clz32()", "clz32()")}} añadidos.
{{SpecName('ESDraft', '#sec-math-object', 'Math')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
{{Compat("javascript.builtins.Math")}}
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/ln10/index.html b/files/es/web/javascript/reference/global_objects/math/ln10/index.html new file mode 100644 index 0000000000..8b9f40b77b --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/ln10/index.html @@ -0,0 +1,84 @@ +--- +title: Math.LN10 +slug: Web/JavaScript/Referencia/Objetos_globales/Math/LN10 +tags: + - JavaScript + - Math + - Property + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LN10 +--- +
{{JSRef}}
+ +

La propiedad Math.LN10 representa el logaritmo natural de 10, aproximadamente 2.302:

+ +

Math.LN10=ln(10)2.302\mathtt{\mi{Math.LN10}} = \ln(10) \approx 2.302

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

Descripción

+ +

Porque LN10 es una propiedad estática de Math, siempre usted lo usa como Math.LN10, en lugar de como una propiedad de un objeto Math creado (Math no es un constructor).

+ +

Ejemplos

+ +

Utilizando Math.LN10

+ +

La función siguiente devuelve el logaritmo natural de 10:

+ +
function getNatLog10() {
+   return Math.LN10
+}
+
+getNatLog10(); // 2.302585092994046
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.2', 'Math.LN10')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.ln10', 'Math.LN10')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.ln10', 'Math.LN10')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.Math.LN10")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/ln2/index.html b/files/es/web/javascript/reference/global_objects/math/ln2/index.html new file mode 100644 index 0000000000..4a447f677a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/ln2/index.html @@ -0,0 +1,83 @@ +--- +title: Math.LN2 +slug: Web/JavaScript/Referencia/Objetos_globales/Math/LN2 +tags: + - JavaScript + - Math + - Property + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LN2 +--- +
{{JSRef}}
+ +

La propiedad Math.LN2 representa el logaritmo natural de 2, aproximadamente 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)}}
+ +

Descripción

+ +

Como LN2 es una propiedad estática de Math, siempre se usa como Math.LN2, en lugar de como una propiedad de un objeto Math que ha creado (Math no es un constructor).

+ +

Ejemplos

+ +

Utilizando Math.LN2

+ +

La función siguiente devuelve el logaritmo natural de 2:

+ +
function getNatLog2() {
+  return Math.LN2;
+}
+
+getNatLog2(); // 0.6931471805599453
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.3', 'Math.LN2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.ln2', 'Math.LN2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.ln2', 'Math.LN2')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.Math.LN2")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/log/index.html b/files/es/web/javascript/reference/global_objects/math/log/index.html new file mode 100644 index 0000000000..d243cd0501 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/log/index.html @@ -0,0 +1,112 @@ +--- +title: Math.log() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/log +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log +--- +
{{JSRef}}
+ +

La función Math.log() devuelve la base neutral de un número (base {{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{el unico} \; y \; \text{tal que} \; e^y = x

+ +

 

+ +

La función en JavaScrcrip Math.log() es equivalente a ln(x) en matematicas.

+ +
{{EmbedInteractiveExample("pages/js/math-log.html")}}
+ + + +

Sintaxis

+ +
Math.log(x)
+ +

Parametetros

+ +
+
x
+
Es un numero.
+
+ +

Retorna el valor

+ +

 

+ +

La base natural (base {{jsxref("Math.E", "e")}}) del número dado. Si el número es negativo, se devuelve {{jsxref("NaN")}} 

+ +

Descripcion

+ +

If the value of x is negative, the return value is always {{jsxref("NaN")}}.

+ +

Because log() is a static method of Math, you always use it as Math.log(), rather than as a method of a Math object you created (Math is not a constructor).

+ +

If you need the natural log of 2 or 10, use the constants {{jsxref("Math.LN2")}} or {{jsxref("Math.LN10")}} .  If you need a logarithm to base 2 or 10, use {{jsxref("Math.log2()")}} or {{jsxref("Math.log10()")}} .  If you need a logarithm to other bases, use Math.log(x) / Math.log(otherBase) as in the example below; you might want to precalculate 1 / Math.log(otherBase) .

+ +

Examples

+ +

Using Math.log()

+ +
Math.log(-1); // NaN, out of range
+Math.log(0);  // -Infinity
+Math.log(1);  // 0
+Math.log(10); // 2.302585092994046
+
+ +

Using Math.log() with a different base

+ +

The following function returns the logarithm of y with base x (ie. logxy\log_x y):

+ +
function getBaseLog(x, y) {
+  return Math.log(y) / Math.log(x);
+}
+
+ +

If you run getBaseLog(10, 1000) it returns 2.9999999999999996 due to floating-point rounding, which is very close to the actual answer of 3.

+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES1')}}{{Spec2('ES1')}}Initial definition. Implemented in JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.10', 'Math.log')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.log', 'Math.log')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.log', 'Math.log')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Math.log")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/log10/index.html b/files/es/web/javascript/reference/global_objects/math/log10/index.html new file mode 100644 index 0000000000..dc97208b63 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/log10/index.html @@ -0,0 +1,137 @@ +--- +title: Math.log10() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/log10 +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log10 +--- +
{{JSRef}}
+ +

Math.log10() funcion que retorna el logaritmo de base 10 de un numero, esto es

+ +

x>0,Math.log10(x)=log10(x)=la unicay tal que10y=x\forall x > 0, \mathtt{\operatorname{Math.log10}(x)} = \log_10(x) = \text{the unique} \; y \; \text{such that} \; 10^y = x

+ +

Sintaxis

+ +
Math.log10(x)
+ +

Parametros

+ +
+
x
+
Un Numero
+
+ +

Valor de Retorno

+ +

El logaritmo de base 10 del numero dado. SI el numero es negativo, {{jsxref("NaN")}} es devuelto.

+ +

Descripción

+ +

Si el valor de x es menor que cero, el valor de retorno siempre es {{jsxref("NaN")}}.

+ +

Porque log10() es un metodo estatico de Math, debe usarse siempre Math.log10(), en vez de usarse como un metodo del objeto math que se ha creado (Math no es un constructor).

+ +

Esta función es equivalente de Math.log(x) / Math.log(10).  Para log10(e) use la constante {{jsxref("Math.LOG10E")}} que es 1 / {{jsxref("Math.LN10")}}.  

+ +

Ejemplos

+ +

usando Math.log10()

+ +
Math.log10(2);      // 0.3010299956639812
+Math.log10(1);      // 0
+Math.log10(0);      // -Infinito
+Math.log10(-2);     // NaN
+Math.log10(100000); // 5
+
+ +

Polyfill

+ +

Puede ser emulada con la siguiente función

+ +
Math.log10 = Math.log10 || function(x) {
+  return Math.log(x) * Math.LOG10E;
+};
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificacionEstadoComentarios
{{SpecName('ES6', '#sec-math.log10', 'Math.log10')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-math.log10', 'Math.log10')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con Navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Básico{{CompatChrome("38")}}{{CompatGeckoDesktop("25")}}{{CompatNo}}{{CompatOpera("25")}}{{CompatSafari("7.1")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Básico{{CompatNo}}{{CompatNo}}{{CompatGeckoMobile("25")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Vea Tambien

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/log10e/index.html b/files/es/web/javascript/reference/global_objects/math/log10e/index.html new file mode 100644 index 0000000000..755b6ceb1a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/log10e/index.html @@ -0,0 +1,130 @@ +--- +title: Math.LOG10E +slug: Web/JavaScript/Referencia/Objetos_globales/Math/LOG10E +tags: + - JavaScript + - Math + - Propiedad + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LOG10E +--- +
{{JSRef}}
+ +
 
+ +
La propiedad Math.LOG10E representa el logaritmo base 10 de e, el cual es aproximadamente 0.434:
+ +

Math.LOG10E=log10(e)0.434\mathtt{\mi{Math.LOG10E}} = \log_10(e) \approx 0.434

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

Descripción

+ +

Debido a que LOG10E es una propiedad estatica del módulo Math, se debe de invocar siempre como Math.LOG10E, en lugar de invocarla como una propiedad de algun objeto Math que hayas creado ( Math no es un constructor ).

+ +

Ejemplos

+ +

Utilizando Math.LOG10E

+ +

La siguiente funcion regresa el logaritmo base 10 de e:

+ +
function getLog10e() {
+  return Math.LOG10E;
+}
+
+getLog10e(); // 0.4342944819032518
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificacionEstatusComentarios
{{SpecName('ES1')}}{{Spec2('ES1')}} +

Definición inicial. Implementado en JavaScript 1.0.

+
{{SpecName('ES5.1', '#sec-15.8.1.5', 'Math.LOG10E')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.log10e', 'Math.LOG10E')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.log10e', 'Math.LOG10E')}}{{Spec2('ESDraft')}} 
+ + + +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver tambien

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/log2/index.html b/files/es/web/javascript/reference/global_objects/math/log2/index.html new file mode 100644 index 0000000000..b394270684 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/log2/index.html @@ -0,0 +1,96 @@ +--- +title: Math.log2() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/log2 +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log2 +--- +
{{JSRef}}
+ +

La función Math.log2() retorna el logaritmo base 2 de un número, esto es

+ +

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

Syntax

+ +
Math.log2(x)
+ +

Parámetros

+ +
+
x
+
Un número.
+
+ +

Valor de retorno

+ +

El logaritmo base 2 del número usado como parámetro. Si el número es negativo, {{jsxref("NaN")}} será retornado.

+ +

Descripción

+ +

Si el valor de x es mejor a 0, el valor de retorno es siempre {{jsxref("NaN")}}.

+ +

Debido a que log2() es una función estática de Math, siempre debe ser usado como Math.log2(), en lugar de ser usado como un método del objeto Math (Math no es un constructor).

+ +

Esta función es equivalente a Math.log(x) / Math.log(2).  Para log2(e) use la constante {{jsxref("Math.LOG2E")}} que es 1 / {{jsxref("Math.LN2")}}.  

+ +

Ejemplos

+ +

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

Polyfill

+ +

This Polyfill emulates the Math.log2 function. Note that it returns imprecise values on some inputs (like 1 << 29), wrap into {{jsxref("Math.round()")}} if working with bit masks.

+ +
Math.log2 = Math.log2 || function(x) {
+  return Math.log(x) * Math.LOG2E;
+};
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-math.log2', 'Math.log2')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-math.log2', 'Math.log2')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Math.log2")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/log2e/index.html b/files/es/web/javascript/reference/global_objects/math/log2e/index.html new file mode 100644 index 0000000000..f9593b4bc6 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/log2e/index.html @@ -0,0 +1,27 @@ +--- +title: Math.LOG2E +slug: Web/JavaScript/Referencia/Objetos_globales/Math/LOG2E +tags: + - JavaScript + - Math + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LOG2E +--- +
+ {{JSRef("Objetos_globales", "Math")}}
+

Resumen

+

El base 2 del logaritmo natural de E (aproximadamente 1.442).

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

Descripción

+

Porque LOG2E es una propiedad estática de Math, siempre usted lo usa como Math.LOG2E, en lugar de una propedad de un objecto de Math usted creó.

+

Ejemplos

+

Ejemplo: Usar Math.LOG2E

+

La función siguiente devuelve el base 2 del logaritmo natural del E:

+
function getLog2e() {
+   return Math.LOG2E
+}
+

Ven También

+ diff --git a/files/es/web/javascript/reference/global_objects/math/max/index.html b/files/es/web/javascript/reference/global_objects/math/max/index.html new file mode 100644 index 0000000000..0e0f82881c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/max/index.html @@ -0,0 +1,145 @@ +--- +title: Math.max() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/max +tags: + - JavaScript + - Math + - Método(2) + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Math/max +--- +
{{JSRef("Global_Objects", "Math")}}
+ +

Resumen

+ +

La función Math.max() devuelve el mayor de cero o más números.

+ +

Sintaxis

+ +
Math.max([valor1[, valor2[, ...]]])
+ +

Parámetros

+ +
+
valor1, valor2, ...
+
Números.
+
+ +

Descripción

+ +

Ya que max() es un método estático de Math, siempre debe usarse como Math.max(), en lugar de un método de un objeto Math instanciado (Math no es un constructor).

+ +

Si no se proporcionan argumentos, el resultado es -{{jsxref("Global_Objects/Infinity", "Infinity")}}.

+ +

Si al menos uno de los argumentos no puede ser convertido a número, el resultado es {{jsxref("Global_Objects/NaN", "NaN")}}.

+ +

Ejemplos

+ +

Ejemplo: Usando Math.max()

+ +
Math.max(10, 20);   //  20
+Math.max(-10, -20); // -10
+Math.max(-10, 20);  //  20
+
+ +

La siguiente función usa {{jsxref("Function.prototype.apply()")}} para encontrar el elemento mayor en un array numérico. getMaxOfArray([1, 2, 3]) es equivalente a Math.max(1, 2, 3), pero se puede usar getMaxOfArray() sobre arreglos construidos programáticamente de cualquier tamaño.

+ +
function getMaxOfArray(numArray) {
+  return Math.max.apply(null, numArray);
+}
+
+ +

O con el nuevo {{jsxref("Operadores/Spread_operator", "spread operator")}}, obtener el máximo de un arreglo se vuelve mucho más fácil.

+ +
var arr = [1, 2, 3];
+var max = Math.max(...arr);
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
ECMAScript 1ra Edición.EstandarDefinición inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.11', 'Math.max')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.max', 'Math.max')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.max', 'Math.max')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Móvil (Gecko)IE MóvilOpera MóvilSafari Móvil
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver además

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/min/index.html b/files/es/web/javascript/reference/global_objects/math/min/index.html new file mode 100644 index 0000000000..a2dbf8348a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/min/index.html @@ -0,0 +1,150 @@ +--- +title: Math.min() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/min +tags: + - JavaScript + - Math + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Math/min +--- +
{{JSRef}}
+ +

La función Math.min() devuelve el menor de cero o más números.

+ +

Sintaxis

+ +
Math.min([valor1[, valor2[, ...]]])
+ +

Parámetros

+ +
+
valor1, valor2, ...
+
Números.
+
+ +

Descripción

+ +

Ya que min() es un método estático de Math, siempre debe usarse como Math.min(), en lugar de como un método de un objeto Math instanciado (Math no es un constructor).

+ +

Si no se proporcionan argumentos, el resultado es {{jsxref("Infinity")}}.

+ +

Si al menos uno de los argumentos no puede ser convertido a número, el resultado es {{jsxref("NaN")}}.

+ +

Ejemplos

+ +

Usando Math.min()

+ +

Lo siguiente encuentra el mínimo de x e y y lo asigna a z:

+ +
var x = 10, y = -20;
+var z = Math.min(x, y);
+
+ +

Recortando un valor con Math.min()

+ +

Math.min() es a menudo usado para recortar un valor de tal manera que siempre sea menor o igual a un límite. Este ejemplo

+ +
var x = f(foo);
+
+if (x > limite) {
+  x = limite;
+}
+
+ +

puede ser escrito de la siguiente manera

+ +
var x = Math.min(f(foo), limite);
+
+ +

{{jsxref("Math.max()")}} puede ser usado en una forma similar para recortar un valor en el otro extremo.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementada en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.12', 'Math.min')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.min', 'Math.min')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.min', 'Math.min')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Móvil (Gecko)IE MóvilOpera MóvilSafari Móvil
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver además

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/pi/index.html b/files/es/web/javascript/reference/global_objects/math/pi/index.html new file mode 100644 index 0000000000..d4428498cd --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/pi/index.html @@ -0,0 +1,126 @@ +--- +title: Math.PI +slug: Web/JavaScript/Referencia/Objetos_globales/Math/PI +tags: + - JavaScript + - Math + - Propiedad + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Math/PI +--- +
{{JSRef}}
+ +
La propiedad Math.PI representa la relacion entre la longitud de la circunferencia de un circulo y su diametro, la cual es aproximadamente 3.14159.
+ +

Math.PI=π3.14159\mathtt{\mi{Math.PI}} = \pi \approx 3.14159

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

Descripción

+ +

Debido a que PI es una propiedad estatica del modulo Math, siempre debes de utilizarla como Math.PI, en lugar de una propiedad de un objeto Math que tu hayas creado ( Math no es un constructor ).

+ +

Ejemplos

+ +

Utilizando Math.PI

+ +

La siguiente función utiliza Math.PI para calcular la longitud de la circunferencia de un circulo mediante el radio del circulo proporcionado como parametro.

+ +
function calculaCircunferencia(radio) {
+  return 2 * Math.PI * radio;
+}
+
+calculaCircunferencia(1);  // 6.283185307179586
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES1')}}{{Spec2('ES1')}} +

Definición inicial. Implementado en JavaScript 1.0.

+
{{SpecName('ES5.1', '#sec-15.8.1.6', 'Math.PI')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.pi', 'Math.PI')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.pi', 'Math.PI')}}{{Spec2('ESDraft')}} 
+ + + +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Basico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Basico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver tambien

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/pow/index.html b/files/es/web/javascript/reference/global_objects/math/pow/index.html new file mode 100644 index 0000000000..7185cffede --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/pow/index.html @@ -0,0 +1,140 @@ +--- +title: Math.pow() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/pow +translation_of: Web/JavaScript/Reference/Global_Objects/Math/pow +--- +
{{JSRef("Global_Objects", "Math")}}
+ +

Resumen

+ +

La función  Math.pow() devuelve la  base elevada al exponente , esto es, baseexponente.

+ +

Sintaxis

+ +
Math.pow(base, exponente)
+ +

Parametros

+ +
+
base
+
El número base.
+
exponente
+
El exponente utilizado para elevar la base.
+
+ +

Descripción

+ +

La función Math.pow() retorna la base elevada al exponente, es decir, baseexponente. La base y el exponente estan en el sistema numérico decimal.

+ +

Puesto que pow() es un método estático de Math, siempre se utiliza como Math.pow(). Si la base es negativa y el exponente no es un número entero, el resultado será NaN.

+ +

Ejemplos

+ +

Ejemplo: Usando Math.pow()

+ +
// simple
+Math.pow(7, 2);    // 49
+Math.pow(7, 3);    // 343
+Math.pow(2, 10);   // 1024
+// exponentes fraccionales
+Math.pow(4, 0.5);  // 2 (raíz cuadrada de 4)
+Math.pow(8, 1/3);  // 2 (raíz cúbica de 8)
+Math.pow(2, 0.5);  // 1.412135623730951 (raíz cuadrada de 2)
+Math.pow(2, 1/3);  // 1.2599210498948732 (raíz cúbica de 2)
+// exponentes con signo
+Math.pow(7, -2);   // 0.02040816326530612 (1/49)
+Math.pow(8, -1/3); // 0.5
+// bases con signo
+Math.pow(-7, 2);   // 49 (los cuadrados son positivos)
+Math.pow(-7, 3);   // -343 (El cubo de una base negativa puede ser negativo)
+Math.pow(-7, 0.5); // NaN (Los números negativos no tienen raíz cuadrada real)
+Math.pow(-7, 1/3); // NaN
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
ECMAScript 1st Edition.EstándarDefinición inicial implementada en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.13', 'Math.pow')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.pow', 'Math.pow')}}{{Spec2('ES6')}}
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/random/index.html b/files/es/web/javascript/reference/global_objects/math/random/index.html new file mode 100644 index 0000000000..ace95bc0cf --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/random/index.html @@ -0,0 +1,132 @@ +--- +title: Math.random() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/random +tags: + - JavaScript + - Math + - Números Aleatorios + - Random + - Referências +translation_of: Web/JavaScript/Reference/Global_Objects/Math/random +--- +
{{JSRef("Global_Objects", "Math")}}
+ +

Sumario

+ +

La función Math.random() retorna un punto flotante, un número pseudo-aleatorio dentro del rango [0, 1). Esto es, desde el 0 (Incluido) hasta el 1 pero sin incluirlo (excluido), el cual se puede escalar hasta el rango deseado. La implementación selecciona la semilla inicial hasta el algoritmo que genera el número aleatorio; este no puede ser elegido o cambiado por el usuario.

+ +
+

Nota: Math.random() NO provee números aleatorios con seguridad criptográfica. No deben ser usados para algo relacionado con seguridad. En vez de eso, usar la API Web Crypto, y más precisamente el método: {{domxref("RandomSource.getRandomValues()", "window.crypto.getRandomValues()")}}.

+
+ +

Sintaxis

+ +
Math.random()
+ +

Parámetros

+ +

Ninguno.

+ +

Ejemplos

+ +

Ejemplo: Usando Math.random()

+ +

Notar que, como los números en Javascript son números de punto flotante IEEE 754 con redondeo-al-par-más-cercano, los rangos generados por las funciones de abajo (excluyendo a Math.random() en sí misma) no son exactos. Si se eligen límites extremadamente grandes (253 o más), es posible, en casos extremadamente raros, calcular el generalmente-excluído límite superior.

+ +
// Retorna un número aleatorio entre 0 (incluido) y 1 (excluido)
+function getRandom() {
+  return Math.random();
+}
+
+ +
// Retorna un número aleatorio entre min (incluido) y max (excluido)
+function getRandomArbitrary(min, max) {
+  return Math.random() * (max - min) + min;
+}
+
+ +
// Retorna un entero aleatorio entre min (incluido) y max (excluido)
+// ¡Usando Math.round() te dará una distribución no-uniforme!
+function getRandomInt(min, max) {
+  return Math.floor(Math.random() * (max - min)) + min;
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
ECMAScript 1a Edición.{{Spec2('ES1')}}Definición inicial. JavaScript 1.0 (Sólo UNIX) / JavaScript 1.1 (Todas las plataformas).
{{SpecName('ES5.1', '#sec-15.8.2.14', 'Math.random')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.random', 'Math.random')}}{{Spec2('ES6')}} 
+ +

Compatibilidad en navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
diff --git a/files/es/web/javascript/reference/global_objects/math/round/index.html b/files/es/web/javascript/reference/global_objects/math/round/index.html new file mode 100644 index 0000000000..0257148e69 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/round/index.html @@ -0,0 +1,218 @@ +--- +title: Math.round() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/round +translation_of: Web/JavaScript/Reference/Global_Objects/Math/round +--- +
{{JSRef}}
+ +
La función Math.round() retorna el valor de un número redondeado al entero más cercano.
+ +

Sumario

+ +

Devuelve el valor del número dado redondeado al entero más cercano.

+ +

Sintaxis

+ +
Math.round(x)
+ +

Parámetros

+ +
+
Un número.
+
+ +

Valor de Retorno

+ +
+
El valor del número dado redondeado al entero más cercano.
+
+ +

Descripción

+ +

Si la porción fraccionaría del número es 0.5 o mayor, el argumento es redondeado al siguiente número entero superior. Si la porción de la fracción del número es menor a 0.5, el argumento es redondeado al siguiente número entero inferior.

+ +

Debido a que round() es un método estático de Math, siempre se debe utilizar como  Math.round(),  en vez de un método del objeto Math que ha creado. (Math no es un constructor)

+ +

Ejemplos

+ +

Usando Math.round()

+ +
// Retorna el valor 20
+x = Math.round(20.49);
+
+// Retorna el valor 21
+x = Math.round(20.5);
+
+// Retorna el valor -20
+x = Math.round(-20.5);
+
+// Retorna el valor -21
+x = Math.round(-20.51);
+
+// Retorna el valor 1 (!)
+// Note el error de redondeo debido a la inexactitud del punto aritmético.
+// Compare esto con Math.round10(1.005, -2) de el ejemplo de abajo.
+x = Math.round(1.005*100)/100;
+
+ +

Redondeo decimal

+ +
// Conclusión
+(function() {
+  /**
+   * Ajuste decimal de un número.
+   *
+   * @param {String}  tipo  El tipo de ajuste.
+   * @param {Number}  valor El numero.
+   * @param {Integer} exp   El exponente (el logaritmo 10 del ajuste base).
+   * @returns {Number} El valor ajustado.
+   */
+  function decimalAdjust(type, value, exp) {
+    // Si el exp no está definido o es cero...
+    if (typeof exp === 'undefined' || +exp === 0) {
+      return Math[type](value);
+    }
+    value = +value;
+    exp = +exp;
+    // Si el valor no es un número o el exp no es un entero...
+    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
+Math.round10(1.005, -2);   // 1.01 -- compare this with Math.round(1.005*100)/100 above
+// 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
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}} +

Definición inicial. Implementada en JavaScript 1.0.

+
{{SpecName('ES5.1', '#sec-15.8.2.15', 'Math.round')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.round', 'Math.round')}}{{Spec2('ES6')}}
+ +

Compatibilidad en navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/sign/index.html b/files/es/web/javascript/reference/global_objects/math/sign/index.html new file mode 100644 index 0000000000..3c48027556 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/sign/index.html @@ -0,0 +1,151 @@ +--- +title: Math.sign() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/sign +tags: + - JavaScript + - Math + - Method + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sign +--- +
{{JSRef}}
+ +

La función Math.sign() retorna el signo de un número, indicando si el número es positivo, negativo o cero.

+ +

Syntaxis

+ +
Math.sign(x)
+ +

Parametros

+ +
+
x
+
Un número.
+
+ +

Valor de retorno.

+ +

Un número representando el signo del argumento dado. Si el argumento es un número positivo, negativo, cero positivo, o cero negativo, la función retornará 1, -1, 0 or -0 respectivamente. De lo contrario, retorna {{jsxref("NaN")}}.

+ +

Descripción

+ +

Como sign() es un método estático de Math, siempre se utiliza como Math.sign(), en vez de un método de un objeto Math que hayas creado. (Math no es un constructor).

+ +

Esta función tiene 5 tipos de valores de retorno, 1, -1, 0, -0, NaN, que representan "número positivo", "número negativo", "cero positivo", "cero negativo" y {{jsxref("NaN")}} respectivamente.

+ +

El argumento pasado a esta función será convertido a tipo x implicitamente.

+ +

Ejemplos

+ +

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

Polyfill

+ +
if (!Math.sign) {
+  Math.sign = function(x) {
+    // Si x es NaN, el resultado es NaN.
+    // Si x es -0, el resultado es -0.
+    // Si x es +0, el resultado es +0.
+    // Si x es negativo y no -0, el resultado es -1.
+    // Si x es positivo y no +0, el resultado es +1.
+    x = +x; // convertir a número
+    if (x === 0 || isNaN(x)) {
+      return Number(x);
+    }
+    return x > 0 ? 1 : -1;
+  };
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-math.sign', 'Math.sign')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-math.sign', 'Math.sign')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
PropiedadChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("38")}}{{CompatGeckoDesktop("25")}}{{CompatNo}}{{CompatOpera("25")}}{{CompatSafari("9")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
PropiedadAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatNo}}{{CompatNo}}{{CompatGeckoMobile("25")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

Ver También

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/sin/index.html b/files/es/web/javascript/reference/global_objects/math/sin/index.html new file mode 100644 index 0000000000..a89a6e635e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/sin/index.html @@ -0,0 +1,126 @@ +--- +title: Math.sin() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/seno +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sin +--- +
{{JSRef("Global_Objects", "Math")}}
+ +

Resumen

+ +

La función Math.sin() devuelve el seno de un número.

+ +

Sintaxis

+ +
Math.sin(x)
+ +

Parámetros

+ +
+
x
+
Un número (en radianes).
+
+ +

Descripción

+ +

El método Math.sin() devuelve  un valor numérico entre -1 y 1, que representa el seno del ángulo dado en radianes.
+ Debido a que sin() es un método estático de Math, siempre se usa como Math.sin(), en vez de  crear un objeto Math y usarlo como un método (Math no es un constructor).

+ +

Ejemplos

+ +

Ejemplo: Usando Math.sin()

+ +
Math.sin(0);           // 0
+Math.sin(1);           // 0.8414709848078965
+
+Math.sin(Math.PI / 2); // 1
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificacionesEstatusComentarios
ECMAScript 1ª Edición.{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.16', 'Math.sin')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sin', 'Math.sin')}}{{Spec2('ES6')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/sqrt/index.html b/files/es/web/javascript/reference/global_objects/math/sqrt/index.html new file mode 100644 index 0000000000..a3977c6f08 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/sqrt/index.html @@ -0,0 +1,134 @@ +--- +title: Math.sqrt() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/sqrt +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sqrt +--- +
{{JSRef}}
+ +

La  función Math.sqrt() retorna la raíz cuadrada de un número, que esx0,Math.sqrt(x)=x=the uniquey0such thaty2=x\forall x \geq 0, \mathtt{Math.sqrt(x)} = \sqrt{x} = \text{the unique} \; y \geq 0 \; \text{such that} \; y^2 = x

+ +

Sintaxis

+ +
Math.sqrt(x)
+ +

Parámetros

+ +
+
x
+
Un numero
+
+ +

Valor de Retorno

+ +

La raíz cuadrada del número proporcionado. Si los números son negativos, {{jsxref("NaN")}} es devuelto.

+ +

Descripción

+ +

Si el valor de x es negativo Math.sqrt() retorna {{jsxref("NaN")}}.

+ +

Debido a que sqrt() es un método estático de Math, siempre úsalo como Math.sqrt(), en lugar de un método del objeto Math que hayas creado (Math no es un constructor).

+ +

Ejemplos

+ +

Usando Math.sqrt()

+ +
Math.sqrt(9); // 3
+Math.sqrt(2); // 1.414213562373095
+
+Math.sqrt(1);  // 1
+Math.sqrt(0);  // 0
+Math.sqrt(-1); // NaN
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementada en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.17', 'Math.sqrt')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sqrt', 'Math.sqrt')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sqrt', 'Math.sqrt')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/sqrt1_2/index.html b/files/es/web/javascript/reference/global_objects/math/sqrt1_2/index.html new file mode 100644 index 0000000000..de9bd99eb9 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/sqrt1_2/index.html @@ -0,0 +1,123 @@ +--- +title: Math.SQRT1_2 +slug: Web/JavaScript/Referencia/Objetos_globales/Math/SQRT1_2 +tags: + - JavaScript + - Math + - Propiedad + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2 +--- +
{{JSRef}}
+ +
La propiedad Math.SQRT1_2 representa la raiz cuadrada de 1/2, la cual es equivalente al inverso de la raiz cuadrada de 2, aproximadadamente 0.707:
+ +

Math.SQRT1_2=12=120.707\mathtt{\mi{Math.SQRT1_2}} = \sqrt{\frac{1}{2}} = \frac{1}{\sqrt{2}} \approx 0.707

+ +

Descripción

+ +

Debido a que SQRT1_2 es una propiedad estatica de Math, siempre debes utilizarla como Math.SQRT1_2, en lugar de invocarla como una propiedad de alguna instancia de Math que hayas creado ( Math no es un constructor ).

+ +

Ejemplos

+ +

Utilizando Math.SQRT1_2

+ +

La siguiente funcion regresa la raiz cuadrada de 1/2:

+ +
function getRoot1_2() {
+  return Math.SQRT1_2;
+}
+
+getRoot1_2(); // 0.7071067811865476
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentarios
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en Javascript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.7', 'Math.SQRT1_2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sqrt1_2', 'Math.SQRT1_2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sqrt1_2', 'Math.SQRT1_2')}}{{Spec2('ESDraft')}} 
+ + + +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte basico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte basico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver Tambien

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/sqrt2/index.html b/files/es/web/javascript/reference/global_objects/math/sqrt2/index.html new file mode 100644 index 0000000000..7e23295f25 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/sqrt2/index.html @@ -0,0 +1,124 @@ +--- +title: Math.SQRT2 +slug: Web/JavaScript/Referencia/Objetos_globales/Math/SQRT2 +translation_of: Web/JavaScript/Reference/Global_Objects/Math/SQRT2 +--- +
{{JSRef}}
+ +
La propiedad Math.SQRT2 representa la raíz cuadrada de de 2, aproximadamente 1.414:
+ +

Math.SQRT2=21.414\mathtt{\mi{Math.SQRT2}} = \sqrt{2} \approx 1.414

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

Descripción

+ +

Debido a que SQRT2 es una propiedad estática de Math, siempre se utiliza como Math.SQRT2, en lugar de una propiedad de un objeto Math creado.

+ +

Ejemplos

+ +

Utilizando Math.SQRT2

+ +

La siguiente función retorna la raíz cuadrada de 2:

+ +
function getRoot2() {
+  return Math.SQRT2;
+}
+
+getRoot2(); // 1.4142135623730951
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES1')}}{{Spec2('ES1')}} +

Definición inicial. Implementada en JavaScript 1.0.

+
{{SpecName('ES5.1', '#sec-15.8.1.8', 'Math.SQRT2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sqrt2', 'Math.SQRT2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sqrt2', 'Math.SQRT2')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

 

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/tan/index.html b/files/es/web/javascript/reference/global_objects/math/tan/index.html new file mode 100644 index 0000000000..8a773b0da5 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/tan/index.html @@ -0,0 +1,82 @@ +--- +title: Math.tan() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/tan +tags: + - Matemáticas + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Math/tan +--- +
{{JSRef}}
+ +

La función Math.tan() retorna la tangente de un número.

+ +
{{EmbedInteractiveExample("pages/js/math-tan.html")}}
+ + + +

Sintaxis

+ +
Math.tan(x)
+ +

Parámetros

+ +
+
x
+
Un número que representa un ángulo en radianes.
+
+ +

Valor de retorno

+ +

La tangente del número proporcionado.

+ +

Descripción

+ +

El método Math.tan() retorna un valor numérico que representa la tangente de un ángulo.

+ +

Dado que tan() es un método estático de Math, siempre debes usarlo como Math.tan(), y no como un método de un objeto Math que hayas creado (Math no es un constructor).

+ +

Ejemplos

+ +

Usando Math.tan()

+ +
Math.tan(1); // 1.5574077246549023
+
+ +

Ya que la función Math.tan() acepta radianes, pero es más fácil trabajar con grados, la siguiente función acepta un valor en grados, lo convierte a radianes, y retorna la tangente de dicho valor.

+ +
function getTanDeg(deg) {
+  var rad = deg * Math.PI/180;
+  return Math.tan(rad);
+}
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-math.tan', 'Math.tan')}}
+ +

Compatibilidad con el navegador

+ + + +

{{Compat("javascript.builtins.Math.tan")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/tanh/index.html b/files/es/web/javascript/reference/global_objects/math/tanh/index.html new file mode 100644 index 0000000000..138c466b37 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/tanh/index.html @@ -0,0 +1,95 @@ +--- +title: Math.tanh() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/tanh +tags: + - ECMAScript 2015 + - JavaScript + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Math/tanh +--- +
{{JSRef}}
+ +

La funcion Math.tanh() devuelve la hyperbolica tangente de un numero, esto es 

+ +

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

Sintaxis

+ +
Math.tanh(x)
+ +

Parametros

+ +
+
x
+
Un numero.
+
+ +

Devolver valor

+ +

La hyperbolica tangente del numero obtenido.

+ +

Descripcion

+ +

Porque tanh() es un metodo estatico de Math, siempre se usa como Math.tanh(), en lugar de ser un metodo de Math objeto que creas (Math no es un constructor).

+ +

Ejemplos

+ +

Usando Math.tanh()

+ +
Math.tanh(0);        // 0
+Math.tanh(Infinity); // 1
+Math.tanh(1);        // 0.7615941559557649
+
+ +

Polyfill

+ +

Esto puede ser emulado con ayuda de {{jsxref("Math.exp()")}} funcion:

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

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificacionEstadoComentario
{{SpecName('ES2015', '#sec-math.tanh', 'Math.tanh')}}{{Spec2('ES2015')}} +

Definicion inicial.

+
{{SpecName('ESDraft', '#sec-math.tanh', 'Math.tanh')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.Math.tanh")}}

+ +

 

+ + diff --git a/files/es/web/javascript/reference/global_objects/math/trunc/index.html b/files/es/web/javascript/reference/global_objects/math/trunc/index.html new file mode 100644 index 0000000000..9efe511927 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/math/trunc/index.html @@ -0,0 +1,144 @@ +--- +title: Math.trunc() +slug: Web/JavaScript/Referencia/Objetos_globales/Math/trunc +tags: + - ECMAScript6 + - JavaScript + - Math + - Método(2) + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Math/trunc +--- +
{{JSRef}}
+ +

La función Math.trunc() devuelve la parte entera de un numero removiendo cualquier dígito decimal (dígitos situados después de la coma).

+ +

Sintaxis.

+ +
Math.trunc(x)
+ +

Parámetros.

+ +
+
x
+
Un número.
+
+ +

Valor de retorno.

+ +

La parte entera del número dado.

+ +

Descripción.

+ +

A diferencia de los otros tres métodos de Math: {{jsxref("Math.floor()")}}, {{jsxref("Math.ceil()")}} y {{jsxref("Math.round()")}}, la forma en que Math.trunc() funciona es muy simple.  trunca (corta) el punto y los dígitos a la derecha de él, sin importar si el argumento es un número positivo o negativo.

+ +

Si el argumento es un número positivo, Math.trunc() es equivalente a Math.floor(); de otra forma Math.trunc() es equivalente a Math.ceil().

+ +

El argumento pasado a este método será convertido a un tipo numérico entero.

+ +

Debido a que trunc() es un método estático de Math, siempre úsalo como Math.trunc(), en lugar de como un método de un objeto Math que hayas creado (Math no es un constructor).

+ +

Ejemplos.

+ +

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

Polyfill.

+ +
Math.trunc = Math.trunc || function (x) {
+    return (x < 0 ? Math.ceil(x) : Math.floor(x));
+}
+
+ +

Especificaciones.

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-math.trunc', 'Math.trunc')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-math.trunc', 'Math.trunc')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores.

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("38")}}{{CompatGeckoDesktop("25")}}{{CompatNo}}{{CompatOpera("25")}}{{CompatSafari("7.1")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Básico{{CompatNo}}{{CompatNo}}{{CompatGeckoMobile("25")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Vea también.

+ + diff --git a/files/es/web/javascript/reference/global_objects/nan/index.html b/files/es/web/javascript/reference/global_objects/nan/index.html new file mode 100644 index 0000000000..f107f1bb3c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/nan/index.html @@ -0,0 +1,46 @@ +--- +title: NaN +slug: Web/JavaScript/Referencia/Objetos_globales/NaN +tags: + - JavaScript + - Propiedad + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/NaN +--- +
{{jsSidebar("Objects")}}
+ +
+

La propiedad global NaN es un valor que representa Not-A-Number.

+
+ +

Sumario

+ +

Un valor representando un Not-A-Number (No es Un Número).

+ +

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

+ +

Sintaxis

+ +

NaN

+ +

Descripción

+ +

NaN es una propiedad del global object (objeto global), por ejemplo, es una variable de alcance global.

+ +

El valor inicial de NaN es Not-A-Number (No es Un Número) - lo mismo que el valor de {{jsxref("Number.NaN")}}.

+ +

Keep text below in sync with Number.NaN page NaN nunca es equivalente con cualquier otro número, incluido el mismo NaN; no puedes chequear el valor de un not-a-number comparándolo con Number.NaN. Usar la función {{jsxref("isNaN()")}} para aquello.

+ +

Muchos métodos de JavaScript (como son el {{jsxref("Number")}} constructor, {{jsxref("parseFloat")}} y {{jsxref("parseInt")}}) retornan NaN si el valor especificado en el parámetro no puede ser parseado como un número.

+ +

Puedes utilizar la propiedad NaN para indicar una condición de error para tu función que devuelva un número en caso de éxito.

+ +

JavaScript imprime el valor Number.NaN como NaN.

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/null/index.html b/files/es/web/javascript/reference/global_objects/null/index.html new file mode 100644 index 0000000000..94d1a392c5 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/null/index.html @@ -0,0 +1,129 @@ +--- +title: 'null' +slug: Web/JavaScript/Referencia/Objetos_globales/null +tags: + - JavaScript + - Literal + - Primitivo +translation_of: Web/JavaScript/Reference/Global_Objects/null +--- +
{{jsSidebar("Objects")}}
+ +

Resumen

+ +

El valor null es un literal de Javascript que representa intencionalmente un valor nulo o "vacío". Es uno de los {{Glossary("Primitive", "valores primitivos")}} de Javascript.

+ +
{{EmbedInteractiveExample("pages/js/globalprops-null.html")}}
+ + + +

Sintaxis

+ +
null 
+ +

Descripción

+ +

El valor null es un literal (no una propiedad del objeto global como podría ser {{jsxref("undefined", "undefined")}}). En APIs, se devuelve null normalmente dónde se espera un objeto pero éste no es relevante. Al comparar con null o  {{jsxref("undefined", "undefined")}} hay que tener en cuenta las diferencias entre los operadores de igualdad (==) e identidad (===) (con el primero se realiza una conversión de tipo).

+ +
// foo no existe, no está definido y nunca ha sido inicializado:
+> foo
+"ReferenceError: foo is not defined"
+
+// foo existe, pero no tiene tipo ni valor:
+> var foo = null; foo
+"null"
+
+ +

Diferencias entre nullundefined

+ +
typeof null        // object (bug en ECMAScript, debería ser null)
+typeof undefined   // undefined
+null === undefined // false
+null  == undefined // true
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
ECMAScript 1st Edition.StandardDefinición inicial.
{{SpecName('ES5.1', '#sec-4.3.11', 'null value')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-null-value', 'null value')}}{{Spec2('ES6')}}
+ +

Compatibilidad con navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/index.html b/files/es/web/javascript/reference/global_objects/number/index.html new file mode 100644 index 0000000000..72c1425b8b --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/index.html @@ -0,0 +1,181 @@ +--- +title: Number +slug: Web/JavaScript/Referencia/Objetos_globales/Number +tags: + - JavaScript + - Number + - Referencia + - Referência(2) +translation_of: Web/JavaScript/Reference/Global_Objects/Number +--- +
{{JSRef}}
+ +

Number es un objeto primitivo envolvente que permite representar y manipular valores numéricos cómo 37 o -9.25. El constructor Number contiene constantes y métodos para trabajar con números. Valores de otro tipo pueden ser convertidos a números usando la función Number().

+ +

Sintaxis

+ +
new Number(value);
+var a = new Number('123'); // a === 123 es false
+var b = Number('123'); // b === 123 es true
+a instanceof Number; // es true
+b instanceof Number; // es false
+ +

Parámetros

+ +
+
valor
+
El valor numérico de un objeto que está siendo creado.
+
+ +

Descripción

+ +

Los principales usos del objeto Number(valor) son convertir un string u otro valor a uno de tipo numérico; si el argumento no puede ser convertido a un número, devuelve {{jsxref("NaN")}}.

+ +

Literal syntax

+ +
123    // one-hundred twenty-three
+123.0  // same
+123 === 123.0  // true
+ +

Function syntax

+ +
Number('123')  // retorna el número 123
+Number('123') === 123  // retorna true
+
+Number("unicorn")  // NaN
+Number(undefined)  // NaN
+ +

Constructor

+ +
+
Number()
+
Crea un nuevo valor Numérico ( Number value).
+
+ +

Propiedades

+ +
+
{{jsxref("Number.EPSILON")}}
+
El intervalo más pequeño entre dos números representables
+
{{jsxref("Number.MAX_SAFE_INTEGER")}}
+
El número máximo representable en JavaScript (253 - 1).
+
{{jsxref("Number.MAX_VALUE")}}
+
El número más grande representable.
+
{{jsxref("Number.MIN_SAFE_INTEGER")}}
+
El número mínimo representable en JavaScript (-(253 - 1)).
+
{{jsxref("Number.MIN_VALUE")}}
+
El número más pequeño representable - que es el número positivo más cercano a cero (sin llegar a ser cero)-.
+
{{jsxref("Number.NaN")}}
+
Valor especial "no es número" NaN.
+
{{jsxref("Number.NEGATIVE_INFINITY")}}
+
Valor especial para representar infinitos negativos; retorno de un desborde de pila overflow.
+
{{jsxref("Number.POSITIVE_INFINITY")}}
+
Valor especial para representar infinitos positivos; retorno de un desborde de pila overflow.
+
{{jsxref("Number.prototype")}}
+
Permite la adición de propiedades a un objeto Number.
+
+ +

Métodos

+ +
+
{{jsxref("Number.isNaN()")}}
+
Determina si el valor es NaN.
+
{{jsxref("Number.isFinite()")}}
+
Determina si el valor es un numero infinito.
+
{{jsxref("Number.isInteger()")}}
+
Determina si un numero es entero.
+
{{jsxref("Number.isSafeInteger()")}}
+
Determine si el valor pasado es un entero seguro (número entre -(253 - 1)253 - 1).
+
{{jsxref("Number.toInteger()")}} {{obsolete_inline}}
+
Se usa para evaluar el valor pasado y convertirlo en un entero (or {{jsxref("Global_Objects/Infinity", "Infinity")}}), pero ha sido eliminado.
+
{{jsxref("Number.parseFloat()")}}
+
El valor es el mismo que {{jsxref ("parseFloat", "parseFloat ()")}} del objeto global.
+
{{jsxref("Number.parseInt()")}}
+
El valor es el mismo que {{jsxref("parseInt", "parseInt()")}} del objeto global.
+
+ +

Instancias Number

+ +

Todas las instancias Number heredan de {{jsxref("Number.prototype")}}. El objeto prototipo del constructor de Number puede modificarse para aceptar a todas las instancias de Number.

+ +

Métodos

+ +
+
{{jsxref("Number.prototype.toExponential()" ,"Number.prototype.toExponential(fractionDigits)")}}
+
Devuelve una cadena que representa el número en notación exponencial.
+
+ +
+
{{jsxref("Number.prototype.toFixed()", "Number.prototype.toFixed(digits)")}}
+
Devuelve una cadena que representa el número en notación de punto fijo.
+
{{jsxref("Number.prototype.toLocaleString()", "Number.prototype.toLocaleString([locales [, options]])")}}
+
Devuelve una cadena con una representación sensible al idioma de este número. Invalida el método {{jsxref ("Object.prototype.toLocaleString ()")}}.
+
+ +

Ejemplos

+ +

Ejemplo: Utilizando el objeto Number para asignar valores a variables numéricas

+ +

El siguiente ejemplo utiliza las propiedades del objeto Number para asignar valores a varias variables numéricas:

+ +
const MásgrandeNum    = Number.MAX_VALUE;
+const MáspequeNum     = Number.MIN_VALUE;
+const infinitoNum     = Number.POSITIVE_INFINITY;
+const notInfinitoNum  = Number.NEGATIVE_INFINITY;
+const noEsNum         = Number.NaN;
+
+ +

Intervalo de enteros para Number

+ +

El siguiente ejemplo muestra los valores máximos y minimos que pueden ser representados mediante el objeto Number: 

+ +

Cuando se analizan datos que se han serializado en JSON, se puede esperar que los valores enteros que se encuentran fuera de este rango se corrompan cuando el analizador JSON los coacciona al tipo Number.

+ +

Una posible solución es usar {{jsxref ("String")}} en su lugar.

+ +

Los números más grandes se pueden representar usando el tipo {{jsxref ("BigInt")}}.

+ +
const biggestInt  = Number.MAX_SAFE_INTEGER  //  (253 - 1) =>  9007199254740991
+const smallestInt = Number.MIN_SAFE_INTEGER  // -(253 - 1) => -9007199254740991
+ +

Ejemplo: Utilizando el objeto Number para modificar todos los objetos Number

+ +

El siguiente ejemplo crea un objeto Number, miNúmero, luego añade la propiedad descripción a todos los objetos Number. Luego el valor es asignado a la propiedad descripción del objeto miNúmero.

+ +
miNúmero = new Number(65);
+Number.prototype.descripción = null;
+miNúmero.descripción = "velocidad del viento";
+
+ +

Utilizando el objecto Number para transformar un objeto Date 

+ +

El siguiente ejemplo convierte el objeto {{jsxref ("Date")}} a un valor numérico usando Number  como función:

+ +
var d = new Date('December 17, 1995 03:24:00');
+console.log(Number(d));
+ +

Esto muestra "819199440000".

+ +

Convierte cadenas numéricas a números

+ +
Number('123')     // 123
+Number('12.3')    // 12.3
+Number('123e-1')  // 12.3
+Number('')        // 0
+Number('0x11')    // 17
+Number('0b11')    // 3
+Number('0o11')    // 9
+Number('foo')     // NaN
+Number('100a')    // NaN
+ +
Number('-Infinity') //-Infinity
+ + + +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/isfinite/index.html b/files/es/web/javascript/reference/global_objects/number/isfinite/index.html new file mode 100644 index 0000000000..f26af9f671 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/isfinite/index.html @@ -0,0 +1,88 @@ +--- +title: Number.isFinite() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/isFinite +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isFinite +--- +
{{JSRef}}
+ +

El método Number.isFinite() determina si el valor pasado es un número finito.

+ +
{{EmbedInteractiveExample("pages/js/number-isfinite.html")}}
+ + + +

Syntax

+ +
Number.isFinite(valor)
+ +

Parameters

+ +
+
valor
+
El valor cuya finitud será probada.
+
+ +

Return value

+ +

Un {{jsxref("Boolean")}} indicando si el valor dado es finito o no.

+ +

Description

+ +

En comparación con la funcion global {{jsxref("isFinite", "isFinite()")}} , este método no convierte el parámetro forzádamente a un número. Esto significa que solo valores de tipo númerico, que también son finitos, retornan true.

+ +

Ejemplos

+ +
Number.isFinite(Infinity);  // false
+Number.isFinite(NaN);       // false
+Number.isFinite(-Infinity); // false
+
+Number.isFinite(0);         // true
+Number.isFinite(2e64);      // true
+
+Number.isFinite('0');       // false, retornaría true con la función
+                            // global isFinite('0')
+Number.isFinite(null);      // false, retornaría true con la función
+                            // global isFinite(null)
+
+ +

Polyfill

+ +
Number.isFinite = Number.isFinite || function(value) {
+    return typeof value === 'number' && isFinite(value);
+}
+
+ +

Specificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-number.isfinite', 'Number.isInteger')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-number.isfinite', 'Number.isInteger')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegador

+ + + +

{{Compat("javascript.builtins.Number.isFinite")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/isinteger/index.html b/files/es/web/javascript/reference/global_objects/number/isinteger/index.html new file mode 100644 index 0000000000..6fdafca32e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/isinteger/index.html @@ -0,0 +1,94 @@ +--- +title: Number.isInteger() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/isInteger +tags: + - JavaScript + - Number + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isInteger +--- +
{{JSRef}}
+ +

El método Number.isInteger() determina si el valor pasado es de tipo entero.

+ +
{{EmbedInteractiveExample("pages/js/number-isinteger.html")}}
+ +

Sintaxis

+ +
Number.isInteger(valor)
+ +

Parámetros

+ +
+
valor
+
El valor a ser probado si es un entero.
+
+ +

Valor devuelto

+ +

Un {{jsxref("Boolean")}} indicando si el valor dado es un entero o no.

+ +

Descripción 

+ +

Si el valor seleccionado es un entero, devuelve true, de lo contrario false. Si el valor es {{jsxref("NaN")}} o infinito, devuelve false.

+ +

Ejemplos

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

Polyfill

+ +
Number.isInteger = Number.isInteger || function(value) {
+  return typeof value === 'number' &&
+    isFinite(value) &&
+    Math.floor(value) === value;
+};
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-number.isinteger', 'Number.isInteger')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-number.isinteger', 'Number.isInteger')}}{{Spec2('ESDraft')}} 
+ +

Compatitibilidad con navegadores

+ +

{{Compat("javascript.builtins.Number.isInteger")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/isnan/index.html b/files/es/web/javascript/reference/global_objects/number/isnan/index.html new file mode 100644 index 0000000000..cc9c62274c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/isnan/index.html @@ -0,0 +1,140 @@ +--- +title: Number.isNaN() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/isNaN +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isNaN +--- +
{{JSRef}}
+ +

El método Number.isNaN() determina si el valor pasado es {{jsxref("NaN")}}. Versión más robusta de la función global {{jsxref("isNaN", "isNaN()")}}.

+ +

Sintaxis

+ +
Number.isNaN(value)
+ +

Parámetros

+ +
+
valor
+
El valor para ser evaluado por {{jsxref("NaN")}}.
+
+ +

Description

+ +

Debido a los dos operadores de igualdad, {{jsxref("Operators/Comparison_Operators", "==", "#Equality")}} y {{jsxref("Operators/Comparison_Operators", "===", "#Identity")}}, evaluando a false cuando al comprobar si {{jsxref("NaN")}} is {{jsxref("NaN")}}, la función Number.isNaN() se ha convertido en necesaria. Esta situación es diferente a las otras comparaciones de valor en JavaScript.

+ +

En comparación a la función global {{jsxref("isNaN", "isNaN()")}}, Number.isNaN() no sufre el problema de forzar la conversión del parámetro a un número. Esto significa que ahora es seguro pasar valores que normalmente se convertirían a {{jsxref("NaN")}}, pero no son del mismo valor que {{jsxref("NaN")}}. Esto también significa que solo los valores de tipo número, que también son {{jsxref("NaN")}}, retornan true.

+ +

Examples

+ +
Number.isNaN(NaN);        // true
+Number.isNaN(Number.NaN); // true
+Number.isNaN(0 / 0)       // true
+
+// e.g. estos hubiesen sido true con la función global isNaN()
+Number.isNaN("NaN");      // false
+Number.isNaN(undefined);  // false
+Number.isNaN({});         // false
+Number.isNaN("blabla");   // false
+
+// Todos retornan false
+Number.isNaN(true);
+Number.isNaN(null);
+Number.isNaN(37);
+Number.isNaN("37");
+Number.isNaN("37.37");
+Number.isNaN("");
+Number.isNaN(" ");
+
+ +

Polyfill

+ +
Number.isNaN = Number.isNaN || function(value) {
+    return typeof value === "number" && isNaN(value);
+}
+
+// O
+Number.isNaN = Number.isNaN || function(value) {
+    return value !== value;
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-number.isnan', 'Number.isnan')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-number.isnan', 'Number.isnan')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad de navegador

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome("25")}}{{CompatGeckoDesktop("15")}}{{CompatNo}}{{CompatVersionUnknown}}9
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatUnknown}}{{CompatGeckoMobile("15")}}{{CompatNo}}{{CompatNo}}9
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/issafeinteger/index.html b/files/es/web/javascript/reference/global_objects/number/issafeinteger/index.html new file mode 100644 index 0000000000..b12c4cf4d6 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/issafeinteger/index.html @@ -0,0 +1,99 @@ +--- +title: Number.isSafeInteger() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/isSafeInteger +tags: + - ECMAScript6 + - JavaScript + - Number + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger +--- +
{{JSRef}}
+ +

El método Number.isSafeInteger() determina si el valor provisto es un número que es un entero seguro.

+ +
{{EmbedInteractiveExample("pages/js/number-issafeinteger.html")}}
+ + + +

Un entero seguro es un entero que

+ + + +

Por ejemplo, 253 - 1 es un entero seguro: puede ser exactamente representado y ningún otro entero puede ser redondeado a él bajo cualquier modo de redondeo de IEEE-754. En contraste, 253 no es un entero seguro, puede ser exactamente representado en IEEE-754, pero el entero 253 + 1 no puede ser directamente representado en IEEE-754 pero en su lugar, redondea a 253 bajo los modos de redondeo redondeo-al-más-cercano y redondeo-a-cero.  Los enteros seguros consisten en todos los enteros desde -(253 - 1) inclusivo, hasta 253 - 1 inclusivo (± 9007199254740991 o ± 9,007,199,254,740,991).  

+ +

Manejar valores más grandes o más pequeños que ~9 cuatrillones con presición completa requiere usar una biblioteca de artimética de presición arbitraria.  Ver Lo que todo programador necesita saber sobre aritmética de punto flotante para más información sobre representaciones de punto flotante de los números.

+ +

Sintaxis

+ +
Number.isSafeInteger(valorDePrueba)
+
+ +

Parámetros

+ +
+
valorDePrueba
+
El valor a probar si es un entero seguro.
+
+ +

Valor de retorno

+ +

Un {{jsxref("Boolean")}} que indica si el valor dado es un número que es entero seguro.

+ +

Ejemplos

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

Polyfill

+ +
Number.isSafeInteger = Number.isSafeInteger || function (value) {
+   return Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
+};
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES2015', '#sec-number.issafeinteger', 'Number.isSafeInteger')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-number.issafeinteger', 'Number.isSafeInteger')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.Number.isSafeInteger")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/max_safe_integer/index.html b/files/es/web/javascript/reference/global_objects/number/max_safe_integer/index.html new file mode 100644 index 0000000000..e5fa9df144 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/max_safe_integer/index.html @@ -0,0 +1,68 @@ +--- +title: Number.MAX_SAFE_INTEGER +slug: Web/JavaScript/Referencia/Objetos_globales/Number/MAX_SAFE_INTEGER +tags: + - ECMAScript 2015 + - JavaScript + - Number + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER +--- +
{{JSRef}}
+ +

La constante Number.MAX_SAFE_INTEGER es el número mas grande 'seguro' en JavaScript (253 - 1).

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

Descripción

+ +

La constante MAX_SAFE_INTEGER tiene un valor de 9007199254740991 (9,007,199,254,740,991 o ~9 mil billones). El razonamiento detrás de ese número es que JavaScript usa números flotantes de doble precisión tal como está especfificado en IEEE 754 por lo que puedes representar números de forma segura entre -(253 - 1)253 - 1.

+ +

Seguro, en este contexto, se refiere a la habilidad de representar enteros de forma exacta y compararlos de forma correcta. Por ejemplo, Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2 evaluará como 'verdadero', lo cual es matemáticamente incorrecto. Ver {{jsxref("Number.isSafeInteger()")}} para más información.

+ +

Debido a que MAX_SAFE_INTEGER es una propiedad estática de {{jsxref("Number")}}, siempre se usa como Number.MAX_SAFE_INTEGER, en lugar de como una propiedad de un objeto {{jsxref("Number")}} que hayas creado.

+ +

Ejemplos

+ +
Number.MAX_SAFE_INTEGER // 9007199254740991
+Math.pow(2, 53) - 1     // 9007199254740991
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES2015', '#sec-number.max_safe_integer', 'Number.MAX_SAFE_INTEGER')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-number.max_safe_integer', 'Number.MAX_SAFE_INTEGER')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.Number.MAX_SAFE_INTEGER")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/max_value/index.html b/files/es/web/javascript/reference/global_objects/number/max_value/index.html new file mode 100644 index 0000000000..60c3d04e95 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/max_value/index.html @@ -0,0 +1,131 @@ +--- +title: Number.MAX_VALUE +slug: Web/JavaScript/Referencia/Objetos_globales/Number/MAX_VALUE +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE +--- +
{{JSRef}}
+ +
La propiedad Number.MAX_VALUE representa el valor numérico positivo máximo representable en JavaScript.
+ +
 
+ +
{{js_property_attributes(0, 0, 0)}}
+ +

Descripción

+ +

La propiedad MAX_VALUE tiene un valor aproximado a 1.79E+308. Si el valor es mayor será representado como Infinity.

+ +

Dado que MAX_VALUE es una propiedad estática de {{jsxref("Number")}}, siempre ha de usarse como Number.MAX_VALUE, y no como propiedad del objeto que has creado.

+ +

Ejemplos

+ +

Usando MAX_VALUE

+ +

La función verificarValorMaximo recibe un número como parámetro que se compara con Number.MAX_VALUE. Si el número es menor se imprime por consola "El número no es infinito", de ser mayor "El número es infinito".

+ +
var numero1 = 1.79E+307;
+var numero2 = 1.79E+310;
+
+function verificarValorMaximo(num){
+
+	if (num <= Number.MAX_VALUE) {
+	  console.log("El número no es infinito");
+	} else {
+	  console.log("El número es infinito");
+	}
+
+}
+
+verificarValorMaximo(numero1); // El número no es infinito
+verificarValorMaximo(numero2); // El número es infinito
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES1')}}{{Spec2('ES1')}}Initial definition. Implemented in JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.3.2', 'Number.MAX_VALUE')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.max_value', 'Number.MAX_VALUE')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.max_value', 'Number.MAX_VALUE')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/min_value/index.html b/files/es/web/javascript/reference/global_objects/number/min_value/index.html new file mode 100644 index 0000000000..dadda2e337 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/min_value/index.html @@ -0,0 +1,121 @@ +--- +title: Number.MIN_VALUE +slug: Web/JavaScript/Referencia/Objetos_globales/Number/MIN_VALUE +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE +--- +
{{JSRef}}
+ +

La propiedad Number.MIN_VALUE representa el menor valor positivo numérico representable en JavaScript.

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

Descripción

+ +

La propiedad MIN_VALUE es el número más cercano a 0, no el más negativo, que JavaScript puede representar.

+ +

MIN_VALUE tiene un valor aproximado de 5e-324. Los valores menores que MIN_VALUE (“subdesbordamiento de valores”) son convertidos a 0.

+ +

Ya que MIN_VALUE es una propiedad estática de {{jsxref("Number")}}, debes utilizarla como Number.MIN_VALUE, más que como una propiedad del objeto {{jsxref("Number")}} que has creado.

+ +

Ejemplos

+ +

Usando MIN_VALUE

+ +

El siguiente código divide dos valores numéricos. Si el resultado es mayor o igual a MIN_VALUE, se ejecuta la función func1, si no, se ejecuta la función func2.

+ +
if (num1 / num2 >= Number.MIN_VALUE) {
+  func1();
+} else {
+  func2();
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES1')}}{{Spec2('ES1')}}Initial definition. Implemented in JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.3.3', 'Number.MIN_VALUE')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.min_value', 'Number.MIN_VALUE')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.min_value', 'Number.MIN_VALUE')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegador

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/nan/index.html b/files/es/web/javascript/reference/global_objects/number/nan/index.html new file mode 100644 index 0000000000..79db15a598 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/nan/index.html @@ -0,0 +1,59 @@ +--- +title: Number.NaN +slug: Web/JavaScript/Referencia/Objetos_globales/Number/NaN +tags: + - JavaScript + - Número + - Propiedad +translation_of: Web/JavaScript/Reference/Global_Objects/Number/NaN +--- +
{{JSRef}}
+ +

La propiedad Number.NaN representa Not-A-Number (No es numero). Equivalente de  {{jsxref("NaN")}}.

+ +
{{EmbedInteractiveExample("pages/js/number-nan.html")}}
+ +

No tienes que crear un objeto {{jsxref("Number")}} para acceder a esta propiedad estática (usa Number.NaN).

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

Ejemplos

+ +

Chequea si los valores son numericos

+ +
function sanitise(x) {
+  if (isNaN(x)) {
+    return Number.NaN;
+  }
+  return x;
+}
+ +

Testing against NaN

+ +

See Testing against NaN on the NaN page.

+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-number.nan', 'Number.NaN')}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Number.NaN")}}

+ +

Tambien mira

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/negative_infinity/index.html b/files/es/web/javascript/reference/global_objects/number/negative_infinity/index.html new file mode 100644 index 0000000000..2e2d7d1573 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/negative_infinity/index.html @@ -0,0 +1,117 @@ +--- +title: Number.NEGATIVE_INFINITY +slug: Web/JavaScript/Referencia/Objetos_globales/Number/NEGATIVE_INFINITY +tags: + - JavaScript + - Number + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY +--- +
+ {{JSRef("Objetos_globales", "Number")}}
+

Resumen

+

La propiedad Number.NEGATIVE_INFINITY representa el valor del infinito negativo.

+

No se tiene que crear un objeto {{jsxref("Number")}} para acceder a esta propiedad estática (use Number.NEGATIVE_INFINITY).

+

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

+

Descripción

+

El valor Number.NEGATIVE_INFINITY es el mismo que el valor negativo de la propiedad del objeto global {{jsxref( "Infinity")}}.

+

Este valor tiene un comportamiento ligeramente diferente que el del infinito matematico:

+ +

Muchos métodos JavaScript (tales como el constructor del objeto Number, parseFloat, y parseInt) retornan NaN si el valor especifico en el párametro es significativamente menor a Number.MIN_VALUE.

+

Podrías utilizar la propiedad Number.NEGATIVE_INFINITY para indicar una condición de error que retorne un numero finito en caso de que esto suceda. Note, sin embargo, que isFinite seria mas apropiado en estos casos.

+

Example

+

En el siguiente ejemplo, a la variable smallNumber se le asigna un valor mucho mas pequeño al valor minimo. Cuando la sentencia if es ejecutada, smallNumber tiene el valor "-Infinity", por lo cual a smallNumber le es asignado un valor finito mas manejable antes de continuar.

+
var smallNumber = (-Number.MAX_VALUE) * 2
+
+if (smallNumber === Number.NEGATIVE_INFINITY) {
+ smallNumber = returnFinite();
+}
+
+

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + +
EspecificacionesEstadoComentario
ECMAScript 1ra Edición. Implementado en JavaScript 1.1EstándarDefinición inicial.
{{SpecName('ES5.1', '#sec-15.7.3.5', 'Number.NEGATIVE_INFINITY')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.negative_infinity', 'Number.NEGATIVE_INFINITY')}}{{Spec2('ES6')}} 
+

Compatibilidad con navegadores

+

{{ CompatibilityTable() }}

+
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico(Si)(Si)(Si)(Si)(Si)
+
+
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico(Si)(Si)(Si)(Si)(Si)(Si)
+
+

Ver también

+ diff --git a/files/es/web/javascript/reference/global_objects/number/parsefloat/index.html b/files/es/web/javascript/reference/global_objects/number/parsefloat/index.html new file mode 100644 index 0000000000..6285aa9b5a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/parsefloat/index.html @@ -0,0 +1,76 @@ +--- +title: Number.parseFloat() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/parseFloat +tags: + - ECMAScript2015 + - ECMAScript6 + - JavaScript + - Número + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Number/parseFloat +--- +
{{JSRef}}
+ +

El método Number.parseFloat() parsea un argumento cadena y regresa un número de punto flotante. Este método se comporta de igual forma a la función global {{jsxref("parseFloat", "parseFloat()")}} y es parte de ECMAScript 2015 (su propósito es la modularización de los globales).

+ +
{{EmbedInteractiveExample("pages/js/number-parsefloat.html")}}
+ + + +

Sintaxis

+ +
Number.parseFloat(string)
+ +

Parámetros

+ +

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

+ +

Valor de regreso

+ +

{{page("en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat", "Return value")}}

+ +

Descripción

+ +

Por favor ver {{jsxref("parseFloat", "parseFloat()")}} para más detalles y ejemplos.

+ +

Polyfill

+ +
if (Number.parseFloat === void 0) {
+    Number.parseFloat = parseFloat;
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES2015', '#sec-number.parsefloat', 'Number.parseFloat')}}{{Spec2('ES2015')}}Definición inicial
{{SpecName('ESDraft', '#sec-number.parsefloat', 'Number.parseFloat')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad del navegador

+ + + +

{{Compat("javascript.builtins.Number.parseFloat")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/parseint/index.html b/files/es/web/javascript/reference/global_objects/number/parseint/index.html new file mode 100644 index 0000000000..e899827599 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/parseint/index.html @@ -0,0 +1,80 @@ +--- +title: Number.parseInt() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/parseInt +tags: + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Number/parseInt +--- +
{{JSRef}}
+ +

The Number.parseInt() method parses a string argument and returns an integer of the specified radix or base.

+ +

The Number.parseInt() El método Number.parseInt () analiza un argumento de cadena y devuelve un entero de la raíz o base especificada.

+ +
{{EmbedInteractiveExample("pages/js/number-parseint.html", "taller")}}
+ + + +

Syntax

+ +
Number.parseInt(string,[ radix])
+ +

Parameters

+ +
+
+
string
+
The value to parse. If this argument is not a string, then it is converted to one using the ToString abstract operation. Leading whitespace in this argument is ignored.
+
radix {{optional_inline}}
+
An integer between 2 and 36 that represents the radix (the base in mathematical numeral systems) of the string. Be careful—this does not default to 10!
+
+
+ +

Return value

+ +

An integer parsed from the given string.

+ +

If the radix is smaller than 2 or bigger than 36, and the first non-whitespace character cannot be converted to a number, {{jsxref("NaN")}} is returned.

+ +

Description

+ +

This method has the same functionality as the global {{jsxref("parseInt", "parseInt()")}} function:

+ +
Number.parseInt === parseInt // true
+ +

and is part of ECMAScript 2015 (its purpose is modularization of globals). Please see {{jsxref("parseInt", "parseInt()")}} for more detail and examples.

+ +

Polyfill

+ +
if (Number.parseInt === undefined) {
+    Number.parseInt = window.parseInt
+}
+
+ +

Specifications

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-number.parseint', 'Number.parseInt')}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Number.parseInt")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/positive_infinity/index.html b/files/es/web/javascript/reference/global_objects/number/positive_infinity/index.html new file mode 100644 index 0000000000..41d101a569 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/positive_infinity/index.html @@ -0,0 +1,115 @@ +--- +title: Number.POSITIVE_INFINITY +slug: Web/JavaScript/Referencia/Objetos_globales/Number/POSITIVE_INFINITY +tags: + - JavaScript + - Number + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY +--- +

{{JSRef("Objetos_globales", "Number")}}

+

Resumen

+

La propiedad Number.POSITIVE_INFINITY representa el infinito positivo.

+

No se tiene que crear un objeto {{jsxref("Number")}} para acceder a esta propiedad estática (use Number.POSITIVE_INFINITY).

+

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

+

Descripción

+

El valor de Number.POSITIVE_INFINITY es el mismo valor de la propiedad {{jsxref( "Infinity")}} del objeto global.

+

Este valor tiene un comportamiento ligeramente diferente al infinio matemático:

+ +

Muchos métodos de JavaScript (tales como el constructor del objeto Number, parseFloat y parseInt) retornan NaN si el valor especificado en el parámetro es signficativamente mayor a Number.MAX_VALUE.

+

Podrías utilizar la propiedad Number.POSITIVE_INFINITY para indicar una condición de error que retorne un numero finito en caso de que esto suceda. Note, sin embargo, que isFinite seria mas apropiado en estos casos.

+

Ejemplo

+

En el siguiente ejemplo, a la variable bigNumber se le asigna un valor mucho mayor al valor máximo. Cuando la sentencia if es ejecutada, bigNumber tiene el valor "Infinity", por lo cual a bigNumber le es asignado un valor mas manejable antes de continuar.

+
var bigNumber = Number.MAX_VALUE * 2;
+if (bigNumber === Number.POSITIVE_INFINITY) {
+ bigNumber = returnFinite();
+}
+
+

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + +
EspecificacionesEstadoComentario
ECMAScript 1st Edition. Implemented in JavaScript 1.1EstándarDefinición inicial.
{{SpecName('ES5.1', '#sec-15.7.3.6', 'Number.POSITIVE_INFINITY')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.positive_infinity', 'Number.POSITIVE_INFINITY')}}{{Spec2('ES6')}} 
+

Compatibilidad con navegadores

+

{{ CompatibilityTable() }}

+
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico(SI)(Si)(Si)(Si)(Si)
+
+
+ + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soprote básico(Si)(Si)(Si)(Si)(Si)(Si)
+
+

Ver también

+ diff --git a/files/es/web/javascript/reference/global_objects/number/tofixed/index.html b/files/es/web/javascript/reference/global_objects/number/tofixed/index.html new file mode 100644 index 0000000000..f11ccc3938 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/tofixed/index.html @@ -0,0 +1,147 @@ +--- +title: Number.prototype.toFixed() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/toFixed +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toFixed +--- +
{{JSRef}}
+ +

El método toFixed() formatea un número usando notación de punto fijo.

+ +
{{EmbedInteractiveExample("pages/js/number-tofixed.html")}}
+ +

Sintaxis

+ +
numObj.toFixed([digitos])
+ +

Parametros

+ +
+
digitos
+
Opcional. El número de digitos que aparecen después del punto decimal; este puede ser un valor entre 0 y 20, inclusive, algunas implementaciones pueden soportar un rango más amplio de valores. Si el argumento es omitido, es tratado como 0.
+
+ +

Valor Devuelto

+ +

Una cadena que representa el número dado, usando notación de punto fijo.

+ +

Excepciones

+ +
+
{{jsxref("RangeError")}}
+
Si digits es demasiado pequeño o demasiado grande. Los valores entre 0 y 20, inclusive, no causarán un error tipo {{jsxref("RangeError")}}. Las implementaciones también pueden admitir valores cada vez más grandes.
+
{{jsxref("TypeError")}}
+
Si este método se invoca en un objeto que no es un {{jsxref("Number")}}.
+
+ +

Descripción

+ +

toFixed() devuelve una representación de cadena de numObj que no usa notación exponencial y tiene exactamente dígitos dígitos después del decimal. El número se redondea si es necesario, y la parte fraccional se rellena con ceros si es necesario para que tenga la longitud especificada.Si numObj es mayor que 1e+21, este metodo llama a {{jsxref("Number.prototype.toString()")}} y retorna una cadena de notacion exponencial.

+ +

Examples

+ +

Using toFixed

+ +
var numObj = 12345.6789;
+
+numObj.toFixed();       // Returns '12346': note rounding, no fractional part
+numObj.toFixed(1);      // Returns '12345.7': note rounding
+numObj.toFixed(6);      // Returns '12345.678900': note added zeros
+(1.23e+20).toFixed(2);  // Returns '123000000000000000000.00'
+(1.23e-10).toFixed(2);  // Returns '0.00'
+2.34.toFixed(1);        // Returns '2.3'
+2.35.toFixed(1);        // Returns '2.4'. Note that it rounds up in this case.
+-2.34.toFixed(1);       // Returns -2.3 (due to operator precedence, negative number literals don't return a string...)
+(-2.34).toFixed(1);     // Returns '-2.3' (...unless you use parentheses)
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES3')}}{{Spec2('ES3')}}Initial definition. Implemented in JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.7.4.5', 'Number.prototype.toFixed')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-number.prototype.tofixed', 'Number.prototype.toFixed')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-number.prototype.tofixed', 'Number.prototype.toFixed')}}{{Spec2('ESDraft')}}
+ +

Browser compatibility

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/tolocalestring/index.html b/files/es/web/javascript/reference/global_objects/number/tolocalestring/index.html new file mode 100644 index 0000000000..d0c28b1431 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/tolocalestring/index.html @@ -0,0 +1,155 @@ +--- +title: Number.prototype.toLocaleString() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/toLocaleString +tags: + - Internacionalizacion + - JavaScript + - Número +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString +--- +
{{JSRef}}
+ +

El método toLocaleString() retorna una representacion localizada del número en forma de texto

+ +
{{EmbedInteractiveExample("pages/js/number-tolocalestring.html")}}
+ + + +

Syntax

+ +
numObj.toLocaleString([locales [, options]])
+ +

Parametros

+ +

Los argumentos locales y options personalizan el comportamiento de la funcion y permite especificar el lenguaje cuyo formato deberá ser utilizado. En implementaciones, que ignoran los argumentos locales y options la localización utilizada y la forma del texto retornado es enteramente dependiente de la implementación.

+ +
Mira el  constructor Intl.NumberFormat() para ver más detalles sobre los parámetros y como se utilizan.
+ +
+ +

Valor de retorno

+ +

Un texto con una representación localizada del número dado.

+ +

Performance

+ +

Cuando formateas una gran cantidad de números, es mejor crear un objeto {{jsxref("NumberFormat")}} y utilizar la función {{jsxref("NumberFormat.format")}}.

+ +

Ejemplos

+ +

Usando toLocaleString

+ +

Un uso básico sin especificar locales, retorna un texto formateado con el locales y options por defecto.

+ +
var number = 3500;
+
+console.log(number.toLocaleString()); // Muestra "3,500" si se está utilizando la localización U.S. English
+
+ +

Verificando el soporte de los parámetros locales y options

+ +

Los parámetros locales y options no son soportados aún por todos los navegadores. Para verificar el soporte en ES5.1 y posteriores implementaciones, se puede utilizar el hecho que los tags inválidos en la localización son rechazados con una excepción {{jsxref("Global_Objects/RangeError", "RangeError")}}:

+ +
function toLocaleStringSupportsLocales() {
+  var number = 0;
+  try {
+    number.toLocaleString('i');
+  } catch (e) {
+    return e.name === 'RangeError';
+  }
+  return false;
+}
+
+ +

Antes de ES5.1, las implementaciones no requieren devolver una exepción {{jsxref("Global_Objects/RangeError", "RangeError")}} cuando toLocaleString es llamado sin argumentos.

+ +

Para verificar que funciona todos los navegadores, incluyendo aquellos que soportan ECMA-262, anterior a ES5.1, se puede verificar por las funcionalidades especificadas en ECMA-402 que requieren soportar opciones regionales para Number.prototype.toLocaleString directamente:

+ +
function toLocaleStringSupportsOptions() {
+  return !!(typeof Intl == 'object' && Intl && typeof Intl.NumberFormat == 'function');
+}
+
+ +

Esta validación del objeto global Intl , verificar que no es null (nulo) y que tiene la propiedad NumberFormat que es una función.

+ +

Utilizando locales

+ +

Este ejemplo muestra alguna de las variaciones en los formatos de números localizados. Para obtener el formato de la localización utilizada en la interfaz del usuario de tu aplicación, asegurate de especificar la localización (y de ser posible alguna localización de respaldo) utilizando el parámetro locales:

+ +
var number = 123456.789;
+
+// Aleman utiliza comas como separador decimal y puntos miles
+console.log(number.toLocaleString('de-DE'));
+// → 123.456,789
+
+// Arabe en la mayoría de países de habla Arabe utilizan numerales Eastern Arabic
+console.log(number.toLocaleString('ar-EG'));
+// → ١٢٣٤٥٦٫٧٨٩
+
+// India utiliza separadores de miles/lakh/crore
+console.log(number.toLocaleString('en-IN'));
+// → 1,23,456.789
+
+// la extensión nu requiere un sistema numerico, e.g. Decimales Chino
+console.log(number.toLocaleString('zh-Hans-CN-u-nu-hanidec'));
+// → 一二三,四五六.七八九
+
+// cuando solicitas un lenguage que podria no ser soportado, como
+// Balinese, incluye un lenguaje de respaldo, en este caso Indonesio
+console.log(number.toLocaleString(['ban', 'id']));
+// → 123.456,789
+
+ +

Utilizando options

+ +

El resultado proveido por  toLocaleString puede ser personalizado utilizando el parámetro options :

+ +
var number = 123456.789;
+
+// solicitar un formato de moneda
+console.log(number.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }));
+// → 123.456,79 €
+
+// en Japones yen no utiliza una moneda menor
+console.log(number.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }))
+// → ¥123,457
+
+// limitar a tres digitos el significante
+console.log(number.toLocaleString('en-IN', { maximumSignificantDigits: 3 }));
+// → 1,23,000
+
+// Utilizar el lenguaje por defecto del host con opciones para el formato del número
+var num = 30000.65;
+console.log(num.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}));
+// → "30,000.65" donde English es el lenguaje por defecto, o
+// → "30.000,65" donde Aleman es el lenguaje por defecto, o
+// → "30 000,65" donde French es el lenguaje por defecto
+
+ +

Especificaciones

+ + + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-number.prototype.tolocalestring', 'Number.prototype.toLocaleString')}}
{{SpecName('ES Int Draft', '#sup-number.prototype.tolocalestring', 'Number.prototype.toLocaleString')}}
+ +

Compatibilidad de navegadores

+ + + +

{{Compat("javascript.builtins.Number.toLocaleString")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/toprecision/index.html b/files/es/web/javascript/reference/global_objects/number/toprecision/index.html new file mode 100644 index 0000000000..7a5110d7a9 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/toprecision/index.html @@ -0,0 +1,102 @@ +--- +title: Number.prototype.toPrecision() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/toPrecision +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toPrecision +--- +
{{JSRef}}
+ +

El método toPrecision() devuelve una cadena que representa un objeto {{jsxref("Number")}} según la precisión especificada.

+ +
{{EmbedInteractiveExample("pages/js/number-toprecision.html")}}
+ +

Sintaxis

+ +
numObj.toPrecision([precision])
+ +

Parámetros

+ +
+
precision
+
Opcional. Un entero que especifica el número de digitos significativos.
+
+ +

Valor devuelto

+ +

Una cadena que representa un objeto {{jsxref("Number")}} en punto fijo o en notación exponencial redondeada a precision de digitos significativos. Vea la discusión acerca del redondeo en la descripción del método {{jsxref("Number.prototype.toFixed()")}} , que además aplica a toPrecision().

+ +

Si el parámetro precision es omitido, se comporta como {{jsxref("Number.prototype.toString()")}}. Si el parámetro precision es un valor no entero, el valor es redondeado al entero más cercano.

+ +

Exceptions

+ +
+
{{jsxref("Global_Objects/RangeError", "RangeError")}}
+
If precision is not between 1 and 100 (inclusive), a {{jsxref("RangeError")}} is thrown. Implementations are allowed to support larger and smaller values as well. ECMA-262 only requires a precision of up to 21 significant digits.
+
+ +

Ejemplos

+ +

Usando toPrecision

+ +
var 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'
+
+// observe que bajo algunas circunstancias el valor retornado es en notación exponencial
+console.log((1234.5).toPrecision(2)); // logs '1.2e+3'
+
+ +

Especificaciónes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Primera definición. Implementada en JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.7.4.7', 'Number.prototype.toPrecision')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.toprecision', 'Number.prototype.toPrecision')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.toprecision', 'Number.prototype.toPrecision')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ + + +

{{Compat("javascript.builtins.Number.toPrecision")}}

+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/tostring/index.html b/files/es/web/javascript/reference/global_objects/number/tostring/index.html new file mode 100644 index 0000000000..f911fa271e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/tostring/index.html @@ -0,0 +1,63 @@ +--- +title: Number.prototype.toString() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/toString +tags: + - JavaScript + - Method + - Number + - Prototype + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toString +--- +
{{JSRef("Objetos_globales", "Number")}}
+ +

Resumen

+ +

Devuelve una cadena que representa al objeto Number especificado

+ +

Sintaxis

+ +

number .toString( {{ mediawiki.external('base ') }} )

+ +

Parámetro

+ +
+
base
+
Un entero entre 2 y 36 especificando la base a usar para representar los valores numéricos.
+
+ +

Devuelve

+ +

Una cadena que representa al objeto.

+ +

Descripción

+ +

El objeto Number sobreescribe el método toString y no lo hereda del objeto {{jsxref("Object")}}; por tanto no hereda {{jsxref("Object.prototype.toString()")}}. Para objetos Number, el método toString devuelve una cadena que representa al objeto en la base especificada.

+ +

El método toString comprueba su primer argumento, e intenta devolver una cadena de representación en la base especificada. Para bases superiores a 10, las letras del alfabeto indican numerales mayores de 9. Por ejemplo, para números hexadecimales (base 16), se utiliza de A hasta F.

+ +

Si no se da a toString una base entre 2 y 36, se lanza una excepción.

+ +

Si no se especifica la base, JavaScript asume la base predefinida, que es 10.

+ +

Ejemplos

+ +
var howMany = 10;
+
+alert("howMany.toString() is " + howMany.toString()); // displays "10"
+
+alert("45 .toString() is " + 45 .toString()); //displays "45"
+
+var x = 7;
+alert(x.toString(2))      // Displays "111"
+
+ + + +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/number/valueof/index.html b/files/es/web/javascript/reference/global_objects/number/valueof/index.html new file mode 100644 index 0000000000..588c421746 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/number/valueof/index.html @@ -0,0 +1,81 @@ +--- +title: Number.prototype.valueOf() +slug: Web/JavaScript/Referencia/Objetos_globales/Number/valueOf +tags: + - JavaScript + - Métodos + - Number + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Number/valueOf +--- +
{{JSRef}}
+ +

El método valueOf() retorna el valor primitivo inserto en un objeto {{jsxref("Number")}}.

+ +

Sintaxis

+ +
numObj.valueOf()
+ +

Valor retornado

+ +

Un número representando al valor primitivo del objeto  {{jsxref("Number")}} especificado.

+ +

Descripción

+ +

Este método es usualmente llamado de forma interna por JavaScript y no es explicitado en el código web.

+ +

Ejemplos

+ +

Utilizando valueOf

+ +
var numObj = new Number(10);
+console.log(typeof numObj); // objeto
+
+var num = numObj.valueOf();
+console.log(num);           // 10
+console.log(typeof num);    // número
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES1')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.4.4', 'Number.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.valueof', 'Number.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.valueof', 'Number.prototype.valueOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegador

+ + + +

{{Compat("javascript.builtins.Number.valueOf")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/__definegetter__/index.html b/files/es/web/javascript/reference/global_objects/object/__definegetter__/index.html new file mode 100644 index 0000000000..fceb708912 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/__definegetter__/index.html @@ -0,0 +1,144 @@ +--- +title: Object.prototype.__defineGetter__() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/__defineGetter__ +tags: + - JavaScript + - Objeto + - Prototipo + - Prototype + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__ +--- +
{{JSRef}}
+ +
+

Esta característica está obsoleta en favor de definir getters usando el object initializer syntax o la API {{jsxref("Object.defineProperty()")}}.

+ +

En todo caso, como es ampliamente implementada y usada en la Web,  es poco probable que los navegadores dejen de implementarla.

+
+ +

El método __defineGetter__ enlaza una propiedad de un objeto a una función a ser llamada cuando esa propiedad es buscada.

+ +

Sintaxis

+ +
obj.__defineGetter__(prop, func)
+ +

Parámetros

+ +
+
prop
+
Un texto (string) que contiene el nombre de la propiedad para enlazar la función dada.
+
func
+
A function to be bound to a lookup of the specified property.
+
+ +

Descripción

+ +

The __defineGetter__ allows a {{jsxref("Operators/get", "getter", "", 1)}} to be defined on a pre-existing object.

+ +

Ejemplos

+ +
// Forma no-estándar y obsoleta
+
+var o = {};
+o.__defineGetter__('gimmeFive', function() { return 5; });
+console.log(o.gimmeFive); // 5
+
+
+// Formas compatibles con el estándar
+
+// Usando el operador get
+var o = { get gimmeFive() { return 5; } };
+console.log(o.gimmeFive); // 5
+
+// Usando Object.defineProperty
+var o = {};
+Object.defineProperty(o, 'gimmeFive', {
+  get: function() {
+    return 5;
+  }
+});
+console.log(o.gimmeFive); // 5
+
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('JavaScript', '#object.prototype.__definegetter__', 'Object.prototype.__defineGetter__()')}}{{Spec2('JavaScript')}} 
+ +

Compatibilidad de navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatIE("11")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Mira también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/__lookupgetter__/index.html b/files/es/web/javascript/reference/global_objects/object/__lookupgetter__/index.html new file mode 100644 index 0000000000..8292222a38 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/__lookupgetter__/index.html @@ -0,0 +1,84 @@ +--- +title: Object.prototype.__lookupGetter__() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/__lookupGetter__ +translation_of: Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__ +--- +
{{JSRef}} {{deprecated_header}}
+ +

Los __lookupGetter__ metodos retornan la funcion  enlazada como un getter para especificar la propiedad.

+ +

Syntax

+ +
obj.__lookupGetter__(sprop)
+ +

Parameters

+ +
+
sprop
+
A string containing the name of the property whose getter should be returned.
+
+ +

Return value

+ +

The function bound as a getter to the specified property.

+ +

Description

+ +

If a getter has been defined for an object's property, it's not possible to reference the getter function through that property, because that property refers to the return value of that function. __lookupGetter__ can be used to obtain a reference to the getter function.

+ +

It is now possible to do this in a standardized way using {{jsxref("Object.getOwnPropertyDescriptor()")}} and {{jsxref("Object.getPrototypeOf()")}}.

+ +

Examples

+ +
var obj = {
+  get foo() {
+    return Math.random() > 0.5 ? 'foo' : 'bar';
+  }
+};
+
+
+// Non-standard and deprecated way
+obj.__lookupGetter__('foo');
+// (function() { return Math.random() > 0.5 ? 'foo' : 'bar'; })
+
+
+// Standard-compliant way
+Object.getOwnPropertyDescriptor(obj, "foo").get;
+// (function() { return Math.random() > 0.5 ? 'foo' : 'bar'; })
+
+ +

Specifications

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ESDraft', '#sec-object.prototype.__lookupGetter__', 'Object.prototype.__lookupGetter__()')}}{{Spec2('ESDraft')}}Included in the (normative) annex for additional ECMAScript legacy features for Web browsers (note that the specification codifies what is already in implementations).
+ +

Browser compatibility

+ +
+ + +

{{Compat("javascript.builtins.Object.lookupGetter")}}

+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/assign/index.html b/files/es/web/javascript/reference/global_objects/object/assign/index.html new file mode 100644 index 0000000000..17de417d75 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/assign/index.html @@ -0,0 +1,274 @@ +--- +title: Object.assign() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/assign +tags: + - ECMAScript 2015 + - JavaScript + - Objeto + - Referencia + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Object/assign +--- +
{{JSRef}}
+ +

El método Object.assign() copia todas las propiedades enumerables de uno o más objetos fuente a un objeto destino. Devuelve el objeto destino. 

+ +
{{EmbedInteractiveExample("pages/js/object-assign.html")}}
+ +

Sintaxis

+ +
Object.assign(objetivo, ...fuentes)
+ +

Parámetros

+ +
+
objetivo
+
El objeto destino.
+
fuentes
+
Los objetos origen.
+
+ +

Valor devuelto

+ +

El objeto destino.

+ +

Descripción

+ +

Las propiedades en el objeto destino serán sobrescritas por las propiedades en las fuentes si tienen la misma clave. Propiedades posteriores de las fuentes podrán sobrescribir las anteriores.

+ +

El método Object.assign() copia sólo las propiedades enumerables y propias del objeto origen a un objeto destino. Usa [[Get]] en la origen y [[Set]] en el destino, por lo que invocará los métodos de acceso y establecimiento (getters y setters). Por consiguiente asignará propiedades frente a sólo copiar o definir propiedades nuevas. Esto puede hacer que sea inadecuado para fusionar propiedades nuevas en un prototipo si los objetos fuente contienen métodos de acceso (getters). Para copiar definiciones de propiedades en prototipos, incluyendo su enumerabilidad, se deben usar {{jsxref("Object.getOwnPropertyDescriptor()")}} y {{jsxref("Object.defineProperty()")}}.

+ +

Tanto las propiedades {{jsxref("String")}} como {{jsxref("Symbol")}} son copiadas.

+ +

En caso de un error, por ejemplo si una propiedad es de solo lectura, se lanza un {{jsxref("TypeError")}}, y el objeto destino se mantendrá sin cambios.

+ +

Note que Object.assign() no lanza excepciones al encontrar en las fuentes propiedades {{jsxref("null")}} o {{jsxref("undefined")}}.

+ +

Ejemplos

+ +

Clonando un objeto

+ +
var obj = { a: 1 };
+var copy = Object.assign({}, obj);
+console.log(copy); // { a: 1 }
+
+ +

Advertencia para clonado profundo

+ +

Para un clonado profundo, necesitamos usar otra alternativa ya que Object.assign() copia valores de propiedades. Si el valor en la fuente es una referencia a un objeto, solo se copia la referencia en sí, como valor de la propiedad.

+ +
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();
+ +

Fusionando objetos

+ +
var o1 = { a: 1 };
+var o2 = { b: 2 };
+var o3 = { c: 3 };
+
+var obj = Object.assign(o1, o2, o3);
+console.log(obj); // { a: 1, b: 2, c: 3 }
+console.log(o1);  // { a: 1, b: 2, c: 3 }, target object itself is changed.
+ +

Fusionando objetos con las mismas propiedades

+ +
var o1 = { a: 1, b: 1, c: 1 };
+var o2 = { b: 2, c: 2 };
+var o3 = { c: 3 };
+
+var obj = Object.assign({}, o1, o2, o3);
+console.log(obj); // { a: 1, b: 2, c: 3 }
+ +

Las propiedades también son sobreescritas por otros objetos que aparecen posteriormente en la lista de parámetros y que tienen propiedades con el mismo nombre.

+ +

Copiando propiedades de tipo símbolo

+ +
var o1 = { a: 1 };
+var o2 = { [Symbol('foo')]: 2 };
+
+var obj = Object.assign({}, o1, o2);
+console.log(obj); // { a : 1, [Symbol("foo")]: 2 } (cf. bug 1207182 on Firefox)
+Object.getOwnPropertySymbols(obj); // [Symbol(foo)]
+
+ +

Las propiedades heredadas y las no enumerables no pueden ser copiadas

+ +
var obj = Object.create({ foo: 1 }, { // foo es una propiedad heredada.
+  bar: {
+    value: 2  // bar es una propiedad no enumerable.
+  },
+  baz: {
+    value: 3,
+    enumerable: true  // baz es una propiedad propia enumerable.
+  }
+});
+
+var copy = Object.assign({}, obj);
+console.log(copy); // { baz: 3 }
+
+ +

Los tipos primitivos serán encapsulados en objetos

+ +
var v1 = 'abc';
+var v2 = true;
+var v3 = 10;
+var v4 = Symbol('foo')
+
+var obj = Object.assign({}, v1, null, v2, undefined, v3, v4);
+// Los tipos primitivos son encapsulados en objetos y se ignoran las propiedades con valor null o undefined.
+// Nótese que sólo los wrappers de cadenas tienen propiedades enumerables:
+console.log(obj); // { "0": "a", "1": "b", "2": "c" }
+
+ +

Las excepciones interrumpen la tarea de copiado

+ +
var target = Object.defineProperty({}, 'foo', {
+  value: 1,
+  writeable: false
+}); // target.foo es una propiedad de sólo lectura
+
+Object.assign(target, { bar: 2 }, { foo2: 3, foo: 3, foo3: 3 }, { baz: 4 });
+// TypeError: "foo" es de sólo lectura
+// La excepción se lanza cuando se intenta asignar un valor a target.foo
+
+console.log(target.bar);  // 2, la primera fuente fue copiada.
+console.log(target.foo2); // 3, la primera propiedad del segundo objeto fuente se copió correctamente.
+console.log(target.foo);  // 1, se lanza la excepción.
+console.log(target.foo3); // undefined, el método assign ha finalizado, no se copiará foo3.
+console.log(target.baz);  // undefined, tampoco se copiará el tercer objecto fuente.
+
+ +

Copiando métodos de acceso

+ +
var obj = {
+  foo: 1,
+  get bar() {
+    return 2;
+  }
+};
+
+var copy = Object.assign({}, obj);
+console.log(copy);
+// { foo: 1, bar: 2 }, the value of copy.bar is obj.bar's getter's return value.
+
+// This is an assign function that copies full descriptors
+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;
+}
+
+var copy = completeAssign({}, obj);
+console.log(copy);
+// { foo:1, get bar() { return 2 } }
+
+ +

Polyfill

+ +

Este {{Glossary("Polyfill","polyfill")}} no soporta propiedades símbolo, ya que ES5 no tiene símbolos.

+ +
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) { // TypeError if undefined or null
+        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) { // Skip over if undefined or null
+          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
+  });
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-object.assign', 'Object.assign')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-object.assign', 'Object.assign')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
+

{{Compat("javascript.builtins.Object.assign")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/constructor/index.html b/files/es/web/javascript/reference/global_objects/object/constructor/index.html new file mode 100644 index 0000000000..3871c41fe3 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/constructor/index.html @@ -0,0 +1,161 @@ +--- +title: Object.prototype.constructor +slug: Web/JavaScript/Referencia/Objetos_globales/Object/constructor +tags: + - JavaScript + - Object + - Property + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/constructor +--- +
{{JSRef("Objetos_globales", "Object")}}
+ +

Resumen

+ +

Retorna una referencia a la función del {{jsxref("Object")}} que creó el objeto de la instancia. Note que el valor de esta propiedad es una referencia a la función misma, no a un string conteniendo el nombre de la función. El valor es sólo de lectura para valores primitivos tales como 1, true y 'test'.

+ +

Descripción

+ +

Todos los objetos tienen una propiedad constructor. Los objetos creados sin explicitar el uso de una función (como son los objetos y las cadenas literales) tendrán una propiedad de constructor que apunta al tipo de constructor del Objeto Fundamento para ese objeto.

+ +
var o = {};
+o.constructor === Object; // true
+
+var a = [];
+a.constructor === Array; // true
+
+var n = new Number(3);
+n.constructor === Number; // true
+ +

Ejemplos

+ +

Ejemplo: Mostrando el constructor de un objeto.

+ +

El siguiente ejemplo crea un prototipo, Tree, y un objeto de este tipo, theTree. El ejemplo muestra entonces la propiedad constructor para el objeto theTree.

+ +
function Tree (name) {
+   this.name = name;
+}
+
+var theTree = new Tree( "Redwood" );
+console.log( "theTree.constructor is " + theTree.constructor );
+ +

Este ejemplo muestra la siguiente salida:

+ +
theTree.constructor is function Tree (name) {
+    this.name = name;
+}
+ +

Ejemplo: Cambiando el constructor de un objeto.

+ +

El siguiente ejemplo demuestra como modificar el valor del constructor de objetos genéricos. Solo true, 1 y "test" no serán afectados ya que ellos tienen constructores nativos de solo lectura. Este ejemplo demuestra que no siempre es seguro confiar en la propiedad constructor de un objeto.

+ +
function Type () {}
+
+var types = [
+    new Array(),
+    [],
+    new Boolean(),
+    true,             // no cambia
+    new Date(),
+    new Error(),
+    new Function(),
+    function () {},
+    Math,
+    new Number(),
+    1,                // no cambia
+    new Object(),
+    {},
+    new RegExp(),
+    /(?:)/,
+    new String(),
+    "test"            // no cambia
+];
+
+for( var i = 0; i < types.length; i++ ) {
+    types[i].constructor = Type;
+    types[i] = [ types[i].constructor, types[i] instanceof Type, types[i].toString() ];
+}
+
+console.log( types.join( "\n" ) );
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificacionesEstatusComentario
ECMAScript 1ra. Edición. Implementado en JavaScript 1.1Estandar.Definición inicial.
{{SpecName('ES5.1', '#sec-15.2.4.1', 'Objectprototype.constructor')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.constructor', 'Object.prototype.constructor')}}{{Spec2('ES6')}} 
+ +

Compatibilidad con Navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

 

diff --git a/files/es/web/javascript/reference/global_objects/object/create/index.html b/files/es/web/javascript/reference/global_objects/object/create/index.html new file mode 100644 index 0000000000..94608d1c58 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/create/index.html @@ -0,0 +1,377 @@ +--- +title: Object.create() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/create +tags: + - ECMAScript5 + - JavaScript + - 'Null' + - Objeto + - Referencia + - metodo + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Object/create +--- +
{{JSRef}}
+ +

El método Object.create() crea un objeto nuevo, utilizando un objeto existente como el prototipo del nuevo objeto creado.

+ +
{{EmbedInteractiveExample("pages/js/object-create.html")}}
+ +
+ +
La fuente de este ejemplo interactivo se almacena en un repositorio de GitHub. Si desea contribuir al proyecto de ejemplos interactivos, clone https://github.com/mdn/interactive-examples y envíenos una solicitud de extracción (pull request).
+ +

Sintaxis

+ +
Object.create(proto[, propertiesObject])
+ +

Parámetros

+ +
+
proto
+
Objeto el cual debe ser el prototipo del nuevo objeto creado.
+
propertiesObject
+
Opcional. Si se especifica y no es {{jsxref("undefined")}}, un objeto cuyas propiedades enumerables propias (es decir, aquellas propiedades definidas sobre si mismo y no son propiedades enumerable a lo largo de su cadena de prototipos) espefica descriptores de propiedad para ser agregadas al objeto recien creado, con los nombres de propiedad correspondiente. Estas propiedades corresponden al segundo argumento de {{jsxref("Object.defineProperties")}}.
+
+ +

Valor devuelto

+ +

Un nuevo objeto con el prototipo y propiedades del objeto especificado.

+ +

Excepciones

+ +

Una excepción {{jsxref("TypeError")}} si el parámetro propertiesObject es {{jsxref("null")}} o un objeto envolvente no primitivo.

+ +

Ejemplos

+ +

Herencia clásica con Object.create()

+ +

Debajo se encuentra un ejemplo de cómo usar Object.create() para lograr herencia clásica. Este es para herencia simple, la cual es todo lo que soporta JavaScript.

+ +
// Shape - superclase
+function Shape() {
+  this.x = 0;
+  this.y = 0;
+}
+
+// método de la superclase
+Shape.prototype.move = function(x, y) {
+    this.x += x;
+    this.y += y;
+    console.info("Shape moved.");
+};
+
+// Rectangle - subclase
+function Rectangle() {
+  Shape.call(this); // llama al contructor de la superclase.
+}
+
+// subclase extiende superclase
+Rectangle.prototype = Object.create(Shape.prototype);
+Rectangle.prototype.constructor = Rectangle;
+
+var rect = new Rectangle();
+
+console.log('¿Es rect una instancia de Rectangle?',
+  rect instanceof Rectangle); // true
+console.log('¿Es rect una instancia de Shape?',
+  rect instanceof Shape); // true
+rect.move(1, 1); // Imprime, 'Shape moved.'
+
+ +

Si desea heredar desde múltiples objetos, entonces los mixins son una posibilidad.

+ +
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()")}} copia las propiedades del prototipo OtherSuperClass al prototipo de MyClass, haciéndolas disponibles en todas las instancias de MyClass. Object.assign() se introdujo con ES2015 y tiene polyfill. Si el soporte para navegadores antiguos es necesario, se puede utilizar jQuery.extend()_.assign().

+ +

Usando el argumento propertiesObject con Object.create()

+ +
var o;
+
+// crea un objeto con un prototipo como null
+o = Object.create(null);
+
+
+o = {};
+// esto equivale a:
+o = Object.create(Object.prototype);
+
+
+// Ejemplo en donde creamos un objeto con un par de propiedades de ejemplo.
+// (Note que el segundo parámetro mapea claves para los *descriptores de propiedad*.)
+o = Object.create(Object.prototype, {
+  // foo es un habitual "propiedad de valor"
+  foo: { writable:true, configurable:true, value: "hello" },
+  // bar es una propiedad getter-and-setter (de acceso)
+  bar: {
+    configurable: false,
+    get: function() { return 10 },
+    set: function(value) { console.log("Setting `o.bar` to", value) }
+}});
+
+
+function Constructor(){}
+o = new Constructor();
+// es equivalente a:
+o = Object.create(Constructor.prototype);
+// Por supuesto, si hay un código de inicialización en la
+// función Constructor, el Object.create no puede reflejar esta.
+
+
+// crear un nuevo objeto cuyo prototipo es un nuevo, objeto vacío
+// y agregar una única propiedad 'p', con el valor 42
+o = Object.create({}, { p: { value: 42 } })
+
+// por defecto las propiedades NO SON editables, enumerables o configurables:
+o.p = 24
+o.p
+// 42
+
+o.q = 12
+for (var prop in o) {
+   console.log(prop)
+}
+// "q"
+
+delete o.p
+// false
+
+// para especificar una propiedad en ES3
+
+o2 = Object.create({}, { p: {
+      value: 42,
+      writable: true,
+      enumerable: true,
+      configurable: true }
+});
+
+ +

Objetos personalizados y nulos

+ +

Un objeto nuevo creado de un objeto completamente personalizado (especialmente uno creado de un objeto nulo, que es básicamente un objeto personalizado sin miembros) puede comportarse de manera inesperada. Esto es especialmente cierto cuando se depura, ya que las funciones comunes  de conversión/detección de propiedad de objeto pueden generar errores, o simplemente perder información (especialmente si se atrapan excepciones de manera silenciosa que ignoran los errores). Por ejemplo, aquí hay dos objetos:

+ +
oco = Object.create( {} );   // Crea un objeto normal
+ocn = Object.create( null ); // Crea un objeto "null"
+
+> console.log(oco) // {} -- Parece normal
+> console.log(ocn) // {} -- Parece normal aquí también, hasta este momento
+
+oco.p = 1; // Crea una propiedad simple en un objeto normal
+ocn.p = 0; // Crea una propiedad simple en un objeto "null"
+
+> console.log(oco) // {p: 1} -- Todavía parece normal
+> console.log(ocn) // {p: 0} --Todavía parece normal aquí también. PERO ESPERA...
+
+ +

Como se muestra arriba, todo parece normal hasta ahora. Sin embargo, al intentar usar estos objetos, sus diferencias se hacen evidentes rápidamente:

+ +
> "oco is: " + oco // Muestra "ocn is: [object Object]"
+
+> "ocn is: " + ocn // Arroja error: Cannot convert object to primitive value
+
+ +

Probar solo algunas de las funciones incorporadas más básicas muestra la magnitud del problema más claramente:

+ +
> alert(oco) // Muestra: [object Object]
+> alert(ocn) // Arroja error: Cannot convert object to primitive value
+
+> oco.toString() // Muestra [object Object]
+> ocn.toString() // Arroja error: ocn.toString is not a function
+
+> oco.valueOf() // Muestra{}
+> ocn.valueOf() // Arroja error: ocn.valueOf is not a function
+
+> oco.hasOwnProperty("p") // Muestra "true"
+> ocn.hasOwnProperty("p") // Arroja error: ocn.hasOwnProperty is not a function
+
+> oco.constructor // Muestra "Object() { [native code] }"
+> ocn.constructor // Muestra "undefined"
+
+ +

Como se dijo, estas diferencias pueden hacer que la depuración e incluso problemas aparentemente simples se pierdan rápidamente. Por ejemplo:

+ +

Una función simple de depuración:

+ +
// mostrar nombre de propiedad de nivel superior: pares de valores de un objeto dado
+function ShowProperties( b ){
+  for( var i in b ){  console.log( i + ": " + b[i] + "\n" )  }
+}
+ +

Resultados no tan simples: (especialmente si la captura silenciosa de errores había ocultado los mensajes de error)

+ +
ob={}; ob.po=oco; ob.pn=ocn; // crear un objeto compuesto usando los objetos de prueba de arriba como valores de propiedad
+
+> ShowProperties( ob ) // Muestra propiedades de nivel superior
+- po: [object Object]
+- Error: Cannot convert object to primitive value
+
+Tenga en cuenta que solo se muestra la primera propiedad.
+
+ +

(Pero si se crea el mismo objeto simplemente en un orden diferente, al menos en algunas implementaciones ...)

+ +
ob={}; ob.pn=ocn; ob.po=oco; // cree el mismo objeto compuesto nuevamente, pero cree las mismas propiedades en un orden diferente
+
+> ShowProperties( ob ) // Muestra propiedades de nivel superior
+- Error: Cannot convert object to primitive value
+
+Tenga en cuenta que ninguna propiedad se muestra.
+ +

Tenga en cuenta que un orden tan diferente puede surgir estáticamente a través de codificaciones fijas dispares, como aquí, pero también dinámicamente a través del orden en que se ejecutan dichas ramas de código de adición de propiedades en tiempo de ejecución, ya que depende de entradas y / o variables aleatorias. Por otra parte, el orden de iteración real no está garantizado, independientemente de cómo son agregados los miembros.

+ +

Algunas NO-soluciones

+ +

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

Algunas soluciones aceptables

+ +

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.

+ +

Polyfill

+ +

Este polyfill cubre el caso de uso principal  el cual es la creación de un nuevo objeto para el prototipo que ha sido escogido pero no toma el segundo argumento en cuenta.

+ +

Note that while the setting of null as [[Prototype]] is supported in the real ES5 Object.create, this polyfill cannot support it due to a limitation inherent in versions of ECMAScript lower than 5.

+ +
 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();
+    };
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.2.3.5', 'Object.create')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.create', 'Object.create')}}{{Spec2('ES2015')}}
{{SpecName('ESDraft', '#sec-object.create', 'Object.create')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
{{Compat("javascript.builtins.Object.create")}}
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/defineproperties/index.html b/files/es/web/javascript/reference/global_objects/object/defineproperties/index.html new file mode 100644 index 0000000000..3002dd200d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/defineproperties/index.html @@ -0,0 +1,194 @@ +--- +title: Object.defineProperties() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/defineProperties +tags: + - ECMAScript5 + - JavaScript + - JavaScript 1.8.5 + - Método(2) + - Objeto +translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperties +--- +
{{JSRef("Objetos_globales", "Object")}}
+ +

Sumario

+ +

El metodo Object.defineProperties() define nuevas o modifica propiedades existentes directamente en el objeto, retornando el objeto.

+ +

Sintáxis

+ +
Object.defineProperties(obj, propiedades)
+ +

Parámetros

+ +
+
obj
+
El objeto sobre el cual se crearán o modificaran sus propiedades.
+
propiedades
+
Un objeto cuyas propiedades enumerables propias consituyen descriptores para las propiedades a ser definidas o modificadas.
+
+ +

Descripción

+ +

Object.defineProperties, en escencia, define todas las propiedades correspondientes a las propiedades propias con capacidad de enumeración de props en el objeto objrops.

+ +

Ejemplo

+ +
Object.defineProperties(obj, {
+  "property1": {
+    value: true,
+    writable: true
+  },
+  "property2": {
+    value: "Hello",
+    writable: false
+  }
+  // etc. etc.
+});
+ +

Polyfill

+ +

Asumiendo una ejecución pristina del entorno con todos los nombres y propiedades referidas a sus valores iniciales, Object.defineProperties es casi completamente equivalente (note el comentario en isCallable) a la siguiente reimplementación de JavaScript:

+ +
function defineProperties(obj, properties) {
+  function convertToDescriptor(desc) {
+    function hasProperty(obj, prop) {
+      return Object.prototype.hasOwnProperty.call(obj, prop);
+    }
+
+    function isCallable(v) {
+      // NB: modify as necessary if other values than functions are callable.
+      return typeof v === "function";
+    }
+
+    if (typeof desc !== "object" || desc === null)
+      throw new TypeError("bad desc");
+
+    var d = {};
+
+    if (hasProperty(desc, "enumerable"))
+      d.enumerable = !!obj.enumerable;
+    if (hasProperty(desc, "configurable"))
+      d.configurable = !!obj.configurable;
+    if (hasProperty(desc, "value"))
+      d.value = obj.value;
+    if (hasProperty(desc, "writable"))
+      d.writable = !!desc.writable;
+    if ( hasProperty(desc, "get") ) {
+      var g = desc.get;
+
+      if (!isCallable(g) && g !== "undefined")
+        throw new TypeError("bad get");
+      d.get = g;
+    }
+    if ( hasProperty(desc, "set") ) {
+      var s = desc.set;
+      if (!isCallable(s) && 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;
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.2.3.7', 'Object.defineProperties')}}{{Spec2('ES5.1')}}Definición inicial. Implementada en JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.defineproperties', 'Object.defineProperties')}}{{Spec2('ES6')}} 
+ +

Compatibilidad de navegadores

+ +

Basado en Kangax's compat tables.

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaFirefox (Gecko)ChromeInternet ExplorerOperaSafari
Soporte básico{{CompatGeckoDesktop("2")}}5 (previous versions untested)911.605
+
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaFirefox Mobile (Gecko)AndroidIE MobileOpera MobileSafari Mobile
Soporte básico{{CompatGeckoMobile("2")}}{{CompatVersionUnknown}}{{CompatUnknown}}11.50{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/defineproperty/index.html b/files/es/web/javascript/reference/global_objects/object/defineproperty/index.html new file mode 100644 index 0000000000..f971d5a131 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/defineproperty/index.html @@ -0,0 +1,419 @@ +--- +title: Object.defineProperty() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/defineProperty +tags: + - ECMAScript5 + - JavaScript + - JavaScript 1.8.5 + - Método(2) + - Objeto +translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperty +--- +
{{JSRef("Global_Objects", "Object")}}
+ +

Resumen

+ +

El  método estático Object.defineProperty() define una nueva propiedad sobre un objeto, o modifica una ya existente, y devuelve el objeto modificado.

+ +
+

Nota: Ud. puede llamar a este método directamente mediante el constructor {{jsxref("Object")}} en vez de crear una instancia del tipo Object.

+
+ +

Sintaxis

+ +
Object.defineProperty(obj, prop, descriptor)
+ +

Parámetros

+ +
+
obj
+
El objeto sobre el cual se define la propiedad.
+
prop
+
El nombre de la propiedad a ser definida o modificada.
+
descriptor
+
El descriptor de la propiedad que está siendo definida o modificada.
+
+ +

Descripción

+ +

Este método permite añadir o modificar una propiedad en un objeto.

+ +

La adición normal de una propiedad a través de la asignación crea propiedades que aparecen durante la enumeración de propiedades en el bucle ({{jsxref("Sentencias/for...in", "for...in")}} o el método {{jsxref("Object.keys")}}), cuyos valores pueden modificarse y pudiendo incluso eliminar la propiedad del objeto mediante el método {{jsxref("Operadores/delete", "delete")}}.

+ +

Este método nos permite modificar el comportamiento por defecto de las propiedades. Es decir, nos permite definir una propiedad como no enumerable, no modificable o incluso evitar que pueda ser eliminada del objeto.

+ +

Existen dos tipos de descriptores: De datos y de acceso.  Un descriptor de datos define una propiedad que tiene un valor, el cual puede ser o no modificado. Un descriptor de acceso define una propiedad mediante un par de funciones getter-setter que describe como se obtiene o se modifica el contenido de dicha propiedad. Un descriptor debe de ser de uno de estos dos tipos; no puede ser ambos.

+ +

Ambos tipos de descriptores son objetos y comparten las siguientes claves opcionales:

+ +
+
configurable
+
true si y solo si el tipo de descriptor de propiedad puede modificarse y si la propiedad puede ser eliminada del correspondiente objeto.
+ Por defecto es false.
+
enumerable
+
true si y solo si dicha propiedad se muestra durante la enumeración de las propiedades del objeto correspondiente.
+ Por defecto es false.
+
+ +

Un descriptor de datos tiene además las siguientes claves opcionales:

+ +
+
value
+
El valor asociado a la propiedad. Puede ser cualquier tipo valido de JavaScript  (number, object, function, etc).
+ Por defecto es {{jsxref("Objetos_Globales/undefined", "undefined")}}.
+
writable
+
true Indica si el valor de la propiedad puede modificarse con el  {{jsxref("Operators/Assignment_Operators", "operador de asignación", "", 1)}}.
+ Defaults to false.
+
+ +

Un descriptor de acceso además tiene las siguientes claves opcionales:

+ +
+
get
+
Una función cuyo valor retornado será el que se use como valor de la propiedad.
+ Defaults to {{jsxref("Objetos_Globales/undefined", "undefined")}}.
+
set
+
Una función que recibe como único argumento el nuevo valor que se desea asignar a la propiedad y que devuelve el valor que se almacenará finalmente en el objeto.
+ Defaults to {{jsxref("Objetos_Globales/undefined", "undefined")}}.
+
+ +

Hay que tener en cuenta que estas opciones también pueden heredarse; es decir, las opciones de la propiedad se han podido establecer en el prototipo de una clase de la que hereda el objeto. De modo que si queremos asegurarnos unos valores por defecto tenemos tres opciones: fijar el {{jsxref("Object.prototype")}} con {{jsxref("Object.freeze")}}, definir todas las opciones explicitamente, o establecer a {{jsxref("Objetos_Globales/null", "null")}} la propiedad {{jsxref("Object.prototype.__proto__", "__proto__")}}.

+ +
// Usando __proto__
+Object.defineProperty(obj, 'key', {
+  __proto__: null, // no aceptar propiedades heredadas
+  value: 'static'  // no enumerable
+                   // no configurable
+                   // no modificable
+                   // como opciones por defecto
+});
+
+// Definiendo todo explicitamente
+Object.defineProperty(obj, 'key', {
+  enumerable: false,
+  configurable: false,
+  writable: false,
+  value: 'static'
+});
+
+// Reciclando el mismo objeto
+function withValue(value) {
+  var d = withValue.d || (
+    withValue.d = {
+      enumerable: false,
+      writable: false,
+      configurable: false,
+      value: null
+    }
+  );
+  d.value = value;
+  return d;
+}
+// ... y ...
+Object.defineProperty(obj, 'key', withValue('static'));
+
+// Si está disponible freeze, previene añadir o eliminar
+//del prototipo del objeto las propiedades
+// (value, get, set, enumerable, writable, configurable)
+(Object.freeze || Object)(Object.prototype);
+
+ +

Ejemplos

+ +

Si quiere ver algunos ejemplos de utilización del método Object.defineProperty con una sintaxis tipo binary-flags, vea ejemplos adicionales.

+ +

Ejemplo: Creando una propiedad

+ +

Cuando la propiedad especificada no existe en el objeto, Object.defineProperty() crea una nueva. En el descriptor pueden omitirse campos, a los cuales se les asignará el valor por defecto. A todos los que sean de tipo Booleano se les asignará el valor falso. Los campos value, get y set se establecerán por defecto a {{jsxref("Objetos_Globales/undefined", "undefined")}}. Una propiedad definida sin indicar  get/set/value/writable es denominada “genérica” y  “tipificada” como un descriptor de datos.

+ +
var o = {}; // Creates a new object
+
+// Example of an object property added with defineProperty with a data property descriptor
+Object.defineProperty(o, 'a', {
+  value: 37,
+  writable: true,
+  enumerable: true,
+  configurable: true
+});
+// 'a' property exists in the o object and its value is 37
+
+// Example of an object property added with defineProperty with an accessor property descriptor
+var bValue = 38;
+Object.defineProperty(o, 'b', {
+  get: function() { return bValue; },
+  set: function(newValue) { bValue = newValue; },
+  enumerable: true,
+  configurable: true
+});
+o.b; // 38
+// 'b' property exists in the o object and its value is 38
+// The value of o.b is now always identical to bValue, unless o.b is redefined
+
+// You cannot try to mix both:
+Object.defineProperty(o, 'conflict', {
+  value: 0x9f91102,
+  get: function() { return 0xdeadbeef; }
+});
+// throws a TypeError: value appears only in data descriptors, get appears only in accessor descriptors
+
+ +

Ejemplo: Modificando una propiedad

+ +

Cuando la propiedad realmente existe, Object.defineProperty() intenta modificar la propiedad de acuerdo a los valores en la descripción y la configuración actual del objeto. Si la descripción antigüa tenía su atributo de configuración establecido en false (la propiedad se dice "sin capacidad de configuración"), entonces ningún atributo además de los que tienen capacidad de escritura pueden ser cambiados. En ese caso, no es posible cambiar hacía atras o hacía delante entre datos y métodos de acceso de tipos de propiedades.

+ +

Si una propiedad no tiene capacidad de configuración, su atributo writabble solo puede ser cambiada to false.

+ +

Un {{jsxref("Global_Objects/TypeError", "TypeError")}} es arrojado cuando se intenta cambiar las propiedades de atributos sin capacidad de configuración (adeḿas del atributo writable) a menos que el valor actual y el valor nuevo sean los mismos.

+ +

Atributo writable

+ +

Cuando la propiedad de un atributo writable es establecido to false, la propiedad se dice esta "sin capacidad de escritura". No puede ser reasignada.

+ +
var o = {}; // Crea un objeto nuevo
+
+Object.defineProperty(o, 'a', {
+  value: 37,
+  writable: false
+});
+
+console.log(o.a); // logs 37
+o.a = 25; // Ningún error arrojado (lo tiraría en modo estricto, aún si el valor fuera el mismo)
+console.log(o.a); // muestra 37. La asignación no funcionó
+
+ +

Como es visto en el ejemplo anterior, intentar escribir en una propiedad "sin capacidad de  escritura" no la cambia pero sí arroja un error.

+ +

Atributo enumerable

+ +

El atributo de la propiedad enumerable se define si la propiedad aparece en un ciclo {{jsxref("Statements/for...in", "for...in")}} y {{jsxref("Object.keys()")}} o no.

+ +
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 defaults to false
+o.d = 4; // enumerable defaults to true when creating a property by setting it
+
+for (var i in o) {
+  console.log(i);
+}
+// logs 'a' and 'd' (in undefined order)
+
+Object.keys(o); // ['a', 'd']
+
+o.propertyIsEnumerable('a'); // true
+o.propertyIsEnumerable('b'); // false
+o.propertyIsEnumerable('c'); // false
+
+ +

Atributo configurable

+ +

El atributo configurable define si la propiedad puede ser eliminada del objeto, y si sus atributos (excepto writable) pueden ser modificados

+ +
var o = {};
+Object.defineProperty(o, 'a', {
+  get: function() { return 1; },
+  configurable: false
+});
+
+Object.defineProperty(o, 'a', { configurable: true }); // arroja TypeError
+Object.defineProperty(o, 'a', { enumerable: true }); //  arroja  TypeError
+Object.defineProperty(o, 'a', { set: function() {} }); //  arroja  TypeError (set estaba definido como undefined)
+Object.defineProperty(o, 'a', { get: function() { return 1; } }); // arroja TypeError (incluso aunque los get hacen lo mismo)
+Object.defineProperty(o, 'a', { value: 12 }); // arroja TypeError
+
+console.log(o.a); // logs 1
+delete o.a; // No hace nada
+console.log(o.a); // logs 1
+
+ +

Si o.a tuviese configurable  a true, no se habrían arrojado errores y la propiedad habría sido eliminada. 

+ +

Ejemplo: Añadiendo propiedades y valores por defecto

+ +

Es importante tener en cuenta la forma en la se aplican los valores por defecto de los atributos. Suele haber diferencias entre simplemente usar la notación con '.' y usar Object.defineProperty(), como se muestra en el siguiente ejemplo:

+ +
var o = {};
+
+o.a = 1;
+// es equivalente a :
+Object.defineProperty(o, 'a', {
+  value: 1,
+  writable: true,
+  configurable: true,
+  enumerable: true
+});
+
+
+// Sin embargo,
+Object.defineProperty(o, 'a', { value: 1 });
+// es equivalente a :
+Object.defineProperty(o, 'a', {
+  value: 1,
+  writable: false,
+  configurable: false,
+  enumerable: false
+});
+
+ +

Ejemplo: Setters y Getters a medida

+ +

Example below shows how to implement a self-archiving object. When temperature property is set, the archive array gets a log entry.

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

or

+ +
var pattern = {
+    get: function () {
+        return 'I always return this string, whatever you have assigned';
+    },
+    set: function () {
+        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
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES5.1', '#sec-15.2.3.6', 'Object.defineProperty')}}{{Spec2('ES5.1')}}Initial definition. Implemented in JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.defineproperty', 'Object.defineProperty')}}{{Spec2('ES6')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaFirefox (Gecko)ChromeInternet ExplorerOperaSafari
Soporte Básico{{CompatGeckoDesktop("2")}}{{CompatChrome("5")}} (versiones previas sin testear){{CompatIE("9")}} ({{CompatIE("8")}}, pero solo con objetos DOM y con muchos comportamientos no estándares  See below.){{CompatOpera("11.60")}}{{CompatSafari("5.1")}} ({{CompatSafari("5")}}, but not on DOM objects)
+
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaFirefox Mobile (Gecko)AndroidIE MobileOpera MobileSafari Mobile
Soporte Básico{{CompatGeckoMobile("2")}}{{CompatVersionUnknown}}{{CompatIE("9")}} and above{{CompatOperaMobile("11.50")}}{{CompatVersionUnknown}}
+
+ +

Based on Kangax's compat tables.

+ +

Redefining the length property of an Array object

+ +

It is possible to redefine the {{jsxref("Array.length", "length")}} property of arrays, subject to the usual redefinition restrictions. (The {{jsxref("Array.length", "length")}} property is initially non-configurable, non-enumerable, and writable. Thus on an unaltered array it is possible to change the {{jsxref("Array.length", "length")}} property's value, or to make it non-writable. It is not allowed to change its enumerability or configurability, or if it is non-writable to change its value or writability.) However, not all browsers permit this redefinition.

+ +

Firefox 4 through 22 will throw a {{jsxref("Global_Objects/TypeError", "TypeError")}} on any attempt whatsoever (whether permitted or not) to redefine the {{jsxref("Array.length", "length")}} property of an array.

+ +

Versions of Chrome which implement Object.defineProperty() in some circumstances ignore a length value different from the array's current {{jsxref("Array.length", "length")}} property. In some circumstances changing writability seems to silently not work (and not throw an exception). Also, relatedly, some array-mutating methods like {{jsxref("Array.prototype.push")}} don't respect a non-writable length.

+ +

Versions of Safari which implement Object.defineProperty() ignore a length value different from the array's current {{jsxref("Array.length", "length")}} property, and attempts to change writability execute without error but do not actually change the property's writability.

+ +

Only Internet Explorer 9 and later, and Firefox 23 and later, appear to fully and correctly implement redefinition of the {{jsxref("Array.length", "length")}} property of arrays. For now, don't rely on redefining the {{jsxref("Array.length", "length")}} property of an array to either work, or to work in a particular manner. And even when you can rely on it, there's really no good reason to do so.

+ +

Particularidades de Internet Explorer 8

+ +

El método Object.defineProperty() de Internet Explorer sólo puede ser usado en objetos del DOM. Algunas explicaciones al respecto:

+ + + +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/entries/index.html b/files/es/web/javascript/reference/global_objects/object/entries/index.html new file mode 100644 index 0000000000..98aff1178a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/entries/index.html @@ -0,0 +1,161 @@ +--- +title: Object.entries() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/entries +translation_of: Web/JavaScript/Reference/Global_Objects/Object/entries +--- +
{{JSRef}}
+ +

El método Object.entries() devuelve una matriz de pares propios de una propiedad enumerable [key, value] de un objeto dado, en el mismo orden que es proporcionado por {{jsxref("Sentencias/for...in", "for...in")}} (La diferencia es que un bucle for-in enumera las propiedades en la cadena de prototipos).

+ +

Sintaxis

+ +
Object.entries(obj)
+ +

Parámetros

+ +
+
obj
+
The object whose enumerable own property [key, value] pairs are to be returned.
+
+ +

Valor de retorno

+ +

An array of the given object's own enumerable property [key, value] pairs.

+ +

Descripción

+ +

Object.entries() returns an array whose elements are arrays corresponding to the enumerable property [key, value] pairs found directly upon object. The ordering of the properties is the same as that given by looping over the property values of the object manually.

+ +

Ejemplos

+ +
var obj = { foo: 'bar', baz: 42 };
+console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]
+
+// array like object
+var obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]
+
+// array like object with random key ordering
+var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.entries(an_obj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]
+
+// getFoo is property which isn't enumerable
+var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
+my_obj.foo = 'bar';
+console.log(Object.entries(my_obj)); // [ ['foo', 'bar'] ]
+
+// non-object argument will be coerced to an object
+console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]
+
+// iterate through key-value gracefully
+var obj = {a: 5, b: 7, c: 9};
+for (var [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"
+});
+
+ +

Converting an Object to a Map

+ +

The {{jsxref("Map", "new Map()")}} constructor accepts an iterable of entries. With Object.entries, you can easily convert from {{jsxref("Object")}} to {{jsxref("Map")}}:

+ +
var obj = { foo: 'bar', baz: 42 };
+var map = new Map(Object.entries(obj));
+console.log(map); // Map { foo: "bar", baz: 42 }
+ +

Polyfill

+ +

To add compatible Object.entries support in older environments that do not natively support it, you can find a Polyfill in the tc39/proposal-object-values-entries or in the es-shims/Object.entries repositories.

+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ESDraft', '#sec-object.entries', 'Object.entries')}}{{Spec2('ESDraft')}}Initial definition.
{{SpecName('ES8', '#sec-object.entries', 'Object.entries')}}{{Spec2('ES8')}}
+ +

Browser compatibility

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(54)}}{{CompatVersionUnknown}}{{CompatGeckoDesktop(47)}}{{CompatNo}}{{CompatNo}}{{CompatSafari(10.1)}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroid WebviewChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatChrome(54)}}{{CompatChrome(54)}}{{CompatVersionUnknown}}{{CompatGeckoMobile(47)}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/freeze/index.html b/files/es/web/javascript/reference/global_objects/object/freeze/index.html new file mode 100644 index 0000000000..890d0d07b4 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/freeze/index.html @@ -0,0 +1,174 @@ +--- +title: Object.freeze() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/freeze +translation_of: Web/JavaScript/Reference/Global_Objects/Object/freeze +--- +
{{JSRef}}
+ +

El método Object.freeze() congela un objeto, es decir: impide que se le agreguen nuevas propiedades; impide que se puedan eliminar las propiedades ya existentes; impide que dichas propiedades, o su capacidad de enumeración, configuración, o escritura, puedan ser modificadas; impide también que se pueda modificar su prototipo. El método devuelve el objeto recibido.

+ +
{{EmbedInteractiveExample("pages/js/object-freeze.html")}}
+ + + +

Sintaxis

+ +
Object.freeze(obj)
+ +

Parámetros

+ +
+
obj
+
El objeto a congelar.
+
+ +

Valor devuelto

+ +

El mismo objeto

+ +

Descripción

+ +

Nada puede ser agregado o removido de las propiedades establecidas de un objeto congelado. Cualquier intento de hacerlo fallará, ya sea de manera silenciosa o arrojando una excepción {{jsxref("TypeError")}} (más comunmente, pero no exclusivamente, en {{jsxref("Strict_mode", "strict mode", "", 1)}}).

+ +

Los valores no pueden ser cambiados por propiedades de datos. Propiedades de acceso (getters y setters) funcionan igual (y aún dan la ilusión de que estas cambiando el valor). Note que los valores que son objetos aún pueden ser modificados, a menos que esten congelados tambien.

+ +

La función retorna el mismo objeto pasado en ella, no crea una copia congelada

+ +

Ejemplos

+ +

Congelando Objetos

+ +
var obj = {
+  prop: function() {},
+  foo: 'bar'
+};
+
+// Nuevas propiedades pueden ser agregadas,
+// propiedades existentes pueden cambiar o removerse
+obj.foo = 'baz';
+obj.lumpy = 'woof';
+delete obj.prop;
+
+// Ambos, el objeto pasado como argumento tanto como el que se regresa
+// serán congelados
+// Es innecesario salvar el objeto que es regresado en orden de congelar
+// el original.
+var o = Object.freeze(obj);
+
+assert(Object.isFrozen(obj) === true);
+
+// Ahora cualquier cambio fallará
+obj.foo = 'quux'; // No hace nada de manera silenciosa
+obj.quaxxor = 'the friendly duck'; // No agrega una nueva propiedad, de manera silenciosa
+
+// ...y en modo estrico tal intento arrojará TypeErrors
+function fail(){
+  'use strict';
+  obj.foo = 'sparky'; // arroja un TypeError
+  delete obj.quaxxor; // arroja un TypeError
+  obj.sparky = 'arf'; // arroja un TypeError
+}
+
+fail();
+
+// Los intentos utilizando Object.defineProperty tambien arrojarán una excepción...
+Object.defineProperty(obj, 'ohai', { value: 17 }); // arroja un TypeError
+Object.defineProperty(obj, 'foo', { value: 'eit' }); // arroja un TypeError
+
+// Es imposible cambiar un prototipo
+// Estos ejemplos retornan un error TypeError
+Object.setPrototype(obj,{x:20})
+obj.__proto__ = {x:20}
+
+ +

El siguiente ejemplo muestra que los valores de objetos en un objeto congelado pueden ser mutados (la congelación es superficial).

+ +
obj1 = {
+  internal: {}
+};
+
+Object.freeze(obj1);
+obj1.internal.a = 'aValue';
+
+obj1.internal.a // 'aValue'
+
+// Para hacer obj completamente inmutable, congelamos cada objeto en obj.
+// Para hacerlo, usamos esta función.
+function deepFreeze(obj) {
+
+  // Recuperamos el nombre de las propiedades en obj
+  var propNames = Object.getOwnPropertyNames(obj);
+
+  // Congelamos las propiedades antes de congelar a obj
+  propNames.forEach(function(name) {
+    var prop = obj[name];
+
+    // Si la propiedad es un objeto, llamaremos a deepFreezze para que congele las propiedades de ese objeto
+    if (typeof prop == 'object' && prop !== null && !Object.isFrozen(prop))
+      deepFreeze(prop);
+  });
+
+  // congelamos a obj
+  return Object.freeze(obj);
+}
+
+obj2 = {
+  internal: {}
+};
+
+deepFreeze(obj2);
+obj2.internal.a = 'anotherValue';
+obj2.internal.a; // undefined
+
+ +

Notas

+ +

En ES5, si el argumento pasado a este método no es un objeto (un primitivo), entonces causará un {{jsxref("TypeError")}}. En ES6, un argumento no-objeto será tratado como si fuera un objeto congelado cualquiera, simplemente lo regresa.

+ +
> Object.freeze(1)
+TypeError: 1 is not an object // Código ES5
+
+> Object.freeze(1)
+1                             // Código ES6
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES5.1', '#sec-15.2.3.9', 'Object.freeze')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.freeze', 'Object.freeze')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.freeze', 'Object.freeze')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ +

{{Compat("javascript.builtins.Object.freeze")}}

+ +

Mira también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/fromentries/index.html b/files/es/web/javascript/reference/global_objects/object/fromentries/index.html new file mode 100644 index 0000000000..023cc5f8ca --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/fromentries/index.html @@ -0,0 +1,106 @@ +--- +title: Object.fromEntries() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/fromEntries +tags: + - JavaScript + - Objeto + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Object/fromEntries +--- +
{{JSRef}}
+ +

El método Object.fromEntries() transforma una lista de pares con [clave-valor] en un objeto.

+ +
{{EmbedInteractiveExample("pages/js/object-fromentries.html")}}
+ + + +

Sintaxis

+ +
Object.fromEntries(iterable);
+ +

Parámetros

+ +
+
iterador
+
Un iterador como {{jsxref("Array")}}, {{jsxref("Map")}} u otros objetos que implementen el protocolo iterable.
+
+ +

Valor de retorno

+ +

Un nuevo objeto cuyas propiedades son dadas por las entradas del iterador.

+ +

Descripción

+ +

El método Object.fromEntries() toma una lista de pares con clave-valor y devuelve un nuevo objeto cuyas propiedades son dadas por éstas entradas. El argumento iterador se espera que sea un objeto que implemente un método @@iterator, que devuelve un objeto iterador, que produce un objeto tipo array de dos elementos, donde el primer elemento es un valor que se usará como la clave de la propiedad, y el segundo elemento es el valor a asociar con esa clave de propiedad.

+ +

Object.fromEntries() realiza lo inverso de {{jsxref("Object.entries()")}}.

+ +

Ejemplos

+ +

Convirtiendo un Map en un Objeto

+ +

Con Object.fromEntries, puedes convertir de un {{jsxref("Map")}} a un {{jsxref("Object")}}:

+ +
const map = new Map([ ['foo', 'bar'], ['baz', 42] ]);
+const obj = Object.fromEntries(map);
+console.log(obj); // { foo: "bar", baz: 42 }
+
+ +

Convirtiendo un Arreglo en un Objeto

+ +

Con Object.fromEntries, puedes convertir de un {{jsxref("Array")}} a un {{jsxref("Object")}}:

+ +
const arr = [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ];
+const obj = Object.fromEntries(arr);
+console.log(obj); // { 0: "a", 1: "b", 2: "c" }
+
+ +

Transformación de Objetos

+ +

Con Object.fromEntries, su método inverso {{jsxref("Object.entries()")}}, y array métodos de manipulaciín de arreglos, puedes transformar objetos así:

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

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstado
{{SpecName('ESDraft', '#sec-object.fromentries', 'Object.fromEntries')}}Etapa 4
+ +

Compatibilidad de navegadores

+ + + +

{{Compat("javascript.builtins.Object.fromEntries")}}

+ +

Véase tambien

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html b/files/es/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html new file mode 100644 index 0000000000..fb2eaf68da --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html @@ -0,0 +1,161 @@ +--- +title: Object.getOwnPropertyDescriptor() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/getOwnPropertyDescriptor +tags: + - ECMAScript5 + - JavaScript + - Método(2) + - Objeto +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor +--- +
{{JSRef}}
+ +

El método Object.getOwnPropertyDescriptor() regresa como descripción de propiedad para una propiedad propia (eso es, una presente directamente en el objeto, no presente por la fuerza a través de la cadena de prototipo del objeto) de un objeto dado.

+ +

Síntaxis

+ +
Object.getOwnPropertyDescriptor(obj, prop)
+ +

Parametros

+ +
+
obj
+
El objeto en el que se busca la propiedad.
+
prop
+
El nombre de la propiedad del cuál se obtendrá la descripción.
+
+ +

Valor de retorno

+ +

Un descriptor de propiedad de una propiedad dada si existe en el objeto,  {{jsxref("undefined")}} en cualquier otro caso.

+ +

Descripción

+ +

Éste método permite la examinación precisa de la descripción de una propiedad. Una propiedad en JavaScript consiste de el nombre de una cadena de valor y un descriptor de propiedad. Información más detallada acerca de los tipos de descripciones y sus atributos puede ser encontrada en {{jsxref("Object.defineProperty()")}}.

+ +

Una descripción de propiedad es un registro con alguno de los siguientes atributos:

+ +
+
value
+
El valor asociado con la propiedad (descriptores de datos unicamente).
+
writable
+
true si y solo si el valor asociado con la propiedad puede ser cambiada (descriptores de datos unicamente).
+
get
+
Una función que sirve como método de acceso para la propiedad, o {{jsxref("undefined")}} si no hay método de acceso (métodos de acceso de descripciones unicamente).
+
set
+
Una función que sirve como método de establecimiento para la propieda, o {{jsxref("undefined")}} si no hay método de establecimiento (métodos de establecimiento de descripciones unicamente).
+
configurable
+
true si y solo si el tipo de ésta descripción de propiedad puede ser cambiada y si la propiedad puede ser eliminada del objeto correspondiente.
+
enumerable
+
true si y solo si ésta propiedad aparece durante la enumeración de las propiedades del objeto correspondiente.
+
+ +

Ejemplos

+ +
var o, d;
+
+o = { get foo() { return 17; } };
+d = Object.getOwnPropertyDescriptor(o, 'foo');
+// d is { configurable: true, enumerable: true, get: /* la función de acceso */, set: undefined }
+
+o = { bar: 42 };
+d = Object.getOwnPropertyDescriptor(o, 'bar');
+// d is { configurable: true, enumerable: true, value: 42, writable: true }
+
+o = {};
+Object.defineProperty(o, 'baz', { value: 8675309, writable: false, enumerable: false });
+d = Object.getOwnPropertyDescriptor(o, 'baz');
+// d es { value: 8675309, writable: false, enumerable: false, configurable: false }
+
+ +

Notas

+ +

En ES5, si el primer argumento que se le pasa a éste método no es un objeto (primitivo), entonces causará un {{jsxref("TypeError")}}. En ES6, un no-objeto pasado como primer argumento será convertido (coerción) a un objeto en primera instancia.

+ +
Object.getOwnPropertyDescriptor("foo", 0);
+// TypeError: "foo" is not an object  // Código ES5
+
+Object.getOwnPropertyDescriptor("foo", 0);
+// {configurable:false, enumerable:true, value:"f", writable:false}  // Código ES6
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.2.3.3', 'Object.getOwnPropertyDescriptor')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.getownpropertydescriptor', 'Object.getOwnPropertyDescriptor')}}{{Spec2('ES6')}}
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("5")}}{{CompatGeckoDesktop("2")}}{{CompatIE("8")}}{{CompatOpera("12")}}{{CompatSafari("5")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html b/files/es/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html new file mode 100644 index 0000000000..9585fa80e8 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html @@ -0,0 +1,117 @@ +--- +title: Object.getOwnPropertyDescriptors() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/getOwnPropertyDescriptors +tags: + - JavaScript + - Objeto + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors +--- +
{{JSRef}}
+ +

El métodoObject.getOwnPropertyDescriptors() regresa todos los descriptores de propiedad propios de un objeto dado.

+ +
{{EmbedInteractiveExample("pages/js/object-getownpropertydescriptors.html")}}
+ +

Sintáxis

+ +
Object.getOwnPropertyDescriptors(obj)
+ +

Parámetros

+ +
+
obj
+
El objeto para el cual obtener todos los descriptores de propiedad.
+
+ +

Valores devueltos

+ +

Un objeto que contiene todos los descriptores de propiedad propios de un objeto.

+ +

Descripción

+ +

Este método permite la examinación de la descripción precisa de todas las propiedades de un objeto. Una propiedad en JavaScript consiste en un valor-cadena nombre y un descriptor de propiedad. Más información acerca de los tipos de descriptores de propiedad y sus atributos pueden ser encontrados en {{jsxref("Object.defineProperty()")}}.

+ +

Un descriptor de propiedad es un registro con algunos de los siguientes atributos:

+ +
+
value
+
El valor asociado con la propiedad (solo descriptores de datos).
+
writable
+
true si y solo si el valor asociado con la propiedad puede ser cambiado (solo descriptores de datos).
+
get
+
Un función que sirve como un getter para la propiedad, o {{jsxref("undefined")}} si no hay getter (solo descriptores de acceso).
+
set
+
Una función que sirve como un setter para la propiedad, o {{jsxref("undefined")}} si no hay setter (solo descriptores de acceso).
+
configurable
+
true si y solo si el tipo de este descriptor de propiedad puede ser cambiado y si la propiedad puede ser borrada de el objeto correspondiente.
+
enumerable
+
true si y solo si esta propiedad aparece durante la enumeración de las propiedad en el objeto correspondiente.
+
+ +

Ejemplos

+ +

Creando un clon superficial

+ +

Mientras el método {{jsxref("Object.assign()")}} solo copiará las propiedades enumerables y propias de un objeto fuente a un objeto destino, puedes usar este método y {{jsxref("Object.create()")}} para una copia superficial entre dos objetos desconocidos:

+ +
Object.create(
+  Object.getPrototypeOf(obj),
+  Object.getOwnPropertyDescriptors(obj)
+);
+
+ +

Creando una subclase

+ +

Una manera típica de crear una subclase es definir la subclase, establecer su prototipo a una instancia de la superclase, y después definir propiedades en esa instancia. Esto puede ponerse incómodo especialmente por los getters y setters. En cambio, tú puedes usar este código para establecer el prototipo:

+ +
function superclass() {}
+superclass.prototype = {
+  // Define tus métodos y propiedades aquí
+};
+function subclass() {}
+subclass.prototype = Object.create(
+  superclass.prototype,
+  {
+    // Define tus métodos y propiedades aquí
+  }
+);
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ESDraft', '#sec-object.getownpropertydescriptors', 'Object.getOwnPropertyDescriptors')}}{{Spec2('ESDraft')}}Definición inicial en ECMAScript 2017.
{{SpecName('ES2017', '#sec-object.getownpropertydescriptors', 'Object.getOwnPropertyDescriptors')}}{{Spec2('ES2017')}} 
+ +

Browser compatibility

+ +
+ + +

{{Compat("javascript.builtins.Object.getOwnPropertyDescriptors")}}

+
+ +

Ver también:

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/getownpropertynames/index.html b/files/es/web/javascript/reference/global_objects/object/getownpropertynames/index.html new file mode 100644 index 0000000000..5c3819045a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/getownpropertynames/index.html @@ -0,0 +1,163 @@ +--- +title: Object.getOwnPropertyNames() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/getOwnPropertyNames +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames +--- +
+ {{JSRef("Global_Objects", "Object")}}
+

Resumen

+

El método Object.getOwnPropertyNames() devuelve un array con todas las propiedades (numerables o no) encontradas en un objeto dado.

+

Sintaxis

+
Object.getOwnPropertyNames(obj)
+

Parámetros

+
+
+ obj
+
+ El objeto cuyas propiedades directas, numerables y no-numerables, serán devueltas.
+
+

Descripción

+

Object.getOwnPropertyNames devuelve un array cuyos elementos son strings correspondientes a cada una de las propiedades encontradas directamente en obj. El orden de las propiedades numerables en el array coincide con el expuesto para for...in loop (o para {{jsxref("Object.keys")}}) con respecto a las propiedades del object. El orden de las propiedades no-numerables del array, y de éstas respecto a las numerables, no está definido.

+

Ejemplos

+
var arr = ["a", "b", "c"];
+print(Object.getOwnPropertyNames(arr).sort()); // imprime "0,1,2,length"
+
+// Objeto similar a Array
+var obj = { 0: "a", 1: "b", 2: "c"};
+print(Object.getOwnPropertyNames(obj).sort()); // imprime "0,1,2"
+
+// Imprime nombres de variables y valores usando Array.forEach
+Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
+  print(val + " -> " + obj[val]);
+});
+// imprime
+// 0 -> a
+// 1 -> b
+// 2 -> c
+
+// propiedad no-numerable
+var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; }, enumerable: false } });
+my_obj.foo = 1;
+
+print(Object.getOwnPropertyNames(my_obj).sort()); // imprime "foo, getFoo"
+
+

Si se quiere solo las propiedades numerables, ver {{jsxref("Object.keys")}} o usar un for...in loop (aunque esto devolvería propiedades numerables no directas del objeto pertenecientes a la cadena de prototype a la que pertenezca, a menos que finalmente se filtre con hasOwnProperty()).

+

Items de la cadena prototype no se listan:

+
function ParentClass () {
+}
+ParentClass.prototype.inheritedMethod = function () {
+};
+
+function ChildClass () {
+  this.prop = 5;
+  this.method = function () {};
+}
+ChildClass.prototype = new ParentClass;
+ChildClass.prototype.prototypeMethod = function () {
+};
+
+alert(
+  Object.getOwnPropertyNames(
+    new ChildClass() // ["prop", "method"]
+  )
+)
+
+

Get Non-Enumerable Only

+

Aquí se usa la función Array.prototype.filter para quitar las keys numerables (obtenidas con Object.keys) de una lista con todas las keys (obtenida con Object.getOwnPropertynames) dejando solo las no-numerables.

+
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) {
+    //no encontrada en las keys de enum_only, por lo que se trata de una key numerable, se devuelve true para mantenerla en filter
+    return true;
+  } else {
+    return false;
+  }
+});
+
+console.log(nonenum_only);
+
+

Especificaciones

+ + + + + + + + + + + + + + + + + + +
EspecificaciónStatusComentario
{{SpecName('ES5.1', '#sec-15.2.3.4', 'Object.getOwnPropertyNames')}}{{Spec2('ES5.1')}}Initial definition.
+ Implemented in JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.getownpropertynames', 'Object.getOwnPropertyNames')}}{{Spec2('ES6')}} 
+

 Compatibilidad con Navegadores

+
+ {{CompatibilityTable}}
+
+ + + + + + + + + + + + + + + + + + + +
FeatureFirefox (Gecko)ChromeInternet ExplorerOperaSafari
Basic support4 (2.0)59125
+
+
+ + + + + + + + + + + + + + + + + + + +
FeatureFirefox Mobile (Gecko)AndroidIE MobileOpera MobileSafari Mobile
Basic support{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+

Based on Kangax's compat table.

+

SpiderMonkey-specific notes

+ +

Ver también

+ diff --git a/files/es/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html b/files/es/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html new file mode 100644 index 0000000000..cf8be23f59 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html @@ -0,0 +1,123 @@ +--- +title: Object.getOwnPropertySymbols() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/getOwnPropertySymbols +tags: + - ECMAScript6 + - Experimental + - JavaScript + - Método(2) + - Objeto +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols +--- +
{{JSRef}}
+ +

El método Object.getOwnPropertySymbols() regresa una colección de todos las propiedades de los simbolos encontrados directamente en un objeto dado.

+ +

Síntaxis

+ +
Object.getOwnPropertySymbols(obj)
+ +

Parametros

+ +
+
obj
+
El objeto del cual los simbolos de propiedades son devueltos.
+
+ +

Descripción

+ +

Similar a {{jsxref("Object.getOwnPropertyNames()")}}, puedes obtener todas las propiedades de simbolos de un objeto dado como una colección de simbolos. Note que {{jsxref("Object.getOwnPropertyNames()")}} no contiene en sí mismo las propiedades de simbolos de un objeto y solo contiene las propiedades de cadenas.

+ +

Cómo todos los objetos no tienen inicialmente propiedades simbolos propios, Object.getOwnPropertySymbols() regresa una colección vacia a menos que tengas propiedades de simbolos establecidas en tu objeto.

+ +

Ejemplos

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

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-object.getownpropertysymbols', 'Object.getOwnPropertySymbols')}}{{Spec2('ES6')}}Definición inicial.
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome(38)}}{{CompatGeckoDesktop("36.0")}}{{CompatNo}}259
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico5.1{{CompatChrome(38)}}{{CompatGeckoMobile("36.0")}}{{CompatNo}}259
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/getprototypeof/index.html b/files/es/web/javascript/reference/global_objects/object/getprototypeof/index.html new file mode 100644 index 0000000000..a9b50ec2ec --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/getprototypeof/index.html @@ -0,0 +1,137 @@ +--- +title: Object.getPrototypeOf() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/getPrototypeOf +tags: + - ECMAScript5 + - JavaScript + - Objeto + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf +--- +
{{JSRef("Global_Objects", "Object")}}
+ +

Resumen

+ +

El método Object.getPrototypeOf() devuelve el prototipo (es decir, el valor de la propiedad interna [[Prototype]]) del objeto especificado.

+ +

Sintaxis

+ +
Object.getPrototypeOf(obj)
+ +

Parámetros

+ +
+
obj
+
El objeto cuyo prototipo va a ser devuelto.
+
+ +

Valor Devuelto

+ +

El prototipo del objeto dado. Si no existen propiedades heredadas se devolverá {{jsxref("null")}}.

+ +

Ejemplos

+ +
var proto = {};
+var obj= Object.create(proto);
+Object.getPrototypeOf(obj) === proto; // true
+
+ +

Notas

+ +

En ES5, lanzará una excepción {{jsxref("Global_Objects/TypeError", "TypeError")}} si el parámetro obj no es un objeto. en ES6, El parámetro será forzado a un {{jsxref("Global_Objects/Object", "Object")}}.

+ +
> Object.getPrototypeOf('foo')
+TypeError: "foo" is not an object  // ES5 code
+> Object.getPrototypeOf('foo')
+String.prototype                   // ES6 code
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.2.3.2', 'Object.getPrototypeOf')}}{{Spec2('ES5.1')}}Definición inicial.
{{SpecName('ES6', '#sec-object.getprototypeof', 'Object.getProtoypeOf')}}{{Spec2('ES6')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("5")}}{{CompatGeckoDesktop("1.9.1")}}{{CompatIE("9")}}{{CompatOpera("12.10")}} (tal vez en las últimas versiones){{CompatSafari("5")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Based on Kangax's compat table.

+ +

Notas espécificas sobre Opera

+ +

A pesar de que las versiones anteriores de opera no soportan aun Object.getPrototypeOf(), Opera soporta la propiedad no estándar {{jsxref("Object.proto", "__proto__")}} desde Opera 10.50.

+ +

Mira también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/hasownproperty/index.html b/files/es/web/javascript/reference/global_objects/object/hasownproperty/index.html new file mode 100644 index 0000000000..d84e5d6a52 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/hasownproperty/index.html @@ -0,0 +1,186 @@ +--- +title: Object.prototype.hasOwnProperty() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/hasOwnProperty +tags: + - JavaScript + - Method + - Object + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty +--- +
{{JSRef("Objetos_globales", "Object")}}
+ +

Resumen

+ +

El método hasOwnProperty() devuelve un booleano indicando si el objeto tiene la propiedad especificada.

+ +

Sintaxis

+ +
obj.hasOwnProperty(prop)
+ +

Parámetros

+ +
+
prop
+
El nombre de la propiedad a buscar.
+
+ +

Descripción

+ +

Todo objeto descendiente de Object hereda el método hasOwnProperty. Este método puede ser usando para determinar si un objeto tiene la propiedad especificada como una propiedad directa de ese objeto; a diferencia del operador {{jsxref("Operators/in", "in")}}, este método no verifica la cadena prototipo del objeto.

+ +

Ejemplos

+ +

Ejemplo: usar hasOwnProperty para comprobar la existencia de una propiedad

+ +

El siguiente ejemplo determina si el objeto o contiene una propiedad llamada prop:

+ +
o = new Object();
+o.prop = 'exists';
+
+function changeO() {
+  o.newprop = o.prop;
+  delete o.prop;
+}
+
+o.hasOwnProperty('prop');   // returns true
+changeO();
+o.hasOwnProperty('prop');   // returns false
+ +

Ejemplo: Directo versus propiedades heredadas

+ +

El siguiente ejemplo diferencia entre propiedades directas y propiedades heredadas a través de la cadena prototype:

+ +
o = new Object();
+o.prop = 'exists';
+o.hasOwnProperty('prop');             // returns true
+o.hasOwnProperty('toString');         // returns false
+o.hasOwnProperty('hasOwnProperty');   // returns false
+ +

Ejemplo: Iterando sobre las propiedades de un objeto

+ +

El siguiente ejemplo muestra como iterar sobre las propiedades de un objeto sin ejecutar sobre propiedades heredadas. Observe que el bucle for..in ya está no solo iterando elementos enumerables, por consiguiente uno no debería asumir que basado en la falta de propiedades no numerales mostrando en el bucle que hasOwnProperty por si misma no está solo es estrictamente para iterar elementos numerados (como con {{jsxref("Object.getOwnPropertyNames()")}}).

+ +
var buz = {
+    fog: 'stack'
+};
+
+for (var name in buz) {
+    if (buz.hasOwnProperty(name)) {
+        alert("this is fog (" + name + ") for sure. Value: " + buz[name]);
+    }
+    else {
+        alert(name); // toString or something else
+    }
+}
+ +

Ejemplo: hasOwnProperty como una propiedad

+ +

JavaScript no protege el nombre de la propiedad hasOwnProperty; en consecuencia, si existe la posibilidad  de que un objeto pudiera tener la propiedad con ese nombre, es necesario usar un externo hasOwnProperty para obtener los correctos resultados:

+ +
var foo = {
+    hasOwnProperty: function() {
+        return false;
+    },
+    bar: 'Here be dragons'
+};
+
+foo.hasOwnProperty('bar'); // always returns false
+
+// Use another Object's hasOwnProperty and call it with 'this' set to foo
+({}).hasOwnProperty.call(foo, 'bar'); // true
+
+// It's also possible to use the hasOwnProperty property from the Object property for this purpose
+Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
+
+ +

Observe que en el último caso no han habido nuevos objetos creados.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificacionesEstadoComentario
ECMAScript 3rd Edition. Implemented in JavaScript 1.5StandardInitial definition.
{{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES6')}} 
+ +

Compatibilidad de navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/index.html b/files/es/web/javascript/reference/global_objects/object/index.html new file mode 100644 index 0000000000..99089bd28e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/index.html @@ -0,0 +1,187 @@ +--- +title: Object +slug: Web/JavaScript/Referencia/Objetos_globales/Object +tags: + - Constructor + - JavaScript + - Objeto + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/Object +--- +
{{JSRef}}
+ +
La clase Object representa uno de los tipos de datos de Javascript. Es es usado para guardar una colección de datos definidos y entidades más complejas. Los objetos pueden ser creados utilzando el constructor {{jsxref("Object/Object", "Object()")}} o la sintaxis literal de objeto. 
+ +

El constructor Object crea una envoltura al objeto.

+ +

Sintaxis

+ + + +
// Object initialiser or literal
+{ [ nameValuePair1[, nameValuePair2[, ...nameValuePairN] ] ] }
+
+// Called as a constructor
+new Object([value])
+ +

Parámetros

+ +
+
nameValuePair1, nameValuePair2, ... nameValuePairN
+
Los pares de nombres (strings) y los valores (cualquier valor) donde los nombres son separados por una coma.
+
valor
+
Cualquier valor.
+
+ +

Description

+ +

El constructor Object crea una envoltura de objeto  al valor dado.  Si el valor es  {{jsxref("null")}} o {{jsxref("undefined")}}, creará y retornará un objeto vacío, de otra forma, retornará un objeto de un tipo que corresponda al valor dado. Si el valor ya es un objeto devolverá el valor.

+ +

Cuando es llamano en un contexto non-constructor, Object se comportará indenticamente a new Object().

+ +

Ver object initializer / literal syntax.

+ +

Propiedades del constructor Object

+ +
+
Object.length
+
Tiene un valor de 1.
+
{{jsxref("Object.prototype")}}
+
Permite añadir propiedades a todos los objetos del tipo Object.
+
+ +

Métodos del constructor  Object

+ +
+
{{jsxref("Object.assign()")}}
+
Copia los valores de todas sus propiedades enumerables desde uno o más objetos fuente a un objeto destino.
+
{{jsxref("Object.create()")}}
+
Crea un nuevo objeto con el prototipo objeto y propiedades específicadas.
+
{{jsxref("Object.defineProperty()")}}
+
Añade la propiedad nombrada descrita por un descriptor dado a un objeto.
+
{{jsxref("Object.defineProperties()")}}
+
Agrega las propiedades nombradas descritas por los descriptores dados a un objeto.
+
{{jsxref("Object.entries()")}}
+
Returns an array containing all of the [key, value] pairs of a given object's own enumerable string properties.
+
{{jsxref("Object.freeze()")}}
+
Freezes an object: other code can't delete or change any properties.
+
{{jsxref("Object.fromEntries()")}}
+
Returns a new object from an iterable of key-value pairs (reverses {{jsxref("Object.entries")}}).
+
{{jsxref("Object.getOwnPropertyDescriptor()")}}
+
Returns a property descriptor for a named property on an object.
+
{{jsxref("Object.getOwnPropertyDescriptors()")}}
+
Returns an object containing all own property descriptors for an object.
+
{{jsxref("Object.getOwnPropertyNames()")}}
+
Returns an array containing the names of all of the given object's own enumerable and non-enumerable properties.
+
{{jsxref("Object.getOwnPropertySymbols()")}}
+
Returns an array of all symbol properties found directly upon a given object.
+
{{jsxref("Object.getPrototypeOf()")}}
+
Returns the prototype of the specified object.
+
{{jsxref("Object.is()")}}
+
Compares if two values are the same value. Equates all NaN values (which differs from both Abstract Equality Comparison and Strict Equality Comparison).
+
{{jsxref("Object.isExtensible()")}}
+
Determines if extending of an object is allowed.
+
{{jsxref("Object.isFrozen()")}}
+
Determines if an object was frozen.
+
{{jsxref("Object.isSealed()")}}
+
Determines if an object is sealed.
+
{{jsxref("Object.keys()")}}
+
Returns an array containing the names of all of the given object's own enumerable string properties.
+
{{jsxref("Object.preventExtensions()")}}
+
Prevents any extensions of an object.
+
{{jsxref("Object.seal()")}}
+
Prevents other code from deleting properties of an object.
+
{{jsxref("Object.setPrototypeOf()")}}
+
Sets the prototype (i.e., the internal [[Prototype]] property).
+
{{jsxref("Object.values()")}}
+
Returns an array containing the values that correspond to all of a given object's own enumerable string properties.
+
+ +

Object instances and Object prototype object

+ +

All objects in JavaScript are descended from Object; all objects inherit methods and properties from {{jsxref("Object.prototype")}}, although they may be overridden. For example, other constructors' prototypes override the constructor property and provide their own toString() methods. Changes to the Object prototype object are propagated to all objects unless the properties and methods subject to those changes are overridden further along the prototype chain.

+ +

Properties

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

Methods

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

Deleting a property from an object

+ +

There isn't any method in an Object itself to delete its own properties (e.g. like Map.prototype.delete()). To do so one has to use the delete operator.

+ +

Examples

+ +

Using Object given undefined and null types

+ +

The following examples store an empty Object object in o:

+ +
var o = new Object();
+
+ +
var o = new Object(undefined);
+
+ +
var o = new Object(null);
+
+ +

Using Object to create Boolean objects

+ +

The following examples store {{jsxref("Boolean")}} objects in o:

+ +
// equivalent to o = new Boolean(true);
+var o = new Object(true);
+
+ +
// equivalent to o = new Boolean(false);
+var o = new Object(Boolean());
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES1')}}{{Spec2('ES1')}}Initial definition. Implemented in JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.2', 'Object')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-object-objects', 'Object')}}{{Spec2('ES6')}}Added Object.assign, Object.getOwnPropertySymbols, Object.setPrototypeOf, Object.is
{{SpecName('ESDraft', '#sec-object-objects', 'Object')}}{{Spec2('ESDraft')}}Added Object.entries, Object.values and Object.getOwnPropertyDescriptors.
+ +

Browser compatibility

+ +
+ + +

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

+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/is/index.html b/files/es/web/javascript/reference/global_objects/object/is/index.html new file mode 100644 index 0000000000..926357d0ab --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/is/index.html @@ -0,0 +1,172 @@ +--- +title: Object.is() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/is +tags: + - Comparación + - Condición + - ECMAScript2015 + - JavaScript + - Objeto + - condicional + - igualdad + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Object/is +--- +
{{JSRef}}
+ +

El método Object.is() determina si dos valores son iguales.

+ +

Síntaxis

+ +
Object.is(valor1, valor2);
+ +

Parámetros

+ +
+
valor1
+
Primer valor a comparar.
+
valor2
+
Segundo valor a comparar.
+
+ +

Valor return del método

+ +

Este método devuelve un valor de tipo {{jsxref("Boolean")}} indicando si los valores pasados como parámetros son iguales o no.

+ +

Descripción

+ +

Object.is() determina si dos valores son iguales. Dos valores son iguales si se puede asegurar que:

+ + + +

Esta comparación no es igual a la que realiza el operador {{jsxref("Operators/Comparison_Operators", "==", "#Equality")}}. El operador {{jsxref("Operators/Comparison_Operators", "==", "#Equality")}} aplica varias coerciones(comprobaciones) en ambos sentidos (si no tienen el mismo Type) antes de probar la igualdad (lo que resulta en comportamientos como  "" == false siendo true), pero Object.is no obliga a niguno de los valores.

+ +

Esta tampoco es igual a la que realiza el operador {{jsxref("Operators/Comparison_Operators", "===", "#Identity")}}. El operador {{jsxref("Operators/Comparison_Operators", "===", "#Identity")}} (y el operador {{jsxref("Operators/Comparison_Operators", "==", "#Equality")}}) trata los valores -0 y +0 como iguales, y además, trata {{jsxref("Number.NaN")}} como no igual a {{jsxref("NaN")}}.

+ +

Ejemplos

+ +
Object.is('foo', 'foo');     // true
+Object.is(window, window);   // true
+
+Object.is('foo', 'bar');     // false
+Object.is([], []);           // false
+
+var test = { a: 1 };
+Object.is(test, test);       // true
+
+Object.is(null, null);       // true
+
+// Special Cases
+Object.is(0, -0);            // false
+Object.is(-0, -0);           // true
+Object.is(NaN, 0/0);         // true
+
+ +

Polyfill para navegadores no ES6

+ +

Object.is() es una adición propuesta en el estandar ECMA-262; y como tal, puede no estar presente en todos los navegadores. Para los casos en que no tenga disponible este método, podría utilizar este código haciendolo que se cargue antes que cualquier otro script. Esto permite que puedas utilizar Object.is() en los navegadores que no lo llevan incluído.

+ +
if (!Object.is) {
+  Object.is = function(x, y) {
+    // SameValue algorithm
+    if (x === y) { // Steps 1-5, 7-10
+      // Steps 6.b-6.e: +0 != -0
+      return x !== 0 || 1 / x === 1 / y;
+    } else {
+      // Step 6.a: NaN == NaN
+      return x !== x && y !== y;
+    }
+  };
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-object.is', 'Object.is')}}{{Spec2('ES6')}}Definición inicial.
+ +

Compatibilidad en navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome("30")}}{{CompatGeckoDesktop("22")}}{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatUnknown}}{{CompatGeckoMobile("22")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/isextensible/index.html b/files/es/web/javascript/reference/global_objects/object/isextensible/index.html new file mode 100644 index 0000000000..30082032ea --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/isextensible/index.html @@ -0,0 +1,144 @@ +--- +title: Object.isExtensible() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/isExtensible +tags: + - ECMAScript5 + - JavaScript + - JavaScript 1.8.5 + - Objeto + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isExtensible +--- +
{{JSRef}}
+ +

El método Object.isExtensible() determina si un objeto es extendible (si puede tener propiedades nuevas agregadas a éste).

+ +

Síntaxis

+ +
Object.isExtensible(obj)
+ +

Parametros

+ +
+
obj
+
El objeto a ser revisado.
+
+ +

Descripción

+ +

Los objetos son extendibles por defecto: ellos pueden tener propiedades nuevas agregadas a ellos, y (en motores que soportan {{jsxref("Object.proto", "__proto__")}} {{deprecated_inline}} la propiedad __proto__) pueden ser modificados. Un objeto puede ser marcado como no extendible usando {{jsxref("Object.preventExtensions()")}}, {{jsxref("Object.seal()")}}, o {{jsxref("Object.freeze()")}}.

+ +

Ejemplos

+ +
// Los Objetos nuevos son extendibles (por defecto).
+var empty = {};
+Object.isExtensible(empty); // === true
+
+// ...pero eso puede cambiar.
+Object.preventExtensions(empty);
+Object.isExtensible(empty); // === false
+
+// Objetos sellados por definición son no-extendibles.
+var sealed = Object.seal({});
+Object.isExtensible(sealed); // === false
+
+// Objetos congelados también por definición son no-extendibles.
+var frozen = Object.freeze({});
+Object.isExtensible(frozen); // === false
+
+ +

Notas

+ +

En ES5, si el argumento pasado a éste método no es un objeto (primitivo), entonces regresará {{jsxref("TypeError")}}. En ES6, un no-objeto pasado como argumento será tratado como si fuera un objeto no-extendible ordinario, simplemente regresa false.

+ +
Object.isExtensible(1);
+// TypeError: 1 is not an object (ES5 code)
+
+Object.isExtensible(1);
+// false                         (ES6 code)
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.2.3.13', 'Object.isExtensible')}}{{Spec2('ES5.1')}}Definición inicial. Implementada en JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.isextensible', 'Object.isExtensible')}}{{Spec2('ES6')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("6")}}{{CompatGeckoDesktop("2.0")}}{{CompatIE("9")}}{{CompatOpera("12")}}{{CompatSafari("5.1")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporote básico{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/isfrozen/index.html b/files/es/web/javascript/reference/global_objects/object/isfrozen/index.html new file mode 100644 index 0000000000..9a2bc2ee94 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/isfrozen/index.html @@ -0,0 +1,190 @@ +--- +title: Object.isFrozen() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/isFrozen +tags: + - ECMAScript5 + - JavaScript + - JavaScript 1.8.5 + - Objeto + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isFrozen +--- +
{{JSRef}}
+ +

El método Object.isFrozen() determina si un objeto está congelado.

+ +

Síntaxis

+ +
Object.isFrozen(obj)
+ +

Parametros

+ +
+
obj
+
El objeto a ser revisado.
+
+ +

Descripción

+ +

Un objeto está congelado si y solo si no es {{jsxref("Object.isExtensible()", "extendible", "", 1)}}, todas sus propiedades son no-configurables, y todos los datos de sus propiedades no tienen capacidad de escritura.

+ +

Ejemplos

+ +
// Un objeto nuevo es extendible, así que no está congelado.
+Object.isFrozen({}); // === false
+
+// Un objeto vacio el cuál no es extendible está congelado vacuamente.
+var vacuouslyFrozen = Object.preventExtensions({});
+Object.isFrozen(vacuouslyFrozen); // === true
+
+// Un objeto nuevo con una propiedad es tabién extendible, ergo no congelado.
+var oneProp = { p: 42 };
+Object.isFrozen(oneProp); // === false
+
+// Prevenir la extensión de un objeto no lo congela.
+// porque la propiedad sigue teniendo capacidad de configuración (y capacidad de escritura).
+Object.preventExtensions(oneProp);
+Object.isFrozen(oneProp); // === false
+
+// ...pero eliminar la propiedad congela el objeto vacuamente.
+delete oneProp.p;
+Object.isFrozen(oneProp); // === true
+
+// Un ojbeto no-extendible con una propiedad sin capacidad de escritura pero si con capacidad de configuración no está congelado.
+var nonWritable = { e: 'plep' };
+Object.preventExtensions(nonWritable);
+Object.defineProperty(nonWritable, 'e', { writable: false }); // Le quita la capacidad de escritura.
+Object.isFrozen(nonWritable); // === false
+
+// Quitarle la capacidad de configuración a una propiedad congela el objeto.
+Object.defineProperty(nonWritable, 'e', { configurable: false }); // le quita la capacidad de configuración.
+Object.isFrozen(nonWritable); // === true
+
+// Un objeto no-extendible con una propiedad sin capacidad de configuración pero con capacidad de escritura no congela a dicho objeto.
+var nonConfigurable = { release: 'the kraken!' };
+Object.preventExtensions(nonConfigurable);
+Object.defineProperty(nonConfigurable, 'release', { configurable: false });
+Object.isFrozen(nonConfigurable); // === false
+
+// Quitarle la capacidad de configuración a esa propiedad congela el objeto.
+Object.defineProperty(nonConfigurable, 'release', { writable: false });
+Object.isFrozen(nonConfigurable); // === true
+
+// A non-extensible object with a configurable accessor property isn't frozen.
+var accessor = { get food() { return 'yum'; } };
+Object.preventExtensions(accessor);
+Object.isFrozen(accessor); // === false
+
+// ...but make that property non-configurable and it becomes frozen.
+Object.defineProperty(accessor, 'food', { configurable: false });
+Object.isFrozen(accessor); // === true
+
+// But the easiest way for an object to be frozen is if Object.freeze has been called on it.
+var frozen = { 1: 81 };
+Object.isFrozen(frozen); // === false
+Object.freeze(frozen);
+Object.isFrozen(frozen); // === true
+
+// By definition, a frozen object is non-extensible.
+Object.isExtensible(frozen); // === false
+
+// Also by definition, a frozen object is sealed.
+Object.isSealed(frozen); // === true
+
+ +

Notas

+ +

En ES5, si el argumento pasado a éste método no es un objeto (primitivo), entonces causará un {{jsxref("TypeError")}}. En ES6, un no-objeto pasado como argumento será tratado como si fuera un objeto ordinario congelado, simplemente regresa true.

+ +
Object.isFrozen(1);
+// TypeError: 1 is not an object (ES5 code)
+
+Object.isFrozen(1);
+// true                          (ES6 code)
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.2.3.12', 'Object.isFrozen')}}{{Spec2('ES5.1')}} +

Definición inicial. Implementada en JavaScript 1.8.5.

+
{{SpecName('ES6', '#sec-object.isfrozen', 'Object.isFrozen')}}{{Spec2('ES6')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicasChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("6")}}{{CompatGeckoDesktop("2.0")}}{{CompatIE("9")}}{{CompatOpera("12")}}{{CompatSafari("5.1")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracteristicasAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/isprototypeof/index.html b/files/es/web/javascript/reference/global_objects/object/isprototypeof/index.html new file mode 100644 index 0000000000..8275ebafac --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/isprototypeof/index.html @@ -0,0 +1,158 @@ +--- +title: Object.prototype.isPrototypeOf() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/isPrototypeOf +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf +--- +
{{JSRef}}
+ +

El método isPrototypeOf() comprueba si un objeto se encuentra en la cadena de prototipado de otro.

+ +
+

Nota: isPrototypeOf difiere del operador {{jsxref("Operators/instanceof", "instanceof")}}. En la expresión "object instanceof AFunction", la cadena de prototipado de object es comprobada contra AFunction.prototype, no contra la propia AFunction.

+
+ +

Sintaxis

+ +
prototypeObj.isPrototypeOf(obj)
+ +

Parámetros

+ +
+
prototypeObj
+
Un objeto para ver comprobado contra cada vínculo en la cadena de prototipado del argumento object.
+
object
+
El object sobre cuya cadena de prototipado se realizará la búsqueda.
+
+ +

Descripción

+ +

El método isPrototypeOf permite comprobar si un objetyo existe o no en la cadena de prototipado de otro.

+ +

Por ejemplo, considerese la siguiente cadena de prototipado:

+ +
function Fee() {
+  // ...
+}
+
+function Fi() {
+  // ...
+}
+Fi.prototype = new Fee();
+
+function Fo() {
+  // ...
+}
+Fo.prototype = new Fi();
+
+function Fum() {
+  // ...
+}
+Fum.prototype = new Fo();
+
+ +

Al final de la secuencia, si se instanci Fum y se necesita verificar si el prototipo de Fi existe en la cadena de prototipado de Fum prototype chain, puede hacerse esto:

+ +
var fum = new Fum();
+// ...
+
+if (Fi.prototype.isPrototypeOf(fum)) {
+  // do something safe
+}
+
+ +

Esto, junto con el operador {{jsxref("Operators/instanceof", "instanceof")}} resulta especialmente útil si se tiene código que sólo puede operar cuando se trata de objetos descendientes de una cadena de prototipado específica, p.e., para garantizar que ciertos métodos o propiedades estén presentes en dichos objetos.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoObservaciones
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial.
{{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
PrestaciónChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
PrestaciónAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/issealed/index.html b/files/es/web/javascript/reference/global_objects/object/issealed/index.html new file mode 100644 index 0000000000..c28437561a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/issealed/index.html @@ -0,0 +1,140 @@ +--- +title: Object.isSealed() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/isSealed +tags: + - ECMAScript5 + - JavaScript + - JavaScript 1.8.5 + - Objeto + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isSealed +--- +
{{JSRef}}
+ +

El método Object.isSealed() si el objeto está sellado.

+ +
{{EmbedInteractiveExample("pages/js/object-issealed.html")}}
+ + + +

Syntax

+ +
Object.isSealed(obj)
+ +

Parámetros

+ +
+
obj
+
El objeto que debe ser verificado.
+
+ +

Valor devuelto

+ +

Un {{jsxref("Boolean")}} indicando si el objeto dado está sellado.

+ +

Descripción

+ +

Devuelve true si el objeto está sellado, de lo contrario devuelve false. Un objeto está sellado si no es {{jsxref("Object.isExtensible", "extensible", "", 1)}} y si todas sus propiedades no se pueden configurar y por lo tanto no removibles (pero no necesariamente no modificables).

+ +

Ejemplos

+ +
// Los objetos no están sellados por defecto
+var empty = {};
+Object.isSealed(empty); // === false
+
+// Si haces un objeto vacío no extendible,
+// está vacíamente sellado
+Object.preventExtensions(empty);
+Object.isSealed(empty); // === true
+
+// Lo mismo no es vedad sobre un objeto no vacío,
+// a menos que sus propiedades son todas no configurables.
+var hasProp = { fee: 'fie foe fum' };
+Object.preventExtensions(hasProp);
+Object.isSealed(hasProp); // === false
+
+// Pero hazlas todas no configurables
+// y el objeto se vuelve sellado.
+Object.defineProperty(hasProp, 'fee', {
+  configurable: false
+});
+Object.isSealed(hasProp); // === true
+
+// La manerá más facil de sellar un objeto, por supuesto,
+// es Object.seal
+var sealed = {};
+Object.seal(sealed);
+Object.isSealed(sealed); // === true
+
+// Un objeto sellado es, por definición, no extendible.
+Object.isExtensible(sealed); // === false
+
+// Un objeto sellado puodría estar congelado,
+// pero no tiene que ser.
+Object.isFrozen(sealed); // === true
+// (Todas las propiedades también no modificables)
+
+var s2 = Object.seal({ p: 3 });
+Object.isFrozen(s2); // === false
+// ('p' todavía es modificable)
+
+var s3 = Object.seal({ get p() { return 0; } });
+Object.isFrozen(s3); // === true
+// (solo la configurabilidad es importante para las propiedades de acceso)
+
+ +

Notes

+ +

En ES5, si el argumento de este método no es un objeto (primitivo), entonces causará un {{jsxref("TypeError")}}. En ES2015, un argumento que no sea un objeto será tratado como si fuera un objeto sellado ordinario, simplemente devuelve true.

+ +
Object.isSealed(1);
+// TypeError: 1 no es un objeto (ES5 code)
+
+Object.isSealed(1);
+// true                          (ES2015 code)
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES5.1', '#sec-15.2.3.11', 'Object.isSealed')}}{{Spec2('ES5.1')}}Definición inicial. Implementada en JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.issealed', 'Object.isSealed')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.issealed', 'Object.isSealed')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ +
+ + +

{{Compat("javascript.builtins.Object.isSealed")}}

+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/keys/index.html b/files/es/web/javascript/reference/global_objects/object/keys/index.html new file mode 100644 index 0000000000..d6bd068f2f --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/keys/index.html @@ -0,0 +1,156 @@ +--- +title: Object.keys() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/keys +translation_of: Web/JavaScript/Reference/Global_Objects/Object/keys +--- +
{{JSRef("Global_Objects", "Object")}}
+ +

Resumen

+ +

El método Object.keys() devuelve un array de las propiedades names de un objeto, en el mismo orden como se obtienen en un loop normal

+ +

Sintaxis

+ +
Object.keys(obj)
+ +

Parámetros

+ +
+
obj
+
El objeto cuyas propiedades enumerables serán devueltas.
+
+ +

Valor de retorno

+ +

Un array de strings que representan toda las propiedades  del objeto

+ +

Descripción

+ +

Object.keys devuelve un array cuyos elementos son strings correspondientes a las propiedades enumerables que se encuentran directamente en el object. El orden de las propiedades es el mismo que se proporciona al iterar manualmente sobre las propiedades del objeto.

+ +

Ejemplos

+ +
var arr = ['a', 'b', 'c'];
+console.log(Object.keys(arr)); // console: ['0', '1', '2']
+
+// arreglo como objeto
+var obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.keys(obj)); // console: ['0', '1', '2']
+
+// arreglo como objeto con nombres ordenados aleatoriamente
+var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.keys(an_obj)); // console: ['2', '7', '100']
+
+// getFoo es una propiedad no enumerable
+var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
+my_obj.foo = 1;
+
+console.log(Object.keys(my_obj)); // console: ['foo']
+
+ +

Si quieres todas las propiedades, incluso las no enumerables, mira {{jsxref("Object.getOwnPropertyNames()")}}.

+ +

Notas

+ +

En ES5, si el argumento para este método no es un objeto (uno primitivo), causará un {{jsxref("Global_Objects/TypeError", "TypeError")}}. En ES2015, un argumento no-objeto será coaccionado hacia un objeto.

+ +
> Object.keys("foo")
+// TypeError: "foo" is not an object  (ES5)
+
+> Object.keys("foo")
+// ["0", "1", "2"]                    (ES2015)
+ +

Polyfill

+ +

Para añadir soporte Object.keys en entornos más antiguos que no lo soportan de forma nativa, copia el siguiente fragmento:

+ +
// De https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
+if (!Object.keys) {
+  Object.keys = (function() {
+    'use strict';
+    var hasOwnProperty = Object.prototype.hasOwnProperty,
+        hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
+        dontEnums = [
+          'toString',
+          'toLocaleString',
+          'valueOf',
+          'hasOwnProperty',
+          'isPrototypeOf',
+          'propertyIsEnumerable',
+          'constructor'
+        ],
+        dontEnumsLength = dontEnums.length;
+
+    return function(obj) {
+      if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
+        throw new TypeError('Object.keys called on non-object');
+      }
+
+      var result = [], prop, i;
+
+      for (prop in obj) {
+        if (hasOwnProperty.call(obj, prop)) {
+          result.push(prop);
+        }
+      }
+
+      if (hasDontEnumBug) {
+        for (i = 0; i < dontEnumsLength; i++) {
+          if (hasOwnProperty.call(obj, dontEnums[i])) {
+            result.push(dontEnums[i]);
+          }
+        }
+      }
+      return result;
+    };
+  }());
+}
+
+ +

Ten en cuenta que el código anterior incluye claves no-enumerables en IE7 (y quizás IE8), al pasar en un objeto desde una ventana diferente.

+ +

Para un simple Polyfill del Navegador, mira Javascript - Compatibilidad de Object.keys en Navegadores.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES5.1', '#sec-15.2.3.14', 'Object.keys')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en JavaScript 1.8.5.
{{SpecName('ES2015', '#sec-object.keys', 'Object.keys')}}{{Spec2('ES2015')}}
{{SpecName('ESDraft', '#sec-object.keys', 'Object.keys')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +
{{Compat("javascript.builtins.Object.keys")}}
+ + + +

Mira también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/preventextensions/index.html b/files/es/web/javascript/reference/global_objects/object/preventextensions/index.html new file mode 100644 index 0000000000..50f51214a8 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/preventextensions/index.html @@ -0,0 +1,176 @@ +--- +title: Object.preventExtensions() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/preventExtensions +translation_of: Web/JavaScript/Reference/Global_Objects/Object/preventExtensions +--- +
{{JSRef}}
+ +

El método Object.preventExtensions() previene que nuevas propiedades sean agregadas a un objeto (p.e. previene la extensión futuras al objeto).

+ +

Sintaxis

+ +
Object.preventExtensions(obj)
+ +

Parametros

+ +
+
obj
+
El objeto que debería hacerse inextendible.
+
+ +

Descripción

+ +

Un objeto es extendible si propiedades nuevas pueden ser agregadas a este. Object.preventExtensions() marca un objecto como no extendible, así nunca más tendrá propiedades más allá de las tenía en el momento en que fue marcado como no extendible. Note que las propiedades de un objeto no-extendible, en general, aún pueden ser eliminadas. Los intentos de agregar propiedades nuevas a un objeto no-extendible fallarán, ya sea de manera silenciosa o arrojando una excepción {{jsxref("TypeError")}} (comunmente, pero no de manera exclusiva, en {{jsxref("Functions_and_function_scope/Strict_mode", "strict mode", "", 1)}}).

+ +

Object.preventExtensions() solo previene la adición de propiedades propias. Las propiedades aún pueden ser agregadas a object.prototype. Sin embargo, llamar Object.preventExtensions() sobre un objeto tambien prevendrá extensiones sobre la propiedad {{jsxref("Object.proto", "__proto__")}} {{deprecated_inline}}.

+ +

Si hay una manera de cambiar un objeto extendible a uno no-extendible, hay una manera de hacer lo opuesto en ECMAScript 5.

+ +

Ejemplos

+ +
// Object.preventExtensions regresa el objeto hecho no-extendible.
+var obj = {};
+var obj2 = Object.preventExtensions(obj);
+obj === obj2; // true
+
+// Los Objetos son extendibles por defecto.
+var empty = {};
+Object.isExtensible(empty); // === true
+
+// ...pero pueden ser cambiados.
+Object.preventExtensions(empty);
+Object.isExtensible(empty); // === false
+
+// Object.defineProperty arroja una excepción cuando se agrega
+// una propiedad nueva a un objeto no-extendible.
+var nonExtensible = { removable: true };
+Object.preventExtensions(nonExtensible);
+Object.defineProperty(nonExtensible, 'new', { value: 8675309 }); // arroja TypeError
+
+// En modo estricto, tratar de agregar propiedades nuevas
+// a un objeto no-extensible arroja una excepción TypeError.
+function fail() {
+  'use strict';
+  nonExtensible.newProperty = 'FAIL'; // arroja TypeError
+}
+fail();
+
+// EXTENSION (solo funciona en motores que soporten __proto__
+// (el cual esta obsoleto. Usar Object.getPrototypeOf en su lugar)):
+// La propiedad prototype de un objeto no-extendible es inmutable.
+var fixed = Object.preventExtensions({});
+fixed.__proto__ = { oh: 'hai' }; // arroja TypeError
+
+ +

Notas

+ +

En ES5, si el argumento pasado a este método no es un objeto (primitivo), entonces causará un {{jsxref("TypeError")}}. En ES6, un argumento no-objeto será tratado como si fuera un objeto ordinario no-extendible, simplemente lo regresa.

+ +
Object.preventExtensions(1);
+// TypeError: 1 is not an object (ES5 code)
+
+Object.preventExtensions(1);
+// 1                             (ES6 code)
+
+ +

Especificación

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES5.1', '#sec-15.2.3.10', 'Object.preventExtensions')}}{{Spec2('ES5.1')}}Definición inicial. Implementada en JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.preventextensions', 'Object.preventExtensions')}}{{Spec2('ES6')}} 
+ +

Compatibilidad de navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("6")}}{{CompatGeckoDesktop("2.0")}}{{CompatIE("9")}}{{CompatOpera("12")}}{{CompatSafari("5.1")}}
Comportamiento en ES6 para un no-objeto pasado como argumento{{CompatChrome("44")}}{{CompatGeckoDesktop("35.0")}}{{CompatIE("11")}}{{CompatOpera("31")}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Comportamiento en ES6 para no-objetos pasados como argumentos{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile("35.0")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Mira también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/propertyisenumerable/index.html b/files/es/web/javascript/reference/global_objects/object/propertyisenumerable/index.html new file mode 100644 index 0000000000..b2ede9dd60 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/propertyisenumerable/index.html @@ -0,0 +1,185 @@ +--- +title: Object.prototype.propertyIsEnumerable() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/propertyIsEnumerable +tags: + - JavaScript + - Objecto + - Property + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable +--- +
{{JSRef}}
+ +

El método propertyIsEnumerable() regresa un Boleano indicando si la propiedad especificada es enumerable.

+ +

Sintaxis

+ +
obj.propertyIsEnumerable(prop)
+ +

Parametros

+ +
+
prop
+
Nombre de la propiedad a probar.
+
+ +

Descripción

+ +

Todos los objetos tienen un método propertyIsEnumerable. Este método puede determinar si la propiedad especificada en el objeto puede ser enumerada por un ciclo {{jsxref("Statements/for...in", "for...in")}}, con la excepción de propiedades heredadas a través de prototype. Si el objeto no tiene la propiedad especificada, este método regresa un valor false.

+ +

Ejemplo

+ +

Uso básico de propertyIsEnumerable

+ +

El siguiente ejemplo muestra el uso de propertyIsEnumerable en objetos y arrays:

+ +
var o = {};
+var a = [];
+o.prop = 'es enumerable';
+a[0] = 'es enumerable';
+
+o.propertyIsEnumerable('prop');   // regresa true
+a.propertyIsEnumerable(0);        // regresa true
+
+ +

Definidas por usuario vs predefinidas

+ +

El siguiente ejemplo demuestra la enumerabilidad de las propiedades definidas por el usuario contra las predefinidas:

+ +
var a = ['es enumerable'];
+
+a.propertyIsEnumerable(0);          // regresa true
+a.propertyIsEnumerable('length');   // regresa false
+
+Math.propertyIsEnumerable('random');   // regresa false
+this.propertyIsEnumerable('Math');     // regresa false
+
+ +

Directa vs  heredadas

+ +
var a = [];
+a.propertyIsEnumerable('constructor');         // regresa false
+
+function primerConstructor() {
+  this.propiedad = 'no es enumerable';
+}
+
+primerConstructor.prototype.primerMetodo = function() {};
+
+function segundoConstructor() {
+  this.metodo = function() { return 'es enumerable'; };
+}
+
+secondConstructor.prototype = new primerConstructor;
+secondConstructor.prototype.constructor = segundoConstructor;
+
+var o = new segundoConstructor();
+o.propiedadArbitraria = 'is enumerable';
+
+o.propertyIsEnumerable('propiedadArbitraria ');   // regresa true
+o.propertyIsEnumerable('metodo');                 // regresa true
+o.propertyIsEnumerable('propiedad');              // regresa false
+
+o.propiedad = 'es enumerable';
+
+o.propertyIsEnumerable('propiedad');              // regresa true
+
+// Regresan false por estar en el prototipo el cual no es
+// considerado por propertyIsEnumerable (a pesar de que las dos ultimas son
+// iterables con un for-in)
+o.propertyIsEnumerable('prototype');   // regresa false (como en JS 1.8.1/FF3.6)
+o.propertyIsEnumerable('constructor'); // regresa false
+o.propertyIsEnumerable('firstMethod'); // regresa false
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial.
{{SpecName('ES5.1', '#sec-15.2.4.7', 'Object.prototype.propertyIsEnumerable')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.propertyisenumerable', 'Object.prototype.propertyIsEnumerable')}}{{Spec2('ES6')}} 
+ +

Compatibilidad de navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Notas específicas para Gecko

+ +

Al inicio de JavaScript 1.8.1 (in Firefox 3.6), propertyIsEnumerable('prototype') regresa false en lugar de true; esto hace que el resultado cumpla con la especificación de ECMAScript 5.

+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/proto/index.html b/files/es/web/javascript/reference/global_objects/object/proto/index.html new file mode 100644 index 0000000000..24055ac261 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/proto/index.html @@ -0,0 +1,128 @@ +--- +title: Object.prototype.__proto__ +slug: Web/JavaScript/Referencia/Objetos_globales/Object/proto +translation_of: Web/JavaScript/Reference/Global_Objects/Object/proto +--- +
+

Advertencia: Cambiar la propiedad [[Prototype]] de un objeto es, por como los navegadores modernos optimizan las propiedades de acceso, una operación muy lenta en todos los navegadores y motores JavaScript. Los efectos en el rendimiento de alterar la herencia son muchos y delicados, y no se limita simplemente al tiempo que necesita la asignación obj.__proto__ = ... sentencia,  sin embargo afecta a  cualquier código que tiene acceso a  cualquier objeto cuya propiedad [[Prototype]] ha sido alterada, por lo que se debe de tener mucho cuidado.

+ +

Si el rendimiento en tu aplicación es necesario, deberías evitar modificar la propiedad [[Prototype]] de un objeto. En su lugar, crea un objecto nuevo con la propiedad [[Prototype]] deseada usando {{jsxref("Object.create()")}}.

+
+ +
+

Advertencia: Mientras Object.prototype.__proto__ es soportado hoy día por la mayoría de navegadores, su existencia y comportamiento exacto solo ha sido estandarizado en la especificación ECMAScript 6 como una característica de legado y para asegurar la compatibilidad entre los navegadores web. Para tener un mejor soporte, es recomendable que se utilice {{jsxref("Object.getPrototypeOf()")}} para obtener el prototipo de un objeto.

+
+ +
{{JSRef}}
+ +

La propiedad __proto__ de {{jsxref("Object.prototype")}} es una propiedad llamada de acceso (una función getter y también función setter) que provee acceso al interior de [[Prototype]] (ya sea un objeto o {{jsxref("Global_Objects/null", "null")}}) del objeto a través del cual se accede a ella.

+ +

El uso de la propiedad __proto__ es polémico actualmente, y está rechazado. Originalmente, nunca fué incluído en la especificación de EcmaScript, pero los navegadores modernos decidieron implementarla de todas maneras. Sólo actualmente, la propiedad __proto__ ha sido estandarizada en la especificación del lenguaje ECMAScript 6, para asegurar la compatibilidad entre navegadores, por lo tanto, esta será soportada en el futuro. Actualmente está obsoleta  en favor de {{jsxref("Object.getPrototypeOf")}}/{{jsxref("Reflect.getPrototypeOf")}} y {{jsxref("Object.setPrototypeOf")}}/{{jsxref("Reflect.setPrototypeOf")}} (aunque todavía establecer el [[Prototype]] de un objeto es una operación muy lenta, por lo que si nos preocupa el rendimiento, debemos de evitarlo).

+ +

La propiedad __proto__ puede ser usada también en un objeto definido de forma literal, para establecer el [[Prototype]] en la creación de este, como alternativa a {{jsxref("Object.create()")}}. Ver: object initializer / literal syntax.

+ +

Síntaxis

+ +
var shape = {};
+var circle = new Circle();
+
+// Establecer el objeto prototype.
+// OBSOLETO. Esto es solo un ejemplo. NO HACER ESTO en código real.
+shape.__proto__ = circle;
+
+// Obtener el objeto prototype
+console.log(shape.__proto__ === circle); // true
+
+ +

Nota: esto es, dos guiones bajos, seguidos de cinco carácteres "proto", seguido de dos guiones bajos mas.

+ +

Descripción

+ +

La función getter __proto__el valor interno del [[Prototype]] de un objeto. Para objetos creados usando un objeto literal, el valor es {{jsxref("Object.prototype")}}. Para objetos creados usando literales de array, este valor es {{jsxref("Array.prototype")}}. Para funciones, este valor {{jsxref("Function.prototype")}}. Para objetos creados utilizando el operador new fun, donde fun es una función constructora incluída en JavaScript  ({{jsxref("Array")}}, {{jsxref("Boolean")}}, {{jsxref("Date")}}, {{jsxref("Number")}}, {{jsxref("Object")}}, {{jsxref("String")}}, etcétera—incluyendo nuevos contrusctores conforme JavaScript evoluciona), este valor es fun.prototype.  (Esto es, si el constructor no devuelve un objeto de forma explícita, o el fun.prototype ha sido reasignado desde que la instancia fué creada).

+ +

El __proto__ setter la mutación del objeto [[Prototype]] de un objeto. El objeto debe ser extensible según {{jsxref("Object.isExtensible()")}}: si no, un {{jsxref("Global_Objects/TypeError", "TypeError")}} es lanzado. El valor proveído debe ser un objeto o {{jsxref("Global_Objects/null", "null")}}. Provetendo otro tipo de valor no hará nada.

+ +

Para entender como los prototipos son usados para herencia, ver el artículo Inheritance and the prototype chain.

+ +

La propiedad __proto__ es una simple propiedad de acceso a {{jsxref("Object.prototype")}} que consiste en una función getter y setter. Un acceso a la propiedad  __proto__ que eventualmente consulta {{jsxref("Object.prototype")}} encontrará esta propiedad, pero un acceso que no consulta {{jsxref("Object.prototype")}} no lo encontrará. Si alguna otra propiedad __proto__ es encontrada antes {{jsxref("Object.prototype")}} es consultada, esta propiedad sera ocultada por la encontrada en {{jsxref("Object.prototype")}}.

+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificacionesEstadoComentario
{{SpecName('ES6', '#sec-additional-properties-of-the-object.prototype-object', 'Object.prototype.__proto__')}}{{Spec2('ES6')}}Incluída en el anexo (normativa) para características de legado ECMAScript para navegadores web (observar que la especificación de codificación es lo que ya está en las implementaciones).
+ +

Compatibilidad de navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracteristicaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatIE("11")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracteristicaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Notas de compatibilidad

+ +

Mientras la especificación ECMAScript 2015 (ES6) dicta que el soporte para __proto__ es requerido solo para navegadores web (a pesar de ser normativo), otros medios pueden soportarlo por uso de legado.

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/seal/index.html b/files/es/web/javascript/reference/global_objects/object/seal/index.html new file mode 100644 index 0000000000..42c89175a3 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/seal/index.html @@ -0,0 +1,167 @@ +--- +title: Object.seal() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/seal +translation_of: Web/JavaScript/Reference/Global_Objects/Object/seal +--- +
{{JSRef}}
+ +

El método Object.seal() sella un objeto, previniendo que puedan añadirse nuevas propiedades al mismo, y marcando todas las propiedades existentes como no-configurables. Los valores de las propiedades presentes permanecen pudiendo cambiarse en tanto en cuanto dichas propiedades sean de escritura.

+ +

Sintaxis

+ +
Object.seal(obj)
+ +

Parámetros

+ +
+
obj
+
El objeto que ha de ser sellado.
+
+ +

Descripción

+ +

Por defecto, los objetos son {{jsxref("Object.isExtensible()", "extensibles", "", 1)}} (pueden añadirse nuevas propiedades a los mismos). Sellar un objeto previene que nuevas propiedades puedan ser añadidas y marca todas las propiedades existentes como no-configurables. Esto tiene el efecto de hacer fijo e inmutable el juego de propiedades del objeto. Al hacer todas las propiedades no-configurables previene también que se puedan convertir propiedades de datos en propiedades de acceso y viceversa, pero no evita que los valores de las propiedades de datos puedan ser modificados. Intentar eliminar o añadir propiedades a un objeto sellado, o convertir una propiedad de datos en una propiedad de acceso fallará, bien silenciadamente o bien produciendo un {{jsxref("TypeError")}} (más frecuentemente, aunque no exclusivamente, con código en {{jsxref("Strict_mode", "modo estricto", "", 1)}}).

+ +

La cadena de prototiado permanece inalterada. No obstante, la propiedad {{jsxref("Object.proto", "__proto__")}} {{deprecated_inline}} es también sellada.

+ +

Retorna una referencia al Objeto pasado.

+ +

Ejemplos

+ +
var obj = {
+  prop: function() {},
+  foo: 'bar'
+};
+
+// Pueden añadirse nuevas propiedades, propiedades existentes pueden cambiarse o eliminarse.
+obj.foo = 'baz';
+obj.lumpy = 'woof';
+delete obj.prop;
+
+var o = Object.seal(obj);
+
+o === obj; // true
+Object.isSealed(obj); // === true
+
+// Sigue permitido modificar valores de propiedades en un objeto sellado.
+obj.foo = 'quux';
+
+// Pero no puedes convertir propiedades de datos en propiedades de acceso, ni viveversa
+Object.defineProperty(obj, 'foo', { get: function() { return 'g'; } }); // produce un TypeError
+
+// Ahora, cualquier cambio que no sea modificar valores de propiedades fallará
+obj.quaxxor = 'the friendly duck'; // silenciosamente, no añadirá la propiedad
+delete obj.foo; // silenciosamente, no eliminará la propiedad
+
+// ...y en modo estricto esos intentos producirán TypeErrors.
+function fail() {
+  'use strict';
+  delete obj.foo; // genera un TypeError
+  obj.sparky = 'arf'; // genera un TypeError
+}
+fail();
+
+// Intentar añadir propiedades mediante Object.defineProperty también fallará.
+Object.defineProperty(obj, 'ohai', { value: 17 }); // genera un TypeError
+Object.defineProperty(obj, 'foo', { value: 'eit' }); // cambia el valor exisitente
+
+ +

Notas

+ +

En ES5, si el argumento de este método no es un objeto (una primitiva), se generará un {{jsxref("TypeError")}}. En ES6, un argumento no-objeto será tratado como si se sellase un objeto ordinario, símplemente retornándolo.

+ +
Object.seal(1);
+// TypeError: 1 no es un objeto (código ES5)
+
+Object.seal(1);
+// 1                             (código ES6)
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoObservaciones
{{SpecName('ES5.1', '#sec-15.2.3.8', 'Object.seal')}}{{Spec2('ES5.1')}}Definición inicial. Implementado en  JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.seal', 'Object.seal')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.seal', 'Object.seal')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
PrestaciónChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("6")}}{{CompatGeckoDesktop("2.0")}}{{CompatIE("9")}}{{CompatOpera("12")}}{{CompatSafari("5.1")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
PrestiaciónAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/setprototypeof/index.html b/files/es/web/javascript/reference/global_objects/object/setprototypeof/index.html new file mode 100644 index 0000000000..ff32fc5738 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/setprototypeof/index.html @@ -0,0 +1,237 @@ +--- +title: Object.setPrototypeOf() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/setPrototypeOf +tags: + - ECMAScript6 + - Experimental + - JavaScript + - Método(2) + - Objeto +translation_of: Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf +--- +

{{JSRef}}

+ +

El método Object.setPrototypeOf() establece el prototipo (p.e., la propiedad interna [[Prototype]]) de un objeto especificado a otro objeto o sino establece {{jsxref("null")}}.

+ +
+

Adverdencia: Cambiar la propiedad [[Prototype]] de un objeto, debido a la naturaleza de la optimización del acceso a propiedades de los motores modernos de JavaScript, es una operación bastante lenta, en todo todo navegador y motor de JavaScript. Los efectos sobre el rendimiento al alterar la herencia son sutiles y vastos., y no están limitados a simplemente el tiempo gastado en la sentencia obj.__proto___ = ...,  but may extend to any code that has access to any object whose [[Prototype]] has been altered. If you care about performance you should avoid setting the [[Prototype]] of an object. Instead, create a new object with the desired [[Prototype]] using {{jsxref("Object.create()")}}.

+
+ +

Sintaxis

+ +
Object.setPrototypeOf(obj, prototype);
+ +

Parámetros

+ +
+
obj
+
El objeto al que se ha de establecer el prototipo.
+
prototype
+
El nuevo prototipo del objeto, (un objeto o {{jsxref("null")}}).
+
+ +

Descripción

+ +

Arroja una excepción del tipo {{jsxref("TypeError")}} si el objeto cuyo [[Prototype]] se va a modificar no es extensible de acuerdo con {{jsxref("Object.isExtensible()")}}. No hace nada si el parametro prototype no es un objeto o {{jsxref("null")}} (p.e., número, cadena, booleano, o {{jsxref("undefined")}}). De cualquier otra forma, este método cambia la propiedad [[Prototype]] del obj al valor nuevo.

+ +

Object.setPrototypeOf() está en el último borrador del estandar ECMAScript6. Es considerado generalmente la manera adecuada de establecer el prototipo de un objeto, contra la propiedad más controversial {{jsxref("Object.prototype.__proto__")}}.

+ +

Ejemplos

+ +
var dict = Object.setPrototypeOf({}, null);
+
+ +

Polyfill

+ +

Utilizando la vieja propiedad {{jsxref("Object.prototype.__proto__")}}, podemos definir facilmente Object.setPrototypeOf si aún no está disponible:

+ +
// Solo funciona en Chrome y FirefoxOnly works in Chrome y FireFox, no funciona en IE:
+Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {
+  obj.__proto__ = proto;
+  return obj;
+}
+
+ +

Agregando cadenas de prototipo

+ +

Una combinación de Object.getPrototypeOf() y {{jsxref("Object.proto", "Object.prototype.__proto__")}} permite agregar una nueva cadena de prototipos al nuevo  prototipo del objeto.

+ +
/**
+*** Object.appendChain(@object, @prototype)
+*
+* Agrega el primer prototipo no-nativo de una cadena a un nuevo prototipo.
+* Retorna @object (si es Primitivo (Primitive value) será transoformado a Objeto).
+*
+*** 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")
+*
+*  Agrega el primer prototipo no-nativo de una cadena a la Function.prototype nativa del objeto, luego agrega una
+* ueva Function(["@arg"(s)], "@function_body") a la cadena.
+* Retorna la función.
+*
+**/
+
+Object.appendChain = function(oChain, oProto) {
+  if (arguments.length < 2) {
+    throw new TypeError('Object.appendChain - Not enough arguments');
+  }
+  if (typeof oProto === 'number' || typeof oProto === 'boolean') {
+    throw new TypeError('second argument to Object.appendChain must be an object or a string');
+  }
+
+  var oNewProto = oProto,
+      oReturn = o2nd = oLast = oChain instanceof this ? oChain : new oChain.constructor(oChain);
+
+  for (var o1st = this.getPrototypeOf(o2nd);
+    o1st !== Object.prototype && 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;
+}
+
+ +

Uso

+ +

Primer ejemplo: Agregar una cadena a un prototipo

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

Segundo ejemplo: Transofrmando un valor Primitivo en una instancia de su constructor y agregar su cadena al prototipo

+ +
function Symbol() {
+  this.isSymbol = 'yes';
+}
+
+var nPrime = 17;
+
+console.log(typeof nPrime); // 'number'
+
+var oPrime = Object.appendChain(nPrime, new Symbol());
+
+console.log(oPrime); // '17'
+console.log(oPrime.isSymbol); // 'yes'
+console.log(typeof oPrime); // 'object'
+
+ +

Tercer ejemplo: Agregando una cadena a la Function.prototype de un objeto y agregando una nueva función a la cadena

+ +
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!!'
+
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-object.setprototypeof', 'Object.setProtoypeOf')}}{{Spec2('ES6')}}Initial definition.
+ +

Compatibilidad del navegador

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome("34")}}{{CompatGeckoDesktop("31")}}{{CompatIE("11")}}{{CompatVersionUnknown}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatNo}}{{CompatGeckoMobile("31")}}{{CompatUnknown}}{{CompatNo}}{{CompatNo}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/tolocalestring/index.html b/files/es/web/javascript/reference/global_objects/object/tolocalestring/index.html new file mode 100644 index 0000000000..d0de708b98 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/tolocalestring/index.html @@ -0,0 +1,106 @@ +--- +title: Object.prototype.toLocaleString() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/toLocaleString +translation_of: Web/JavaScript/Reference/Global_Objects/Object/toLocaleString +--- +
{{JSRef}}
+ +

El método toLocaleString() devuelve un string que representa a un objeto. Este método está pensado para ser redefinido en los objetos derivados, para los propósitos específicos de cada configuración regional.

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-tolocalestring.html")}}
+ + + +

Sintaxis

+ +
objeto.toLocaleString()
+ +

Valor de retorno

+ +

Un string que representa al objeto.

+ +

Descripción

+ +

{{jsxref("Object")}}'s toLocaleString devuelve el resultado de llamar a {{jsxref("Object.toString", "toString()")}}.

+ +

Se proporciona esta función para que los objetos dispongan de un método toLocaleString genérico, aunque puede que no todos la utilicen. Véase la lista siguiente.

+ +

Objetos que redefinen toLocaleString

+ + + +

Ejemplos

+ +

Redefinición de toLocaleString() en Array

+ +

En los objetos Array se puede utilizar toLocaleString() para imprimir los valores del array como un string, con indicadores opcionales de configuración regional (como símbolos de moneda) aplicados.

+ +

Por ejemplo:

+ +
const unArray = [4, 7, 10];
+
+let preciosEnEuros = unArray.toLocaleString('fr', { style: 'currency', currency: 'EUR'});
+// "4,00 €,7,00 €,10,00 €"
+ +

Redefinición de toLocaleString() para Date

+ +

En los objetos Date se usa toLocaleString() para imprimir fechas en un formato adecuado a la configuración regional.

+ +

Por ejemplo:

+ +
const unaFecha = new Date(Date.now());
+// "2020-07-07T19:51:44.046Z"
+
+let fechaAleman = unaFecha.toLocaleString('de');
+// "7.7.2020, 21:55:22"
+
+var fechaFrances= unaFecha.toLocaleString('fr');
+//"07/07/2020 à 21:55:22"
+ +

Redefinición de toLocaleString() para Number

+ +

En los objetos Number se usa toLocaleString() para imprimir números de forma adecuada a la configuración regional, p. ej. para usar los separadores de miles correctos.

+ +

Por ejemplo:

+ +
const unNumero = 2901234564;
+// "2901234564"
+
+let numeroAleman = unNumero.toLocaleString('de');
+// "2.901.234.564"
+
+let numeroFrances = unNumero.toLocaleString('fr');
+// "2 901 234 564"
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-object.prototype.tolocalestring', 'Object.prototype.toLocaleString')}}
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.Object.toLocaleString")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/tosource/index.html b/files/es/web/javascript/reference/global_objects/object/tosource/index.html new file mode 100644 index 0000000000..713a176b0b --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/tosource/index.html @@ -0,0 +1,126 @@ +--- +title: Object.prototype.toSource() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/toSource +translation_of: Web/JavaScript/Reference/Global_Objects/Object/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

El método toSource() regresa una cadena representando el código fuente del objeto.

+ +

Syntax

+ +
Object.toSource();
+obj.toSource();
+
+ +

Return value

+ +

Una cadena representando el código fuente del objeto.

+ +

Description

+ +

EL método toSource() regresa los siguientes valores:

+ + + +

Puedes llamar el método toSource() durante el depurado para examinar el contenido de un objeto.

+ +

Sobreescribir el método toSource()

+ +

Es seguro para los objetos sobreescribir el método toSource(). Por ejemplo:

+ +
function Person(name) {
+  this.name = name;
+}
+
+Person.prototype.toSource = function Person_toSource() {
+  return 'new Person(' + uneval(this.name) + ')';
+};
+
+console.log(new Person('Joe').toSource()); // ---> nueva Person("Joe")
+
+ +

Métodos de toSource() incorporados

+ +

Cada tipo fundamental de JavaScript tiene su propio método toSource().  Éstos objetos son:

+ + + +

Limitaciones en objetos cíclicos

+ +

EN el caso de los objetos que contienen referencia a ellos mismos, por ejemplo, una lista enlazada cíclicamente o un árbol que puede ser atravesado en ambas formas, toSource() no recreará la referencia a sí mismo, a partir de Firefox 24. Por ejemplo:

+ +
var obj1 = {};
+var obj2 = { a: obj1 };
+obj1.b = obj2;
+
+console.log('Ciclico: ' + (obj1.b.a == obj1));
+
+var objSource = obj1.toSource(); // regresa "({b:{a:{}}})"
+
+obj1 = eval(objSource);
+
+console.log('Ciclico: ' + (obj1.b.a == obj1));
+
+ +

Si una estructura cíclica es usada y se necesita el método toSource(), el objeto debe proveer la sobreescritura de toSource(), ya sea usando una referencia a un constructor o proveyendo una función anónima.

+ +

Ejemplos

+ +

Usando toSource()

+ +

El código siguiente define el objeto tipo Dog y crea a theDog, un objeto tipo 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');
+
+ +

Llamando al método toSource() de theDog muestra el código JavaScript que define al objeto:

+ +
theDog.toSource();
+// returns ({name:"Gabby", breed:"Lab", color:"chocolate", sex:"female"})
+
+ +

Especificaciones

+ +

No es parte de ningún estándar. Implementado en JavaScript 1.3.

+ +

Compatibilidad en navegadores

+ +
+ + +

{{Compat("javascript.builtins.Object.toSource")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/tostring/index.html b/files/es/web/javascript/reference/global_objects/object/tostring/index.html new file mode 100644 index 0000000000..a9ffc11535 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/tostring/index.html @@ -0,0 +1,70 @@ +--- +title: Object.prototype.toString() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/toString +tags: + - JavaScript + - Method + - Object + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/toString +--- +
{{JSRef("Objetos_globales", "Object")}}
+ +

Resumen

+ +

Devuelve una cadena que representa al objeto.

+ +

Sintaxis

+ +

toString()

+ +

Descripción

+ +

Todos los objetos tienen un método toString que se llama automáticamente cuando el objeto se representa como un valor de texto o cuando un objeto se referencia de tal manera que se espera una cadena. Por defecto, el método toString es heredado por todos los objetos que descienden de Object. Si este método no se sobreescribe en el objeto personalizado, toString devuelve {{ mediawiki.external('objecttype ') }}, donde type es el tipo de objeto. El siguiente código ilustra esto:

+ +
var objeto = new Object();
+objeto.toString(); // Devuelve [object Object]
+
+ +

Ejemplos

+ +

Sobreescribir el método por defecto toString

+ +

Puede crear una función que sea llamada en lugar del método predeterminado toString. El método toString no toma argumentos y debería devolver una cadena. El método toString que cree puede ser cualquier valor que quiera, pero será más útil si aporta información sobre el objeto.

+ +

El siguiente código define el tipo de objeto Perro y crea elPerro, un objeto de tipo Perro:

+ +
function Perro(nombre,criadero,color,sexo) {
+   this.nombre=nombre;
+   this.criadero=criadero;
+   this.color=color;
+   this.sexo=sexo;
+}
+
+elPerro = new Perro("Gabby","Laboratorio","chocolate","femenino")
+
+ +

Si llama al método toString en el objeto personalizado, devuelve el valor predeterminado heredado de Object:

+ +
elPerro.toString() //devuelve [object Object]
+
+ +

El siguiente código crea y asigna perroToString para sobreescribir el método predeterminado toString. Esta función genera una cadena que contiene nombre, criadero, color, y sexo del objeto, en la forma "propiedad = valor;".

+ +
Perro.prototype.toString = function perroToString() {
+  var retorno = "Perro " + this.nombre + " es " + this.sexo + " " + this.color + " " + this.criadero;
+  return retorno;
+}
+
+ +

Con el código precedente en su lugar, cualquier vez que se use elDog en un contexto de una cadena, JavaScript automáticamente llamará a la función perroToString, la cuál devuelve la siguiente cadena:

+ +
Perro Gabby es femenino chocolate Laboratorio
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/valueof/index.html b/files/es/web/javascript/reference/global_objects/object/valueof/index.html new file mode 100644 index 0000000000..5cf466078d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/valueof/index.html @@ -0,0 +1,157 @@ +--- +title: Object.prototype.valueOf() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/valueOf +translation_of: Web/JavaScript/Reference/Global_Objects/Object/valueOf +--- +
{{JSRef("Global_Objects", "Object")}}
+ +

El método valueOf() retorna el valor primitivo del objeto especificado.

+ +

Sintaxis

+ +
object.valueOf()
+ +

Valor de retorno

+ +

El valor primitivo del objeto especificado.

+ +

 

+ +

{{EmbedInteractiveExample("pages/js/object-prototype-valueof.html")}}

+ +

 

+ +

Descripción

+ +

JavaScript utiliza el método valueOf para convertir un objeto a un valor primitivo. Raramente usted necesitará invocar el método valueOf por su cuenta; JavaScript lo realizará de forma automática cuando encuentre un objeto, donde un valor primitivo es esperado.

+ +

Por defecto, el método valueOf es heredado por cada objeto descendiente de {{jsxref("Object")}}. Cada objeto incorporado en el núcleo del lenguaje sobreescribe este método para retornar un valor apropiado. Si un objeto no tiene un valor primitivo, valueOf devuelve el objeto en sí.

+ +

Puede utilizar valueOf dentro de su propio código para convertir un objeto incorporado en el núcleo del lenguaje en un valor primitivo. Cuando usted crea un objeto personalizado, puede sobreescribir el comportamiento de Object.prototype.valueOf() para invocar un método personalizado, en vez de utilizar el método por defecto {{jsxref("Object")}}.

+ +

Sobreescribiendo valueOf para objetos personalizados

+ +

Puede crear una función para ser invocada en lugar de utilizar el método valueOf por defecto. Su función no debe contener ningún parámetro.

+ +

Suponga que tiene un objeto de tipo myNumberType y usted quiere crear un método valueOf para este. El código a continuación asigna una función personalizada al método valueOf:

+ +
myNumberType.prototype.valueOf = function() { return customPrimitiveValue; };
+ +

Al tener el código anterior funcionando, cada vez que un objeto de tipo myNumberType es utilizado en un contexto donde deba ser representado por un valor primitivo, JavaScript automáticamente invocará la función definida en el código anterior.

+ +

El método valueOf es invocado usualmente por JavaScript pero usted puede invocarlo directamente como sigue a continuación:

+ +
myNumber.valueOf()
+ +
+

Nota: Objetos en contextos de string realizan la conversión a string a través del método {{jsxref("Object.toString", "toString()")}} , el cual, es diferente de {{jsxref("String")}} para convertir objetos a primitivos string utilizando el método valueOf. Todos los objetos pueden ser convertidos a string, si solo "[object type]". Pero muchos objetos no se pueden convertir a number, boolean o function.

+
+ +

Ejemplos

+ +

Utilizando valueOf

+ +
function myNumberType(n) {
+    this.number = n;
+}
+
+myNumberType.prototype.valueOf = function() {
+    return this.number;
+};
+
+myObj = new myNumberType(4);
+myObj + 3; // 7
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoCommentario
ECMAScript 1ra Edición.EstándarDefinición inicial. Implementado en JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.2.4.4', 'Object.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.valueof', 'Object.prototype.valueOf')}}{{Spec2('ES6')}} +

 

+
{{SpecName('ESDraft', '#sec-object.prototype.valueof', 'Object.prototype.valueOf')}}{{Spec2('ESDraft')}}    
+ +

Compatibilidad con Navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
ElementoChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
ElementoAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/object/values/index.html b/files/es/web/javascript/reference/global_objects/object/values/index.html new file mode 100644 index 0000000000..81b56ef1e0 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/object/values/index.html @@ -0,0 +1,97 @@ +--- +title: Object.values() +slug: Web/JavaScript/Referencia/Objetos_globales/Object/values +tags: + - JavaScript + - Objeto + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Object/values +--- +
{{JSRef}}
+ +

El método Object.values() devuelve un array con los valores correspondientes a las propiedades enumerables de un objeto. Las propiedades son devueltas en el mismo orden a como lo haría un bucle {{jsxref("Statements/for...in", "for...in")}} (la única diferencia es que un bucle for-in también enumera las propiedades en la cadena de prototipo de un objeto).

+ +

{{EmbedInteractiveExample("pages/js/object-values.html")}}

+ +

Sintaxis

+ +
Object.values(obj)
+ +

Parámetros

+ +
+
obj
+
Objeto cuyas propiedades enumerables serán devueltas.
+
+ +

Valor devuelto

+ +

Un array con las propiedades enumerables del objeto pasado como parámetro.

+ +

Descripción

+ +

El método Object.values() devuelve un array cuyos elementos son valores de propiedades enumarables que se encuentran en el objeto. El orden de las propiedades es el mismo que el dado cuando se recorre el objeto de forma manual.

+ +

Ejemplos

+ +
var obj = { foo: 'bar', baz: 42 };
+console.log(Object.values(obj)); // ['bar', 42]
+
+// array como objeto
+var obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.values(obj)); // ['a', 'b', 'c']
+
+// array como objeto con una ordenación aleatoria de las claves
+var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.values(an_obj)); // ['b', 'c', 'a']
+
+// getFoo no es una propiedade enumerable, por lo que como se observa, no se devuelve
+var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
+my_obj.foo = 'bar';
+console.log(Object.values(my_obj)); // ['bar']
+
+// parámetros que no son Objetos se fuerzan a que se comporten como tal
+console.log(Object.values('foo')); // ['f', 'o', 'o']
+
+ +

Polyfill

+ +

Para dar soporte compatible con  Object.values() a entornos antiguos que no la soportan de forma nativa, puedes encontrar un Polyfill en tc39/proposal-object-values-entries o en los repositorios es-shims/Object.values.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ESDraft', '#sec-object.values', 'Object.values')}}{{Spec2('ESDraft')}}Definición inicial.
{{SpecName('ES8', '#sec-object.values', 'Object.values')}}{{Spec2('ES8')}}
+ +

Compatibilidad en navegadores

+ +
{{Compat("javascript.builtins.Object.values")}}
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/parsefloat/index.html b/files/es/web/javascript/reference/global_objects/parsefloat/index.html new file mode 100644 index 0000000000..16510d882d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/parsefloat/index.html @@ -0,0 +1,58 @@ +--- +title: parseFloat() +slug: Web/JavaScript/Referencia/Objetos_globales/parseFloat +translation_of: Web/JavaScript/Reference/Global_Objects/parseFloat +--- +
{{jsSidebar("Objects")}}
+ +

Resumen

+ +

Convierte (parsea) un argumento de tipo cadena y devuelve un número de punto flotante.

+ +

Sintaxis

+ +

parseFloat(cadena )

+ +

Parámetros

+ +
+
cadena
+
Una cadena que representa al valor que se desea convertir.
+
+ +

Descripción

+ +

parseFloat es una función de alto nivel y no está asociada a ningún objeto.

+ +

parseFloat convierte su argumento, una cadena, y devuelve un número de punto flotante. Si encuentra un carácter diferente al signo (+ o -), numerales (0-9), un punto decimal o un exponente, devuelve el valor hasta ese punto e ignora ese carácter y todos los correctos siguientes. Se permiten espacios anteriores y posteriores.

+ +

Si el primer carácter no se puede convertir a número, parseFloat devuelve NaN.

+ +

Para fines aritméticos, el valor NaN no es un número para ninguna base. Puede llamar a la función {{jsxref("isNaN")}} para determinar si el resultado de parseFloat es NaN. Si se pasa NaN en operaciones aritméticas, la operación resultante también será NaN.

+ +

Ejemplos

+ +

Ejemplo: parseFloat devolviendo un número

+ +

Todos los siguientes ejemplos devuelven 3.14.

+ +
parseFloat("3.14");
+parseFloat("314e-2");
+parseFloat("0.0314E+2"); v
+var cadena = "3.14"; parseFloat(cadena);
+parseFloat("3.14más caracteres no dígitos");
+ +

Example: parseFloat returning NaN

+ +

El siguiente ejemplo devuelve NaN:

+ +
parseFloat("FF2");
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/parseint/index.html b/files/es/web/javascript/reference/global_objects/parseint/index.html new file mode 100644 index 0000000000..30e3874a34 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/parseint/index.html @@ -0,0 +1,89 @@ +--- +title: parseInt() +slug: Web/JavaScript/Referencia/Objetos_globales/parseInt +translation_of: Web/JavaScript/Reference/Global_Objects/parseInt +--- +
{{jsSidebar("Objects")}}
+ +

Resumen

+ +

Convierte (parsea) un argumento de tipo cadena y devuelve un entero de la base especificada.

+ +

Sintaxis

+ +
parseInt(string, base);
+ +

Parámetros

+ +
+
cadena
+
Una cadena que representa el valor que se desea convertir.
+
+ +
+
base
+
Un entero que representa la base de la mencionada cadena.
+
+ +

Descripción

+ +

parseInt es una función de alto nivel y no está asociada a ningún objeto.

+ +

La función parseInt comprueba el primer argumento, una cadena, e intenta devolver un entero de la base especificada. Por ejemplo, una base de 10 indica una conversión a número decimal, 8 octal, 16 hexadecimal, y así sucesivamente. Para bases superiores a 10, las letras del alfabeto indican numerales mayores que 9. Por ejemplo, para números hexadecimales (base 16), se utiliza de la A hasta la F.

+ +

Si parseInt encuentra un carácter que no es un numeral de la base especificada, lo ignora a él y a todos los caracteres correctos siguientes, devolviendo el valor entero obtenido hasta ese punto. parseInt trunca los números en valores enteros. Se permiten espacios anteriores y posteriores.

+ +

Si no se especifica la base o se especifica como 0, JavaScript asume lo siguiente:

+ + + +

Si el primer carácter no se puede convertir en número, parseInt devuelve NaN.

+ +

Para fines aritméticos, el valor NaN no es un número en ninguna base. Puede llamar a la función {{jsxref("Objetos_globales/isNaN", "isNaN")}} para determinar se el resultado de parseInt es NaN. Si se pasa NaN en operaciones aritméticas, la operación resultante también será NaN.

+ +

Para convertir números a su literal cadena en una base en particular, utilice intValue.toString(base).

+ +

Ejemplos

+ +

Ejemplo: Usando parseInt

+ +

Todos los siguientes ejemplos devuelven 15:

+ +
parseInt("F", 16);
+parseInt("17", 8);
+parseInt("15", 10);
+parseInt(15.99, 10);
+parseInt("FXX123", 16);
+parseInt("1111", 2);
+parseInt("15*3", 10);
+parseInt("12", 13);
+
+ +

Todos los siguientes ejemplos devuelven NaN:

+ +
parseInt("Hello", 8); // No es un número en absoluto
+parseInt("0x7", 10);  // No es de base 10
+parseInt("546", 2);   // Los dígitos no son válidos para representaciones binarias.
+
+ +

Incluso aunque la base especificada es diferente, todos los siguientes ejemplos devuelven 17 ya que el argumento cadena comienza por "0x".

+ +
parseInt("0x11", 16);
+parseInt("0x11", 0);
+parseInt("0x11");
+
+ +

Véase También

+ + diff --git a/files/es/web/javascript/reference/global_objects/promise/all/index.html b/files/es/web/javascript/reference/global_objects/promise/all/index.html new file mode 100644 index 0000000000..79a16aadc6 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/promise/all/index.html @@ -0,0 +1,123 @@ +--- +title: Promise.all() +slug: Web/JavaScript/Referencia/Objetos_globales/Promise/all +tags: + - ECMAScript6 + - JavaScript + - Método(2) + - Promesa + - Promise +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all +--- +
{{JSRef}}
+ +

El método Promise.all(iterable) devuelve una promesa que termina correctamente cuando todas las promesas en el argumento iterable han sido concluídas con éxito, o bien rechaza la petición con el motivo pasado por la primera promesa que es rechazada.

+ +

Sintaxis

+ +
Promise.all(iterable);
+ +
+
iterable
+
Un objeto iterable, por ejemplo un {{jsxref("Array")}}. Vea iterable.
+
+ +

Valor devuelto

+ +

Una {{jsxref("Promise")}}  que se cumplirá cuando todas las promesas del argumento iterable hayan sido cumplidas, o bien se rechazará cuando alguna de ellas se rechace.

+ +

Descripción

+ +

Promise.all  se cumple cuando todas las promesas del iterable dado se han cumplido, o es rechazada si alguna promesa no se cumple. {{jsxref("Promise.resolve")}}.

+ +

Si alguna de las promesas pasadas en el argumento iterable falla, la promesa all es rechazada inmediatamente con el valor de la promesa que fué rechazada, descartando todas las demás promesas hayan sido o no cumplidas. Si se pasa un array vacío a all , la promesa se cumple inmediatamente.

+ +

Ejemplos

+ +

Uso de Promise.all

+ +

Promise.all espera a que todo se cumpla (o bien al primer rechazo).

+ +
var p1 = Promise.resolve(3);
+var p2 = 1337;
+var p3 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 100, "foo");
+});
+
+Promise.all([p1, p2, p3]).then(values => {
+  console.log(values); // [3, 1337, "foo"]
+});
+ +

Promise.all comportamiento de fallo-rápido

+ +

Promise.all se rechaza si uno de los elementos ha sido rechazado y Promise.all falla rápido: Si tienes cuatro promesas que se resuelven después de un timeout y una de ellas falla inmediatamente, entonces Promise.all se rechaza inmediatamente.

+ +
var p1 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 1000, "one");
+});
+var p2 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 2000, "two");
+});
+var p3 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 3000, "three");
+});
+var p4 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 4000, "four");
+});
+var p5 = new Promise((resolve, reject) => {
+  reject("reject");
+});
+
+Promise.all([p1, p2, p3, p4, p5]).then(values => {
+  console.log(values);
+}, reason => {
+  console.log(reason)
+});
+
+//From console:
+//"reject"
+
+// Evenly, it's possible to use .catch
+Promise.all([p1, p2, p3, p4, p5]).then(values => {
+  console.log(values);
+}).catch(reason => {
+  console.log(reason)
+});
+
+//From console:
+//"reject"
+
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónStatusComentario
{{SpecName('ES6', '#sec-promise.all', 'Promise.all')}}{{Spec2('ES6')}}Initial definition in an ECMA standard.
{{SpecName('ESDraft', '#sec-promise.all', 'Promise.all')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad entre navegadores

+ +

{{Compat("javascript/promise","Promise.all")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/promise/catch/index.html b/files/es/web/javascript/reference/global_objects/promise/catch/index.html new file mode 100644 index 0000000000..a99a071979 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/promise/catch/index.html @@ -0,0 +1,183 @@ +--- +title: Promise.prototype.catch() +slug: Web/JavaScript/Referencia/Objetos_globales/Promise/catch +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/catch +--- +
{{JSRef}}
+ +

El método catch() retorna una Promise y solo se ejecuta en los casos en los que la promesa se marca como Reject. Se comporta igual que al llamar {{jsxref("Promise.then", "Promise.prototype.then(undefined, onRejected)")}} (de hecho, al llamar obj.catch(onRejected) internamente llama a obj.then(undefined, onRejected)).

+ +

Síntaxis

+ +
p.catch(onRejected);
+
+p.catch(function(reason) {
+   // rejection
+});
+
+ +

Parámetros

+ +
+
onRejected
+
Una {{jsxref("Function")}} llamada cuando la Promise es rechazada. Esta función tiene un argumento: +
+
reason
+
La razón del rechazo.
+
+ La promesa devuelta por catch() es rechazada si onRejected lanza un error o retorna una Promise que a su vez se rechaza, de cualquier otra manera la Promise es resuelta.
+
+ +

Valor de Retorno (Return)

+ +

Internamente llama a Promise.prototype.then en el objeto sobre el que se llama, pasándole el parámetro undefined y el manejador onRejected recibido; luego devuelve un valor de esa llamada (que es una {{jsxref("Promise")}}).

+ +

Demostración de la llamada interna:

+ +
// 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.log('> > > > > > 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()]
+
+ +

Descripción

+ +

El método catch puede ser muy útil para el manejo de errores en tu código con promesas.

+ +

Ejemplos

+ +

Usando y encadenando el método catch

+ +
var p1 = new Promise(function(resolve, reject) {
+  resolve('Success');
+});
+
+p1.then(function(value) {
+  console.log(value); // "Success!"
+  throw 'oh, no!';
+}).catch(function(e) {
+  console.log(e); // "oh, no!"
+}).then(function(){
+  console.log('after a catch the chain is restored');
+}, function () {
+  console.log('Not fired due to the catch');
+});
+
+// The following behaves the same as above
+p1.then(function(value) {
+  console.log(value); // "Success!"
+  return Promise.reject('oh, no!');
+}).catch(function(e) {
+  console.log(e); // "oh, no!"
+}).then(function(){
+  console.log('after a catch the chain is restored');
+}, function () {
+  console.log('Not fired due to the catch');
+});
+
+ +

Trucos cuando lanzamos errores

+ +
// Hacer un throw llamará al método catch
+var p1 = new Promise(function(resolve, reject) {
+  throw 'Uh-oh!';
+});
+
+p1.catch(function(e) {
+  console.log(e); // "Uh-oh!"
+});
+
+// Los errores que se lancen dentro de funciones asíncronas actuarán como errores no capturados
+var p2 = new Promise(function(resolve, reject) {
+  setTimeout(function() {
+    throw 'Uncaught Exception!';
+  }, 1000);
+});
+
+p2.catch(function(e) {
+  console.log(e); // Nunca será llamado
+});
+
+// Errores lanzados después de resolve() serán omitidos
+var p3 = new Promise(function(resolve, reject) {
+  resolve();
+  throw 'Silenced Exception!';
+});
+
+p3.catch(function(e) {
+   console.log(e); // Nunca será llamado
+});
+ +

Si se resuelve la promesa

+ +
// Crea una promesa que no llamará a onReject
+var p1 = Promise.resolve("calling next");
+
+var p2 = p1.catch(function (reason) {
+    // Nunca será llamado
+    console.log("catch p1!");
+    console.log(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);
+});
+ +

Especificación

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}{{Spec2('ES2015')}}Definición inicial en el standar ECMA.
{{SpecName('ESDraft', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ + + +

{{Compat("javascript.builtins.promise.catch")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/promise/finally/index.html b/files/es/web/javascript/reference/global_objects/promise/finally/index.html new file mode 100644 index 0000000000..8d21aa785a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/promise/finally/index.html @@ -0,0 +1,95 @@ +--- +title: Promise.prototype.finally() +slug: Web/JavaScript/Referencia/Objetos_globales/Promise/finally +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally +--- +
{{JSRef}}
+ +

El método finally() devuelve una {{jsxref("Promise")}}. Cuando la promesa se resuelve, sea exitosa o rechazada, la función de callback específicada será ejecutada. Esto ofrece una forma de ejecutar código sin importar como se haya resuelto la promesa.

+ +

Esto ayuda a evitar tener código duplicado tanto en el {{jsxref("Promise.then", "then()")}} como en el {{jsxref("Promise.catch", "catch()")}}.

+ +

Sintaxis

+ +
p.finally(alFinalizar);
+
+p.finally(function() {
+   // finalizada (exitosa o rechazada)
+});
+
+ +

Parámetros

+ +
+
alFinalizar
+
Una {{jsxref("Function")}} llamada cuando la Promise se resuelve con éxito o falla.
+
+ +

Valor de retorno

+ +

Devuelve una {{jsxref("Promise")}} cuyo finally fue fijado a la función específicada en alFinalizar.

+ +

Descripción

+ +

El método finally() puede ser de utilidad si quieres hacer algún proceso o limpieza una vez que la promesa termina, sin importar su resultado.

+ +

Utilizar finally() es muy similar a llamar .then(onFinally, onFinally), sin embargo tiene algunas diferencias:

+ + + +
+

Nota: Un throw (o retornar una promesa rechazada) en el callback finally va a rechazar la nueva promesa con la razón de rechazo especificada al llamar throw().

+
+ +

Ejemplos

+ +
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, no hemos obtenido un JSON!");
+  })
+  .then(function(json) { /* procesar el JSON */ })
+  .catch(function(error) { console.log(error); /* esta línea podría arrojar error, e.g. cuando console = {} */ })
+  .finally(function() { isLoading = false; });
+
+
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ESDraft', '#sec-promise.prototype.finally', 'Promise.prototype.finally')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad en navegador

+ + + +

{{Compat("javascript.builtins.Promise.finally")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/promise/index.html b/files/es/web/javascript/reference/global_objects/promise/index.html new file mode 100644 index 0000000000..58a2319c2f --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/promise/index.html @@ -0,0 +1,222 @@ +--- +title: Promise +slug: Web/JavaScript/Referencia/Objetos_globales/Promise +tags: + - ECMAScript6 + - JavaScript + - Promesa + - Promise +translation_of: Web/JavaScript/Reference/Global_Objects/Promise +--- +
{{JSRef}}
+ +

El objeto Promise (Promesa) es usado para computaciones asíncronas. Una promesa representa un valor que puede estar disponible ahora, en el futuro, o nunca.

+ +

Sintaxis

+ +
new Promise( /* ejecutor */ function(resolver, rechazar) { ... } );
+ +

Parámetros

+ +
+
ejecutor
+
Una función con los argumentos resolver y rechazar. La función ejecutor es ejecutada inmediatamente por la implementación de la Promesa, pasándole las funciones resolver y rechazar (el ejecutor es llamado incluso antes de que el constructor de la Promesa devuelva el objeto creado). Las funciones resolver y rechazar, al ser llamadas, resuelven o rechazan la promesa, respectivamente. Normalmente el ejecutor inicia un trabajo asíncrono, y luego, una vez que es completado, llama a la función resolver para resolver la promesa o la rechaza si ha ocurrido un error.
+ Si un error es lanzado en la función ejecutor, la promesa es rechazada y el valor de retorno del ejecutor es rechazado.
+
+ +

Descripción

+ +

Una Promesa es un proxy para un valor no necesariamente conocido en el momento que es creada la promesa. Permite asociar manejadores que actuarán asincrónicamente sobre un eventual valor en caso de éxito, o la razón de falla en caso de una falla. Esto permite que métodos asíncronos devuelvan valores como si fueran síncronos: en vez de inmediatamente retornar el valor final, el método asíncrono devuelve una promesa de suministrar el valor en algún momento en el futuro.

+ +

Una Promesa se encuentra en uno de los siguientes estados:

+ + + +

Una promesa pendiente puede ser cumplida con un valor, o rechazada con una razón (error). Cuando cualquiera de estas dos opciones sucede, los métodos asociados, encolados por el método then de la promesa, son llamados. (Si la promesa ya ha sido cumplida o rechazada en el momento que es anexado su correspondiente manejador, el manejador será llamado, de tal manera que no exista una condición de carrera entre la operación asíncrona siendo completada y los manejadores siendo anexados)

+ +

Como los métodos {{jsxref("Promise.then", "Promise.prototype.then()")}} y {{jsxref("Promise.catch", "Promise.prototype.catch()")}} retornan promesas, éstas pueden ser encadenadas.

+ +

+ +
+

No confundir con: Varios lenguajes tienen mecanismos para evaluar perezosamente y postergar una computación, a los que también les llaman "promesas" - p.ej.: Scheme. Las promesas en JavaScript representan procesos que ya están sucediendo, y pueden ser encadenados con funciones callback. Si lo que se busca es evaluar perezosamente una expresión, se debe considerar la función flecha (arrow function) sin argumentos: f = () => expresión para crear la expresión evaluada perezosamente, y f() para evaluar.

+
+ +
+

Nota: Una promesa se dice que está determinada (settled) si se ha cumplido o si se ha rechazado, pero no está pendiente. Con promesas también se usa el término resuelta — esto significa que la promesa está determinada, o que se encuentra bloqueada dentro de una cadena de promesas. States and fates de Domenic Denicola contiene mas detalles sobre la terminología de las promesas.

+
+ +

Propiedades

+ +
+
Promise.length
+
Propiedad longitud cuyo valor es siempre 1 (numero de argumentos del constructor).
+
{{jsxref("Promise.prototype")}}
+
Representa el prototipo del constructor Promise.
+
+ +

Métodos

+ +
+
{{jsxref("Promise.all", "Promise.all(iterable)")}}
+
Devuelve una de dos promesas: una que se cumple cuando todas las promesas en el argumento iterable han sido cumplidas, o una que se rechaza tan pronto como una de las promesas del argumento iterable es rechazada. Si la promesa retornada es cumplida, lo hace con un arreglo de los valores de las promesas cumplidas en el mismo orden definido en el iterable. Si la promesa retornada es rechazada, es rechazada con la razón de la primera promesa rechazada en el iterable. Este método puede ser útil para agregar resultados de múltiples promesas
+
{{jsxref("Promise.race", "Promise.race(iterable)")}}
+
Devuelve una promesa que se cumple o rechaza tan pronto como una de las promesas del iterable se cumple o rechaza, con el valor o razón de esa promesa.
+
+ +
+
{{jsxref("Promise.reject", "Promise.reject(reason)")}}
+
Devuelve un objeto Promise que es rechazado con la razón dada.
+
+ +
+
{{jsxref("Promise.resolve", "Promise.resolve(value)")}}
+
Devuelve un objeto Promise que es resuelto con el valor dado. Si el valor es un thenable (p.ej. tiene un método then), la promesa devuelta "seguirá" este thenable, adoptando su eventual estado; de lo contrario la promesa devuelta será cumplida con el valor. Generalmente, si se quiere saber si un valor es una promesa o no, se podría usar - {{jsxref("Promise.resolve", "Promise.resolve(value)")}} y trabajar con el valor devuelto como una promesa.
+
+ +

Prototipo Promise

+ +

Propiedades

+ +

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

+ +

Métodos

+ +

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

+ +

Ejemplos

+ +

Súper simple (¡10 líneas!)

+ +
let miPrimeraPromise = new Promise((resolve, reject) => {
+  // Llamamos a resolve(...) cuando lo que estabamos haciendo finaliza con éxito, y reject(...) cuando falla.
+  // En este ejemplo, usamos setTimeout(...) para simular código asíncrono.
+  // En la vida real, probablemente uses algo como XHR o una API HTML5.
+  setTimeout(function(){
+    resolve("¡Éxito!"); // ¡Todo salió bien!
+  }, 250);
+});
+
+miPrimeraPromise.then((successMessage) => {
+  // succesMessage es lo que sea que pasamos en la función resolve(...) de arriba.
+  // No tiene por qué ser un string, pero si solo es un mensaje de éxito, probablemente lo sea.
+  console.log("¡Sí! " + successMessage);
+});
+ +

Creando una Promise

+ +

Este pequeño ejemplo muestra el mecanismo de una Promise. El método testPromise() se llama cada vez que se pulsa el {{HTMLElement("button")}}. Esto crea una promesa que se cumplirá, aplicando {{domxref("window.setTimeout()")}}, al contador de la promesa (partiendo desde 1) aleatoriamente cada 1-3 segundos. El constructor de la Promise() es usado para crear dicha promesa.

+ +

El cumplimiento de la promesa simplemente se registra, a través de una llamada de retorno al cumplirse utilizando {{jsxref("Promise.prototype.then()","p1.then()")}}. A los pocos registros muestra cómo la parte síncrona del método se desacopla de la finalización asíncrona de la promesa.

+ +
'use strict';
+var promiseCount = 0;
+
+function testPromise() {
+  var thisPromiseCount = ++promiseCount;
+
+  var log = document.getElementById('log');
+  log.insertAdjacentHTML('beforeend', thisPromiseCount +
+    ') Comenzó (<small>Comenzó el código sincrónico</small>)<br/>');
+
+  // Hacemos una promesa: prometemos un contador numérico de esta promesa,
+  // empezando por 1 (después de esperar 3s)
+  var p1 = new Promise(
+    // La función resolvedora es llamada con la
+    // habilidad de resolver o rechazar la promesa
+    function(resolve, reject) {
+      log.insertAdjacentHTML('beforeend', thisPromiseCount +
+        ') Comenzó la promesa (<small>Código asíncrono comenzó</small>)<br/>');
+
+      // Esto es solo un ejemplo para crear asincronismo
+      window.setTimeout(
+        function() {
+          // ¡Cumplimos la promesa!
+          resolve(thisPromiseCount);
+        }, Math.random() * 2000 + 1000);
+    }
+  );
+
+  // Definimos qué hacer cuando la promesa es resuelta/cumplida con la llamada
+  // al método then(). La llamada al método catch() define qué hacer si
+  // la promesa es rechazada
+  p1.then(
+    // Registrar el valor de la promesa cumplida
+    function(val) {
+      log.insertAdjacentHTML('beforeend', val +
+        ') Promesa cumplida (<small>Código asíncrono terminado.</small>)<br/>');
+    })
+  .catch(
+    // Registrar la razón del rechazo
+    function(reason) {
+      console.log('Manejar promesa rechazada ('+reason+') aquí.');
+    });
+
+  log.insertAdjacentHTML('beforeend', thisPromiseCount +
+    ') Promesa hecha (<small>Código síncrono terminado. </small>)<br/>');
+}
+
+ + + +

Este ejemplo es ejecutado cuando pulsas el botón. Necesitas un navegador que soporte Promise. Al pulsar el botón varias veces en un período corto de tiempo, verás las diferentes promesas siendo cumplidas una tras otra.

+ +

{{EmbedLiveSample("Creando_una_Promise", "500", "200")}}

+ +

Cargando una imagen con XHR

+ +

Otro ejemplo sencillo utilizando Promise y XMLHttpRequest para cargar una imagen está disponible en el repositorio js-examples de MDN en GitHub. También puedes verlo en acción. Cada paso está comentado y te permite seguir de cerca la arquitectura detrás de las Promesas y XHR.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-promise-objects', 'Promise')}}{{Spec2('ES2015')}}Initial definition in an ECMA standard.
{{SpecName('ESDraft', '#sec-promise-objects', 'Promise')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad de navegadores

+ + + +

{{Compat("javascript/promise")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/promise/race/index.html b/files/es/web/javascript/reference/global_objects/promise/race/index.html new file mode 100644 index 0000000000..f24be82a9c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/promise/race/index.html @@ -0,0 +1,112 @@ +--- +title: Promise.race() +slug: Web/JavaScript/Referencia/Objetos_globales/Promise/race +tags: + - ECMAScript2015 + - ECMAScript6 + - JavaScript + - Promesa + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race +--- +
{{JSRef}}
+ +

El método Promise.race(iterable) retorna una promesa que se cumplirá o no tan pronto como una de las promesas del argumento iterable se cumpla o se rechace, con el valor o razón de rechazo de ésta.

+ +

Sintaxis

+ +
Promise.race(iterable);
+ +

Parámetros

+ +
+
iterable
+
Un objeto iterable , como por ejemplo un {{jsxref("Array")}}. Vea iterable.
+
+ +

Retorna

+ +

Una {{jsxref("Promise")}} que se cumple o se rechaza tan pronto como una de las promesas dadas en el argumento iterable se cumple o se rechaza.

+ +

Descripción

+ +

La función race retorna una Promise que se comporta como tal. Se cumple o se rechaza, lo que suceda antes en alguno de sus argumentos (iterable).

+ +

Ejemplos

+ +

Usando Promise.race – ejemplos con setTimeout

+ +
var p1 = new Promise( (resolve, reject) => {
+    setTimeout(resolve, 500, "uno");
+});
+var p2 = new Promise( (resolve, reject) => {
+    setTimeout(resolve, 100, "dos");
+});
+
+Promise.race([p1, p2]).then( value => {
+  console.log(value); // "dos"
+  // Ambas se resuelven, pero la p2 antes.
+});
+
+  // Ejemplo con un resolve y un reject en el mismo método race.
+var p3 = new Promise( (resolve, reject) => {
+    setTimeout(resolve, 100, "tres");
+});
+var p4 = new Promise( (resolve, reject) => {
+    setTimeout(reject, 500, "cuatro");
+});
+
+Promise.race([p3, p4]).then( value => {
+  console.log(value); // "tres"
+  // p3 es mas rápida, así que se resuelve el race
+}, reason => {
+  // No es llamado
+});
+
+var p5 = new Promise( (resolve, reject) => {
+    setTimeout(resolve, 500, "cinoc");
+});
+var p6 = new Promise( (resolve, reject) => {
+    setTimeout(reject, 100, "seis");
+});
+
+Promise.race([p5, p6]).then( value => {
+  // No es llamado
+}, reason => {
+  console.log(reason); // "seis"
+  // p6 es mas rápida, así que se rechaza
+});
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónStatusComentar
{{SpecName('ES6', '#sec-promise.race', 'Promise.race')}}{{Spec2('ES6')}}Initial definition in an ECMA standard.
{{SpecName('ESDraft', '#sec-promise.race', 'Promise.race')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad entre navegadores

+ +

{{Compat}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/promise/reject/index.html b/files/es/web/javascript/reference/global_objects/promise/reject/index.html new file mode 100644 index 0000000000..70505d7471 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/promise/reject/index.html @@ -0,0 +1,80 @@ +--- +title: Promise.reject() +slug: Web/JavaScript/Referencia/Objetos_globales/Promise/reject +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/reject +--- +
{{JSRef}}
+ +

El método Promise.reject(reason) retorna un objeto Promise que es rechazado por la razón específicada.

+ +
{{EmbedInteractiveExample("pages/js/promise-reject.html")}}
+ + + + + + + +

Sintaxis

+ +
Promise.reject(reason);
+ +

Parámetros

+ +
+
reason
+
Razón por la cual esta {jsxref("Promise")}} fue rechazada.
+
+ +

Return value

+ +

Un objeto {{jsxref("Promise")}} que es rechazado por la razón específicada.

+ +

Descripción

+ +

La función estática Promise.reject retorna un objecto {{jsxref("Promise")}} que es rechazado. Para fines de depuración y captura selectiva de error, se suele pasar por el parámetro reason un  instanceof {{jsxref("Error")}}.

+ +

Ejemplos

+ +

Usando el método estático Promise.reject()

+ +
Promise.reject(new Error('fail')).then(function() {
+  // no entra en esta función
+}, function(error) {
+  console.log(error); // Stacktrace
+});
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-promise.reject', 'Promise.reject')}}{{Spec2('ES2015')}}Initial definition in an ECMA standard.
{{SpecName('ESDraft', '#sec-promise.reject', 'Promise.reject')}}{{Spec2('ESDraft')}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Promise.reject")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/promise/resolve/index.html b/files/es/web/javascript/reference/global_objects/promise/resolve/index.html new file mode 100644 index 0000000000..e91dc7b80d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/promise/resolve/index.html @@ -0,0 +1,150 @@ +--- +title: Promise.resolve() +slug: Web/JavaScript/Referencia/Objetos_globales/Promise/resolve +tags: + - ECMAScript 2015 + - JavaScript + - Promise + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/resolve +--- +
{{JSRef}}
+ +

El método Promise.resolve(value) retorna un objeto {{jsxref("Promise")}} que es resuelto con el valor dado. Si el valor es una promise, esa promise es devuelta; si el valor es un thenable (si tiene un {{jsxref("Promise.then", "método \"then\"")}}), el valor devuelto le seguirá a ese thenable, adoptando su estado; de otro modo la promise devuelta estará completada con el valor.

+ +
{{EmbedInteractiveExample("pages/js/promise-resolve.html")}}
+ + + +

Sintáxis

+ +
Promise.resolve(value);
+Promise.resolve(promise);
+Promise.resolve(thenable);
+
+ +

Parámetros

+ +
+
value
+
Argumento por resolver por esta Promise. También puede ser una Promise o un thenable por resolver.
+
+ +

Valor retornado

+ +

Una {{jsxref("Promise")}} que es resuelta con el valor dado, o con la promise pasada como valor, si el valor era un objeto promise.

+ +

Descripción

+ +

La función estática Promise.resolve retorna una Promise que es resuelta.

+ +

Ejemplos

+ +

Utilizando el método estático Promise.resolve

+ +
Promise.resolve('Éxito').then(function(value) {
+  console.log(value); // "Éxito"
+}, function(value) {
+  // no es llamada
+});
+
+ +

Resolviendo un arreglo

+ +
var p = Promise.resolve([1,2,3]);
+p.then(function(v) {
+  console.log(v[0]); // 1
+});
+ +

Resolviendo otra Promise

+ +
var original = Promise.resolve(33);
+var cast = Promise.resolve(original);
+cast.then(function(value) {
+  console.log('valor: ' + value);
+});
+console.log('original === cast ? ' + (original === cast));
+
+// registros, en orden:
+// original === cast ? true
+// valor: 33
+
+ +

El orden invertido de los registros se debe al hecho de que los handler then sean llamados asíncronamente. Vea cómo funciona then aquí.

+ +

Resolviendo thenables y arrojando Errores

+ +
// Resolviendo un objeto thenable
+var p1 = Promise.resolve({
+  then: function(onFulfill, onReject) { onFulfill('¡Completada!'); }
+});
+console.log(p1 instanceof Promise) // true, objeto convertido en una Promise
+j
+p1.then(function(v) {
+    console.log(v); // "¡Completada!"
+  }, function(e) {
+    // no es llamada
+});
+
+// Thenable arroja antes del callback
+// Rechaza la Promise
+var thenable = { then: function(resolve) {
+  throw new TypeError('Arrojando');
+  resolve('Resolviendo');
+}};
+
+var p2 = Promise.resolve(thenable);
+p2.then(function(v) {
+  // no es llamada
+}, function(e) {
+  console.log(e); // TypeError: Arrojando
+});
+
+// Thenable arroja después del callback
+// Resuelve la Promise
+var thenable = { then: function(resolve) {
+  resolve('Resolviendo');
+  throw new TypeError('Arrojando');
+}};
+
+var p3 = Promise.resolve(thenable);
+p3.then(function(v) {
+  console.log(v); // "Resolviendo"
+}, function(e) {
+  // no es llamada
+});
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-promise.resolve', 'Promise.resolve')}}{{Spec2('ES2015')}}Definición inicial en un estándar de ECMA.
{{SpecName('ESDraft', '#sec-promise.resolve', 'Promise.resolve')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.Promise.resolve")}}

+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/promise/then/index.html b/files/es/web/javascript/reference/global_objects/promise/then/index.html new file mode 100644 index 0000000000..8998f3b180 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/promise/then/index.html @@ -0,0 +1,302 @@ +--- +title: Promise.prototype.then() +slug: Web/JavaScript/Referencia/Objetos_globales/Promise/then +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Promise + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/then +--- +
{{JSRef}}
+ +

El método then() retorna una {{domxref("Promesa")}}. Recibe dos argumentos: funciones callback  para los casos de éxito y fallo de Promise.

+ +

Nota: Si ambos argumentos son omitidos, o se proveen métodos que no sean funciones, se creará una nueva Promesa sin handlers adicionales, que simplemente adoptan el estado final de la Promesa que entonces es llamado. Si el primer argumento es omitido o se provee una no-función, el nuevo Promise que es creado simplemente adopta el  estado cumplido del Promise que entonces es llamado (si se convierte en fulfilled). Si el segundo argument es omitido o se provee una no-función, el nuevo Promise que es creado simplemente adopta  el estado de rechazo del Promesa que entonces es llamado (si se convierte en rechazado).

+ +

Sintaxis

+ +
p.then(alCumplir[, enRechazo]);
+
+p.then(function(value) {
+   // cumplimiento
+  }, function(reason) {
+  // rechazo
+});
+
+ +

Parámetros

+ +

Retorna un Promise el cual es determinado por las funciones input:

+ + + +
+
alCumplir {{optional_inline}}
+
Una Función es llamada si la Promesa se cumple. Esta función tiene un argumento, el valor de cumplimiento. Si no es una función, se reemplaza internamente con una función de "Identidad"  (devuelve el argumento recibido).
+
enRechazo {{optional_inline}}
+
Una Función es llamada si la Promesa es rechazada. Esta función tiene un argumento, la razón de rechazo. Si no es una función, se reemplaza internamente con una función "Lanzador" (lanza un error que recibió como argumento).
+
+ +

Valor de retorno

+ +

Un Promise en estado pendiente. La función de control (alCumplir o enRechazo) es llamada de forma asíncrona (tan pronto como el stack se vacíe). Después de la invocación de la función de control pueden darse diferentes casos:

+ + + +

Veamos un ejemplo para demostrar la asincronía del método then.

+ +
// al usar una promesa revuelta, el bloque 'then' se lanzará automáticamente,
+// pero sus funciones controladoras se lanzarán asíncronamente,
+// como demuestran los console.logs
+var promResuelta = Promise.resolve(33);
+
+var thenProm = promResuelta.then(función(valor){
+    console.log("ésto será invocado cuando acabe el stack principal. El valor recibido y devuelto es: " + valor);
+    return valor;
+});
+// imprimimos al momento el valor de thenProm()
+console.log(thenProm);
+
+// usando setTimeout podemos posponer la ejecución de una función al momento en el que el stack quede vacío.
+setTimeout(función(){
+    console.log(thenProm);
+});
+
+
+// logs, en orden:
+// Promise {[[EstadoPromise¡]]: "pendiente", [[ValorPromise]]: undefined}
+// "ésto será invocado cuando acabe el stack principal. El valor recibido y devuelto es: "33"
+// Promise {[[EstadoPromise]]: "resuelta", [[ValorPromise]]: 33}
+ +

Descripción

+ +

Ya que los métodos then y {{jsxref("Promise.prototype.catch()")}} devuelven promesas, pueden ser encadenados — una operación llamada composición.

+ +

Ejemplos

+ +

Usando el metodo then

+ +
var p1 = new Promise(function(resolve, reject) {
+  resolve('Success!');
+  // or
+  // reject ("Error!");
+});
+
+p1.then(function(value) {
+  console.log(value); // Success!
+}, function(reason) {
+  console.log(reason); // Error!
+});
+
+ +

Encadenamiento

+ +

El método then devuelve una Promise que permite encadenar métodos.

+ +

Puedes pasar una lambda a then y si devuelve una promesa, una Promise equivalente será expuesta al then subsecuente en la cadena de métodos. El fragmento incluido debajo simula un código asíncrono mediante la función setTimeout

+ +
Promise.resolve('foo')
+  // 1. Recibe "foo", concatena "bar" con él, y resuelve la cadena con el siguiente 'then'
+  .then(función(hilo) {
+    return new Promise(function(resolve, reject) {
+      setTimeout(función() {
+        hilo += 'bar';
+        resolve(hilo);
+      }, 1);
+    });
+  })
+  // 2. recibe "foobar", registra una función de llamada para opear sobre ese hilo
+  // e imprimirlo en la consola, pero no antes de devolver el hilo sin modificar
+  // en la resolución del siguiente 'then'
+  .then(función(hilo) {
+    setTimeout(función() {
+      hilo += 'baz';
+      console.log(hilo);
+    }, 1)
+    return hilo;
+  })
+  // 3. imprime mensajes útiles sobre cómo funcionará el código en esta sección
+  // antes de que el hilo se procese por el código de prueba
+  // antes del bloque 'then'.
+  .then(función(hilo) {
+    console.log("Último Then:  oops... no me he molestado en instanciar y devolver " +
+                "una promesa en el then anterior, así que la secuencia puede ser un poco " +
+                "sorprendente");
+
+    // Observemos que `string` no incluye el trozo 'baz' en éste punto. Ésto ocurre
+    // porque lo hemos contruido para que ocurra asíncronamente con una función setTimeout
+    console.log(hilo);
+});
+ +

Cuando un valor sencillamente se devuelve desde un lambda then , devolverá un Promise.resolve(<valor devuelto por el controlador que haya sido invocado>).

+ +
var p2 = nueva Promise(function(resolver, rechazar) {
+  resolver(1);
+});
+
+p2.then(función(valor) {
+  console.log(valor); // 1
+  return valor + 1;
+}).then(function(value) {
+  console.log(valor + '- Este uso síncrono es prácticamente inútil'); // 2- Este uso síncrono es prácticamente inútil
+});
+
+p2.then(función(valor) {
+  console.log(valor); // 1
+});
+
+ +

Una llamada a  then devolverá una promesa rechazada si la función lanza un error o devuelve una Promise rechazada.

+ +
Promise.resolve()
+  .then( () => {
+    // Hace que .then() devuelva una promera rechazada
+    throw new Error('Oh no!');
+  })
+  .then( () => {
+    console.log( 'No invocada.' );
+  }, error => {
+    console.error( 'Función de rechazo llamada: ', error );
+});
+ +

En cualquier otro caso, una Promise en resolución será devuelta. El el siguiente ejemplo, el primer then() devolverá un 42 dentro de una Promise en resolución, aunque la Promise de la cadena fue rechazada.

+ +
Promise.reject()
+  .then( () => 99, () => 42 ) // enRechazo devuelve 42, que está dentro de una Promise en resolución
+  .then( respuesta => console.log( 'Resuelta con ' + respuesta ) ); // Resuelta con 42
+ +

En la práctica, suele ser preferible capturar promesas rechazadas en lugar de utilizar la sintaxis de dos casos de then, como demostramos abajo.

+ +
Promise.resolve()
+  .then( () => {
+    // Hace que .then() devuelva una promesa rechazada
+    throw new Error('Oh no!');
+  })
+  .catch( error => {
+    console.error( 'función enRechazo invocada: ', error );
+  })
+  .then( () => {
+    console.log( "Siempre soy invocada, incluso si la promesa del then previo es rechazada" );
+  });
+ +


+ También puedes usar encadenamiento para implementar una función con una API basada en promesas, sobre una función del mismo tipo.

+ +
function traer_datos_actuales() {
+  // La función fetch() de la API devuelve una Promesa. Esta función
+  // expone una API similar, pero el valor de cumplimiento
+  // de la Promesa de esta función tiene más tareas
+  // implementadas sobre ella.
+  return fetch('datos_actuales.json').then((response) => {
+    if (response.headers.get('content-type') != 'application/json') {
+      throw new TypeError();
+    }
+    var j = response.json();
+    // podríamos hacer algo con j
+    return j; // valor de cumplimiento asignado al usuario de
+              // fetch_datos_actuales().then()
+  });
+}
+
+ +

Si alCumplir devuelve una promesa, el valor de retorno de then será resuelto o rechazado por la promesa.

+ +
function resolverDespues(resolver, reject) {
+  setTimeout(función () {
+    resolver(10);
+  }, 1000);
+}
+function rechazarDespues(resolver, reject) {
+  setTimeout(function () {
+    resolver(new Error('Error'));
+  }, 1000);
+}
+
+var p1 = Promise.resolve('foo');
+var p2 = p1.then(función() {
+  // Devuelve la promesa aquí, que será resuelta igualada a 10 tras 1 segundo
+  return new Promise(resolverDespues);
+});
+p2.then(función(v) {
+  console.log('resuelta', v);  // "resuelta", 10
+}, función(e) {
+  // no invocada
+  console.log('rechazada', e);
+});
+
+var p3 = p1.then(funcion() {
+ // Devuelve la promesa aquí, que será rechazada con 'Error' despues de 1 segundo
+ return new Promise(rechazarDespues);
+});
+p3.then(funcion(v) {
+ // no invocada
+  console.log('resuelta', v);
+}, funcion(e) {
+  console.log('rechazada', e); // "rechazada", 'Error'
+});
+
+ +

window.setImmediate estilo polyfill basado en promesas

+ +

Usar un método {{jsxref("Function.prototype.bind()")}}Reflect.apply ({{jsxref("Reflect.apply()")}}) para crear un (non-cancellable) setImmediate-style function.

+ +
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;
+})();
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-promise.prototype.then', 'Promise.prototype.then')}}{{Spec2('ES2015')}}Definición inicial en el estándar ECMA.
{{SpecName('ESDraft', '#sec-promise.prototype.then', 'Promise.prototype.then')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad en navegador

+ + + +

{{Compat("javascript/promise","Promise.prototype.then")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/proxy/handler/getownpropertydescriptor/index.html b/files/es/web/javascript/reference/global_objects/proxy/handler/getownpropertydescriptor/index.html deleted file mode 100644 index 6c050f7f0a..0000000000 --- a/files/es/web/javascript/reference/global_objects/proxy/handler/getownpropertydescriptor/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: handler.getOwnPropertyDescriptor() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor -tags: - - ECMAScript 2015 - - JavaScript - - Proxy - - metodo -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor ---- -
{{JSRef}}
- -
El método handler.getOwnPropertyDescriptor() captura {{jsxref("Object.getOwnPropertyDescriptor()")}}.
- -

Sintaxis

- -
var p = new Proxy(target, {
-  getOwnPropertyDescriptor: function(target, prop) {
-  }
-});
-
- -

Parámetros

- -

El método getOwnPropertyDescriptor recibe los siguiente parámetros. this está asociado al handler del proxy.

- -
-
target
-
El objeto destino.
-
prop
-
El nombre de la propiedad cuya descripción ha de ser devuelta.
-
- -

Valor Devuelto

- -

El método getOwnPropertyDescriptor debe devolver un objeto o  undefined.

- -

Descripción

- -

El método handler.getOwnPropertyDescriptor() captura {{jsxref("Object.getOwnPropertyDescriptor()")}}.

- -

Intercepciones

- -

Este método intercepta las siguientes operaciones:

- - - -

Invariantes

- -

Si los siguientes invariantes son violados, el proxy lanzará {{jsxref("TypeError")}}:

- - - -

Ejemplos

- -

El siguiente código captura {{jsxref("Object.getOwnPropertyDescriptor()")}}.

- -
var 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
-
- -

El siguiente código viola uno de los invariantes definidos previamente.

- -
var obj = { a: 10 };
-Object.preventExtensions(obj);
-var p = new Proxy(obj, {
-  getOwnPropertyDescriptor: function(target, prop) {
-    return undefined;
-  }
-});
-
-Object.getOwnPropertyDescriptor(p, 'a'); // TypeError is thrown
-
- -

Especificaciones

- - - - - - - - - - - - - - - - - - - -
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ES2015')}}Definición Inicial.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilidad con buscadores

- -
- - -

{{Compat("javascript.builtins.Proxy.handler.getOwnPropertyDescriptor")}}

-
- -

Ver también

- - diff --git a/files/es/web/javascript/reference/global_objects/proxy/handler/index.html b/files/es/web/javascript/reference/global_objects/proxy/handler/index.html deleted file mode 100644 index 2be6abb116..0000000000 --- a/files/es/web/javascript/reference/global_objects/proxy/handler/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Proxy handler -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler -tags: - - ECMAScript 2015 - - JavaScript - - NeedsTranslation - - Proxy - - TopicStub -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy -translation_of_original: Web/JavaScript/Reference/Global_Objects/Proxy/handler ---- -
{{JSRef}}
- -

The proxy's handler object is a placeholder object which contains traps for {{jsxref("Proxy", "proxies", "", 1)}}.

- -

Methods

- -

All traps are optional. If a trap has not been defined, the default behavior is to forward the operation to the target.

- -
-
{{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}
-
A trap for {{jsxref("Object.getPrototypeOf")}}.
-
{{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}
-
A trap for {{jsxref("Object.setPrototypeOf")}}.
-
{{jsxref("Global_Objects/Proxy/handler/isExtensible", "handler.isExtensible()")}}
-
A trap for {{jsxref("Object.isExtensible")}}.
-
{{jsxref("Global_Objects/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}
-
A trap for {{jsxref("Object.preventExtensions")}}.
-
{{jsxref("Global_Objects/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}
-
A trap for {{jsxref("Object.getOwnPropertyDescriptor")}}.
-
{{jsxref("Global_Objects/Proxy/handler/defineProperty", "handler.defineProperty()")}}
-
A trap for {{jsxref("Object.defineProperty")}}.
-
{{jsxref("Global_Objects/Proxy/handler/has", "handler.has()")}}
-
A trap for the {{jsxref("Operators/in", "in")}} operator.
-
{{jsxref("Global_Objects/Proxy/handler/get", "handler.get()")}}
-
A trap for getting property values.
-
{{jsxref("Global_Objects/Proxy/handler/set", "handler.set()")}}
-
A trap for setting property values.
-
{{jsxref("Global_Objects/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}
-
A trap for the {{jsxref("Operators/delete", "delete")}} operator.
-
{{jsxref("Global_Objects/Proxy/handler/ownKeys", "handler.ownKeys()")}}
-
A trap for {{jsxref("Object.getOwnPropertyNames")}} and {{jsxref("Object.getOwnPropertySymbols")}}.
-
{{jsxref("Global_Objects/Proxy/handler/apply", "handler.apply()")}}
-
A trap for a function call.
-
{{jsxref("Global_Objects/Proxy/handler/construct", "handler.construct()")}}
-
A trap for the {{jsxref("Operators/new", "new")}} operator.
-
- -

Some non-standard traps are obsolete and have been removed.

- -

Specifications

- - - - - - - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ESDraft')}}The enumerate handler has been removed.
- -

Browser compatibility

- - - -

{{Compat("javascript.builtins.Proxy.handler")}}

- -

See also

- - diff --git a/files/es/web/javascript/reference/global_objects/proxy/handler/set/index.html b/files/es/web/javascript/reference/global_objects/proxy/handler/set/index.html deleted file mode 100644 index ee5ac155e7..0000000000 --- a/files/es/web/javascript/reference/global_objects/proxy/handler/set/index.html +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: handler.set() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/set -tags: - - ECMAScript 2015 - - JavaScript - - Proxy - - metodo -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set ---- -
{{JSRef}}
- -

El método handler.set() captura las asignaciones de un valor a una determinada propiedad.

- -

Sintaxis

- -
var p = new Proxy(target, {
-  set: function(target, property, value, receiver) {
-  }
-});
-
- -

Parámetros

- -

El método set recibe los siguientes parámetros.this se asocia al handler.

- -
-
target
-
El objeto objetivo.
-
property
-
El nombre de la propiedad a la que se le asignará el valor.
-
value
-
El nuevo valor asignado a la propiedad.
-
receiver
-
El objeto al que originalmente iba dirigida la asignación. Normalmente es el proxy. Sin embargo el manejador o set handler puede ser llamado de forma indirecta a través de un prototipo entre otros.
-
Por ejemplo, suponga que un escript ejecuta la sentencia obj.name = "jen", y obj no es un proxy, y no posee la propiedad .name, pero tiene un proxy en su cadena de prototipos. El manejador set de este proxy será llamado y  obj será pasado como el receiver.
-
- -

Valor Devuelto

- -

El método set debe devolver un valor booleano. Devolverá true para indicar que la asignación se ha llevado a cabo con éxito. Si devuelve false, y la asignación tiene lugar en modo estricto, se lanzará un error de tipo TypeError.

- -

Descripción

- -

El método handler.set captura la asignación de un valor a una propiedad.

- -

Qué intercepta

- -

Las siguientes operaciones son capturadas:

- - - -

Invariantes

- -

Si los siguientes invariantes son violados, el proxy lanzará un {{jsxref("TypeError")}}:

- - - -

Ejemplos

- -

El siguiente código captura la asignación de un valor a una propiedad.

- -
var p = new Proxy({}, {
-  set: function(target, prop, value, receiver) {
-    target[prop] = value
-    console.log('property set: ' + prop + ' = ' + value)
-    return true
-  }
-})
-
-console.log('a' in p)  // false
-
-p.a = 10               // "propiedad asignada: a = 10"
-console.log('a' in p)  // true
-console.log(p.a)       // 10
-
- -

Especificaciones

- - - - - - - - - - - - - - - - - - - -
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilidad con los buscadores

- -
- - -

{{Compat("javascript.builtins.Proxy.handler.set")}}

-
- -

Ver también

- - diff --git a/files/es/web/javascript/reference/global_objects/proxy/index.html b/files/es/web/javascript/reference/global_objects/proxy/index.html new file mode 100644 index 0000000000..1469b1f138 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/proxy/index.html @@ -0,0 +1,439 @@ +--- +title: Proxy +slug: Web/JavaScript/Referencia/Objetos_globales/Proxy +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy +--- +
+
{{JSRef}}
+
+ +

El objeto Proxy se usa para definir un comportamiento personalizado para operaciones fundamentales (por ejemplo, para observar propiedades, cuando se asignan, enumeración, invocación de funciones, etc).

+ +

Terminología

+ +
+
handler
+
Objeto que gestiona las intercepciones a las propiedades del objeto proxy.
+
traps
+
Son los métodos interceptores que proveen acceso a las propiedades. Es análogo al concepto de traps en los sistemas operativos.
+
target
+
El objeto que virtualiza este objeto. Suele usarse como backend de almacenamiento del proxy. Invariantes (semántica que no acepta cambios) respecto a la no extensibilidad del objeto o propiedades no configurables se verifican contra este target.
+
+ +

Sintaxis

+ +
var p = new Proxy(target, handler);
+
+ +

Parámetros

+ +
+
target
+
Un objeto target (puede ser cualquier órden de objetos, incluyendo un array nativa, funcion o incluso otro proxy) o función que contenga el Proxy
+
handler
+
Un objeto cuyas propiedades son funciones que definen el comportamiento del proxy cuando una operación es realizada en él.
+
+ +

Métodos

+ +
+
{{jsxref("Proxy.revocable()")}}
+
Crea un objeto Proxy revocable
+
+ +

Métodos del objeto handler

+ +

The handler object is a placeholder object which contains traps for Proxy.

+ +
{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler', 'Methods') }}
+ +

Ejemplos

+ +

Ejemplo básico

+ +

En este simple ejemplo el número 37 se devuelve como valor predeterminado cuando la propiedad name no se encuentra en el objeto. Se utilizando el manejador get.

+ +
var handler = {
+    get: function(target, name){
+        return name in target?
+            target[name] :
+            37;
+    }
+};
+
+var p = new Proxy({}, handler);
+p.a = 1;
+p.b = undefined;
+
+console.log(p.a, p.b); // 1, undefined
+console.log('c' in p, p.c); // false, 37
+
+ +

No-op forwarding proxy

+ +

In this example, we are using a native JavaScript object to which our proxy will forward all operations that are applied to it.

+ +
var target = {};
+var p = new Proxy(target, {});
+
+p.a = 37; // operation forwarded to the target
+
+console.log(target.a); // 37. The operation has been properly forwarded
+
+ +

Validación

+ +

Con un Proxy, puedes validar fácilmente el valor puesto a un objeto. Este ejemplo usa el handler (manejador) set.

+ +
let validator = {
+  set: function(obj, prop, value) {
+    if (prop === 'age') {
+      if (!Number.isInteger(value)) {
+        throw new TypeError('The age is not an integer');
+      }
+      if (value > 200) {
+        throw new RangeError('The age seems invalid');
+      }
+    }
+
+    // The default behavior to store the value
+    obj[prop] = value;
+  }
+};
+
+let person = new Proxy({}, validator);
+
+person.age = 100;
+console.log(person.age); // 100
+person.age = 'young'; // Throws an exception
+person.age = 300; // Throws an exception
+
+ +

Extending constructor

+ +

A function proxy could easily extend a constructor with a new constructor. This example uses the construct and apply handlers.

+ +
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.sex = "M";
+
+var Peter = new Boy("Peter", 13);
+console.log(Peter.sex);  // "M"
+console.log(Peter.name); // "Peter"
+console.log(Peter.age);  // 13
+ +

Manipular nodos del DOM

+ +

A veces queremos cambiar el atributo clase de dos elementos diferentes. Aquí se muestra cómo usando el handler (manejador) set.

+ +
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');
+      }
+    }
+
+    // The default behavior to store the value
+    obj[prop] = newval;
+  }
+});
+
+let i1 = view.selected = document.getElementById('item-1');
+console.log(i1.getAttribute('aria-selected')); // 'true'
+
+let i2 = view.selected = document.getElementById('item-2');
+console.log(i1.getAttribute('aria-selected')); // 'false'
+console.log(i2.getAttribute('aria-selected')); // 'true'
+
+ +

Value correction and an extra property

+ +

The products proxy object evaluates the passed value and convert it to an array if needed. The object also supports an extra property called latestBrowser both as a getter and a setter.

+ +
let products = new Proxy({
+  browsers: ['Internet Explorer', 'Netscape']
+},
+{
+  get: function(obj, prop) {
+    // An extra property
+    if (prop === 'latestBrowser') {
+      return obj.browsers[obj.browsers.length - 1];
+    }
+
+    // The default behavior to return the value
+    return obj[prop];
+  },
+  set: function(obj, prop, value) {
+    // An extra property
+    if (prop === 'latestBrowser') {
+      obj.browsers.push(value);
+      return;
+    }
+
+    // Convert the value if it is not an array
+    if (typeof value === 'string') {
+      value = [value];
+    }
+
+    // The default behavior to store the value
+    obj[prop] = value;
+  }
+});
+
+console.log(products.browsers); // ['Internet Explorer', 'Netscape']
+products.browsers = 'Firefox'; // pass a string (by mistake)
+console.log(products.browsers); // ['Firefox'] <- no problem, the value is an array
+
+products.latestBrowser = 'Chrome';
+console.log(products.browsers); // ['Firefox', 'Chrome']
+console.log(products.latestBrowser); // 'Chrome'
+
+ +

Finding an array item object by its property

+ +

This proxy extends an array with some utility features. As you see, you can flexibly "define" properties without using Object.defineProperties. This example can be adapted to find a table row by its cell. In that case, the target will be table.rows.

+ +
let products = new Proxy([
+  { name: 'Firefox', type: 'browser' },
+  { name: 'SeaMonkey', type: 'browser' },
+  { name: 'Thunderbird', type: 'mailer' }
+],
+{
+  get: function(obj, prop) {
+    // The default behavior to return the value; prop is usually an integer
+    if (prop in obj) {
+      return obj[prop];
+    }
+
+    // Get the number of products; an alias of 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];
+      }
+    }
+
+    // Get a product by name
+    if (result) {
+      return result;
+    }
+
+    // Get products by type
+    if (prop in types) {
+      return types[prop];
+    }
+
+    // Get product types
+    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
+
+ +

A complete traps list example

+ +

Now in order to create a complete sample traps list, for didactic purposes, we will try to proxify a non native object that is particularly suited to this type of operation: the docCookies global object created by the "little framework" published on the document.cookie page.

+ +
/*
+  var docCookies = ... get the "docCookies" object here:
+  https://developer.mozilla.org/en-US/docs/DOM/document.cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support
+*/
+
+var docCookies = new Proxy(docCookies, {
+  get: function (oTarget, sKey) {
+    return oTarget[sKey] || oTarget.getItem(sKey) || undefined;
+  },
+  set: function (oTarget, sKey, vValue) {
+    if (sKey in oTarget) { return false; }
+    return oTarget.setItem(sKey, vValue);
+  },
+  deleteProperty: function (oTarget, sKey) {
+    if (sKey in oTarget) { return false; }
+    return oTarget.removeItem(sKey);
+  },
+  enumerate: function (oTarget, sKey) {
+    return oTarget.keys();
+  },
+  ownKeys: function (oTarget, sKey) {
+    return oTarget.keys();
+  },
+  has: function (oTarget, sKey) {
+    return sKey in oTarget || oTarget.hasItem(sKey);
+  },
+  defineProperty: function (oTarget, sKey, oDesc) {
+    if (oDesc && "value" in oDesc) { oTarget.setItem(sKey, oDesc.value); }
+    return oTarget;
+  },
+  getOwnPropertyDescriptor: function (oTarget, sKey) {
+    var vValue = oTarget.getItem(sKey);
+    return vValue ? {
+      value: vValue,
+      writable: true,
+      enumerable: true,
+      configurable: false
+    } : undefined;
+  },
+});
+
+/* Cookies test */
+
+console.log(docCookies.my_cookie1 = "First value");
+console.log(docCookies.getItem("my_cookie1"));
+
+docCookies.setItem("my_cookie1", "Changed value");
+console.log(docCookies.my_cookie1);
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ESDraft')}}
+ +

Browser compatibility

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(49.0)}}13 (10586){{ CompatGeckoDesktop("18") }}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatUnknown}}{{CompatChrome(49.0)}}{{ CompatGeckoDesktop("18") }}13 (10586){{CompatUnknown}}{{CompatUnknown}}
+
+ +

Gecko specific notes

+ + + +

See also

+ + + +

Licensing note

+ +

Some content (text, examples) in this page has been copied or adapted from the ECMAScript wiki which content is licensed CC 2.0 BY-NC-SA.

diff --git a/files/es/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html b/files/es/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html new file mode 100644 index 0000000000..6c050f7f0a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html @@ -0,0 +1,129 @@ +--- +title: handler.getOwnPropertyDescriptor() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor +tags: + - ECMAScript 2015 + - JavaScript + - Proxy + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor +--- +
{{JSRef}}
+ +
El método handler.getOwnPropertyDescriptor() captura {{jsxref("Object.getOwnPropertyDescriptor()")}}.
+ +

Sintaxis

+ +
var p = new Proxy(target, {
+  getOwnPropertyDescriptor: function(target, prop) {
+  }
+});
+
+ +

Parámetros

+ +

El método getOwnPropertyDescriptor recibe los siguiente parámetros. this está asociado al handler del proxy.

+ +
+
target
+
El objeto destino.
+
prop
+
El nombre de la propiedad cuya descripción ha de ser devuelta.
+
+ +

Valor Devuelto

+ +

El método getOwnPropertyDescriptor debe devolver un objeto o  undefined.

+ +

Descripción

+ +

El método handler.getOwnPropertyDescriptor() captura {{jsxref("Object.getOwnPropertyDescriptor()")}}.

+ +

Intercepciones

+ +

Este método intercepta las siguientes operaciones:

+ + + +

Invariantes

+ +

Si los siguientes invariantes son violados, el proxy lanzará {{jsxref("TypeError")}}:

+ + + +

Ejemplos

+ +

El siguiente código captura {{jsxref("Object.getOwnPropertyDescriptor()")}}.

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

El siguiente código viola uno de los invariantes definidos previamente.

+ +
var obj = { a: 10 };
+Object.preventExtensions(obj);
+var p = new Proxy(obj, {
+  getOwnPropertyDescriptor: function(target, prop) {
+    return undefined;
+  }
+});
+
+Object.getOwnPropertyDescriptor(p, 'a'); // TypeError is thrown
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ES2015')}}Definición Inicial.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con buscadores

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.getOwnPropertyDescriptor")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/proxy/proxy/index.html b/files/es/web/javascript/reference/global_objects/proxy/proxy/index.html new file mode 100644 index 0000000000..2be6abb116 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/proxy/proxy/index.html @@ -0,0 +1,84 @@ +--- +title: Proxy handler +slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler +tags: + - ECMAScript 2015 + - JavaScript + - NeedsTranslation + - Proxy + - TopicStub +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy +translation_of_original: Web/JavaScript/Reference/Global_Objects/Proxy/handler +--- +
{{JSRef}}
+ +

The proxy's handler object is a placeholder object which contains traps for {{jsxref("Proxy", "proxies", "", 1)}}.

+ +

Methods

+ +

All traps are optional. If a trap has not been defined, the default behavior is to forward the operation to the target.

+ +
+
{{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}
+
A trap for {{jsxref("Object.getPrototypeOf")}}.
+
{{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}
+
A trap for {{jsxref("Object.setPrototypeOf")}}.
+
{{jsxref("Global_Objects/Proxy/handler/isExtensible", "handler.isExtensible()")}}
+
A trap for {{jsxref("Object.isExtensible")}}.
+
{{jsxref("Global_Objects/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}
+
A trap for {{jsxref("Object.preventExtensions")}}.
+
{{jsxref("Global_Objects/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}
+
A trap for {{jsxref("Object.getOwnPropertyDescriptor")}}.
+
{{jsxref("Global_Objects/Proxy/handler/defineProperty", "handler.defineProperty()")}}
+
A trap for {{jsxref("Object.defineProperty")}}.
+
{{jsxref("Global_Objects/Proxy/handler/has", "handler.has()")}}
+
A trap for the {{jsxref("Operators/in", "in")}} operator.
+
{{jsxref("Global_Objects/Proxy/handler/get", "handler.get()")}}
+
A trap for getting property values.
+
{{jsxref("Global_Objects/Proxy/handler/set", "handler.set()")}}
+
A trap for setting property values.
+
{{jsxref("Global_Objects/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}
+
A trap for the {{jsxref("Operators/delete", "delete")}} operator.
+
{{jsxref("Global_Objects/Proxy/handler/ownKeys", "handler.ownKeys()")}}
+
A trap for {{jsxref("Object.getOwnPropertyNames")}} and {{jsxref("Object.getOwnPropertySymbols")}}.
+
{{jsxref("Global_Objects/Proxy/handler/apply", "handler.apply()")}}
+
A trap for a function call.
+
{{jsxref("Global_Objects/Proxy/handler/construct", "handler.construct()")}}
+
A trap for the {{jsxref("Operators/new", "new")}} operator.
+
+ +

Some non-standard traps are obsolete and have been removed.

+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ESDraft')}}The enumerate handler has been removed.
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Proxy.handler")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/proxy/proxy/set/index.html b/files/es/web/javascript/reference/global_objects/proxy/proxy/set/index.html new file mode 100644 index 0000000000..ee5ac155e7 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/proxy/proxy/set/index.html @@ -0,0 +1,122 @@ +--- +title: handler.set() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/set +tags: + - ECMAScript 2015 + - JavaScript + - Proxy + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set +--- +
{{JSRef}}
+ +

El método handler.set() captura las asignaciones de un valor a una determinada propiedad.

+ +

Sintaxis

+ +
var p = new Proxy(target, {
+  set: function(target, property, value, receiver) {
+  }
+});
+
+ +

Parámetros

+ +

El método set recibe los siguientes parámetros.this se asocia al handler.

+ +
+
target
+
El objeto objetivo.
+
property
+
El nombre de la propiedad a la que se le asignará el valor.
+
value
+
El nuevo valor asignado a la propiedad.
+
receiver
+
El objeto al que originalmente iba dirigida la asignación. Normalmente es el proxy. Sin embargo el manejador o set handler puede ser llamado de forma indirecta a través de un prototipo entre otros.
+
Por ejemplo, suponga que un escript ejecuta la sentencia obj.name = "jen", y obj no es un proxy, y no posee la propiedad .name, pero tiene un proxy en su cadena de prototipos. El manejador set de este proxy será llamado y  obj será pasado como el receiver.
+
+ +

Valor Devuelto

+ +

El método set debe devolver un valor booleano. Devolverá true para indicar que la asignación se ha llevado a cabo con éxito. Si devuelve false, y la asignación tiene lugar en modo estricto, se lanzará un error de tipo TypeError.

+ +

Descripción

+ +

El método handler.set captura la asignación de un valor a una propiedad.

+ +

Qué intercepta

+ +

Las siguientes operaciones son capturadas:

+ + + +

Invariantes

+ +

Si los siguientes invariantes son violados, el proxy lanzará un {{jsxref("TypeError")}}:

+ + + +

Ejemplos

+ +

El siguiente código captura la asignación de un valor a una propiedad.

+ +
var p = new Proxy({}, {
+  set: function(target, prop, value, receiver) {
+    target[prop] = value
+    console.log('property set: ' + prop + ' = ' + value)
+    return true
+  }
+})
+
+console.log('a' in p)  // false
+
+p.a = 10               // "propiedad asignada: a = 10"
+console.log('a' in p)  // true
+console.log(p.a)       // 10
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con los buscadores

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.set")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/rangeerror/prototype/index.html b/files/es/web/javascript/reference/global_objects/rangeerror/prototype/index.html deleted file mode 100644 index fa75157c9d..0000000000 --- a/files/es/web/javascript/reference/global_objects/rangeerror/prototype/index.html +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: RangeError.prototype -slug: Web/JavaScript/Reference/Global_Objects/RangeError/prototype -tags: - - Error - - JavaScript - - Propiedad - - Prototipo - - Prototype - - RangeError -translation_of: Web/JavaScript/Reference/Global_Objects/RangeError -translation_of_original: Web/JavaScript/Reference/Global_Objects/RangeError/prototype ---- -
{{JSRef}}
- -

La propiedad RangeError.prototype representa el prototipo de {{jsxref("RangeError")}}.

- -
{{js_property_attributes(0, 0, 0)}}
- -

Descripción

- -

Todas las instancias de {{jsxref("RangeError")}} heredan de RangeError.prototype. Puede utilizar el prototipo para añadir propiedades o métodos a todas las instancias.

- -

Propiedades

- -
-
RangeError.prototype.constructor
-
Especifica la función que crea instancias del prototipo.
-
{{jsxref("Error.prototype.message", "RangeError.prototype.message")}}
-
Mensaje de error. Aunque ECMA-262 especifica que {{jsxref("RangeError")}} debe procurar su propio message, en SpiderMonkey, se hereda de {{jsxref("Error.prototype.message")}}.
-
{{jsxref("Error.prototype.name", "RangeError.prototype.name")}}
-
Nombre del error. Heredada de {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.fileName", "RangeError.prototype.fileName")}}
-
Ruta al fichero en el que se produjo el error. Heredada de {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.lineNumber", "RangeError.prototype.lineNumber")}}
-
Número de línea en el fichero en el que se produjo el error. Heredada de {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.columnNumber", "RangeError.prototype.columnNumber")}}
-
Número de columna de la línea en la que se produjo. Heredada de {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.stack", "RangeError.prototype.stack")}}
-
Pila de llamadas. Heredada de {{jsxref("Error")}}.
-
- -

Métodos

- -

Aunque el prototipo del objeto {{jsxref("RangeError")}} no contiene métodos propios, las instancias de {{jsxref("RangeError")}} heredan algunos a través de la cadena de prototipos.

- -

Especificaciones

- - - - - - - - - - - - - - - - - - - - - - - - -
EspecificaciónEstadoCommentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial.
{{SpecName('ES5.1', '#sec-15.11.7.6', 'NativeError.prototype')}}{{Spec2('ES5.1')}}Definido como NativeError.prototype.
{{SpecName('ES6', '#sec-nativeerror.prototype', 'NativeError.prototype')}}{{Spec2('ES6')}}Definido como NativeError.prototype.
- -

Compatibilidad de navegadores

- -
{{CompatibilityTable}}
- -
- - - - - - - - - - - - - - - - - - - -
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
-
- -
- - - - - - - - - - - - - - - - - - - - - -
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
-
- -

Vea también

- - diff --git a/files/es/web/javascript/reference/global_objects/referenceerror/index.html b/files/es/web/javascript/reference/global_objects/referenceerror/index.html new file mode 100644 index 0000000000..5b48497b5d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/referenceerror/index.html @@ -0,0 +1,99 @@ +--- +title: ReferenceError +slug: Web/JavaScript/Referencia/Objetos_globales/ReferenceError +tags: + - Clase + - Class + - JavaScript + - Object + - Objeto + - ReferenceError + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/ReferenceError +--- +
{{JSRef("Objetos_globales", "ReferenceError")}}
+ +

El objeto ReferenceError representa un error cuando se hace referencia a una variable inexistente.

+ +

Constructor

+ +
+
ReferenceError()
+
Crea un nuevo objeto ReferenceError.
+
+ +

Propiedades de la instancia

+ +
+
{{jsxref("Error.prototype.message", "ReferenceError.prototype.message")}}
+
Mensaje de error. Aunque ECMA-262 especifica que {{jsxref("ReferenceError")}} debe proporcionar su propia propiedad message, en SpiderMonkey, hereda {{jsxref("Error.prototype.message")}}.
+
{{jsxref("Error.prototype.name", "ReferenceError.prototype.name")}}
+
Nombre del error. Heredado de {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.fileName", "ReferenceError.prototype.fileName")}}
+
Ruta al archivo que generó este error. Heredado de {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.lineNumber", "ReferenceError.prototype.lineNumber")}}
+
Número de línea en el archivo que generó este error. Heredado de {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.columnNumber", "ReferenceError.prototype.columnNumber")}}
+
Número de columna en la línea que generó este error. Heredado de {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.stack", "ReferenceError.prototype.stack")}}
+
Seguimiento de la pila. Heredado de {{jsxref("Error")}}.
+
+ +

Ejemplos

+ +

Capturar un ReferenceError

+ +
try {
+  let a = undefinedVariable
+} catch (e) {
+  console.log(e instanceof ReferenceError)  // true
+  console.log(e.message)                    // "undefinedVariable no está definida"
+  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"
+}
+
+ +

Crear un ReferenceError

+ +
try {
+  throw new ReferenceError('Hola', 'someFile.js', 10)
+} catch (e) {
+  console.log(e instanceof ReferenceError)  // true
+  console.log(e.message)                    // "Hola"
+  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"
+}
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-referenceerror', 'ReferenceError')}}
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/regexp/compile/index.html b/files/es/web/javascript/reference/global_objects/regexp/compile/index.html new file mode 100644 index 0000000000..0bce81a56d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/regexp/compile/index.html @@ -0,0 +1,93 @@ +--- +title: RegExp.prototype.compile() +slug: Web/JavaScript/Referencia/Objetos_globales/RegExp/compile +tags: + - Desaprovado + - Expresion Regular + - JavaScript + - Obsoleto + - Prototype + - Referencia + - RegExp + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/compile +--- +
{{JSRef}} {{deprecated_header}}
+ +

El método obsoleto compile() es usado para (re-)compilar una expresión regular durante la ejecución del script. Es básicamente lo mismo que el constructor RegExp.

+ +

Sintaxis

+ +
regexObj.compile(patrón, flags)
+ +

Parámetros

+ +
+
patrón
+
El texto de la expresión regular.
+
flags
+
+

Si es especificado, las flags pueden tener cualquier combinación de los siguientes valores:

+ +
+
g
+
búsqueda global (global match)
+
i
+
ignorar mayúsculas o minúsculas
+
m
+
Tratar caracteres de inicio y fin (^ y $) como multiples líneas de texto(por ejemplo: encontrar el inicio o fin de cada línea delimitada por \n o \r, no sólo al inicio o fin de toda la entrada de texto)
+
y
+
sticky; busca solamente desde el índice indicado por la propiedad lastIndex de esta expresión regular en la cadena objetivo (y no intenta buscar desde ningún índice posterior).
+
+
+
+ +

Descripción

+ +

 El método compile es obsoleto. Puedes simplemente utilizar el constructor RegExp para lograr el mismo efecto.

+ +

Ejemplos

+ +

Usando compile()

+ +

El siguiente ejemplo muestra como recompilar una expresión regultar con un nuevo patrón y nuevas flags.

+ +
var regexObj = new RegExp('foo', 'gi');
+regexObj.compile('new foo', 'g');
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoCommentario
{{SpecName('ES6', '#sec-regexp.prototype.compile', 'RegExp.prototype.compile')}}{{Spec2('ES6')}}Definición inicial. Definido en la (norma) Annex B ECMAScript para Características Adicionales para Navegadores Web.
{{SpecName('ESDraft', '#sec-regexp.prototype.compile', 'RegExp.prototype.compile')}}{{Spec2('ESDraft')}}Definido en la (norma) Annex B ECMAScript para Características Adicionales para Navegadores Web.
+ +

Compatiblidad con navegadores

+ +
+ + +

{{Compat("javascript.builtins.RegExp.compile")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/regexp/exec/index.html b/files/es/web/javascript/reference/global_objects/regexp/exec/index.html new file mode 100644 index 0000000000..1925e63b67 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/regexp/exec/index.html @@ -0,0 +1,238 @@ +--- +title: RegExp.prototype.exec() +slug: Web/JavaScript/Referencia/Objetos_globales/RegExp/exec +tags: + - Expresiones Regulares + - JavaScript + - Prototipo + - Referencia + - RegExp + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/exec +--- +
{{JSRef}}
+ +

El método exec() ejecuta una busqueda sobre las coincidencias de una expresión regular en una cadena especifica. Devuelve el resultado como array, o {{jsxref("null")}}.

+ +

Si está ejecutando una expresión regular solo para buscar si algo se cumple o no, usa el método {{jsxref("RegExp.prototype.test()")}} o el método {{jsxref("String.prototype.search()")}}.

+ +

Sintaxis

+ +
regexObj.exec(cadena)
+ +

Parametros

+ +
+
cadena
+
Cadena sobre la cual se quiere aplicar la expresión regular
+
+ +

Valor devuelto

+ +

Si se encuentran coincidencial, el método exec() devuelve un array y actualiza las propiedades del objecto de la expresión regular. El array devuelto contiene los elementos encontrados en su primer elemento, y un elemento por cada parte de la expresión regular que se encuentra entre parentesis y se encuentra dentro del texto que fué capturado.

+ +

Si la busqueda falla, el método exec() devuelve {{jsxref("null")}}.

+ +

Descripción

+ +

Considerando el siguiente ejemplo:

+ +
// Busca "quick brown" seguido de "jumps", ignorando los caracteres que se
+// encuentren entre medias.
+// Recuerda "brown" y "jumps"
+// Ignora mayusculas y minusculas
+var re = /quick\s(brown).+?(jumps)/ig;
+var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
+
+ +

La siguiente tabla muestra el resultado de este script:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ObjetoPropiedad/ÍndiceDescripciónEjemplo
result[0]Todas las partes de la cadena que cumplen la expresión regularQuick Brown Fox Jumps
[1],...[n] +

Las subcadenas entre parentesis que han sido encontradas, si hay alguna. El número de subcadenas encontradas es ilimitado

+
[1] = Brown
+ [2] = Jumps
indexEl índice de base-0 del elemento encontrado en la cadena.4
inputLa cadena original.The Quick Brown Fox Jumps Over The Lazy Dog
relastIndexEl índice sobre el cual empieza la siguiente busqueda. Cuando no se usa g (busqueda global), esto va a ser siempre 0.25
ignoreCaseIndica si la bandera "i" ha sido usada para ignorar mayusculas y minusculas.true
globalIndica si la bandera "g" fue usada para hacer una busqueda global.true
multilineIndica si la bandera "m" fue usada para buscar en cadenas sobre multiples lineasfalse
sourceEl texto del patrón de busquedaquick\s(brown).+?(jumps)
+ +

Ejemplos

+ +

Encontrando coincidencias sucesivas

+ +

Si tu expresión regular contiene la bandera "g", puedes usar el método exec() varias veces para encontrar coincidencias sucesivas en la misma cadena. Cuando lo haces, la busqueda empieza en la subcadena str especificada por la propiedad {{jsxref("RegExp.lastIndex", "lastIndex")}} de la expresión regular ({{jsxref("RegExp.prototype.test()", "test()")}} también movera hacia adelante el indice de la propiedad {{jsxref("RegExp.lastIndex", "lastIndex")}}). Por ejemplo, asumiendo que tienes este script:

+ +
var myRe = /ab*/g;
+var str = 'abbcdefabh';
+var myArray;
+while ((myArray = myRe.exec(str)) !== null) {
+  var msg = 'Se ha encontrado ' + myArray[0] + '. ';
+  msg += 'La siguiente coincidencia empieza en el indice ' + myRe.lastIndex;
+  console.log(msg);
+}
+
+ +

Este script muestra el siguiente texto:

+ +
Se ha encontrado abb. La siguiente coincidencia empieza en el indice 3
+Se ha encontrado ab. La siguiente coincidencia empieza en el indice 9
+
+ +

Nota: No uses la expresión regular literalmente (o el constructor {{jsxref("RegExp")}}) dentro de la condición del bucle while o se creará un bucle infinito si hay una coincidencia, por culpa de que la propiedad {{jsxref("RegExp.lastIndex", "lastIndex")}} va a ser reiniciada por cada iteración del bucle. Además asegurate de que has usado la bandera de busqueda global "g" o se creará un bucle también.

+ +

Usando exec() con RegExp literales

+ +

También se puede usar exec() sin crear un objeto de  {{jsxref("RegExp")}}:

+ +
var matches = /(hola \S+)/.exec('Esto es un hola mundo!');
+console.log(matches[1]);
+
+ +

Esto logueará un mensaje que contiene 'hola mundo!'.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónStatusComment
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial. Implementado en JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.10.6.21', 'RegExp.exec')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-regexp.prototype.exec', 'RegExp.exec')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-regexp.prototype.exec', 'RegExp.exec')}}{{Spec2('ESDraft')}} 
+ +

Compatiblidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FuncionalidadChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FuncionalidadAndroidChrome for AndroidEdgeFirefox Móvil (Gecko)IE MóvilOpera MóvilSafari Móvil
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/regexp/ignorecase/index.html b/files/es/web/javascript/reference/global_objects/regexp/ignorecase/index.html new file mode 100644 index 0000000000..9073d631d1 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/regexp/ignorecase/index.html @@ -0,0 +1,142 @@ +--- +title: RegExp.prototype.ignoreCase +slug: Web/JavaScript/Referencia/Objetos_globales/RegExp/ignoreCase +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase +--- +
{{JSRef}}
+ +

La propiedad ignoreCase indica si la expresión regular está usando la bandera "i". ignoreCase es una propiedad de sólo lectura de una instancia de expresión regular.

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

Descripción

+ +

El valor de ignoreCase es un {{jsxref("Boolean")}} y true si la bandera "i" fue usada. De otra manera es false. La bandera "i" indica que el se debe ignorar la capitalización al tratar de encontrar los equivalentes en un texto.

+ +

No se puede cambiar esta propiedad directamente.

+ +

Ejemplos

+ +

Usando ignoreCase

+ +
var regex = new RegExp('foo', 'i');
+
+console.log(regex.ignoreCase); // true
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial. Implementado en JavaScript 1.2. JavaScript 1.5: ignoreCase es una propiedad de la instancia  {{jsxref("RegExp")}}, y no del objecto {{jsxref("RegExp")}}.
{{SpecName('ES5.1', '#sec-15.10.7.3', 'RegExp.prototype.ignoreCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-get-regexp.prototype.ignorecase', 'RegExp.prototype.ignoreCase')}}{{Spec2('ES6')}}ignoreCase es ahora una propiedad accesora del prototipo en lugar de una propiedad de dato de una instancia.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.ignorecase', 'RegExp.prototype.ignoreCase')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Propiedad accesor del Prototipo{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoDesktop(38)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome para AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Propiedad accesor del Prototipo{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile(38)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/regexp/index.html b/files/es/web/javascript/reference/global_objects/regexp/index.html new file mode 100644 index 0000000000..9a26edead0 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/regexp/index.html @@ -0,0 +1,264 @@ +--- +title: RegExp +slug: Web/JavaScript/Referencia/Objetos_globales/RegExp +tags: + - Clase + - Expresiones Regulares + - JavaScript + - Referencia + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp +--- +
{{JSRef}}
+ +

El objeto RegExp se utiliza para hacer coincidir texto con un patrón.

+ +

Para obtener una introducción a las expresiones regulares, lee el {{JSxRef("../Guide/Regular_Expressions", "capítulo sobre expresiones regulares")}} en la {{JSxRef("../Guide/Regular_Expressions", "Guía de JavaScript")}}.

+ +

Descripción

+ +

Notación literal y constructor

+ +

Hay dos formas de crear un objeto RegExp: una notación literal y un constructor.

+ + + +

Las siguientes tres expresiones crean el mismo objeto de expresión regular:

+ +
let er = /ab+c/i; // notación literal
+let er = new RegExp('ab+c', 'i') // constructor con patrón de cadena como primer argumento
+let er = new RegExp(/ab+c/, 'i') // constructor con expresión regular literal como primer argumento (a partir de ECMAScript 6)
+
+ +

La notación literal da como resultado la compilación de la expresión regular cuando se evalúa la expresión. Utiliza la notación literal cuando la expresión regular permanecerá constante. Por ejemplo, si usas notación literal para construir una expresión regular usada en un bucle, la expresión regular no se volverá a compilar en cada iteración.

+ +

El constructor del objeto de expresión regular, por ejemplo, new RegExp('ab+c'), da como resultado la compilación en tiempo de ejecución de la expresión regular. Utiliza la función constructora cuando sepas que el patrón de expresión regular cambiará, o no conozcas el patrón y lo obtienes de otra fuente, tal como la entrada del usuario.

+ +

Banderas en el constructor

+ +

A partir de ECMAScript 6, new RegExp(/ab+c/, 'i') ya no arroja un {{JSxRef("TypeError")}} ("no puedes proporcionar banderas cuando construyes una expresión regular a partir de otra") cuando el primer argumento es una RegExp y el segundo argumento flags está presente. En su lugar, se crea una nueva RegExp a partir de los argumentos.

+ +

Cuando se utiliza la función constructora, las reglas de escape de cadenas normales (antes de los caracteres especiales con \ cuando se incluyen en una cadena) son necesarias.

+ +

Por ejemplo, los siguientes son equivalentes:

+ +
let er = /\w+/
+let er = new RegExp('\\w+')
+
+ +

Propiedades de expresiones regulares similares a Perl

+ +

Ten en cuenta que varias de las propiedades de {{JSxRef("RegExp")}} tienen nombres largos y cortos (tipo Perl). Ambos nombres siempre se refieren al mismo valor. (Perl es el lenguaje de programación a partir del cual JavaScript modeló sus expresiones regulares). Consulta también las propiedades {{JSxRef("Características_Desaprobadas", "en desuso de RegExp", "#Propiedades_de_RegExp")}}

+ +

Constructor

+ +
+
{{JSxRef("Objetos_globales/RegExp/RegExp", "RegExp()")}}
+
Crea un nuevo objeto RegExp.
+
+ +

Propiedades estáticas

+ +
+
{{JSxRef("RegExp.@@species", "get RegExp[@@species]")}}
+
La función constructora utilizada para crear objetos derivados.
+
{{JSxRef("RegExp.lastIndex")}}
+
El índice en el que comenzará la siguiente búsqueda.
+
+ +

Propiedades de la instancia

+ +
+
{{JSxRef("RegExp.prototype.flags")}}
+
Una cadena que contiene las banderas del objeto RegExp.
+
{{JSxRef("RegExp.prototype.dotAll")}}
+
Si el "." coincide con nuevas líneas o no.
+
{{JSxRef("RegExp.prototype.global")}}
+
Si se debe probar o no la expresión regular con todas las posibles ocurrencias en una cadena, o solo con la primera.
+
{{JSxRef("RegExp.prototype.ignoreCase")}}
+
Si se deben o no ignorar las mayúsculas/minúsculas al buscar en una cadena.
+
{{JSxRef("RegExp.prototype.multiline")}}
+
Si buscar o no en cadenas multilínea.
+
{{JSxRef("RegExp.prototype.source")}}
+
El texto del patrón.
+
{{JSxRef("RegExp.prototype.sticky")}}
+
Si la búsqueda es pegajosa o no.
+
{{JSxRef("RegExp.prototype.unicode")}}
+
Si las funciones Unicode están habilitadas o no.
+
+ +

Métodos de instancia

+ +
+
{{JSxRef("RegExp.prototype.compile()")}}
+
(Re)compila una expresión regular durante la ejecución de un script.
+
{{JSxRef("RegExp.prototype.exec()")}}
+
Ejecuta una búsqueda de una coincidencia en su parámetro de cadena.
+
{{JSxRef("RegExp.prototype.test()")}}
+
Prueba una coincidencia en su parámetro de cadena.
+
{{JSxRef("RegExp.prototype.toString()")}}
+
Devuelve una cadena que representa el objeto especificado. Redefine el método {{JSxRef("Object.prototype.toString()")}}.
+
{{JSxRef("RegExp.prototype.@@match()", "RegExp.prototype[@@match]()")}}
+
Realiza la coincidencia con la cadena dada y devuelve el resultado de la coincidencia.
+
{{JSxRef("RegExp.prototype.@@matchAll()", "RegExp.prototype[@@matchAll]()")}}
+
Devuelve todas las coincidencias de la expresión regular con una cadena.
+
{{JSxRef("RegExp.prototype.@@replace()", "RegExp.prototype[@@replace]()")}}
+
Reemplaza las coincidencias en una cadena dada con una nueva subcadena.
+
{{JSxRef("RegExp.prototype.@@search()", "RegExp.prototype[@@search]()")}}
+
Busca la coincidencia en la cadena dada y devuelve el índice del patrón encontrado en la cadena.
+
{{JSxRef("RegExp.prototype.@@split()", "RegExp.prototype[@@split]()")}}
+
Divide la cadena dada en un arreglo separando la cadena en subcadenas.
+
+ +

Ejemplos

+ +

Usar una expresión regular para cambiar el formato de los datos

+ +

El siguiente script usa el método {{JSxRef("String.prototype.replace()", "replace()")}} de la instancia {{JSxRef("Objetos_globales/String", "String")}} para hacer coincidir una nombre en el formato primero último y enviarlo en el formato último, primero.

+ +

En el texto de reemplazo, el script usa $1 y $2 para indicar los resultados de los correspondientes paréntesis coincidentes en el patrón de expresión regular.

+ +
let er = /(\w+)\s(\w+)/
+let str = 'John Smith'
+let newstr = str.replace(er, '$2, $1')
+console.log(newstr)
+
+ +

Esto muestra "Smith, John".

+ +

Uso de expresiones regulares para dividir líneas con diferentes finales de línea/saltos de línea

+ +

El final de línea predeterminado varía según la plataforma (Unix, Windows, etc.). La división de líneas proporcionada en este ejemplo funciona en todas las plataformas.

+ +
let texto = 'Un poco de texto\ny un poco más\r\ny aún\reste es el final'
+let lineas = texto.split(/\r\n|\r|\n/)
+console.log(lineas) // logs [ 'Un poco de texto', 'y un poco más', 'y aún', 'este es el final' ]
+
+ +

Ten en cuenta que el orden de los patrones en la expresión regular es importante.

+ +

Usar expresiones regulares en varias líneas

+ +
let s = '¡Por favor, sí\nhazme el día!'
+
+s.match(/sí.*día/);
+// Devuelve null
+
+s.match(/sí[^]*día/);
+// Devuelve ["sí\nhazme el día"]
+
+ +

Usar una expresión regular con la bandera pegajosa

+ +

La bandera {{JSxRef("Objetos_globales/RegExp/sticky", "sticky")}} indica que la expresión regular realiza una coincidencia permanente en la cadena de destino al intentar hacer coincidir a partir de {{JSxRef("RegExp.prototype.lastIndex")}}.

+ +
let str = '#foo#'
+let regex = /foo/y
+
+regex.lastIndex = 1
+regex.test(str)      // true
+regex.lastIndex = 5
+regex.test(str)      // false (lastIndex se tiene en cuenta con una bandera pegajosa)
+regex.lastIndex      // 0 (restablecer después de un error de coincidencia)
+ +

La diferencia entre la bandera pegajosa y la bandera global

+ +

Con la bandera pegajosa y, la siguiente coincidencia tiene que ocurrir en la posición lastIndex, mientras que con la bandera global g, la coincidencia puede ocurrir en la posición lastIndex o posterior:

+ +
er = /\d/y;
+while (r = re.exec("123 456")) console.log(r, "Y er.lastIndex", er.lastIndex);
+
+// [ '1', index: 0, input: '123 456', groups: undefined ] AND er.lastIndex 1
+// [ '2', index: 1, input: '123 456', groups: undefined ] AND er.lastIndex 2
+// [ '3', index: 2, input: '123 456', groups: undefined ] AND er.lastIndex 3
+//   ... y no más coincidencias.
+ +

Con la bandera global g, coincidirían los 6 dígitos, no solo 3.

+ +

Expresión regular y caracteres Unicode

+ +

\w y \W solo coincide con caracteres basados en ASCII; por ejemplo, a a z, A a Z, 0 a 9 y _.

+ +

Para hacer coincidir caracteres de otros idiomas como Cirílico o Hebreo, usa \uhhhh, donde hhhh es el Valor Unicode en hexadecimal.

+ +

Este ejemplo demuestra cómo se pueden separar los caracteres Unicode de una palabra.

+ +
let texto = 'Образец texto на русском языке'
+let regex = /[\u0400-\u04FF]+/g
+
+let match = regex.exec(text)
+console.log(match[0])        // registra 'Образец'
+console.log(regex.lastIndex) // registra '7'
+
+let match2 = regex.exec(texto)
+console.log(match2[0])       // registra 'на' [no registró 'texto']
+console.log(regex.lastIndex) // registra '15'
+
+// y así sucesivamente
+
+ +

La función {{JSxRef("../Guide/Regular_Expressions/Unicode_Property_Escapes", "Escapes de propiedad Unicode")}} presenta una solución, al permitir una declaración tan simple como \p{scx=Cyrl}.

+ +

Extraer el nombre de subdominio de la URL

+ +
let url = 'http://xxx.dominio.com'
+console.log(/[^.]+/.exec(url)[0].substr(7)) // registra 'xxx'
+
+ +
+

En lugar de utilizar expresiones regulares para analizar las URL, normalmente es mejor utilizar el analizador de URL integrado en los navegadores mediante la API URL.

+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-regexp-regular-expression-objects', 'RegExp')}}
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Notas específicas de Firefox

+ +

A partir de Firefox 34, en el caso de un grupo de captura con cuantificadores que impiden su ejercicio, el texto coincidente para un grupo de captura ahora es undefined en lugar de una cadena vacía:

+ +
// Firefox 33 o anterior
+'x'.replace(/x(.)?/g, function(m, group) {
+  console.log("'grupo: " + group + "'");
+});
+// 'grupo: '
+
+// Firefox 34 o más reciente
+'x'.replace(/x(.)?/g, function(m, group) {
+  console.log("'grupo: " + group + "'");
+});
+// 'grupo: undefined'
+
+ +

Ten en cuenta que, debido a la compatibilidad web, RegExp.$N seguirá devolviendo una cadena vacía en lugar de undefined ({{bug(1053944)}}).

+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/regexp/regexp/index.html b/files/es/web/javascript/reference/global_objects/regexp/regexp/index.html new file mode 100644 index 0000000000..ad3a8c90e9 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/regexp/regexp/index.html @@ -0,0 +1,114 @@ +--- +title: Constructor RegExp() +slug: Web/JavaScript/Referencia/Objetos_globales/RegExp/RegExp +tags: + - Constructor + - JavaScript + - Referencia + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/RegExp +--- +
{{JSRef}}
+ +

El constructor RegExp crea un objeto de expresión regular para hacer coincidir el texto con un patrón.

+ +

Para ver la introducción a las expresiones regulares, lee el {{JSxRef("../Guide/Regular_Expressions", "capítulo sobre expresiones regulares")}} en la {{JSxRef("../Guide", "Guía de JavaScript")}}.

+ +
{{EmbedInteractiveExample("pages/js/regexp-constructor.html")}}
+ + + +

Sintaxis

+ +

Son posibles las notaciones literal, constructor y de fábrica:

+ +
/patrón/banderas
+new RegExp(patrón[, banderas])
+RegExp(patrón[, banderas])
+
+ +

Parámetros

+ +
+
patrón
+
El texto de la expresión regular.
+
A partir de ES5, también puede ser otro objeto o RegExp literal (solo para las dos notaciones del constructor RegExp). Los patrones pueden incluir {{JSxRef("../Guide/Regular_Expressions", "caracteres especiales", "#Usar_caracteres_especiales")}} para que coincidan con un rango de valores más amplio que el de una cadena literal.
+
banderas
+
+

Si se especifica, banderas es una cadena que contiene las banderas para agregar.

+ +

Alternativamente, si se proporciona un objeto para el patrón, la cadena banderas reemplazará cualquiera de las banderas de ese objeto (y lastIndex se restablecerá a 0) (a partir de ES2015).

+ +

Si no se especifica banderas y se proporciona un objeto de expresiones regulares, las banderas de ese objeto (y el valor de lastIndex) se copiarán.

+ +

banderas puede contener cualquier combinación de los siguientes caracteres:

+ +
+
g (coincidencia global)
+
Encuentra todas las coincidencias en lugar de detenerse después de la primera.
+
i (ignorar mayúsculas y minúsculas)
+
Si el indicador u también está habilitado, utiliza el plegado de mayúsculas y minúsculas Unicode.
+
m (multilínea)
+
Trata los caracteres iniciales y finales (^ y $) como si estuvieran trabajando en varias líneas. En otras palabras, hace coincidir el principio o el final de cada línea (delimitada por \n o \r), no solo al principio o final de toda la cadena de entrada.
+
sdotAll» o punto para todo)
+
Permite que el punto (. coincida con nuevas líneas o no.
+
u (unicode)
+
Trata el patrón como una secuencia de puntos de código Unicode. (Consulta también Cadenas binarias).
+
y (sticky)
+
Coincide solo con el índice indicado por la propiedad lastIndex de esta expresión regular en la cadena destino. No intenta coincidir con índices posteriores.
+
+
+
+ +

Ejemplos

+ +

Notación literal y constructor

+ +

Hay dos formas de crear un objeto RegExp: una notación literal y un constructor.

+ + + +

Las siguientes tres expresiones crean la misma expresión regular:

+ +
/ab+c/i
+new RegExp(/ab+c/, 'i') // notación literal
+new RegExp('ab+c', 'i') // constructor
+
+ +

La notación literal da como resultado la compilación de la expresión regular cuando se evalúa la expresión. Utiliza la notación literal cuando la expresión regular permanecerá constante. Por ejemplo, si usas notación literal para construir una expresión regular usada en un bucle, la expresión regular no se volverá a compilar en cada iteración.

+ +

El constructor del objeto de expresión regular, por ejemplo, new RegExp('ab+c'), da como resultado la compilación en tiempo de ejecución de la expresión regular. Usa la función constructora cuando sepas que el patrón de la expresión regular cambiará, o no conoces el patrón y lo obtienes de otra fuente, como la entrada del usuario.

+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-regexp-constructor', 'RegExp constructor')}}
+ +

Compatibilidad del navegador

+ +
+ + +

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

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/regexp/rightcontext/index.html b/files/es/web/javascript/reference/global_objects/regexp/rightcontext/index.html new file mode 100644 index 0000000000..39530ee1b5 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/regexp/rightcontext/index.html @@ -0,0 +1,54 @@ +--- +title: RegExp.rightContext ($') +slug: Web/JavaScript/Referencia/Objetos_globales/RegExp/rightContext +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/rightContext +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propiedad rightContext (No es estándar) es una propiedad estática y de solo lectura de expresiones regulares que contiene la subcadena que sigue a la coincidencia más reciente. el alias para esta propiedad es RegExp.$'.

+ +

Sintaxis

+ +
RegExp.rightContext
+RegExp["$'"]
+
+ +

Descripción

+ +

La propiedad rightContext es estática, no es una propiedad de un objeto de expresión regular individual. Debe usarse como RegExp.rightContextRegExp["$'"].

+ +

El valor de la propiedad rightContext es de solo lectura y se modifica cada que hay una coincidencia exitosa.

+ +

Tenga presente que no puede usar la abreviatura (RegExp.$'), porque el analizador espera una cadena de inicio, si lo hace optendra un error de sintaxis {{jsxref("SyntaxError")}} , para este caso, usted debe usar corchetes. consulte notación de paréntesis para acceso a la propiedad.

+ +

Ejemplos

+ +

Usando rightContext y $'

+ +
var re = /hola/g;
+re.test('hola mundo!');
+RegExp.rightContext; // " mundo!"
+RegExp["$'"];       // " mundo!"
+
+ +

Especificaciones

+ +

No estándar. No forma parte de ninguna especificación actual.

+ + + +
+ + +

{{Compat("javascript.builtins.RegExp.rightContext")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/regexp/test/index.html b/files/es/web/javascript/reference/global_objects/regexp/test/index.html new file mode 100644 index 0000000000..4507b57c97 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/regexp/test/index.html @@ -0,0 +1,152 @@ +--- +title: RegExp.prototype.test() +slug: Web/JavaScript/Referencia/Objetos_globales/RegExp/test +tags: + - Expresion Regular + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/test +--- +
{{JSRef}}
+ +

El método test() ejecuta la búsqueda de una ocurrencia entre una expresión regular y una cadena especificada. Devuelve true o false.

+ +

Sintaxis

+ +
regexObj.test(cadena)
+ +

Parámetros

+ +
+
cadena
+
La cadena a comparar contra la expresión regular.
+
+ +

Valor de Retorno

+ +

Retorna true si existe una coincidencia entre la expresión regular y la cadena especificada; de lo contrario retorna false.

+ +

Descripción

+ +

Use test() cuando desee saber si existe la ocurrencia de un patrón en una cadena (similar al método {{jsxref("String.prototype.search()")}}, la diferencia es que test() devuelve un booleano, mientras que search() devuelve el índice de la coincidencia (si la encuentra) o -1 si no la encuentra).

+ +

Si requiere más información (a coste de una ejecución más lenta) utilice el método {{jsxref("RegExp.prototype.exec()", "exec()")}}. Al igual que este último, multiples llamadas a test() sobre la misma instancia global de una expresión regular avanzará desde de la ocurrencia anterior.

+ +

Ejemplos

+ +

Usando test()

+ +

Ejemplo simple que prueba si "hello" está contenido al principio de una cadena y devuelve un valor booleano.

+ +
var cadena = "hello world!";
+var result = /^hello/.test(cadena);
+console.log(result); // true
+
+ +

El siguiente ejemplo registra un mensaje que depende del éxito de la prueba:

+ +
function probarEntrada(regexp, cadena){
+  var subcadena;
+  if (regexp.test(cadena)) {
+    subcadena = ' contiene ';
+  } else {
+    subcadena = ' no contiene ';
+  }
+  console.log(cadena + subcadena + regexp.source);
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definition inicial. Implementado en JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.10.6.3', 'RegExp.test')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-regexp.prototype.test', 'RegExp.test')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-regexp.prototype.test', 'RegExp.test')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en Navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Notas específicas para Gecko

+ +

Antes de Gecko 8.0 {{geckoRelease("8.0")}}, test() estaba incorrectamente implementado; cuando era llamado sin parámetros, buscaba emparejar contra el valor de la entrada anterior (la propiedad RegExp.input) en lugar de hacerlo contra la cadena "undefined". Esto ha sido corregido; ahora /undefined/.test() resulta correctamente en true, en lugar de un error.

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/regexp/tostring/index.html b/files/es/web/javascript/reference/global_objects/regexp/tostring/index.html new file mode 100644 index 0000000000..50c10d2bb2 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/regexp/tostring/index.html @@ -0,0 +1,171 @@ +--- +title: RegExp.prototype.toString() +slug: Web/JavaScript/Referencia/Objetos_globales/RegExp/toString +tags: + - Expresion Regular + - Prototipo + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/toString +--- +
{{JSRef}}
+ +

El método toString() devuelve una cadena que representa el patrón de la expresión regular.

+ +

Sintaxis

+ +
regexObj.toString();
+ +

Valor de Retorno

+ +

Una cadena que representa el objeto dado.

+ +

Descripción

+ +

El objeto {{jsxref("RegExp")}} reemplaza el método toString() del objeto {{jsxref("Object")}}; no hereda de {{jsxref("Object.prototype.toString()")}}. Para objetos {{jsxref("RegExp")}}, el método toString() retorna una cadena que representa el patrón de la expresión regular.

+ +

Ejemplos

+ +

Usando toString()

+ +

El siguiente ejemplo muestra la cadena de representación de un objeto {{jsxref("RegExp")}}:

+ +
var myExp = new RegExp('a+b+c');
+console.log(myExp.toString());  // '/a+b+c/'
+
+var foo = new RegExp('bar', 'g');
+console.log(foo.toString());    // '/bar/g'
+
+ +

Expresiones regulares vacías y escapado

+ +

A partir de ECMAScript 5, una expresión regular vacía devuelve la cadena "/(?:)/" y los terminadores de línea tales como "\n" son escapados:

+ +
new RegExp().toString(); // "/(?:)/"
+
+new RegExp('\n').toString() === "/\n/";  // true, antes de ES5
+new RegExp('\n').toString() === "/\\n/"; // true, desde ES5
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial. Implementado en JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.9.5.2', 'RegExp.prototype.toString')}}{{Spec2('ES5.1')}}Agregado de la definición para escapado de caracteres especiales y "(?:)" para expresiones regulares vacías.
{{SpecName('ES6', '#sec-regexp.prototype.tostring', 'RegExp.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-regexp.prototype.tostring', 'RegExp.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en Navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Escaping{{CompatVersionUnknown}}{{CompatGeckoDesktop(38)}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Generic function{{CompatUnknown}}{{CompatGeckoDesktop(39)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Escaping{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile(38)}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Generic function{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile(39)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/set/@@iterator/index.html b/files/es/web/javascript/reference/global_objects/set/@@iterator/index.html new file mode 100644 index 0000000000..7445821fc0 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/set/@@iterator/index.html @@ -0,0 +1,86 @@ +--- +title: 'Set.prototype[@@iterator]()' +slug: Web/JavaScript/Referencia/Objetos_globales/Set/@@iterator +tags: + - Iteradores +translation_of: Web/JavaScript/Reference/Global_Objects/Set/@@iterator +--- +
{{JSRef}}
+ +

El valor inicial de la propiedad @@iterator, es la misma función objeto que el valor inicial de la propiedad {{jsxref("Set.prototype.values()", "values")}}.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-@@iterator.html")}}
+ + + +

Sintaxis

+ +
mySet[Symbol.iterator]
+ +

 Valor retornado

+ +

La función iteradora Set , la cuál es {{jsxref("Set.prototype.values()", "values()")}} por defecto.

+ +

Ejemplos

+ +

Usando [@@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
+
+ +

Usando [@@iterator]() con for..of

+ +
const mySet = new Set();
+mySet.add('0');
+mySet.add(1);
+mySet.add({});
+
+for (const v of mySet) {
+  console.log(v);
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-set.prototype-@@iterator', 'Set.prototype[@@iterator]')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-set.prototype-@@iterator', 'Set.prototype[@@iterator]')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad en navegadores

+ + + +

{{Compat("javascript.builtins.Set.@@iterator")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/set/add/index.html b/files/es/web/javascript/reference/global_objects/set/add/index.html new file mode 100644 index 0000000000..f9385894fb --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/set/add/index.html @@ -0,0 +1,124 @@ +--- +title: Set.prototype.add() +slug: Web/JavaScript/Referencia/Objetos_globales/Set/add +translation_of: Web/JavaScript/Reference/Global_Objects/Set/add +--- +
{{JSRef}}
+ +

El método add() añade un nuevo elemento con un valor específico al final del objeto Set.

+ +

Sintaxis

+ +
mySet.add(value);
+ +

Parameters

+ +
+
value
+
Requerido. El valor del elemento a ser añadido al objeto Set.
+
+ +

Return value

+ +

El objeto Set.

+ +

Ejemplos

+ +

Usando el método add

+ +
var mySet = new Set();
+
+mySet.add(1);
+mySet.add(5).add("some text"); // chainable
+
+console.log(mySet);
+// Set [1, 5, "some text"]
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-set.prototype.add', 'Set.prototype.add')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-set.prototype.add', 'Set.prototype.add')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support38{{CompatGeckoDesktop("13.0")}}11257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}38{{CompatGeckoMobile("13.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Firefox-specific notes

+ + + +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/set/clear/index.html b/files/es/web/javascript/reference/global_objects/set/clear/index.html new file mode 100644 index 0000000000..0fdca7e492 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/set/clear/index.html @@ -0,0 +1,119 @@ +--- +title: Set.prototype.clear() +slug: Web/JavaScript/Referencia/Objetos_globales/Set/clear +tags: + - ECMAScript6 + - JavaScript + - Prototype + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/clear +--- +
{{JSRef}}
+ +

El método clear() remueve todos los elementos de un objeto Set.

+ +

Syntaxis

+ +
mySet.clear();
+ +

Valor de retorno

+ +

{{jsxref("undefined")}}.

+ +

Ejemplos

+ +

Usando el método 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
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-set.prototype.clear', 'Set.prototype.clear')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-set.prototype.clear', 'Set.prototype.clear')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico38{{CompatGeckoDesktop("19.0")}}11257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatNo}}25{{CompatGeckoMobile("19.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/set/delete/index.html b/files/es/web/javascript/reference/global_objects/set/delete/index.html new file mode 100644 index 0000000000..3e5544e06a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/set/delete/index.html @@ -0,0 +1,117 @@ +--- +title: Set.prototype.delete() +slug: Web/JavaScript/Referencia/Objetos_globales/Set/delete +translation_of: Web/JavaScript/Reference/Global_Objects/Set/delete +--- +
{{JSRef}}
+ +

El método delete() remueve el elemento especificado del objeto Set.

+ +

Syntaxis

+ +
mySet.delete(value);
+ +

Parametros

+ +
+
valor
+
Requerido. El valor del elemento a remover del objeto Set.
+
+ +

Valor de retorno

+ +

true si el elemento ha sido removido exitosamente en el Set; de otra manera retorna false.

+ +

Ejemplos

+ +

Usando el método delete

+ +
var mySet = new Set();
+mySet.add("foo");
+
+mySet.delete("bar"); // Retorna false. No hay elemento "bar" para ser removido.
+mySet.delete("foo"); // Retorna true.  Removido exitosamente.
+
+mySet.has("foo");    // Retorna false. El elemento "foo" ya no está presente.
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-set.prototype.delete', 'Set.prototype.delete')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-set.prototype.delete', 'Set.prototype.delete')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico38{{CompatGeckoDesktop("13.0")}}11257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatNo}}38{{CompatGeckoMobile("13.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/set/entries/index.html b/files/es/web/javascript/reference/global_objects/set/entries/index.html new file mode 100644 index 0000000000..ba07d24187 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/set/entries/index.html @@ -0,0 +1,71 @@ +--- +title: Set.prototype.entries() +slug: Web/JavaScript/Referencia/Objetos_globales/Set/entries +translation_of: Web/JavaScript/Reference/Global_Objects/Set/entries +--- +
{{JSRef}}
+ +

El método entries() devuelve un nuevo objeto de tipo Iterator que contiene un array de tuplas [value, value] por cada elemento en el Set original, manteniendo el orden de inserción. En los objetos de tipo Set no existe una clave key como ocurre en los objetos de tipo Map. Sin embargo, para mantener una API similar a la de los objetos de tipo Map, cada entry contiene el mismo valor para su clave y valor, devolviendo por tanto un array de tuplas [value, value].

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-entries.html")}}
+ + + +

Sintaxis

+ +
mySet.entries()
+ +

Valor de retorno

+ +

Un nuevo objeto de tipo Iterator que contiene un array de tuplas [value, value] por cada elemento en el Set original, en orden de inserción.

+ +

Ejemplos

+ +

Usando el método 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"]
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoCommentario
{{SpecName('ES2015', '#sec-set.prototype.entries', 'Set.prototype.entries')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-set.prototype.entries', 'Set.prototype.entries')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ + + +

{{Compat("javascript.builtins.Set.entries")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/set/has/index.html b/files/es/web/javascript/reference/global_objects/set/has/index.html new file mode 100644 index 0000000000..e133de2d00 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/set/has/index.html @@ -0,0 +1,124 @@ +--- +title: Set.prototype.has() +slug: Web/JavaScript/Referencia/Objetos_globales/Set/has +tags: + - ECMAScript6 + - JavaScript + - Prototype + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/has +--- +
{{JSRef}}
+ +

El método has() retorna un booleano indicando si el elemento especificado existe en el objeto Set o no.

+ +

Syntaxis

+ +
mySet.has(value);
+ +

Parametros

+ +
+
valor
+
Requerido. El valor del cual se probará su presencia en el objeto Set.
+
+ +

Valor de retorno

+ +
+
Booleano
+
Retorna true si el elemento con el valor especificado existe en el objeto  Set; de otra manera retorna false.
+
+ +

Ejemplos

+ +

Usando el método has

+ +
var mySet = new Set();
+mySet.add("foo");
+
+mySet.has("foo");  // retorna true
+mySet.has("bar");  // retorna false
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-set.prototype.has', 'Set.prototype.has')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-set.prototype.has', 'Set.prototype.has')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico38{{CompatGeckoDesktop("13.0")}}11257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatNo}}38{{CompatGeckoMobile("13.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/set/index.html b/files/es/web/javascript/reference/global_objects/set/index.html new file mode 100644 index 0000000000..db091b3a59 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/set/index.html @@ -0,0 +1,230 @@ +--- +title: Set +slug: Web/JavaScript/Referencia/Objetos_globales/Set +tags: + - ECMAScript 2015 + - JavaScript + - Object + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set +--- +
{{JSRef}}
+ +

El objeto Set permite almacenar valores únicos de cualquier tipo, incluso {{Glossary("Primitive", "valores primitivos")}} u referencias a objetos.

+ +

Sintaxis

+ +
new Set([iterable]);
+ +

Parámetros

+ +
+
iterable
+
Si un objeto iterable es pasado, todos sus elementos serán añadidos al nuevo Set. Si no se especifica este parámetro, o si su valor es null, el nuevo Set estará vacío.
+
+ +

Valor retornado

+ +

Una nueva instancia de Set.

+ +

Descripción

+ +

Los objetos Set son colecciones de valores. Se puede iterar sus elementos en el orden de su inserción. Un valor en un Set sólo puede estar una vez; éste es único en la colección Set.

+ +

Igualdad de valores

+ +

Ya que cada valor en el Set tiene que ser único, la igualdad del valor será comprobada y esta igualdad no se basa en el mismo algoritmo usado en el operador ===. Específicamente, para Sets, +0 (el cual es estrictamente igual a -0) y -0 son valores distintos. Sin embargo, esto ha cambiado en la última especificación ECMAScript 6. Iniciando con Gecko 29.0 {{geckoRelease("29")}} ({{bug("952870")}}) y un recent nightly Chrome, +0-0 son tratados como el mismo valor en objetos Set

+ +

NaN y undefined también pueden ser almacenados en un Set. NaN es considerado igual que NaN (A pesar que NaN !== NaN).

+ +

Propiedades

+ +
+
Set.length
+
El valor de la propiedad length es 0.
+
{{jsxref("Set.@@species", "get Set[@@species]")}}
+
La función constructora que es usada para crear objetos derivados.
+
{{jsxref("Set.prototype")}}
+
Representa el prototipo para el constructor Set. Permite la adición de propiedades a todos los objetos Set.
+
+ +

Instancias Set

+ +

Todas las instancias de Set heredan de {{jsxref("Set.prototype")}}.

+ +

Propiedades

+ +

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

+ +

Métodos

+ +

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

+ +

Ejemplos

+ +

Usando el objeto Set

+ +
const mySet = new Set();
+
+mySet.add(1);
+mySet.add(5);
+mySet.add('some text');
+
+const o = {a: 1, b: 2};
+mySet.add(o);
+
+mySet.add({a: 1, b: 2}); // La variable "o" referencia a otro objeto, por lo que agrega otro valor.
+
+mySet.has(1); // true
+mySet.has(3); // false, 3 no ha sido añadido al Set
+mySet.has(5);              // true
+mySet.has(Math.sqrt(25));  // true
+mySet.has('Some Text'.toLowerCase()); // true
+mySet.has(o); // true
+
+mySet.size; // 5
+
+mySet.delete(5); // Elimina 5 del Set
+mySet.has(5);    // false, 5 fue eliminado
+
+mySet.size; // 4, sólo removimos un valor
+console.log(mySet);// Set {1, "some text", Object {a: 1, b: 2}, Object {a: 1, b: 2}}
+ +

Iterando los Sets

+ +
// iterar todos los items de un set
+// imprimir en consola los items en orden: 1, 'some text', {a: 1, b: 2}
+for (let item of mySet) console.log(item);
+
+// imprimir en consola los items en orden: 1, 'some text', {a: 1, b: 2}
+for (let item of mySet.keys()) console.log(item);
+
+// imprimir en consola los items en orden: 1, 'some text', {a: 1, b: 2}
+for (let item of mySet.values()) console.log(item);
+
+// imprimir en consola los items en orden: 1, 'some text', {a: 1, b: 2}
+//(key y value poseen en mismo valor en este caso)
+for (let [key, value] of mySet.entries()) console.log(key);
+
+// crear un Array plano con los mismos valores, utilizando Array.from
+const myArr = Array.from(mySet); // [1, 'some text', {a: 1, b: 2}]
+
+// también se puede utilizar para guardar elementos del DOM
+mySet.add(document.body);
+mySet.has(document.querySelector('body')); // true
+
+// crear un Array plano con los mismos valores, utilizando propagación
+const mySet2 = new Set([1,2,3,4]);
+mySet2.size; // 4
+[...mySet2]; // [1,2,3,4]
+
+// la intersección entre dos sets puede ser simulada con
+const intersection = new Set([...set1].filter(x => set2.has(x)));
+
+// la diferencia puede ser simulada con
+const difference = new Set([...set1].filter(x => !set2.has(x)));
+
+// Iteración utilizando forEach
+mySet.forEach((value) => {
+  console.log(value);
+});
+
+// 1
+// 2
+// 3
+// 4
+ +

Implementando operaciones básicas

+ +
Set.prototype.isSuperset = function(subset) {
+    for (var elem of subset) {
+        if (!this.has(elem)) {
+            return false;
+        }
+    }
+    return true;
+}
+
+Set.prototype.union = function(setB) {
+    var union = new Set(this);
+    for (var elem of setB) {
+        union.add(elem);
+    }
+    return union;
+}
+
+Set.prototype.intersection = function(setB) {
+    var intersection = new Set();
+    for (var elem of setB) {
+        if (this.has(elem)) {
+            intersection.add(elem);
+        }
+    }
+    return intersection;
+}
+
+Set.prototype.difference = function(setB) {
+    var difference = new Set(this);
+    for (var elem of setB) {
+        difference.delete(elem);
+    }
+    return difference;
+}
+
+//Examples
+var setA = new Set([1,2,3,4]),
+    setB = new Set([2,3]),
+    setC = new Set([3,4,5,6]);
+
+setA.isSuperset(setB); // => true
+setA.union(setC); // => Set [1, 2, 3, 4, 5, 6]
+setA.intersection(setC); // => Set [3, 4]
+setA.difference(setC); // => Set [1, 2]
+ +

Relación con los objetos Array

+ +
const myArray = ['value1', 'value2', 'value3'];
+
+// Utiliza el constructor para para crear un set con el mismo contenido que un array
+const mySet = new Set(myArray);
+
+mySet.has('value1'); // devuelve true
+
+// Utiliza la propagación para crear un array con los contenidos de un set
+console.log([...mySet]); // Muestra lo mismo utilizando myArray
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-set-objects', 'Set')}}{{Spec2('ES2015')}}Definición inicial
{{SpecName('ESDraft', '#sec-set-objects', 'Set')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad de navegadores

+ + + +

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

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/set/size/index.html b/files/es/web/javascript/reference/global_objects/set/size/index.html new file mode 100644 index 0000000000..444ad7ae8a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/set/size/index.html @@ -0,0 +1,106 @@ +--- +title: Set.prototype.size +slug: Web/JavaScript/Referencia/Objetos_globales/Set/size +translation_of: Web/JavaScript/Reference/Global_Objects/Set/size +--- +
{{JSRef}}
+ +

La propiedad de acceso size devuelve el número de elementos que hay en el objeto {{jsxref("Set")}}.

+ +

Descripción

+ +

El valor de size es un entero que representa cuantas entradas tiene el objeto Set. La función de accesso set para size es undefined; no se puede cambiar esta propiedad.

+ +

Ejemplos

+ +

Usando size

+ +
var mySet = new Set();
+mySet.add(1);
+mySet.add(5);
+mySet.add("un texto")
+
+mySet.size; // 3
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES6', '#sec-get-set.prototype.size', 'Set.prototype.size')}}{{Spec2('ES6')}}Definición inicial
{{SpecName('ESDraft', '#sec-get-set.prototype.size', 'Set.prototype.size')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico38{{ CompatGeckoDesktop("19") }} [1]{{ CompatIE("11") }}257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}38{{CompatGeckoMobile("19")}}{{CompatNo}}{{CompatNo}}8
+
+ +

[1] From Gecko 13 (Firefox 13 / Thunderbird 13 / SeaMonkey 2.10) to Gecko 18 (Firefox 18 / Thunderbird 18 / SeaMonkey 2.15 / Firefox OS 1.0.1 / Firefox OS 1.1) la propiedad size fue implementado como un método Set.prototype.size(), esto fue cambiado a una propiedad en versiones posteriores conforme la especificación ECMAScript 6 (bug 807001).

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/set/values/index.html b/files/es/web/javascript/reference/global_objects/set/values/index.html new file mode 100644 index 0000000000..8b7ec88ece --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/set/values/index.html @@ -0,0 +1,72 @@ +--- +title: Set.prototype.values() +slug: Web/JavaScript/Referencia/Objetos_globales/Set/values +translation_of: Web/JavaScript/Reference/Global_Objects/Set/values +--- +
{{JSRef}}
+ +

El método values() retorna un objeto de tipo Iterator que contiene los valores para cada elemento en el objecto Set en orden de inserción.

+ +

El metodo keys() es un alias para este metodo (por similaridad con objetos {{jsxref("Map")}}); se comporta exactamente igual y retorna valores para cada elemento de un Set.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-values.html")}}
+ + + +

Syntax

+ +
mySet.values();
+
+ +

Return value

+ +

Un nuevo objeto Iterator que contiene los valores para cada elemento en el Set dado,  en orden de inserción.

+ +

Examples

+ +

Using 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"
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-set.prototype.values', 'Set.prototype.values')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-set.prototype.values', 'Set.prototype.values')}}{{Spec2('ESDraft')}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Set.values")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/anchor/index.html b/files/es/web/javascript/reference/global_objects/string/anchor/index.html new file mode 100644 index 0000000000..c34abd62b1 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/anchor/index.html @@ -0,0 +1,56 @@ +--- +title: String.prototype.anchor() +slug: Web/JavaScript/Referencia/Objetos_globales/String/anchor +tags: + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/anchor +--- +
{{JSRef("Objetos_globales", "String")}}
+ +

Resumen

+ +

El método anchor() crea un ancla HTML, {{HTMLElement("a")}}, que se usa como un enlace a hipertexto.

+ +

Sintaxis

+ +
cadena.anchor(nombreAtributo)
+ +

Parámetros

+ +
+
nombreAtributo
+
Una cadena.
+
+ +

Descripción

+ +

Usa el método anchor con los métodos document.write o document.writeln para crear y mostrar programando un ancla en un documento. Crea el ancla con el método anchor, y entonces llama a write o writeln para mostrar el ancla en el documento. En JavaScript en el lado Servidor, usa la función write para mostrar el ancla.

+ +

En la sintaxis, la cadena de texto representa el texto literal que usted quiere que el usuario vea. La cadena nombreAtributo representa el atributo NAME de la etiqueta A.

+ +

Los anclas creados con el método anchor serán elementos del arreglo {{domxref("document.anchors")}}

+ +

Ejemplos

+ +

Ejemplo: Usando anchor

+ +

El siguiente código de ejemplo dentro de un elemento HTML script:

+ +
var miCadena = "Tabla de Contenidos";
+document.body.innerHTML = miCadena.anchor("ancla_contenidos");
+
+ +

obtendrá el siguiente HTML:

+ +
<a name="ancla_contenidos">Tabla de Contenidos</A>
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/big/index.html b/files/es/web/javascript/reference/global_objects/string/big/index.html new file mode 100644 index 0000000000..0aa04e5b74 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/big/index.html @@ -0,0 +1,54 @@ +--- +title: String.prototype.big() +slug: Web/JavaScript/Referencia/Objetos_globales/String/big +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/big +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

{{deprecated_header}}

+ +

Resumen

+ +

Provoca que una cadena sea mostrada con un tamaño de fuente grade, como si estuviese en una etiqueta {{HTMLElement("big")}}.

+ +

Sintaxis

+ +
cadena.big()
+ +

Descripción

+ +

Usa el método big para formatear y mostrar una cadena en un documento.

+ +

Ejemplos

+ +

Ejemplo: Usando big

+ +

El siguiente ejemplo usa los métodos de string para cambiar el tamañó de una cadena:

+ +
var cadenaMundo="¡Hola Mundo!";
+
+console.log(cadenaMundo.small());
+console.log("<P>" + cadenaMundo.big());
+console.log("<P>" + cadenaMundo.fontsize(7));
+
+ +

Este ejemplo produce el mismo resultado que el siguiente HTML:

+ +
<small>¡Hola Mundo!</small>
+<p><big>¡Hola Mundo!</big>
+<p><fontsize=7>¡Hola Mundo!</fontsize>
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/blink/index.html b/files/es/web/javascript/reference/global_objects/string/blink/index.html new file mode 100644 index 0000000000..cf49f3d840 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/blink/index.html @@ -0,0 +1,42 @@ +--- +title: String.prototype.blink() +slug: Web/JavaScript/Referencia/Objetos_globales/String/blink +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/blink +--- +

{{JSRef("Objetos_globales", "String")}}

+

{{deprecated_header}}

+

Resumen

+

Causa que una cadena parpadee como si estuviese en una etiqueta {{HTMLElement("blink")}}.

+

Sintaxis

+
cadena.blink()
+

Descripción

+

Usa el método blink para formatear y mostrar una cadena en un documento.

+

Ejemplos

+

Ejemplo: Usando métodos de string para cambiar el formateado de una cadena

+

El siguiente ejemplo usa métodos de string para cambiar el formateado de una cadena:

+
var cadenaMundo="¡Hola mundo!"
+
+console.log(cadenaMundo.blink())
+console.log(cadenaMundo.bold())
+console.log(cadenaMundo.italics())
+console.log(cadenaMundo.strike())
+
+

Este ejemplo produce el mismo resultado que el siguiente código HTML:

+
<blink>¡Hola mundo!</blink>
+<b>¡Hola mundo!</b>
+<i>¡Hola mundo!</b>
+<strike>¡Hola mundo!</strike>
+
+

Vea también

+ diff --git a/files/es/web/javascript/reference/global_objects/string/bold/index.html b/files/es/web/javascript/reference/global_objects/string/bold/index.html new file mode 100644 index 0000000000..cc7c841181 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/bold/index.html @@ -0,0 +1,43 @@ +--- +title: String.prototype.bold() +slug: Web/JavaScript/Referencia/Objetos_globales/String/bold +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/bold +--- +

{{JSRef("Objetos_globales", "String")}}
+
+ {{Deprecated_header}}

+

Resumen

+

Provoca que una cadena se muestre en negrita como si estuviera en una etiqueta {{HTMLElement("b")}}.

+

Sintaxis

+
cadena.bold()
+

Descripción

+

Usa el método bold para formatear y mostrar una cadena en un documento.

+

Ejemplos

+

Ejemplo: Usando métodos de string para cambiar el formateado de una cadena

+

El siguiente ejemplo usa métodos de string para cambiar el formateado de una cadena:

+
var cadenaMundo="¡Hola mundo!"
+
+console.log(cadenaMundo.blink())
+console.log(cadenaMundo.bold())
+console.log(cadenaMundo.italics())
+console.log(cadenaMundo.strike())
+
+

Este ejemplo produce el mismo resultado que el siguiente código HTML:

+
<blink>¡Hola mundo!</blink>
+<b>¡Hola mundo!</b>
+<i>¡Hola mundo!</i>
+<strike>¡Hola mundo!</strike>
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/string/charat/index.html b/files/es/web/javascript/reference/global_objects/string/charat/index.html new file mode 100644 index 0000000000..6ef6d46e37 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/charat/index.html @@ -0,0 +1,143 @@ +--- +title: String.prototype.charAt() +slug: Web/JavaScript/Referencia/Objetos_globales/String/charAt +tags: + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/charAt +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El método charAt() de {{jsxref("String")}} devuelve en un nuevo String el carácter UTF-16 de una cadena.

+ +

Sintaxis

+ +
str.charAt(indice)
+ +

Parámetros

+ +
+
indice
+
Un entero entre 0 y 1 menos que la longitud de la cadena. Si no se proporciona ningún indice charAt() utilizará 0.
+
+ +

Descripción

+ +

Los caracteres de una cadena se indexan de izquierda a derecha. El índice del primer caracter es 0, y el índice del último caracter en una cadena llamada nombreCadena es nombreCadena.length - 1. Si el indice que usted proporciona está fuera del rango, JavaScript devuelve una cadena vacía.

+ +

Ejemplos

+ +

Ejemplo: Mostrando caracteres de diferentes localizaciones en una cadena

+ +

El siguiente ejemplo muestra caracteres de diferentes localizaciones en la cadena "Brave new world":

+ +
var cualquierCadena="Brave new world";
+
+console.log("El carácter en el índice 0 es '" + cualquierCadena.charAt(0) + "'")
+console.log("El carácter en el índice 1 es '" + cualquierCadena.charAt(1) + "'")
+console.log("El carácter en el índice 2 es '" + cualquierCadena.charAt(2) + "'")
+console.log("El carácter en el índice 3 es '" + cualquierCadena.charAt(3) + "'")
+console.log("El carácter en el índice 4 es '" + cualquierCadena.charAt(4) + "'")
+console.log("El carácter en el índice 999 es '" + cualquierCadena.charAt(999) + "'")
+
+ +

Estas líneas muestran lo siguiente:

+ +
El carácter en el índice 0 es 'B'
+El carácter en el índice 1 es 'r'
+El carácter en el índice 2 es 'a'
+El carácter en el índice 3 es 'v'
+El carácter en el índice 4 es 'e'
+El carácter en el índice 999 es ''
+
+ +

Especificaciónes

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
ECMAScript 1st Edition.EstándarPrimera definición
{{SpecName('ES5.1', '#sec-15.5.4.4', 'String.prototype.charAt')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.charat', 'String.prototype.charAt')}}{{Spec2('ES6')}} 
+ +

Compatibilidad de navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/charcodeat/index.html b/files/es/web/javascript/reference/global_objects/string/charcodeat/index.html new file mode 100644 index 0000000000..4eccf78f13 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/charcodeat/index.html @@ -0,0 +1,65 @@ +--- +title: String.prototype.charCodeAt() +slug: Web/JavaScript/Referencia/Objetos_globales/String/charCodeAt +tags: + - JavaScript + - Method + - Prototype + - String + - Unicode +translation_of: Web/JavaScript/Reference/Global_Objects/String/charCodeAt +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El charCodeAt() método devuelve un número indicando el valor Unicode del carácter en el índice proporcionado.

+ +

Sintaxis

+ +
cadena.charCodeAt(indice);
+
+ +

Parámetros

+ +
+
indice
+
Un entero entre 0 y 1 menos que la longitud de la cadena; si no se especifica, su valor predeterminado es 0.
+
+ +

Descripción

+ +

El rango del código Unicode va del 0 al 1,114,1110x10FFFF. Los primeros 128 códigos de Unicode encajan directamente con los códigos de caractéres de la codificación ASCII. Para información sobre Unicode, vea la Guía de JavaScript. Observe que charCodeAt siempre devolverá un valor menor de 65.536.

+ +

charCodeAt devuelve {{jsxref("NaN")}} si el indice proporcionado no está entre 0 y 1 menos de la longitud de la cadena.

+ +

En JavaScript 1.2 el método charCodeAt devuelve un número indicando el valor de la hoja de códigos ISO-Latin-1 del carácter correspondiente al índice proporcionado. El rango de la hoja de códigos ISO-Latin-1 va del 0 al 255. Del 0 al 127 encajan directamente con la hoja de códigos ASCII.

+ +

Ejemplos

+ +

Ejemplo: Usando charCodeAt

+ +

El siguiente ejemplo devuelve 65, el valor Unicode para A. 

+ +
"ABC".charCodeAt(0) // returns 65
+
+ +

El siguiente ejemplo devuelve 83.

+ +
"AaSdas".charCodeAt(2) // returns 83
+
+ +

teniendo en cuenta que 2 es la posicion de la letra. Si `S` fuera minuscula, el Unicode es diferente

+ +
"Aasdas".charCodeAt(2) // returns 115
+ +

 

+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/codepointat/index.html b/files/es/web/javascript/reference/global_objects/string/codepointat/index.html new file mode 100644 index 0000000000..ae3fef3ec8 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/codepointat/index.html @@ -0,0 +1,127 @@ +--- +title: String.prototype.codePointAt() +slug: Web/JavaScript/Referencia/Objetos_globales/String/codePointAt +translation_of: Web/JavaScript/Reference/Global_Objects/String/codePointAt +--- +
{{JSRef}}
+ +
 
+ +
El método codePointAt() devuelve un entero no negativo que equivale al valor Unicode code point del carácter.
+ +

Sintaxis

+ +
str.codePointAt(indice)
+ +

Parámetros

+ +
+
indice
+
Índice del carácter en la cadena del que se quiere obtener el valor del Unicode code point.
+
+ +

Valor de retorno

+ +

Un número que equivale al valor code point del carácter especificado en el índice de la cadena; devuelve {{jsxref("undefined")}} si no se encuentra carácter en la posición especifica.

+ +

Description

+ +

If there is no element at the specified position, {{jsxref("undefined")}} is returned. If no UTF-16 surrogate pair begins at pos, the code unit at pos is returned.

+ +

Examples

+ +

Using codePointAt()

+ +
'ABC'.codePointAt(1);          // 66
+'\uD800\uDC00'.codePointAt(0); // 65536
+
+'XYZ'.codePointAt(42); // undefined
+
+ +

Polyfill

+ +

The following extends Strings to include the codePointAt() function as specified in ECMAScript 2015 for browsers not supporting it natively.

+ +
/*! http://mths.be/codepointat v0.1.0 by @mathias */
+if (!String.prototype.codePointAt) {
+  (function() {
+    'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
+    var codePointAt = function(position) {
+      if (this == null) {
+        throw TypeError();
+      }
+      var string = String(this);
+      var size = string.length;
+      // `ToInteger`
+      var index = position ? Number(position) : 0;
+      if (index != index) { // 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
+          // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+          return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
+        }
+      }
+      return first;
+    };
+    if (Object.defineProperty) {
+      Object.defineProperty(String.prototype, 'codePointAt', {
+        'value': codePointAt,
+        'configurable': true,
+        'writable': true
+      });
+    } else {
+      String.prototype.codePointAt = codePointAt;
+    }
+  }());
+}
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-string.prototype.codepointat', 'String.prototype.codePointAt')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-string.prototype.codepointat', 'String.prototype.codePointAt')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.String.codePointAt")}}

+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/concat/index.html b/files/es/web/javascript/reference/global_objects/string/concat/index.html new file mode 100644 index 0000000000..d00ffce70e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/concat/index.html @@ -0,0 +1,90 @@ +--- +title: String.prototype.concat() +slug: Web/JavaScript/Referencia/Objetos_globales/String/concat +tags: + - JavaScript + - Prototipo + - Referencia + - String + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/String/concat +--- +
{{JSRef}}
+ +

El método concat() combina dos o más cadenas de texto y devuelve una cadena de texto nueva.

+ +
{{EmbedInteractiveExample("pages/js/string-concat.html")}}
+ +

Sintaxis

+ +
str.concat(str2 [, ...strN])
+ +

Parámetros

+ +
+
str2 [, ...strN]
+
Cadenas que se concatenarán con str.
+
+ +

Valor devuelto

+ +

Una nueva cadena que contiene el texto combinado de las cadenas proporcionadas.

+ +

Descripción

+ +

La función concat() concatena los argumentos de tipo texto con la cadena de sobre la que se llama a la función y devuelve una nueva cadena de texto. Los cambios en la cadena original o la cadena devuelta no afectan al otro.

+ +

Si los argumentos no son de tipo texto, son convertidos a texto antes de concatenarlos

+ +

Rendimiento

+ +

Es altamente recomendado que se utilicen {{jsxref("Operators/Assignment_Operators", "operadores de asignación", "", 1)}} (+, +=) en lugar del método concat().

+ +

Ejemplos

+ +

Usando concat()

+ +

El siguiente ejemplo combina cadenas de texto en una nueva.

+ +
let hello = 'Hello, '
+console.log(hello.concat('Kevin', '. Have a nice day.'))
+// Hello, Kevin. Have a nice day.
+
+let greetList = ['Hello', ' ', 'Venkat', '!']
+"".concat(...greetList)  // "Hello Venkat!"
+
+"".concat({})    // [object Object]
+"".concat([])    // ""
+"".concat(null)  // "null"
+"".concat(true)  // "true"
+"".concat(4, 5)  // "45"
+
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-string.prototype.concat', 'String.prototype.concat')}}
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.String.concat")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/endswith/index.html b/files/es/web/javascript/reference/global_objects/string/endswith/index.html new file mode 100644 index 0000000000..cbeac4f481 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/endswith/index.html @@ -0,0 +1,88 @@ +--- +title: String.prototype.endsWith() +slug: Web/JavaScript/Referencia/Objetos_globales/String/endsWith +tags: + - JavaScript + - Prototipo + - Referencia + - String + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/String/endsWith +--- +
{{JSRef}}
+ +

El método endsWith() determina si una cadena de texto termina con los caracteres de una cadena indicada, devolviendo true o false según corresponda.

+ +
{{EmbedInteractiveExample("pages/js/string-endswith.html")}}
+ +

Sintaxis

+ +
str.endsWith(searchString[, position])
+ +

Parámetros

+ +
+
searchString
+
Los caracteres a buscar hasta el final de la cadena str.
+
length {{optional_inline}}
+
Si se indica, se utiliza como el tamaño de str. Por defecto se usa str.length.
+
+ +

Valor devuelto

+ +

true si los caracteres proporcionados se encuentran al final de la cadena de texto; en caso contrario, false.

+ +

Descripción

+ +

Este método determina si una cadena de texto termina en otra cadena o no. Este método distingue entre mayúsculas y minúsculas.

+ +

Polyfill

+ +

Este método ha sido añadido a la especificación ECMAScript 6 y puede no estar disponible en todas las implementaciones de JavaScript. Sin embargo, puedes implementar el polyfill String.prototype.endsWith() con el siguiente fragmento de código:

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

Ejemplos

+ +

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

Especificaciones

+ + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-string.prototype.endswith', 'String.prototype.endsWith')}}
+ +

Compatibilidad en navegadores

+ +

{{Compat("javascript.builtins.String.endsWith")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/fixed/index.html b/files/es/web/javascript/reference/global_objects/string/fixed/index.html new file mode 100644 index 0000000000..3d188bc39d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/fixed/index.html @@ -0,0 +1,35 @@ +--- +title: String.prototype.fixed() +slug: Web/JavaScript/Referencia/Objetos_globales/String/fixed +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/fixed +--- +

{{JSRef("Objetos_globales", "String")}}

+

{{deprecated_header}}

+

Resumen

+

Causa que una cadena se muestre con una fuente de ancho fijo, como si estuviesde dentro de una etiqueta {{HTMLElement("tt")}}.

+

Sintaxis

+
cadena.fixed()
+

Descripción

+

Usa el método fixed para formatear y mostrar unacadena en un documento.

+

Ejemplos

+

Ejemplo: Usando fixed para cambiar el formateado de una cadena

+

El siguiente ejemplo usa el método fixed para cambiar el formateado de una cadena:

+
var cadenaMundo="¡Hola Mundo!"
+console.log(cadenaMundo.fixed())
+
+

Este ejemplo produce el mismo resultado que el siguiente código HTML:

+
<tt>¡Hola Mundo!</tt>
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/string/fontcolor/index.html b/files/es/web/javascript/reference/global_objects/string/fontcolor/index.html new file mode 100644 index 0000000000..135e805cb2 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/fontcolor/index.html @@ -0,0 +1,122 @@ +--- +title: String.prototype.fontcolor() +slug: Web/JavaScript/Referencia/Objetos_globales/String/fontcolor +translation_of: Web/JavaScript/Reference/Global_Objects/String/fontcolor +--- +
{{JSRef}} {{deprecated_header}}
+ +

El método fontcolor() crea {{HTMLElement("font")}} elemento HTML que cambia el color de la cadena.

+ +
+

Usage note: La etiqueta <font> fue eliminada en HTML5 y no debe ser usada. En lugar de es, es necesario aplicar propiedades CSS.

+
+ +

Sintaxis

+ +
str.fontcolor(color)
+ +

Parametros

+ +
+
color
+
A string expressing the color as a hexadecimal RGB triplet or as a string literal. String literals for color names are listed in the CSS color reference.
+
+ +

Descripción

+ +

Si expresas el color como hexadecimal, usa el formato rrggbb. Por ejemplo, el color hexadecimal para salmón es R=FA, G=80, B=72, así que el valor será "FA8072".

+ +

Ejemplos

+ +

Usos fontcolor()

+ +

Los siguientes ejemplos usan el método fontcolor() para cambiar el color de una cadena.

+ +
var worldString = 'Hello, world';
+
+console.log(worldString.fontcolor('red') +  ' en rojo');
+// '<font color="red">Hello, world</font> en rojo'
+
+console.log(worldString.fontcolor('FF00') + ' es rojo en hexadecimal');
+// '<font color="FF00">Hello, world</font> es rojo en hexadecimal'
+
+ +

Con el objeto {{domxref("HTMLElement.style", "element.style")}} obtienes el atributo style y manipularlo:

+ +
document.getElementById('yourElemId').style.color = 'red';
+
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES6', '#sec-string.prototype.fontcolor', 'String.prototype.fontcolor')}}{{Spec2('ES6')}}Initial definition. Implemented in JavaScript 1.0. Defined in the (normative) Annex B for Additional ECMAScript Features for Web Browsers.
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Basico{{CompatVersionUnknown}}{{CompatGeckoDesktop("1.0")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Basico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("1.0")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/fontsize/index.html b/files/es/web/javascript/reference/global_objects/string/fontsize/index.html new file mode 100644 index 0000000000..212c49d638 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/fontsize/index.html @@ -0,0 +1,123 @@ +--- +title: String.prototype.fontsize() +slug: Web/JavaScript/Referencia/Objetos_globales/String/fontsize +translation_of: Web/JavaScript/Reference/Global_Objects/String/fontsize +--- +
{{JSRef}} {{deprecated_header}}
+ +

El método fontsize() crea {{HTMLElement("font")}} elemento HTML que muestra una cadena con el tamaño especificado.

+ +
+

Usage note: El elemento <font> ha sido eliminado HTML5 y no se debe usar. Los desarrolladores web deben usar propiedades CSS.

+
+ +

Sintaxis

+ +
str.fontsize(size)
+ +

Parámetros

+ +
+
size
+
Un entero entre 1 y 7.
+
+ +

Descripción

+ +

Cuando especificas el tamaño como entero, estableces el tamaño de la fuente. Cuando especificas el tamaño como cadena tal como "-2", se ajusta el tamaño de la fuente al de la etiqueta {{HTMLElement("basefont")}}.

+ +

When you specify size as an integer, you set the font size of str to one of the 7 defined sizes. When you specify size as a string such as "-2", you adjust the font size of str relative to the size set in the {{HTMLElement("basefont")}} tag.

+ +

Ejemlpos

+ +

Usos fontsize()

+ +

The following example uses string methods to change the size of a string:

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

With the {{domxref("HTMLElement.style", "element.style")}} object you can get the element's style attribute and manipulate it more generically, for example:

+ +
document.getElementById('yourElemId').style.fontSize = '0.7em';
+
+ +

Specifications

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-string.prototype.fontsize', 'String.prototype.fontsize')}}{{Spec2('ES6')}}Initial definition. Implemented in JavaScript 1.0. Defined in the (normative) Annex B for Additional ECMAScript Features for Web Browsers.
+ +

Browser compatibility

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatGeckoDesktop("1.0")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("1.0")}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/fromcharcode/index.html b/files/es/web/javascript/reference/global_objects/string/fromcharcode/index.html new file mode 100644 index 0000000000..7e87f3d90d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/fromcharcode/index.html @@ -0,0 +1,130 @@ +--- +title: String.fromCharCode() +slug: Web/JavaScript/Referencia/Objetos_globales/String/fromCharCode +tags: + - JavaScript + - Method + - String + - Unicode +translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCharCode +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El String.fromCharCode() método estático que devuelve una cadena creada mediante el uso de una secuencia de valores Unicode especificada.

+ +

Sintaxis

+ +
String.fromCharCode(num1, ..., numN) 
+ +

Parámetros

+ +
+
num1, ..., numN
+
Secuencia de números con los valores Unicode.
+
+ +

Descripción

+ +

Este método devuelve una cadena y no un objeto String.

+ +

Debido a que fromCharCode es un método estático de String, usted siempre lo usará como String.fromCharCode(), en vez de un método de un objeto String creado por usted.

+ +

Ejemplos

+ +

Ejemplo: Usando fromCharCode

+ +

El siguiene ejemplo devuelve la cadena "ABC".

+ +
String.fromCharCode(65,66,67)
+
+ +

Especificaciónes

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
ECMAScript 1st Edition.EstándarPrimera definicíon
+ Implementada en JavaScript 1.2
{{SpecName('ES5.1', '#sec-15.5.3.2', 'StringfromCharCode')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.fromcharcodes', 'String.fromCharCode')}}{{Spec2('ES6')}} 
+ +

Compatibilidad de navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/fromcodepoint/index.html b/files/es/web/javascript/reference/global_objects/string/fromcodepoint/index.html new file mode 100644 index 0000000000..39fe662b75 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/fromcodepoint/index.html @@ -0,0 +1,204 @@ +--- +title: String.fromCodePoint() +slug: Web/JavaScript/Referencia/Objetos_globales/String/fromCodePoint +translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint +--- +
{{JSRef("Global_Objects", "String")}}
+ +

Resumen

+ +

El método estatico String.fromCodePoint() devuelve una cadena creada por una secuencia de puntos de codigo.

+ +

Sintaxis

+ +
String.fromCodePoint(num1[, ...[, numN]])
+ +

Parametros

+ +
+
num1, ..., numN
+
Una secuencia de puntos de código.
+
+ +

Throws

+ +
+
{{jsxref("Global_Objects/RangeError", "RangeError")}}
+
A {{jsxref("Global_Objects/RangeError", "RangeError")}} is thrown if an invalid Unicode code point is given (e.g. "RangeError: NaN is not a valid code point").
+
+ +

Descripción

+ +

Because fromCodePoint() is a static method of {{jsxref("Global_Objects/String", "String")}}, you always use it as String.fromCodePoint(), rather than as a method of a {{jsxref("Global_Objects/String", "String")}} object you created.

+ +

Ejemplos

+ +

Ejemplos: Usando 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
+
+ +

Polyfill

+ +

The String.fromCodePoint method has been added to the ECMAScript standard in version 6 and may not be supported in all web browsers or environments yet. Use the code below for a polyfill:

+ +
/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
+if (!String.fromCodePoint) {
+  (function() {
+    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 stringFromCharCode = String.fromCharCode;
+    var floor = Math.floor;
+    var fromCodePoint = function() {
+      var MAX_SIZE = 0x4000;
+      var codeUnits = [];
+      var highSurrogate;
+      var lowSurrogate;
+      var index = -1;
+      var length = arguments.length;
+      if (!length) {
+        return '';
+      }
+      var result = '';
+      while (++index < length) {
+        var codePoint = Number(arguments[index]);
+        if (
+          !isFinite(codePoint) ||       // `NaN`, `+Infinity`, or `-Infinity`
+          codePoint < 0 ||              // not a valid Unicode code point
+          codePoint > 0x10FFFF ||       // not a valid Unicode code point
+          floor(codePoint) != codePoint // not an integer
+        ) {
+          throw RangeError('Invalid code point: ' + codePoint);
+        }
+        if (codePoint <= 0xFFFF) { // BMP code point
+          codeUnits.push(codePoint);
+        } else { // Astral code point; split in surrogate halves
+          // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+          codePoint -= 0x10000;
+          highSurrogate = (codePoint >> 10) + 0xD800;
+          lowSurrogate = (codePoint % 0x400) + 0xDC00;
+          codeUnits.push(highSurrogate, lowSurrogate);
+        }
+        if (index + 1 == length || codeUnits.length > MAX_SIZE) {
+          result += stringFromCharCode.apply(null, codeUnits);
+          codeUnits.length = 0;
+        }
+      }
+      return result;
+    };
+    if (defineProperty) {
+      defineProperty(String, 'fromCodePoint', {
+        'value': fromCodePoint,
+        'configurable': true,
+        'writable': true
+      });
+    } else {
+      String.fromCodePoint = fromCodePoint;
+    }
+  }());
+}
+
+ +

Specifications

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-string.fromcodepoint', 'String.fromCodePoint')}}{{Spec2('ES6')}}Initial definition.
+ +

Browser compatibility

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support41{{CompatGeckoDesktop("29")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatNo}}{{CompatGeckoMobile("29")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/includes/index.html b/files/es/web/javascript/reference/global_objects/string/includes/index.html new file mode 100644 index 0000000000..094a3fd648 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/includes/index.html @@ -0,0 +1,108 @@ +--- +title: String.prototype.includes() +slug: Web/JavaScript/Referencia/Objetos_globales/String/includes +tags: + - Cadena de texto + - JavaScript + - Prototipo + - Referencia + - String + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/String/includes +--- +
{{JSRef}}
+ +

El método includes() determina si una cadena de texto puede ser encontrada dentro de otra cadena de texto, devolviendo true o false según corresponda.

+ +
{{EmbedInteractiveExample("pages/js/string-includes.html", "shorter")}}
+ +

Sintaxis

+ +
str.includes(searchString[, position])
+ +

Parametros

+ +
+
searchString
+
Una cadena a buscar en el texto str.
+
position {{optional_inline}}
+
La posición dentro de la cadena en la cual empieza la búsqueda de searchString (Por defecto este valor es 0).
+
+ +

Valor devuelto

+ +

true si la cadena de texto contiene la cadena buscada; en caso contrario, false.

+ +

Descripción

+ +

Este método permite determinar si una cadena de texto se encuentra incluida dentro de la otra.

+ +

Sensibilidad a Mayúsculas/Minúsculas

+ +

El método includes() es "case sensitive" (tiene en cuenta mayúsculas y minúsculas). Por ejemplo, la siguiente expresión devolverá false:

+ +
'Ballena azul'.includes('ballena'); // devuelve false
+
+ +

Polyfill

+ +

Este método ha sido agregado a la especificación ECMAScript 2015 y puede no estar  disponible en toda las implementaciones de JavaScript.

+ +

Sin embargo, puedes usar este método como polyfill:

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

Ejemplos

+ +

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

Especificaciones

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-string.prototype.includes', 'String.prototype.includes')}}
+ +

Compatibilidad en navegadores

+ +

{{Compat("javascript.builtins.String.includes")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/index.html b/files/es/web/javascript/reference/global_objects/string/index.html new file mode 100644 index 0000000000..a6c5aea8e3 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/index.html @@ -0,0 +1,385 @@ +--- +title: String — Cadena de caracteres +slug: Web/JavaScript/Referencia/Objetos_globales/String +tags: + - Clase + - Class + - ECMAScript 2015 + - JavaScript + - Referencia + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String +--- +
{{JSRef}}
+ +

El objeto String se utiliza para representar y manipular una secuencia de caracteres.

+ +

Descripción

+ +

Las cadenas son útiles para almacenar datos que se pueden representar en forma de texto. Algunas de las operaciones más utilizadas en cadenas son verificar su {{jsxref("String.length", "length")}}, para construirlas y concatenarlas usando operadores de cadena + y +=, verificando la existencia o ubicación de subcadenas con {{jsxref("String.prototype.indexOf()", "indexOf()")}} o extraer subcadenas con el método {{jsxref("String.prototype.substring()", "substring()")}}.

+ +

Crear cadenas

+ +

Las cadenas se pueden crear como primitivas, a partir de cadena literales o como objetos, usando el constructor {{jsxref("String/String", "String()")}}:

+ +
const string1 = "Una cadena primitiva";
+const string2 = 'También una cadena primitiva';
+const string3 = `Otra cadena primitiva más`;
+ +
const string4 = new String("Un objeto String");
+
+ +

Las strings primitivas y los objetos string se pueden usar indistintamente en la mayoría de las situaciones. Consulta "Primitivas String y objetos String" a continuación.

+ +

Los cadena literales se pueden especificar usando comillas simples o dobles, que se tratan de manera idéntica, o usando el carácter de comilla invertida `. Esta última forma especifica una Plantilla literal: con esta forma puedes interpolar expresiones.

+ +

Acceder a un caracter

+ +

Hay dos formas de acceder a un caracter individual en una cadena. La primera es con el método {{jsxref("String.prototype.charAt()", "charAt()")}}:

+ +
return 'cat'.charAt(1) // devuelve "a"
+
+ +

La otra forma (introducida en ECMAScript 5) es tratar a la cadena como un objeto similar a un arreglo, donde los caracteres individuales corresponden a un índice numérico:

+ +
return 'cat'[1] // devuelve "a"
+
+ +

Cuando se usa la notación entre corchetes para acceder a los caracteres, no se puede intentar eliminar o asignar un valor a estas propiedades. Las propiedades involucradas no se pueden escribir ni configurar. (Ve {{jsxref("Object.defineProperty()")}} para más información).

+ +

Comparar cadenas

+ +

En C, se usa la función strcmp() para comparar cadenas. En JavaScript, solo usas los operadores menor que y mayor que:

+ +
let a = 'a'
+let b = 'b'
+if (a < b) { // true
+  console.log(a + ' es menor que ' + b)
+} else if (a > b) {
+  console.log(a + ' es mayor que ' + b)
+} else {
+  console.log(a + ' y ' + b + ' son iguales.')
+}
+
+ +

Puedes lograr un resultado similar usando el método {{jsxref("String.prototype.localeCompare()", "localeCompare()")}} heredado por las instancias de String.

+ +

Ten en cuenta que a == b compara las cadenas en a y b por ser igual en la forma habitual que distingue entre mayúsculas y minúsculas. Si deseas comparar sin tener en cuenta los caracteres en mayúsculas o minúsculas, usa una función similar a esta:

+ +
function isEqual(str1, str2)
+{
+    return str1.toUpperCase() === str2.toUpperCase()
+} // isEqual
+
+ +

En esta función se utilizan mayúsculas en lugar de minúsculas, debido a problemas con ciertas conversiones de caracteres UTF-8.

+ +

Primitivas String y objetos String

+ +

Ten en cuenta que JavaScript distingue entre objetos String y valores de {{Glossary("Primitive", "primitivas string")}}. (Lo mismo ocurre con {{jsxref("Boolean", "Booleanos")}} y {{jsxref("Global_Objects/Number", "Números")}}).

+ +

Las cadenas literales (denotadas por comillas simples o dobles) y cadenas devueltas de llamadas a String en un contexto que no es de constructor (es decir, llamado sin usar la palabra clave {{jsxref("Operators/new", "new")}}) son cadenas primitivas. JavaScript automáticamente convierte las primitivas en objetos String, por lo que es posible utilizar métodos del objeto String en cadenas primitivas. En contextos donde se va a invocar a un método en una cadena primitiva o se produce una búsqueda de propiedad, JavaScript ajustará automáticamente la cadena primitiva y llamará al método o realizará la búsqueda de la propiedad.

+ +
let s_prim = 'foo'
+let s_obj = new String(s_prim)
+
+console.log(typeof s_prim) // Registra "string"
+console.log(typeof s_obj)  // Registra "object"
+
+ +

Las primitivas de String y los objetos String también dan diferente resultado cuando se usa {{jsxref("Global_Objects/eval", "eval()")}}. Las primitivas pasadas a eval se tratan como código fuente; Los objetos String se tratan como todos los demás objetos, devuelven el objeto. Por ejemplo:

+ +
let s1 = '2 + 2'              // crea una string primitiva
+let s2 = new String('2 + 2')  // crea un objeto String
+console.log(eval(s1))         // devuelve el número 4
+console.log(eval(s2))         // devuelve la cadena "2 + 2"
+
+ +

Por estas razones, el código se puede romper cuando encuentra objetos String y espera una string primitiva en su lugar, aunque generalmente los autores no necesitan preocuparse por la distinción.

+ +

Un objeto String siempre se puede convertir a su contraparte primitiva con el método {{jsxref("String.prototype.valueOf()", "valueOf()")}}.

+ +
console.log(eval(s2.valueOf()))  // devuelve el número 4
+
+ +

Notación de escape

+ +

Los caracteres especiales se pueden codificar mediante notación de escape:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CódigoSalida
\XXX
+ (donde XXX es de 1 a 3 dígitos octales; rango de 0-377)
Punto de código Unicode/carácter ISO-8859-1 entre U+0000 y U+00FF
\'Comilla sencilla
\"Comilla doble
\\Barra inversa
\nNueva línea
\rRetorno de carro
\vTabulación vertical
\tTabulación
\bRetroceso
\fAvance de página
\uXXXX (donde XXXX son 4 dígitos hexadecimales; rango de 0x0000-0xFFFF)Unidad de código UTF-16/punto de código Unicode entre U+0000 y U+FFFF
\u{X} ... \u{XXXXXX}
+ (donde XXXXXXX es de 1 a 6 dígitos hexadecimales; rango de 0x0-0x10FFFF)
Unidad de código UTF-32/punto de código Unicode entre U+0000 y U+10FFFF
\xXX
+ (donde XX son 2 dígitos hexadecimales; rango de 0x00-0xFF)
Punto de código Unicode/carácter ISO-8859-1 entre U+0000 y U+00FF
+ +

Cadenas literales largas

+ +

A veces, tu código incluirá cadenas que son muy largas. En lugar de tener líneas que se prolongan interminablemente o que se ajustan según el capricho de tu editor, es posible que desees dividir específicamente la cadena en varias líneas en el código fuente sin afectar el contenido real de la cadena. hay dos maneras de conseguirlo.

+ +

Método 1

+ +

Puedes usar el operador + para agregar varias cadenas juntas, así:

+ +
let longString = "Esta es una cadena muy larga que necesita " +
+                 "que dividimos en varias líneas porque " +
+                 "de lo contrario, mi código es ilegible."
+
+ +

Método 2

+ +

Puedes usar el caracter de barra invertida (\) al final de cada línea para indicar que la cadena continúa en la siguiente línea. Asegúrate de que no haya ningún espacio ni ningún otro carácter después de la barra invertida (a excepción de un salto de línea) o como sangría; de lo contrario, no trabajará.

+ +

Esa forma se ve así:

+ +
let longString = "Esta es una cadena muy larga que necesita \
+que dividimos en varias líneas porque \
+de lo contrario, mi código es ilegible."
+
+ +

Ambos métodos anteriores dan como resultado cadenas idénticas.

+ +

Constructor

+ +
+
{{jsxref("String/String", "String()")}}
+
Crea un nuevo objeto String. Realiza la conversión de tipos cuando se llama como función, en lugar de como constructor, lo cual suele ser más útil.
+
+ +

Métodos estáticos

+ +
+
{{jsxref("String.fromCharCode()", "String.fromCharCode(num1 [, ...[, numN]])")}}
+
Devuelve una cadena creada utilizando la secuencia de valores Unicode especificada.
+
{{jsxref("String.fromCodePoint()", "String.fromCodePoint(num1 [, ...[, numN]])")}}
+
Devuelve una cadena creada utilizando la secuencia de puntos de código especificada.
+
{{jsxref("String.raw()")}}
+
Devuelve una cadena creada a partir de una plantilla literal sin formato.
+
+ +

Propiedades de la instancia

+ +
+
{{jsxref("String.prototype.length")}}
+
Refleja la length de la cadena. Solo lectura.
+
+ +

Métodos de instancia

+ +
+
{{jsxref("String.prototype.charAt()", "String.prototype.charAt(index)")}}
+
Devuelve el caracter (exactamente una unidad de código UTF-16) en el index especificado.
+
{{jsxref("String.prototype.charCodeAt()", "String.prototype.charCodeAt(index)")}}
+
Devuelve un número que es el valor de la unidad de código UTF-16 en el index dado.
+
{{jsxref("String.prototype.codePointAt()", "String.prototype.codePointAt(pos)")}}
+
Devuelve un número entero no negativo que es el valor del punto de código del punto de código codificado en UTF-16 que comienza en la pos especificada.
+
{{jsxref("String.prototype.concat()", "String.prototype.concat(str[, ...strN])")}}
+
Combina el texto de dos (o más) cadenas y devuelve una nueva cadena.
+
{{jsxref("String.prototype.includes()", "String.prototype.includes(searchString [, position])")}}
+
Determina si la cadena de la llamada contiene searchString.
+
{{jsxref("String.prototype.endsWith()", "String.prototype.endsWith(searchString[, length])")}}
+
Determina si una cadena termina con los caracteres de la cadena searchString.
+
{{jsxref("String.prototype.indexOf()", "String.prototype.indexOf(searchValue[, fromIndex])")}}
+
Devuelve el índice dentro del objeto {{jsxref("String")}} llamador de la primera aparición de searchValue, o -1 si no lo encontró.
+
{{jsxref("String.prototype.lastIndexOf()", "String.prototype.lastIndexOf(searchValue[, fromIndex])")}}
+
Devuelve el índice dentro del objeto {{jsxref("String")}} llamador de la última aparición de searchValue, o -1 si no lo encontró.
+
{{jsxref("String.prototype.localeCompare()", "String.prototype.localeCompare(compareString[, locales[, options]])")}}
+
Devuelve un número que indica si la cadena de referencia compareString viene antes, después o es equivalente a la cadena dada en el orden de clasificación.
+
{{jsxref("String.prototype.match()", "String.prototype.match(regexp)")}}
+
Se utiliza para hacer coincidir la expresión regular regexp con una cadena.
+
{{jsxref("String.prototype.matchAll()", "String.prototype.matchAll(regexp)")}}
+
Devuelve un iterador de todas las coincidencias de regexp.
+
{{jsxref("String.prototype.normalize()", "String.prototype.normalize([form])")}}
+
Devuelve la forma de normalización Unicode del valor de la cadena llamada.
+
{{jsxref("String.prototype.padEnd()", "String.prototype.padEnd(targetLength[, padString])")}}
+
Rellena la cadena actual desde el final con una cadena dada y devuelve una nueva cadena de longitud targetLength.
+
{{jsxref("String.prototype.padStart()", "String.prototype.padStart(targetLength[, padString])")}}
+
Rellena la cadena actual desde el principio con una determinada cadena y devuelve una nueva cadena de longitud targetLength.
+
{{jsxref("String.prototype.repeat()", "String.prototype.repeat(count)")}}
+
Devuelve una cadena que consta de los elementos del objeto repetidos count veces.
+
{{jsxref("String.prototype.replace()" , "String.prototype.replace(searchFor, replaceWith)")}}
+
Se usa para reemplazar ocurrencias de searchFor usando replaceWith. searchFor puede ser una cadena o expresión regular, y replaceWith puede ser una cadena o función.
+
{{jsxref("String.prototype.replaceAll()", "String.prototype.replaceAll(searchFor, replaceWith)")}}
+
Se utiliza para reemplazar todas las apariciones de searchFor usando replaceWith. searchFor puede ser una cadena o expresión regular, y replaceWith puede ser una cadena o función.
+
{{jsxref("String.prototype.search()", "String.prototype.search(regexp)")}}
+
Busca una coincidencia entre una expresión regular regexp y la cadena llamadora.
+
{{jsxref("String.prototype.slice()", "String.prototype.slice(beginIndex[, endIndex])")}}
+
Extrae una sección de una cadena y devuelve una nueva cadena.
+
{{jsxref("String.prototype.split()", "String.prototype.split([sep[, limit] ])")}}
+
Devuelve un arreglo de cadenas pobladas al dividir la cadena llamadora en las ocurrencias de la subcadena sep.
+
{{jsxref("String.prototype.startsWith()", "String.prototype.startsWith(searchString[, length])")}}
+
Determina si la cadena llamadora comienza con los caracteres de la cadena searchString.
+
{{jsxref("String.prototype.substr()")}}
+
Devuelve los caracteres en una cadena que comienza en la ubicación especificada hasta el número especificado de caracteres.
+
{{jsxref("String.prototype.substring()", "String.prototype.substring(indexStart[, indexEnd])")}}
+
Devuelve una nueva cadena que contiene caracteres de la cadena llamadora de (o entre) el índice (o indeces) especificados.
+
{{jsxref("String.prototype.toLocaleLowerCase()", "String.prototype.toLocaleLowerCase( [locale, ...locales])")}}
+
+

Los caracteres dentro de una cadena se convierten a minúsculas respetando la configuración regional actual.

+ +

Para la mayoría de los idiomas, devolverá lo mismo que {{jsxref("String.prototype.toLowerCase()", "toLowerCase()")}}.

+
+
{{jsxref("String.prototype.toLocaleUpperCase()", "String.prototype.toLocaleUpperCase( [locale, ...locales])")}}
+
+

Los caracteres dentro de una cadena se convierten a mayúsculas respetando la configuración regional actual.

+ +

Para la mayoría de los idiomas, devolverá lo mismo que {{jsxref("String.prototype.toUpperCase()", "toUpperCase()")}}.

+
+
{{jsxref("String.prototype.toLowerCase()")}}
+
Devuelve el valor de la cadena llamadora convertido a minúsculas.
+
{{jsxref("String.prototype.toString()")}}
+
Devuelve una cadena que representa el objeto especificado. Redefine el método {{jsxref("Object.prototype.toString()")}}.
+
{{jsxref("String.prototype.toUpperCase()")}}
+
Devuelve el valor de la cadena llamadora convertido a mayúsculas.
+
{{jsxref("String.prototype.trim()")}}
+
Recorta los espacios en blanco desde el principio y el final de la cadena. Parte del estándar ECMAScript 5.
+
{{jsxref("String.prototype.trimStart()")}}
+
Recorta los espacios en blanco desde el principio de la cadena.
+
{{jsxref("String.prototype.trimEnd()")}}
+
Recorta los espacios en blanco del final de la cadena.
+
{{jsxref("String.prototype.valueOf()")}}
+
Devuelve el valor primitivo del objeto especificado. Redefine el método {{jsxref("Object.prototype.valueOf()")}}.
+
{{jsxref("String.prototype.@@iterator()")}}
+
Devuelve un nuevo objeto Iterator que itera sobre los puntos de código de un valor de cadena, devolviendo cada punto de código como un valor de cadena.
+
+ +

Métodos de contenedor HTML

+ +
+
+

Desaprobado. Evita estos métodos.

+ +

Son de uso limitado, ya que proporcionan solo un subconjunto de las etiquetas y atributos HTML disponibles.

+
+ +
+
{{jsxref("String.prototype.anchor()")}}
+
{{htmlattrxref("name", "a", "<a name=\"name\">")}} (hipertexto destino)
+
{{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\">")}} (enlace a 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")}}
+
+
+ +

Ejemplos

+ +

Conversión de cadenas

+ +

Es posible usar String como una alternativa más confiable de {{jsxref("String.prototype.toString()", "toString()")}}, ya que funciona cuando se usa en {{jsxref( "null")}}, {{jsxref("undefined")}} y en {{jsxref("Symbol", "símbolos")}}. Por ejemplo:

+ +
let outputStrings = []
+for (let i = 0, n = inputValues.length; i < n; ++i) {
+  outputStrings.push(String(inputValues[i]));
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-string-objects', 'String')}}
+ +

Compatibilidad del navegador

+ + + +

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

+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/indexof/index.html b/files/es/web/javascript/reference/global_objects/string/indexof/index.html new file mode 100644 index 0000000000..14f7b01eb8 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/indexof/index.html @@ -0,0 +1,104 @@ +--- +title: String.prototype.indexOf() +slug: Web/JavaScript/Referencia/Objetos_globales/String/indexOf +tags: + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/indexOf +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El método indexOf()devuelve el índice, dentro del objeto String que realiza la llamada, de la primera ocurrencia del valor especificado, comenzando la búsqueda desde indiceDesde; o -1 si no se encuentra dicho valor.

+ +

Sintaxis

+ +
cadena.indexOf(valorBusqueda[, indiceDesde])
+ +

Parámetros

+ +
+
valorBusqueda
+
Una cadena que representa el valor de búsqueda.
+
+ +
+
indiceDesde
+
La localización dentro de la cadena llamada desde la que empezará la búsqueda. Puede ser un entero entre 0 y la longitud de la cadena. El valor predeterminado es 0.
+
+ +

Descripción

+ +

Los caracteres de una cadena se indexan de izquierda a derecha. El índice del primer carácter es 0, y el índice del último carácter de una cadena llamada nombreCadena es nombreCadena.length - 1.

+ +
"Blue Whale".indexOf("Blue")    // returns 0
+"Blue Whale".indexOf("Blute")   // returns -1
+"Blue Whale".indexOf("Whale",0) // returns 5
+"Blue Whale".indexOf("Whale",5) // returns 5
+"Blue Whale".indexOf("",9)      // returns 9
+"Blue Whale".indexOf("",10)     // returns 10
+"Blue Whale".indexOf("",11)     // returns 10
+
+ +

El método indexOf es sensible a mayúsculas. Por ejemplo, la siguiente expresión devuelve -1:

+ +
"Ballena Azul".indexOf("azul")
+
+ +

Ejemplos

+ +

Ejemplo: Usando indexOf y lastIndexOf

+ +

El siguiente ejemplo utiliza indexOf y lastIndexOf para localizar valores dentro de la cadena "Brave new world".

+ +
var cualquierCadena="Brave new world"
+
+
+document.write("<P>The index of the first w from the beginning is " +
+   cualquierCadena.indexOf("w"))         // Muestra 8
+
+document.write("<P>The index of the first w from the end is " +
+   cualquierCadena.lastIndexOf("w"))    // Muestra 10
+
+document.write("<P>The index of 'new' from the beginning is " +
+   cualquierCadena.indexOf("new"))      // Muestra 6
+
+document.write("<P>The index of 'new' from the end is " +
+   cualquierCadena.lastIndexOf("new"))  // Muestra 6
+
+ +

Ejemplo: indexOf y sensibilidad a mayúsculas

+ +

El siguiente ejemplo define dos variables de tipo cadena. Las variables contienen la misma cadena excepto que la segunda cadena contienen letras en mayúscula. El primer método writeln muestra 19. Pero a que el método indexOf es sensible a mayúsculas, no se encuentra la cadena "cheddar" en miCadenaMayusculas, así que el segundo método writeln muestra -1.

+ +
miCadena="brie, pepper jack, cheddar"
+miCadenaMayusculas="Brie, Pepper Jack, Cheddar"
+document.writeln('miCadena.indexOf("cheddar") is ' +
+   miCadena.indexOf("cheddar"))
+document.writeln('<P>miCadenaMayusculas.indexOf("cheddar") is ' +
+   miCadenaMayusculas.indexOf("cheddar"))
+
+ +

Ejemplo: Usando indexOf para contar ocurrencias de una letra en una cadena

+ +

El siguiente ejemplo establece cuenta como el número de ocurrencias de la letra x dentro de la cadena miCadena:

+ +
cuenta = 0;
+posicion = miCadena.indexOf("x");
+while ( posicion != -1 ) {
+   cuenta++;
+   posicion = miCadena.indexOf("x",posicion+1);
+}
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/italics/index.html b/files/es/web/javascript/reference/global_objects/string/italics/index.html new file mode 100644 index 0000000000..71897293bb --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/italics/index.html @@ -0,0 +1,49 @@ +--- +title: String.prototype.italics() +slug: Web/JavaScript/Referencia/Objetos_globales/String/italics +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/italics +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

{{deprecated_header}}

+ +

Resumen

+ +

Provoca que una cadena ponga en cursiva, como si estuviese dentro de una etiqueta {{HTMLElement("i")}}.

+ +

Sintaxis

+ +
cadena.italics()
+ +

Descripción

+ +

Usa el método italics para formatear y mostrar una cadena en un documento.

+ +

Ejemplos

+ +

Ejemplo: Usando métodos de italics()

+ +

El siguiente ejemplo usa métodos de string para cambiar el formateado de una cadena:

+ +
var cadenaMundo="¡Hola mundo!";
+
+console.log(cadenaMundo.blink());
+console.log(cadenaMundo.bold());
+console.log(cadenaMundo.italics());
+console.log(cadenaMundo.strike());
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/lastindexof/index.html b/files/es/web/javascript/reference/global_objects/string/lastindexof/index.html new file mode 100644 index 0000000000..ffde251071 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/lastindexof/index.html @@ -0,0 +1,79 @@ +--- +title: String.prototype.lastIndexOf() +slug: Web/JavaScript/Referencia/Objetos_globales/String/lastIndexOf +tags: + - Cadena + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/String/lastIndexOf +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El  método lastIndexOf() devuelve la posicion (indice) en la que se encuentra el valorBusqueda, dentro del objeto String que realiza la llamada, de la última ocurrencia del valor especificado; o -1 si no se halla. La búsqueda se realiza empezando por el final de la cadena que realiza la llamada, empezando en indiceDesde.

+ +

Sintaxis

+ +
cadena.lastIndexOf(valorBusqueda[, indiceDesde])
+ +

Parámetros

+ +
+
valorBusqueda
+
Una cadena que representa el valor que se desea buscar.
+
+ +
+
indiceDesde
+
La localización dentro de la cadena que realiza la llamada desde donde comenzará la búsqueda. Puede ser cualquier entero entre 0 y la longitud de la cadena. El valor predeterminado es la longitud de la cadena.
+
+ +

Descripción

+ +

Los caracteres de una cadena se indexan de izquierda a derecha. El índice del primer carácter es 0, y el índice del último carácter es nombreCadena.length - 1.

+ +
"canal".lastIndexOf("a")   // returns 3
+"canal".lastIndexOf("a",2) // returns 1
+"canal".lastIndexOf("a",0) // returns -1
+"canal".lastIndexOf("x")   // returns -1
+
+ +

El método lastIndexOf es sensible a mayúsculas. Por ejemplo, la siguiente expresión devuelve -1:

+ +
"Ballena Azul, Ballena Asesina".lastIndexOf("azul")
+
+ +

Ejemplos

+ +

Ejemplo: Usando indexOf y lastIndexOf

+ +

The following example uses indexOf and lastIndexOf to locate values in the string "Brave new world".

+ +
var anyString="Brave new world"
+
+// Displays 8
+document.write("<P>The index of the first w from the beginning is " +
+   anyString.indexOf("w"))
+// Displays 10
+document.write("<P>The index of the first w from the end is " +
+   anyString.lastIndexOf("w"))
+// Displays 6
+document.write("<P>The index of 'new' from the beginning is " +
+   anyString.indexOf("new"))
+// Displays 6
+document.write("<P>The index of 'new' from the end is " +
+   anyString.lastIndexOf("new"))
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/length/index.html b/files/es/web/javascript/reference/global_objects/string/length/index.html new file mode 100644 index 0000000000..9401b8898a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/length/index.html @@ -0,0 +1,94 @@ +--- +title: String.length +slug: Web/JavaScript/Referencia/Objetos_globales/String/length +tags: + - JavaScript + - Propiedad + - Prototipo + - Referencia + - String + - length +translation_of: Web/JavaScript/Reference/Global_Objects/String/length +--- +
{{JSRef}}
+ +

La propiedad length de un objeto {{jsxref("String")}} representa la longitud de una cadena, en unidades de código UTF-16.

+ +

Sintaxis

+ +
str.length
+ +

Descripción

+ +

Esta propiedad devuelve el número de caracteres de una cadena. {{interwiki("wikipedia", "UTF-16")}}, el formato usado por JavaScript, usa 16-bit para representar los caracteres más comunes, pero necesita usar dos caracteres para otros menos usados, así que es posible que el valor devuelto por length no corresponda al número de caracteres de la cadena.

+ +

ECMASCript 2016 (ed. 7) estableció una longitud máxima de 2^53 - 1 elementos. Anteriormente, ninguna longitud máxima era especificada. 

+ +

Para una cadena vacía, length es 0.

+ +

La propiedad static String.length devuelve 1.

+ +

Ejemplos

+ +

Uso Básico

+ +
var x = 'Mozilla';
+var empty = '';
+
+console.log('Mozilla is ' + x.length + ' code units long');
+/* "Mozilla is 7 code units long" */
+
+console.log('The empty string has a length of ' + empty.length);
+/* "The empty string has a length of 0" */
+ +

Asignando a length

+ +
var myString = "bluebells";
+
+// Attempting to assign a value to a string's .length property has no observable effect.
+myString.length = 4;
+console.log(myString);
+/* "bluebells" */
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
ECMAScript 1st Edition.EstándarPrimera definicíon. Implementado en JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.5.5.1', 'String.prototype.length')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-properties-of-string-instances-length', 'String.prototype.length')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-properties-of-string-instances-length', 'String.prototype.length')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad con navegadores

+ +

{{Compat("javascript.builtins.String.length")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/link/index.html b/files/es/web/javascript/reference/global_objects/string/link/index.html new file mode 100644 index 0000000000..021c659f34 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/link/index.html @@ -0,0 +1,56 @@ +--- +title: String.prototype.link() +slug: Web/JavaScript/Referencia/Objetos_globales/String/link +tags: + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/link +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

Crea un enlace de hipertexto HTML, {{HTMLElement("a")}}, que solicita otra URL.

+ +

Sintaxis

+ +
cadena.link(atributoHref)
+ +

Parámetros

+ +
+
atributoHref
+
Cualquier cadena que especifique el atributo {{htmlattrxref("href", "a")}} de la etiqueta {{HTMLElement("a")}}; debería ser una URL válida (relativa o absoluta).
+
+ +

Descripción

+ +

Usa el método link para crear un atajo HTML para un enlace de hipertexto. La cadena devuelta puede ser añadida al documento vía {{domxref("element.innerHTML")}}.

+ +

Los enlaces creados con el método link serán elementos del array links del objeto document. Vea {{domxref("document.links")}}.

+ +

Ejemplos

+ + + +

El siguiente ejemplo muestra la palabra "Netscape" como un enlace de hipertexto que devuelve al usuario a la página inicial de Netscape:

+ +
var textoActivo="MDN"
+var URL="https://developer.mozilla.org/"
+
+console.log("Haga click para volver a " + textoActivo.link(URL))
+
+ +

Este ejemplo produce el mismo resultado que el siguiente código HTML:

+ +
Haga click para volver a <a href="http://developer.mozilla.org/">MDN</a>
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/localecompare/index.html b/files/es/web/javascript/reference/global_objects/string/localecompare/index.html new file mode 100644 index 0000000000..2bda296c61 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/localecompare/index.html @@ -0,0 +1,159 @@ +--- +title: String.prototype.localeCompare() +slug: Web/JavaScript/Referencia/Objetos_globales/String/localeCompare +translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare +--- +
{{JSRef}}
+ +

El método localeCompare() devuelve un número que indica si la cadena de caracteres actual es anterior, posterior o igual a la cadena pasada como parámetro, en orden lexicográfico.

+ +

Los nuevos argumentos locales y options permiten a las aplicaciones especificar el idioma y el orden de clasificación que debe usarse y personalizar el comportamiento de la función. En las implementaciones más antiguas, que ignoran los argumentos locales y options, la configuración locale y el orden de clasificación utilizados dependen enteramente de la implementación

+ +

Sintaxis

+ +
referenceStr.localeCompare(compareString[, locales[, options]])
+ +

Parámetros

+ +

Comprueba la sección Compatibilidad con el navegador para ver que navegadores soportan los argumentos locales y options, and the Checking for support for locales and options arguments for feature detection.

+ +
+
compareString
+
La cadena con la que queremos comparar la cadena actual de caracteres.
+
+ +
{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator', 'Parameters')}}
+ +

Valor devuelto

+ +

Un número negativo si la cadena de referencia ocurre antes de la cadena de comparación; positivo si la cadena de referencia ocurre después de la cadena de comparación; 0 si son equivalentes.

+ +

Descripción

+ +

Returns an integer indicating whether the referenceStr comes before, after or is equivalent to the compareStr.

+ + + +

NO CONFIAR en que los valores devueltos sean siempre -1 o 1. Los resultados de enteros negativos y positivos varían entre los navegadores (así como entre diferentes versiones de un mismo navegador) porque la especificación W3C solo exige valores negativos y positivos. Algunos navegadores pueden devolver -2 o 2 o incluso algún otro valor negativo o positivo.

+ +

Ejemplos

+ +

Uso de localeCompare()

+ +
// La letra "a" es anterior a la "c" produciendo un valor negativo
+'a'.localeCompare('c'); // -2 o -1 (u otro valor negativo)
+
+// Alfabeticamente la palabra "check" viene después de "against" produciendo un valor ppositivo
+'check'.localeCompare('against'); // 2 o 1 (u otro valor positivo)
+
+// "a" y "a" son equivalentes produciendo un valor neutro de 0
+'a'.localeCompare('a'); // 0
+
+ +

Ordenar un array

+ +

localeCompare enables a case-insensitive sort of an array.

+ +
var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
+items.sort((a, b) => a.localeCompare(b)); // ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']
+
+ +

Verificar si el navegador soporta argumentos extendidos

+ +

The locales and options arguments are not supported in all browsers yet. To check whether an implementation supports them, use the "i" argument (a requirement that illegal language tags are rejected) and look for a {{jsxref("RangeError")}} exception:

+ +
function localeCompareSupportsLocales() {
+  try {
+    'foo'.localeCompare('bar', 'i');
+  } catch (e) {
+    return e.name === 'RangeError';
+  }
+  return false;
+}
+
+ +

Uso de locales

+ +

The results provided by localeCompare() vary between languages. In order to get the sort order of the language used in the user interface of your application, make sure to specify that language (and possibly some fallback languages) using the locales argument:

+ +
console.log('ä'.localeCompare('z', 'de')); // a negative value: in German, ä sorts before z
+console.log('ä'.localeCompare('z', 'sv')); // a positive value: in Swedish, ä sorts after z
+
+ +

Uso de options

+ +

The results provided by localeCompare() can be customized using the options argument:

+ +
// in German, ä has a as the base letter
+console.log('ä'.localeCompare('a', 'de', { sensitivity: 'base' })); // 0
+
+// in Swedish, ä and a are separate base letters
+console.log('ä'.localeCompare('a', 'sv', { sensitivity: 'base' })); // a positive value
+
+ +

Performance

+ +

When comparing large numbers of strings, such as in sorting large arrays, it is better to create an {{jsxref("Global_Objects/Collator", "Intl.Collator")}} object and use the function provided by its {{jsxref("Collator.prototype.compare", "compare")}} property.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial. Implementado en JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.9', 'String.prototype.localeCompare')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int 1.0', '#sec-13.1.1', 'String.prototype.localeCompare')}}{{Spec2('ES Int 1.0')}}Definiciones de los parámetros locale y option.
{{SpecName('ES Int 2.0', '#sec-13.1.1', 'String.prototype.localeCompare')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-String.prototype.localeCompare', 'String.prototype.localeCompare')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilidad con el navegador

+ + + +

{{Compat("javascript.builtins.String.localeCompare")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/match/index.html b/files/es/web/javascript/reference/global_objects/string/match/index.html new file mode 100644 index 0000000000..6403dbaf06 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/match/index.html @@ -0,0 +1,78 @@ +--- +title: String.prototype.match() +slug: Web/JavaScript/Referencia/Objetos_globales/String/match +tags: + - JavaScript + - Method + - Prototype + - RegExp + - Regular Expressions + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/match +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El método match() se usa para obtener todas las ocurrencias de una expresión regular dentro de una cadena.

+ +

Sintaxis

+ +
cadena.match(regexp)
+ +

Parámetros

+ +
+
regexp
+
Un objeto expresión regular. Si se pasa un objeto obj que no es expresión regular, se convierte implícitamente a RegExp usando new RegExp(obj).
+
+ +

Descripción

+ +

Si la expresión regular no incluye el flag g, devuelve el mismo resultado que {{jsxref("Regexp.exec()")}}.

+ +

Si la expresión regular incluye el flag g, el método devuelve un {{jsxref("Array")}} que contiene todos los emparejamientos.

+ +

Notas

+ + + +

Ejemplos

+ +

Ejemplo: Usando match

+ +

En el siguiente ejemplo, se usa match para hallar "Capítulo" seguido de 1 o más caracteres numéricos seguidos de un punto decimal y caracteres numéricos cero o más veces. La expresión regular incluye el flag i por lo que las mayúsculas serán ignoradas.

+ +
cadena = "Para más información, vea Capítulo 3.4.5.1";
+expresion = /(capítulo \d+(\.\d)*)/i;
+hallado = cadena.match(expresion);
+console.log(hallado);
+
+ +

Esto devuelve un array que contiene Capítulo 3.4.5.1,Capítulo 3.4.5.1,.1

+ +

"Capítulo 3.4.5.1" es el primer emparejamiento y el primer valor referenciado por (Chapter \d+(\.\d)*).

+ +

".1" es el segundo valor referenciado por (\.\d).

+ +

Ejemplo: Usando los flags global e ignorar mayúsculas con match

+ +

El siguiente ejemplo demuestra el uso de los flags global e ignorar mayúsculas con match. Todas las letras de A hasta E y de a hasta e son devueltas, en su propio elemento dentro del array.

+ +
var cadena = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+var expresion = /[A-E]/gi;
+var array_emparejamientos = cadena.match(expresion);
+console.log(array_emparejamientos);
+
+ +

array_emparejamientos será {{ mediawiki.external('\'A\', \'B\', \'C\', \'D\', \'E\', \'a\', \'b\', \'c\', \'d\', \'e\'') }}

+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/matchall/index.html b/files/es/web/javascript/reference/global_objects/string/matchall/index.html new file mode 100644 index 0000000000..a536720dbd --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/matchall/index.html @@ -0,0 +1,134 @@ +--- +title: String.prototype.matchAll() +slug: Web/JavaScript/Referencia/Objetos_globales/String/matchAll +tags: + - Cadena + - Expresiones Regulares + - JavaScript + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/String/matchAll +--- +
{{JSRef}}
+ +

El método matchAll() retorna un iterador de todos los resultados de ocurrencia en una cadena de texto contra una expresión regular, incluyendo grupos de captura.

+ +
{{EmbedInteractiveExample("pages/js/string-matchall.html")}}
+ + + +

Sintaxis

+ +
cadena.matchAll(expresionRegular)
+ +

Parámetros

+ +
+
expresionRegular
+
Un objeto expresión regular. Si se pasa un objeto no-RegExp obj, este es implícitamente convertido a {{jsxref("RegExp")}} vía new RegExp(obj).
+
+ +

Valor devuelto

+ +

Un iterador (el cual no es reiniciable).

+ +

Ejemplo

+ +

Regexp.exec() y matchAll()

+ +

Antes de la adición de  matchAll a JavaScript, fue posible hacer llamados a regexp.exec (y usar expresiones regulares con la bandera /g) en un ciclo para obtener las ocurrencias:

+ +
const regexp = RegExp('foo[a-z]*','g');
+const cadena = 'mesa football, foosball';
+let ocurrencia;
+
+while ((ocurrencia = regexp.exec(cadena)) !== null) {
+  console.log(`Encontrado ${ocurrencia[0]} inicio=${ocurrencia.index} final=${regexp.lastIndex}.`);
+  // salida esperada: "Encontrado football inicio=5 final=13."
+  // salida esperada: "Encontrado foosball inicio=15 final=23."
+}
+ +

Con matchAll disponible, puedes evitar el ciclo while y exec con /g. Por el contrario, usando matchAll, obtienes un iterador con el cual puedes usar con constructores más convenientes  for...of, array spread, o {{jsxref("Array.from()")}}:

+ +
const regexp = RegExp('foo[a-z]*','g');
+const cadena = 'mesa football, foosball';
+const ocurrencias = cadena.matchAll(regexp);
+
+for (const ocurrencia of ocurrencias) {
+  console.log(`Encontrado ${ocurrencia[0]} inicio=${ocurrencia.index} final=${ocurrencia.index + ocurrencia[0].length}.`);
+}
+// salida esperada: "Encontrado football start=5 end=13."
+// salida esperada: "Encontrado foosball start=15 end=23."
+
+// el iterador ocurrencias es agotado después de la iteración for..of
+// Llama matchAll de nuevo para crear un nuevo iterador
+Array.from(cadena.matchAll(regexp), m => m[0]);
+// Array [ "football", "foosball" ]
+ +

matchAll solo devuelve la primer ocurrencia si la bandera /g está ausente.

+ +
const regexp = RegExp('[a-c]','');
+const cadena = 'abc';
+Array.from(cadena.matchAll(regexp), m => m[0]);
+// Array [ "a" ]
+
+ +

matchAll internamente hace un clon de la expresión regular, entonces a diferencia de regexp.exec,  lastIndex no cambia a medida que la cadena es escaneada.

+ +
const regexp = RegExp('[a-c]','g');
+regexp.lastIndex = 1;
+const cadena = 'abc';
+Array.from(cadena.matchAll(regexp), m => `${regexp.lastIndex} ${m[0]}`);
+// Array [ "1 b", "1 c" ]
+ +

Mejor acceso para capturar grupos

+ +

Otra buena razón para matchAll es el mejorado acceso a los grupos de captura. Los grupos de captura son ignorados cuando se usa match() con la bandera global /g:

+ +
var regexp = /t(e)(st(\d?))/g;
+var cadena = 'test1test2';
+
+cadena.match(regexp);
+// Array ['test1', 'test2']
+ +

Con matchAll puedes acceder a ellos:

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

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ESDraft', '#sec-string.prototype.matchall', 'String.prototype.matchAll')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad de navegadores

+ + + +

{{Compat("javascript.builtins.String.matchAll")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/normalize/index.html b/files/es/web/javascript/reference/global_objects/string/normalize/index.html new file mode 100644 index 0000000000..2794644f1c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/normalize/index.html @@ -0,0 +1,126 @@ +--- +title: String.prototype.normalize() +slug: Web/JavaScript/Referencia/Objetos_globales/String/normalize +tags: + - Cadena + - ECMAScript 2015 + - JavaScript + - Prototipo + - Referencia + - String + - Unicode + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/String/normalize +--- +
{{JSRef}}
+ +

El método normalize() retorna la Forma de Normalización Unicode de la cadena dada (si el valor no es una cadena, primero será convertido a ese tipo).

+ +

Sintaxis

+ +
str.normalize([form])
+ +

Parámetros

+ +
+
form
+
Uno de"NFC", "NFD", "NFKC", o "NFKD", especificando la Forma de Normalización Unicode. Si es omitida o {{jsxref("undefined")}}, se utiliza "NFC". +
    +
  • NFC — Forma de Normalización de Composición Canónica.
  • +
  • NFD — Forma de Normalización de Descomposición Canónica.
  • +
  • NFKC — Forma de Normalización de Composición de Compatibilidad.
  • +
  • NFKD — Forma de Normalización de Descomposición de Compatibilidad.
  • +
+
+
+ +

Valor de retorno

+ +

Una cadena que contiene la Forma de Normalización Unicode de la cadena dada.

+ +

Errores lanzados

+ +
+
{{jsxref("RangeError")}}
+
Un error {{jsxref("RangeError")}} es lanzado si form no es uno de los valores especificados arriba.
+
+ +

Descripción

+ +

El método normalize() retorna la Forma de Normalización Unicode de una cadena. No afecta el valor de la cadena en sí misma.

+ +

Ejemplos

+ +

Uso de normalize()

+ +
// Cadena inicial
+
+// U+1E9B: LETRA S LATINA MINÚSCULA CON PUNTO ARRIBA
+// U+0323: COMBINACIÓN CON PUNTO ABAJO
+var str = '\u1E9B\u0323';
+
+
+// Forma compuesta canónicamente (NFC)
+
+// U+1E9B: LETRA S LATINA MINÚSCULA CON PUNTO ARRIBA
+// U+0323: COMBINACIÓN CON PUNTO ABAJO
+str.normalize('NFC'); // '\u1E9B\u0323'
+str.normalize();      // lo mismo que arriba
+
+
+// Forma canónicamente descompuesta (NFD)
+
+// U+017F: LETRA S LATINA MINÚSCULA
+// U+0323: COMBINACIÓN CON PUNTO ABAJO
+// U+0307: COMBINACIÓN CON PUNTO ARRIBA
+str.normalize('NFD'); // '\u017F\u0323\u0307'
+
+
+// Compuesta con compatibilidad (NFKC)
+
+// U+1E69: LETRA S LATINA MINÚSCULA CON PUNTO ARRIBA Y ABAJO
+str.normalize('NFKC'); // '\u1E69'
+
+
+// Descompuesta con compatibilidad (NFKD)
+
+// U+0073: LETRA S LATINA MINÚSCULA
+// U+0323: COMBINACIÓN CON PUNTO ABAJO
+// U+0307: COMBINACIÓN CON PUNTO ARRIBA
+str.normalize('NFKD'); // '\u0073\u0323\u0307'
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-string.prototype.normalize', 'String.prototype.normalize')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-string.prototype.normalize', 'String.prototype.normalize')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de Navegadores

+ + + +

{{Compat("javascript.builtins.String.normalize")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/padstart/index.html b/files/es/web/javascript/reference/global_objects/string/padstart/index.html new file mode 100644 index 0000000000..57abbd8f5c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/padstart/index.html @@ -0,0 +1,100 @@ +--- +title: String.prototype.padStart() +slug: Web/JavaScript/Referencia/Objetos_globales/String/padStart +tags: + - Cadena + - Experimental + - JavaScript + - Método(2) + - Referencia +translation_of: Web/JavaScript/Reference/Global_Objects/String/padStart +--- +
{{JSRef}}{{SeeCompatTable}}
+ +

El método padStart() rellena la cadena actual con una cadena dada (repetida eventualmente) de modo que la cadena resultante alcance una longitud dada. El relleno es aplicado desde el inicio (izquierda) de la cadena actual.

+ +

Sintaxis

+ +
str.padStart(targetLength [, padString])
+ +

Parámetros

+ +
+
targetLength
+
La longitud de la cadena resultante una vez la cadena actual haya sido rellenada. Si este parámetro es más pequeño que la longitud de la cadena actual, la cadena actual será devuelta sin modificar.
+
padString {{optional_inline}}
+
La cadena para rellenar la cadena actual. Si esta cadena es muy larga, será recortada y la parte más a la izquierda será aplicada. El valor por defecto para este parámetro es " " (U+0020).
+
+ +

Valor devuelto

+ +

Un {{jsxref("String")}} de la longitud específicada con la cadena de relleno aplicada desde el inicio.

+ +

Ejemplos

+ +
'abc'.padStart(10);         // "       abc"
+'abc'.padStart(10, "foo");  // "foofoofabc"
+'abc'.padStart(6,"123465"); // "123abc"
+
+ +

Especificaciones

+ +

Este método aún no ha alcanzado el estándar ECMAScript. Actualmente es una propuesta para ECMAScript.

+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome("52")}} {{CompatGeckoDesktop(48)}}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile(48)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/raw/index.html b/files/es/web/javascript/reference/global_objects/string/raw/index.html new file mode 100644 index 0000000000..3c8f3c1d55 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/raw/index.html @@ -0,0 +1,112 @@ +--- +title: String.raw() +slug: Web/JavaScript/Referencia/Objetos_globales/String/raw +translation_of: Web/JavaScript/Reference/Global_Objects/String/raw +--- +
{{JSRef}}
+ +

El método estatico String.raw()  es una función de  plantilla de literales, similar al prefijo r en Python o al prefijo @ en C# para strings literales (con ciertas diferencias: ver la explicación en este problema). Se utiliza para obtener un string crudo a partir de plantillas de string (es decir, el original, texto no interpretado).

+ +

Sintaxis

+ +
String.raw(callSite, ...substitutions)
+
+String.raw`templateString`
+
+ +

Parametros

+ +
+
callSite
+
Plantilla bien estructurada, similar a { raw: ['foo', 'bar', 'baz'] }.
+
...substitutions
+
Contiene valores de sustitución.
+
templateString
+
[opcional] Una plantilla string, con sustituciones (${...}).
+
+ +

Valor de regreso

+ +

La forma cruda del string de una plantilla string proporcionada.

+ +

Excepciones

+ +
+
{{jsxref("TypeError")}}
+
Un {{jsxref("TypeError")}} es arrojado si el primer argumento no es un objeto bien estructurado.
+
+ +

Descripción

+ +

En la mayoría de los casos, String.raw() es usado con plantillas string. La primera sintaxis mencionada arriba es raramente usada,  porque el motor de JavaScript hará la llamada por ti con los argumentos apropiados, al igual que otras funciones de etiqueta.

+ +

String.raw() es la unica función de etiqueta incorporada en las plantillas string; trabaja igual que la función de la plantilla por defecto y ejecuta la concatenación. Incluso puedes reimplementarlo con código normal de JavaScript.

+ +

Ejemplos

+ +

Usando 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 `t${0}e${1}s${2}t` you can do:
+String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t'
+// Note that 'test', a string, is an array-like object
+// The following is equivalent to
+// `foo${2 + 3}bar${'Java' + 'Script'}baz`
+String.raw({
+  raw: ['foo', 'bar', 'baz']
+}, 2 + 3, 'Java' + 'Script'); // 'foo5barJavaScriptbaz'
+
+
+ +

Especificaciónes

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-string.raw', 'String.raw')}}{{Spec2('ES2015')}}Definicion inicial.
{{SpecName('ESDraft', '#sec-string.raw', 'String.raw')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegador

+ + + +

{{Compat("javascript.builtins.String.raw")}}

+ +

Tambien ver

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/repeat/index.html b/files/es/web/javascript/reference/global_objects/string/repeat/index.html new file mode 100644 index 0000000000..a449bdfb27 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/repeat/index.html @@ -0,0 +1,128 @@ +--- +title: String.prototype.repeat() +slug: Web/JavaScript/Referencia/Objetos_globales/String/repeat +tags: + - ECMAScript2015 + - JavaScript + - Prototype + - Referencia + - String + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/String/repeat +--- +
{{JSRef}}
+ +

El método repeat() construye y devuelve una nueva cadena que contiene el número especificado de copias de la cadena en la cual fue llamada, concatenados.

+ +

Sintáxis

+ +
str.repeat(count)
+ +

Parámetros

+ +
+
count
+
Un entero entre 0 y +∞: [0, +∞), indicando el número de veces a repetir la cadena en la nueva cadenada creada que será devuelta.
+
+ +

Valor devuelto

+ +

Un nuevo string que contiene el número especificado de copias del string original.

+ +

Excepciones

+ + + +
+
+ +

Ejemplos

+ +
'abc'.repeat(-1);   // RangeError
+'abc'.repeat(0);    // ''
+'abc'.repeat(1);    // 'abc'
+'abc'.repeat(2);    // 'abcabc'
+'abc'.repeat(3.5);  // 'abcabcabc' (count will be converted to integer)
+'abc'.repeat(1/0);  // RangeError
+
+({ toString: () => 'abc', repeat: String.prototype.repeat }).repeat(2);
+// 'abcabc' (repeat() is a generic method)
+
+ +

Polyfill

+ +

Este método ha sido añadido a la especificación ECMAScript 6 y tal vez aún no se encuentre disponible en todas las implementaciones de JavaScript. Sin embargo, usted puede establecer String.prototype.repeat() con el siguiente fragmento de código:

+ +
if (!String.prototype.repeat) {
+  String.prototype.repeat = function(count) {
+    'use strict';
+    if (this == null) {
+      throw new TypeError('can\'t convert ' + this + ' to object');
+    }
+    var str = '' + this;
+    count = +count;
+    if (count != count) {
+      count = 0;
+    }
+    if (count < 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 rpt = '';
+    for (;;) {
+      if ((count & 1) == 1) {
+        rpt += str;
+      }
+      count >>>= 1;
+      if (count == 0) {
+        break;
+      }
+      str += str;
+    }
+    return rpt;
+  }
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES6', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en Navegadores

+ +
{{Compat("javascript.builtins.String.repeat")}}
+ +
 
diff --git a/files/es/web/javascript/reference/global_objects/string/replace/index.html b/files/es/web/javascript/reference/global_objects/string/replace/index.html new file mode 100644 index 0000000000..680393ece1 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/replace/index.html @@ -0,0 +1,202 @@ +--- +title: String.prototype.replace() +slug: Web/JavaScript/Referencia/Objetos_globales/String/replace +tags: + - JavaScript + - Method + - Prototype + - Regular Expressions + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/replace +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El método replace() devuelve una nueva cadena con algunas o todas las coincidencias de un patrón, siendo cada una de estas coincidencias reemplazadas por remplazo. El patrón puede ser una cadena o una {{jsxref("RegExp")}}, y el reemplazo puede ser una cadena o una función que será llamada para cada coincidencia. Si el patrón es una cadena, sólo la primera coincidencia será reemplazada.

+ +

La cadena original permanecerá inalterada.

+ +
{{EmbedInteractiveExample("pages/js/string-replace.html")}}
+ +

Sintaxis

+ +
cadena.replace(regexp|substr, newSubStr|function[, {{ Non-standard_inline() }} flags]);
+
+ +

Parámetros

+ +
+
expresionregular
+
Un objeto {{jsxref("RegExp")}} o literal. Las coincidencias son reemplazadas por ewSubSt o el valor devuelto por la función especificada.
+
+ +
+
subcadena
+
Un objeto {{jsxref("String")}} que será reemplazado por nuevaSubcadena.
+
+ +
+
nuevaSubcadena
+
El objeto {{jsxref("String")}} que reemplaza la subcadena que recibida desde el primer parámetro.
+
+ +
+
funcion
+
Una función que será invocada para crear la nueva subcadena (para ponerla en lugar de la subcadena recibida por el primer parámetro).
+
+ +
+
flags {{ non-standard_inline() }}
+
Un objeto {{jsxref("String")}} que contiene cualquier combinación de flags de la clase RegExp: g - emparejamiento global, i - ignorar mayúsculas, m - emparejar multiples líneas. Este parámetro se usa sólo si el primer parámetro es una cadena.
+
+ +

Descripción

+ +

Este método no cambia el objeto String sobre el que se realiza la llamada. Simplemente devuelve una nueva cadena.

+ +

Para realizar una búsqueda global y reemplazarla, o se incluye el flag g en la expresión regular o si el primer parámetro es una cadena, se incluye g en el parámetro flags.

+ +

Especificando una cadena como un parámetro

+ +

La cadena de reemplazo puede incluir los siguientes patrones de reemplazo especiales:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PatrónInserta
$$Inserta una "$".
$&Inserta la subcadena emparejada.
$`Inserta la sección de cadena que precede a la subcadena emparejada.
$'Inserta la porción de subcadena que sigue a la subcadena emparejada.
$n o $nn Donde n o nn son dígitos decimales positivos menores a 100, inserta la subcadena emparejada de orden n del paréntesis, proporcionado por el primer argumento del objeto RegExp.
+ +

Especificando una función con un parámetro

+ +

Cuando se especifica una función en el segundo parámetro, la función es invocada después de que el emparejamiento se haya realizado. (El uso de una función de este modo se llama expresión lambda.)

+ +

En la función, puedes generar dinámicamente la cadena que reemplaza la subcadena emparejada. El resultado de la llamada de la función se usa como valor de reemplazo.

+ +

The nested function can use the matched substrings to determine the new string (newSubStr) that replaces the found substring. You get the matched substrings through the parameters of your function. The first parameter of your function holds the complete matched substring. If the first argument was a RegExp object, then the followingn parameters can be used for parenthetical matches, remembered submatch strings, wheren is the number of submatch strings in the regular expression. Finally, the last two parameters are the offset within the string where the match occurred and the string itself. For example, the following replace method returns XXzzzz - XX , zzzz.

+ +
function replacer(str, p1, p2, offset, s)
+{
+  return str + " - " + p1 + " , " + p2;
+}
+var newString = "XXzzzz".replace(/(X*)(z*)/, replacer);
+console.log(newString); // XXzzzz - XX , zzzz
+
+ +

Ejemplos

+ +

Ejemplo: Usando global e ignore con replace

+ +

En el siguiente ejemplo, la expresión regular incluye las banderas "global" e "ignore case", las cuales permiten al método replace reemplazar cada aparición de la cadena 'apples' por la cadena 'oranges'.

+ +
var re = /apples/gi;
+var str = "Apples are round, and apples are juicy.";
+var newstr = str.replace(re, "oranges");
+print(newstr);
+
+ +

In this version, a string is used as the first parameter and the global and ignore case flags are specified in the flags parameter.

+ +
var str = "Apples are round, and apples are juicy.";
+var newstr = str.replace("apples", "oranges", "gi");
+print(newstr);
+
+ +

Both of these examples print "oranges are round, and oranges are juicy."

+ +

Ejemplo: Definiendo la expresión regular en replace

+ +

En el siguiente ejemplo, se define la expresión regular en replace e incluye el flag de ignorar mayúsculas.

+ +
var cadena = "Twas the night before Xmas...";
+var nuevaCadena = cadena.replace(/xmas/i, "Christmas");
+print(nuevaCadena);
+
+ +

Esto muestra "Twas the night before Christmas..."

+ +

Ejemplo: Conectando palabras en una cadena

+ +

El siguiente código conecta las palabras dentro de la cadena. Para reemplazar el texto, el código usa $1 y $2 como patrones de reemplazo.

+ +
var expresion = /(\w+)\s(\w+)/;
+var cadena = "John Smith";
+var nuevaCadena = cadena.replace(expresion, "$2, $1");
+print(nuevaCadena);
+
+ +

Esto muestra "Smith, John".

+ +

Ejemplo: Using an inline function that modifies the matched characters

+ +

In this example, all occurrences of capital letters in the string are converted to lower case, and a hyphen is inserted just before the match location. The important thing here is that additional operations are needed on the matched item before it is given back as a replacement.

+ +

The replacement function accepts the matched snippet as its parameter, and uses it to transform the case and concatenate the hyphen before returning.

+ +
function styleHyphenFormat(propertyName)
+{
+  function upperToHyphenLower(match)
+  {
+    return '-' + match.toLowerCase();
+  }
+  return propertyName.replace(/[A-Z]/, upperToHyphenLower);
+}
+
+ +

Given styleHyphenFormat('borderTop'), this returns 'border-top'.

+ +

Because we want to further transform theresult of the match before the final substitution is made, we must use a function. This forces the evaluation of the match prior to the toLowerCase() method. If we had tried to do this using the match without a function, the toLowerCase() would have no effect.

+ +
var newString = propertyName.replace(/[A-Z]/, '-' + '$&'.toLowerCase());  // won't work
+
+ +

This is because '$&'.toLowerCase() would be evaluated first as a string literal (resulting in the same '$&') before using the characters as a pattern.

+ +

Ejemplo: Reemplazando grados Fahrenheit con su equivalente Celsius

+ +

El siguiente ejemplo reemplaza los grados Fahrenheit con su enquivalente en grados Celsius. Los grados Fahrenheit deberían ser un número acabado en F. La función devuelve el número Celsius acabado en C. Por ejemplo, si el número de entrada es 212F, la función devuelve 100C. Si el número es 0F, la función devuelve -17.77777777777778C.

+ +

La expresión regular test revisa si para un número termina en F. El número de grados Fahrenheit es accesible a la función a través de su segundo parámetro, p1. La función establece el número Celsius basado en los grados Fahrenheit pasados en una cadena a la función f2c. Entonces f2c devuelve el número Celsius. Esta función aproxima al flag de Perl s///e.

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

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/search/index.html b/files/es/web/javascript/reference/global_objects/string/search/index.html new file mode 100644 index 0000000000..23e37234d1 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/search/index.html @@ -0,0 +1,153 @@ +--- +title: String.prototype.search() +slug: Web/JavaScript/Referencia/Objetos_globales/String/search +tags: + - JavaScript + - Method + - Prototype + - Reference + - Regular Expressions + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/search +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El método search() ejecuta una búsqueda que encaje entre una expresión regular y el objeto String desde el que se llama.

+ +

Sintaxis

+ +
str.search(expresionregular)
+ +

Parámetros

+ +
+
regexp
+
Un objeto expresión regular. Si se pasa un objeto obj que no sea una expresión regular, se convierte implicitamente en una expresión regualar usando new RegExp(obj).
+
+ +

Valor devuelto

+ +

El índice de la primera coincidencia entre la expresión regular y la cadena de texto proporcionada, si no se encuentra devuelve -1.

+ +

Descripción

+ +

Cuando se desee saber en qué casos un patrón se encuentra en una cadena de texto utiliza search() (si sólo deseas saber si existe, utiliza el método {{jsxref("RegExp.prototype.test()", "test()")}} del prototipo de RegExp); para más información (pero de ejecución más lenta) utiliza {{jsxref("String.prototype.match()", "match()")}} (similar al método {{jsxref("RegExp.prototype.exec()", "exec()")}} de las expresiones regulares).

+ +

Ejemplos

+ + + +

El siguiente ejemplo imprime un mensaje dependiendo de cuál sea el resultado de la evaluación.

+ +
function testinput(re, str) {
+  var midstring;
+  if (str.search(re) != -1) {
+    midstring = ' contains ';
+  } else {
+    midstring = ' does not contain ';
+  }
+  console.log(str + midstring + re);
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificacionesEstadoComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial. Implementado en JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.12', 'String.prototype.search')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.search', 'String.prototype.search')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.search', 'String.prototype.search')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Notas específicas de Gecko

+ + + +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/slice/index.html b/files/es/web/javascript/reference/global_objects/string/slice/index.html new file mode 100644 index 0000000000..cbfe5a716b --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/slice/index.html @@ -0,0 +1,161 @@ +--- +title: String.prototype.slice() +slug: Web/JavaScript/Referencia/Objetos_globales/String/slice +tags: + - Cadena + - JavaScript + - Método(2) + - Prototipo + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/slice +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El método slice() extrae una sección de una cadena y devuelve una cadena nueva.

+ +

Sintaxis

+ +
cadena.slice(inicioTrozo[, finTrozo])
+
+ +

Parameters

+ +
+
inicioTrozo
+
El índice basado en cero en el cual empieza la extracción.  Si es negativo, se trata como longCadena + inicioTrozo donde longCadena es la longitud de la cadena (por ejemplo, si inicioTrozo es -3 se trata como longCadena - 3)
+
+ +
+
finTrozo
+
Opcional. El índice basado en cero en el que termina la extracción. Si se omite, slice extrae hasta el final de la cadena.  Si es negativo, se trata como longCadena + finTrozo donde longCadena es la longitud de la cadena (por ejemplo, si finTrozo es -3 se trata como longCadena - 3).
+
+ +

Valor retornado

+ +

Una nueva cadena que contiene la sección de la cadena.

+ +

Descripción

+ +

slice extrae el texto de una cadena y devuelve una nueva cadena. Los cambios en el texto de una cadena no afectan a la otra cadena.

+ +

slice extrae hasta, pero sin incluir finalTrozo. string.slice(1,4) extrae del segundo carácter hasta el cuarto carácter (caracteres con índice 1, 2 y 3).

+ +

Si se usa un índice negativo, finalTrozo indica el punto desde el final de la cadena.string.slice(2, -1) extrae desde tercer carácter hasta el último carácter de la cadena.

+ +

Ejemplos

+ +

Ejemplo: Uso de slice() para crear una nueva cadena

+ +

El siguiente ejemplo usa slice() para crear una nueva cadena.

+ +
var cadena1 = "La mañana se nos echa encima.";
+var cadena2 = cadena1.slice(3, -2);
+console.log(cadena2);
+
+ +

Esto escribe:

+ +
mañana se nos echa encim
+ +

Uso de slice() con índices negativos

+ +

El siguiente ejemplo usa slice() con índices negativos.

+ +
var cad = "La mañana se nos echa encima.";
+cad.slice(-3);     // retorna 'ma.'
+cad.slice(-3, -1); // retorna 'ma'
+cad.slice(0, -1);  // retorna 'La mañana se nos echa encima'
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Definición inicial. Implementado en JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.13', 'String.prototype.slice')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.slice', 'String.prototype.slice')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.slice', 'String.prototype.slice')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/small/index.html b/files/es/web/javascript/reference/global_objects/string/small/index.html new file mode 100644 index 0000000000..a8b2f302fd --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/small/index.html @@ -0,0 +1,38 @@ +--- +title: String.prototype.small() +slug: Web/JavaScript/Referencia/Objetos_globales/String/small +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/small +--- +

{{JSRef("Objetos_globales", "String")}}

+

{{deprecated_header}}

+

Resumen

+

Causa que una cadena se muestra con una fuente pequeña, como si estuviese dentro de una etiqueta {{HTMLElement("small")}}.

+

Sintaxis

+
cadena.small()
+

Descripción

+

Usa el método small para formatear y mostrar una cadena en un documento.

+

Ejemplos

+

Ejemplo: Usando métodos de string para cambiar el tamaño de una cadena

+
var cadenaMundo="¡Hola mundo!"
+
+console.log(cadenaMundo.small())
+console.log(cadenaMundo.big())
+console.log(cadenaMundo.fontsize(7))
+
+

Este ejemplo produce el mismo resultado que el siguiente código HTML:

+
<small>¡Hola mundo!</small>
+<big>¡Hola mundo!</big>
+<fontsize=7>¡Hola mundo!</fontsize>
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/string/split/index.html b/files/es/web/javascript/reference/global_objects/string/split/index.html new file mode 100644 index 0000000000..ade291da0f --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/split/index.html @@ -0,0 +1,240 @@ +--- +title: String.prototype.split() +slug: Web/JavaScript/Referencia/Objetos_globales/String/split +tags: + - JavaScript + - Method + - Prototype + - Regular Expressions + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/split +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

El método split() divide un objeto de tipo String en un array (vector) de cadenas mediante la separación de la cadena en subcadenas.

+ +

Sintaxis

+ +
cadena.split([separador][,limite])
+ +

Parámetros

+ +
+
separador
+
Especifica el carácter a usar para la separación de la cadena. El separador es tratado como una cadena o como una {{jsxref("Objetos_globales/RegExp", "expresión regular", "", 1)}}. Si se omite el separador, el array devuelto contendrá un sólo elemento con la cadena completa.
+
+ +
+
limite
+
Opcional. Entero que especifica un límite sobre el número de divisiones a realizar. El método split() todavía se divide en todas las concordancias del separador, pero divide la matriz devuelta en la cantidad de elementos impuesta por el limite.
+
+ +

Descripción

+ +

El método split() devuelve el nuevo array.

+ +

Cuando se encuentra, el separador es eliminado de la cadena y las subcadenas obtenidas se devuelven en un array. Si el separador no es encontrado o se omite, el array contendrá un único elemento con la cadena original completa. Si el separador es una cadena vacía la cadena es convertida en un array de carácteres.

+ +

Si el separador es una expresión regular que contiene paréntesis de captura, entonces cada vez que el separador concuerda, los resultados (incluído cualquier resultado indefinido) de los paréntesis de captura son divididos en el array resultante. Sin embargo no todos los navegadores soportan esta característica.

+ +

{{Note("Cuando la cadena está vacía, split() devuelve un array que contiene una cadena vacía, en lugar de un array vacío.")}}

+ +

Ejemplos

+ +

Usando split()

+ +

El siguiente ejemplo define una función que divide una cadena en un array de cadenas usando el separador especificado. Después de la división de la cadena, la función muestra mensajes indicando la cadena original (antes de la división), el separador usado, el número de elementos del array y los elementos individuales del array.

+ +
function dividirCadena(cadenaADividir,separador) {
+   var arrayDeCadenas = cadenaADividir.split(separador);
+   document.write('<p>La cadena original es: "' + cadenaADividir + '"');
+   document.write('<br>El separador es: "' + separador + '"');
+   document.write("<br>El array tiene " + arrayDeCadenas.length + " elementos: ");
+
+   for (var i=0; i < arrayDeCadenas.length; i++) {
+      document.write(arrayDeCadenas[i] + " / ");
+   }
+}
+
+var cadenaVerso = "Oh brave new world that has such people in it.";
+var cadenaMeses = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
+
+var espacio = " ";
+var coma = ",";
+
+dividirCadena(cadenaVerso, espacio);
+dividirCadena(cadenaVerso);
+dividirCadena(cadenaMeses, coma);
+
+ +

Este ejemplo produce el siguiente resultado:

+ +
La cadena original es: "Oh brave new world that has such people in it."
+El separador es: " "
+El array tiene 10 elementos: Oh / brave / new / world / that / has / such / people / in / it. /
+
+La cadena original es: "Oh brave new world that has such people in it."
+El separador es: "undefined"
+El array tiene 1 elementos: Oh brave new world that has such people in it. /
+
+La cadena original es: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"
+El separador es: ","
+El array tiene 12 elementos: Jan / Feb / Mar / Apr / May / Jun / Jul / Aug / Sep / Oct / Nov / Dec /
+
+ +

Eliminar espacios de una cadena

+ +

En el siguiente ejemplo, split busca 0 o más espacios seguidos de un punto y coma seguido por 0 o más espacios y, cuando los halla, elimina los espacios de la cadena. listaNombres es el array devuelto como resultado de la llamada a split.

+ +
var nombres = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ";
+document.write(nombres + "<br>" + "<br>");
+var expresionRegular = /\s*;\s*/;
+var listaNombres = nombres.split(expresionRegular);
+document.write(listaNombres);
+
+ +

Esto imprime dos líneas; la primera línea imprime la cadena original, y la segunda línea imprime el array resultante.

+ +
Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand
+Harry Trump,Fred Barney,Helen Rigby,Bill Abel,Chris Hand
+
+ +

Devolviendo un número limitado de divisiones

+ +

El el siguiente ejemplo, split busca 0 o más espacios en una cadena y devuelve las tres primeras divisiones que encuentra.

+ +
var miCadena = "Hola Mundo. Cómo estás hoy?";
+var divisiones = miCadena.split(" ", 3);
+
+print(divisiones);
+
+ +

Este script muestra lo siguiente:

+ +
Hola,Mundo.,Cómo
+
+ +

Paréntesis de captura

+ +

Si el separador contiene paréntesis de capturaI los resultados que concuerden son devueltos en el array.

+ +
var miCadena = 'Hola 1 mundo. Oración número 2.';
+var division = miCadena.split(/(\d)/);
+
+console.log(division);
+ +
 
+ +
 
+ +
 
+ +
 
+ +

Este script muestra lo siguiente:

+ +
Hola ,1, mundo. Oración número ,2,.
+ +
 
+ +

Dar la vuelta a una cadena usando split()

+ +
var str = 'asdfghjkl';
+var strReverse = str.split('').reverse().join(''); // 'lkjhgfdsa'
+// split() retorna un array en el cual reverse() y join() pueden ser aplicados
+ +
 
+ +
 
+ +
 
+ +

Extra: usar el operador === para verificar si la cadena anterior era un palíndromo.

+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
ECMAScript 3rd Edition.EstándarDefinición inicial. Implementado en JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.5.4.14', 'String.prototype.split')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.split', 'String.prototype.split')}}{{Spec2('ES6')}} 
+ +

Compatibilidad con los navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/startswith/index.html b/files/es/web/javascript/reference/global_objects/string/startswith/index.html new file mode 100644 index 0000000000..c658cc80da --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/startswith/index.html @@ -0,0 +1,97 @@ +--- +title: String.prototype.startsWith() +slug: Web/JavaScript/Referencia/Objetos_globales/String/startsWith +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Prototipo + - Prototype + - Reference + - Referencia + - String + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/String/startsWith +--- +
{{JSRef}}
+ +

El método startsWith() indica si una cadena de texto comienza con los caracteres de una cadena de texto concreta, devolviendo true o false según corresponda.

+ +
{{EmbedInteractiveExample("pages/js/string-startswith.html")}}
+ +

Sintaxis

+ +
str.startsWith(stringBuscada[, posicion])
+ +

Parámetros

+ +
+
stringBuscada
+
Los caracteres a ser buscados al inicio de la cadena de texto.
+
posicion {{optional_inline}}
+
La posición de str en la cual debe comenzar la búsqueda de stringBuscada. El valor por defecto es 0.
+
+ +

Valor devuelto

+ +

true si los caracteres dados se encuentran al inicio de la cadena de texto; false en cualquier otro caso.

+ +

Descripción

+ +

Este método te permite saber si una cadena de texto comienza o no con otra cadena de texto. Este método distingue entre mayúsculas y minúsculas.

+ +

Polyfill

+ +

Este método se ha añadido a la especificación ECMAScript 2015 y podría no estar disponible aún en todas las implementaciones de JavaScript. Sin embargo, puedes utilizar un polyfill de String.prototype.startsWith() con el siguiente fragmento de código:

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

Un polyfill más robusto (totalmente compatible con la especificación ES2015), pero con menos rendimiento y menos compacto está disponible en GitHub, por Mathias Bynens.

+ +

Ejemplos

+ +

Usando startsWith()

+ +
//startswith
+var str = 'Ser, o no ser. ¡Esa es la cuestión!';
+
+console.log(str.startsWith('Ser'));           // true
+console.log(str.startsWith('no ser'));        // false
+console.log(str.startsWith('Esa es la', 16)); // true
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-string.prototype.startswith', 'String.prototype.startsWith')}}
+ +

Compatibilidad en navegadores

+ +

{{Compat("javascript.builtins.String.startsWith")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/strike/index.html b/files/es/web/javascript/reference/global_objects/string/strike/index.html new file mode 100644 index 0000000000..20ba5e9c90 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/strike/index.html @@ -0,0 +1,42 @@ +--- +title: String.prototype.strike() +slug: Web/JavaScript/Referencia/Objetos_globales/String/strike +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/strike +--- +

{{JSRef("Objetos_globales", "String")}}

+

{{deprecated_header}}

+

Resumen

+

Causa que una cadena se muestre como texto tachado, como si estuviese dentro de una etiqueta {{HTMLElement("strike")}}.

+

Sintaxis

+
cadena.strike()
+

Descripción

+

Usa el método strike para formatear y mostrar una cadena en un documento.

+

Ejemplos

+

Ejemplo: Usando métodos de string para cambiar el formateado de una cadena

+

El siguiente ejemplo usa los métodos de string para cambiar el formateado de una cadena:

+
var cadenaMundo="¡Hola mundo!"
+
+console.log(cadenaMundo.blink())
+console.log(cadenaMundo.bold())
+console.log(cadenaMundo.italics())
+console.log(cadenaMundo.strike())
+
+

Este ejemplo produce el mismo resultado que el siguiente código HTML:

+
<blink>¡Hola mundo!</blink>
+<b>¡Hola mundo!</b>
+<i>¡Hola mundo!</i>
+<strike>¡Hola mundo!</strike>
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/string/sub/index.html b/files/es/web/javascript/reference/global_objects/string/sub/index.html new file mode 100644 index 0000000000..195bca9d1e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/sub/index.html @@ -0,0 +1,35 @@ +--- +title: String.prototype.sub() +slug: Web/JavaScript/Referencia/Objetos_globales/String/sub +tags: + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/sub +--- +

{{JSRef("Objetos_globales", "String")}}

+

Resumen

+

Causa que una cadena se muestre como subíndice, como si estuviese dentro de una etiqueta {{HTMLElement("sub")}}.

+

Sintaxis

+
cadena.sub()
+

Descripción

+

Usa el método sub junto para formatear y mostrar una cadena en un documento.

+

Ejemplos

+

Ejemplo: Usando los métodos sub y sup para formatear una cadena

+

El siguiente ejemplo usa los métodos sub y sup para formatear una cadena:

+
var superText="superscript"
+var subText="subscript"
+
+console.log("Esto es lo que un " + superText.sup() + " parece.")
+console.log("Esto es lo que un " + subText.sub() + " parece.")
+
+

Este ejemplo produce el mismo resultado que el siguiente código HTML:

+
Esto es lo que <sup>superscript</sup> parece.
+Esto es lo que <sub>subscript</sub> parece.
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/string/substr/index.html b/files/es/web/javascript/reference/global_objects/string/substr/index.html new file mode 100644 index 0000000000..290d1292ab --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/substr/index.html @@ -0,0 +1,83 @@ +--- +title: String.prototype.substr() +slug: Web/JavaScript/Referencia/Objetos_globales/String/substr +tags: + - JavaScript + - Método(2) + - Prototipo + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/substr +--- +

{{JSRef("Objetos_globales", "String")}}

+ +
Advertencia: Aunque String.prototype.substr(…) no está estrictamente obsoleto (como en "eliminado de los estándares web"), se define en el anexo B de la norma ECMA-262, cuya introducción establece: + +
... Todas las características y comportamientos del lenguaje especificados en este anexo tienen una o más características indeseables y, en ausencia de uso heredado, se eliminarían de esta especificación. ... ... Los programadores no deben usar ni asumir la existencia de estas características y comportamientos al escribir un nuevo código ECMAScript.
+
+ +

 

+ +

Resumen

+ +

El método substr() devuelve los caracteres de una cadena que comienzan en una localización especificada y de acuerdo al número de caracteres que se especifiquen.

+ +

Sintaxis

+ +
cadena.substr(inicio[, longitud])
+ +

Parámetros

+ +
+
inicio
+
Localización en la cual se empiezan a extraer caracteres. Si se da un número negativo, se trata como longCad + inicio donde  longCad es la longitud de la cadena (por ejemplo, si inicio es -3 se trata como longCad - 3).
+
+ +
+
longitud
+
Opcional. El número de caracteres a extraer. Si este argumento es {{jsxref("undefined")}}, todos los caracteres desde inicio hasta el final de la cadena serán extraidos.
+
+ +

Valor retornado

+ +

Una nueva cadena que contiende la sección extraída de la cadena dada. Sí la longitud es 0 o un número negativo, retorna la cadena vacía.

+ +

Descripción

+ +

inicio es el índice de un carácter. El índice del primer carácter es 0, y el índice del último carácter es la longitud de la cadena menos 1. substr comienza extrayendo caracteres a partir de inicio y recolecta longitud  caracteres (a menos que se alcance primero el final de la cadena, en cuyo caso devuelve menos).

+ +

Si inicio es positivo y es mayor o igual que la longitud de la cadena, substr() devuelve una cadena vacía.

+ +

Si inicio es negativo, substr() lo usa como un índice de carácter desde el final de la cadena. Si inicio es negativo y abs(inicio) es mayor que la longitud de la cadena, substr usa 0 como índice inical. Nota: el uso descrito de valores negativos del argumento inicio no es soportado por Microsoft JScript .

+ +

Si longitud es 0 o negativa, substr devuelve una cadena vacía. Si se omite longitud, inicio extrae caracteres hasta el final de la cadena.

+ +

Ejemplos

+ +

Ejemplo: Uso de substr()

+ +
var cadena = "abcdefghij";
+
+console.log("(1,2): "    + cadena.substr(1,2));   // '(1, 2): bc'
+console.log("(-3,2): "   + cadena.substr(-3,2));  // '(-3, 2): hi'
+console.log("(-3): "     + cadena.substr(-3));    // '(-3): hij'
+console.log("(1): "      + cadena.substr(1));     // '(1): bcdefghij'
+console.log("(-20, 2): " + cadena.substr(-20,2)); // '(-20, 2): ab'
+console.log("(20, 2): "  + cadena.substr(20,2));  // '(20, 2): '
+
+ +

Este script muestra:

+ +
(1,2): bc
+(-3,2): hi
+(-3): hij
+(1): bcdefghij
+(-20, 2): ab
+(20, 2):
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/substring/index.html b/files/es/web/javascript/reference/global_objects/string/substring/index.html new file mode 100644 index 0000000000..9918417f95 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/substring/index.html @@ -0,0 +1,92 @@ +--- +title: String.prototype.substring() +slug: Web/JavaScript/Referencia/Objetos_globales/String/substring +tags: + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/substring +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El substring() método devuelve un subconjunto de un objeto String.

+ +

Sintaxis

+ +
cadena.substring(indiceA[, indiceB'])
+ +

Parámetros

+ +
+
indiceA
+
Un entero entre 0 y la longitud de la cadena menos 1.
+
indiceB
+
(opcional) Un entero entre 0 y la longitud de la cadena.
+
+ +

Descripción

+ +

substring extrae caracteres desde indiceA hasta indiceB sin incluirlo. En particular:

+ + + +

Si indiceA es mayor que indiceB, entonces el efecto de substring es como si los dos argumentos se intercambiasen; por ejemplo, cadena.substring(1, 0) == cadena.substring(0, 1).

+ +

Ejemplos

+ +

Ejemplo: Usando substring

+ +

El siguiente ejemplo usa substring para mostrar caracteres de la cadena "Mozilla":

+ +
// asume una función print ya definida
+var cualquierCadena = "Mozilla";
+
+// Muestra "Moz"
+print(cualquierCadena.substring(0,3));
+print(cualquierCadena.substring(3,0));
+
+// Muestra "lla"
+print(cualquierCadena.substring(4,7));
+print(cualquierCadena.substring(7,4));
+
+// Muestra "Mozill"
+print(cualquierCadena.substring(0,6));
+print(cualquierCadena.substring(6,0));
+
+// Muestra "Mozilla"
+print(cualquierCadena.substring(0,7));
+print(cualquierCadena.substring(0,10));
+
+ +

Ejemplo: Reemplazar una subcadena dentro de una cadena

+ +

El siguiente ejemplo reemplaza una subcadena dentro de una cadena. Reemplazará tanto caracteres individuales como subcadenas. La llamada de la función al final del ejemplo cambia la cadena "Bravo Nuevo Mundo" por "Bravo Nueva Web".

+ +
function reemplazarCadena(cadenaVieja, cadenaNueva, cadenaCompleta) {
+// Reemplaza cadenaVieja por cadenaNueva en cadenaCompleta
+
+   for (var i = 0; i < cadenaCompleta.length; i++) {
+      if (cadenaCompleta.substring(i, i + cadenaVieja.length) == cadenaVieja) {
+         cadenaCompleta= cadenaCompleta.substring(0, i) + cadenaNueva + cadenaCompleta.substring(i + cadenaVieja.length, cadenaCompleta.length);
+      }
+   }
+   return cadenaCompleta;
+}
+
+reemplazarCadena("Mundo", "Web", "Bravo Nuevo Mundo");
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/sup/index.html b/files/es/web/javascript/reference/global_objects/string/sup/index.html new file mode 100644 index 0000000000..6b8db218b6 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/sup/index.html @@ -0,0 +1,35 @@ +--- +title: String.prototype.sup() +slug: Web/JavaScript/Referencia/Objetos_globales/String/sup +tags: + - HTML wrapper methods + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/sup +--- +

{{JSRef("Objetos_globales", "String")}}

+

Resumen

+

Causa que una cadena se muestre como superíndice, como si estuviese dentro de una etiqueta {{HTMLElement("sup")}}.

+

Sintaxis

+
cadena.sup()
+

Descripción

+

Usa el método sup junto para formatear y mostrar una cadena en un documento.

+

Ejemplos

+

Ejemplo: Usando los métodos sub y sup para formatear una cadena

+

El siguiente ejemplo usa los métodos sub y sup para formatear una cadena:

+
var textoSuper="superscript"
+var textoSub="subscript"
+
+console.log("Esto es lo que un " + textoSuper.sup() + " parece.")
+console.log("Esto es lo que un " + textoSub.sub() + " parece.")
+
+

Este ejemplo produce el mismo resultado que el siguiente código HTML:

+
Esto es lo que <sup>superscript</sup> parece.
+Esto es lo que <sub>subscript</sub> parece.
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/string/tolocalelowercase/index.html b/files/es/web/javascript/reference/global_objects/string/tolocalelowercase/index.html new file mode 100644 index 0000000000..5c1eae2144 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/tolocalelowercase/index.html @@ -0,0 +1,113 @@ +--- +title: String.prototype.toLocaleLowerCase() +slug: Web/JavaScript/Referencia/Objetos_globales/String/toLocaleLowerCase +tags: + - Cadena + - Internacionalizacion + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase +--- +
{{JSRef}}
+ +
El método toLocaleLowerCase() retorna la cadena de texto desde la que se llama convertida en minúsculas, de acuerdo con cualquier localización específica de correspondencia de mayúsculas y minúsculas.
+ +
 
+ +
{{EmbedInteractiveExample("pages/js/string-tolocalelowercase.html")}}
+ + + +

Sintaxis

+ +
str.toLocaleLowerCase()
+str.toLocaleLowerCase(locale)
+str.toLocaleLowerCase([locale, locale, ...])
+
+ +

Parámetros

+ +
+
locale {{optional_inline}}
+
El parámetro locale indica la localización que se utilizará para convertir a minúsculas de acuerdo con culalquier correspondencia de mayúsculas y minúsculas. Si se proporcionan múltiples locales en un {{jsxref("Array")}}, se utiliza el mejor local disponible. La localización por defecto es la localización actual configurada en el host.
+
+ +

Valor retornado

+ +

Una nueva cadena que representa la cadena desde la que se llama convertida a minúsculas, de acuerdo con cualquier localización específica de correspondencia de mayúsculas y minúsculas.

+ +

Excepciones

+ + + +

Descripción

+ +

El método toLocaleLowerCase() retorna la cadena de texto desde la que se llama convertida en minúsculas, de acuerdo con cualquier localización específica de correspondencia de mayúsculas y minúsculas.  toLocaleLowerCase() no afecta el valor de la cadena desde la que se llama. En la mayoría de los casos, producirá el mismo resultado que {{jsxref("String.prototype.toLowerCase()", "toLowerCase()")}}, pero para algunos locales, como el turco, cuyas correspondencias de mayúsculas y minúsculas no siguen las correpsondencias por defecto de Unicode, podría producir de un resultado diferente.

+ +

Ejemplos

+ +

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

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Initial definition. Implemented in JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.17', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int Draft', '#sup-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ES Int Draft')}}ES Intl 2017 added the locale parameter.
+ +

Compatibilidad entre navegadores

+ + + +

{{Compat("javascript.builtins.String.toLocaleLowerCase")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html b/files/es/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html new file mode 100644 index 0000000000..7199ca3ae5 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html @@ -0,0 +1,100 @@ +--- +title: String.prototype.toLocaleUpperCase() +slug: Web/JavaScript/Referencia/Objetos_globales/String/toLocaleUpperCase +translation_of: Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase +--- +
{{JSRef}}
+ +

El método toLocaleUpperCase() devuelve el valor de la cadena que lo llama convertido en mayúsculas, de acuerdo con las asignaciones de casos específicos de la configuración regional.

+ +

Syntaxis

+ +
str.toLocaleUpperCase()
+str.toLocaleUpperCase(locale)
+str.toLocaleUpperCase([locale, locale, ...])
+
+ +

Parámetros

+ +
+
locale {{optional_inline}}
+
El parámetro locale indica la configuración regional que se va a utilizar para convertir en mayúsculas según las asignaciones de casos específicos de la configuración regional. Si se proporcionan varios locales en un {{jsxref ("Array")}}, se utiliza la mejor configuración regional disponible. La configuración regional predeterminada es la configuración regional actual del entorno de host.
+
+ +

Valor de retorno

+ +

Una nueva cadena que representa la cadena de llamada convertida en mayúsculas, de acuerdo con cualquier asignación de mayúsculas de idioma específico.

+ +

Exceciones

+ + + +

Descripción

+ +

El método toLocaleUpperCase() devuelve el valor de la cadena convertida en mayúsculas según las asignaciones de casos específicos de la configuración regional. toLocaleUpperCase() no afecta al valor de la cadena en sí. En la mayoría de los casos, esto producirá el mismo resultado que {{jsxref("String.prototype.toUpperCase()", "toUpperCase()")}}, pero para algunas localidades, como turco, cuyas asignaciones de mayúsculas y minúsculas no siguen la mayúsculas y minúsculas en Unicode, puede haber un resultado diferente.

+ +

Ejemplos

+ +

Usando toLocaleUpperCase()

+ +
'alphabet'.toLocaleUpperCase(); // 'ALPHABET'
+
+'i\u0307'.toLocaleUpperCase('lt-LT'); // 'I'
+
+let locales = ['lt', 'LT', 'lt-LT', 'lt-u-co-phonebk', 'lt-x-lietuva'];
+'i\u0307'.toLocaleUpperCase(locales); // 'I'
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónStatusComentario
{{SpecName('ES3')}}{{Spec2('ES3')}}Initial definition. Implemented in JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.19', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int Draft', '#sup-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ES Int Draft')}}ES Intl 2017 added the locale parameter.
+ +

Compatibilidad de navegadores

+ + + +

{{Compat("javascript.builtins.String.toLocaleUpperCase")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/tolowercase/index.html b/files/es/web/javascript/reference/global_objects/string/tolowercase/index.html new file mode 100644 index 0000000000..8060f3dd1c --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/tolowercase/index.html @@ -0,0 +1,40 @@ +--- +title: String.prototype.toLowerCase() +slug: Web/JavaScript/Referencia/Objetos_globales/String/toLowerCase +tags: + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toLowerCase +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El método toLowerCase() devuelve el valor en minúsculas de la cadena que realiza la llamada.

+ +

Sintaxis

+ +
cadena.toLowerCase() 
+ +

Descripción

+ +

El método toLowerCase devuelve el valor de la cadena convertida a minúsculas. toLowerCase no afecta al valor de la cadena en sí misma.

+ +

Ejemplos

+ +

Ejemplo: Usando toLowerCase

+ +

El siguiente ejemplo muestra la cadena "alfabeto" en minúsculas:

+ +
var textoMayusculas="ALFABETO"
+document.write(textoMayusculas.toLowerCase())
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/tosource/index.html b/files/es/web/javascript/reference/global_objects/string/tosource/index.html new file mode 100644 index 0000000000..104738c22d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/tosource/index.html @@ -0,0 +1,56 @@ +--- +title: String.prototype.toSource() +slug: Web/JavaScript/Referencia/Objetos_globales/String/toSource +tags: + - Cadena + - JavaScript + - No estandar + - Prototipo + - Referencia + - metodo +translation_of: Web/JavaScript/Reference/Global_Objects/String/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

El método toSource() devuelve una cadena que representa el código fuente del objeto.

+ +

Sintaxis

+ +
String.toSource()
+str.toSource()
+
+ +

Valor devuelto

+ +

Una cadena que representa el código fuente del objeto.

+ +

Descripción

+ +

El método toSource() devuelve los siguientes valores:

+ +

Para el objeto incorporado {{jsxref("String")}}, toSource() devuelve la siguiente cadena indicando que el código fuente no está disponible:

+ +
function String() {
+    [native code]
+}
+
+ +

Para instancias de {{jsxref("String")}} o cadenas literales, toSource() devuelve una cadena representando el código fuente.

+ +

Este método usualmente es llamado internamente por JavaScript y no explícitamente en código.

+ +

Especificaciones

+ +

No es parte de ningún estándar. Implementado en JavaScript 1.3.

+ +

Compatibilidad entre navegadores

+ + + +

{{Compat("javascript.builtins.String.toSource")}}

+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/tostring/index.html b/files/es/web/javascript/reference/global_objects/string/tostring/index.html new file mode 100644 index 0000000000..89f53666b1 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/tostring/index.html @@ -0,0 +1,28 @@ +--- +title: String.prototype.toString() +slug: Web/JavaScript/Referencia/Objetos_globales/String/toString +tags: + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toString +--- +

{{JSRef("Objetos_globales", "String")}}

+

Resumen

+

El toString() método devuelve una cadena que representa al objeto especificado.

+

Sintaxis

+
cadena.toString() 
+

Descripción

+

El objeto String sobreescribe el método toString del objeto {{jsxref("Object")}} object; no hereda {{jsxref("Object.toString()")}}. Para objetos String, el método toString devuelve una cadena que representa al objeto.

+

Ejemplos

+

Ejemplo: Usando toString

+

El siguiente ejemplo muestra el valor cadena de un objeto String:

+
cadena = new String("Hello world");
+alert(cadena.toString())      // Displays "Hello world"
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/global_objects/string/touppercase/index.html b/files/es/web/javascript/reference/global_objects/string/touppercase/index.html new file mode 100644 index 0000000000..77b05b28b4 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/touppercase/index.html @@ -0,0 +1,39 @@ +--- +title: String.prototype.toUpperCase() +slug: Web/JavaScript/Referencia/Objetos_globales/String/toUpperCase +tags: + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toUpperCase +--- +

{{JSRef("Objetos_globales", "String")}}

+ +

Resumen

+ +

El toUpperCase() método devuelve el valor convertido en mayúsculas de la cadena que realiza la llamada.

+ +

Sintaxis

+ +
cadena.toUpperCase() 
+ +

Descripción

+ +

El método toUpperCase devuelve el valor de la cadena convertida a mayúsculas. toUpperCase no afecta al valor de la cadena en sí mismo.

+ +

Ejemplos

+ +

Ejemplo: Usando toUpperCase

+ +

El siguiente ejemplo muestra la cadena "ALPHABET":

+ +
console.log( "alphabet".toUpperCase() ); // "ALPHABET"
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/trim/index.html b/files/es/web/javascript/reference/global_objects/string/trim/index.html new file mode 100644 index 0000000000..d958d713eb --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/trim/index.html @@ -0,0 +1,133 @@ +--- +title: String.prototype.trim() +slug: Web/JavaScript/Referencia/Objetos_globales/String/Trim +translation_of: Web/JavaScript/Reference/Global_Objects/String/Trim +--- +
{{JSRef("Global_Objects", "String")}}
+ +

Resumen

+ +

El método trim( ) elimina los espacios en blanco en ambos extremos del string. Los espacios en blanco en este contexto, son todos los caracteres sin contenido (espacio, tabulación, etc.) y todos los caracteres de nuevas lineas (LF,CR,etc.).

+ +

Sintaxis

+ +
str.trim()
+ +

Una nueva cadena que representa la cadena de llamada sin espacios en blanco de ambos extremos.

+ +

Descripción

+ +

El método trim( ) devuelve la cadena de texto despojada de los espacios en blanco en ambos extremos. El método no afecta al valor de la cadena de texto.

+ +

Ejemplos

+ +

Ejemplo: Uso de trim()

+ +

El siguiente ejemplo muestra la cadena de texto en minúsculas 'foo':

+ +
var orig = '   foo  ';
+console.log(orig.trim()); // 'foo'
+
+// Otro ejemplo de .trim() eliminando el espacio en blanco sólo de un lado.
+
+var orig = 'foo    ';
+console.log(orig.trim()); // 'foo'
+
+ +

Polyfill

+ +

Ejecutar el siguiente código antes de cualquier otro código creará un trim ( ) si este no está disponible de manera nativa.

+ +
if (!String.prototype.trim) {
+  (function() {
+    // Make sure we trim BOM and NBSP
+    var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+    String.prototype.trim = function() {
+      return this.replace(rtrim, '');
+    };
+  })();
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES5.1', '#sec-15.5.4.20', 'String.prototype.trim')}}{{Spec2('ES5.1')}} +

Definición inicial. Implementado en JavaScript 1.8.1.

+
{{SpecName('ES6', '#sec-string.prototype.trim', 'String.prototype.trim')}}{{Spec2('ES6')}} 
+ +

Compatibilidad en Navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte Básico{{CompatVersionUnknown}}{{CompatGeckoDesktop("1.9.1")}}{{CompatIE("9")}}{{CompatOpera("10.5")}}{{CompatSafari("5")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte Básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/trimend/index.html b/files/es/web/javascript/reference/global_objects/string/trimend/index.html new file mode 100644 index 0000000000..6252141adf --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/trimend/index.html @@ -0,0 +1,82 @@ +--- +title: String.prototype.trimEnd() +slug: Web/JavaScript/Referencia/Objetos_globales/String/trimEnd +tags: + - Espacios en blanco + - JavaScript + - Métodos + - Prototype + - String + - Texto + - cadenas de texto +translation_of: Web/JavaScript/Reference/Global_Objects/String/trimEnd +--- +
{{JSRef}}
+ +

El método trimEnd() elimina los espacios en blanco al final de una cadena de carácteres. trimRight() es el alias de este método.

+ +
{{EmbedInteractiveExample("pages/js/string-trimend.html")}}
+ + + +

Sintaxis

+ +
str.trimEnd();
+str.trimRight();
+ +

Valor de retorno

+ +

Una nueva cadena de texto que representa la cadena de texto llamada sin espacios en blanco de su extremo (derecho).

+ +

Descripción

+ +

trimEnd() / trimRight() Los metodos devuelven una cadena de texto sin espacios en blanco desde su extremo derecho. trimEnd() ó trimRight() no afectan el valor de la cadena de texto en sí.

+ +

Superposición

+ +

Por coherencia de funciones como {{jsxref("String.prototype.padEnd")}} el nombre del método estandar es trimEnd. Sin embargo por compatibilidad web, trimRight permanece como un alias para trimEnd. En algunos motores esto significa: 

+ +
String.prototype.trimRight.name === "trimEnd";
+ +

Ejemplo

+ +

Usando trimEnd()

+ +

El siguiente ejemplo muestra la cadena de texto en minusculas '   foo':

+ +
var str = '   foo  ';
+
+console.log(str.length); // 8
+
+str = str.trimEnd();
+console.log(str.length); // 6
+console.log(str);        // '   foo'
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-string.prototype.trimend', 'String.prototype.trimEnd')}}
+ +

Compatibilidad en Navegadores

+ + + +

{{Compat("javascript.builtins.String.trimEnd")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/string/valueof/index.html b/files/es/web/javascript/reference/global_objects/string/valueof/index.html new file mode 100644 index 0000000000..b287c4d774 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/string/valueof/index.html @@ -0,0 +1,28 @@ +--- +title: String.prototype.valueOf() +slug: Web/JavaScript/Referencia/Objetos_globales/String/valueOf +tags: + - JavaScript + - Method + - Prototype + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/valueOf +--- +

{{JSRef("Objetos_globales", "String")}}

+

Resumen

+

The valueOf() método devuelve el valor primitivo de un objeto String.

+

Sintaxis

+
caneda.valueOf() 
+

Descripción

+

El método valueOf de String devuelve el valor primitivo de un objeto String como un tipo de dato cadena. Este valor es equivalente a String.toString.

+

Normalmente este método es llamado internamente por JavaScript y no en el código.

+

Ejemplos

+

Ejemplo: Usando valueOf

+
cadena = new String("Hello world");
+alert(cadena.valueOf())          // Displays "Hello world"
+
+

Vea También

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

El método Symbol.for(key) busca símbolos existentes en el runtime global del registro de symbols con la key enviada cómo argumento y devuelve el symbol si fue encontrada. Sino, un nuevo symbol es creado en el registro global de symbols con dicha key .

+ +

Syntax

+ +
Symbol.for(key);
+ +

Parámetros

+ +
+
key
+
String, requirido. La key para el símbolo (y también usada para la descripción del Symbol).
+
+ +

Valor de retorno

+ +

Un Symbol existente para la key enviada si se encuentra, un nuevo Symbol creado para la key si no es encontrado.

+ +

Descripción

+ +

A diferencia de Symbol(),  la función Symbol.for() crea un symbol disponible el registro global de symbols.

+ +

Sin embargo, Symbol.for() no crea un nuevo symbol en cada llamada: primero chequea si existe un symbol para la key en el registro y sólo crea un nuevo symbol si la key no es encontrada.

+ +

El registro global de symbol es una lista con la siguiente estructura (inicializada vacía):

+ + + + + + + + + + + + + + + + + +
Estructura registro global de symbol
Field nameValue
[[key]]Un string usado como key para identifcar al símbolo.
[[symbol]]El symbol que es guardado globalmente.
+ +

Examples

+ +
Symbol.for('foo'); // crea un nuevo global symbol
+Symbol.for('foo'); // devuelve el symbol creado
+
+// El mismo symbol global, pero no localmente
+Symbol.for('bar') === Symbol.for('bar'); // true
+Symbol('bar') === Symbol('bar'); // false
+
+// La key es usada en la descripción
+var sym = Symbol.for('mario');
+sym.toString(); // "Symbol(mario)"
+
+ +

Es una buena práctica agregar un prefijo a los symbols para evitar conflictos con otras librerias del código:

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

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-symbol.for', 'Symbol.for')}}{{Spec2('ES2015')}}Definición inicial
{{SpecName('ESDraft', '#sec-symbol.for', 'Symbol.for')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad entre exploradores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{ CompatChrome(40) }}{{CompatVersionUnknown}}{{ CompatGeckoDesktop("36.0") }}{{CompatNo}}{{CompatNo}}9
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatNo}}{{CompatVersionUnknown}}{{ CompatGeckoMobile("36.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/symbol/hasinstance/index.html b/files/es/web/javascript/reference/global_objects/symbol/hasinstance/index.html new file mode 100644 index 0000000000..9149aeda00 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/symbol/hasinstance/index.html @@ -0,0 +1,105 @@ +--- +title: Symbol.hasInstance +slug: Web/JavaScript/Referencia/Objetos_globales/Symbol/hasInstance +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance +--- +
{{JSRef}}
+ +

El bien conocido símbolo Symbol.hasInstance es usado para determinar si un constructor reconoce un objeto como su instancia. El comportamiento del operador {{jsxref("Operators/instanceof", "instanceof")}} puede ser personalizado con este símbolo.

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

Ejemplos

+ +

Usted puede implementar un comportamiento personalizado para el operador instanceof tal que así:

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

Specifications

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

Browser compatibility

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(51)}}{{CompatVersionUnknown}}{{ CompatGeckoDesktop(50) }}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatUnknown}}{{CompatUnknown}}{{CompatVersionUnknown}}{{ CompatGeckoMobile(50) }}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Ver también

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

Symbol es un tipo de datos cuyos valores son únicos e immutables. Dichos valores pueden ser utilizados como identificadores (claves) de las propiedades de los objetos.  Cada valor del tipo Symbol tiene asociado un valor del tipo String o Undefined que sirve únicamente como descripción del símbolo.

+ +

La función Symbol {{Glossary("Primitive", "primitive data type")}} es el constructor de valores del tipo Symbol. Cuando Symbol es llamado como función nos devuelve una nuevo valor del tipo Symbol. El constructor Symbol no debe ser usado con el operador new. Tampoco debe ser extendido mediante clases.

+ + + +

Sintaxis

+ +
Symbol([description])
+ +

Parametros

+ +
+
Descripcion {{optional_inline}}
+
Es un valor opcional de tipo String. Únicamente sirve como descripción del símbolo que puede ser útil para depurar. No permite el acceso al símbolo que describe.
+
+ +

Descripción

+ +

Para crear un nuevo símbolo, simplemente escribimos  Symbol(), opcionalmente  con un argumento de tipo String que constituiría la descripción del símbolo:

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

El código anterior crea tres símbolos nuevos. Hay que destacar que  Symbol("foo") no convierte la cadena "foo" en un símbolo, sino que crea un símbolo nuevo que tiene la misma descripción.

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

La siguiente sintaxis con el operador {{jsxref("Operators/new", "new")}} lanzará un {{jsxref("TypeError")}}:

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

Esto evita la creación de un objeto envolvente explícito de Symbol en lugar de un nuevo valor de tipo símbolo. Si realmente se desea crear un Symbol wrapper object,  podemos usar la función Object():

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

Símbolos compartidos en el registro global de símbolos

+ +

La sintaxis anteriormente descrita que usa la función Symbol() no creara un símbolo global disponible para toda el código base. Para crear símbolos accesibles a través de los archivos incluso a través de realms (cada uno de los cuales tiene su propio global scope) es necesario utilizar los métodos {{jsxref("Symbol.for()")}} y {{jsxref("Symbol.keyFor()")}} para crear y acceder a los símbolos desde un registro global de valores del tipo Symbol.

+ +

Encontrando las claves de tipo símbolo de un objeto

+ +

El método {{jsxref("Object.getOwnPropertySymbols()")}} devuelve un array con los símbolos que sirven como claves de las propiedades propias de un objeto. Hay que destacar que cada objeto es inicializado sin propiedades propias con claves de tipo Symbol, así que este array estará vacio a menos que se hayan creado explicitamente propiedades con clave de tipo símbolo en el objeto.

+ +

Propiedades

+ +
+
Symbol.length
+
La propiedad length cuyo valor es 0 para todos los símbolos.
+
{{jsxref("Symbol.prototype")}}
+
Representa el prototipo constructor Symbol. Es un objeto ordinario.
+
+ +

Símbolos bien conocidos

+ +

JavaScript tiene algunos símbolos incorporados que representan comportamientos internos del lenguaje que no fueron expuestos a los programadores antes de ECMAScript 6. Se accede a los dichos símbolos a través de las siguientes propiedades del constructor Symbol.

+ +

Símbolo de iteración

+ +
+
{{jsxref("Symbol.iterator")}}
+
Los objetos que implementen la interfaz Iterable deben tener una propiedad que tenga como clave este símbolo. Dicha propiedad debe ser una función que devuelva un objeto que implemente la interfaz Iterator.  Usado por for...of.
+
+ +

Símbolos de expresiones regulares

+ +
+
{{jsxref("Symbol.match")}}
+
Un método que iguala a un String, también usado para determinar si un objeto puede ser usado como una expresión regular. Usado por {{jsxref("String.prototype.match()")}}.
+
{{jsxref("Symbol.replace")}}
+
Un método que reemplaza las subcadenas que coinciden con una cadena. Utilizado por {{jsxref("String.prototype.replace()")}}.
+
{{jsxref("Symbol.search")}}
+
Un método que devuelve el índice dentro de una cadena que coincide con la expresión regular. Utilizado por {{jsxref("String.prototype.search()")}}.
+
{{jsxref("Symbol.split")}}
+
Un método que separa una cadena en los índices que coincide una expresión regular. Utilizado por {{jsxref("String.prototype.split()")}}.
+
+ +

Otros símbolos

+ +
+
{{jsxref("Symbol.hasInstance")}}
+
Un método que determina si un objeto constructor reconoce al objeto como su instancia. Utilizado por {{jsxref("Operators/instanceof", "instanceof")}}.
+
{{jsxref("Symbol.isConcatSpreadable")}}
+
Un valor booleano que indica si un objeto debe ser aplanado a sus elementos de matriz. Usado por {{jsxref("Array.prototype.concat()")}}.
+
{{jsxref("Symbol.unscopables")}}
+
An Array of string values that are property values. These are excluded from the with environment bindings of the associated objects.
+
{{jsxref("Symbol.species")}}
+
Una función constructor utilizada para crear objetos derivados.
+
{{jsxref("Symbol.toPrimitive")}}
+
Un método para convertir un objeto a su valor primitivo.
+
{{jsxref("Symbol.toStringTag")}}
+
Un método para definir la descripción por defecto de un objeto. Usado por {{jsxref("Object.prototype.toString()")}}.
+
+ +

Métodos

+ +
+
{{jsxref("Symbol.for()", "Symbol.for(key)")}}
+
Searches for existing symbols with the given key and returns it if found. Otherwise a new symbol gets created in the global symbol registry with this key.
+
{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}
+
Retrieves a shared symbol key from the global symbol registry for the given symbol.
+
+ +

Symbol prototype

+ +

All Symbols inherit from {{jsxref("Symbol.prototype")}}.

+ +

Propiedades

+ +

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

+ +

Métodos

+ +

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

+ +

Ejemplos

+ +

Usando el operador typeof con  symbols

+ +

El operador {{jsxref("Operators/typeof", "typeof")}} puede ayudar a identificar los Symbol.

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

Symbol type conversions

+ +

Some things to note when working with type conversion of symbols.

+ + + +

Symbols y el iterador for...in

+ +

Symbols are not visible in for...in iterations. In addition, {{jsxref("Object.getOwnPropertyNames()")}} will not return symbol object properties, however, you can use {{jsxref("Object.getOwnPropertySymbols()")}} to get these.

+ +
var obj = {};
+
+obj[Symbol("a")] = "a";
+obj[Symbol.for("b")] = "b";
+obj["c"] = "c";
+obj.d = "d";
+
+for (var i in obj) {
+   console.log(i); // logs "c" and "d"
+}
+ +

Symbols y JSON.stringify()

+ +

Symbol-keyed properties will be completely ignored when using JSON.stringify():

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

For more details, see {{jsxref("JSON.stringify()")}}.

+ +

Symbol wrapper objects as property keys

+ +

When a Symbol wrapper object is used as a property key, this object will be coerced to its wrapped symbol:

+ +
var sym = Symbol("foo");
+var obj = {[sym]: 1};
+obj[sym];            // 1
+obj[Object(sym)];    // still 1
+
+ +

Especificaciones

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-symbol-objects', 'Symbol')}}{{Spec2('ES6')}}Initial definition
+ +

Compatibilidad del navegador

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(38)}}{{CompatGeckoDesktop("36.0")}}{{CompatNo}}259
Symbol.iterator (@@iterator){{CompatChrome(38)}}{{CompatGeckoDesktop("36.0")}}{{CompatNo}}259
Symbol.unscopables (@@unscopables){{CompatChrome(38)}}{{CompatNo}}{{CompatNo}}259
Symbol.match (@@match){{CompatNo}}{{CompatGeckoDesktop("40.0")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
Symbol.species (@@species){{CompatNo}}{{CompatGeckoDesktop("41.0")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
Symbol.toPrimitive (@@toPrimitive){{CompatNo}}{{CompatGeckoDesktop("44.0")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
Other well-known symbols{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatChrome(38)}}{{ CompatGeckoMobile("36.0") }}{{CompatNo}}259
Symbol.iterator (@@iterator){{CompatNo}}{{CompatChrome(38)}}{{ CompatGeckoMobile("36.0") }}{{CompatNo}}259
Symbol.unscopables (@@unscopables){{CompatNo}}{{CompatChrome(38)}}{{CompatNo}}{{CompatNo}}259
Symbol.match (@@match){{CompatNo}}{{CompatNo}}{{ CompatGeckoMobile("40.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
Symbol.species (@@species){{CompatNo}}{{CompatNo}}{{ CompatGeckoMobile("41.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
Symbol.toPrimitive (@@toPrimitive){{CompatNo}}{{CompatNo}}{{ CompatGeckoMobile("44.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
Other well-known symbols{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

Mira también

+ + diff --git a/files/es/web/javascript/reference/global_objects/symbol/iterator/index.html b/files/es/web/javascript/reference/global_objects/symbol/iterator/index.html new file mode 100644 index 0000000000..4f9e0212cc --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/symbol/iterator/index.html @@ -0,0 +1,98 @@ +--- +title: Symbol.iterator +slug: Web/JavaScript/Referencia/Objetos_globales/Symbol/iterator +tags: + - ECMAScript6 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +--- +
{{JSRef}}
+ +

El símbolo Symbol.iterator especifica al iterador por defecto de un objeto. Es utilizado por el bucle {{jsxref("Sentencias/for","for")}}.

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

Descripción

+ +

En cualquier situación donde se necesita iterar un objeto (por ejemplo al inicio de un bucle for..of), su método @@iterator es invocado sin argumentos, y el iterador regresado es utilizador para obtener los valores a iterar.

+ +

Algunos tipos integrados cuentan con un comportamiento de iterar por defecto, mientras que otros tipos (como {{jsxref("Object")}}) no. Los tipos integrados con un método @@iterator son:

+ + + +

Ver Protocolos de iteración para más información.

+ +

Ejemplos

+ +

Iterables definidos por el usuario

+ +

Podemos definir nuestros propios iterables de la siguiente forma:

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

Iterables mal formados

+ +

Si un método iterador @@iterator no devuelve un objeto iterador, es un iterable mal formado. Usarlo como tal es probable que genere excepciones en tiempo de ejecución, o comportamientos inesperados.

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

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificacióbEstadoComentario
{{SpecName('ES2015', '#sec-symbol.iterator', 'Symbol.iterator')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad en navegadores

+ + + +

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

+ +

Temas relacionados

+ + diff --git a/files/es/web/javascript/reference/global_objects/syntaxerror/index.html b/files/es/web/javascript/reference/global_objects/syntaxerror/index.html new file mode 100644 index 0000000000..92bf3f4991 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/syntaxerror/index.html @@ -0,0 +1,176 @@ +--- +title: SyntaxError +slug: Web/JavaScript/Referencia/Objetos_globales/SyntaxError +tags: + - Constructor + - Error + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Global_Objects/SyntaxError +--- +
{{JSRef}}
+ +

El objeto SyntaxError representa un error cuando se trata de interpretar codigo sintacticamente invalido.

+ +

Descripción

+ +

Un SyntaxError es lanzado cuando el motor de JavaScript se encuentra con partes de código que no forman parte de la sintaxtis del lenguaje al momento analizar el código.

+ +

Sintaxis

+ +
new SyntaxError([mensaje[, nombreArchivo[, numeroLinea]]])
+ +

Parametros

+ +
+
mensaje
+
Opcional. Descripción legible del error.
+
nombreArchivo {{non-standard_inline}}
+
Opcional. El nombre del archivo que contiene el código que causó la excepción.
+
numeroLinea {{non-standard_inline}}
+
Opcional. El numero de linea del código que causó la excepción.
+
+ +

Propiedades

+ +
+
{{jsxref("SyntaxError.prototype")}}
+
Permite el agregado de propiedades al objeto SyntaxError.
+
+ +

Metodos

+ +

El objeto global SyntaxError no contiene metodos propios, sin embargo, hereda algunos metodos debido a la cadena de prototipos.

+ +

Instancias de SyntaxError

+ +

Propiedades

+ +
{{page('/es/docs/Web/JavaScript/Referencia/Objetos_globales/SyntaxError/prototype', 'Propiedades')}}
+ +

Metodos

+ +
{{page('/es/docs/Web/JavaScript/Referencia/Objetos_globales/SyntaxError/prototype', 'Metodos')}}
+ +

Ejemplos

+ +

Capturando un SyntaxError

+ +
try {
+  eval('hoo bar');
+} catch (e) {
+  console.log(e instanceof SyntaxError); // true
+  console.log(e.message);                // "missing ; before statement"
+  console.log(e.name);                   // "SyntaxError"
+  console.log(e.fileName);               // "Scratchpad/1"
+  console.log(e.lineNumber);             // 1
+  console.log(e.columnNumber);           // 4
+  console.log(e.stack);                  // "@Scratchpad/1:2:3\n"
+}
+
+ +

Creando un SyntaxError

+ +
try {
+  throw new SyntaxError('Hola', 'unArchivo.js', 10);
+} catch (e) {
+  console.log(e instanceof SyntaxError); // true
+  console.log(e.message);                // "Hola"
+  console.log(e.name);                   // "SyntaxError"
+  console.log(e.fileName);               // "unArchivo.js"
+  console.log(e.lineNumber);             // 10
+  console.log(e.columnNumber);           // 0
+  console.log(e.stack);                  // "@Scratchpad/2:11:9\n"
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES3')}}{{Spec2('ES3')}}Initial definition.
{{SpecName('ES5.1', '#sec-15.11.6.4', 'SyntaxError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-syntaxerror', 'SyntaxError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-syntaxerror', 'SyntaxError')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con Navegarores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/typedarray/buffer/index.html b/files/es/web/javascript/reference/global_objects/typedarray/buffer/index.html new file mode 100644 index 0000000000..579f8af9bd --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/typedarray/buffer/index.html @@ -0,0 +1,110 @@ +--- +title: TypedArray.prototype.buffer +slug: Web/JavaScript/Referencia/Objetos_globales/TypedArray/buffer +tags: + - Buffer + - JavaScript + - Propiedad +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/buffer +--- +
{{JSRef}}
+ +

La propiedad de acceso buffer representa el {{jsxref("ArrayBuffer")}} referenciada por un TypedArray en tiempo de construcción.

+ +

Sintaxis

+ +
typedArray.buffer
+ +

Descripción

+ +

La propiedad buffer es una propiedad de acceso cuya función set accessor es undefined, significa que tu sólo puedes leer esta propiedad. El valor es establecido cuando TypedArray se construye y no puede ser cambiado. TypedArray es uno de los TypedArray objects.

+ +

Ejemplos

+ +

Usando la propiedad buffer

+ +
var buffer = new ArrayBuffer(8);
+var uint16 = new Uint16Array(buffer);
+uint16.buffer; // ArrayBuffer { byteLength: 8 }
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES6', '#sec-get-%typedarray%.prototype.buffer', 'TypedArray.prototype.buffer')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.buffer', 'TypedArray.prototype.buffer')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad del navegador

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico7.0{{ CompatGeckoDesktop("2") }}1011.65.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico4.0{{CompatVersionUnknown}}{{ CompatGeckoMobile("2") }}1011.64.2
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/typedarray/index.html b/files/es/web/javascript/reference/global_objects/typedarray/index.html new file mode 100644 index 0000000000..644b28c081 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/typedarray/index.html @@ -0,0 +1,317 @@ +--- +title: TypedArray +slug: Web/JavaScript/Referencia/Objetos_globales/TypedArray +tags: + - Clase + - Class + - JavaScript + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray +--- +
{{JSRef}}
+ +

Un objeto TypedArray describe una vista similar a un arreglo de un búfer de datos binarios subyacente. No existe una propiedad global denominada TypedArray, ni existe un constructor TypedArray directamente visible. En cambio, hay una serie de diferentes propiedades globales, cuyos valores son constructores de arreglos tipados para tipos de elementos específicos, que se enumeran a continuación. En las siguientes páginas, encontrarás propiedades y métodos comunes que se pueden utilizar con cualquier arreglo tipado que contenga elementos de cualquier tipo.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-constructor.html")}}
+ + + +
+
+ +

Descripción

+ +

ECMAScript 2015 define un constructor TypedArray que sirve como [[Prototype]] de todos los constructores TypedArray. Este constructor no está expuesto directamente: no existe una propiedad global %TypedArray% o TypedArray. Solo es accesible directamente a través de Object.getPrototypeOf(Int8Array) y similares. Todos los constructores de TypedArray heredan propiedades comunes de la función constructora %TypedArray%. Además, todos los prototipos de arreglos con tipo (TypedArray.prototype) tienen %TypedArray%.prototype como su [[Prototype]].

+ +

El constructor %TypedArray% por sí solo no es particularmente útil. Llamarlo o usarlo en una expresión new arrojará un {{jsxref("TypeError")}}, excepto cuando se usa durante la creación de objetos en motores JS que admiten subclases. Actualmente no existen tales motores, por lo que %TypedArray% solo es útil para rellenar funciones o propiedades en todos los constructores TypedArray.

+ +

Al crear una instancia de TypedArray (p. ej., Int8Array), se crea un arreglo de búfer internamente en la memoria o, si se proporciona un objeto ArrayBuffer como argumento del constructor, entonces se usa en su lugar. La dirección del búfer se guarda como una propiedad interna de la instancia y todos los métodos de %TypedArray%.prototype, es decir, establecer el valor y obtener valor, etc.., operan en esa dirección del arreglo de búfer.

+ +

Objetos TypedArray

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TipoIntervalo de valoresTamaño en bytesDescripciónTipo de IDL webTipo C equivalente
{{jsxref("Int8Array")}}-128 a 1271Dos enteros complementarios de 8 bits con signobyteint8_t
{{jsxref("Uint8Array")}}0 a 2551Entero de 8-bit sin signooctetuint8_t
{{jsxref("Uint8ClampedArray")}}0 a 2551Entero de 8 bits sin signo (sujeto)octetuint8_t
{{jsxref("Int16Array")}}-32768 a 327672Dos enteros complementarios de 16 bits con signoshortint16_t
{{jsxref("Uint16Array")}}0 a 655352Entero de 16 bits sin signoShort sin signouint16_t
{{jsxref("Int32Array")}}-2147483648 a 21474836474dos enteros complementarios de 32 bits con signolongint32_t
{{jsxref("Uint32Array")}}0 a 42949672954Enteros de 32 bits sin signolong sin signouint32_t
{{jsxref("Float32Array")}}1.2×10-38 a 3.4×10384Número de coma flotante IEEE de 32 bits (7 dígitos significativos, p. ej., 1.1234567)float sin restriccionesfloat
{{jsxref("Float64Array")}}5.0×10-324 a 1.8×103088Número de coma flotante IEEE de 64 bits (16 dígitos significativos, p. Ej., 1.123...15)doble sin restriccionesdouble
{{jsxref("BigInt64Array")}}-263 a 263-18Dos enteros complementarios de 64 bits con signobigintint64_t (long long con signo)
{{jsxref("BigUint64Array")}}0 a 264-18Entero de 64 bits sin signobigintuint64_t (long long sin signo)
+ +

Constructor

+ +

No se puede crear una instancia de este objeto directamente. En su lugar, crea una instancia de un arreglo de un tipo particular, tal como {{jsxref("Int8Array")}} o {{jsxref("BigInt64Array")}}. Todos estos objetos tienen una sintaxis común para sus constructores:

+ +
new TypedArray();
+new TypedArray(length);
+new TypedArray(typedArray);
+new TypedArray(object);
+new TypedArray(buffer [, byteOffset [, length]]);
+
+ +

Donde TypedArray es un constructor para uno de los tipos concretos.

+ +

Parámetros

+ +
+
length
+
Cuando se llama con un argumento length, se crea un búfer de arreglo interno en la memoria, de tamaño length multiplicado por BYTES_PER_ELEMENT bytes, que contienen ceros.
+
typedArray
+
Cuando se llama con un argumento typedArray, que puede ser un objeto de cualquiera de los tipos de arreglo con tipo (como Int32Array), el typedArray se copia en un nuevo arreglo tipado. Cada valor en typedArray se convierte al tipo correspondiente del constructor antes de ser copiado en el nuevo arreglo. La longitud del nuevo arreglo tipado será la misma que la longitud del argumento typedArray.
+
object
+
Cuando se llama con un argumento object, se crea un nuevo arreglo tipado como si fuera el método TypedArray.from().
+
buffer, byteOffset, length
+
Cuando se llama con un buffer y, opcionalmente, un byteOffset y un length, se crea una nueva vista del arreglo tipado que visualiza el {{jsxref("ArrayBuffer")}} especificado. Los parámetros byteOffset y length especifican el rango de memoria que será expuesto por la vista del arreglo tipado. Si se omiten ambos, se visualiza todo el buffer; si solo se omite length, se visualiza el resto de buffer.
+
+ +

Propiedades estáticas

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT")}}
+
Devuelve un valor numérico del tamaño del elemento para los diferentes objetos TypedArray.
+
{{jsxref("TypedArray.name")}}
+
Devuelve el valor de cadena del nombre del constructor (por ejemplo, "Int8Array").
+
{{jsxref("TypedArray.@@species", "get TypedArray[@@species]")}}
+
La función constructora utilizada para crear objetos derivados.
+
{{jsxref("TypedArray.prototype")}}
+
Prototipo para objetos TypedArray.
+
+ +

Métodos estáticos

+ +
+
{{jsxref("TypedArray.from()")}}
+
Crea un nuevo TypedArray a partir de un objeto iterable o similar a un arreglo. Consulta también {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of()")}}
+
Crea un nuevo TypedArray con un número variable de argumentos. Consulta también {{jsxref("Array.of()")}}.
+
+ +

Propiedades de la instancia

+ +
+
{{jsxref("TypedArray.prototype.buffer")}}
+
Devuelve el {{jsxref("ArrayBuffer")}} al que hace referencia el arreglo tipado. Corregido en el momento de la construcción y, por lo tanto, de solo lectura.
+
{{jsxref("TypedArray.prototype.byteLength")}}
+
Devuelve la longitud (en bytes) del arreglo tipado. Corregido en el momento de la construcción y, por lo tanto, de solo lectura.
+
{{jsxref("TypedArray.prototype.byteOffset")}}
+
Devuelve el desplazamiento (en bytes) del arreglo tipado desde el inicio de su {{jsxref("ArrayBuffer")}}. Corregido en el momento de la construcción y, por lo tanto, de solo lectura.
+
{{jsxref("TypedArray.prototype.length")}}
+
Devuelve el número de elementos contenidos en el arreglo tipado. Corregido en el momento de la construcción y, por lo tanto, de solo lectura.
+
+ +

Métodos de instancia

+ +
+
{{jsxref("TypedArray.prototype.copyWithin()")}}
+
Copia una secuencia de elementos de arreglo dentro del arreglo. Consulta también {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.prototype.entries()")}}
+
Devuelve un nuevo objeto Array Iterator que contiene los pares clave/valor para cada índice del arreglo. Consulta también {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.prototype.every()")}}
+
Comprueba si todos los elementos del arreglo pasan la prueba proporcionada por una función. Consulta también {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.prototype.fill()")}}
+
Rellena todos los elementos de un arreglo desde un índice inicial hasta un índice final con un valor estático. Consulta también {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.prototype.filter()")}}
+
Crea un nuevo arreglo con todos los elementos de este arreglo para la cual la función de filtrado proporcionada devuelve true. Consulta también {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.prototype.find()")}}
+
Devuelve el valor encontrado en el arreglo, si un elemento del arreglo satisface la función de prueba proporcionada, o undefined si no se encuentra. Consulta también {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.prototype.findIndex()")}}
+
Devuelve el índice encontrado en el arreglo, si un elemento del arreglo satisface la función de prueba proporcionada o -1 si no se encuentra. Consulta también {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.prototype.forEach()")}}
+
Llama a una función para cada elemento del arreglo. Consulta también {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.prototype.includes()")}}
+
Determina si un arreglo tipado incluye un determinado elemento, devolviendo true o false según corresponda. Consulta también {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.prototype.indexOf()")}}
+
Devuelve el primer (mínimo) índice de un elemento dentro del arreglo igual al valor especificado, o -1 si no se encuentra ninguno. Consulta también {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.prototype.join()")}}
+
Une todos los elementos de un arreglo en una cadena. Consulta también {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.prototype.keys()")}}
+
Devuelve un nuevo Array Iterator que contiene las claves para cada índice del arreglo. Consulta también {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.prototype.lastIndexOf()")}}
+
Devuelve el último (mayor) índice de un elemento dentro del arreglo igual al valor especificado, o -1 si no se encuentra ninguno. Consulta también {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.prototype.map()")}}
+
Crea un nuevo arreglo con los resultados de llamar a una función proporcionada en cada elemento de este arreglo. Consulta también {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.prototype.reduce()")}}
+
Aplica una función contra un acumulador y cada valor del arreglo (de izquierda a derecha) para reducirlo a un solo valor. Consulta también {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.prototype.reduceRight()")}}
+
Aplica una función contra un acumulador y cada valor del arreglo (de derecha a izquierda) para reducirlo a un solo valor. Consulta también {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.prototype.reverse()")}}
+
Invierte el orden de los elementos de un arreglo: el primero se convierte en el último y el último en el primero. Consulta también {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.prototype.set()")}}
+
Almacena múltiples valores en el arreglo tipado, leyendo valores de entrada de un arreglo especificado.
+
{{jsxref("TypedArray.prototype.slice()")}}
+
Extrae una sección de un arreglo y devuelve un nuevo arreglo. Consulta también {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.prototype.some()")}}
+
Devuelve true si al menos un elemento de este arreglo satisface la función de prueba proporcionada. Consulta también {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.prototype.sort()")}}
+
Ordena los elementos de un arreglo en su lugar y devuelve el arreglo. Consulta también {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.prototype.subarray()")}}
+
Devuelve un nuevo TypedArray del índice del elemento inicial y final dado.
+
{{jsxref("TypedArray.prototype.values()")}}
+
Devuelve un nuevo objeto Array Iterator que contiene los valores de cada índice del arreglo. Consulta también {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.prototype.toLocaleString()")}}
+
Devuelve una cadena localizada que representa el arreglo y sus elementos. Consulta también {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.prototype.toString()")}}
+
Devuelve una cadena que representa el arreglo y sus elementos. Consulta también {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.prototype.@@iterator()", "TypedArray.prototype[@@iterator]()")}}
+
Devuelve un nuevo objeto Array Iterator que contiene los valores de cada índice del arreglo.
+
+ +

Ejemplos

+ +

Se requiere new

+ +

A partir de ECMAScript 2015, los constructores TypedArray se deben construir con el operador {{jsxref("Operators/new", "new")}}. Llamar a un constructor TypedArray como una función sin new arrojará un {{jsxref("TypeError")}}.

+ +
var dv = Int8Array([1, 2, 3]);
+// TypeError: llamar a un constructor Int8Array incorporado
+// sin new está prohibido
+ +
var dv = new Int8Array([1, 2, 3]);
+ +

Acceso a la propiedad

+ +

Puedes hacer referencia a elementos en el arreglo utilizando la sintaxis de índice de arreglo estándar (es decir, utilizando la notación entre corchetes). Sin embargo, obtener o establecer propiedades indexadas en arreglos tipados no buscará esta propiedad en la cadena de prototipos, incluso cuando los índices estén fuera de límites. Las propiedades indexadas consultarán el {{jsxref("ArrayBuffer")}} y nunca mirarán las propiedades del objeto. Aún puedes usar propiedades con nombre, al igual que con todos los objetos.

+ +
// Configuración y obtención usando la sintaxis de arreglo estándar
+var int16 = new Int16Array(2);
+int16[0] = 42;
+[parcial]console.log(0);
+
+// No se consultan las propiedades indexadas en los prototipos (Fx 25)
+Int8Array.prototype[20] = 'foo';
+(new Int8Array(32))[20]; // 0
+// incluso cuando está fuera del límite
+Int8Array.prototype[20] = 'foo';
+(new Int8Array(8))[20]; // undefined
+// o con enteros negativos
+Int8Array.prototype[-1] = 'foo';
+(new Int8Array(8))[-1]; // undefined
+
+// Sin embargo, se permiten propiedades con nombre (Fx 30)
+Int8Array.prototype.foo = 'bar';
+(new Int8Array(32)).foo; // "bar"
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-typedarray-objects', 'TypedArray Objects')}}
+ +

Compatibilidad del navegador

+ + + +

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

+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/global_objects/uint8array/index.html b/files/es/web/javascript/reference/global_objects/uint8array/index.html new file mode 100644 index 0000000000..6402e356b0 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/uint8array/index.html @@ -0,0 +1,260 @@ +--- +title: Uint8Array +slug: Web/JavaScript/Referencia/Objetos_globales/Uint8Array +tags: + - Arreglo + - JavaScript + - array de enteros +translation_of: Web/JavaScript/Reference/Global_Objects/Uint8Array +--- +
{{JSRef}}
+ +

Los Uint8Array representan un array de enteros sin signo de 8 bits. El contenido se inicializa a 0. Una vez establecido, puedes hacer referencia a un elemento usando los métodos del objeto o usando la sintaxis de array estándar (esto es, usando la notación de corchetes).

+ +

Sintaxis

+ +
new Uint8Array(tamaño);
+new Uint8Array(typedArray);
+new Uint8Array(objeto);
+new Uint8Array(buffer [, byteOffset [, tamaño]]);
+ +

Para más información acerca de la sintaxis del constructor y sus parámetros, mire TypedArray.

+ +

Propiedades

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint8Array.BYTES_PER_ELEMENT")}}
+
Retorna un número con el valor del tamaño del elemento. 1 en el caso del Uint8Array.
+
Uint8Array.length
+
Propiedad estática de tamaño cuyo valor es 3. Para el tamaño actual (número d elementos), mire {{jsxref("TypedArray.prototype.length", "Uint8Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "Uint8Array.name")}}
+
Devuelve el nombre del constructor en un string. En el caso de Uint8Array devuelve: "Uint8Array".
+
{{jsxref("TypedArray.prototype", "Uint8Array.prototype")}}
+
Prototipo para los objetos TypedArray .
+
+ +

Métodos

+ +
+
{{jsxref("TypedArray.from", "Uint8Array.from()")}}
+
Crea un nuevo Uint8Array desde un array o un objeto iterable. Véase también {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of", "Uint8Array.of()")}}
+
Crea un  Uint8Array con un número variable de argumentos. Véase también {{jsxref("Array.of()")}}.
+
+ +

Uint8Array prototype

+ +

Todos los objetos Uint8Array son heredados de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propiedades

+ +
+
Uint8Array.prototype.constructor
+
Retorna la función que crea una instancia del prototype. Éste es el constructor por defecto de Uint8Array.
+
{{jsxref("TypedArray.prototype.buffer", "Uint8Array.prototype.buffer")}} {{readonlyInline}}
+
Retorna el {{jsxref("ArrayBuffer")}} con la referencia del Uint8Array. Fijado en el tiempo de construcción y es de sólo lectura.
+
{{jsxref("TypedArray.prototype.byteLength", "Uint8Array.prototype.byteLength")}} {{readonlyInline}}
+
Retorna el tamaño (en bytes) del array Uint8Array. Fijado en el tiempo de construcción y es de sólo lectura.
+
{{jsxref("TypedArray.prototype.byteOffset", "Uint8Array.prototype.byteOffset")}} {{readonlyInline}}
+
Retorna el offset (en bytes) del Uint8Array desde el inicio de su  {{jsxref("ArrayBuffer")}}. Fijado en el tiempo de construcción y es de sólo lectura.
+
{{jsxref("TypedArray.prototype.length", "Uint8Array.prototype.length")}} {{readonlyInline}}
+
Retorna el número de elementos contenidos en el Uint8Array. Fijado en el tiempo de construcción y es de sólo lectura.
+
+ +

Métodos

+ +
+
{{jsxref("TypedArray.copyWithin", "Uint8Array.prototype.copyWithin()")}}
+
Copia una secuencia de elementos del array dentro del array. Véase también {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "Uint8Array.prototype.entries()")}}
+
Retorna un nuevo objeto Array Iterator que contiene los pares de valores para cada índice del array. Véase también {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "Uint8Array.prototype.every()")}}
+
Prueba si todos los elementos del array cumplen las condiciones de una función. Véase también {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "Uint8Array.prototype.fill()")}}
+
Llena todos los elementos del array desde el principio hasta el final con un valor dado. Véase también {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "Uint8Array.prototype.filter()")}}
+
Crea un nuevo array con todos los elementos del array que satisfacen las condiciones de una función que devuelve verdadero. Véase también {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "Uint8Array.prototype.find()")}}
+
Devuelve el valor encontrado en el array, si un elemento del array satisface una función dada de prueba o undefined si no es encontrada. Véase también {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "Uint8Array.prototype.findIndex()")}}
+
Devuelve el índice encontrado en el array, si un elemento del array satisface una función dada de prueba o -1 si no es encontrada. Véase también {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "Uint8Array.prototype.forEach()")}}
+
Llama a una función para cada elemento del array. Véase también {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "Uint8Array.prototype.includes()")}} {{experimental_inline}}
+
Determina si un array incluye un cierto elemento, retornando truefalse según corresponda. Véase también {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "Uint8Array.prototype.indexOf()")}}
+
Devuelve el primer (menor) índice de un elemento dentro del array igual al valor especificado, o -1 si no es encontrado. Véase también {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "Uint8Array.prototype.join()")}}
+
Une todos los elementos de un array a una cadena.  Véase también {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "Uint8Array.prototype.keys()")}}
+
Retorna un nuevo Array Iterator que contiene las claves para cada índice en el array. Véase también {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "Uint8Array.prototype.lastIndexOf()")}}
+
Devuelve el último (mayor) índice de un elemento dentro del array igual al valor especificado, o -1 si no fue encontrado. Véase también {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "Uint8Array.prototype.map()")}}
+
Crea un nuevo array con los resultados de la llamada a la función indicada aplicados a cada uno de sus elementos. Véase también {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.move", "Uint8Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
+
Primera versión no-estandar de {{jsxref("TypedArray.copyWithin", "Uint8Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.reduce", "Uint8Array.prototype.reduce()")}}
+
+

Aplica una función a un acumulador y a cada valor de un array (de izquierda a derecha) para reducirlo a un único valor. Véase también {{jsxref("Array.prototype.reduce()")}}.

+
+
{{jsxref("TypedArray.reduceRight", "Uint8Array.prototype.reduceRight()")}}
+
Aplica una función a un acumulador y a cada valor de un array (de derecha a izquierda) para reducirlo a un único valor. Véase también {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "Uint8Array.prototype.reverse()")}}
+
Inverte el orden de los elementos de un array, el primero se convierte en el último y el último en el primero. See also {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "Uint8Array.prototype.set()")}}
+
Almacena múltiples valores en el array, leyendo los valores de entrada de un array específico.
+
{{jsxref("TypedArray.slice", "Uint8Array.prototype.slice()")}}
+
Extrae una porción de un array y devuelve uno nuevo. Véase también {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "Uint8Array.prototype.some()")}}
+
Devuelve true si al menos un elemento de este array satisface la función de prueba proporcionada. Véase también {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "Uint8Array.prototype.sort()")}}
+
Ordena los elementos de un array localmente y devuelve el array. Véase también {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "Uint8Array.prototype.subarray()")}}
+
Retorna un nuevo Uint8Array desde el índice de elementos iniciales y finales proporcionados.
+
{{jsxref("TypedArray.values", "Uint8Array.prototype.values()")}}
+
Retorna un nuevo objeto Array Iterator que contiene los valores para cada índice en el array. Véase también {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "Uint8Array.prototype.toLocaleString()")}}
+
Devuelve una cadena localizada que representa el array y sus elementos. Véase también {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "Uint8Array.prototype.toString()")}}
+
Retorna una cadena representando el array sus elementos. Véase también {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "Uint8Array.prototype[@@iterator]()")}}
+
Retorna un nuevo objeto Array Iterator que contiene los valores para cada índice en el array.
+
+ +

Ejemplos

+ +
// Desde una longitud
+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
+
+// Desde un array
+var arr = new Uint8Array([21,31]);
+console.log(arr[1]); // 31
+
+// Desde otro TypedArray
+var x = new Uint8Array([21, 31]);
+var y = new Uint8Array(x);
+console.log(y[0]); // 21
+
+// Desde un ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint8Array(buffer, 1, 4);
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Sustituida por ECMAScript 6.
{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}{{Spec2('ES6')}}Definición inicial en un ECMA standard. Se especificó que new es requirerido.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad del navegador

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico7.0{{ CompatGeckoDesktop(2) }}1011.65.1
new es requerido{{CompatUnknown}}{{ CompatGeckoDesktop(44) }}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico4.0{{CompatVersionUnknown}}{{ CompatGeckoMobile(2) }}1011.64.2
new es requerido{{CompatUnknown}}{{CompatUnknown}}{{ CompatGeckoMobile(44) }}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Notas de compatibilidad

+ +

A partir de ECMAScript 2015 (ES6), los constructors de Uint8Array requiren ser construidos con un operador {{jsxref("Operators/new", "new")}}. Llamar a un contructor de Uint8Array como una función sin new, lanzará un {{jsxref("TypeError")}} de ahora en adelante.

+ +
var dv = Uint8Array([1, 2, 3]);
+// TypeError: calling a builtin Uint8Array constructor
+// without new is forbidden
+ +
var dv = new Uint8Array([1, 2, 3]);
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/global_objects/undefined/index.html b/files/es/web/javascript/reference/global_objects/undefined/index.html new file mode 100644 index 0000000000..1aa7db29b8 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/undefined/index.html @@ -0,0 +1,183 @@ +--- +title: undefined +slug: Web/JavaScript/Referencia/Objetos_globales/undefined +tags: + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/undefined +--- +
{{jsSidebar("Objects")}}
+ +

Resumen

+ +

La propiedad global undefined representa el valor primitivo {{Glossary("Undefined", "undefined")}}. Es uno de los {{Glossary("Primitive", "valores primitivos")}} de JavaScript.

+ +

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

+ +

Sintaxis

+ +
undefined
+ +

Descripción

+ +

undefined es una propiedad del objeto global, es decir, una variable de alcance global. El valor inicial de undefined es el valor primitivo {{Glossary("Undefined", "undefined")}}.this needs clarification, but that would require explaining primitive values

+ +

En navegadores modernos (JavaScript 1.8.5 / Firefox 4+), undefined es una propiedad no-configurable, no-grabable según la especificación ECMAScript 5. Aún cuando este no sea el caso, evite sobreescribirlo.

+ +

Una variable a la que no se le ha asignado valor, o no se ha declarado en absoluto (no se declara, no existe) son de tipo undefined. Un método o sentencia también devuelve undefined si la variable que se está evaluando no tiene asignado un valor. Una función devuelve undefined si no se ha {{jsxref("Sentencias/return", "devuelto")}} un valor.

+ +
+

Ten en cuenta que si no se ha declarado una variable ni explícita ni implícitamente, no puedes compararla con undefined  ya que obtendrías un ReferenceError pero puedes comparar su tipo con la cadena (String) "undefined". En el ejemplo más abajo se podrá ver cómo conseguir esto usando el operador typeof.

+
+ +
+

Aunque es posible usarlo como un {{Glossary("Identifier", "identificador")}} (nombre de variable) en cualquier otro ámbito que no sea el ámbito global (porque undefined no es una {{jsxref("Reserved_Words", "palabra reservada")}}), hacerlo es una mala idea que provocará que tú código sea difícil de mantener y depurar.

+ +
//NO HAGAS ESTO
+
+// registra "foo string"
+(function(){ var undefined = 'foo'; console.log(undefined, typeof undefined); })()
+
+// registra "foo string"
+(function(undefined){ console.log(undefined, typeof undefined); })('foo');
+
+ +

Ejemplos

+ +

Igualdad estricta y undefined

+ +

Puedes usar undefined y los operadores de igualdad y desigualdad estricta para determinar si una variable tiene un valor asignado. En el siguiente ejemplo la variable x no está inicializada, y la sentencia if se evalúa como verdadera.

+ +
var x;
+if (x === undefined) {
+   // se ejecutan estas instrucciones
+}
+else {
+   // estas instrucciones no se ejecutan
+}
+ +
+

Nota: Aquí se debe usar el operador de igualdad estricta en lugar del operador de igualdad estándar, ya que x == undefined también verifica si x es null, mientras que el de igualdad estricta no. null no es equivalente a undefined. Vea {{jsxref("Operadores/Comparison_Operators", "operadores de comparación")}} para más detalles.

+
+ +

Typeof operador y undefined

+ +

Alternativamente se puede usar {{jsxref("Operadores/typeof","typeof")}}.  Recuerda que este siempre devolverá una cadena de texto con el tipo:

+ +
var x;
+if (typeof x === 'undefined') {
+   // se ejecutan estas instrucciones
+}
+
+ +

Una razón para usar {{jsxref("Operadores/typeof","typeof")}} es que no devuelve un error si la variable no fue declarada.

+ +
// x no fue declarada antes
+if (typeof x === 'undefined') { // devuelve true
+   //se ejecutan estas instrucciones
+}
+
+if (x === undefined) { // lanza un ReferenceError
+
+}
+
+ +

Sin embargo, este tipo de técnica debe evitarse. JavaScript es un lenguaje de ámbito estático, por lo que determinar si una variable se encuentra declarada puede ser definido al ver si está declarada en un contexto de inclusión. La única excepción es el ámbito global, pero el ámbito global está vinculado al objeto global, por lo que comprobar la existencia de una variable en el contexto global puede realizarse comprobando la existencia de una propiedad del objeto global (utilizando el operador {{jsxref("Operators/in", "in")}}, por ejemplo).

+ +

Operador void y undefined

+ +

El operador {{jsxref("Operadores/void", "void")}} es una tercer alternativa.

+ +
var x;
+if (x === void 0) {
+   // se ejecutan estas instrucciones
+}
+
+// y no fue declarada antes
+if (y === void 0) {
+   // lanza un ReferenceError (a diferencia de  `typeof`)
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES1', '#sec-4.3.9', 'undefined')}}{{Spec2('ES1')}}Definición inicial. Implementado en JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.1.1.3', 'undefined')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-undefined', 'undefined')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-undefined', 'undefined')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en Navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
diff --git a/files/es/web/javascript/reference/global_objects/unescape/index.html b/files/es/web/javascript/reference/global_objects/unescape/index.html new file mode 100644 index 0000000000..48418ef48a --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/unescape/index.html @@ -0,0 +1,123 @@ +--- +title: unescape() +slug: Web/JavaScript/Referencia/Objetos_globales/unescape +translation_of: Web/JavaScript/Reference/Global_Objects/unescape +--- +
{{jsSidebar("Objects")}}
+ +

La función deprecada unescape() calcula un nuevo string  en el cual secuencia de valores hexadecimales son reemplazados con el caracter que representa. La secuencia de calculo deber{ia ser introducida por una función como {{jsxref("escape")}}. Por que unescape está deprecada, usar {{jsxref("decodeURI")}} or {{jsxref("decodeURIComponent")}}.

+ +
Note: Do not use unescape to decode URIs, use decodeURI instead.
+ +

Syntax

+ +
unescape(str)
+ +

Parameters

+ +
+
str
+
A string to be decoded.
+
+ +

Description

+ +

The unescape function is a property of the global object.

+ +

Examples

+ +
unescape("abc123");     // "abc123"
+unescape("%E4%F6%FC");  // "äöü"
+unescape("%u0107");     // "ć"
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES1', '#sec-15.1.2.5', 'unescape')}}{{Spec2('ES1')}}Initial definition.
{{SpecName('ES5.1', '#sec-B.2.2', 'unescape')}}{{Spec2('ES5.1')}}Defined in the (informative) Compatibility Annex B
{{SpecName('ES6', '#sec-unescape-string', 'unescape')}}{{Spec2('ES6')}}Defined in the (normative) Annex B for Additional ECMAScript Features for Web Browsers
{{SpecName('ESDraft', '#sec-unescape-string', 'unescape')}}{{Spec2('ESDraft')}}Defined in the (normative) Annex B for Additional ECMAScript Features for Web Browsers
+ +

Browser compatibility

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/urierror/index.html b/files/es/web/javascript/reference/global_objects/urierror/index.html new file mode 100644 index 0000000000..3ba028a2ab --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/urierror/index.html @@ -0,0 +1,136 @@ +--- +title: URIError +slug: Web/JavaScript/Referencia/Objetos_globales/URIError +tags: + - Error + - JavaScript + - Reference + - URIError +translation_of: Web/JavaScript/Reference/Global_Objects/URIError +--- +
{{JSRef}}
+ +

El objeto URIError  representa un error cuando una función de uso URI global se usó de manera incorrecta.

+ +

Syntax

+ +
new URIError([message[, fileName[, lineNumber]]])
+ +

Parámetros

+ +
+
message
+
Opcional. Descripción del error legible para una persona.
+
fileName {{non-standard_inline}}
+
Opcional. El nombre del archivo que contien el código causante de la excepción.
+
lineNumber {{non-standard_inline}}
+
Opcional. El número de línea del código que ha causado la excepción.
+
+ +

Description

+ +

Se envía URIError  cuando las fuciones de uso del URI global pasan pro un URI con formato incorrecto.

+ +

Properties

+ +
+
{{jsxref("URIError.prototype")}}
+
Permite agregar propiedades a un objeto URIError
+
+ +

Methods

+ +

El URIError global no contiene métodos propios, sin embargo, sí hereda algunos métodos a través de la cadena de prototipos.

+ +

URIError instancias

+ +

Propiedades

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

Métodos

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

Ejemplos

+ +

Recoger un 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"
+}
+
+ +

Creando un 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"
+}
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES3', '#sec-15.11.6.6', 'URIError')}}{{Spec2('ES3')}}Initial definition
{{SpecName('ES5.1', '#sec-15.11.6.6', 'URIError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-urierror', 'URIError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-urierror', 'URIError')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ +
+ + +

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

+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/global_objects/weakmap/clear/index.html b/files/es/web/javascript/reference/global_objects/weakmap/clear/index.html new file mode 100644 index 0000000000..b5c66c7714 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/weakmap/clear/index.html @@ -0,0 +1,52 @@ +--- +title: WeakMap.prototype.clear() +slug: Web/JavaScript/Referencia/Objetos_globales/WeakMap/clear +tags: + - JavaScript + - Obsolete + - Protocols + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/clear +--- +
{{JSRef}} {{obsolete_header}}
+ +

El método clear() es utilizado para suprimir todos los elementos del objeto WeakMap, sin embargo, ya no es parte de ECMAScript, ni de sus implementaciones.

+ +

Sintaxis

+ +
wm.clear();
+ +

Ejemplos

+ +

Utilización del método 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
+
+ +

Especificaciones

+ +

No es parte de ninguna especificación actual o borrador. Este método fue parte de ECMAScript 6 como un bosquejo hasta la revisión 28 (versión de Octubre 14, 2014), sin embargo ha sido eliminado en versiones posteriores. No es parte de la última versión estándar.

+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.WeakMap.clear")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/weakmap/delete/index.html b/files/es/web/javascript/reference/global_objects/weakmap/delete/index.html new file mode 100644 index 0000000000..7f4933eb0b --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/weakmap/delete/index.html @@ -0,0 +1,124 @@ +--- +title: WeakMap.prototype.delete() +slug: Web/JavaScript/Referencia/Objetos_globales/WeakMap/delete +tags: + - ECMAScript6 + - JavaScript + - Prototype + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/delete +--- +
{{JSRef}}
+ +

El método delete() elimina un elemento específico del objeto WeakMap .

+ +

Sintaxis

+ +
wm.delete(key);
+ +

Parámetros

+ +
+
identificador (key)
+
Requerido. El identificador del elemento a eliminar en el objeto WeakMap.
+
+ +

Valor de retorno

+ +

true si el elemento del objeto WeakMap ha sido eliminado correctamente. Y false si la llave a eliminar no fue encontrada en el objeto WeakMap o bien, si la llave no es un objeto.

+ +

Ejemplos

+ +

Utilización del método delete 

+ +
var wm = new WeakMap();
+wm.set(window, "foo");
+
+wm.delete(window); // Devuelve true. Eliminado correctamente.
+
+wm.has(window);    // Devuelve false. El elemento window ya no es parte de WeakMap.
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-weakmap.prototype.delete', 'WeakMap.prototype.delete')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-weakmap.prototype.delete', 'WeakMap.prototype.delete')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support36{{CompatGeckoDesktop("6.0")}}11237.1
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatGeckoMobile("6.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Notas especificas de Firefox

+ + + +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/weakmap/get/index.html b/files/es/web/javascript/reference/global_objects/weakmap/get/index.html new file mode 100644 index 0000000000..e60e34f8f1 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/weakmap/get/index.html @@ -0,0 +1,80 @@ +--- +title: WeakMap.prototype.get() +slug: Web/JavaScript/Referencia/Objetos_globales/WeakMap/get +tags: + - ECMAScript6 + - JavaScript + - Method + - Prototype + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/get +--- +
{{JSRef}}
+ +

El método get() devuelve un elemento específico del objeto WeakMap.

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-get.html")}}
+ + + +

Sintaxis

+ +
wm.get(key);
+ +

Parámetros

+ +
+
key
+
Requerido. Es la llave del elemento a retornar desde el objeto WeakMap.
+
+ +

Valores devueltos

+ +

El elemento asociado con la llave específica en el objeto WeakMap. Si la llave no está presente, devolverá {{jsxref("undefined")}}.

+ +

Ejemplos

+ +

Usando el método get 

+ +
var wm = new WeakMap();
+wm.set(window, 'foo');
+
+wm.get(window); // Devuelve "foo".
+wm.get('baz');  // Devuelve undefined.
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES2015', '#sec-weakmap.prototype.get', 'WeakMap.prototype.get')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-weakmap.prototype.get', 'WeakMap.prototype.get')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.WeakMap.get")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/weakmap/has/index.html b/files/es/web/javascript/reference/global_objects/weakmap/has/index.html new file mode 100644 index 0000000000..dd978ede16 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/weakmap/has/index.html @@ -0,0 +1,83 @@ +--- +title: WeakMap.prototype.has() +slug: Web/JavaScript/Referencia/Objetos_globales/WeakMap/has +tags: + - ECMAScript6 + - JavaScript + - Method + - Protocols + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/has +--- +
{{JSRef}}
+ +

El método has() devuelve un boleano indicando ya sea, si el elemento con la llave específica existe o no en el objeto WeakMap.

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-has.html")}}
+ + + +

Sintaxis

+ +
wm.has(key);
+ +

Parámetros

+ +
+
identificador (key)
+
Requerido. La llave del elemento a comprobar en el objeto WeakMap.
+
+ +

Valor devuelto

+ +
+
Boolean
+
Devuelve true si el elemento con la llave específica existe en el objeto WeakMap; de no encontrarse, devolverá false.
+
+ +

Ejemplos

+ +

Utilización del método has 

+ +
var wm = new WeakMap();
+wm.set(window, 'foo');
+
+wm.has(window); // Devuelve true
+wm.has('baz');  // Devuelve false
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES2015', '#sec-weakmap.prototype.has', 'WeakMap.prototype.has')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-weakmap.prototype.has', 'WeakMap.prototype.has')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.WeakMap.has")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/weakmap/index.html b/files/es/web/javascript/reference/global_objects/weakmap/index.html new file mode 100644 index 0000000000..0fed17e5ca --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/weakmap/index.html @@ -0,0 +1,278 @@ +--- +title: WeakMap +slug: Web/JavaScript/Referencia/Objetos_globales/WeakMap +tags: + - ECMAScript 2015 + - JavaScript + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap +--- +
{{JSRef}}
+ +

El objeto WeakMap es una colección de pares clave/valor en la que las claves son objetos y los valores son valores arbitrarios.

+ +

Sintaxis

+ +
new WeakMap([iterable])
+
+ +

Parámetros

+ +
+
iterable
+
Iterable es un Array u otro objeto iterable cuyos elementos son pares clave-valor (Arrays de dos elementos). Cada par clave-valor será añadido al nuevo WeakMap. null es tratado como undefined.
+
+ +

Descripción

+ +

Las claves de los WeakMaps solamente pueden ser del tipo Object. Los {{Glossary("Primitive", "Primitive data types")}} como claves no están permitidos (ej. un {{jsxref("Symbol")}} no pueden ser una clave de WeakMap).

+ +

¿Por qué WeakMap?

+ +

El programador de JavaScript experimentado se habrá dado cuenta que esta API podría ser implementada en JavaScript con dos arrays (uno para las claves, otro para los valores) compartidos por los cuatro métodos de la API. Dicha implementación habría tenido dos inconvenientes principales: El primero es una búsqueda O(n) (siendo n el número de claves en el mapa). El segundo es un problema de pérdida de memoria. Con mapas escritos manualmente, el array de las claves mantendría referencias a la objetos clave, impidiéndoles ser recolectados. En los WeakMap nativos, las referencias a los objetos clave son mantenidas "débilmente", lo que quiere decir que no impiden la recolección de basura en caso de que no haya otras referencias al objeto.

+ +

Dado que las referencias son débiles, las claves de WeakMap no son enumerables (ej: no existe un método que te devuelva la lista de las claves). Si existiera, la lista dependería de la recolección de basura, introduciendo indeterminismo. Si quieres una lista de las claves, se debe usar un  {{jsxref("Map")}} o mantenerla tu mismo.

+ +

Propiedades

+ +
+
WeakMap.length
+
El valor de la propiedad length es 0.
+
{{jsxref("WeakMap.prototype")}}
+
Representa el prototipo para el nuevo constructor WeakMap. Permite añadir propiedades a todos los objetos WeakMap.
+
+ +

Instancias de WeakMap

+ +

Todas las instancias de WeakMap heredan de {{jsxref("WeakMap.prototype")}}.

+ +

Propiedades

+ +

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

+ +

Métodos

+ +

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

+ +

Ejemplos

+ +

Usando WeakMap

+ +
var wm1 = new WeakMap(),
+    wm2 = new WeakMap(),
+    wm3 = new WeakMap();
+var o1 = {},
+    o2 = function(){},
+    o3 = window;
+
+wm1.set(o1, 37);
+wm1.set(o2, "azerty");
+wm2.set(o1, o2); // un valor puede ser cualquier cosa, incluidos objetos o funciones
+wm2.set(o3, undefined);
+wm2.set(wm1, wm2); // claves y valores pueden ser objetos cualesquiera. !Incluso WeakMaps!
+
+wm1.get(o2); // "azerty"
+wm2.get(o2); // undefined, porque no hay valor para o2 en wm2
+wm2.get(o3); // undefined, porque es es el valor del conjunto
+wm1.has(o2); // true
+wm2.has(o2); // false
+wm2.has(o3); // true (incluso si el valor es 'undefined')
+
+wm3.set(o1, 37);
+wm3.get(o1); // 37
+
+wm1.has(o1);   // true
+wm1.delete(o1);
+wm1.has(o1);   // false
+
+
+ +

Implementando una clase tipo-WeakMap con un método .clear()

+ +

Con propósito expositivo, el siguiente ejemplo usa el nuevo costruct class  de ECMAScript 2015, que actualmente no ha sido implementado de forma amplia.

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

Especificaciones

+ + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-weakmap-objects', 'WeakMap')}}{{Spec2('ES2015')}}Definición inicial.
+ +

Compatibilidad de navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (SpiderMonkey)Internet ExplorerOperaSafari
Soporte básico36{{CompatGeckoDesktop("6.0")}}11{{ CompatOpera(23) }}7.1
new WeakMap(iterable)38{{CompatGeckoDesktop("36")}}{{CompatNo}}{{ CompatOpera(25) }}{{CompatNo}}
clear()36{{CompatGeckoDesktop("20.0")}}11{{ CompatOpera(23) }}7.1
Constructor argument: new WeakMap(null){{CompatVersionUnknown}}{{CompatGeckoDesktop("37")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Monkey-patched set() in Constructor{{CompatVersionUnknown}}{{CompatGeckoDesktop("37")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
WeakMap() without new throws{{CompatVersionUnknown}}{{CompatGeckoDesktop("42")}}11{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidFirefox Mobile (SpiderMonkey)IE MobileOpera MobileSafari Mobile
Soporte básico35{{CompatGeckoMobile("6.0")}}{{CompatNo}}{{CompatNo}}iOS 8
new WeakMap(iterable)38{{CompatGeckoMobile("36")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
clear()35{{CompatGeckoMobile("20.0")}}{{CompatNo}}{{CompatNo}}iOS 8
Constructor argument: new WeakMap(null){{CompatUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("37")}}{{CompatUnknown}}{{CompatUnknown}}
Monkey-patched set() in Constructor{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("37")}}{{CompatUnknown}}{{CompatUnknown}}
WeakMap() without new throws{{CompatUnknown}}{{CompatGeckoMobile("42")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/global_objects/weakmap/set/index.html b/files/es/web/javascript/reference/global_objects/weakmap/set/index.html new file mode 100644 index 0000000000..0dd654e6ef --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/weakmap/set/index.html @@ -0,0 +1,91 @@ +--- +title: WeakMap.prototype.set() +slug: Web/JavaScript/Referencia/Objetos_globales/WeakMap/set +tags: + - ECMAScript6 + - JavaScript + - Method + - Protocols + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/set +--- +
{{JSRef}}
+ +

El método set() añade un nuevo elemento con su key y value específicos al objeto WeakMap.

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-set.html")}}
+ + + +

Sintaxis

+ +
wm.set(key, value);
+ +

Parámetros

+ +
+
indentificador (key)
+
Requerido. El identificador (objeto) del elemento a añadir al objeto WeakMap.
+
valor (value)
+
Requerido. El valor del elemento a añadir al objeto WeakMap.
+
+ +

Valor devuelto

+ +

El objeto WeakMap.

+ +

Ejemplos

+ +

Utilización del método set 

+ +
var wm = new WeakMap();
+var obj = {};
+
+// Agregando nuevos elementos a WeakMap
+wm.set(obj, 'foo').set(window, 'bar'); // encadenamiento
+// Actualiza el un elemento en el objeto WeakMap
+wm.set(obj, 'baz');
+
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES2015', '#sec-weakmap.prototype.set', 'WeakMap.prototype.set')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-weakmap.prototype.set', 'WeakMap.prototype.set')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.builtins.WeakMap.set")}}

+ +

Notas específicas de Firefox

+ + + +

Vea también

+ + diff --git a/files/es/web/javascript/reference/global_objects/weakset/index.html b/files/es/web/javascript/reference/global_objects/weakset/index.html new file mode 100644 index 0000000000..ab2af60090 --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/weakset/index.html @@ -0,0 +1,227 @@ +--- +title: WeakSet +slug: Web/JavaScript/Referencia/Objetos_globales/WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet +--- +
{{JSRef}}
+ +

El objeto WeakSet  te deja almacenar y mantener objectos debilmente en una colección.

+ +

Sintaxis

+ +
 new WeakSet([iterable]);
+ +

Parametros

+ +
+
iterable
+
Si un  objeto interable es pasado, todos sus elementos se agregarán al nuevo WeakSet. null es tratado como undefined.
+
+ +

Descripción

+ +

 

+ +

Los objetos WeakSet son colecciones de objetos. Un objecto en WeakSet solo puede ser agregado una vez; Esto quiere decir que es unico en la coleccion WeakSet.

+ +

Las principales diferencias con el objeto {{jsxref("Set")}} son:

+ + + +

Properties

+ +
+
WeakSet.length
+
El valor de la propiedad length  es 0.
+
{{jsxref("WeakSet.prototype")}}
+
Representa el prototipo para el constructor Set . Permite la adición de propiedades a todos los objetos WeakSet
+
+ +

WeakSet instances

+ +

Todas las instancias a WeakSet son heredadas de {{jsxref("WeakSet.prototype")}}.

+ +

Propiedades

+ +

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

+ +

Métodos

+ +

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

+ +

Ejemplos

+ +

Usando el objetoWeakSet 

+ +
var ws = new WeakSet();
+var obj = {};
+var foo = {};
+
+ws.add(window);
+ws.add(obj);
+
+ws.has(window); // true
+ws.has(foo);    // false, foo no fue agregado al conjunto
+
+ws.delete(window); // elimina window del conjunto
+ws.has(window);    // false, window fue eliminado
+
+ +

Especificaciónes

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-weakset-objects', 'WeakSet')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-weakset-objects', 'WeakSet')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad de navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(36)}}12{{ CompatGeckoDesktop(34) }}{{CompatNo}}{{ CompatOpera(23) }}{{CompatSafari(9)}}
new WeakSet(iterable)3812{{ CompatGeckoDesktop(34) }}{{CompatNo}}25{{CompatSafari(9)}}
Constructor argument: new WeakSet(null){{CompatVersionUnknown}}12{{CompatGeckoDesktop("37")}}{{CompatNo}}{{CompatUnknown}}{{CompatSafari(9)}}
Monkey-patched add() in Constructor{{CompatVersionUnknown}}12{{CompatGeckoDesktop("37")}}{{CompatNo}}{{CompatUnknown}}{{CompatSafari(9)}}
Obsolete clear() method removed{{CompatChrome(43)}}12{{CompatGeckoDesktop(46)}}{{CompatNo}}{{CompatOpera(30)}}{{CompatSafari(9)}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatVersionUnknown}}{{ CompatGeckoMobile(34) }}{{CompatNo}}{{CompatNo}}9
new WeakMap(iterable){{CompatNo}}{{CompatVersionUnknown}}{{ CompatGeckoMobile(34) }}{{CompatNo}}{{CompatNo}}9
Constructor argument: new WeakSet(null){{CompatUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatUnknown}}9
Monkey-patched add() in Constructor{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatUnknown}}9
Obsolete clear() method removed{{CompatNo}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatNo}}{{CompatUnknown}}9
+
+ +

Tambien ver

+ + diff --git a/files/es/web/javascript/reference/global_objects/webassembly/index.html b/files/es/web/javascript/reference/global_objects/webassembly/index.html new file mode 100644 index 0000000000..80542d763d --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/webassembly/index.html @@ -0,0 +1,120 @@ +--- +title: WebAssembly +slug: Web/JavaScript/Referencia/Objetos_globales/WebAssembly +tags: + - API + - Experimental + - JavaScript + - Objeto + - Referencia + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly +--- +
{{JSRef}}
+ +

El objeto WebAssembly de JavaScript actua como un namespace para todas las funcionalidades realcionados con WebAssembly.

+ +

A diferencia de otros objetos globales, WebAssembly no tiene un constructor (no tiene una función para crear el objeto). Puedes ser comparado con el objeto {{jsxref("Math")}}, que también es un namespace, para funciones y constantes matemáticas, o también con {{jsxref("Intl")}} que es un namespace para internacionalización y otras funciones de idioma.

+ +

Descripción

+ +

Los usos primarios para el objeto WebAssembly son:

+ + + +

Métodos

+ +
+
{{jsxref("WebAssembly.instantiate()")}}
+
El API primaria para compilar e instanciar código WebAssembly, ambos regresan un Module y el primero Instance.
+
{{jsxref("WebAssembly.instantiateStreaming()")}}
+
Compila e instancia un módulo WebAssembly directamente desde un flujo de origen subyacente, ambos regresan un Module y el primero Instance.
+
{{jsxref("WebAssembly.compile()")}}
+
Compila un {{jsxref("WebAssembly.Module")}} desde el código binario de un WebAssembly, manteniendo la creación de la instancia como un objeto separado.
+
{{jsxref("WebAssembly.compileStreaming()")}}
+
compila un {{jsxref("WebAssembly.Module")}} directamente desde un flujo de origen subyacente, manteniendo la creación de la instancia como un objeto sepraado.
+
{{jsxref("WebAssembly.validate()")}}
+
Valida un arreglo con tipo de código binario de un WebAssembly, regresando si los bytes son código válido WebAssembly (true) o de lo contrario (false).
+
+ +

Constructores

+ +
+
{{jsxref("WebAssembly.Module()")}}
+
Crea un nuevo objeto WebAssembly Module.
+
{{jsxref("WebAssembly.Instance()")}}
+
Crear un nuevo objeto WebAssembly Instance.
+
{{jsxref("WebAssembly.Memory()")}}
+
Crear un nuevo objeto WebAssembly Memory.
+
{{jsxref("WebAssembly.Table()")}}
+
Crear un nuevo objeto WebAssembly Table.
+
{{jsxref("WebAssembly.CompileError()")}}
+
Crear un nuevo objeto WebAssembly CompileError.
+
{{jsxref("WebAssembly.LinkError()")}}
+
Crear un nuevo objeto WebAssembly LinkError.
+
{{jsxref("WebAssembly.RuntimeError()")}}
+
Crear un nuevo objeto WebAssembly RuntimeError.
+
+ +

Ejemplos

+ +

Después de obtener algún bytecode de WebAssembly usando la sentencia fetch, nosotros compilamos e instanciamos el módulo usando la función {{jsxref("WebAssembly.instantiate()")}} , importando una función de JavaScript en el WebAssembly Module en el proceso. Esta premisa resuelve a un objeto (result) que contenga un objeto Module compilado y un objeto Instance . Entonces tenemos una llamada a Exported WebAssembly function que es exportada por Instance.

+ +
var importObject = {
+  imports: {
+    imported_func: function(arg) {
+      console.log(arg);
+    }
+  }
+};
+
+fetch('simple.wasm').then(response =>
+  response.arrayBuffer()
+).then(bytes =>
+  WebAssembly.instantiate(bytes, importObject)
+).then(result =>
+  result.instance.exports.exported_func()
+);
+ +
+

Nota: Ver index.html en GitHub (view it live also) para un ejemplo que hace uso de la función fetchAndInstantiate().

+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('WebAssembly JS', '#the-webassembly-object', 'WebAssembly')}}{{Spec2('WebAssembly JS')}}Definición inicial del borrador.
+ +

Compatibilidad de Navegadores

+ +
+ + +

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

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/index.html b/files/es/web/javascript/reference/index.html new file mode 100644 index 0000000000..29d75a4161 --- /dev/null +++ b/files/es/web/javascript/reference/index.html @@ -0,0 +1,31 @@ +--- +title: Referencia de JavaScript +slug: Web/JavaScript/Referencia +tags: + - JavaScript +translation_of: Web/JavaScript/Reference +--- +

{{JsSidebar}}

+ +

Objetos globales

+ +
{{page('/es/docs/Web/JavaScript/Referencia/Objetos_globales', 'Objetos_est.C3.A1ndar_(por_categor.C3.ADa)')}}
+ +

Sentencias

+ +

{{page('/es/docs/Web/JavaScript/Referencia/Sentencias', 'Statements_and_declarations_by_category')}}

+ +

Expresiónes y Operadores

+ +

{{page('/es/docs/Web/JavaScript/Referencia/Operadores', 'Expressions_and_operators_by_category')}}

+ +

Gramática léxica

+ + + +

Apéndice - Características Desaprobadas

+ +

Original Document At: http://devedge-temp.mozilla.org/libr...1.5/reference/

diff --git a/files/es/web/javascript/reference/iteration_protocols/index.html b/files/es/web/javascript/reference/iteration_protocols/index.html new file mode 100644 index 0000000000..7d8d31f2cd --- /dev/null +++ b/files/es/web/javascript/reference/iteration_protocols/index.html @@ -0,0 +1,320 @@ +--- +title: Protocolos de Iteración +slug: Web/JavaScript/Referencia/Iteration_protocols +tags: + - ECMAScript6 + - Experimental + - Intermedio + - Iterable + - Iterador + - JavaScript +translation_of: Web/JavaScript/Reference/Iteration_protocols +--- +
{{jsSidebar("More")}}
+ +
Las nuevas características de ECMAScript 6 no solo están asociadas a cambios y adiciones de sintaxis o a nuevos objetos nativos, sino también a protocolos. Dichos protocolos puede ser implementados por cualquier objeto en relación a algunas convenciones.
+ +
 
+ +
Existen dos protocolos: El protocolo iterable y el protocolo iterador.
+ +
 
+ +

El protocolo iterable

+ +

El protocolo iterable le permite a los objetos en JavaScript definir o personalizar su comportamiento de iteración, como por ejemplo qué valores son iterados dentro de una sentencia {{jsxref("Statements/for...of", "for..of")}}. Algunos objetos nativos, como {{jsxref("Array")}} o {{jsxref("Map")}}, tienen un comportamiento de iteración por defecto, mientras otros objetos (como por ejemplo {{jsxref("Object")}}) no.

+ +

Para ser iterable, un objeto debe implementar el método @@iterator, lo cual significa que el objeto (o uno de los objetos dentro de su cadena de prototipos) debe tener una propiedad con un identificador {{jsxref("Symbol")}}.iterator:

+ + + + + + + + + + + + + + +
PropiedadValor
[Symbol.iterator]Una función sin argumentos que retorna un objeto, de acuerdo al protocolo iterador.
+ +

Siempre que un objeto necesite ser iterado (como al comienzo de un for..of loop), su método @@iterator es llamado sin argumentos, y el iterador retornado es usado para obtener los valores a ser iterados.

+ +

El protocolo iterador

+ +

El protocolo iterador define una forma estándar que permite producir una secuencia de valores (sean estos finitos o infinitos).

+ +

Un objeto es un iterador cuando este implementa un método next() con la siguiente semántica:

+ + + + + + + + + + + + +
PropiedadValor
next +

Una función sin argumentos que retorna un objeto con dos propiedades:

+ +
    +
  • done (boleano) + +
      +
    • Su valor es true si el iterador está más allá del final de la secuencia iterada. En este caso value opcionalmente especifica el valor retornado por el iterador. Los valores retornados son explicados aquí.
    • +
    • Su valor es false si el iterador pudo producir el siguiente valor en la secuencia. Esto es equivalente a no especificar la propiedad done en su totalidad.
    • +
    +
  • +
  • value - cualquier valor de JavaScript retornado por el iterador. Puede ser omitido cuando el valor de done es true.
  • +
+
+ +

Algunos iteradores son a su vez iterables:

+ +
var someArray = [1, 5, 7];
+var someArrayEntries = someArray.entries();
+
+someArrayEntries.toString();           // "[object Array Iterator]"
+someArrayEntries === someArrayEntries[Symbol.iterator]();    // true
+
+ +

Ejemplos de protocolos de iteración

+ +

Un {{jsxref("String")}} es un ejemplo de un objeto iterable nativo:

+ +
var someString = "hi";
+typeof someString[Symbol.iterator];          // "function"
+
+ +

Para objetos String su iterador por defecto retorna cada uno de sus caracteres, uno a la vez:

+ +
var iterator = someString[Symbol.iterator]();
+iterator + "";                               // "[object String Iterator]"
+
+iterator.next();                             // { value: "h", done: false }
+iterator.next();                             // { value: "i", done: false }
+iterator.next();                             // { value: undefined, done: true }
+ +

En algunas estructuras nativas del lenguaje como en el caso del operador de propagación spread operator, el mismo protocolo de iteración está presente en su parte interna:

+ +
[...someString]                              // ["h", "i"]
+ +

Podemos redefinir el comportamiento de iteración creando nuestro propio  @@iterator:

+ +
// es necesario el uso de un objeto creado a partir de la función constructora String,
+// ya que al usar un string primitivo el auto-boxing generaría una referencia temporal
+// a un iterador que luego es descartado en el unbox
+
+var someString = new String("hi");
+
+someString[Symbol.iterator] = function() {
+  return { // este es el objeto iterador que retorna un único elemento, la cadena string "bye"
+    next: function() {
+      if (this._first) {
+        this._first = false;
+        return { value: "bye", done: false };
+      } else {
+        return { done: true };
+      }
+    },
+    _first: true
+  };
+};
+
+ +

Nótese que al redefinir un @@iterator se puede afectar el comportamiento  de construcciones nativas que usan el protocolo de iteración:

+ +
[...someString];                              // ["bye"]
+someString + "";                              // "hi"
+
+ +

Ejemplos de iterables

+ +

Iterables nativos

+ +

{{jsxref("String")}}, {{jsxref("Array")}}, {{jsxref("TypedArray")}}, {{jsxref("Map")}} y {{jsxref("Set")}} son objetos iterables nativos, ya que en su objeto prototipo existe un método @@iterator.

+ +

Iterables personalizados

+ +

Podemos crear nuestros propios iterables de la siguiente manera:

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

APIs nativas que aceptan iterables

+ +

Existen varios APIs que aceptan iterables, como en el caso de: {{jsxref("Map", "Map([iterable])")}}, {{jsxref("WeakMap", "WeakMap([iterable])")}}, {{jsxref("Set", "Set([iterable])")}} y {{jsxref("WeakSet", "WeakSet([iterable])")}}:

+ +
var myObj = {};
+new Map([[1,"a"],[2,"b"],[3,"c"]]).get(2);               // "b"
+new WeakMap([[{},"a"],[myObj,"b"],[{},"c"]]).get(myObj); // "b"
+new Set([1, 2, 3]).has(3);                               // true
+new Set("123").has("2");                                 // true
+new WeakSet(function*() {
+    yield {};
+    yield myObj;
+    yield {};
+}()).has(myObj);                                         // true
+
+ +

De igual manera {{jsxref("Promise.all", "Promise.all(iterable)")}}, {{jsxref("Promise.race", "Promise.race(iterable)")}}, y {{jsxref("Array.from", "Array.from()")}}.

+ +

Sintaxis que espera un iterable

+ +

Algunas declaraciones y expresiones esperan iterables, por ejemplo el bucle for-of, el operador de propagación spread operator,  la expresión Yield*, y la asignación desestructurada destructuring assignment.

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

Iterables mal definidos

+ +

Un método @@iterator iterable que no retorne un objeto iterador no está correctamente definido, por lo tanto al ejecutarlo de esta manera podría resultar en excepciones en tiempo de ejecución y otros errores:

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

Ejemplos de iteradores

+ +

Iterador simple

+ +
function makeIterator(array){
+    var nextIndex = 0;
+
+    return {
+       next: function(){
+           return nextIndex < array.length ?
+               {value: array[nextIndex++], done: false} :
+               {done: true};
+       }
+    };
+}
+
+var it = makeIterator(['yo', 'ya']);
+
+console.log(it.next().value); // 'yo'
+console.log(it.next().value); // 'ya'
+console.log(it.next().done);  // true
+
+ +

Iterador infinito

+ +
function idMaker(){
+    var index = 0;
+
+    return {
+       next: function(){
+           return {value: index++, done: false};
+       }
+    };
+}
+
+var it = idMaker();
+
+console.log(it.next().value); // '0'
+console.log(it.next().value); // '1'
+console.log(it.next().value); // '2'
+// ...
+
+ +

Con un generador

+ +
function* makeSimpleGenerator(array){
+    var nextIndex = 0;
+
+    while(nextIndex < array.length){
+        yield array[nextIndex++];
+    }
+}
+
+var gen = makeSimpleGenerator(['yo', 'ya']);
+
+console.log(gen.next().value); // 'yo'
+console.log(gen.next().value); // 'ya'
+console.log(gen.next().done);  // true
+
+
+
+function* idMaker(){
+    var index = 0;
+    while(true)
+        yield index++;
+}
+
+var gen = idMaker();
+
+console.log(gen.next().value); // '0'
+console.log(gen.next().value); // '1'
+console.log(gen.next().value); // '2'
+// ...
+
+ +

¿Un objeto generador es un iterador o un iterable?

+ +

Un objeto iterador es tanto un iterador como un iterable:

+ +
var aGeneratorObject = function*(){
+    yield 1;
+    yield 2;
+    yield 3;
+}();
+typeof aGeneratorObject.next;
+// "function", ya que tiene un método next, por lo tanto es un iterador
+typeof aGeneratorObject[Symbol.iterator];
+// "function", ya que tiene un método @@iterator, por lo tanto es un iterable
+aGeneratorObject[Symbol.iterator]() === aGeneratorObject;
+// true, ya que su método @@iterator retorna a sí mismo (un iterador), por lo tanto es un iterable bien formado
+[...aGeneratorObject];
+// [1, 2, 3]
+
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-iteration', 'Iteration')}}{{Spec2('ES6')}}Definición inicial.
+ +

Temas relacionados

+ +

Para información adicional acerca de generadores generators en ES6, puede visitar la  página específica sobre este tema.

diff --git a/files/es/web/javascript/reference/lexical_grammar/index.html b/files/es/web/javascript/reference/lexical_grammar/index.html new file mode 100644 index 0000000000..fd6a12d8c5 --- /dev/null +++ b/files/es/web/javascript/reference/lexical_grammar/index.html @@ -0,0 +1,661 @@ +--- +title: Gramática léxica +slug: Web/JavaScript/Referencia/Gramatica_lexica +tags: + - Gramática léxica + - Guía + - JaveScript + - Literal + - Palabra clave +translation_of: Web/JavaScript/Reference/Lexical_grammar +--- +
{{JsSidebar("Más")}}
+ +

Esta página describe la gramática léxica de JavaScript. El texto fuente de los scripts de ECMAScript se escanea de izquierda a derecha y se convierte en una secuencia de elementos de entrada que son segmentos, caracteres de control, terminadores de línea, comentarios o {{Glossary("Espacio en blanco")}}. ECMAScript también define ciertas palabras clave y literales y tiene reglas para la inserción automática del punto y coma en las declaraciones finales.

+ +

Caracteres de control

+ +

Los caracteres de control no tienen representación visual, pero se utilizan para controlar la interpretación del texto.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Caracteres de control de formato Unicode
Punto de códigoNombreAbreviaturaDescripción
U+200CSeparador de ancho cero<ZWNJ>Colocado entre caracteres para evitar que se conecten a ligaduras en ciertos idiomas (Wikipedia).
U+200DConector de ancho cero<ZWJ>Colocado entre caracteres que normalmente no estarían conectados para hacer que los caracteres se rendericen usando su forma conectada en ciertos idiomas (Wikipedia).
U+FEFFMarca de orden de bytes<BOM>Se usa al comienzo del script para marcarlo como Unicode y el orden de bytes del texto (Wikipedia).
+ +

Espacio en blanco

+ +

Los caracteres de {{Glossary("Espacio_en_blanco")}} mejoran la legibilidad del texto fuente y separan los fragmentos entre sí. Estos caracteres suelen ser innecesarios para la funcionalidad del código. Las herramientas de minificación se utilizan a menudo para eliminar espacios en blanco con el fin de reducir la cantidad de datos que se deben transferir.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Caracteres de espacio en blanco
Punto de códigoNombreAbreviaturaDescripciónSecuencia de escape
U+0009Caracter de tabulación<HT>Tabulación horizontal\t
U+000BTabulación de línea<VT>Tabulación vertical\v
U+000CAvance de Página<FF>Carácter de control de salto de página (Wikipedia).\f
U+0020Espacio<SP>Espacio normal
U+00A0Espacio irrompible<NBSP>Espacio normal, pero ningún punto en el que una línea se pueda romper
OtrosOtros caracteres de espacio Unicode<USP>Espacios Unicode en Wikipedia
+ +

Terminadores de línea

+ +

Además de los caracteres de {{Glossary("Espacio_en_blanco", "espacio en blanco")}}, los caracteres de terminación de línea se utilizan para mejorar la legibilidad del texto fuente. Sin embargo, en algunos casos, los terminadores de línea pueden influir en la ejecución del código JavaScript, ya que hay algunos lugares donde están prohibidos. Los terminadores de línea también afectan el proceso de la inserción automática de punto y coma. Los terminadores de línea se corresponden con la clase \s en expresiones regulares.

+ +

Solo los siguientes puntos de código Unicode se tratan como terminadores de línea en ECMAScript, otros caracteres de salto de línea se tratan como espacios en blanco (por ejemplo, Next Line, NEL, U+0085 se consideran como espacios en blanco).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Caracteres terminadores de línea
Punto de códigoNombreAbreviaturaDescripciónSecuencia de escape
U+000AAlimentación de linea<LF>Caracter de nueva línea en sistemas UNIX.\n
U+000DRetorno de carro<CR>Caracter de nueva línea en Commodore y los primeros sistemas Mac.\r
U+2028Separador de línea<LS>Wikipedia
U+2029Separador de párrafos<PS>Wikipedia
+ +

Comentarios

+ +

Los comentarios se utilizan para agregar consejos, notas, sugerencias o advertencias al código JavaScript. Esto puede facilitar su lectura y comprensión. También se pueden utilizar para deshabilitar el código y evitar que se ejecute; esta puede ser una valiosa herramienta de depuración.

+ +

JavaScript tiene dos formas antiguas de agregar comentarios al código.

+ +

La primera forma son las dobles barras inclinadas // comentario; esta convierte en comentario todo el texto que le sigue en la misma línea. Por ejemplo:

+ +
function comment() {
+  // Este es un comentario JavaScript de una línea
+  console.log('¡Hola mundo!');
+}
+comment();
+
+ +

La segunda forma es el estilo /* */, que es mucho más flexible.

+ +

Por ejemplo, lo puedes usar en una sola línea:

+ +
function comment() {
+  /* Este es un comentario JavaScript de una línea */
+  console.log('¡Hola mundo!');
+}
+comment();
+ +

También puedes hacer comentarios de varias líneas, como este:

+ +
function comment() {
+  /* Este comentario abarca varias líneas. Aviso
+     No necesitamos cerrar el comentario hasta que terminemos. */
+  console.log('¡Hola mundo!');
+}
+comment();
+ +

También lo puedes usar en medio de una línea, si lo deseas, aunque esto puede hacer que tu código sea más difícil de leer, por lo que se debe usar con precaución:

+ +
function comment(x) {
+  console.log('¡Hola' + x /* inserta el valor de x */ + ' !');
+}
+comment('mundo');
+ +

Además, lo puedes usar para deshabilitar el código y evitar que se ejecute, envolviendo el código en un comentario, como este:

+ +
function comment() {
+  /* console.log('¡Hola mundo!'); */
+}
+comment();
+ +

En este caso, la llamada a console.log() nunca se emite, debido a que está dentro de un comentario. De esta forma se puede desactivar cualquier número de líneas de código.

+ +

Comentarios hashbang

+ +

Una sintaxis de tercer comentario especializado, el comentario hashbang, está en proceso de estandarización en ECMAScript (consulta la Propuesta de gramática Hashbang).

+ +

Un comentario hashbang se comporta exactamente como un comentario de una sola línea (//). En cambio, comienza con #! y solo son válidos al comienzo absoluto de un script o módulo. También ten en cuenta que no se permiten espacios en blanco de ningún tipo antes del #!. El comentario consta de todos los caracteres después de #! hasta el final de la primera línea; sólo se permite uno de esos comentarios.

+ +

El comentario hashbang especifica la ruta a un intérprete de JavaScript específico que deseas utilizar para ejecutar el script. Aquí tienes un sencillo ejemplo:

+ +
#!/usr/bin/env node
+
+console.log("Hola mundo");
+
+ +
+

Nota: Los comentarios hashbang en JavaScript imitan a los shebangs en Unix utilizados para ejecutar archivos con el intérprete apropiado.

+
+ +
+

Aunque BOM antes de que el comentario hashbang funcione en un navegador, no se recomienda utilizar BOM en un script con hashbang. BOM no funcionará cuando intentes ejecutar el script en Unix/Linux. Por lo tanto, usa UTF-8 sin BOM si deseas ejecutar scripts directamente desde el intérprete.

+
+ +

¡Solo debes usar el estilo de comentario #! para especificar un intérprete de JavaScript. En todos los demás casos, utiliza un comentario // (o un comentario multilínea).

+ +

Palabras clave

+ +

Palabras clave reservadas a partir de ECMAScript 2015

+ + + +

Futuras palabras clave reservadas

+ +

Las siguientes están reservadas como palabras clave futuras por la especificación ECMAScript. No tienen ninguna funcionalidad especial en la actualidad, pero es posible que lo hagan en el futuro, por lo que no se pueden utilizar como identificadores.

+ +

Estas siempre están reservadas:

+ + + +

Las siguientes solo están reservadas cuando se encuentran en código de modo estricto:

+ + + +

Las siguientes solo están reservadas cuando se encuentran en código de módulo:

+ + + +

Futuras palabras clave reservadas en estándares más antiguos

+ +

Las siguientes están reservadas como palabras clave futuras según las especificaciones de ECMAScript anteriores (ECMAScript 1 a 3).

+ + + +

Además, los literales null, true y false no se pueden utilizar como identificadores en ECMAScript.

+ +

Uso de palabras reservadas

+ +

Las palabras reservadas en realidad solo se aplican a los identificadores (frente a los nombres de identificadores). Como se describe en es5.github.com/#A.1, todos estos son IdentifierNames que no excluyen Palabras reservadas.

+ +
a.import
+a['import']
+a = { import: 'test' }.
+
+ +

Por otro lado, lo siguiente es ilegal porque es un Identificador, que es un IdentifierName sin palabras reservadas. Los identificadores se utilizan para FunctionDeclaration, FunctionExpression, VariableDeclaration y así sucesivamente. Los IdentifierNames se utilizan para MemberExpression, CallExpression y así sucesivamente.

+ +
function import() {} // Ilegal.
+ +

Identificadores con significado especial

+ +

Algunos identificadores tienen un significado especial en algunos contextos sin ser palabras clave de ningún tipo. Estos incluyen:

+ + + +

Literales

+ +

null literal

+ +

Consulta también {{jsxref("null")}} para obtener más información.

+ +
null
+ +

Booleanos literales

+ +

Consulta también {{jsxref("Boolean", "Booleano")}} para obtener más información.

+ +
true
+false
+ +

Literales numéricos

+ +

Los tipos {{jsxref("Number")}} y {{jsxref("BigInt")}} usan literales numéricos.

+ +

Decimal

+ +
1234567890
+42
+
+// Precaución al usar con un cero a la izquierda:
+0888 // 888 procesado como decimal
+0777 // procesado como octal, 511 en decimal
+
+ +

Ten en cuenta que los decimales literales pueden comenzar con un cero (0) seguido de otro dígito decimal, pero si todos los dígitos después del 0 inicial son menores que 8, el número se interpreta como un número octal. Esto no arrojará JavaScript, consulta error 957513. Consulta también la página sobre {{jsxref("parseInt", "parseInt()")}}

+ +
Exponencial
+ +

El literal exponencial decimal se especifica mediante el siguiente formato: beN; donde b es un número base (entero o flotante), seguido del caracter e (que sirve como separador o indicador de exponente) y N, que es un número exponente o potencia: un entero con signo (según las especificaciones ECMA-262 de 2019):

+ +
0e-5   // => 0
+0e+5   // => 0
+5e1    // => 50
+175e-2 // => 1.75
+1e3    // => 1000
+1e-3   // => 0.001
+
+ +

Binario

+ +

La sintaxis de números binarios utiliza un cero inicial seguido de una letra "B" latina en minúscula o mayúscula (0b o 0B). Debido a que esta sintaxis es nueva en ECMAScript 2015, consulta la tabla de compatibilidad del navegador a continuación. Si los dígitos después de 0b no son 0 o 1, se muestra el siguiente {{jsxref("SyntaxError")}}: "Faltan dígitos binarios después de 0b".

+ +
var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
+var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
+var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
+ +

Octal

+ +

La sintaxis de números octales utiliza un cero inicial seguido de una letra "O" latina en minúscula o mayúscula (0o o 0O). Debido a que esta sintaxis es nueva en ECMAScript 2015, consulta la tabla de compatibilidad del navegador a continuación. Si los dígitos después del 0o están fuera del rango (01234567), se lanza el siguiente {{jsxref("SyntaxError")}}: "Dígitos octales faltantes después del 0o".

+ +
var n = 0O755; // 493
+var m = 0o644; // 420
+
+// También es posible con solo un cero inicial (ve la nota sobre los decimales arriba)
+0755
+0644
+
+ +

Hexadecimal

+ +

La sintaxis de números hexadecimales utiliza un cero inicial seguido de una letra "X" latina en minúscula o mayúscula (0x o 0X). Si los dígitos después de 0x están fuera del rango (0123456789ABCDEF), se lanza el siguiente {{jsxref("SyntaxError")}}: "El identificador comienza inmediatamente después del literal numérico".

+ +
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
+0x123456789ABCDEF   // 81985529216486900
+0XA                 // 10
+
+ +

BigInt literal

+ +

El tipo {{jsxref("BigInt")}} es una primitiva numérica en JavaScript que puede representar números enteros con precisión arbitraria. Los BigInt literales se crean agregando n al final de un número entero.

+ +
123456789123456789n     // 123456789123456789
+0o777777777777n         // 68719476735
+0x123456789ABCDEFn      // 81985529216486895‬
+0b11101001010101010101n // 955733
+
+ +

Ten en cuenta que los números octales heredados con solo un cero a la izquierda no funcionarán para BigInt:

+ +
// 0755n
+// SyntaxError: sintaxis de BigInt no válida
+ +

Para números BigInt octales, siempre utiliza cero seguido de la letra "o" (mayúscula o minúscula):

+ +
0o755n
+ +

Para obtener más información sobre BigInt, consulta también estructuras de datos JavaScript.

+ +

Separadores numéricos

+ +

Para mejorar la legibilidad de literales numéricos, se pueden usar guiones bajos (_, U+005F) como separadores:

+ +
// separadores en números decimales
+1_000_000_000_000
+1_050.95
+
+// separadores en números binarios
+0b1010_0001_1000_0101
+
+// separadores en números octales
+0o2_2_5_6
+
+// separadores en números hexadecimales
+0xA0_B0_C0
+
+// separadores en BigInts
+1_000_000_000_000_000_000_000n
+
+ +

Ten en cuenta estas limitaciones:

+ +
 // No se permite más de un guión bajo en una fila
+100__000; // SyntaxError
+
+// No permitido al final de literales numéricos
+100_; // SyntaxError
+
+// No se puede usar después de 0
+0_1; // SyntaxError
+
+ +

Objetos literales

+ +

Consulta también {{jsxref("Object")}} e Iniciador de objeto para obtener más información.

+ +
var o = { a: 'foo', b: 'bar', c: 42 };
+
+// notación abreviada. Nueva en ES2015
+var a = 'foo', b = 'bar', c = 42;
+var o = {a, b, c};
+
+// en vez de
+var o = { a: a, b: b, c: c };
+
+ +

Arreglos literales

+ +

Consulta también {{jsxref("Array")}} para obtener más información.

+ +
[1954, 1974, 1990, 2014]
+ +

Cadenas literales

+ +

Una cadena literal es cero o más puntos de código Unicode entre comillas simples o dobles. Los puntos de código Unicode también se pueden representar mediante una secuencia de escape. Literalmente todos los puntos de código pueden aparecer en una cadena literal, excepto estos puntos de código de cierre de cita:

+ + + +

Antes de la propuesta para hacer que todo el texto JSON sea ECMA-262 válido, U+2028 <LS> y U+2029 <PS>, tampoco se permitió que aparecieran sin escape en las cadenas literales.

+ +

Cualquier punto de código puede aparecer en forma de secuencia de escape. Las cadenas literales se evalúan como valores de cadena de ECMAScript. Al generar estos valores de cadena, los puntos de código Unicode están codificados en UTF-16.

+ +
'foo'
+"bar"
+ +

Secuencias de escape hexadecimales

+ +

Las secuencias de escape hexadecimales constan de \x seguido de exactamente dos dígitos hexadecimales que representan una unidad de código o un punto de código en el rango de 0x0000 a 0x00FF.

+ +
'\xA9' // "©"
+
+ +

Secuencias de escape Unicode

+ +

Una secuencia de escape Unicode consta exactamente de cuatro dígitos hexadecimales después de \u. Representa una unidad de código en la codificación UTF-16. Para los puntos de código U+0000 a U+FFFF, la unidad de código es igual al punto de código. Los puntos de código U+10000 a U+10FFFF requieren dos secuencias de escape que representan las dos unidades de código (un par sustituto) utilizadas para codificar el carácter; el par sustituto es distinto del punto de código.

+ +

Consulta también {{jsxref("String.fromCharCode()")}} y {{jsxref("String.prototype.charCodeAt()")}}.

+ +
'\u00A9' // "©" (U+A9)
+ +

Puntos de escape de código Unicode

+ +

Un punto de código de escape Unicode consta de \u{, seguido de un punto de código en base hexadecimal, seguido de }. El valor de los dígitos hexadecimales debe estar en el rango 0 y 0x10FFFF inclusive. Los puntos de código en el rango U+10000 a U+10FFFF no necesitan representarse como un par sustituto. Se agregaron puntos de código de escape a JavaScript en ECMAScript 2015 (ES6).

+ +

Consulta también {{jsxref("String.fromCodePoint()")}} y {{jsxref("String.prototype.codePointAt()")}}.

+ +
'\u{2F804}' // CJK COMPATIBILIDAD IDEOGRÁFICA-2F804 (U+2F804)
+
+// el mismo caracter representado como un par suplente
+'\uD87E\uDC04'
+ +

Expresión regular literal

+ +

Consulta también {{jsxref("RegExp")}} para obtener más información.

+ +
/ab+c/g
+
+// Una expresión regular literal "vacía"
+// El grupo de no captura vacío es necesario
+// para evitar la ambigüedad con comentarios de una sola línea.
+/(?:)/
+ +

Plantillas literales

+ +

Consulta también cadenas de plantilla para obtener más información.

+ +
`string text`
+
+`string text line 1
+ string text line 2`
+
+`string text ${expression} string text`
+
+tag `string text ${expression} string text`
+ +

Inserción automática de punto y coma

+ +

Algunas declaraciones JavaScript se deben terminar con punto y coma y, por lo tanto, se ven afectadas por la inserción automática del punto y coma (IAPC):

+ + + +

La especificación ECMAScript menciona tres reglas de inserción de punto y coma.

+ +

1. Se inserta un punto y coma antes, cuando se encuentra un terminador de línea o "}" que no está permitido por la gramática.

+ +
{ 1 2 } 3
+
+// La IAPC lo transforma en
+
+{ 1 2 ;} 3;
+ +

2. Se inserta un punto y coma al final, cuando se detecta el final del flujo de entrada de símbolos y el analizador no puede procesar el único flujo de entrada como un programa completo.

+ +

Aquí ++ no se trata como un operador sufijo que se aplica a la variable b, porque se produce un terminador de línea entre b y ++.

+ +
a = b
+++c
+
+// IAPC lo transforma en
+
+a = b;
+++c;
+
+ +

3. Se inserta un punto y coma al final, cuando una declaración con producción restringida en la gramática va seguida de un terminador de línea. Estas declaraciones con reglas "no LineTerminator aquí" son:

+ + + +
return
+a + b
+
+// La IAPC lo transforma en
+
+return;
+a + b;
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-ecmascript-language-lexical-grammar', 'Gramática léxica')}}
+ +

Compatibilidad del navegador

+ + + +

{{Compat("javascript.grammar")}}

+ +

Progreso de la implementación

+ +

La siguiente tabla proporciona un estado de implementación diario para esta función, porque esta función aún no ha alcanzado la estabilidad entre navegadores. Los datos se generan al ejecutar las pruebas de funciones relevantes en Test262, el conjunto de pruebas estándar de JavaScript, en la compilación nocturna o en la última versión del motor JavaScript de cada navegador.

+ +
{{EmbedTest262ReportResultsTable("hashbang")}}
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/operators/addition/index.html b/files/es/web/javascript/reference/operators/addition/index.html new file mode 100644 index 0000000000..888845158a --- /dev/null +++ b/files/es/web/javascript/reference/operators/addition/index.html @@ -0,0 +1,77 @@ +--- +title: Adición (+) +slug: Web/JavaScript/Referencia/Operadores/Adición +translation_of: Web/JavaScript/Reference/Operators/Addition +--- +
{{jsSidebar("Operators")}}
+ +

El operador de adición (+) produce la suma de operandos numéricos o la concatenación de (cadenas) string.

+ +
{{EmbedInteractiveExample("pages/js/expressions-addition.html")}}
+ +
+ + + +

Sintaxis

+ +
Operator: x + y
+
+ +

Ejemplos

+ +

Adición numérica

+ +
// Número + Número -> adición
+1 + 2 // 3
+
+// Booleano + Número -> adición
+true + 1 // 2
+
+// Booleano + Booleano -> adición
+false + false // 0
+
+ +

Concatenación de (cadenas) String

+ +
// String + String -> concatenación
+'fut' + 'bol' // "futbol"
+
+// Número + String -> concatenación
+5 + 'oh' // "5oh"
+
+// String + Booleano -> concatenación
+'fut' + false // "futfalse"
+ +

Especificación

+ + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-addition-operator-plus', 'Addition operator')}}
+ +

Compatibilidad de Explorador

+ + + +

{{Compat("javascript.operators.addition")}}

+ +

También revisa

+ + diff --git a/files/es/web/javascript/reference/operators/assignment/index.html b/files/es/web/javascript/reference/operators/assignment/index.html new file mode 100644 index 0000000000..1fa4b79ac4 --- /dev/null +++ b/files/es/web/javascript/reference/operators/assignment/index.html @@ -0,0 +1,62 @@ +--- +title: Asignacion (=) +slug: Web/JavaScript/Referencia/Operadores/Asignacion +tags: + - JS + - JavaScript + - Operador de Asignacion + - Operadores JavaScript + - Referências +translation_of: Web/JavaScript/Reference/Operators/Assignment +--- +
{{jsSidebar("Operators")}}
+ +

El operador de asignación (=) se utiliza para asignar un valor a una variable. La operación de asignación evalúa el valor asignado. Es posible encadenar el operador de asignación para asignar un solo valor a múltiples variables

+ +
{{EmbedInteractiveExample("pages/js/expressions-assignment.html")}}
+ +
+ + + +

Sintaxis

+ +
Operador: x = y
+
+ +

Ejemplos

+ +

Asignación

+ +
// Asumimos las siguientes variables
+//  x = 5
+//  n = 10
+//  z = 25
+
+x = n     // La variable x contiene el valor 10
+x = n = z // x = n (es decir 10) y z pisa el valor total remplazandolo por 25
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

Compatibilidad con Navegadores

+ + + +

{{Compat("javascript.operators.assignment")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/async_function/index.html b/files/es/web/javascript/reference/operators/async_function/index.html new file mode 100644 index 0000000000..12e76e6ce5 --- /dev/null +++ b/files/es/web/javascript/reference/operators/async_function/index.html @@ -0,0 +1,102 @@ +--- +title: Expresión de función asíncrona +slug: Web/JavaScript/Referencia/Operadores/async_function +tags: + - Expresión Primaria + - JavaScript + - Operador + - función +translation_of: Web/JavaScript/Reference/Operators/async_function +--- +
{{jsSidebar("Operators")}}
+ +

La palabra clave async function puede ser utilizada para definir funciones async dento de expresiones.

+ +

También se pueden definir funciones asíncronas utilizando un enunciado de función asíncrona.

+ +

Sintaxis

+ +
async function [nombre]([param1[, param2[, ..., paramN]]]) {
+   enunciados
+}
+ +

A partir de ES2015 (ES6), también se pueden emplear funciones flecha.

+ +

Parámetros

+ +
+
name
+
El nombre de la función. Puede ser omitida, en cuy caso la función es anónima. El nombre es sólo local al cuerpo de la función The name is only local to the function body.
+
paramN
+
El nombre de un argumento a ser pasado a la función.
+
statements
+
Los enunciados que componen el cuerpo de la función.
+
+ +

Descripción

+ +

Una expresión async function es miuy similar, y casi tiene la misma sintaxis que, una {{jsxref('Statements/async_function', 'async function statement')}}. La principal diferencia entre una expresión async function y un enunciado async function es el nombre de la función, que puede ser omitido en una expresión async function para crear funciones anonymous. Una expresión async function puede ser utilizada como un {{Glossary("IIFE")}} (Expresión de función inmediatamente invocada, Immediately Invoked Function Expression) que se ejecuta tan rápido como es definida. Ver el capítulo sobre funciones para tener más información.

+ +

Ejemplos

+ +

Ejemplo sencillo

+ +
function resuelve2SegundosDespues(x) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      resolve(x);
+    }, 2000);
+  });
+};
+
+
+const agregar= async function(x) { // Expresión de una función asíncrona asignada a una variable
+  let a = await resuelve2SegundosDespues(20);
+  let b = await resuelve2SegundosDespues(30);
+  return x + a + b;
+};
+
+agregar(10).then(v => {
+  console.log(v);  // imprime 60 después de 4 segundos.
+});
+
+
+(async function(x) { // expresión de una función asíncrona utilizada como una IIFE
+  let p_a = resuelve2SegundosDespues(20);
+  let p_b = resuelve2SegundosDespues(30);
+  return x + await p_a + await p_b;
+})(10).then(v => {
+  console.log(v);  // imprime 60 después de 2 segundos.
+});
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-async-function-definitions', 'async function')}}
+ +

Compatibilidad de los navegadores

+ +
+ + +

{{Compat("javascript.operators.async_function_expression")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/await/index.html b/files/es/web/javascript/reference/operators/await/index.html new file mode 100644 index 0000000000..d1a84251f1 --- /dev/null +++ b/files/es/web/javascript/reference/operators/await/index.html @@ -0,0 +1,102 @@ +--- +title: await +slug: Web/JavaScript/Referencia/Operadores/await +translation_of: Web/JavaScript/Reference/Operators/await +--- +
{{jsSidebar("Operators")}}
+ +
El operador await es usado para esperar a una {{jsxref("Promise")}}. Sólo puede ser usado dentro de una función {{jsxref("Statements/async_function", "async function")}}.
+ +

Sintaxis

+ +
[rv] = await expression;
+ +
+
expression
+
Una {{jsxref("Promise")}} o cualquier otro valor por el cual haya que esperar.
+
rv
+
+

Regresa el valor terminado de la promesa o solamente un valor si no es unaPromise.

+
+
+ +

Descripción

+ +

La expresión await provoca que la ejecución de una función async sea pausada hasta que una Promise sea terminada o rechazada, y regresa a la ejecución de la función async después del término. Al regreso de la ejecución, el valor de la expresión await es la regresada por una promesa terminada.

+ +

Si la Promise es rechazada, el valor de la expresión await tendrá el valor de rechazo.

+ +

Si el valor de la expresión seguida del operador await  no es una promesa, será convertido a una resolved Promise.

+ +

Ejemplos

+ +

Si una Promise se pasa a una expresión await, espera a que la Promise se resuelva y devuelve el valor resuelto.

+ +
function resolveAfter2Seconds(x) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      resolve(x);
+    }, 2000);
+  });
+}
+
+async function f1() {
+  var x = await resolveAfter2Seconds(10);
+  console.log(x); // 10
+}
+f1();
+
+ +

Si el valor no es una Promise, convierte el valor a una Promise resuelta, y espera por dicho valor.

+ +
async function f2() {
+  var y = await 20;
+  console.log(y); // 20
+}
+f2();
+ +

Si la Promise es rechazada, se lanza una excepción con dicho el valor.

+ +
async function f3() {
+  try {
+    var z = await Promise.reject(30);
+  } catch(e) {
+    console.log(e); // 30
+  }
+}
+f3();
+ +

Especificaciones

+ + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ESDraft', '#sec-async-function-definitions', 'async functions')}}{{Spec2('ESDraft')}}Initial definition in ES2017.
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.operators.await")}}

+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/operators/class/index.html b/files/es/web/javascript/reference/operators/class/index.html new file mode 100644 index 0000000000..e654359035 --- /dev/null +++ b/files/es/web/javascript/reference/operators/class/index.html @@ -0,0 +1,157 @@ +--- +title: expresión class +slug: Web/JavaScript/Referencia/Operadores/class +tags: + - Classes + - ECMAScript6 + - Expression + - JavaScript + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/class +--- +
{{jsSidebar("Operators")}}
+ +

La expresión class es una forma de definir una clase en ECMAScript 2015 (ES6). Similar a las funciones, las expresiones de clase pueden ser nombradas o no. Si se nombran, el nombre de la clase es local sólo en el cuerpo de la clase. Las clases en JavaScript utilizan herencia basada en prototipos.

+ +

Sintaxis

+ +
var MyClass = class [className] [extends] {
+  // class body
+};
+ +

Descripción

+ +

Una expresión de clase tiene una sintaxis similar a la declaración de una clase. Sin embargo, con las expresiones de clases, está permitido omitir el nombre de la clase ("identificador de enlace"), cosa que no se puede hacer con las declaraciones de clases. Además, las expresiones de clases permiten redefinir/redeclarar clases y no lanzar ningún tipo de error como las declaraciones de clases. La propiedad constructor es opcional. Y el typeof de las clases generadas con esta palabra clave siempre será "function".

+ +

Tal y como en la declaración de clases, el cuerpo de la expresión de clase se ejecuta en modo estricto.

+ +
'use strict';
+var Foo = class {}; // la propiedad constructor es opcional
+var Foo = class {}; // Se permite repetir declaraciones
+
+typeof Foo; // devuelve "function"
+typeof class {}; // devuelve "function"
+
+Foo instanceof Object; // true
+Foo instanceof Function; // true
+class Foo {}; // Lanza TypeError, no permite volver a declararla
+
+ +

Ejemplo

+ +

Una clase sencilla

+ +

Esta es una sencilla expresión de clase anónima a la que se puede hacer referencia utilizando la variable "Foo".

+ +
var Foo = class {
+  constructor() {}
+  bar() {
+    return "Hello World!";
+  }
+};
+
+var instance = new Foo();
+instance.bar(); // "Hello World!"
+Foo.name; // "Foo"
+
+ +

Expresiones de clase con nombre

+ +

Si se quiere hacer referencia a la clase actual dentro del cuerpo de la clase, se puede crear una expresión de clase con nombre. Este nombre sólo será visible en el mismo contexto de la expresión de clase.

+ +
var Foo = class NamedFoo {
+  constructor() {}
+  whoIsThere() {
+    return NamedFoo.name;
+  }
+}
+var bar = new Foo();
+bar.whoIsThere(); // "NamedFoo"
+NamedFoo.name; // ReferenceError: NamedFoo no está definido
+Foo.name; // "NamedFoo"
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome(42.0)}}{{CompatGeckoDesktop(45)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidAndroid WebviewFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome para Android
Soporte básico{{CompatNo}}{{CompatChrome(42.0)}}{{CompatGeckoMobile(45)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatChrome(42.0)}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/comma_operator/index.html b/files/es/web/javascript/reference/operators/comma_operator/index.html new file mode 100644 index 0000000000..a62701b3e1 --- /dev/null +++ b/files/es/web/javascript/reference/operators/comma_operator/index.html @@ -0,0 +1,132 @@ +--- +title: Operador Coma +slug: Web/JavaScript/Referencia/Operadores/operador_coma +tags: + - JavaScript +translation_of: Web/JavaScript/Reference/Operators/Comma_Operator +--- +
{{jsSidebar("Operators")}}
+ +

El operador coma evalua cada uno de sus operandos (de izquierda a derecha) y retorna el valor del último operando.

+ +

Sintaxis

+ +
expr1, expr2, expr3...
+ +

Parámetros

+ +
+
expr1, expr2, expr3...
+
Cualquier expresión.
+
+ +

Descripción

+ +

Puede usar el operador coma cuando deseé mútiples expresiones en una localización que requiere una sola expresión. El uso más común de este operador es proveer múltiples parámetros en un búcle for

+ +

Ejemplo

+ +

Si a es un array de dos dimensiones con 10 elementos en un lado, el siguiente código usa el operador coma para incrementar dos variables a la vez. Note que la coma en la sentencia var no es el operador coma, porque no existe adentro de una expresión.Más bien, es un carácter especial en sentencias var para combinar a múltiples de ellas en una sola. Sin embargo, esa coma se comporta casi igual que el operador coma. El código imprime los valores de los elementos diagonales en el array:

+ +
for (var i = 0, j = 9; i <= 9; i++, j--)
+  document.writeln("a[" + i + "][" + j + "] = " + a[i][j]);
+ +

Procesar y luego retornar:

+ +

Otro ejemplo de lo que se puede hacer con el operador coma es procesar antes de retornar. Como se mencionó, solo el último elemento será retornado pero todos los otros también van a ser evaluados. Así, se puede hacer:

+ +
function myFunc () {
+  var x = 0;
+
+  return (x += 1, x); // the same as return ++x;
+}
+ +

Específicaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ESDraft', '#sec-comma-operator', 'Comma operator')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-comma-operator', 'Comma operator')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.14', 'Comma operator')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1', '#sec-11.14', 'Comma operator')}}{{Spec2('ES1')}}Definición inicial
+ +

Compatibilidad en navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}3.0{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/conditional_operator/index.html b/files/es/web/javascript/reference/operators/conditional_operator/index.html new file mode 100644 index 0000000000..6b48295902 --- /dev/null +++ b/files/es/web/javascript/reference/operators/conditional_operator/index.html @@ -0,0 +1,171 @@ +--- +title: Operador condicional (ternario) +slug: Web/JavaScript/Referencia/Operadores/Conditional_Operator +tags: + - JavaScript + - Operador +translation_of: Web/JavaScript/Reference/Operators/Conditional_Operator +--- +
{{jsSidebar("Operators")}}
+ +
El operador condicional (ternario) es el único operador en JavaScript que tiene tres operandos. Este operador se usa con frecuencia como atajo para la instrucción if.
+ +
 
+ +

Sintaxis

+ +
condición ? expr1 : expr2 
+ +

Parámetros

+ +
+
condición
+
Una expresión que se evalúa como true o false.
+
+
expr1, expr2
+
+
Expresión con valores de algún tipo.
+
+

Descripción

+
+
+ +

Si la condición es true, el operador retorna el valor de la expr1; de lo contrario,  devuelve el valor de expr2. Por ejemplo, para mostrar un mensaje diferente en función del valor de la variable isMember, se puede usar esta declaración:

+ +
"La Cuota es de:  " + (isMember ? "$2.00" : "$10.00")
+
+ +

También puedes asignar variables dependiendo del resultado de la condición ternaria:

+ +
var elvisLives = Math.PI > 4 ? "Sip" : "Nop";
+ +

También es posible realizar evaluaciones ternarias múltiples (Nota: El operador condicional es asociativo):

+ +
var firstCheck = false,
+    secondCheck = false,
+    access = firstCheck ? "Acceso Denegado" : secondCheck ? "Acceso Denegado" : "Acceso Permitido";
+
+console.log( access ); // muestra "Acceso Permitido"
+ +

También puede usar operaciones ternarias en espacio vacío con el propósito de realizar diferentes operaciones:

+ +
var stop = false, age = 16;
+
+age > 18 ? location.assign("continue.html") : stop = true;
+
+ +

También puede realizar más de una operación por caso, separándolas con una coma:

+ +
var stop = false, age = 23;
+
+age > 18 ? (
+    alert("OK, puedes continuar."),
+    location.assign("continue.html")
+) : (
+    stop = true,
+    alert("Disculpa, eres menor de edad!")
+);
+
+ +

También puede realizar más de una operación durante la asignación de un valor. En este caso, el último valor separado por una coma del paréntesis será el valor asignado.

+ +
var age = 16;
+
+var url = age > 18 ? (
+    alert("OK, puedes continuar."),
+    // alert devuelve "undefined", pero será ignorado porque
+    // no es el último valor separado por comas del paréntesis
+    "continue.html" // el valor a ser asignado si age > 18
+) : (
+    alert("Eres menor de edad!"),
+    alert("Disculpa :-("),
+    // etc. etc.
+    "stop.html" // el valor a ser asignado si !(age > 18)
+);
+
+location.assign(url); // "stop.html"
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-conditional-operator', 'Conditional Operator')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.12', 'The conditional operator')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1', '#sec-11.12', 'The conditional operator')}}{{Spec2('ES1')}}Definición inicial implementada en JavaScript 1.0.
+ +

Compatibilidad de navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/operators/decrement/index.html b/files/es/web/javascript/reference/operators/decrement/index.html new file mode 100644 index 0000000000..01fa5f0ee2 --- /dev/null +++ b/files/es/web/javascript/reference/operators/decrement/index.html @@ -0,0 +1,83 @@ +--- +title: Decremento(--) +slug: Web/JavaScript/Referencia/Operadores/Decremento +tags: + - Decremento + - JavaScript + - JavaScript basico + - Operadores +translation_of: Web/JavaScript/Reference/Operators/Decrement +--- +
{{jsSidebar("Operators")}}
+ +

El operador de decremento (--) disminuye (o resta de a uno) su operando y retorna un valor.

+ +
{{EmbedInteractiveExample("pages/js/expressions-decrement.html")}}
+ +
+ + + +

Sintaxis

+ +
Operadores: x-- o --x
+
+ +

Descripción

+ +

Si usamos la forma de sufijo, operador después del operando (por ejemplo, x--), el operador de disminución disminuye y devuelve el valor antes de disminuir.

+ +

Si se usamos la forma de prefijo, operador antes del operando (por ejemplo, --x), el operador de disminución disminuye y devuelve el valor después de disminuir.

+ +

Ejemplos

+ +

Usando Sufijo 

+ +
let x = 3;
+y = x--;
+
+// y = 3
+// x = 2
+
+ +

Usando Prefijo

+ +
let a = 2;
+b = --a;
+
+// a = 1
+// b = 1
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificaciones
{{SpecName('ESDraft', '#sec-postfix-decrement-operator', 'Decrement operator')}}
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.operators.decrement")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/delete/index.html b/files/es/web/javascript/reference/operators/delete/index.html new file mode 100644 index 0000000000..99ec3e73dd --- /dev/null +++ b/files/es/web/javascript/reference/operators/delete/index.html @@ -0,0 +1,242 @@ +--- +title: operador delete +slug: Web/JavaScript/Referencia/Operadores/delete +translation_of: Web/JavaScript/Reference/Operators/delete +--- +
+
{{jsSidebar("Operators")}}
+
+ +

Resumen

+ +

El operador delete  elimina una propiedad de un objeto.

+ +

Sintaxis

+ +
delete expresión 
+ +

donde la expresión debe evaluar una referencia de la propiedad, por ejemplo:

+ +
delete objeto.propiedad
+delete objeto['propiedad']
+
+ +

Parámetros

+ +
+
objeto
+
El nombre de un objeto, o una expresión que evalua a un objeto.
+
propiedad
+
La propiedad a eliminar.
+
+ +

Retorno

+ +

En modo estricto arroja una excepción si la propiedad no es configurable (retorna false en modo no estricto). Retorna true en cualquier otro caso.

+ +

Descripción

+ +

Al contrario de lo que se podría pensar, el operador delete no tiene nada que ver con liberar memoria (sólo lo hace de manera indirecta eliminando referencias. Más detalles en la página de gestión de memoria).

+ +

Si la operación delete funciona correctamente, eliminará la propiedad del objeto por completo. Sin embargo, si existe otra propiedad con el mismo nombre en la cadena del prototype del objeto, éste heredará la propiedad del prototype.

+ +

delete sólo es efectivo en propiedades de objetos. No tiene ningún efecto en variables o en nombres de funciones.
+ Aunque a veces son mal identificados como variables globales, las asignaciones que no especifican al objeto (ejemplo: x = 5), son en realidad propiedades que se asignan al objeto global.

+ +

delete no puede eliminar ciertas propiedades de los objetos predefinidos (como Object, Array, Math etc). Estos están descritos en ECMAScript 5 y más tarde como no configurables.

+ +

Temporal dead zone

+ +

The "temporal dead zone" (TDZ), specified in ECMAScript 6 for const and let declarations, also applies to the delete operator. Thus, code like the following will throw a {{jsxref("ReferenceError")}}.

+ +
function foo() {
+  delete x;
+  let x;
+}
+
+function bar() {
+  delete y;
+  const y;
+}
+ +

Ejemplos

+ +
x = 42;         // crea la propiedad x en el objeto global
+var y = 43;     // crea la propiedad y en el objeto global, y la marca como no configurable
+myobj = {
+  h: 4,
+  k: 5
+};
+
+// x es una propiedad del objeto global y puede ser eliminada
+delete x;       // retorna true
+
+// y no es configurable, por lo tanto no puede ser eliminada
+delete y;       // retorna false
+
+// delete no afecta a ciertas propiedades predefinidas
+delete Math.PI; // retorna false
+
+// las propiedades definidas por el usuario pueden eliminarse
+delete myobj.h; // retorna true
+
+// myobj es una propiedad del objeto global, no una variable,
+// por lo tanto puede eliminarse
+delete myobj;   // retorna true
+
+function f() {
+  var z = 44;
+
+  // delete no afecta a nombres de variables locales
+  delete z;     // retorna false
+}
+
+ +

Si el objeto hereda una propiedad de un prototype, y no tiene la propiedad en sí, la propiedad no puede ser eliminada por referencia al objeto. Aun así, puedes eliminarla directamente en el prototype.

+ +

If the object inherits a property from a prototype, and doesn't have the property itself, the property can't be deleted by referencing the object. You can, however, delete it directly on the prototype.

+ +
function Foo(){}
+Foo.prototype.bar = 42;
+var foo = new Foo();
+
+// retorna true, pero sin ningún efecto,
+// ya que bar es una propiedad heredada
+delete foo.bar;
+
+// logs 42, propiedad aún heredada
+console.log(foo.bar);
+
+// elimina la propiedad en el prototype
+delete Foo.prototype.bar;
+
+// logs "undefined", propiedad no heredada
+console.log(foo.bar);           
+ +

Eliminando elementos de un array

+ +

Cuando eliminas un elemento de un array, la longitud del array no se ve afectada. Esta se mantiene incluso si eliminas el último elemento del array.

+ +

Cuando el operador delete elimina un elemento de un array, este elemento ya no está en el array. En el siguiente ejemplo, trees[3] es eliminado mediante delete.

+ +
var trees = ["redwood","bay","cedar","oak","maple"];
+delete trees[3];
+if (3 in trees) {
+    // esto no se ejecuta
+}
+ +

Si quieres que exista un elemento de un array pero que tengo un valor no definido, utiliza el valor undefined en vez del operador delete. En el siguiente ejemplo, trees[3] es asignado con el valor undefined, pero el elemento del array aún existe:

+ +
var trees = ["redwood","bay","cedar","oak","maple"];
+trees[3] = undefined;
+if (3 in trees) {
+    // esto se ejecuta
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
ECMAScript 1st Edition.StandardDefinición inicial. Implementado en JavaScript 1.2
{{SpecName('ES5.1', '#sec-11.4.1', 'The delete Operator')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-delete-operator', 'The delete Operator')}}{{Spec2('ES6')}} 
+ +

Compatibilidad de navegador

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Temporal dead zone{{CompatUnknown}}{{CompatGeckoDesktop(36)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{ CompatVersionUnknown() }}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Temporal dead zone{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile(36)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Cross-browser issues

+ +

Although ECMAScript makes iteration order of objects implementation-dependent, it may appear that all major browsers support an iteration order based on the earliest added property coming first (at least for properties not on the prototype). However, in the case of Internet Explorer, when one uses delete on a property, some confusing behavior results, preventing other browsers from using simple objects like object literals as ordered associative arrays. In Explorer, while the property value is indeed set to undefined, if one later adds back a property with the same name, the property will be iterated in its old position--not at the end of the iteration sequence as one might expect after having deleted the property and then added it back.

+ +

So, if you want to simulate an ordered associative array in a cross-browser environment, you are forced to either use two separate arrays (one for the keys and the other for the values), or build an array of single-property objects, etc.

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/destructuring_assignment/index.html b/files/es/web/javascript/reference/operators/destructuring_assignment/index.html new file mode 100644 index 0000000000..b56e3d3b52 --- /dev/null +++ b/files/es/web/javascript/reference/operators/destructuring_assignment/index.html @@ -0,0 +1,442 @@ +--- +title: La desestructuración +slug: Web/JavaScript/Referencia/Operadores/Destructuring_assignment +tags: + - Característica del lenguaje + - Desestructuración + - Desestructurar arreglos y objetos anidados + - ECMAScript 2015 + - ES6 + - JavaScript + - Objetos anidados y desestructuración de array + - Operador +translation_of: Web/JavaScript/Reference/Operators/Destructuring_assignment +--- +
{{jsSidebar("Operators", "Operadores")}}
+ +

La sintaxis de desestructuración es una expresión de JavaScript que permite desempacar valores de arreglos o propiedades de objetos en distintas variables.

+ +
{{EmbedInteractiveExample("pages/js/expressions-destructuringassignment.html", "taller")}}
+ + + +

Sintaxis

+ +
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
+
+
+// Propuesta de etapa 4 (terminada)
+({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}
+
+ +

Descripción

+ +

Las expresiones de objetos y arreglos literales proporcionan una manera fácil de crear paquetes de datos ad hoc.

+ +
const x = [1, 2, 3, 4, 5];
+ +

La desestructuración utiliza una sintaxis similar, pero en el lado izquierdo de la asignación para definir qué valores desempacar de la variable origen.

+ +
const x = [1, 2, 3, 4, 5];
+const [y, z] = x;
+console.log(y); // 1
+console.log(z); // 2
+
+ +

Esta capacidad es similar a las características presentes en lenguajes como Perl y Python.

+ +

Ejemplos

+ +

Desestructuración de arreglos

+ +

Asignación básica de variables

+ +
const foo = ['one', 'two', 'three'];
+
+const [red, yellow, green] = foo;
+console.log(red); // "one"
+console.log(yellow); // "two"
+console.log(green); // "three"
+
+ +

Asignación separada de la declaración

+ +

A una variable se le puede asignar su valor mediante una desestructuración separada de la declaración de la variable.

+ +
let a, b;
+
+[a, b] = [1, 2];
+console.log(a); // 1
+console.log(b); // 2
+
+ +

Valores predeterminados

+ +

A una variable se le puede asignar un valor predeterminado, en el caso de que el valor desempacado del arreglo sea undefined.

+ +
let a, b;
+
+[a=5, b=7] = [1];
+console.log(a); // 1
+console.log(b); // 7
+
+ +

Intercambio de variables

+ +

Los valores de dos variables se pueden intercambiar en una expresión de desestructuración.

+ +

Sin desestructurar la asignación, intercambiar dos valores requiere una variable temporal (o, en algunos lenguajes de bajo nivel, el algoritmo del truco XOR-swap).

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

Analizar un arreglo devuelto por una función

+ +

Siempre ha sido posible devolver un arreglo desde una función. La desestructuración puede hacer que trabajar con un valor de retorno de arreglo sea más conciso.

+ +

En este ejemplo, f() devuelve los valores [1, 2] como su salida, que se puede procesar en una sola línea con desestructuración.

+ +
function f() {
+  return [1, 2];
+}
+
+let a, b;
+[a, b] = f();
+console.log(a); // 1
+console.log(b); // 2
+
+ +

Ignorar algunos valores devueltos

+ +

Puedes ignorar los valores de retorno que no te interesan:

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

También puedes ignorar todos los valores devueltos:

+ +
[,,] = f();
+
+ +

Asignar el resto de un arreglo a una variable

+ +

Al desestructurar un arreglo, puedes desempacar y asignar la parte restante a una variable usando el patrón resto:

+ +
const [a, ...b] = [1, 2, 3];
+console.log(a); // 1
+console.log(b); // [2, 3]
+ +

Ten en cuenta que se lanzará un {{jsxref("SyntaxError")}} si se usa una coma final en el lado derecho con un elemento resto:

+ +
const [a, ...b,] = [1, 2, 3];
+
+// SyntaxError: el elemento rest no puede tener una coma al final
+// Siempre considera usar el operador rest como último elemento
+
+ +

Desempacar valores coincidentes con una expresión regular

+ +

Cuando el método de expresión regular {{jsxref("Global_Objects/RegExp/exec", "exec()", "", 1)}} encuentra una coincidencia, devuelve un arreglo que contiene primero toda la parte coincidente de la cadena y luego las partes de la cadena que coinciden con cada grupo entre paréntesis en la expresión regular. La desestructuración te permite desempacar fácilmente las partes de este arreglo, ignorando la coincidencia completa si no es necesaria.

+ +
function parseProtocol(url) {
+  const parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url);
+  if (!parsedURL) {
+    return false;
+  }
+  console.log(parsedURL);
+  // ["https://developer.mozilla.org/es/Web/JavaScript",
+      "https", "developer.mozilla.org", "es/Web/JavaScript"]
+
+  const [, protocol, fullhost, fullpath] = parsedURL;
+  return protocol;
+}
+
+console.log(parseProtocol('https://developer.mozilla.org/es/Web/JavaScript'));
+// "https"
+
+ +

Desestructuración de objetos

+ +

Asignación básica

+ +
const user = {
+    id: 42,
+    is_verified: true
+};
+
+const {id, is_verified} = user;
+
+console.log(id); // 42
+console.log(is_verified); // true
+
+ +

Asignación sin declaración

+ +

A una variable se le puede asignar su valor con desestructuración separada de su declaración.

+ +
let a, b;
+
+({a, b} = {a: 1, b: 2});
+ +
+

Notas: los paréntesis (...) alrededor de la declaración de asignación son obligatorios cuando se usa la desestructuración de un objeto literal sin una declaración.

+ +

{a, b} = {a: 1, b: 2} no es una sintaxis independiente válida, debido a que {a, b} en el lado izquierdo se considera un bloque y no un objeto literal.

+ +

Sin embargo, ({a, b} = {a: 1, b: 2}) es válido, al igual que const {a, b} = {a: 1, b: 2}

+ +

tu expresión ( ... ) debe estar precedida por un punto y coma o se puede usar para ejecutar una función en la línea anterior.

+
+ +

Asignar a nuevos nombres de variable

+ +

Una propiedad se puede desempacar de un objeto y asignar a una variable con un nombre diferente al de la propiedad del objeto.

+ +
const o = {p: 42, q: true};
+const {p: foo, q: bar} = o;
+
+console.log(foo); // 42
+console.log(bar); // true
+ +

Aquí, por ejemplo, const {p: foo} = o toma del objeto o la propiedad llamada p y la asigna a una variable local llamada foo.

+ +

Valores predeterminados

+ +

A una variable se le puede asignar un valor predeterminado, en el caso de que el valor desempacado del objeto sea undefined.

+ +
const {a = 10, b = 5} = {a: 3};
+
+console.log(a); // 3
+console.log(b); // 5
+ +

Asignar nombres a nuevas variables y proporcionar valores predeterminados

+ +

Una propiedad puede ser ambas

+ + + +
const {a: aa = 10, b: bb = 5} = {a: 3};
+
+console.log(aa); // 3
+console.log(bb); // 5
+
+ +

Desempacar campos de objetos pasados como parámetro de función

+ +
const user = {
+  id: 42,
+  displayName: 'jdoe',
+  fullName: {
+    firstName: 'John',
+    lastName: 'Doe'
+  }
+};
+
+function userId({id}) {
+  return id;
+}
+
+function whois({displayName, fullName: {firstName: name}}) {
+  return `${displayName} es ${name}`;
+}
+
+console.log(userId(user)); // 42
+console.log(whois(user));  // "jdoe es John"
+ +

Esto desempaca el id, displayName y firstName del objeto user y los imprime.

+ +

Establecer el valor predeterminado de un parámetro de función

+ +
function drawChart({size = 'big', coords = {x: 0, y: 0}, radius = 25} = {}) {
+  console.log(size, coords, radius);
+  // haz un dibujo de gráfico
+}
+
+drawChart({
+  coords: {x: 18, y: 30},
+  radius: 30
+});
+ +
+

En la firma de la función para drawChart anterior, el lado izquierdo desestructurado se asigna a un objeto literal vacío en el lado derecho: {size = 'big', coords = {x: 0, y: 0}, radius = 25} = {}. También podrías haber escrito la función sin la asignación del lado derecho. Sin embargo, si omites la asignación del lado derecho, la función buscará al menos un argumento para ser proporcionado cuando se invoca, mientras que en su forma actual, simplemente puedes llamar a drawChart() sin proporcionar ningún parámetro. El diseño actual es útil si deseas poder llamar a la función sin proporcionar ningún parámetro, el otro puede ser útil cuando deseas asegurarte de que se pase un objeto a la función.

+
+ +

Desestructuración de arreglos y objetos anidados

+ +
const metadata = {
+  title: 'Scratchpad',
+  translations: [
+    {
+      locale: 'de',
+      localization_tags: [],
+      last_edit: '2020-08-29T08:43:37',
+      url: '/de/docs/Tools/Scratchpad',
+      title: 'JavaScript-Umgebung'
+    }
+  ],
+  url: '/es/docs/Tools/Scratchpad'
+};
+
+let {
+  title: englishTitle, // renombrar
+  translations: [
+    {
+       title: localeTitle, // renombrar
+    },
+  ],
+} = metadata;
+
+console.log(englishTitle); // "Scratchpad"
+console.log(localeTitle);  // "JavaScript-Umgebung"
+ +

Iteración "for...of" y desestructuración

+ +
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('Nombre: ' + n + ', Padre: ' + f);
+}
+
+// "Nombre: Mike Smith, Padre: Harry Smith"
+// "Nombre: Tom Jones, Padre: Richard Jones"
+
+ +

Nombres de propiedades de objetos calculados y desestructuración

+ +

Los nombres de propiedad calculados, como en un {{jsxref("Operators/Object_initializer", "Objeto literal", "#Computed_property_names", 1)}}, se pueden usar con la desestructuración.

+ +
let key = 'z';
+let {[key]: foo} = {z: 'bar'};
+
+console.log(foo); // "bar"
+
+ +

Rest en la desestructuración de objetos

+ +

La propuesta Propiedades rest/propagación para ECMAScript (etapa 4) agrega la sintaxis {{jsxref("Functions/rest_parameters", "rest", "", 1)}} para desestructurar. Las propiedades de rest recopilan las claves de propiedades enumerables restantes que aún no han sido seleccionadas por el patrón de desestructuración.

+ +
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}
+a; // 10
+b; // 20
+rest; // { c: 30, d: 40 }
+ +

Identificador de JavaScript no válido como nombre de propiedad

+ +

La desestructuración se puede utilizar con nombres de propiedad que no son {{Glossary("Identifier", "identificadores")}} válidos en JavaScript proporcionando un identificador alternativo que sea válido.

+ +
const foo = { 'fizz-buzz': true };
+const { 'fizz-buzz': fizzBuzz } = foo;
+
+console.log(fizzBuzz); // "true"
+
+ +

Desestructuración combinada de arreglos y objetos

+ +

La desestructuración de arreglos y objetos se puede combinar. Supongamos que deseas manipular el tercer elemento del siguiente arreglo props, y luego deseas la propiedad name en el objeto, puedes hacer lo siguiente:

+ +
const props = [
+  { id: 1, name: 'Fizz'},
+  { id: 2, name: 'Buzz'},
+  { id: 3, name: 'FizzBuzz'}
+];
+
+const [,, { name }] = props;
+
+console.log(name); // "FizzBuzz"
+
+ +

Se busca la cadena de prototipos al desestructurar el objeto.

+ +

Al deconstruir un objeto, si no se accede a una propiedad en sí misma, continuará buscando a lo largo de la cadena de prototipos.

+ +
let obj = {self: '123'};
+obj.__proto__.prot = '456';
+const {self, prot} = obj;
+// self "123"
+// prot "456" (Acceso a la cadena de prototipos)
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-destructuring-assignment', 'Desestructuración de asignación')}}
+ +

Compatibilidad del navegador

+ +
+ + +

{{Compat("javascript.operators.destructuring")}}

+
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/operators/division/index.html b/files/es/web/javascript/reference/operators/division/index.html new file mode 100644 index 0000000000..d29816e37a --- /dev/null +++ b/files/es/web/javascript/reference/operators/division/index.html @@ -0,0 +1,77 @@ +--- +title: Division (/) +slug: Web/JavaScript/Referencia/Operadores/Division +tags: + - JS + - JavaScript + - Operador de Division + - Operadores + - Referências +translation_of: Web/JavaScript/Reference/Operators/Division +--- +
{{jsSidebar("Operators")}}
+ +

El operador de división (/) produce el cociente de sus operandos donde el operando izquierdo es el dividendo y el operando derecho es el divisor.

+ +
{{EmbedInteractiveExample("pages/js/expressions-division.html")}}
+ +
+ + + +

Sintaxis

+ +
Operador: x / y
+
+ +

Ejemplos

+ +

Division basica

+ +
1 / 2              // 0.5
+
+Math.floor(3 / 2) // 1
+
+1.0 / 2.0         // 0.5
+
+ +

Division por cero

+ +
2.0 / 0     // Retorna Infinity
+
+2.0 / 0.0   // Retorna Infinity, Dado que 0.0 === 0
+
+2.0 / -0.0  // Retorna -Infinity
+ +

Especificaciones

+ + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-multiplicative-operators', 'Division operator')}}
+ +

Compatibilidad con Navegadores

+ + + +

{{Compat("javascript.operators.division")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/equality/index.html b/files/es/web/javascript/reference/operators/equality/index.html new file mode 100644 index 0000000000..c60efcaada --- /dev/null +++ b/files/es/web/javascript/reference/operators/equality/index.html @@ -0,0 +1,129 @@ +--- +title: Comparación (==) +slug: Web/JavaScript/Referencia/Operadores/Comparacion +tags: + - JS + - JavaScript + - Operador de comparacion + - Operadores + - Referências +translation_of: Web/JavaScript/Reference/Operators/Equality +--- +
{{jsSidebar("Operators")}}
+ +

El operador de comparacion  (==) comprueba si sus dos operandos son iguales y devuelve un resultado booleano. A diferencia del operador de igualdad estricta (===), es que este convierte y compara operandos que son de diferentes tipos.

+ +
{{EmbedInteractiveExample("pages/js/expressions-equality.html")}}
+ + + +

Sintaxis

+ +
x == y
+
+ +

Descripción

+ +

Los operadores de igualdad (==y !=) Utilizan el algoritmo de comparación de igualdad abstracta para comparar dos operandos. Esto se puede resumir a grandes rasgos como:

+ + + +

La diferencia más notable entre este operador y el operador de igualdad estricta (===) es que el operador de igualdad estricta no realiza la conversión de tipos. 

+ +

Ejemplos

+ +

Comparación sin conversión de tipo

+ +
1 == 1;              // true
+"Hola" == "Hola";  // true
+ +

Comparación con conversión de tipos

+ +
"1" ==  1;            // true
+1 == "1";             // true
+0 == false;           // true
+0 == null;            // false
+0 == undefined;       // false
+0 == !!null;          // true, Operador Logico NOT
+0 == !!undefined;     // true, Operador Logico NOT
+null == undefined;    // true
+
+const number1 = new Number(3);
+const number2 = new Number(3);
+number1 == 3;         // true
+number1 == number2;   // false
+ +

Comparación de objetos

+ +
const object1 = {"key": "value"}
+const object2 = {"key": "value"};
+
+object1 == object2 // false
+object2 == object2 // true
+ +

Comparar String y objetos String

+ +

Tenga en cuenta que las cadenas construidas con new String() son objetos. Si compara uno de estos con un String literal, el objeto String se convertirá en un String literal y se comparará el contenido. Sin embargo, si ambos operandos son objetos de tipo String, entonces se comparan como objetos y deben hacer referencia al mismo objeto para que la comparación sea exitosa:

+ +
const string1 = "Hola";
+const string2 = String("Hola");
+const string3 = new String("Hola");
+const string4 = new String("Hola");
+
+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
+ +

Comparación de fechas y cadenas

+ +
const d = new Date('December 17, 1995 03:24:00');
+const s = d.toString(); // Por ejemplo: "Sun Dec 17 1995 03:24:00 GMT-0800 (Hora estándar del Pacífico)"
+console.log(d == s);    //true
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificaciones
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality operators')}}
+ +

Compatibilidad con Navegadores

+ + + +

{{Compat("javascript.operators.equality")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/function/index.html b/files/es/web/javascript/reference/operators/function/index.html new file mode 100644 index 0000000000..d5739239b2 --- /dev/null +++ b/files/es/web/javascript/reference/operators/function/index.html @@ -0,0 +1,73 @@ +--- +title: function +slug: Web/JavaScript/Referencia/Operadores/function +tags: + - Function + - JavaScript + - Operator + - Primary Expressions +translation_of: Web/JavaScript/Reference/Operators/function +--- +
{{jsSidebar("Operators")}}
+ +

Resumen

+ +

El operador function define una función dentro de una expresión.

+ +

Sintaxis

+ +
function [name]([param1, param2, ..., paramN]) {
+   statements
+}
+
+ +

Parámetros

+ +
+
name
+
El nombre de la función. Puede ser omitido, en cuyo caso la función es anonymous. El nombre sólo es local para el cuerpo de la función.
+
+ +
+
paramN
+
El nombre de un argumento que será pasado a la función. Una función puede tener hasta 255 argumentos.
+
+ +
+
statements
+
Las declaraciones que conforman el cuerpo de la función.
+
+ +

Descripción

+ +

La expresión de una función es muy similar y tiene casi la misma sintaxis que la declaración de una función (véase {{jsxref("Sentencias/function", "function")}} para más detalles). Véase Funciones para ver más información sobre las diferencias  entre declaraciones de funciones y expresiones de funciones.

+ +

Ejemplos

+ +

El siguiente ejemplo define una función sin nombre y se le asigna a la variable x. La función devuelve como resultado el cuadrado de su argumento:

+ +
var x = function(y) {
+   return y * y;
+};
+
+ +

Expresión de función nombrada

+ +

Si quiere referirse a la función actual dentro del cuerpo de la función, debe crear una expresión de función nombrada. Luego, este nombre será local solo para el cuerpo de la función (alcance). Esto también evita usar la propiedad no estándar {{jsxref("Funciones/arguments/callee", "arguments.callee")}}.

+ +
var math = {
+  'factorial': function factorial(n) {
+    if (n <= 1)
+      return 1;
+    return n * factorial(n - 1);
+  }
+};
+
+ +

Consulte también

+ + diff --git a/files/es/web/javascript/reference/operators/function_star_/index.html b/files/es/web/javascript/reference/operators/function_star_/index.html new file mode 100644 index 0000000000..9c38872b7e --- /dev/null +++ b/files/es/web/javascript/reference/operators/function_star_/index.html @@ -0,0 +1,91 @@ +--- +title: expresión function* +slug: Web/JavaScript/Referencia/Operadores/function* +tags: + - ECMAScript 2015 + - Expresión Primaria + - Function + - Iterator + - JavaScript + - Operator +translation_of: Web/JavaScript/Reference/Operators/function* +--- +
{{jsSidebar("Operators")}}
+ +

La palabra clave function* puede ser utilizada para definir una función generadora en una expresión.

+ +
{{EmbedInteractiveExample("pages/js/expressions-functionasteriskexpression.html")}}
+ + + +

Sintaxis

+ +
function* [nombre]([param1[, param2[, ..., paramN]]]) {
+   sentencias
+}
+ +

Parámetros

+ +
+
nombre
+
Nombre de la función. Puede ser omitido, en cuyo caso la funcipón es anínima. El nombre sólo es local al cuerpo de la función.
+
paramN
+
Nombre de un parámetro a ser pasado a la función. Una función puede tener hasta 255 argumentos.
+
sentencias
+
Sentencias que componen el cuerpo de la función.
+
+ +

Descripción

+ +

Una expresión function* es muy similar y tiene casi la misma sintaxis que una {{jsxref('Statements/function*', 'function* statement')}}. La principal diferencia entre una expresión function* y una sentencia function* es el nombre de la función, que en expresiones function* puede ser omitido para creaar funciones generadoras anónimas. Para más información vea también el capítulo acerca de funciones.

+ +

Ejemplos

+ +

El siguiente ejemplo define una función generadora sin nombre y la asigna a x. La función produce el cuadrado de su argumento:

+ +
var x = function*(y) {
+   yield y * y;
+};
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#', 'function*')}}{{Spec2('ES2015')}}Definición Inicial.
{{SpecName('ESDraft', '#', 'function*')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.operators.function_star")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/operators/grouping/index.html b/files/es/web/javascript/reference/operators/grouping/index.html new file mode 100644 index 0000000000..ec78e8518f --- /dev/null +++ b/files/es/web/javascript/reference/operators/grouping/index.html @@ -0,0 +1,128 @@ +--- +title: Operador de agrupación +slug: Web/JavaScript/Referencia/Operadores/Grouping +tags: + - Expresiones primarias + - JavaScript + - Operador +translation_of: Web/JavaScript/Reference/Operators/Grouping +--- +
{{jsSidebar("Operators")}}
+ +

El operador de agrupación ( ) controla la precedencia de las expresiones a evaluar.

+ +

Sintaxis

+ +
 ( )
+ +

Descripción

+ +

El operador de agrupación consiste en un par de paréntesis alrededor de la expresión (o sub-expresión) que sobrescribe el comportamiento por defecto de la precedencia de operadores, lo que causa que expresiones con menor precedencia puedan ser evaluadas antes que expresiones con una mayor precedencia.

+ +

Ejemplos

+ +

Sobrescribir la precedencia de operadores aritméticos por defecto para que se evalúe primero la adición y luego la multiplicación.

+ +
var a = 1;
+var b = 2;
+var c = 3;
+
+// precedencia por defecto
+a + b * c     // 7
+// es evaluada por defecto como:
+a + (b * c)   // 7
+
+// ahora se sobrescribe la precedencia
+// para que la adición se evalúe antes que la multiplicación
+(a + b) * c   // 9
+
+// que es equivalente a:
+a * c + b * c // 9
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
ECMAScript 1st Edition.EstándarDefinición inicial. Implementado en JavaScript 1.0
{{SpecName('ES5.1', '#sec-11.1.6', 'The Grouping Operator')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-grouping-operator', 'The Grouping Operator')}}{{Spec2('ES6')}} 
+ +

Compatibilidad en navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Temas relacionados

+ + diff --git a/files/es/web/javascript/reference/operators/in/index.html b/files/es/web/javascript/reference/operators/in/index.html new file mode 100644 index 0000000000..051056a25f --- /dev/null +++ b/files/es/web/javascript/reference/operators/in/index.html @@ -0,0 +1,139 @@ +--- +title: in +slug: Web/JavaScript/Referencia/Operadores/in +tags: + - JavaScript + - Operator + - Relational Operators +translation_of: Web/JavaScript/Reference/Operators/in +--- +
{{jsSidebar("Operators")}}
+ +
El operador in devuelve true si la propiedad especificada está en el objeto especificado o su prototipo.
+ +

Sintaxis

+ +
prop in object
+ +

Parámetros

+ +
+
prop
+
Una cadena o expresión númerica que representa el nombre de una propiedad o el índice de un array (lo que no sea un símbolo se forzará a string).
+
+ +
+
object
+
El objeto (o su cadena de prototipo) sobre el que comprobar si contiene la propiedad con el nombre especificado.
+
+ +

Descripción

+ +

Los siguientes ejemplos muestran algunos de los usos del operador in.

+ +
// Arrays
+var arboles = new Array("secoya", "pino", "cedro", "roble", "arce");
+0 in arboles        // devuelve true
+3 in arboles        // devuelve true
+6 in arboles        // devuelve false
+"pino" in arboles   // devuelve false (debe especificar el número de índice,
+                    // no el valor del índice)
+"length" in arboles // devuelve true (length es una propiedad de Array)
+
+// Objetos predefinidos
+"PI" in Math        // devuelve true
+
+// Objetos personalizados
+var micoche = {marca: "Honda", modelo: "Accord", año: 1998};
+"marca" in micoche  // devuelve true
+"modelo" in micoche // devuelve true
+
+ +

Debe especificar un objeto en el lado derecho del operador in. Por ejemplo, puede especificar una cadena creada con el constructor String , pero no puede especificar una cadena literal.

+ +
var color1 = new String("verde");
+"length" in color1 // devuelve true
+
+var color2 = "coral";
+"length" in color2 // genera un error (color2 no es un objeto String)
+
+ +

Usando in con propiedades eliminadas o no definidas

+ +

Si se elimina una propiedad con el operador {{jsxref("Operadores/delete", "delete")}}, el operador in devuelve false para esa propiedad.

+ +
var micoche= {marca: "Honda", modelo: "Accord", año: 1998};
+delete micoche.marca;
+"marca" in micoche;  // devuelve false
+
+var arboles = new Array("secoya", "pino", "cedro", "roble", "arce");
+delete arboles[3];
+3 in arboles; // devuelve false
+
+ +

Si se cambia una propiedad a {{jsxref("Objetos_globales/undefined", "undefined")}} pero no se elimina, el operador in devuelve true para esa propiedad.

+ +
var micoche = {marca: "Honda", modelo: "Accord", año: 1998};
+micoche.marca = undefined;
+"marca" in micoche;  // devuelve true
+
+ +
var arboles = new Array("secayo", "pino", "cedro", "roble", "arce");
+arboles[3] = undefined;
+3 in arboles; // devuelve true
+
+ +

Propiedades heredadas

+ +

El operador in devuelve true para propiedades en la cadena del prototipo.

+ +
"toString" in {}; // devuelve true
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}{{Spec2('ESDraft')}} 
{{SpecName('ES2015', '#sec-relational-operators', 'Relational Operators')}}{{Spec2('ES2015')}} 
{{SpecName('ES5.1', '#sec-11.8.7', 'The in Operator')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-11.8.7', 'The in Operator')}}{{Spec2('ES3')}}Definición inicial. Implementado en JavaScript 1.4.
+ +

Compatibilidad en navegadores

+ + + +

{{Compat("javascript.operators.in")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/operators/index.html b/files/es/web/javascript/reference/operators/index.html new file mode 100644 index 0000000000..dca4964faa --- /dev/null +++ b/files/es/web/javascript/reference/operators/index.html @@ -0,0 +1,280 @@ +--- +title: Expresiones y operadores +slug: Web/JavaScript/Referencia/Operadores +tags: + - Descripción + - JavaScript + - Operadores + - Operators + - Referencia +translation_of: Web/JavaScript/Reference/Operators +--- +
{{jsSidebar("Operators", "Operadores")}}
+ +

Este capítulo documenta todos los operadores, expresiones y palabras clave del lenguaje JavaScript.

+ +

Expresiones y operadores por categoría

+ +

Para obtener una lista alfabética, consulta la barra lateral de la izquierda.

+ +

Expresiones primarias

+ +

Palabras clave básicas y expresiones generales en JavaScript.

+ +
+
{{jsxref("Operators/this", "this")}}
+
La palabra clave this se refiere a una propiedad especial de un contexto de ejecución.
+
{{jsxref("Operators/function", "function")}}
+
La palabra clave function define una expresión de función.
+
{{jsxref("Operators/class", "class")}}
+
La palabra clave class define una expresión de clase.
+
{{jsxref("Operators/function", "function")}}
+
La palabra clave function* define una expresión de función generadora.
+
{{jsxref("Operators/yield", "yield")}}
+
Pausar y reanudar una función generadora.
+
{{jsxref("Operators/yield*", "yield*")}}
+
Delegar a otra función generadora u objeto iterable.
+
{{jsxref("Operators/async_function", "async function")}}
+
La async function define una expresión de función asíncrona.
+
{{jsxref("Operators/await", "await")}}
+
Pausa y reanuda una función asíncrona y espera la resolución/rechazo de la promesa.
+
{{jsxref("Global_Objects/Array", "[]")}}
+
Iniciador de arreglo/sintaxis literal.
+
{{jsxref("Operators/Object_initializer", "{}")}}
+
Iniciador de objeto/sintaxis literal.
+
{{jsxref("Global_Objects/RegExp", "/ab+c/i")}}
+
Sintaxis de expresión regular literal.
+
{{jsxref("Operators/Grouping", "( )")}}
+
Operador de agrupación.
+
+ +

Expresiones del lado izquierdo

+ +

Los valores de la izquierda son el destino de una asignación.

+ +
+
{{jsxref("Operators/Property_accessors", "Propiedad accessors", "", 1)}}
+
Los operadores miembro proporcionan acceso a una propiedad o método de un objeto
+ (object.property y object["property"]).
+
{{jsxref("Operators/new", "new")}}
+
El operador new crea una instancia auxiliado por un constructor.
+
{{jsxref("Operators/new%2Etarget", "new.target")}}
+
En los constructores, new.target se refiere al constructor que fue invocado por {{jsxref("Operators/new", "new")}}.
+
{{jsxref("Operators/super", "super")}}
+
La palabra clave super llama al constructor padre.
+
{{jsxref("Operators/Spread_syntax", "...obj")}}
+
La sintaxis de extensión permite expandir una expresión en lugares donde se esperan múltiples argumentos (para llamadas a funciones) o múltiples elementos (para arreglos literales).
+
+ +

Incremento y decremento

+ +

Operadores de incremento sufijo/prefijo y decremento sufijo/prefijo.

+ +
+
{{jsxref("Operators/Increment", "A++")}}
+
Operador de incremento sufijo.
+
{{jsxref("Operators/Decrement", "A--")}}
+
Operador de incremento sufijo.
+
{{jsxref("Operators/Increment", "A++")}}
+
Operador de incremento prefijo.
+
{{jsxref("Operators/Decrement", "--A")}}
+
Operador de decremento prefijo.
+
+ +

Operadores unarios

+ +

Una operación unaria es una operación con un solo operando.

+ +
+
{{jsxref("Operators/delete", "delete")}}
+
El operador delete elimina una propiedad de un objeto.
+
{{jsxref("Operators/void", "void")}}
+
El operador void descarta el valor de retorno de una expresión.
+
{{jsxref("Operators/typeof", "typeof")}}
+
El operador typeof determina el tipo de un objeto dado.
+
{{jsxref("Operators/Unary_plus", "+")}}
+
El operador unario más convierte su operando al tipo Number.
+
{{jsxref("Operators/Unary_negation", "-")}}
+
El operador unario de negación convierte su operando al tipo Number y luego lo niega.
+
{{jsxref("Operators/Bitwise_NOT", "~")}}
+
Operador NOT bit a bit.
+
{{jsxref("Operators/Logical_NOT", "!")}}
+
Operador NOT lógico.
+
+ +

Operadores aritméticos

+ +

Los operadores aritméticos toman valores numéricos (ya sean literales o variables) como sus operandos y devuelven un solo valor numérico.

+ +
+
{{jsxref("Operators/Addition", "+")}}
+
Operador de adición o suma.
+
{{jsxref("Operators/Subtraction", "-")}}
+
Operador de sustracción o resta.
+
{{jsxref("Operators/Division", "/")}}
+
Operador de división.
+
{{jsxref("Operators/Multiplication", "*")}}
+
Operador de multiplicación.
+
{{jsxref("Operators/Remainder", "%")}}
+
Operador de residuo.
+
{{jsxref("Operators/Exponentiation", "**")}}
+
Operador de exponenciación.
+
+ +

Operadores relacionales

+ +

Un operador de comparación compara sus operandos y devuelve un valor Boolean basado en si la comparación es verdadera o no.

+ +
+
{{jsxref("Operators/in", "in")}}
+
El operador in determina si un objeto tiene una determinada propiedad.
+
{{jsxref("Operators/instanceof", "instanceof")}}
+
El operador instanceof determina si un objeto es una instancia de otro objeto.
+
{{jsxref("Operators/Less_than", "<")}}
+
Operador menor que.
+
{{jsxref("Operators/Greater_than", ">")}}
+
Operador mayor que.
+
{{jsxref("Operators/Less_than_or_equal", "<=")}}
+
Operador menor o igual a.
+
{{jsxref("Operators/Greater_than_or_equal", ">=")}}
+
Operador mayor o igual a.
+
+ +
+

Nota: => no es un operador, sino la notación para {{jsxref("Functions/Arrow_functions", "Funciones de flecha")}}.

+
+ +

Operadores de igualdad

+ +

El resultado de evaluar un operador de igualdad siempre es de tipo Boolean basado en si la comparación es verdadera.

+ +
+
{{jsxref("Operators/Equality", "==")}}
+
Operador de igualdad.
+
{{jsxref("Operators/Inequality", "!=")}}
+
Operador de desigualdad.
+
{{jsxref("Operators/Strict_equality", "===")}}
+
Operador de igualdad estricta.
+
{{jsxref("Operators/Strict_inequality", "!==")}}
+
Operador de desigualdad estricta.
+
+ +

Operadores de desplazamiento de bits

+ +

Operaciones para cambiar todos los bits del operando.

+ +
+
{{jsxref("Operators/Left_shift", "<<")}}
+
Operador de desplazamiento bit a bit a la izquierda.
+
{{jsxref("Operators/Right_shift", ">>")}}
+
Operador de desplazamiento bit a bit a la derecha.
+
{{jsxref("Operators/Unsigned_right_shift", ">>>")}}
+
Operador de desplazamiento bit a bit a la derecha sin signo.
+
+ +

Operadores binarios bit a bit

+ +

Los operadores bit a bit tratan a sus operandos como un conjunto de 32 bits (ceros y unos) y devuelven valores numéricos estándar de JavaScript.

+ +
+
{{jsxref("Operators/Bitwise_AND", "&")}}
+
AND bit a bit.
+
{{jsxref("Operators/Bitwise_OR", "|")}}
+
OR bit a bit.
+
{{jsxref("Operators/Bitwise_XOR", "^")}}
+
XOR bit a bit.
+
+ +

Operadores lógicos binarios

+ +

Los operadores lógicos se utilizan normalmente con valores booleanos (lógicos); cuando lo son, devuelven un valor booleano.

+ +
+
{{jsxref("Operators/Logical_AND", "&&")}}
+
AND lógico.
+
{{jsxref("Operators/Logical_OR", "||")}}
+
OR lógico.
+
+ +

Operador condicional (ternario)

+ +
+
{{jsxref("Operators/Conditional_Operator", "(condition ? ifTrue : ifFalse)")}}
+
+

El operador condicional devuelve uno de dos valores según el valor lógico de la condición.

+
+
+ +

Operadores de asignación

+ +

Un operador de asignación asigna un valor a su operando izquierdo basándose en el valor de su operando derecho.

+ +
+
{{jsxref("Operators/Assignment", "=")}}
+
Operador de asignación.
+
{{jsxref("Operators/Multiplication_assignment", "*=")}}
+
Asignación de multiplicación.
+
{{jsxref("Operators/Division_assignment", "/=")}}
+
Asignación de división.
+
{{jsxref("Operators/Remainder_assignment", "%=")}}
+
Asignación de residuo.
+
{{jsxref("Operators/Addition_assignment", "+=")}}
+
Asignación de suma.
+
{{jsxref("Operators/Subtraction_assignment", "-=")}}
+
Asignación de sustracción
+
{{jsxref("Operators/Left_shift_assignment", "<<=")}}
+
Asignación de desplazamiento a la izquierda.
+
{{jsxref("Operators/Right_shift_assignment", ">>=")}}
+
Asignación de desplazamiento a la derecha.
+
{{jsxref("Operators/Unsigned_right_shift_assignment", ">>>=")}}
+
Asignación de desplazamiento a la derecha sin signo.
+
{{jsxref("Operators/Bitwise_AND_assignment", "&=")}}
+
Asignación de AND bit a bit.
+
{{jsxref("Operators/Bitwise_XOR_assignment", "^=")}}
+
Asignación de XOR bit a bit.
+
{{jsxref("Operators/Bitwise_OR_assignment", "|=")}}
+
Asignación de OR bit a bit.
+
{{jsxref("Operators/Logical_AND_assignment", "&&=")}}
+
Asignación de AND lógico.
+
{{jsxref("Operators/Logical_OR_assignment", "||=")}}
+
Asignación de OR lógico.
+
{{jsxref("Operators/Logical_nullish_assignment", "??=")}}
+
Asignación de anulación lógica.
+
{{jsxref("Operators/Destructuring_assignment", "[a, b] = [1, 2]")}}
+ {{jsxref("Operators/Destructuring_assignment", "{a, b} = {a:1, b:2}")}}
+
+

La desestructuración te permite asignar las propiedades de un arreglo u objeto a variables utilizando una sintaxis que se parece a los arreglos u objetos literales.

+
+
+ +

Operador coma

+ +
+
{{jsxref("Operators/Comma_Operator", ",")}}
+
El operador coma permite evaluar múltiples expresiones en una sola declaración y devuelve el resultado de la última expresión.
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-ecmascript-language-expressions', 'ECMAScript Language: Expressions')}}
+ +

Compatibilidad del navegador

+ + + +

{{Compat("javascript.operators")}}

+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/operators/instanceof/index.html b/files/es/web/javascript/reference/operators/instanceof/index.html new file mode 100644 index 0000000000..3b9a45162d --- /dev/null +++ b/files/es/web/javascript/reference/operators/instanceof/index.html @@ -0,0 +1,88 @@ +--- +title: instanceof +slug: Web/JavaScript/Referencia/Operadores/instanceof +tags: + - JavaScript + - Operator + - Relational Operators +translation_of: Web/JavaScript/Reference/Operators/instanceof +--- +
{{jsSidebar("Operators")}}
+ +

Resumen

+ +

El operador instanceof verifica si un objeto en su cadena de prototipos contiene la propiedad prototype de un constructor.

+ +

Sintaxis

+ +
objeto instanceof constructor
+ +

Parámetros

+ +
+
objeto
+
Objeto a verificar.
+
+ +
+
constructor
+
Función contra la que se hará la verificación.
+
+ +

Descripción

+ +

Utilice instanceof cuando necesite confirmar el tipo de un objeto en tiempo de ejecución. Por ejemplo, cuando controle excepciones, puede recurrir a diferentes códigos de manipulación de excepciones dependiendo del tipo de excepción tomada.

+ +

Debe especificar un objeto en el lado derecho del operador instanceof. Por ejemplo, puede especificar una cadena creada con el constructor String, pero no puede especificar un literal de cadena.

+ +
color1=new String("verde")
+color1 instanceof String // devuelve verdadero (true)
+color2="coral"
+color2 instanceof String // devuelve falso (color2 no es un objeto String)
+
+ +

Ejemplos

+ +

También vea los ejemplos de {{jsxref("Sentencias/throw", "throw")}}.

+ +

Ejemplo: Determinando si elDia es un objeto Date

+ +

El siguiente código utiliza instanceof para determinar si elDia es un objeto Date. Debido a que elDia es un objeto Date, las instrucciones de la sentencia if se ejecutan.

+ +
elDia = new Date(1995, 12, 17)
+if (elDia instanceof Date) {
+   // instrucciones a ejecutar
+}
+
+ +

Ejemplo: Demostrando que String y Date son del tipo Object

+ +

El siguiente código utiliza instanceof para demostrar que los objetos String y Date son también del tipo Object (éstos se derivan de Object).

+ +
miCadena = new String()
+miFecha = new Date()
+
+miCadena instanceof String // devuelve true
+miCadena instanceof Object // devuelve true
+miCadena instanceof Date   // devuelve false
+
+miFecha instanceof Date     // devuelve true
+miFecha instanceof Object   // devuelve true
+miFecha instanceof String   // devuelve false
+
+ +

Ejemplo: Demostrando que miCoche es del tipo Coche y del tipo Object

+ +

El siguiente código crea un objeto del tipo Coche y una instancia de ese tipo de objeto, miCoche. El operador instanceof demuestra que el objeto miCoche es del tipo Coche y del tipo Object.

+ +
function Coche(fabricante, modelo, ejercicio) {
+   this.fabricante = fabricante
+   this.modelo = modelo
+   this.ejercicio= ejercicio
+}
+miCoche = new Coche("Honda", "Accord", 1998)
+a = miCoche instanceof Coche // devuelve verdadero (true)
+b = miCoche instanceof Object // devuelve verdadero (true)
+
+ +
 
diff --git a/files/es/web/javascript/reference/operators/new.target/index.html b/files/es/web/javascript/reference/operators/new.target/index.html new file mode 100644 index 0000000000..0faa0f0878 --- /dev/null +++ b/files/es/web/javascript/reference/operators/new.target/index.html @@ -0,0 +1,139 @@ +--- +title: new.target +slug: Web/JavaScript/Referencia/Operadores/new.target +tags: + - Clases + - ECMAScript6 + - JavaScript + - Referencia +translation_of: Web/JavaScript/Reference/Operators/new.target +--- +
{{JSSidebar("Operators")}}
+ +

La propiedad new.target te permite detectar si una función o constructor fue llamado usando el operador new. En constructores y funciones instanciadas con el operador new, new.target devuelve una referencia al constructor o función. En llamadas a funciones normales, new.target es {{jsxref("undefined")}}.

+ +

Sintaxis

+ +
new.target
+ +

Descripción

+ +

La sintaxis new.target consiste en el keyword "new", un punto, y el nombre de propiedad "target". Normalmente "new." sirve como contexto para el acceso a la propiedad, pero aquí, "new." no es realmente un objeto. En llamadas a constructores, sin embargo, new.target hace referencia al constructor invocado por new por lo que "new." se convierte en un contexto virtual.

+ +

La propiedad new.target es una meta propiedad que está disponible para todas las funciones. En funciones flecha, new.target se refiere al new.target de la función que la contiene.

+ +

Ejemplos

+ +

new.target en llamadas a funciones

+ +

En llamadas a funciones normales (en contraposición a llamadas a constructores), new.target es {{jsxref("undefined")}}. Esto te permite detectar si la función fue llamada con new como constructor.

+ +
function Foo() {
+  if (!new.target) throw 'Foo() debe ser llamado con new';
+  console.log('Foo instanciado con new');
+}
+
+Foo(); // Lanza "Foo() debe ser llamado con new"
+new Foo(); // escribe en el log "Foo instanciado con new"
+
+ +

new.target en constructores

+ +

En constructores de clase, new.target hace referencia al constructor que fue directamente invocado por new. Este también es el caso si el constructor está en una clase padre y fue delegado desdes el constructor hijo.

+ +
class A {
+  constructor() {
+    console.log(new.target.name);
+  }
+}
+
+class B extends A { constructor() { super(); } }
+
+var a = new A(); // escribe en el log "A"
+var b = new B(); // escribe en el log "B"
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstatusComentario
{{SpecName('ES2015', '#sec-built-in-function-objects', 'Built-in Function Objects')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-built-in-function-objects', 'Built-in Function Objects')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(46.0)}}{{CompatGeckoDesktop(41)}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidAndroid WebviewFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Basic support{{CompatNo}}{{CompatChrome(46.0)}}{{CompatGeckoMobile(41)}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatChrome(46.0)}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/new/index.html b/files/es/web/javascript/reference/operators/new/index.html new file mode 100644 index 0000000000..4635b12402 --- /dev/null +++ b/files/es/web/javascript/reference/operators/new/index.html @@ -0,0 +1,179 @@ +--- +title: Operador new +slug: Web/JavaScript/Referencia/Operadores/new +tags: + - Expresiones del lado izquierdo + - JavaScript + - Left-hand-side expressions + - Operador + - Operator + - Referencia +translation_of: Web/JavaScript/Reference/Operators/new +--- +
{{jsSidebar("Operators", "Operadores")}}
+ +

El operador new permite a los desarrolladores crear una instancia de un tipo de objeto definido por el usuario o de uno de los tipos de objeto integrados que tiene un función constructora.

+ +
{{EmbedInteractiveExample("pages/js/expressions-newoperator.html")}}
+ +

Sintaxis

+ +
new constructor[([arguments])]
+ +

Parámetros

+ +
+
constructor
+
Una clase o función que especifica el tipo de instancia del objeto.
+
+ +
+
arguments
+
Una lista de valores con los que se llamará al constructor.
+
+ +

Descripción

+ +

La palabra clave new hace lo siguiente:

+ +
    +
  1. Crea un objeto JavaScript simple y en blanco;
  2. +
  3. Vincula (establece el constructor de) este objeto a otro objeto;
  4. +
  5. Pasa el objeto recién creado del Paso 1 como el contexto this;
  6. +
  7. Devuelve this si la función no devuelve un objeto.
  8. +
+ +

La creación de un objeto definido por el usuario requiere dos pasos:

+ +
    +
  1. Defina el tipo de objeto escribiendo una función.
  2. +
  3. Crea una instancia del objeto con new.
  4. +
+ +

Para definir un tipo de objeto, crea una función para el tipo de objeto que especifique su nombre y propiedades. Un objeto puede tener una propiedad que en sí misma es otro objeto. Ve los siguientes ejemplos.

+ +

Cuando se ejecuta el código new Foo(...), sucede lo siguiente:

+ +
    +
  1. Se crea un nuevo objeto, heredado de Foo.prototype.
  2. +
  3. La función constructora Foo se llama con los argumentos especificados y con {{JSxRef("Operators/this", "this")}} vinculado al objeto recién creado. new Foo es equivalente a new Foo(), es decir, si no se especifica una lista de argumentos, Foo se llama sin argumentos.
  4. +
  5. El objeto (no nulo, false, 3.1415 u otros tipos primitivos) devuelto por la función constructora se convierte en el resultado de toda la expresión new. Si la función constructora no devuelve explícitamente un objeto, en su lugar se utiliza el objeto creado en el paso 1. (Normalmente, los constructores no devuelven un valor, pero pueden elegir hacerlo si quieren redefinir el proceso normal de creación de objetos).
  6. +
+ +

Siempre puedes agregar una propiedad a un objeto definido previamente. Por ejemplo, la instrucción car1.color = "black" agrega una propiedad color a car1 y le asigna un valor de "black". Sin embargo, esto no afecta a ningún otro objeto. Para agregar la nueva propiedad a todos los objetos del mismo tipo, debes agregar la propiedad a la definición del tipo de objeto Car.

+ +

Puedes agregar una propiedad compartida a un tipo de objeto definido previamente mediante la propiedad {{JSxRef("Global_Objects/Function/prototype", "Function.prototype")}}. Esto define una propiedad que comparten todos los objetos creados con esa función, en lugar de solo una instancia del tipo de objeto. El siguiente código agrega una propiedad de color con el valor "color original" a todos los objetos de tipo Car, y luego redefine ese valor con la cadena "black" solo en la instancia car1 del objeto. Para obtener más información, consulta {{JSxRef("Global_Objects/Function/prototype", "prototype")}}.

+ +
function Car() {}
+car1 = new Car();
+car2 = new Car();
+
+console.log(car1.color);    // undefined
+
+Car.prototype.color = 'color original';
+console.log(car1.color);    // 'color original'
+
+car1.color = 'black';
+console.log(car1.color);    // 'black'
+
+console.log(Object.getPrototypeOf(car1).color); // 'color original'
+console.log(Object.getPrototypeOf(car2).color); // 'color original'
+console.log(car1.color);   // 'black'
+console.log(car2.color);   // 'color original'
+
+ +
+

Si no escribiste el operador new, la función constructor se invocará como cualquier función normal, sin crear un objeto. En este caso, el valor de this también es diferente.

+
+ +

Ejemplos

+ +

Tipo de objeto e instancia de objeto

+ +

Supongamos que deseas crear un tipo de objeto para cars. Quieres que este tipo de objeto se llame Car, y quieres que tenga propiedades para marca, modelo y año (make, model y year en inglés respectivamente). Para ello, podrías escribir la siguiente función:

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

Ahora puedes crear un objeto llamado myCar de la siguiente manera:

+ +
var myCar = new Car('Eagle', 'Talon TSi', 1993);
+
+ +

Esta declaración crea myCar y le asigna los valores especificados para sus propiedades. Entonces el valor de myCar.make es la cadena "Eagle", myCar.year es el entero 1993, y así sucesivamente.

+ +

Puedes crear cualquier número de objetos car mediante llamadas a new. Por ejemplo:

+ +
var kensCar = new Car('Nissan', '300ZX', 1992);
+
+ +

Propiedad del objeto que en sí mismo es otro objeto

+ +

Supongamos que defines un objeto llamado Person de la siguiente manera:

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

Y luego creas una instancia de dos nuevos objetos Person de la siguiente manera:

+ +
var rand = new Person('Rand McNally', 33, 'M');
+var ken = new Person('Ken Jones', 39, 'M');
+
+ +

Luego, puedes reescribir la definición de Car para incluir una propiedad para owner (propietario en español) que tome un objeto Person, de la siguiente manera:

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

Para crear instancias de los nuevos objetos, utiliza lo siguiente:

+ +
var car1 = new Car('Eagle', 'Talon TSi', 1993, rand);
+var car2 = new Car('Nissan', '300ZX', 1992, ken);
+
+ +

En lugar de pasar una cadena literal o un valor entero al crear los nuevos objetos, las declaraciones anteriores pasan los objetos rand y ken como parámetros para los propietarios. Para conocer el nombre del propietario de car2, puedes acceder a la siguiente propiedad:

+ +
car2.owner.name
+
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-new-operator', 'El operador new')}}
+ +

Compatibilidad del navegador

+ + + +

{{Compat("javascript.operators.new")}}

+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/operators/operator_precedence/index.html b/files/es/web/javascript/reference/operators/operator_precedence/index.html new file mode 100644 index 0000000000..2ff0464afd --- /dev/null +++ b/files/es/web/javascript/reference/operators/operator_precedence/index.html @@ -0,0 +1,297 @@ +--- +title: Precedencia de operadores +slug: Web/JavaScript/Referencia/Operadores/Operator_Precedence +tags: + - JavaScript + - Operator + - operator details + - operator precedence +translation_of: Web/JavaScript/Reference/Operators/Operator_Precedence +--- +
{{jsSidebar("Operators")}}
+ +

Sumario

+ +

La precedencia de operadores determina el orden en el cual los operadores son evaluados. Los operadores con mayor precedencia son evaluados primero.

+ +

Ejemplo:

+ +
3 + 4 * 5 // retorna 23
+
+ +

El operador de multiplicación ("*") tiene una precedencia mas alta que el operador de suma ("+") y por eso sera evaluado primero.

+ +

Asociatividad

+ +

La asociatividad determina el orden en el cual los operadores con el mismo nivel de precedencia son procesados. Por ejemplo:

+ +
a OP b OP c
+
+ +

La asociatividad de izquierda a derecha significa que esa expresión es procesada como (a OP b) OP c, mientras que la asociatividad de derecha a izquierda significa que es procesada como a OP (b OP c). Los operadores de asignación tienen asociatividad de derecha a izquierda, por lo que puedes escribir:

+ +
a = b = 5;
+
+ +

para asignar 5 a las dos variables. Esto es porque el operador de asignación retorna el valor que asignó. Primero b es inicializada a 5. Despues a es inicializada al valor de b.

+ +

Tabla

+ +

La siguiente tabla esta ordenada de la precedencia más alta (0) a la más baja (18).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrecedenciaTipo de operadorAsociatividadOperador
0groupingn/a()
1memberleft-to-right.
[]
newn/anew()
2function callleft-to-right()
newright-to-leftnew
3incrementn/a++
decrementn/a--
4logical-notright-to-left!
bitwise notright-to-left~
unary +right-to-left+
unary negationright-to-left-
typeofright-to-lefttypeof
voidright-to-leftvoid
deleteright-to-leftdelete
5multiplicationleft-to-right*
divisionleft-to-right/
modulusleft-to-right%
6additionleft-to-right+
subtractionleft-to-right-
7bitwise shiftleft-to-right<<
>>
>>>
8relationalleft-to-right<
<=
>
>=
inleft-to-rightin
instanceofleft-to-rightinstanceof
9equalityleft-to-right==
!=
===
!==
10bitwise-andleft-to-right&
11bitwise-xorleft-to-right^
12bitwise-orleft-to-right|
13logical-andleft-to-right&&
14logical-orleft-to-right||
15conditionalright-to-left?:
16assignmentright-to-left=
+=
-=
*=
/=
%=
<<=
>>=
>>>=
&=
^=
|=
17yieldright-to-leftyield
18commaleft-to-right,
+ +

diff --git a/files/es/web/javascript/reference/operators/optional_chaining/index.html b/files/es/web/javascript/reference/operators/optional_chaining/index.html new file mode 100644 index 0000000000..06ccb5a999 --- /dev/null +++ b/files/es/web/javascript/reference/operators/optional_chaining/index.html @@ -0,0 +1,187 @@ +--- +title: Encadenamiento opcional +slug: Web/JavaScript/Referencia/Operadores/Encadenamiento_opcional +translation_of: Web/JavaScript/Reference/Operators/Optional_chaining +--- +
{{JSSidebar("Operators")}}
+ +

El operador de encadenamiento opcional ?. permite leer el valor de una propiedad ubicada dentro de una cadena de objetos conectados sin tener que validar expresamente que cada referencia en la cadena sea válida. El operador ?. funciona de manera similar a el operador de encadenamiento ., excepto que en lugar de causar un error si una referencia es casi-nula ({{JSxRef("null")}} o {{JSxRef("undefined")}}), la expresión hace una evaluación de circuito corto con un valor de retorno de undefined. Cuando se usa con llamadas a funciones, devuelve undefined si la función dada no existe.

+ +

Esto da como resultado expresiones más cortas y simples cuando se accede a propiedades encadenadas dónde existe la posibilidad de que falte una referencia. También puede ser útil al explorar el contenido de un objeto cuando no hay una garantía conocida de qué propiedades se requieren.

+ +
{{EmbedInteractiveExample("pages/js/expressions-optionalchainingoperator.html", "taller")}}
+ + + +

Sintaxis

+ +
obj?.prop
+obj?.[expr]
+arr?.[index]
+func?.(args)
+
+ +

Descripción

+ +

El operador de encadenamiento opcional proporciona una forma de simplificar el acceso a los valores a través de objetos conectados cuando es posible que una referencia o función sea undefinednull.

+ +

Por ejemplo, considere un objeto obj que tiene una estructura anidada. Sin encadenamiento opcional, buscar una subpropiedad profundamente anidada requiere validar las referencias intermedias, como:

+ +
let nestedProp = obj.first && obj.first.second;
+
+ +

Se confirma que el valor de obj.first no es null (y no es undefined) antes de acceder al valor de obj.first.second. Esto evita el error que ocurriría si simplemente accediera a obj.first.second directamente sin probar obj.first.

+ +

Sin embargo, con el operador de encadenamiento opcional (?.), No tiene que probar explícitamente, ni realizar una evaluación de circuito corto basada en el estado de obj.first antes de intentar acceder a obj.first.second:

+ +
let nestedProp = obj.first?.second;
+
+ +

Al usar el operador ?. en lugar de solo el ., JavaScript sabe verificar implícitamente para asegurarse de que obj.first no es nullundefined antes de intentar acceder  obj.first.second. Si obj.first es nullundefined, la expresión hace una evaluación de circuito corto automáticamente y retorna undefined.

+ +

Esto es equivalente a lo siguiente, excepto que la variable temporal es de hecho no creada:

+ +
let temp = obj.first;
+let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);
+
+ +

Encadenamiento opcional con llamadas a funciones

+ +

Puede usar el encadenamiento opcional cuando intente llamar a un método que puede no existir. Esto puede ser útil, por ejemplo, cuando se usa una API en la que un método podría no estar disponible, ya sea debido a la antigüedad de la implementación o debido a una característica que no está disponible en el dispositivo del usuario.

+ +

El uso de encadenamiento opcional con llamadas a funciones hace que la expresión regrese automáticamente undefined en lugar de lanzar una excepción si no se encuentra el método:

+ +
let result = someInterface.customMethod?.();
+ +
+

Nota: Si hay una propiedad con ese nombre y que no es una función, usar ?. aún levantará una excepción {{JSxRef("TypeError")}} (x.y is not a function).

+
+ +

Manejo de callbacks opcionales o manejadores de eventos

+ +

Si utiliza callbacks o métodos de recuperación de un objeto con una asignación de desestructuración, es posible que tenga valores inexistentes que no puede llamar como funciones a menos que haya probado su existencia. Usando ?., Puede evitar esta prueba adicional:

+ +
// Escrito a partir de ES2019
+function doSomething(onContent, onError) {
+  try {
+    // ... hacer algo con los datos
+  }
+  catch (err) {
+    if (onError) { // Probando si onError realmente existe
+      onError(err.message);
+    }
+  }
+}
+
+ +
// Usando encadenamiento opcional con llamado de funciones
+function doSomething(onContent, onError) {
+  try {
+   // ... hacer algo con los datos
+  }
+  catch (err) {
+    onError?.(err.message); // Sin excepción si onError esta undefined
+  }
+}
+
+ +

Encadenamiento opcional con expresiones

+ +

También puede usar el operador de encadenamiento opcional al acceder a propiedades con una expresión usando la notación de corchetes:

+ +
let nestedProp = obj?.['prop' + 'Name'];
+
+ +

El encadenamiento opcional no es válido al lado izquierdo de una asignación

+ +
let object = {};
+object?.property = 1; // Uncaught SyntaxError: Invalid left-hand side in assignment
+ +

Acceso a elementos de un arreglo con encadenamiento opcional

+ +
let arrayItem = arr?.[42];
+ +

Ejemplos

+ +

Ejemplo básico

+ +

Este ejemplo busca el valor de la propiedad name para el miembro bar en un mapa cuando no existe dicho miembro. El resultado es por lo tanto es undefined.

+ +
let myMap = new Map();
+myMap.set("foo", {name: "baz", desc: "inga"});
+
+let nameBar = myMap.get("bar")?.name;
+ +

Evaluación de circuito corto

+ +

Cuando se usa el encadenamiento opcional con expresiones, si el operando izquierdo es null o undefined, la expresión no se evaluará. Por ejemplo:

+ +
let potentiallyNullObj = null;
+let x = 0;
+let prop = potentiallyNullObj?.[x++];
+
+console.log(x); // 0 como x no se incrementó
+
+ +

Apilando el operador de encadenamiento opcional

+ +

Con estructuras anidadas, es posible usar encadenamiento opcional varias veces:

+ +
let customer = {
+  name: "Carl",
+  details: {
+    age: 82,
+    location: "Paradise Falls" // "detailed address" es desconocida
+  }
+};
+let customerCity = customer.details?.address?.city;
+
+// … esto también funciona con la función opcional de encadenamiento
+let duration = vacations.trip?.getTime?.();
+
+ +

Combinando con el operador de fusión nulo

+ +

El {{JSxRef("Operators/Nullish_Coalescing_Operator", "operador de fusión nulo", '', 1)}} se puede usar después del encadenamiento opcional para generar un valor predeterminado cuando no se encontró ninguno:

+ +
let customer = {
+  name: "Carl",
+  details: { age: 82 }
+};
+const customerCity = customer?.city ?? "Unknown city";
+console.log(customerCity); // Unknown city
+ +

Especificaciones

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#prod-OptionalExpression', 'optional expression')}}
+ +

Compatibilidad de navegadores

+ +
+ + +

{{Compat("javascript.operators.optional_chaining")}}

+
+ +

Progreso de implementación

+ +

La siguiente tabla proporciona un estado de implementación diaria para esta característica, porque esta característica aún no ha alcanzado la estabilidad entre navegadores. Los datos se generan ejecutando las pruebas de características relevantes en Test262, el conjunto de pruebas estándar de JavaScript, en la compilación nocturna o la última versión del motor de JavaScript de cada navegador.

+ +
{{EmbedTest262ReportResultsTable("optional-chaining")}}
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/pipeline_operator/index.html b/files/es/web/javascript/reference/operators/pipeline_operator/index.html new file mode 100644 index 0000000000..cb671264cc --- /dev/null +++ b/files/es/web/javascript/reference/operators/pipeline_operator/index.html @@ -0,0 +1,78 @@ +--- +title: Operador Pipeline +slug: Web/JavaScript/Referencia/Operadores/Pipeline_operator +tags: + - Encadenamiento + - Experimental + - JavaScript + - Operador + - Pipeline +translation_of: Web/JavaScript/Reference/Operators/Pipeline_operator +--- +
{{jsSidebar("Operators")}} {{SeeCompatTable}}
+ +

El operador experimental pipeline |> (actualmente en su fase1) conduce el valor de una expresión dentro de una función. Esto permite la creación de llamadas de función en cadena de un modo más legible. El resultado es una simplificación sintáctica en la cual la llamada a una función con un único parámetro puede ser escrita del siguiente modo:

+ +
let url = "%21" |> decodeURI;
+ +

La llamada equivalente en sintaxis tradicional tiene este aspecto:

+ +
let url = decodeURI("%21");
+
+ +

Sintaxis

+ +
expression |> function
+
+ +

El valor especificado en la expression se pasa dentro de la  function como su único parámetro.

+ +

Ejemplos

+ +

Encadenando llamadas  a funciones

+ +

El operador pipeline puede mejorar la legibilidad cuando se encadenan varias funciones entre si.

+ +
const double = (n) => n * 2;
+const increment = (n) => n + 1;
+
+// sin operador pipeline
+double(increment(double(double(5)))); // 42
+
+// con operador pipeline
+5 |> double |> double |> increment |> double; // 42
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
Borrador del operador PipelineFase 1Todavía no forma parte de la especificación ECMAScript
+ +

Compatibilidad con navegadores

+ +
+ + +

{{Compat("javascript.operators.pipeline")}}

+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/property_accessors/index.html b/files/es/web/javascript/reference/operators/property_accessors/index.html new file mode 100644 index 0000000000..565a8b7f92 --- /dev/null +++ b/files/es/web/javascript/reference/operators/property_accessors/index.html @@ -0,0 +1,85 @@ +--- +title: Miembros +slug: Web/JavaScript/Referencia/Operadores/Miembros +tags: + - JavaScript + - Operator +translation_of: Web/JavaScript/Reference/Operators/Property_Accessors +--- +
{{jsSidebar("Operators")}}
+ +

Resumen

+ +

Los operadores de miembros proporcionan acceso a las propiedades y métodos de un objeto.

+ +

Un objeto es en realidad un arreglo asociativo (por ejemplo map ,dictionary ,hash ,lookup table ). Las claves en este arreglo son los nombres de las propiedades y los métodos (propiedades que hacen referencia a funciones). Hay dos modos de acceder a estas propiedades: notación por punto y notación por corchete (es decir, operador de subscripción).

+ +

Nota: La especificación ECMAScript etiqueta estos operadores como "property accessors" en vez de "operadores de miembro" (member operators).

+ +

Notación por punto

+ +
get = objeto.propiedad;
+objeto.propiedad = set;
+
+ +

propiedad debe ser un identificador válido de JavaScript, esto es, una secuencia alfanumérica de caracteres, incluyendo también el guión bajo ("_") y el signo dolar ("$"), que no puede comenzar por un número. Por ejemplo, objeto.$1 es válido, mientras que objeto.1 no lo es.

+ +

Ejemplo:

+ +
document.createElement('pre');
+
+ +

Aquí, el método llamado "createElement" se recupera de document y se le llama.

+ +

Notación por corchetes

+ +
get = objeto[nombre_propiedad];
+objeto[nombre_propiedad] = set;
+
+ +

nombre_propiedad es una cadena. La cadena no tiene que ser un identificador válido; puede tener cualquier valor, por ejemplo "1foo", "!bar!", o incluso " " (un espacio).

+ +

Ejemplo:

+ +
document['createElement']('pre');
+
+ +

Esto hace exactamente lo mismo que el ejemplo anterior.

+ +

Nombres de propiedades

+ +

Los nombres de propiedades deben ser cadenas. Esto significa que no pueden usarse objetos distintos a cadenas como claves en un objeto. Cualquier objeto que no sea una cadena, incluyendo números, se convierte al tipo cadena a través de su método {{jsxref("Object.toString")}}.

+ +

Ejemplos:

+ +
var objeto = {};
+objeto['1'] = 'valor';
+alert(objeto[1]);
+
+ +

Ésto tendrá como resultado "valor", ya que 1 se convertirá por tipo a '1'.

+ +
var foo = {propiedad_unica: 1}, bar = {propiedad_unica: 2}, objeto = {};
+objeto[foo] = 'valor';
+alert(objeto[bar]);
+
+ +

Ésto también tiene como resultado "valor", ya que tanto foo como bar se convierten a la misma cadena. En el motor de JavaScript SpiderMonkey, esta cadena sería "{{ mediawiki.external('objeto Object') }}".

+ +

Enlace a métodos

+ +

Un método no está enlazado al objeto del que es método. Específicamente, this no está establecido en un método, es decir, this no se refiere necesariamente a un objeto conteniendo el método. this, en cambio, se "pasa" mediante la llamada de función.

+ +

Vea enlace a métodos.

+ +

Nota sobre eval

+ +

Los principiantes en JavaScript a menudo tienen el error de usar {{jsxref("eval")}} cuando la notación por corchetes puede usarse a cambio. Por ejemplo, la siguiente sintaxis se ve a menudo en muchos scripts.

+ +
x = eval('document.nombre_formulario.' + cadenaControlFormulario + '.value');
+
+ +

eval es lenta y se debería evitar en la medida de lo posible. Es mejor usar la notación por corchetes a cambio:

+ +
x = document.nombre_formulario[cadenaControlFormulario].value;
+
diff --git a/files/es/web/javascript/reference/operators/remainder/index.html b/files/es/web/javascript/reference/operators/remainder/index.html new file mode 100644 index 0000000000..1a6a7c56da --- /dev/null +++ b/files/es/web/javascript/reference/operators/remainder/index.html @@ -0,0 +1,82 @@ +--- +title: Resto (%) +slug: Web/JavaScript/Referencia/Operadores/Resto +translation_of: Web/JavaScript/Reference/Operators/Remainder +--- +
{{jsSidebar("Operators")}}
+ +

El operador resto (%) devuelve el resto de la división entre dos operandos. Siempre toma el signo del dividendo.

+ +
{{EmbedInteractiveExample("pages/js/expressions-remainder.html")}}
+ +
+ + + +

Tener en cuenta que en la mayoría de los lenguajes de programación, el operador de resto es ‘%’, pero en otros (como Python, Perl) es el operador módulo. Ambos son iguales para valores positivos, pero cuando el divisor y el dividendo son de signos distintos, se obtienen distintos resultados. Para obtener el módulo en JavaScript, en lugar de a % n, usa ((a % n ) + n ) % n.

+ +

Sintaxis

+ +
Operador: var1 % var2
+
+ +

Ejemplos

+ +

Resto con dividendo positivo

+ +
 12 % 5  //  2
+ 1 % -2 //  1
+ 1 % 2  //  1
+ 2 % 3  //  2
+5.5 % 2 // 1.5
+
+ +

Resto con dividendo negativo

+ +
-12 % 5 // -2
+-1 % 2  // -1
+-4 % 2  // -0
+ +

Resto con NaN

+ +
NaN % 2 // NaN
+ +

Resto con Infinity

+ +
Infinity % 2 // NaN
+Infinity % 0 // NaN
+Infinity % Infinity // NaN
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-multiplicative-operators', 'Remainder operator')}}
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.operators.remainder")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/spread_syntax/index.html b/files/es/web/javascript/reference/operators/spread_syntax/index.html new file mode 100644 index 0000000000..5a17cd05a2 --- /dev/null +++ b/files/es/web/javascript/reference/operators/spread_syntax/index.html @@ -0,0 +1,242 @@ +--- +title: Sintáxis Spread +slug: Web/JavaScript/Referencia/Operadores/Sintaxis_Spread +tags: + - ECMAScript6 + - Iteradores + - JavaScript +translation_of: Web/JavaScript/Reference/Operators/Spread_syntax +--- +
{{jsSidebar("Operators")}}
+ +
La sintaxis extendida o spread syntax permite a un elemento iterable tal como un arreglo o cadena ser expandido en lugares donde cero o más argumentos (para llamadas de  función) o elementos (para Array literales) son esperados, o a un objeto ser expandido en lugares donde cero o más pares de valores clave (para literales Tipo Objeto) son esperados.
+ +
{{EmbedInteractiveExample("pages/js/expressions-spreadsyntax.html")}}
+ +
+ + + +

Sintaxis

+ +

Para llamadas de funciones:

+ +
myFunction(...iterableObj);
+
+ +

Para arreglos literales o cadenas de caracteres:

+ +
[...iterableObj, '4', 'five', 6];
+ +

Para objetos literales (nuevo en ECMAScript 2018):

+ +
let objClone = { ...obj };
+ +

Ejemplos

+ +

Spread en llamadas de función

+ +

Reemplaza "apply"

+ +

Es frecuente usar {{jsxref( "Function.prototype.apply")}} en casos donde quieres usar los elementos de un arreglo como argumentos de una función.

+ +
function myFunction(x, y, z) { }
+var args = [0, 1, 2];
+myFunction.apply(null, args);
+ +

Con la sintaxis expandida (spread syntax), el código anterior puede ser escrito como:

+ +
function myFunction(x, y, z) { }
+var args = [0, 1, 2];
+myFunction(...args);
+ +

Cualquier argumento en la lista de argumentos puede usar la sintáxis expandida y esto puede ser usado varias veces.

+ +
function myFunction(v, w, x, y, z) { }
+var args = [0, 1];
+myFunction(-1, ...args, 2, ...[3]);
+ +

"Apply" para "new"

+ +

Cuando se llama un constructor con new, no es posible usar directamente un arreglo y apply (apply hace un [[Call]] y no un [[Construct]]). Sin embargo, un arreglo puede ser fácilmente usado con un new gracias a la sintáxis expandida:

+ +
var dateFields = [1970, 0, 1];  // 1 Jan 1970
+var d = new Date(...dateFields);
+
+ +

Para usar new con un arreglo de parámetros sin la sintáxis expandida, podrías tener que hacerlo indirectamente a través de una aplicación parcial:

+ +
function applyAndNew(constructor, args) {
+   function partial () {
+      return constructor.apply(this, args);
+   };
+   if (typeof constructor.prototype === "object") {
+      partial.prototype = Object.create(constructor.prototype);
+   }
+   return partial;
+}
+
+
+function myConstructor () {
+   console.log("arguments.length: " + arguments.length);
+   console.log(arguments);
+   this.prop1="val1";
+   this.prop2="val2";
+};
+
+var myArguments = ["hi", "how", "are", "you", "mr", null];
+var myConstructorWithArguments = applyAndNew(myConstructor, myArguments);
+
+console.log(new myConstructorWithArguments);
+// (internal log of myConstructor):           arguments.length: 6
+// (internal log of myConstructor):           ["hi", "how", "are", "you", "mr", null]
+// (log of "new myConstructorWithArguments"): {prop1: "val1", prop2: "val2"}
+ +

Expandir Array literales

+ +

Un literal Array más poderoso

+ +

Sin sintaxis expandida (spread syntax), para crear un nuevo arreglo usando un arreglo existente como parte de él,no es suficiente la sintaxis de Array literal y en su lugar se debe usar código imperativo con una combinación de push, splice, concat, etc. Con la sintaxis expandida, esto se vuelve mucho mas práctico:

+ +
var parts = ['shoulders', 'knees'];
+var lyrics = ['head', ...parts, 'and', 'toes'];
+// ["head", "shoulders", "knees", "and", "toes"]
+
+ +

Así como para expandir listas de argumentos, ... puede ser usado en cualquier parte dentro del Array literal, y múltiples veces.

+ +

Copiar un arreglo

+ +
var arr = [1, 2, 3];
+var arr2 = [...arr]; // like arr.slice()
+arr2.push(4);
+
+// arr2 becomes [1, 2, 3, 4]
+// arr remains unaffected
+
+ +

Nota: La sintaxis expandida efectivamente va a un nivel de profundidad mientras copia un arreglo. Por lo tanto, esto no permite copiar arreglos multidimensionales como se muestra en los siguientes ejemplos (es lo mismo con {{jsxref("Object.assign()")}} y sintaxis spread).

+ +
var a = [[1], [2], [3]];
+var b = [...a];
+b.shift().shift(); // 1
+// Now array a is affected as well: [[], [2], [3]]
+
+ +

Una forma mejor para concatenar arreglos

+ +

{{jsxref("Array.concat")}} es usada a menudo para concatenar un arreglo al final de un arreglo ya existente. Sin la sintaxis spread se realiza:

+ +
var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+// Append all items from arr2 onto arr1
+arr1 = arr1.concat(arr2);
+ +

Con la sintaxis spread se transforma en:

+ +
var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+arr1 = [...arr1, ...arr2];
+
+ +

{{jsxref("Array.unshift")}} es a menudo usada para insertar un arreglo de valores al inicio de un arreglo existente. Sin la sintáxis spread, esto es hecho como:

+ +
var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+// Prepend all items from arr2 onto arr1
+Array.prototype.unshift.apply(arr1, arr2) // arr1 is now [3, 4, 5, 0, 1, 2]
+ +

Con la sintaxis spread se convierte en [Observa, sin embargo, que esto crea un nuevo arreglo arr1.  Diferente a {{jsxref("Array.unshift")}}, esto no modifica el arreglo original en sitio arr1]:

+ +
var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+arr1 = [...arr2, ...arr1]; // arr1 is now [3, 4, 5, 0, 1, 2]
+
+ +

Spread en literales tipo Objeto

+ +

La propuesta Propiedades Rest/Spread para ECMAScript (etapa 4) agrega propiedades spread a los literales Tipo Objeto. Esto copia sus propiedades enumerables desde un objeto provisto dentro de un nuevo objeto.

+ +

Shallow-cloning (excluyendo prototype) o la combinación de objetos es ahora posible usando una sintaxis más corta que {{jsxref("Object.assign()")}}.

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

Observa que {{jsxref("Object.assign()")}} desencadena setters mientras que la sintaxis spread no lo hace.

+ +

Observa que tú no puedes reemplazar o replicar la función {{jsxref("Object.assign()")}}:

+ +
var obj1 = { foo: 'bar', x: 42 };
+var obj2 = { foo: 'baz', y: 13 };
+const merge = ( ...objects ) => ( { ...objects } );
+
+var mergedObj = merge ( obj1, obj2);
+// Object { 0: { foo: 'bar', x: 42 }, 1: { foo: 'baz', y: 13 } }
+
+var mergedObj = merge ( {}, obj1, obj2);
+// Object { 0: {}, 1: { foo: 'bar', x: 42 }, 2: { foo: 'baz', y: 13 } }
+ +

En el ejemplo de arriba, el operador spread no trabaja como uno podría esperar: este dispersa un arreglo de argumentos en el literal Tipo Objeto, debido al parámetro rest.

+ +

Sólo para iterables

+ +

La sintaxis Spread (otra que en el caso de las propiedades spread) puede ser aplicada sólo a los objetos iterables:

+ +
var obj = {'key1': 'value1'};
+var array = [...obj]; // TypeError: obj is not iterable
+
+ +

Spread con muchos valores

+ +

Cuando se usa la sintaxis spread para llamados de funciones, tenga en cuenta la posibilidad de exceder el límite de longitud de argumentos del motor de JavaScript. Vea apply() para más detalles.

+ +

Sintaxis Rest (parámetros)

+ +

La sintaxis Rest luce exactamente como la sintaxis spread, pero esto es usado por la desestructuración de arreglos y objetos. De cierta forma, la sintaxis rest es la opuesta a la sintaxis spread: spread 'expande' un arreglo en sus elementos, mientras rest agrupa múltiples elementos y los 'condensa' en un único elemento. Consulta parámetros rest.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-array-initializer')}}{{Spec2('ES2015')}}Definido en varias secciones de la especificación: Array Initializer, Argument Lists
{{SpecName('ESDraft', '#sec-array-initializer')}}{{Spec2('ESDraft')}}Sin cambios.
{{SpecName('ESDraft', '#sec-object-initializer')}}{{Spec2('ESDraft')}}Definido en Object Initializer
+ +

Compatibilidad del navegador

+ + + +

{{Compat("javascript.operators.spread")}}

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/operators/strict_equality/index.html b/files/es/web/javascript/reference/operators/strict_equality/index.html new file mode 100644 index 0000000000..0d09b1de71 --- /dev/null +++ b/files/es/web/javascript/reference/operators/strict_equality/index.html @@ -0,0 +1,101 @@ +--- +title: Igualdad Estricta (===) +slug: Web/JavaScript/Referencia/Operadores/Strict_equality +translation_of: Web/JavaScript/Reference/Operators/Strict_equality +--- +
{{jsSidebar("Operators")}}
+ +

El operador de estricta igualdad (===) revisa si dos operandos son iguales y produce un resultado Booleano. A diferencia del operador de igualdad regular (==), el operador de estricta igualdad siempre considera que los operandos de distinto tipo de valor son diferentes y nunca similares.

+ +
{{EmbedInteractiveExample("pages/js/expressions-strict-equality.html")}}
+ + + +

Sintaxis

+ +
x === y
+ +

Descripción

+ +

Los operadores de estricta igualdad (=== y !==) usan el Algoritmo Estricto Comparativo de Igualdad  para comparar dos operandos:

+ + + +

La diferencia más notable entre este operador y el operador de igualdad regular (==) es que si los operandos son de distinto tipo de valor, el operador == intenta convertir los valores a un mismo tipo de dato antes de compararlos.

+ +

Ejemplos

+ +

Comparando operandos del mismo tipo

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

Comparando operandos de distinto tipo

+ +
console.log("3" === 3);           // false
+
+console.log(true === 1);          // false
+
+console.log(null === undefined);  // false
+ +

Comparando objetos

+ +
const object1 = {
+  name: "hello"
+}
+
+const object2 = {
+  name: "hello"
+}
+
+console.log(object1 === object2);  // false
+console.log(object1 === object1);  // true
+ +

Especificaciones

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality operators')}}
+ +

Compatibilidad entre exploradores

+ + + +

{{Compat("javascript.operators.strict_equality")}}

+ +

También revisa

+ + diff --git a/files/es/web/javascript/reference/operators/subtraction/index.html b/files/es/web/javascript/reference/operators/subtraction/index.html new file mode 100644 index 0000000000..21bfd3a1ac --- /dev/null +++ b/files/es/web/javascript/reference/operators/subtraction/index.html @@ -0,0 +1,65 @@ +--- +title: Sustracción (-) +slug: Web/JavaScript/Referencia/Operadores/Sustracción +tags: + - JavaScript +translation_of: Web/JavaScript/Reference/Operators/Subtraction +--- +
{{jsSidebar("Operators")}}
+ +

El operador de sustracción (-) sustrae dos operandos, produciendo su diferencia.

+ +
{{EmbedInteractiveExample("pages/js/expressions-subtraction.html")}}
+ +
+ + + +

Sintaxis

+ +
Operator: x - y
+
+ +

Ejemplos

+ +

Sustracción con números

+ +
5 - 3     // 2
+3 - 5     // -2
+ +

Sustracción de no numéricos

+ +
'foo' - 3 // NaN
+ +

Especificaciones

+ + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-subtraction-operator-minus', 'Subtraction operator')}}
+ +

Compatibilidad entre exploradores

+ + + +

{{Compat("javascript.operators.subtraction")}}

+ +

También revisa

+ + diff --git a/files/es/web/javascript/reference/operators/super/index.html b/files/es/web/javascript/reference/operators/super/index.html new file mode 100644 index 0000000000..ff2ac5ae0e --- /dev/null +++ b/files/es/web/javascript/reference/operators/super/index.html @@ -0,0 +1,178 @@ +--- +title: super +slug: Web/JavaScript/Referencia/Operadores/super +tags: + - Clases + - ECMAScript 2015 + - JavaScript + - Operador +translation_of: Web/JavaScript/Reference/Operators/super +--- +
{{jsSidebar("Operators")}}
+ +

La palabra clave super es usada para acceder y llamar funciones del padre de un objeto.

+ +

Las expresiones super.prop y super[expr] son válidas en cualquier definición de método tanto para clases como para objetos literales.

+ +

Sintaxis

+ +
// llama al método constructor del objeto padre.
+super([arguments]);
+
+// llama cualquier otro método del objeto padre.
+super.functionOnParent([arguments]);
+
+ +

Descripción

+ +

Cuando es usado en un constructor, la palabra clave super aparece  sola lo cual invoca el constructor del objeto padre. En este caso debe usarse antes de que la palabra clave this sea usada. La palabra clave super también puede utilizarse para llamar otras funciones del objeto padre.

+ +

Ejemplo

+ +

Usando super en clases

+ +

Este fragmento de código se toma del ejemplo de clases (demo en vivo). Aquí se llama a super() para evitar la duplicación de las partes del constructor que son comunes entre Rectangle y 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 necesita ser llamado primero!
+
+    // Aquí, llama al constructor de la clase padre con las longitudes
+    // previstas para el ancho y la altura de Rectangle
+    super(length, length);
+
+    // Nota: En las clases derivadas, se debe llamar a super() antes de
+    // poder usar 'this'. Salir de esto provocará un error de referencia.
+    this.name = 'Square';
+  }
+}
+ +

Super-llamando a métodos estáticos

+ +

También puede llamar a super en métodos estáticos.

+ +
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(); // 'Tengo 4 lados que son todos iguales'
+
+ +

Eliminar propiedades super generará un error

+ +

No puede usar el operador de eliminación y super.prop o super[expr] para eliminar la propiedad de una clase principal, lanzará {{jsxref("ReferenceError")}}.

+ +
class Base {
+  constructor() {}
+  foo() {}
+}
+class Derived extends Base {
+  constructor() {}
+  delete() {
+    delete super.foo; // esto es malo
+  }
+}
+
+new Derived().delete(); // ReferenceError: eliminación no válida que implica 'super'. 
+ +

super.prop no puede sobrescribir las propiedades no modificables

+ +

Al definir propiedades que no se pueden escribir, p. Ej. {{jsxref("Object.defineProperty")}}, super no puede sobrescribir el valor de la propiedad.

+ +
class X {
+  constructor() {
+    Object.defineProperty(this, 'prop', {
+      configurable: true,
+      writable: false,
+      value: 1
+    });
+  }
+  f() {
+    super.prop = 2;
+  }
+}
+
+var x = new X();
+x.f(); // TypeError: "prop" es de solo lectura
+console.log(x.prop); // 1
+
+ +

Usando super.prop en objetos literales

+ +

Super también se puede usar en el inicializador de objetos / notación literal. En este ejemplo, dos objetos definen un método. En el segundo objeto, super llama al primer método del objeto. Esto funciona con la ayuda de {{jsxref("Object.setPrototypeOf()")}} con el que podemos establecer el prototipo de obj2 en obj1, de modo que super pueda encontrar el method1 en obj1.

+ +
var obj1 = {
+  method1() {
+    console.log('method 1');
+  }
+}
+
+var obj2 = {
+  method2() {
+   super.method1();
+  }
+}
+
+Object.setPrototypeOf(obj2, obj1);
+obj2.method2(); // logs "method 1"
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES2015', '#sec-super-keyword', 'super')}}{{Spec2('ES2015')}}Definición inicial.
{{SpecName('ESDraft', '#sec-super-keyword', 'super')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ + + +

{{Compat("javascript.operators.super")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/operators/this/index.html b/files/es/web/javascript/reference/operators/this/index.html new file mode 100644 index 0000000000..74ed62bb60 --- /dev/null +++ b/files/es/web/javascript/reference/operators/this/index.html @@ -0,0 +1,239 @@ +--- +title: this +slug: Web/JavaScript/Referencia/Operadores/this +translation_of: Web/JavaScript/Reference/Operators/this +--- +
{{jsSidebar("Operators")}}
+ +

Introducción

+ +

La palabra clave this de una función se comporta un poco diferente en Javascript en comparación con otros lenguajes. Además tiene algunas diferencias entre el modo estricto y el modo no estricto.

+ +

En general, el valor de this está determinado por cómo se invoca a la función. No puede ser establecida mediante una asignación en tiempo de ejecución, y puede ser diferente cada vez que la función es invocada. ES5 introdujo el método {{jsxref("Function.bind()", "bind()")}} para establecer el valor de la función this independientemente de como es llamada, y ES2015 introdujo las funciones flecha que no proporcionan su propio "binding" de this (se mantiene el valor de this del contexto léxico que envuelve a la función)

+ +

{{EmbedInteractiveExample("pages/js/expressions-this.html")}}

+ +

Sintaxis

+ +
this
+ +

Valor

+ +

El objeto contexto de JavaScript en el cual se está ejecutando el código actual.

+ +

Contexto global

+ +

En el contexto de ejecución global (fuera de cualquier función), this se refiere al objeto global, ya sea en modo estricto o no.

+ +
console.log(this.document === document); // true
+
+// En los navegadores web, el objeto window también es un objeto global:
+console.log(this === window); // true
+
+this.a = 37;
+console.log(window.a); // 37
+
+ +
+

Nota: Puedes obtener el objeto global usando la propieda global globalThis, no importa el contexto donde se ejecute esta propiedad, siempre hará referencia al objeto global. 

+
+ +

Contexto de la función

+ +

Dentro de una función, el valor de this depende de cómo la función es llamada.

+ +

Llamada simple

+ +
function f1(){
+  return this;
+}
+
+f1() === window; // objeto global
+
+ +
En este caso, el valor de this no está establecido por la llamada. Dado que el código no está en modo estricto, el valor de this debe ser siempre un objeto por lo que por defecto es el objeto global.
+ +
+ +
+
function f2(){
+  "use strict"; // consultar modo estricto
+  return this;
+}
+
+f2() === undefined;
+
+ +
En modo estricto, el valor de this se mantiene en lo que está establecida al entrar en el contexto de ejecución. Si no está definido, permanece undefined. También se puede ajustar a cualquier valor, tales como null o 42 o "Yo no soy this".
+ +
+ +
+

Nota: En el segundo ejemplo, this debería ser {{jsxref("undefined")}}, porque f2 fue llamado sin proporcionar ninguna base (ej. window.f2()). Esta característica no fue implementada en algunos navegadores cuando se comenzó a dar soporte al modo estricto. Como resultado, retorna incorrectamente el objeto window.

+
+ +
Como un método de un objeto
+ +

Cuando una función es llamada como un método de un objeto, el this cambia por el metodo del objeto llamado.

+ +

En el siguiente ejemplo, cuando o.f() es invocado, dentro de la función this es ligado al objeto o.

+ +
var o = {
+  prop: 37,
+  f: function() {
+    return this.prop;
+  }
+};
+
+console.log(o.f()); // logs 37
+
+ +

Note que el comportamiento no es del todo afectado por cómo o dónde la función fue definida. En el ejemplo anterior, nosotros definimos la función en línea como el elemento f durante la definición de o.  Sin embargo, podriamos haber definido con la misma facilidad la primera función y luego  adjuntarlo a o.f. Hacerlo da como resultado el mismo comportamiento.

+ +
var o = {prop: 37};
+
+function independent() {
+  return this.prop;
+}
+
+o.f = independent;
+
+console.log(o.f()); // logs 37
+
+ +

Esto demuestra que sólo importa que la función fue invocada del elemento f de o.

+ +

Asimismo, el enlace this sólo se ve afectado por la referencia del miembro más inmediata. En el siguiente ejemplo, cuando invocamos a la función, lo llamamos como metodo g del objeto o.b. Esta vez durante la ejecución, this dentro de la función se referirá a o.b. El hecho de que el objeto es en sí mismo un elemento de o no tiene ninguna consecuencia, la referencia más inmediata es todo lo que importa.

+ +
o.b = {g: independent, prop: 42};
+console.log(o.b.g()); // logs 42
+
+ +

... en la cadena de prototipo

+ +

El mismo concepto es válido para los métodos definidos en alguna parte de la cadena de prototipo del objeto. Si el método esta sobre una cadena de prototipo del objeto, this se referirá al objeto donde está el método de donde fue llamado. Como si ese método estuviera dentro del objeto. 

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

En este ejemplo, el objeto asignado a la variable p no tiene su propia propiedad f, esto lo hereda de su prototipo. Pero no importa que la búsqueda de f eventualmente encuentre un elemento con ese nombre en o; la búsqueda comenzó como una referencia a p.f, asi this dentro de la funcion toma el valor del objeto referido como p. Es decir, desde que f es llamado como método de p, su this refiere a p. Esto es una interesante característica de la herencia de prototipo de JavaScript.

+ +

... o como un getter o setter

+ +

Nuevamente, el mismo concepto es válido cuando una función es invocada de un getter o un setter. Una función usado como getter o setter tiene su enlace this al objeto desde el cual la propiedad esta siendo establecida u obtenida.

+ +
function modulus(){
+  return Math.sqrt(this.re * this.re + this.im * this.im);
+}
+
+var o = {
+  re: 1,
+  im: -1,
+  get phase(){
+    return Math.atan2(this.im, this.re);
+  }
+};
+
+Object.defineProperty(o, 'modulus', {get: modulus, enumerable:true, configurable:true});
+
+console.log(o.phase, o.modulus); // logs -0.78 1.4142
+
+ +

Como un constructor

+ +

Cuando una función es usada como un constructor (con la palabra clave {{jsxref("Operadores/new", "new")}}), su this es enlazado al nuevo objeto en construcción, a menos que la ejecución de los resultados del constructor en el motor JavaScript encuentren una instrucción de retorno donde el valor de retorno sea un objeto.

+ +
/*
+ * Los constructores trabajan algo asi:
+ *
+ * function MyConstructor(){
+ *   // El cuerpo del código de la función actual va aquí.  Crear las propiedades en |this| como
+ *   // se desee mediante la asignación a los mismos.  E.g.,
+ *   this.fum = "nom";
+ *   // etcetera...
+ *
+ *   // Si la función tiene una sentencia de retorno este retorna un objeto,
+ *   // este objeto será el resultado de la expresión |new|.  Por otro lado, el
+ *   // resultado de la expresión es el objeto actualmente enlazado a |this|
+ *   // (i.e., el caso más común suele verse).
+ * }
+ */
+
+function C(){
+  this.a = 37;
+}
+
+var o = new C();
+console.log(o.a); // logs 37
+
+
+function C2(){
+  this.a = 37;
+  return {a:38};
+}
+
+o = new C2();
+console.log(o.a); // logs 38
+
+ +

En el último ejemplo (C2), debido a que un objeto fue devuelto durante la construcción, el nuevo objeto que fue enlazado a this simplemente se descarta.( Esto esencialmente hace de la declaración "this.a = 37;" codigo muerto. No esta exactamente muerto,porque es ejecutado pero se puede eliminar sin efectos externos.)

+ +

call y apply

+ +

Cuando una función usa la plabra clave this en su cuerpo, su valor puede ser enlazado a un objeto particular durante la ejecución del método {{jsxref("Function.call()", "call()")}} or {{jsxref("Function.apply()", "apply()")}} que todas las funciones hereden de  Function.prototype.

+ +
function add(c, d){
+  return this.a + this.b + c + d;
+}
+
+var o = {a:1, b:3};
+
+// El primer parámetro es el objeto a usar como 'this', parámetros posteriores se pasan como argumentos
+// en la llamada a la función
+add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16
+
+//El primer parámetro es el objeto a usar como 'this''this', la segunda es una matriz cuyos elementos
+//  se utilizan como argumentos en la llamada a la función
+add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
+
+ +

Funciones enlazadas

+ +

ECMAScript 5 introduce {{jsxref("Function.prototype.bind()")}}. Llamando a f.bind(someObject) crea una nueva función con el mismo cuerpo y alcance de f, pero donde this se produce en la función original, en la nueva función esto esta permanentemente ligado al primer argumento de bind, independientemente de cómo la función está siendo utilizada.

+ +
function f(){
+  return this.a;
+}
+
+var g = f.bind({a:"azerty"});
+console.log(g()); // azerty
+
+var o = {a:37, f:f, g:g};
+console.log(o.f(), o.g()); // 37, azerty
+
+ +

Como un controlador de eventos DOM

+ +

Cuando una función es usada como un controlador de eventos, su this es cambiado desde el elemento del evento disparado (algunos navegadores no siguen esta convención para los listeners agregados dinámicamente con otros métodos addEventListener).

+ +
// Cuando se llama como un listener, convierte en azul el elemento
+// relacionado
+function bluify(e){
+  console.log(this === e.currentTarget); // Siempre true
+  console.log(this === e.target);        // true cuando currentTarget y target son el mismo objeto
+  this.style.backgroundColor = '#A5D9F3';
+}
+
+// Consigue una lista de cada elemento en un documento
+var elements = document.getElementsByTagName('*');
+
+// Añade bluify como un click listener asi cuando se hace click sobre el elemento,
+// este cambia a azul
+for(var i=0 ; i<elements.length ; i++){
+  elements[i].addEventListener('click', bluify, false);
+}
diff --git a/files/es/web/javascript/reference/operators/typeof/index.html b/files/es/web/javascript/reference/operators/typeof/index.html new file mode 100644 index 0000000000..088791f228 --- /dev/null +++ b/files/es/web/javascript/reference/operators/typeof/index.html @@ -0,0 +1,76 @@ +--- +title: typeof +slug: Web/JavaScript/Referencia/Operadores/typeof +tags: + - JavaScript + - Operator + - Unary +translation_of: Web/JavaScript/Reference/Operators/typeof +--- +
{{jsSidebar("Operators")}}
+ +

Resumen

+ +

El operador typeof se usa en cualquiera de los siguientes modos:

+ +
    +
  1. typeof operando
  2. +
  3. typeof (operando)
  4. +
+ +

El operador typeof devuelve una cadena que indica el tipo del operando sin evaluarlo. operando es la cadena, variable, palabra clave u objeto para el que se devolverá su tipo. Los paréntesis son opcionales.

+ +

Suponga que define las siguientes variables:

+ +
var miFuncion = new Function("5+2")
+var forma = "redonda"
+var tamano = 1
+var hoy = new Date()
+
+ +

El operador typeof devuelve los siguientes resultados para estas variables

+ +
typeof miFuncion === 'function'
+typeof forma === 'string'
+typeof tamano === 'number'
+typeof hoy === 'object'
+typeof noExiste === 'undefined'
+
+ +

Para las palabras clave true y null, el operador typeof devuelve los siguientes resultados:

+ +
typeof true === 'boolean'
+typeof null === 'object'
+
+ +

Para un número o una cadena, el operador typeof devuelve los siguientes resultados:

+ +
typeof 62 === 'number'
+typeof 'Hola mundo' === 'string'
+
+ +

Para valores de propiedades, el operador typeof devuelve el tipo del valor que contiene la propiedad:

+ +
typeof document.lastModified === 'string'
+typeof window.length === 'number'
+typeof Math.LN2 === 'number'
+
+ +

Para métodos y funciones, el operador typeof devuelve los resultados siguientes:

+ +
typeof blur === 'function'
+typeof eval === 'function'
+typeof parseInt === 'function'
+typeof shape.split === 'function'
+
+ +

Para objetos predefinidos, el operador typeof devuelve los siguientes resultados:

+ +
typeof Date === 'function'
+typeof Function === 'function'
+typeof Math === 'object'
+typeof Object === 'function'
+typeof String === 'function'
+
+ +

 

diff --git a/files/es/web/javascript/reference/operators/void/index.html b/files/es/web/javascript/reference/operators/void/index.html new file mode 100644 index 0000000000..0bf8048b21 --- /dev/null +++ b/files/es/web/javascript/reference/operators/void/index.html @@ -0,0 +1,36 @@ +--- +title: void +slug: Web/JavaScript/Referencia/Operadores/void +tags: + - JavaScript + - Operator + - Unary +translation_of: Web/JavaScript/Reference/Operators/void +--- +
{{jsSidebar("Operators")}}
+ +

Resumen

+ +

El operador void se usa en cualquiera de los siguientes modos:

+ +
    +
  1. void (expresion )
  2. +
  3. void expresion
  4. +
+ +

El operador void especifica una expresión que se evalúa sin devolver un valor. expresion es una expresión JavaScript para evaluar. El paréntesis rodeando la expresión es opcional, pero usarlos es una buena práctica al programar.

+ +

Puede usar el operador void para especificar una expresión como un enlace de hipertexto. La expresión se evalúa pero no se carga en lugar del documento actual.

+ +

El siguiente código crea un enlace de hipertexto que no hace nada cuando el usuario hace click en él. Cuando el usuario hace click en el enlace, void(0) se evalúa como 0, pero eso no tiene ningún efecto en JavaScript.

+ +
<a href="javascript:void(0)">Haga click aquí para no hacer nada</a>
+
+ +

El siguiente código crea un enlace de hipertexto que envía un formulario cuando el usuario hace click en él.

+ +
<a href="javascript:void(document.forms["miFormulario"].submit())">
+Haga click aquí para enviar</a>
+
+ +
diff --git a/files/es/web/javascript/reference/operators/yield/index.html b/files/es/web/javascript/reference/operators/yield/index.html new file mode 100644 index 0000000000..7237b6d689 --- /dev/null +++ b/files/es/web/javascript/reference/operators/yield/index.html @@ -0,0 +1,130 @@ +--- +title: yield +slug: Web/JavaScript/Referencia/Operadores/yield +tags: + - Característica del lenguaje + - ECMAScript 2015 + - Generadores + - Iterador + - JavaScript + - Operador +translation_of: Web/JavaScript/Reference/Operators/yield +--- +
{{jsSidebar("Operadores")}}
+ +

La palabra clave yield se usa para pausar y reanudar una función generadora ({{jsxref("Statements/function*", "function*")}} o {{jsxref("Statements/Legacy_generator_function", "función generadora heredada")}}).

+ +
{{EmbedInteractiveExample("pages/js/expressions-yield.html", "taller")}}
+ + + +

Sintaxis

+ +
[rv] = yield [expression]
+ +
+
expression {{optional_inline}}
+
Define el valor que se devolverá desde la función generadora a través del {{jsxref("Iteration_protocols", "protocolo iterador", "#El_protocolo_iterador")}}. Si se omite, devuelve undefined en su lugar.
+
rv {{optional_inline}}
+
+

Recupera el valor opcional pasado al método next() del generador para reanudar su ejecución.

+
+
+ +

Descripción

+ +

La palabra clave yield detiene la ejecución de la función del generador y el valor de la expresión que sigue a la palabra clave yield se devuelve al llamador del generador. Se puede considerar como una versión basada en un generador de la palabra clave return.

+ +

yield solo se puede llamar directamente desde la función generadora que la contiene. No se puede llamar desde funciones anidadas o retrollamadas.

+ +

La palabra clave yield hace que la llamada al método next() del generador devuelva un objeto IteratorResult con dos propiedades: value y done. La propiedad value es el resultado de evaluar la expresión yield, y done es false, lo cual indica que la función generadora no se ha completado completamente.

+ +

Una vez en pausa en una expresión yield, la ejecución del código del generador permanece en pausa hasta que se llama al método next() del generador. Cada vez que se llama al método next() del generador, el generador reanuda la ejecución y se ejecuta hasta que alcanza uno de los siguientes:

+ + + +

Si se pasa un valor opcional al método next() del generador, ese valor se convierte en el valor devuelto por la operación yield actual del generador.

+ +

Entre la ruta del código del generador, sus operadores yield y la capacidad de especificar un nuevo valor inicial pasándolo a {{jsxref("Generator.prototype.next()")}}, los generadores ofrecen enorme poder y control.

+ +
+

Desafortunadamente, next() es asimétrico, pero eso no se puede evitar: siempre envía un valor al yield actualmente suspendido, pero devuelve el operando del siguiente yield.

+
+ +

Ejemplos

+ +

Usar yield

+ +

El siguiente código es la declaración de una función generadora de ejemplo.

+ +
function* countAppleSales () {
+  let saleList = [3, 7, 5]
+  for (let i = 0; i < saleList.length; i++) {
+    yield saleList[i]
+  }
+}
+ +

Una vez que se define una función generadora, se puede usar construyendo un iterador como el siguiente.

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

También puedes enviar un valor con next(value) al generador. 'step' se evalúa como un valor de retorno en esta sintaxis [rv] = yield [expression]

+ +
function* counter(value) {
+ let step;
+
+ while (true) {
+   step = yield ++value;
+
+   if (step) {
+     value += step;
+   }
+ }
+}
+
+const generatorFunc = counter(0);
+console.log(generatorFunc.next().value);   // 1
+console.log(generatorFunc.next().value);   // 2
+console.log(generatorFunc.next().value);   // 3
+console.log(generatorFunc.next(10).value); // 14
+console.log(generatorFunc.next().value);   // 15
+console.log(generatorFunc.next(10).value); // 26
+ +

Especificaciones

+ + + + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#prod-YieldExpression', 'Yield')}}
+ +

Compatibilidad del navegador

+ + + +

{{Compat("javascript.operators.yield")}}

+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/operators/yield_star_/index.html b/files/es/web/javascript/reference/operators/yield_star_/index.html new file mode 100644 index 0000000000..e2167b8c41 --- /dev/null +++ b/files/es/web/javascript/reference/operators/yield_star_/index.html @@ -0,0 +1,199 @@ +--- +title: yield* +slug: Web/JavaScript/Referencia/Operadores/yield* +tags: + - ECMAScript6 + - JavaScript +translation_of: Web/JavaScript/Reference/Operators/yield* +--- +
{{jsSidebar("Operators")}}
+ +

La expresión yield* es usada para delegar a otro {{jsxref("Statements/function*", "generator")}} u objeto iterable.

+ +

Sintaxis

+ +
 yield* [[expression]];
+ +
+
expression
+
La expresión que retorna un objeto iterable
+
+ +

Descripción

+ +

La expresión yield* itera sobre el operador realizando yield de cada valor retornado por este.

+ +

El valor de la expresion yield* es el valor retornado por el iterador en si mismo cuando es finalizado (ej., cuando done es true).

+ +

Ejemplos

+ +

Delegando a otro generator

+ +

En el siguiente código, los valores declarados con yield en g1() son devueltos por las llamadas a next() al igual que en g2().

+ +
function* g1() {
+  yield 2;
+  yield 3;
+  yield 4;
+}
+
+function* g2() {
+  yield 1;
+  yield* g1();
+  yield 5;
+}
+
+var iterator = g2();
+
+console.log(iterator.next()); // { value: 1, done: false }
+console.log(iterator.next()); // { value: 2, done: false }
+console.log(iterator.next()); // { value: 3, done: false }
+console.log(iterator.next()); // { value: 4, done: false }
+console.log(iterator.next()); // { value: 5, done: false }
+console.log(iterator.next()); // { value: undefined, done: true }
+
+ +

Otros objetos iterables

+ +

Además de los objetos generator, yield* también se puede usar yield sobre otros tipos de iterables, ej. arrays, strings u objetos arguments.

+ +
function* g3() {
+  yield* [1, 2];
+  yield* "34";
+  yield* Array.from(arguments);
+}
+
+var iterator = g3(5, 6);
+
+console.log(iterator.next()); // { value: 1, done: false }
+console.log(iterator.next()); // { value: 2, done: false }
+console.log(iterator.next()); // { value: "3", done: false }
+console.log(iterator.next()); // { value: "4", done: false }
+console.log(iterator.next()); // { value: 5, done: false }
+console.log(iterator.next()); // { value: 6, done: false }
+console.log(iterator.next()); // { value: undefined, done: true }
+
+ +

El valor de la expresión yield*

+ +

yield* es una expresión, no una declaración, por lo que se evalua como un valor.

+ +
function* g4() {
+  yield* [1, 2, 3];
+  return "foo";
+}
+
+var result;
+
+function* g5() {
+  result = yield* g4();
+}
+
+var iterator = g5();
+
+console.log(iterator.next()); // { value: 1, done: false }
+console.log(iterator.next()); // { value: 2, done: false }
+console.log(iterator.next()); // { value: 3, done: false }
+console.log(iterator.next()); // { value: undefined, done: true },
+                              // g4() returned { value: "foo", done: true } at this point
+
+console.log(result);          // "foo"
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES6', '#', 'Yield')}}{{Spec2('ES6')}}Definición inical.
{{SpecName('ESDraft', '#', 'Yield')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad con navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Soporte básico {{CompatVersionUnknown}}{{CompatGeckoDesktop("27.0")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatGeckoMobile("27.0")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Notas específicas de Firefox

+ + + +

Ver también

+ + diff --git a/files/es/web/javascript/reference/statements/async_function/index.html b/files/es/web/javascript/reference/statements/async_function/index.html new file mode 100644 index 0000000000..573c10fad8 --- /dev/null +++ b/files/es/web/javascript/reference/statements/async_function/index.html @@ -0,0 +1,173 @@ +--- +title: Función async +slug: Web/JavaScript/Referencia/Sentencias/funcion_asincrona +tags: + - Declaración + - Ejemplo + - JavaScript + - función +translation_of: Web/JavaScript/Reference/Statements/async_function +--- +
+
{{jsSidebar("Statements")}}
+ +

La declaración de función async define una función asíncrona, la cual devuelve un objeto {{jsxref("Global_Objects/AsyncFunction","AsyncFunction")}}.

+ +
+

Es posible definir también funciones asíncronas a través de una {{jsxref("Operators/async_function", "expresión de función async", "", 1)}}.

+
+
+ +
{{EmbedInteractiveExample("pages/js/statement-async.html", "taller")}}
+ + + +

Sintaxis

+ +
async function name([param[, param[, ... param]]]) {
+   statements
+}
+
+ +

Parámetros

+ +
+
name
+
El nombre de la función.
+
+ +
+
param
+
El nombre de un argumento que se debe pasar a la función.
+
+ +
+
statements
+
Las declaraciones que conforman el cuerpo de la función.
+
+ +

Valor de retorno

+ +

Un objeto {{jsxref("Global_Objects/AsyncFunction","AsyncFunction")}}, que representa una función asíncrona que ejecuta el código contenido dentro de la función.

+ +

Descripción

+ +

Cuando se llama a una función async, esta devuelve un elemento {{jsxref("Promise")}}. Cuando la función async devuelve un valor, Promise se resolverá con el valor devuelto. Si la función async genera una excepción o algún valor, Promise se rechazará con el valor generado.

+ +

Una función async puede contener una expresión {{jsxref("Operators/await", "await")}}, la cual pausa la ejecución de la función asíncrona y espera la resolución de la Promise pasada y, a continuación, reanuda la ejecución de la función async y devuelve el valor resuelto.

+ +
+

La finalidad de las funciones async/await es simplificar el comportamiento del uso síncrono de promesas y realizar algún comportamiento específico en un grupo de Promises. Del mismo modo que las Promises son semejantes a las devoluciones de llamadas estructuradas, async/await se asemejan a una combinación de generadores y promesas.

+
+ +

Ejemplos

+ +

Ejemplo sencillo

+ +
function resolveAfter2Seconds(x) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      resolve(x);
+    }, 2000);
+  });
+}
+
+
+async function add1(x) {
+  const a = await resolveAfter2Seconds(20);
+  const b = await resolveAfter2Seconds(30);
+  return x + a + b;
+}
+
+add1(10).then(v => {
+  console.log(v);  // prints 60 after 4 seconds.
+});
+
+
+async function add2(x) {
+  const p_a = resolveAfter2Seconds(20);
+  const p_b = resolveAfter2Seconds(30);
+  return x + await p_a + await p_b;
+}
+
+add2(10).then(v => {
+  console.log(v);  // prints 60 after 2 seconds.
+});
+
+ +
+

No se deben confundir await y Promise.all

+ +

En add1, la ejecución se suspende durante dos segundos correspondientes al primer operador await, y luego durante otros dos segundos correspondientes al segundo await. El segundo temporizador no se crea hasta que el primero no se haya disparado ya. En add2, ambos temporizadores se crean y, acto seguido, ambos reciben await. Esto provoca la resolución en dos segundos y no cuatro, ya que los temporizadores se ejecutaron de manera simultánea. Sin embargo, ambas llamadas await aún pueden ejecutarse en series, no en paralelo: esto no constituye ninguna aplicación automática de Promise.all. Si se desea aplicar await a dos o más promesas en paralelo, es preciso utilizar Promise.all.

+
+ +

Reescritura de una cadena de promesas con una función async

+ +

Una API que devuelva una {{jsxref("Promise")}} tendrá como resultado una cadena de promesas, y dividirá la función en muchas partes. Estudie este código:

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

Es posible reescribirlo utilizando un solo operador async de esta manera:

+ +
async function getProcessedData(url) {
+  let v;
+  try {
+    v = await downloadData(url);
+  } catch(e) {
+    v = await downloadFallbackData(url);
+  }
+  return processDataInWorker(v);
+}
+
+ +

Observe que, en el ejemplo anterior, no hay ninguna instrucción await dentro de la instrucción return, porque el valor de retorno de una async function queda implícitamente dentro de un {{jsxref("Promise.resolve")}}.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ESDraft', '#sec-async-function-definitions', 'Función async')}}{{Spec2('ESDraft')}}Definición inicial en ES2017.
{{SpecName('ES8', '#sec-async-function-definitions', 'Función async')}}{{Spec2('ES8')}} 
+ +

Compatibilidad entre navegadores

+ +
+ + +

{{Compat("javascript.statements.async_function")}}

+
+ +

Véase también

+ + diff --git a/files/es/web/javascript/reference/statements/block/index.html b/files/es/web/javascript/reference/statements/block/index.html new file mode 100644 index 0000000000..36b2054d60 --- /dev/null +++ b/files/es/web/javascript/reference/statements/block/index.html @@ -0,0 +1,89 @@ +--- +title: block +slug: Web/JavaScript/Referencia/Sentencias/block +tags: + - JavaScript + - Referencia + - Referência(2) + - Statement +translation_of: Web/JavaScript/Reference/Statements/block +--- +
{{jsSidebar("Statements")}}
+ +

Resumen

+ +

Una sentencia block se utiliza para agrupar cero o más sentencias. Este grupo block se delimita por un par de llaves.

+ +

Sintaxis

+ +
{ sentencia_1; sentencia_2; ... sentencia_n; }
+
+ +
+
sentencia_1, sentencia_2, sentencia_n
+
Sentencias agrupadas dentro de una sentencia block.
+
+ +

Descripción

+ +

Esta sentencia se utiliza comúnmente para controlar sentencias de flujo (es decir if, for, while). Por ejemplo:

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

Las variables declaradas con var no tienen alcance de bloque(block scope). Las variables introducidas dentro de un grupo block tienen el alcance de la función que lo contiene o del script, y los efectos de su asignación persisten más allá del grupo block en sí mismo. En otras palabras, las sentencias block no incluyen ningún alcance. Aunque los grupos block "en solitario" (standalone) son una sintaxis válida, usted no querrá utilizar grupos block en solitario en JavaScript, ya que ellos no hacen lo que parecen, si piensa que funcionan de manera similar a los bloques en C o Java. Por ejemplo:

+ +
var x = 1;
+{
+   var x = 2;
+}
+alert(x); // resultado 2
+
+ +

Este obtiene el resultado 2 ya que la sentencia var x dentro del grupo block tiene el mismo alcance que la sentencia var x antes del mismo. En C o Java, el código equivalente tendría como resultado 1.

+ +

Con let const

+ +

Por el contrario, las variables declaradas con let y const tienen alcance de bloque.

+ +
let x = 1;
+{
+  let x = 2;
+}
+console.log(x); // logs 1
+
+ +

El alcance x = 2 es limitado solamente al bloque en el que está definido.

+ +

Lo mismo para  const:

+ +
const c = 1;
+{
+  const c = 2;
+}
+console.log(c); // logs 1 y no lanza SyntaxError...
+
+ +

Tenga en cuenta que la variable  const c = 2 con alcance de bloque, no lanza un  SyntaxError: El identificador 'c' ya ha sido declarado. Esto es porque se puede declarar de forma única dentro del bloque, sin interferir con la otra que tiene un  alcance global.

+ +

Con function

+ +

La declaración de una función también tiene un alcance limitado dentro del bloque donde se produce la declaración:

+ +
nacion('frances');  // TypeError: nacion no es una función
+{
+  function nacion(nacionalidad) {
+   console.log('Yo soy ' + nacionalidad);
+  }
+nacion('español'); // correcto. logs Yo soy español
+}
+ +

 

+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/statements/break/index.html b/files/es/web/javascript/reference/statements/break/index.html new file mode 100644 index 0000000000..aff2a58733 --- /dev/null +++ b/files/es/web/javascript/reference/statements/break/index.html @@ -0,0 +1,41 @@ +--- +title: break +slug: Web/JavaScript/Referencia/Sentencias/break +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/break +--- +
+ {{jsSidebar("Statements")}}
+

Resumen

+

Termina el bucle actual, sentecia switch o label y transfiere el control del programa a la siguiente sentencia a la sentecia de terminación de éstos elementos.

+

Sintaxis

+
break [etiqueta];
+
+
+ etiqueta
+
+ Identificador asociado con la etiqueta de la sentencia.
+
+

Descripción

+

La sentencia break incluye una etiqueta opcional que permite al programa salir de una sentencia etiquetada. La sentencia break necesita estar anidada dentro de la sentencia etiquetada. La sentencia etiquetada puede ser cualquier tipo de sentencia; no tiene que ser una sentencia de bucle.

+

Ejemplos

+

Ejemplo: Usando break

+

La siguiente función tiene una sentencia que termina el bucle {{jsxref("Sentencias/while", "while")}} cuando i es 3, y entonces devuelve el valor 3 * x.

+
function comprobarBreak(x) {
+   var i = 0;
+   while (i < 6) {
+      if (i == 3)
+         break;
+      i++;
+   }
+   return i * x;
+}
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/statements/class/index.html b/files/es/web/javascript/reference/statements/class/index.html new file mode 100644 index 0000000000..c37b9ba43b --- /dev/null +++ b/files/es/web/javascript/reference/statements/class/index.html @@ -0,0 +1,148 @@ +--- +title: class +slug: Web/JavaScript/Referencia/Sentencias/class +translation_of: Web/JavaScript/Reference/Statements/class +--- +
{{jsSidebar("Statements")}}
+ +

La declaración class crea una nueva clase con el nombre proporcionado utilizando la herencia basada en prototipos

+ +
+

También se puede definir una clase usando una {{jsxref("Operators/class", "expresión de clase", "", 1)}}. Pero a diferencia de las expresiones de clases, la declaración de clases no permite que una clase existente sea declarada de nuevo y en caso de hacerse, lanzará un error de tipo.

+
+ +

Sintaxis

+ +
class name [extends] {
+  // Contenido de la clase
+}
+
+ +

Descripción

+ +

De la misma manera que con las expresiones de clase, el contenido de una clase se ejecuta en modo estricto.

+ +

Las declaraciones de clases no están {{Glossary("Hoisting", "izadas")}} (al contrario que las declaraciones de funciones).

+ +

Ejemplos

+ +

Declaración sencilla de una clase

+ +

En el siguiente ejemplo, primero definimos la clase Polygon, luego extendemos de ella para crear la clase Square. Notar que super(), utilizado en el constructor, sólo puede ser llamado dentro del constructor y debe ser llamado antes de que la palabra clave this pueda ser usada.

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

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES6', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad en navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome(42.0)}}{{CompatGeckoDesktop(45)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Array subclassing{{CompatChrome(43.0)}}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidAndroid WebviewFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome para Android
Soporte básico{{CompatNo}}{{CompatChrome(42.0)}}{{CompatGeckoMobile(45)}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatChrome(42.0)}}
Array subclassing{{CompatNo}}{{CompatChrome(43.0)}}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatChrome(43.0)}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/statements/const/index.html b/files/es/web/javascript/reference/statements/const/index.html new file mode 100644 index 0000000000..c55350fbd4 --- /dev/null +++ b/files/es/web/javascript/reference/statements/const/index.html @@ -0,0 +1,127 @@ +--- +title: const +slug: Web/JavaScript/Referencia/Sentencias/const +tags: + - ECMAScript6 + - Experimental + - Expérimental(2) + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/const +--- +
{{jsSidebar("Statements")}}
+ +

Resumen

+ +

Las variables constantes presentan un ámbito de bloque (block scope) tal y como lo hacen las variables definidas usando la instrucción let, con la particularidad de que el valor de una constante no puede cambiarse a través de la reasignación. Las constantes no se pueden redeclarar.

+ +
+

La redeclaración de la misma variable bajo un mismo ámbito léxico terminaría en un error de tipo SyntaxError. Esto también es extensible si usamos var dentro del ámbito léxico. Esto nos salvaguarda de redeclarar una variable accidentalmente y que no era posible  solo con var.

+
+ +

Sintaxis

+ +
const varname1 = value1 [, varname2 = value2 [, varname3 = value3 [, ... [, varnameN = valueN]]]];
+ +
+
varnameN
+
Nombre de la constante. Puede ser un identificador legal.
+
+ +
+
valueN
+
Valor de la constante. Puede ser cualquier expresión legal.
+
+ +

Descripción

+ +

Esta declaración crea una constante cuyo alcance puede ser global o local para el bloque en el que se declara. Es necesario inicializar la constante, es decir, se debe especificar su valor en la misma sentencia en la que se declara, lo que tiene sentido, dado que no se puede cambiar posteriormente.

+ +

La declaración de una constante crea una referencia de sólo lectura. No significa que el valor que tiene sea inmutable, sino que el identificador de variable no puede ser reasignado, por lo tanto, en el caso de que la asignación a la constante sea un objeto, el objeto sí que puede ser alterado.

+ +

Una constante no puede compartir su nombre con una función o variable en el mismo ámbito.

+ +

Todas las consideraciones acerca de la " zona muerta temporal " se aplican tanto a letyconst.

+ +
+

const es fue una extensión especifica de Mozilla, no es era soportado en IE, pero tiene tenia soporte parcial por Opera desde la versión 9.0 y por Safari.

+
+ +

Ejemplos

+ +

El siguiente ejemplo produce una salida "a es 7."

+ +
const a = 7;
+document.writeln("a es " + a + ".");
+
+ +

Las siguientes instrucciones demuestra como se comporta const

+ +
+

Las instrucciones deberán ser ordenadas correctamente para conseguir la salida esperada a los ejemplos

+
+ +
// NOTA: Las constantes pueden ser declaradas en mayusculas o minusculaas,
+//pero por convencion para distinguirlas del resto de variables se escribe todo en mayusculas
+
+// definimos MY_FAV como constante y le damos un valor de 7
+const MY_FAV = 7;
+
+// lanzara un error: Unkeught TypeError: Asignación a variable constante.
+MY_FAV = 20;
+
+// imprimira 7
+console.log('my favorite number is: ' + MY_FAV);
+
+// lanzara un error: SyntaxError: tratando de redeclarar una constante. El identificador 'MY_FAV' ya ha sido declarado
+const MY_FAV = 20;
+
+// el nombre MY_FAV esta reservado para la constante anterior, también fallara y lanzara un SyntaxError por la redeclaración
+var MY_FAV = 20;
+
+// el nombre MY_FAV esta reservado para la variable anterior, esto también lanzara un SyntaxError por la redeclaración
+let MY_FAV = 20;
+
+// es importante tener en cuenta como funciona el alcance de bloque
+if (MY_FAV === 7) {
+    // esto esta bien y crea una variable MY_FAV de alcance/ambito de bloque
+    // (funciona igual de bien con let para declarar un alcance de bloque/ambito de variable no-constante)
+    const MY_FAV = 20;
+
+    // MY_FAV ahora es 20
+    console.log('my favorite number is ' + MY_FAV);
+
+    // aquín también lanzara un SyntaxError por la redeclaración
+    var MY_FAV = 20;
+}
+
+// MY_FAV todavia es 7
+console.log('my favorite number is ' + MY_FAV);
+
+// lanza error, falta el inicializador en la declaracion de const
+const FOO;
+
+// const tambien funciona en objetos
+const MY_OBJECT = {'key': 'value'};
+
+// Intentando sobrescribir el objeto nos lanza un error
+MY_OBJECT = {'OTHER_KEY': 'value'};
+
+// Sin embargo, los object keys no estan protegidas,
+// por lo que la siguiente sentencia se ejecutara sin problema
+MY_OBJECT.key = 'otherValue'; // Use Object.freeze() para hacer un objeto inmutable
+
+// Lo mismo se aplica a los arrays
+const MY_ARRAY = [];
+// es posible empujar elementos en el array
+MY_ARRAY.push('A'); // ["A"]
+// Sin embargo, asignar un nuevo array a la variable lanza error
+MY_ARRAY = ['B']
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/statements/continue/index.html b/files/es/web/javascript/reference/statements/continue/index.html new file mode 100644 index 0000000000..5371b4cdd7 --- /dev/null +++ b/files/es/web/javascript/reference/statements/continue/index.html @@ -0,0 +1,66 @@ +--- +title: continue +slug: Web/JavaScript/Referencia/Sentencias/continue +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/continue +--- +
+ {{jsSidebar("Statements")}}
+

Resumen

+

Termina la ejecución de las sentencias de la iteración actual del bucle actual o la etiqueta y continua la ejecución del bucle con la próxima iteración.

+

Sintaxis

+
continue [ etiqueta ];
+
+
+ label
+
+ Identificador asociado con la etiqueta de la sentencia.
+
+

Descripción

+

En contraste con la sentencia {{jsxref("Sentencias/break", "break")}}, continue no termina la ejecución del bucle por completo; en cambio,

+ + +

La sentencia continue puede incluir una etiqueta opcional que permite al programa saltar a la siguiente iteración del bucle etiquetado en vez del bucle actual. En este caso, la sentencia continue necesita estar anidada dentro de esta sentecia etiquetada.

+

Ejemplos

+

Ejemplo: Usando continue con while

+

El siguiente ejemplo muestra un bucle {{jsxref("Sentencias/while", "while")}} que tiene una sentencia continue que se ejecuta cuando el valor de i es 3. Así, n toma los valores 1, 3, 7 y 12.

+
i = 0;
+n = 0;
+while (i < 5) {
+   i++;
+   if (i == 3)
+      continue;
+   n += i;
+}
+
+

Ejemplo: Usando continue con una etiqueta

+

En el siguiente ejemplo, una sentencia etiquetada checkiandj contiene una sentencia etiquetada checkj. Si se encuentra continue, el programa continua hasta encima de la sentencia checkj. Cada vez que se encuentra continue, checkj se reitera hasta que su condición devuelve false. Cuando se devuelve false, el recordatorio de la sentencia checkiandj se completa.

+

Si continue tuviese una etiqueta checkiandj, el programa continuaría hasta encima de la sentencia 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>");
+}
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/statements/debugger/index.html b/files/es/web/javascript/reference/statements/debugger/index.html new file mode 100644 index 0000000000..bb36e356c0 --- /dev/null +++ b/files/es/web/javascript/reference/statements/debugger/index.html @@ -0,0 +1,125 @@ +--- +title: debugger +slug: Web/JavaScript/Referencia/Sentencias/debugger +tags: + - JavaScript + - Sentencia +translation_of: Web/JavaScript/Reference/Statements/debugger +--- +
{{jsSidebar("Statements")}}
+ +

La sentencia debugger invoca cualquier funcionalidad de depuración disponible, tiene la misma función que un breakpoint. Si la funcionalidad de depuración no está disponible, esta sentencia no tiene efecto alguno.

+ +

Sintaxis

+ +
debugger;
+ +

Ejemplos

+ +

El siguiente ejemplo muestra un bloque de código donde ha sido insertada una sentencia debugger, para invocar el depurador (si existe) cuando la función es ejecutada.

+ +
function codigoPotencialmenteDefectuoso() {
+    debugger;
+    // realizar paso a paso o examinar código que contiene
+    // potenciales errores
+}
+ +

Cuando el depurador es invocado, la ejecución se detiene en la sentencia debugger. Es como un punto de interrupción en el script.

+ +

Paused at a debugger statement.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ESDraft', '#sec-debugger-statement', 'Debugger statement')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-debugger-statement', 'Debugger statement')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.15', 'Debugger statement')}}{{Spec2('ES5.1')}}Definición inicial
{{SpecName('ES3', '#sec-7.5.3', 'Debugger statement')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-7.4.3', 'Debugger statement')}}{{Spec2('ES1')}}Solo mencionada como palabra reservada
+ +

Compatibilidad con navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/statements/do...while/index.html b/files/es/web/javascript/reference/statements/do...while/index.html new file mode 100644 index 0000000000..628c1458cd --- /dev/null +++ b/files/es/web/javascript/reference/statements/do...while/index.html @@ -0,0 +1,49 @@ +--- +title: do...while +slug: Web/JavaScript/Referencia/Sentencias/do...while +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/do...while +--- +
{{jsSidebar("Statements")}}
+ +

La sentencia (hacer mientras) crea un bucle que ejecuta una sentencia especificada, hasta que la condición de comprobación se evalúa como falsa. La condición se evalúa después de ejecutar la sentencia, dando como resultado que la sentencia especificada se ejecute al menos una vez.

+ +
{{EmbedInteractiveExample("pages/js/statement-dowhile.html")}}
+ +

Sintaxis

+ +
do
+   sentencia
+while (condición);
+
+ +
+
sentencia
+
Una sentencia que se ejecuta al menos una vez y es reejecutada cada vez que la condición se evalúa a verdadera. Para ejecutar múltiples sentencias dentro de un bucle, utilice la sentencia {{jsxref("Statements/block", "block")}} ({ ... }) para agrupar aquellas sentencias.
+
+ +
+
condición
+
Una expresión se evalúa después de cada pase del bucle. Si condición se evalúa como verdadera, la sentencia se re-ejecuta. Cuando condición se evalúa como falsa, el control pasa a la siguiente sentencia hacer mientras.
+
+ +

Ejemplos

+ +

Usando hacer mientras

+ +

En el siguiente ejemplo, el bucle hacer mientras itera al menos una vez y se reitera hasta que i ya no sea menor que 5.

+ +
do {
+   i += 1;
+   document.write(i);
+} while (i < 5);
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/statements/empty/index.html b/files/es/web/javascript/reference/statements/empty/index.html new file mode 100644 index 0000000000..627fd889c7 --- /dev/null +++ b/files/es/web/javascript/reference/statements/empty/index.html @@ -0,0 +1,141 @@ +--- +title: empty +slug: Web/JavaScript/Referencia/Sentencias/Empty +tags: + - JavaScript + - Sentencia + - Vacía +translation_of: Web/JavaScript/Reference/Statements/Empty +--- +
{{jsSidebar("Statements")}}
+ +

Un empty statement o sentencia vacía es usada para no proveer una sentencia, incluso si la sintaxis JavaScript esperase una.

+ +

Sintaxis

+ +
;
+
+ +

Descripción

+ +

La sentencia vacía es un punto y coma (;) que indica que no se ejecutará ninguna sentencia, incluso si la sintaxis JavaScript requiere una. El comportamiento opuesto, donde se desean ejecutar varias sentencias pero JavaScript solo permite una sola, es posible usando una sentencia de bloque; la cual combina varias declaraciones en una.

+ +

Ejemplos

+ +

La sentencia vacía es comúnmente usada en bucles. Por ejemplo, un bucle for sin bloque de sentencias:

+ +
var arr = [1, 2, 3];
+
+// Asignar el valor 0 a todos los elementos del array
+for (i = 0; i < arr.length; arr[i++] = 0) /* sentencia vacía */ ;
+
+console.log(arr);
+// [0, 0, 0]
+
+ +

Nota: Es una buena práctica comentar el uso intencional de la sentencia vacía, ya que no es fácilmente distinguible de un punto y coma normal. Un ejemplo de uso probablemente no intencional:

+ +
if (condicion);  // Esta condición no ejerce ningún control!
+   borrarTodo()  // Por lo cual esta sentencia será ejecutada siempre!!!
+
+ +

Otro ejemplo de uso:

+ +
var a = 1, b = 1;
+if((a == 0) || (b = 0)); // Asigna a 'b' el valor cero si 'a' no es cero.
+console.log(b); // 0
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ESDraft', '#sec-empty-statement', 'Empty statement')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-empty-statement', 'Empty statement')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.3', 'Empty statement')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-12.3', 'Empty statement')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-12.3', 'Empty statement')}}{{Spec2('ES1')}}Definición inicial.
+ +

Compatibilidad en Navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/statements/export/index.html b/files/es/web/javascript/reference/statements/export/index.html new file mode 100644 index 0000000000..6016afd0ba --- /dev/null +++ b/files/es/web/javascript/reference/statements/export/index.html @@ -0,0 +1,175 @@ +--- +title: export +slug: Web/JavaScript/Referencia/Sentencias/export +tags: + - ECMAScript 2015 + - JavaScript + - Módulos + - Sentencia + - export +translation_of: Web/JavaScript/Reference/Statements/export +--- +
{{jsSidebar("Statements")}}
+ +

La declaración export se utiliza al crear módulos de JavaScript para exportar funciones, objetos o tipos de dato primitivos del módulo para que puedan ser utilizados por otros programas con la sentencia {{jsxref("Statements/import", "import")}}.

+ +

Los módulos exportados están en {{jsxref("Strict_mode","strict mode")}} tanto si se declaran así como si no. La sentencia export no puede ser utilizada en scripts embebidos.

+ +

Sintaxis

+ +
export { name1, name2, …, nameN };
+export { variable1 as name1, variable2 as name2, …, nameN };
+export let name1, name2, …, nameN; // también var
+export let name1 = …, name2 = …, …, nameN; // también var, const
+export function FunctionName(){...}
+export class ClassName {...}
+
+export default expression;
+export default function (…) { … } // también class, function*
+export default function name1(…) { … } // también class, function*
+export { name1 as default, … };
+
+export * from …;
+export { name1, name2, …, nameN } from …;
+export { import1 as name1, import2 as name2, …, nameN } from …;
+export { default } from …;
+
+ +
+
nameN
+
Identificador a ser exportado (es posible importarlo a través de {{jsxref("Statements/import", "import")}} en otro script).
+
+ +

Descripción

+ +

Existen dos tipos diferentes de exportación , nombrada y por defecto. Se pueden tener varias exportaciones nombradas por módulo pero sólo una exportación por defecto. Cada tipo corresponde a una de las sintaxis siguientes:

+ + + +

Los export con nombre son útiles cuando se necesitan exportar múltiples valores. Durante el import, es obligatorio usar el mismo nombre que el correspondiente objeto.

+ +

Pero un export por defecto puede ser importado con cualquier nombre, por ejemplo:

+ +
export default k = 12; // en el archivo test.js
+
+import m from './test' // notese que tenemos la libertad de usar import m en lugar de import k, porque k era el export por defecto
+
+console.log(m); // escribirá 12
+ +

Sólo puede haber un export por defecto.

+ +

La siguiente sintaxis no exporta un export por defecto del módulo importado:

+ +
export * from …;
+ +

Si necesita exportar por defecto, escriba lo siguiente en su lugar:

+ +
import mod from 'mod';
+export default mod;
+ +

Ejemplos

+ +

Usando exports con nombre

+ +

En el módulo, podremos usar el siguiente código:

+ +
// module "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 };
+ +

De esta forma, en otro script, podemos tener:

+ +
//You should use this script in html with the type module ,
+//eg ''<script type="module" src="demo.js"></script>",
+//open the page in a httpserver,otherwise there will be a CORS policy error.
+//script demo.js
+
+import { cube, foo, graph } from 'my-module';
+graph.options = {
+    color:'blue',
+    thickness:'3px'
+};
+graph.draw();
+console.log(cube(3)); // 27
+console.log(foo);    // 4.555806215962888
+
+ +

Usando el export por defecto

+ +

Si queremos exportar un sólo valor o tener uno por defecto para nuestro módulo, podemos usar un export por defecto:

+ +
// module "my-module.js"
+export default function cube(x) {
+  return x * x * x;
+}
+
+ +

De esta forma la importación de un export default será sumamemte sencilla:

+ +
import cube from 'my-module';
+console.log(cube(3)); // 27
+ +

Tenga en cuenta que no es posible usar var, let o const con export default.

+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-exports', 'Exports')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-exports', 'Exports')}}{{Spec2('ESDraft')}} 
+ +

Compatiblidad en navegadores

+ +

{{Compat("javascript.statements.export")}}

+ +

Vea también

+ + + +

 

diff --git a/files/es/web/javascript/reference/statements/for-await...of/index.html b/files/es/web/javascript/reference/statements/for-await...of/index.html new file mode 100644 index 0000000000..49349d7199 --- /dev/null +++ b/files/es/web/javascript/reference/statements/for-await...of/index.html @@ -0,0 +1,144 @@ +--- +title: for await...of +slug: Web/JavaScript/Referencia/Sentencias/for-await...of +tags: + - Iteración + - JavaScript + - Referencia + - Sentencia + - asincrónico + - await + - iterar +translation_of: Web/JavaScript/Reference/Statements/for-await...of +--- +
{{jsSidebar("Statements")}}
+ +

La sentencia for await...of crea un bucle iterando tanto sobre objetos iterables asincrónicos como sincrónicos, incluyendo: built-in {{jsxref("String")}}, {{jsxref("Array")}}, objetos Array-like (por ej., {{jsxref("Functions/arguments", "arguments")}} o {{domxref("NodeList")}}), {{jsxref("TypedArray")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, y async/sync iterables definidos por el usuario. Invoca un hook de iteración personalizada con sentencias a ser ejecutadas por el valor de cada propiedad diferente del objeto.

+ + + +

Sintaxis

+ +
for await (variable of iterable) {
+  sentencia
+}
+
+ +
+
variable
+
En cada iteración, el valor de una propiedad diferente es asignado a variable. variable puede ser declarada con const, let, o var.
+
iterable
+
Objeto sobre cuyas propiedades se itera.
+
+ +

Iterando sobre iterables asincrónicos

+ +

También puedes iterar sobre un objeto que explícitamente implementa el protocolo async iterable:

+ +
var asyncIterable = {
+  [Symbol.asyncIterator]() {
+    return {
+      i: 0,
+      next() {
+        if (this.i < 3) {
+          return Promise.resolve({ value: this.i++, done: false });
+        }
+
+        return Promise.resolve({ done: true });
+      }
+    };
+  }
+};
+
+(async function() {
+   for await (let num of asyncIterable) {
+     console.log(num);
+   }
+})();
+
+// 0
+// 1
+// 2
+
+ +

Iterando sobre funciones generadoras asincrónicas

+ +

Debido a que las funciones generadoras asincrónicas implementan el protocolo async iterator, las mismas pueden ser iteradas utilizando for await... of

+ +
async function* asyncGenerator() {
+  var i = 0;
+  while (i < 3) {
+    yield i++;
+  }
+}
+
+(async function() {
+  for await (let num of asyncGenerator()) {
+    console.log(num);
+  }
+})();
+// 0
+// 1
+// 2
+ +

Para un ejemplo más concreto de iteración sobre una función generadora utilizando for await... of, considera iterar sobre datos provistos por una API. Este ejemplo primero crea un iterador asincrónico para un stream de datos, luego lo utiliza para obtener el tamaño de la respuesta desde la API.

+ +
async function* streamAsyncIterator(stream) {
+  const reader = stream.getReader();
+  try {
+    while (true) {
+      const { done, value } = await reader.read();
+      if (done) {
+        return;
+      }
+      yield value;
+    }
+  } finally {
+    reader.releaseLock();
+  }
+}
+// Obtiene datos desde url y calcula el tamaño de la respuesta utilizando la función generadora asincrónica.
+async function getResponseSize(url) {
+  const response = await fetch(url);
+  // Almacenará el tamaño de la respuesta en bytes.
+  let responseSize = 0;
+  // El buble for-await-of. Itera asincrónicamente sobre cada parte de la respuesta.
+  for await (const chunk of streamAsyncIterator(response.body)) {
+    // Incrementando el tamaño total.
+    responseSize += chunk.length;
+  }
+
+  console.log(`Tamaño de la respuesta: ${responseSize} bytes`);
+  // salida esperada: "Tamaño de la respuesta: 1071472"
+  return responseSize;
+}
+getResponseSize('https://jsonplaceholder.typicode.com/photos');
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'ECMAScript Language: The for-in, for-of, and for-await-of Statements')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad de Navegadores

+ + + +

{{Compat("javascript.statements.for_await_of")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/statements/for...in/index.html b/files/es/web/javascript/reference/statements/for...in/index.html new file mode 100644 index 0000000000..0680d69dea --- /dev/null +++ b/files/es/web/javascript/reference/statements/for...in/index.html @@ -0,0 +1,150 @@ +--- +title: for...in +slug: Web/JavaScript/Referencia/Sentencias/for...in +tags: + - Característica del lenguaje + - Declaración + - JavaScript +translation_of: Web/JavaScript/Reference/Statements/for...in +--- +
{{jsSidebar("Statements")}}
+ +

La instrucción {{JSxRef("Sentencias/for...in", "for-in")}} itera sobre todas las {{JSxRef("../Enumerability_and_ownership_of_properties", "propiedades enumerables")}} de un objeto que está codificado por cadenas (ignorando los codificados por {{JSxRef("Objetos_globales/Symbol", "Símbolos")}}, incluidas las propiedades enumerables heredadas.

+ +
{{EmbedInteractiveExample("pages/js/statement-forin.html")}}
+ + + +

Sintaxis

+ +
for (variable in objeto)
+  instrucción
+ +
+
variable
+
Asigna un nombre de propiedad diferente a la variable en cada iteración.
+
objeto
+
Objeto cuyas propiedades enumerables que no son símbolos se iteran.
+
+ +

Descripción

+ +

Un bucle for...in solo itera sobre propiedades enumerables que no son símbolo. Los objetos creados a partir de constructores integrados como Array y Object han heredado propiedades no enumerables de Object.prototype y String.prototype, como el método {{JSxRef("String.indexOf", "indexOf()")}} de {{JSxRef("String")}} o el método {{JSxRef("Object.toString", "toString()")}} de {{JSxRef("Object")}}. El bucle iterará sobre todas las propiedades enumerables del objeto en sí y aquellas que el objeto hereda de su cadena de prototipos (las propiedades de los prototipos más cercanos tienen prioridad sobre las de los prototipos más alejados del objeto en su cadena de prototipos).

+ +

Propiedades deleted, added o modified

+ +

Un bucle for...in itera sobre las propiedades de un objeto en un orden arbitrario (consulta el operador {{JSxRef("Operadores/delete", "delete")}} para obtener más información sobre por qué no puede depender del aparente orden de la iteración, al menos en una configuración entre navegadores).

+ +

Si una propiedad se modifica en una iteración y luego se visita en un momento posterior, su valor en el bucle es su valor en ese momento posterior. Una propiedad que se elimina antes de haber sido visitada no se visitará más tarde. Las propiedades agregadas al objeto sobre el que se está produciendo la iteración se pueden visitar u omitir de la iteración.

+ +

En general, es mejor no agregar, modificar o eliminar propiedades del objeto durante la iteración, aparte de la propiedad que se está visitando actualmente. No hay garantía de si se visitará una propiedad agregada, si se visitará una propiedad modificada (distinta de la actual) antes o después de que se modifique, o si se visitará una propiedad eliminada antes de eliminarla.

+ +

Iteración en arreglos y for...in

+ +
+

Nota: for...in no se debe usar para iterar sobre un {{JSxRef("Array")}} donde el orden del índice es importante.

+
+ +

Los índices del arreglo son solo propiedades enumerables con nombres enteros y, por lo demás, son idénticos a las propiedades generales del objeto. No hay garantía de que for...in devuelva los índices en un orden en particular. La instrucción de bucle for...in devolverá todas las propiedades enumerables, incluidas aquellas con nombres no enteros y aquellas que se heredan.

+ +

Debido a que el orden de iteración depende de la implementación, es posible que la iteración sobre un arreglo no visite los elementos en un orden coherente. Por lo tanto, es mejor usar un bucle {{JSxRef("Sentencias/for", "for")}} con un índice numérico (o {{JSxRef("Array.prototype.forEach()")}} o el bucle {{JSxRef("Sentencias/for...of", "for...of")}}) cuando se itera sobre arreglos donde el orden de acceso es importante.

+ +

Iterar solo sobre propiedades directas

+ +

Si solo deseas considerar las propiedades adjuntas al objeto en sí mismo, y no sus prototipos, usa {{JSxRef("Object.getOwnPropertyNames", "getOwnPropertyNames()")}} o realiza una {{JSxRef("Object.prototype.hasOwnProperty", "hasOwnProperty()")}} verificación ({{jsxref("Object.prototype.propertyIsEnumerable", "propertyIsEnumerable()")}} también se puede utilizar). Alternativamente, si sabes que no habrá ninguna interferencia de código externo, puedes extender los prototipos incorporados con un método de verificación.

+ +

¿Por qué usar for...in?

+ +

Dado que for...in está construido para iterar propiedades de objeto, no se recomienda su uso con arreglos y opciones como Array.prototype.forEach() y existe for...of, ¿cuál podría ser el uso de for...in?

+ +

Es posible que se utilice de forma más práctica con fines de depuración, ya que es una forma fácil de comprobar las propiedades de un objeto (mediante la salida a la consola o de otro modo). Aunque los arreglos suelen ser más prácticos para almacenar datos, en situaciones en las que se prefiere un par clave-valor para trabajar con datos (con propiedades que actúan como la "clave"), puede haber casos en los que desees comprobar si alguna de esas claves cumple un valor particular.

+ +

Ejemplos

+ +

Utilizar for...in

+ +

El siguiente bucle for...in itera sobre todas las propiedades enumerables que no son símbolos del objeto y registra una cadena de los nombres de propiedad y sus valores.

+ +
var obj = {a: 1, b: 2, c: 3};
+
+for (const prop in obj) {
+  console.log(`obj.${prop} = ${obj[prop]}`);
+}
+
+// Produce:
+// "obj.a = 1"
+// "obj.b = 2"
+// "obj.c = 3"
+ +

Iterar propiedades directas

+ +

La siguiente función ilustra el uso de {{JSxRef("Object.prototype.hasOwnProperty", "hasOwnProperty()")}} — las propiedades heredadas no se muestran.

+ +
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]}`);
+  }
+}
+
+// Produce:
+// "obj.color = red"
+
+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'declaración for...in')}}
+ +

Compatibilidad del navegador

+ + + +

{{Compat("javascript.statements.for_in")}}

+ +

Compatibilidad: expresiones iniciadoras en modo estricto

+ +

Antes de Firefox 40, era posible utilizar una expresión iniciadora (i=0) en un bucle for...in:

+ +
var obj = {a: 1, b: 2, c: 3};
+for (var i = 0 in obj) {
+  console.log(obj[i]);
+}
+// 1
+// 2
+// 3
+
+ +

Este comportamiento no estándar ahora se ignora en la versión 40 y posteriores, y presentará un {{JSxRef("SyntaxError")}} ("{{JSxRef("errors/Invalid_for-in_initializer", "iniciador for...in no válido", "las declaraciones de encabezado del bucle for-in posiblemente no tengan iniciadores")}} en {{JSxRef("Strict_mode", "modo estricto")}} ({{bug(748550)}} y {{bug(1164741)}}").

+ +

Otros motores como v8 (Chrome), Chakra (IE/Edge) y JSC (WebKit/Safari) están investigando si eliminar también el comportamiento no estándar.

+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/statements/for...of/index.html b/files/es/web/javascript/reference/statements/for...of/index.html new file mode 100644 index 0000000000..572308b41a --- /dev/null +++ b/files/es/web/javascript/reference/statements/for...of/index.html @@ -0,0 +1,319 @@ +--- +title: for...of +slug: Web/JavaScript/Referencia/Sentencias/for...of +tags: + - ECMAScript6 + - JavaScript + - Referencia + - Sentencia +translation_of: Web/JavaScript/Reference/Statements/for...of +--- +
+
{{jsSidebar("Statements")}}
+ +

La sentencia sentencia for...of ejecuta un bloque de código para cada elemento de un objeto iterable, como lo son: {{jsxref("String")}}, {{jsxref("Array")}}, objetos similares a array (por ejemplo, {{jsxref("Functions/arguments", "arguments")}} or NodeList), {{jsxref("TypedArray")}}, {{jsxref("Map")}}, {{jsxref("Set")}} e iterables definidos por el usuario.

+
+ +

Sintaxis

+ +
for (variable of iterable) {
+  statement
+}
+
+ +
+
variable
+
En cada iteración el elemento (propiedad enumerable) correspondiente es asignado a variable
+
iterable
+
Objeto cuyas propiedades enumerables son iteradas. 
+
+ +

Ejemplos

+ +

Iterando un {{jsxref("Array")}}

+ +
let iterable = [10, 20, 30];
+
+for (let value of iterable) {
+  value += 1;
+  console.log(value);
+}
+// 11
+// 21
+// 31
+
+ +

Es posible usar const en lugar de let si no se va a modificar la variable dentro del bloque.

+ +
let iterable = [10, 20, 30];
+
+for (const value of iterable) {
+  console.log(value);
+}
+// 10
+// 20
+// 30
+ +

Iterando un {{jsxref("String")}}

+ +
let iterable = "boo";
+
+for (let value of iterable) {
+  console.log(value);
+}
+// "b"
+// "o"
+// "o"
+ +

Iterando un {{jsxref("TypedArray")}}

+ +
let iterable = new Uint8Array([0x00, 0xff]);
+
+for (let value of iterable) {
+  console.log(value);
+}
+// 0
+// 255
+ +

Iterando un {{jsxref("Map")}}

+ +
let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]);
+
+for (let entry of iterable) {
+  console.log(entry);
+}
+// ['a', 1]
+// ['b', 2]
+// ['c', 3]
+
+for (let [key, value] of iterable) {
+  console.log(value);
+}
+// 1
+// 2
+// 3
+ +

Iterando un {{jsxref("Set")}}

+ +
let iterable = new Set([1, 1, 2, 2, 3, 3]);
+
+for (let value of iterable) {
+  console.log(value);
+}
+// 1
+// 2
+// 3
+ +

Iterando un objeto arguments

+ +
(function() {
+  for (let argument of arguments) {
+    console.log(argument);
+  }
+})(1, 2, 3);
+
+// 1
+// 2
+// 3
+ +

Iterando una colección del DOM

+ +

Iterando colecciones del DOM como un {{domxref("NodeList")}}: el siguiente ejemplo añade la clase "read" a los párrafos (<p>) que son descendientes directos de un (<article>):

+ +
// Nota: Esto solo funcionará en plataformas que tengan
+// implementado NodeList.prototype[Symbol.iterator]
+let articleParagraphs = document.querySelectorAll("article > p");
+
+for (let paragraph of articleParagraphs) {
+  paragraph.classList.add("read");
+}
+ +

Clausurando iteraciones

+ +

En los bucles for...of, se puede causar que la iteración termine de un modo brusco usando: breakcontinue[4]throw or return[5]. En estos casos la iteración se cierra.

+ +
function* foo(){
+  yield 1;
+  yield 2;
+  yield 3;
+};
+
+for (let o of foo()) {
+  console.log(o);
+  break; // closes iterator, triggers return
+}
+ +

Iterando generadores

+ +

También es posible iterar las nuevas funciones generator:

+ +
function* fibonacci() { // una función generador
+  let [prev, curr] = [0, 1];
+  while (true) {
+    [prev, curr] = [curr, prev + curr];
+    yield curr;
+  }
+}
+
+for (let n of fibonacci()) {
+  console.log(n);
+  // interrumpir la secuencia en 1000
+  if (n >= 1000) {
+    break;
+  }
+}
+ +
+

No se deben reutilizar los generadores

+ +

Los generadores no deben ser reutilizados, incluso si el bucle for...of se ha terminado antes de tiempo con la sentencia break. Una vez abandonado el bucle, el generador está cerrado y tratar de iterar sobre él de nuevo no dará más resultados. Firefox no ha implementado aún este comportamiento y el generador puede ser reutilizado en contra de lo escrito en el estándar ES6 (13.7.5.13, step 5m), pero esto cambiará una vez que el bug {{Bug(1147371)}} haya sido corregido.

+
+ +
var gen = (function *(){
+  yield 1;
+  yield 2;
+  yield 3;
+})();
+for (let o of gen) {
+  console.log(o);
+  break;  // Finaliza la iteración
+}
+
+// El generador no debe ser reutilizado, lo siguiente no tiene sentido
+for (let o of gen) {
+  console.log(o); // Nunca será llamado
+}
+ +

Iterando otros objetos iterables

+ +

Es posible, además, iterar un objeto que explicitamente implemente el protocolo iterable:

+ +
var iterable = {
+  [Symbol.iterator]() {
+    return {
+      i: 0,
+      next() {
+        if (this.i < 3) {
+          return { value: this.i++, done: false };
+        }
+        return { value: undefined, done: true };
+      }
+    };
+  }
+};
+
+for (var value of iterable) {
+  console.log(value);
+}
+// 0
+// 1
+// 2
+ +

Diferencia entre for...of y for...in

+ +

El bucle for...in iterará sobre todas las propiedades de un objeto. Más tecnicamente, iterará sobre cualquier propiedad en el objeto que haya sido internamente definida con su propiedad [[Enumerable]] configurada como true

+ +

La sintaxis de  for...of es específica para las colecciones, y no para todos los objetos. Esta Iterará sobre cualquiera de los elementos de una colección que tengan la propiedad [Symbol.iterator].

+ +

El siguiente ejemplo muestra las diferencias entre un bucle for...of y un bucle for...in

+ +
let arr = [3, 5, 7];
+arr.foo = "hola";
+
+for (let i in arr) {
+   console.log(i); // logs "0", "1", "2", "foo"
+}
+
+for (let i of arr) {
+   console.log(i); // logs "3", "5", "7"
+}
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoCometario
{{SpecName('ES6', '#sec-for-in-and-for-of-statements', 'for...of statement')}}{{Spec2('ES6')}}Definición inicial.
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'for...of statement')}}{{Spec2('ESDraft')}}
+ +

Compatibilidad de navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)EdgeOperaSafari
Soporte básico{{CompatChrome(38)}} [1]
+ {{CompatChrome(51)}} [3]
{{CompatGeckoDesktop("13")}} [2] [4]12257.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico5.1{{CompatChrome(38)}} [1]{{CompatGeckoMobile("13")}} [2]{{CompatNo}}{{CompatUnknown}}8
+
+ +

[1] Desde Chrome 29 a Chrome 37 esta funcionalidad estuvo disponible al activar la opción chrome://flags/#enable-javascript-harmony: “JavaScript experimental”.

+ +

[2] Antes de Firefox 51, el uso de for...of usando {{jsxref("const")}} resultaba en un {{jsxref("SyntaxError")}} ("missing = in const declaration"). El problema ha sido resuelto ({{bug(1101653)}}).

+ +

[3] Chrome 51 añadió soporte para iterar objetos.

+ +

[4] Firefox aún permite el uso de un generador después de haber interrumpido el bucle {{Bug(1147371)}}. Como se vio más arriba, no se deben reutilizar los generadores.

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/statements/for/index.html b/files/es/web/javascript/reference/statements/for/index.html new file mode 100644 index 0000000000..875236ba2b --- /dev/null +++ b/files/es/web/javascript/reference/statements/for/index.html @@ -0,0 +1,57 @@ +--- +title: for +slug: Web/JavaScript/Referencia/Sentencias/for +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/for +--- +
+ {{jsSidebar("Statements")}}
+

Resumen

+

Crea un bucle que consiste en tres expresiones opcionales, encerradas en paréntesis y separadas por puntos y comas, seguidas de una sentencia ejecutada en un bucle.

+

Sintaxis

+
for ([expresion-inicial]; [condicion]; [expresion-final])sentencia
+
+
+
+ expresion-inicial
+
+ Una expresión (incluyendo las expresiones de asignación) o la declaración de variable. Típicamente se utiliza para usarse como variable contador. Esta expresión puede opcionalmente declarar nuevas variables con la palabra clave var. Estas variables no son locales del bucle, es decir, están en el mismo alcance en el que está el bucle for. El resultado de esta expresión es descartado.
+
+
+
+ condicion
+
+ Una expresión para ser evaluada antes de cada iteración del bucle. Si esta expresión se evalúa como verdadera, se ejecuta sentencia. Esta comprobación condicional es opcional. Si se omite, la condición siempre se evalúa como verdadera. Si la expresión se evalúa como falsa, la ejecución salta a la primera expresión que sigue al constructor de for.
+
+
+
+ expresion-final
+
+ Una expresión para ser evaluada al final de cada iteración del bucle. Esto ocurre antes de la siguiente evaluación de la condicion. Generalmente se usa para actualizar o incrementar la variable contador.
+
+
+
+ sentencia
+
+ Una sentencia que se ejecuta mientras la condición se evalúa como verdadera. Para ejecutar múltiples sentencias dentro del bucle, utilice una sentencia {{jsxref("Sentencias/block", "block")}} ({ ... }) para agrupar aquellas sentecias.
+
+

Ejemplos

+

Ejemplo: Usando for

+

La siguiente sentencia for comienza mediante la declaración de la variable i y se inicializa a 0. Comprueba que i es menor que nueve, realiza las dos sentencias con éxito e incrementa i en 1 después de cada pase del bucle.

+
for (var i = 0; i < 9; i++) {
+   n += i;
+   mifuncion(n);
+}
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/statements/function/index.html b/files/es/web/javascript/reference/statements/function/index.html new file mode 100644 index 0000000000..36b02935d9 --- /dev/null +++ b/files/es/web/javascript/reference/statements/function/index.html @@ -0,0 +1,52 @@ +--- +title: function +slug: Web/JavaScript/Referencia/Sentencias/function +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/function +--- +
+ {{jsSidebar("Statements")}}
+

Resumen

+

Declara una función con los parámetros especificados.

+

Puede también definir funciones usando el constructor {{jsxref("Function")}} y el {{jsxref("Operadors/function", "function")}} (expresión function).

+

Sintaxis

+
function nombre([parametro1] [,parametro2] [..., parametroN]) {sentencias}
+
+
+
+ nombre
+
+ El nombre de la función.
+
+
+
+ parametroN
+
+ El nombre de un argumento que se pasa a la función. Una función puede tener hasta 255 argumentos.
+
+
+
+ sentencias
+
+ Las sentencias que comprenden el cuerpo de la función.
+
+

Descripción

+

Para devolver un valor, la función debe tener una sentencia {{jsxref("Sentencias/return", "return")}} que especifica el valor a devolver.

+

Una función creada con la sentencia function es un objeto Function y tiene todas las propiedades, métodos, y comportamiento de los objetos Function. Vea {{jsxref("Function")}} para información detallada sobre funciones.

+

Una función puede también ser declarada dentro de una expresión. En este caso la función es normalmente anónima. Vea {{jsxref("Operadores/function", "function expression")}} para más información acerca de function (expresión function).

+

Las funciones pueden declararse condicionalmente. Es decir, una definición de una función puede estar anidada dentro de una sentecia if. Técnicamente, tales declaraciones no son en realidad declaraciones de funciones; son expresiones function (expresiones de función).

+

Ejemplo

+

Ejemplo: Usando function

+

El siguiente código declara una función que devuelve la cantidad total de ventas, cuando se da el número de unidades vendidas de productos a, b, y c.

+
function calcular_ventas(unidades_a, unidades_b, unidades_c) {
+   return unidades_a*79 + unidades_b * 129 + unidades_c * 699;
+}
+
+

Vea También

+ diff --git a/files/es/web/javascript/reference/statements/function_star_/index.html b/files/es/web/javascript/reference/statements/function_star_/index.html new file mode 100644 index 0000000000..79ff51b7f2 --- /dev/null +++ b/files/es/web/javascript/reference/statements/function_star_/index.html @@ -0,0 +1,224 @@ +--- +title: function* +slug: Web/JavaScript/Referencia/Sentencias/function* +tags: + - Declaración + - Experimental + - Expérimental(2) + - Iterador + - función +translation_of: Web/JavaScript/Reference/Statements/function* +--- +
{{jsSidebar("Statements")}}
+ +

La declaración function* (la palabra clave function seguida de un asterisco) define una función generadora, que devuelve un objeto {{jsxref("Global_Objects/Generator","Generator")}}.

+ +
+

También puedes definir funciones generadoras usando el constructor {{jsxref("GeneratorFunction")}} y una {{jsxref("Operators/function*", "function* expression")}}.

+
+ +

Sintaxis

+ +
function* nombre([param[, param[, ... param]]]) {
+   instrucciones
+}
+
+ +
+
nombre
+
El nombre de la función.
+
+ +
+
param
+
El nombre de los argumentos que se le van a pasar a la función. Una función puede tener hasta 255 argumentos.
+
+ +
+
instrucciones
+
Las instrucciones que componen el cuerpo de la función.
+
+ +

Descripción

+ +

Los generadores son funciones de las que se puede salir y volver a entrar. Su contexto (asociación de variables) será conservado entre las reentradas.

+ +

La llamada a una función generadora no ejecuta su cuerpo inmediatamente; se devuelve un objeto iterador para la función en su lugar. Cuando el metodo next() del iterador es llamado , el cuerpo de la función generadora es ejecutado hasta la primera expresión {{jsxref("Operators/yield", "yield")}}, la cual especifica el valor que será retornado por el iterador o con, {{jsxref("Operators/yield*", "yield*")}}, delega a otra función generadora. El método next() retorna un objeto con una propiedad value que contiene el valor bajo el operador yield y una propiedad done que indica, con un booleano, si la función generadora ha hecho yield al último valor.

+ +

Ejemplos

+ +

Ejemplo simple

+ +
function* idMaker(){
+  var index = 0;
+  while(index < 3)
+    yield index++;
+}
+
+var gen = idMaker();
+
+console.log(gen.next().value); // 0
+console.log(gen.next().value); // 1
+console.log(gen.next().value); // 2
+console.log(gen.next().value); // undefined
+// ...
+ +

Ejemplo con 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
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + +
EspecificacionesStatusComentarios
{{SpecName('ES2015', '#', 'function*')}}{{Spec2('ES2015')}}Initial definition.
+ +

Compatibilidad con navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Soporte básico{{CompatChrome(39.0)}}{{CompatGeckoDesktop("26.0")}}{{CompatNo}}26{{CompatNo}}
yield*{{CompatVersionUnknown}}{{CompatGeckoDesktop("27.0")}}{{CompatNo}}26{{CompatNo}}
IteratorResult object instead of throwing{{CompatVersionUnknown}}{{CompatGeckoDesktop("29.0")}}{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatVersionUnknown}}{{CompatChrome(39.0)}}{{CompatGeckoMobile("26.0")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
yield*{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("27.0")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
IteratorResult object instead of throwing{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("29.0")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

Notas específicas de Firefox

+ +

Generadores e iteradores en versiones de Firefox anteriores a 26

+ +

Las versiones anteriores de FireFox implementan así mismo una versión anterior de la propuesta de generadores. En la versión anterior, los generadores eran definidos utilizando la declaración function de una manera regular (Sin asterisco).  Véase Legacy generator function para mayor información.

+ +

IteratorResult object returned instead of throwing

+ +

Starting with Gecko 29 {{geckoRelease(29)}}, the completed generator function no longer throws a {{jsxref("TypeError")}} "generator has already finished". Instead, it returns an IteratorResult object like { value: undefined, done: true } ({{bug(958951)}}).

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/statements/if...else/index.html b/files/es/web/javascript/reference/statements/if...else/index.html new file mode 100644 index 0000000000..3bac571218 --- /dev/null +++ b/files/es/web/javascript/reference/statements/if...else/index.html @@ -0,0 +1,109 @@ +--- +title: if...else +slug: Web/JavaScript/Referencia/Sentencias/if...else +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/if...else +--- +
{{jsSidebar("Statements")}}
+ +

Resumen

+ +

Ejecuta una sentencia si una condición específicada es evaluada como verdadera. Si la condición es evaluada como falsa, otra sentencia puede ser ejecutada.

+ +

Sintaxis

+ +
if (condición) sentencia1 [else sentencia2]
+
+ +
+
condición
+
Una expresión que puede ser evaluada como verdadera o falsa.
+
+ +
+
sentencia1
+
Sentencia que se ejecutará si condición es evaluada como verdadera. Puede ser cualquier sentencia, incluyendo otras sentenccias if anidadas. Para ejecutar múltiples sentencias, use una sentencia {{jsxref("Sentencias/block", "block")}} ({ ... }) para agruparlas.
+
+ +
+
sentencia2
+
Sentencia que se ejecutará si condición se evalúa como falsa, y exista una cláusula else. Puede ser cualquier sentencia, incluyendo sentencias block y otras sentencias if anidadas.
+
+ +

Descripción

+ +

Multiples sentencias if...else pueden ser anidadas para crear una cláusula else if:

+ +
if (condición1)
+   sentencia1
+else if (condición2)
+   sentencia2
+else if (condición3)
+   sentencia3
+...
+else
+   sentenciaN
+
+ +

Para entender como esto funciona, así es como se vería si el anidamiento hubiera sido indentado correctamente:

+ +
if (condición1)
+   sentencia1
+else
+   if (condición2)
+      sentencia2
+   else
+      if (condición3)
+        ...
+
+ +

Para ejecutar varias sentencias en una cláusula, use una sentencia block ({ ... }) para agruparlas. Generalmente, es una buena práctica usar siempre sentencias block, especialmente en código que incluya sentencias if anidadas:

+ +
if (condición) {
+   sentencia1
+} else {
+   sentencia2
+}
+
+ +

No confundir los valores primitivos true y false con los valores true y false del objeto {{jsxref("Boolean")}}. Cualquier valor diferente de undefined, null, 0, -0, NaN, o la cadena vacía (""), y cualquier objecto, incluso un objeto Boolean cuyo valor es false, se evalúa como verdadero en una sentencia condicional. Por ejemplo:

+ +
var b = new Boolean(false);
+if (b) // Esta condición se evalúa como verdadera
+
+ +

Ejemplos

+ +

Ejemplo: Uso de if...else

+ +
if (cipher_char == from_char) {
+   result = result + to_char;
+   x++;
+} else
+   result = result + clear_char;
+
+ +

Ejemplo: Asignación en una expresión condicional

+ +

Es aconsejable no usar asignaciones simples en una expresión condicional, porque la asignación puede ser confundida con igualdad (operador relacional) cuando se lee el código. Por ejemplo, no use el siguiente código:

+ +
if (x = y) {
+   /* sentencia */
+}
+
+ +

Si realmente necesita una asignación dentro de una exprsión condicional, una práctica común es poner paréntesis adicionales alrededor del la asignación, por ejemplo:

+ +
if ((x = y)) {
+   /* sentencia */
+}
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/statements/import.meta/index.html b/files/es/web/javascript/reference/statements/import.meta/index.html new file mode 100644 index 0000000000..8c09e97475 --- /dev/null +++ b/files/es/web/javascript/reference/statements/import.meta/index.html @@ -0,0 +1,93 @@ +--- +title: import.meta +slug: Web/JavaScript/Referencia/Sentencias/import.meta +translation_of: Web/JavaScript/Reference/Statements/import.meta +--- +
{{JSSidebar("Statements")}}
+ +

El objeto import.meta expone el contenido especifico de la metadata al módulo JavaScript. Este contiene informacion sobre el módulo, como por ejemplo, la URL del mismo.

+ +

Syntax

+ +
import.meta
+ +

Descripción

+ +

La sintasis consiste de la palabra clave  {{JSxRef("Statements/import","import")}},un punto, y un identificador meta. Normalmente, la parte a la izquierda del punto es el objeto sobre el cual la accion es realizada, pero aqui import no es realmente un objeto.

+ +

El objeto import.meta es creado por la implementacion ECMAScript , con un prototipo {{JSxRef("null")}} . El objeto es extensible y sus propiedades son grabables, editables y enumerables.

+ +

Ejemplos

+ +

Usando import.meta

+ +

Dado un módulo my-module.js

+ +
<script type="module" src="my-module.js"></script>
+
+ +

puedes acceder a la meta información  sobre el módulo usando el objeto import.meta.

+ +
console.log(import.meta); // { url: "file:///home/user/my-module.js" }
+ +

Este retorna un objeto con una propiedad  url  indicando la URL base del módulo.Esta será la URL de la que el script fue obtenido, por scripts externos, o  la URL base del documento que contiene el documento, por scripts inline.

+ +

Nota que este incluirá parametros de la consulta y/o el hash (ej: seguido del ? or #).

+ +

Por ejemplo, con el siguiente HTML:

+ +
<script type="module">
+import './index.mjs?someURLInfo=5';
+</script>
+ +

..El siguiente archivo JavaScript registrará el parámetro someURLInfo:

+ +
// index.mjs
+new URL(import.meta.url).searchParams.get('someURLInfo'); // 5
+ +

Lo mismo aplica cuando un archivo importa otro:

+ +
// index.mjs
+import './index2.mjs?someURLInfo=5';
+
+// index2.mjs
+new URL(import.meta.url).searchParams.get('someURLInfo'); // 5
+ +

Nota que mientras Node.js pasa en la consulta los parámetros (o el hash ) como en el último ejemplo, a partir de Node 14.1.0, una URL con parametros en la consulta fallará  cuando se  carguen en el formato node --experimental-modules index.mjs?someURLInfo=5 (es tratado como un archivo en lugar de una URL en este contexto).

+ +

Tal argumento específico del archivo podria ser complementario al  usado en toda la aplicacion  location.href (con consultas strings o hash añadidas despues de la ruta HTML) (o en Node.js, mediante process.argv).

+ +

Especificaciones

+ + + + + + + + + + + + + +
Especificaciones
import.meta proposal
{{SpecName("HTML WHATWG", "webappapis.html#hostgetimportmetaproperties", "import.meta")}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.statements.import_meta")}}

+ +

Implementation Progress

+ +

La siguiente tabla provee el estatus de implementación diaria para esta caracteristica, porque esta caracteristica aun no ha alcanzado la estabilidad entre navegadores. La información es generada corriendo los test relevantes de la caracteristica en Test262, la suite estandar de test de JavaScript, en el build nocturno,  o en el último release de cada  motor de los browser de JavaScript.

+ +
{{EmbedTest262ReportResultsTable("import.meta")}}
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/statements/import/index.html b/files/es/web/javascript/reference/statements/import/index.html new file mode 100644 index 0000000000..7d2c261d0e --- /dev/null +++ b/files/es/web/javascript/reference/statements/import/index.html @@ -0,0 +1,177 @@ +--- +title: import +slug: Web/JavaScript/Referencia/Sentencias/import +tags: + - ECMAScript 2015 + - JavaScript + - Módulos + - Sentencia + - import +translation_of: Web/JavaScript/Reference/Statements/import +--- +
{{jsSidebar("Sentencias")}}
+ +

La sentencia import se usa para importar funciones que han sido exportadas desde un módulo externo.

+ +
+

Por el momento, esta característica sólo está comenzando a ser implementada de forma nativa en los navegadores. Está implementada en muchos transpiladores, tales como Typescript y Babel, y en empaquetadores como Rollup y Webpack.

+
+ +

Sintaxis

+ +
import defaultExport from "module-name";
+import * as name from "module-name";
+import { export } from "module-name";
+import { export as alias } from "module-name";
+import { export1 , export2 } from "module-name";
+import { export1 , export2 as alias2 , [...] } from "module-name";
+import defaultExport, { export [ , [...] ] } from "module-name";
+import defaultExport, * as name from "module-name";
+import "module-name";
+ +
+
defaultExport
+
Nombre que se referirá al export por defecto del módulo.
+
module-name
+
El módulo desde el que importar. Normalmente es una ruta relativa o absoluta al archivo .js que contiene el módulo, excluyendo la extensión .js. Algunos empaquetadores pueden permitir o requerir el uso de la extensión; comprueba tu entorno. Sólo se permiten Strings con comillas simples o dobles.
+
name
+
Nombre del objeto del módulo que se utilizará como nombre de dominio al hacer referencia a los imports.
+
export, exportN
+
+ +
+
Nombre de los exports a ser importados.
+
alias, aliasN
+
Nombre del objeto que recibirá la propiedad importada.
+
+ +

Descripción

+ +

El parámetro name es el nombre del objeto que recibirá los miembros exportados. El parámetro member especifica miembros individuales, mientras el parámetro name importa todos ellos. name puede también ser una función si el módulo exporta un sólo parámetro por defecto en lugar de una serie de miembros. Abajo hay ejemplos que explican la sintaxis.

+ +

Importa el contenido de todo un módulo.

+ +

Esto inserta myModule en el ámbito actual, que contiene todos los elementos exportados en el archivo ubicado en  /modules/my-module.js.

+ +
import * as myModule from '/modules/my-module.js';
+ +

Aquí, para acceder a los miembros exportados habrá que usar el alias del módulo ("myModule" en este caso) como namespace. Por ejemplo, si el módulo importado arriba incluye un miembre exportado llamado doAllTheAmazingThings(), habría que invocarlo de la siguiente manera:

+ +
myModule.doAllTheAmazingThings();
+ +

Importa un solo miembro de un módulo.

+ +

Dado un objeto o valor llamado myExport que ha sido exportado del módulo my-module ya sea implícitamente (porque todo el módulo ha sido exportado) o explícitamente (usando la sentencia {{jsxref("Sentencias/export", "export")}} ), esto inserta myExport en el ámbito actual.

+ +
import {myExport} from '/modules/my-module.js';
+ +

Importa multiples miembros de un módulo.

+ +

Esto inserta foo y bar en el ámbito actual.

+ +
import {foo, bar} from "my-module.js";
+ +

Importa un miembre con un alias mas conveniente

+ +

Se puede renombrar un miembro exportado cuando se importa. Por ejemplo, esto inserta shortName en el ámbito actual.

+ +
import {reallyReallyLongModuleExportName as shortName}
+  from '/modules/my-module.js';
+ +

Renombra multiples miembros durante la importación

+ +

Importa múltiples miembros exportados de un módulo con un alias conveniente.

+ +
import {
+  reallyReallyLongModuleExportName as shortName,
+  anotherLongModuleName as short
+} from '/modules/my-module.js';
+ +

Importa un módulo entero para efectos secundarios sólamente

+ +

Importa un módulo entero para efectos secundarios sólamente, sin importar ningun elemento. Esto ejecuta el código global del módulo, pero no importa ningún valor.

+ +
import '/modules/my-module.js';
+ +

Importación de elementos por defecto

+ +

Es posible tener una exportación por defecto (tanto si se trata de un objeto, función, clase, etc.). Recíprocamente, es posible usa la instrucción import para importar esos elementos establecidos como por defecto.

+ +

La versión más sencilla de importar un elemento por defecto es:

+ +
import myDefault from '/modules/my-module.js';
+ +

También es posible usar la sintaxis por defecto con lo que hemos visto anteriormente (importación de espacios de nombres o importaciones con nombre. En esos casos, la importación por defecto se deberá realizar en primer lugar. Por ejemplo:

+ +
import myDefault, * as myModule from '/modules/my-module.js';
+// myModule used as a namespace
+ +

o

+ +
import myDefault, {foo, bar} from '/modules/my-module.js';
+// specific, named imports
+ +

Ejemplos

+ +

Importar un archivo secundario para asistir en un procesamiento de una petición JSON AJAX.

+ +

El módulo: 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)));
+}
+ +

El programa principal: main.js

+ +
import { getUsefulContents } from '/modules/file.js';
+
+getUsefulContents('http://www.example.com',
+    data => { doSomethingUseful(data); });
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + +
EspecificaciónEstadoComentario
{{SpecName('ES6', '#sec-imports', 'Imports')}}{{Spec2('ES6')}}Definición inical
{{SpecName('ESDraft', '#sec-imports', 'Imports')}}{{Spec2('ESDraft')}} 
+ +

Compatibilidad entre navegadores

+ + + +

{{Compat("javascript.statements.import")}}

+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/statements/index.html b/files/es/web/javascript/reference/statements/index.html new file mode 100644 index 0000000000..bbf0ce42e8 --- /dev/null +++ b/files/es/web/javascript/reference/statements/index.html @@ -0,0 +1,141 @@ +--- +title: Sentencias +slug: Web/JavaScript/Referencia/Sentencias +tags: + - JavaScript + - Referencia + - sentencias +translation_of: Web/JavaScript/Reference/Statements +--- +
{{jsSidebar("Statements")}}
+ +

Las aplicaciones JavaScript se componen de sentencias con una sintaxis propia. Una sentencia puede estar formada por múltiples líneas. Puede haber varias sentencias en una sola línea si separamos cada una de las sentencias por un punto y coma. No es una palabra clave, sino un grupo de palabras clave.

+ +

Sentencias y declaraciones por categoría

+ +

Puedes encontrarlas por orden alfabético en la columna de la izquierda .

+ +

Control de flujo

+ +
+
{{jsxref("Sentencias/block", "Block")}}
+
Un bloque de sentencias se utiliza para agrupar cero o mas sentencias. El bloque se delimita por un par de llaves.
+
{{jsxref("Sentencias/break", "break")}}
+
Finaliza la sentencia actual loop, switch, o label y transfiere el control del programa a la siguiente sentencia de la sentencia finalizada.
+
{{jsxref("Sentencias/continue", "continue")}}
+
Finaliza la ejecucion de las sentencias dentro de la iteracion actual del actual bucle,  y continua la ejecucion del bucle con la siguiente iteracion.
+
{{jsxref("Sentencias/Empty", "Empty")}}
+
Una sentencia vacía se utiliza para proveer una "no sentencia", aunque la sintaxis de JavaScript esperaba una.
+
{{jsxref("Sentencias/if...else", "if...else")}}
+
Ejecuta una sentencia si una condición especificada es true. Si la condición es false, otra sentencia puede ser ejecutada.
+
{{jsxref("Sentencias/switch", "switch")}}
+
Evalua una expresión, igualando el valor de la expresión a una clausula case y ejecuta las sentencias asociadas con dicho case.
+
{{jsxref("Sentencias/throw", "throw")}}
+
Lanza una excepción definida por el usuario.
+
{{jsxref("Sentencias/try...catch", "try...catch")}}
+
Marca un bloque de sentencias para ser probadas (try) y especifica una respuesta, en caso de que se lance una excepción.
+
+ +

Declaraciones

+ +
+
{{jsxref("Sentencias/var", "var")}}
+
Declara una variable, opcionalmente inicializándola a un valor.
+
{{jsxref("Sentencias/let", "let")}}
+
Declara una variable local de ambito de bloque, opcionalmente inicializándola a un valor.
+
{{jsxref("Sentencias/const", "const")}}
+
Declara una constante de solo lectura.
+
+ +

Funciones

+ +
+
{{jsxref("Sentencias/function", "function")}}
+
Declara una función con los parámetros especificados.
+
{{jsxref("Sentencias/function*", "function*")}}
+
Los generadores de funciones permiten escribir {{jsxref("Iteration_protocols", "iteradores")}} con mas facilidad.
+
{{experimental_inline}} {{jsxref("Statements/async_function", "async function")}}
+
Declara una función asíncrona con los parámetros especificados.
+
{{jsxref("Statements/return", "return")}}
+
Especifica el valor a ser retornado por una función.
+
{{jsxref("Statements/class", "class")}}
+
Declara una clase.
+
+ +

Iteraciones

+ +
+
{{jsxref("Sentencias/do...while", "do...while")}}
+
Crea un bucle que ejecuta una instrucción especificada hasta que la condición de prueba se evalúa como falsa. La condición se evalúa después de ejecutar la instrucción, lo que da como resultado que la instrucción especificada se ejecute al menos una vez.
+
{{jsxref("Sentencias/for", "for")}}
+
Creates a loop that consists of three optional expressions, enclosed in parentheses and separated by semicolons, followed by a statement executed in the loop.
+
{{deprecated_inline()}} {{non-standard_inline()}}{{jsxref("Sentencias/for_each...in", "for each...in")}}
+
Itera una variable especificada sobre todos los valores de las propiedades del objeto. Para cada propiedad distinta, se ejecuta una instrucción especificada.
+
{{jsxref("Sentencias/for...in", "for...in")}}
+
Itera sobre las propiedades enumerables de un objeto, en orden albitrario. Para cada propiedad distinta, las instrucciones pueden ser ejecutadas.
+
{{jsxref("Sentencias/for...of", "for...of")}}
+
Iterates over iterable objects (including {{jsxref("Array", "array")}}, array-like objects, iterators and generators), invoking a custom iteration hook with statements to be executed for the value of each distinct property.
+
{{jsxref("Sentencias/while", "while")}}
+
Crea un bucle que ejecuta la instrucción especificada siempre que la condición de prueba se evalúe como verdadera. La condición se evalúa antes de ejecutar la instrucción.
+
+ +

Otros

+ +
+
{{jsxref("Sentencias/debugger", "debugger")}}
+
Invoca cualquier funcionalidad de depuración disponible. Si no hay funcionalidad de depuración disponible, esta isntrucción no tiene efecto.
+
{{jsxref("Sentencias/export", "export")}}
+
Usada para permitir a un script firmada proveer propiedades, funciones y objetos a otros scripts firmada o sin firmar. Esta antigua funcionalidad de Netscape ha sido removida y será redefinida por los modulos de ECMAScript 6
+
{{jsxref("Sentencias/import", "import")}}
+
Usada para permitir a un escript importar propiedades, funciones y objetos desde otro script firmado que ha exportado su información. Esta antigua funcionalidad de Netscape ha sido removida y será redefinida por los modulos de ECMAScript 6.
+
{{jsxref("Sentencias/label", "label")}}
+
Provee una instrucción con un identificador que puedes referir usando una instrucción break o continue .
+
+ +
+
{{deprecated_inline()}} {{jsxref("Sentencias/with", "with")}}
+
Extiende la cadena de alcance para una instrucción.
+
+ +

Especificaciones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaciónStatusComentario
{{SpecName('ES1', '#sec-12', 'Statements')}}{{Spec2('ES1')}}Definición inicial
{{SpecName('ES3', '#sec-12', 'Statements')}}{{Spec2('ES3')}}
{{SpecName('ES5.1', '#sec-12', 'Statements')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-ecmascript-language-statements-and-declarations', 'ECMAScript Language: Statements and Declarations')}}{{Spec2('ES6')}}Nuevo: function*, let, for...of, yield, class
{{SpecName('ESDraft', '#sec-ecmascript-language-statements-and-declarations', 'ECMAScript Language: Statements and Declarations')}}{{Spec2('ESDraft')}}
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/statements/label/index.html b/files/es/web/javascript/reference/statements/label/index.html new file mode 100644 index 0000000000..03f3108e0e --- /dev/null +++ b/files/es/web/javascript/reference/statements/label/index.html @@ -0,0 +1,35 @@ +--- +title: label +slug: Web/JavaScript/Referencia/Sentencias/label +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/label +--- +
+ {{jsSidebar("Statements")}}
+

Resumen

+

Proporciona una sentencia con un identificador al que se puede referir al usar las sentencias {{jsxref("Sentencias/break", "break")}} o {{jsxref("Sentencias/continue", "continue")}}.

+

Por ejemplo, puede usar una etiqueta para identificar un bucle, y entonces usar las sentencias break o continue para indicar si un programa debería interrumpir el bucle o continuar su ejecución.

+

Sintaxis

+
etiqueta :sentencia
+
+
+
+ etiqueta
+
+ Cualquier identificador JavaScript que no sea una palabra reservada.
+
+
+
+ sentencia
+
+ Sentencias. break puede ser usado con cualquier sentencia etiquetada, y continue puede usarse con bucles etiquetados de sentencias.
+
+

Ejemplos

+

Para un ejemplo de una sentencia label usando break, vea break. Para un ejemplo de una sentencia label usando continue, vea continue.

+

Vea También

+ diff --git a/files/es/web/javascript/reference/statements/let/index.html b/files/es/web/javascript/reference/statements/let/index.html new file mode 100644 index 0000000000..8c450b37d4 --- /dev/null +++ b/files/es/web/javascript/reference/statements/let/index.html @@ -0,0 +1,393 @@ +--- +title: let +slug: Web/JavaScript/Referencia/Sentencias/let +tags: + - Característica del lenguaje + - Declaración de variable + - ECMAScript 2015 + - JavaScript + - Variables + - let + - sentencias +translation_of: Web/JavaScript/Reference/Statements/let +--- +
{{jsSidebar("Statements")}}
+ +

La instrucción let declara una variable de alcance local con ámbito de bloque(block scope), la cual, opcionalmente, puede ser inicializada con algún valor.

+ +
+

La palabra reservada let en Mozilla Firefox 44 y anteriores, está solo disponible para bloques de código en HTML que esten envueltos en una etiqueta <script type="application/javascript;version=1.7"> (o de una version mayor). Las etiquetas XUL tienen acceso a esas características sin necesidad de dicho bloque.  Es necesario tomar en cuenta que esta es una característica no estándar que ya se ha hecho actualmente estándar, esto pero puede crear conflictos con otros navegadores, ya que fue una característica no estándar.

+
+ +

Sintaxis

+ +
let var1 [= valor1] [, var2 [= valor2]] [, ..., varN [= valorN]];
+ +

Parámetros

+ +
+
var1, var2, …, varN
+
Los nombres de la variable o las variables a declarar. Cada una de ellas debe ser un identificador legal de JavaScript
+
value1, value2, …, valueN
+
Por cada una de las variables declaradas puedes, opcionalmente, especificar su valor inicial como una expresión legal JavaScript.
+
+ +

Descripción

+ +

let te permite declarar variables limitando su alcance (scope) al bloque, declaración, o expresión donde se está usando.a diferencia de la palabra clave var la cual define una variable global o local en una función sin importar el ámbito del bloque. La otra diferencia entre var y let es que este último se inicializa a un valor sólo cuando un analizador lo evalúa (ver abajo).

+ +

Al igual que const, let no crea propiedades del objeto se declara globalmente (en el alcance más alto).

+ +

Alcance (scope) a nivel de bloque con let

+ +

Usar la palabra reservada let para definir variables dentro de un bloque.

+ +
if (x > y) {
+  let gamma = 12.7 + y;
+  i = gamma * x;
+}
+
+ +

Es posible usar definiciones let para asociar código en extensiones con un pseudo-espacio-de-nombre (pseudo-namespace). (Ver Mejores prácticas de seguridad en extensiones.)

+ +
let Cc = Components.classes, Ci = Components.interfaces;
+
+ +

let puede ser útil para escribir código más limpio cuando usamos funciones internas.

+ +
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) {
+    console.log("Item " + j + " is clicked.");
+  };
+  list.appendChild(item);
+}
+
+ +

El ejemplo anterior trabaja como se espera porque las cinco instancias de la función (anónima) interna hacen referencia a cinco diferentes instancias de la variable j. Nótese que esto no funcionaría como se espera si reemplazamos let con var o si removemos la variable j y simplemente usamos la variable i dentro de la función interna.

+ +

Reglas de alcance

+ +

Variables declaradas por let tienen por alcance el bloque en el que se han definido, así mismo, como en cualquier bloque interno. De esta manera, let trabaja muy parecido a var. La más notable diferencia es que el alcance de una variable var es la función contenedora:

+ +
function varTest() {
+  var x = 31;
+  if (true) {
+    var x = 71;  // ¡misma variable!
+    console.log(x);  // 71
+  }
+  console.log(x);  // 71
+}
+
+function letTest() {
+  let x = 31;
+  if (true) {
+    let x = 71;  // variable diferente
+    console.log(x);  // 71
+  }
+  console.log(x);  // 31
+}
+// llamamos a las funciones
+varTest();
+letTest();
+
+ +

En el nivel superior de un programa y funciones, let , a diferencia de var, no crea una propiedad en el objeto global, por ejemplo:

+ +
var x = 'global';
+let y = 'global';
+console.log(this.x); // "global"
+console.log(this.y); // undefined
+
+ +

La salida de este código desplegaría "global" una vez.

+ +

Zona muerta temporal y errores con let

+ +

La redeclaración de la misma variable bajo un mismo ámbito léxico terminaría en un error de tipo SyntaxError. Esto también es extensible si usamos var dentro del ámbito léxico. Esto nos salvaguarda de redeclarar una variable accidentalmente y que no era posible  solo con var.

+ +
if (x) {
+  let foo;
+  let foo; // Terminamos con un SyntaxError.
+}
+if (x) {
+  let foo;
+  var foo; // Terminamos con un SyntaxError.
+}
+
+ +

En ECMAScript 2015, let no eleva la variable a la parte superior del bloque. Si se hace una referencia a la variable declarada con let (let foo) antes de su declaración, terminaríamos con un error de tipo ReferenceError (al contrario de la variable declarada con var, que tendrá el valor undefined), esto porque la variables vive en una "zona muerta temporal" desde el inicio del bloque hasta que la declaración ha sido procesada.

+ +
function do_something() {
+  console.log(bar); // undefined
+  console.log(foo); // ReferenceError: foo no está definido
+  var bar = 1;
+  let foo = 2;
+}
+ +

Es posible encontrar errores en bloques de control switch debido a que solamente existe un block subyacente.

+ +
switch (x) {
+  case 0:
+    let foo;
+    break;
+
+  case 1:
+    let foo; // Terminamos con un error de tipo SyntaxError.
+             // esto debido a la redeclaracion
+    break;
+}
+ +

Otro ejemplo de zona muerta temporal combinada con ámbito léxico

+ +

Debido al alcance léxico, el identificador num dentro de la expresión (num + 55) se evalúa como num del bloque if, y no como la variable num con el valor 33 que esta por encima

+ +

En esa misma línea, el num del bloque if ya se ha creado en el ámbito léxico, pero aún no ha alcanzado (y terminado) su inicialización (que es parte de la propia declaración): todavía está en la zona muerta temporal.

+ +
function prueba(){
+   var num = 33;
+   if (true) {
+      let num = (num + 55);//ReferenceError: no se puede acceder a la declaración léxica `num'antes de la inicialización 
+   }
+}
+prueba();
+
+ +

Ejemplos

+ +

let vs var

+ +

Cuando usamos let dentro de un bloque, podemos limitar el alcance de la variable a dicho bloque. Notemos la diferencia con var, cuyo alcance reside dentro de la función donde ha sido declarada la variable.

+ +
var a = 5;
+var b = 10;
+
+if (a === 5) {
+  let a = 4; // El alcance es dentro del bloque if
+  var b = 1; // El alcance es global
+
+  console.log(a);  // 4
+  console.log(b);  // 1
+}
+
+console.log(a); // 5
+console.log(b); // 1
+ +

let en bucles

+ +

Es posible usar la palabra reservada let para enlazar variables con alcance local dentro del alcance de un bucle en lugar de usar una variable global (definida usando var) para dicho propósito.

+ +
for (let i = 0; i<10; i++) {
+  console.log(i); // 0, 1, 2, 3, 4 ... 9
+}
+
+console.log(i); // ReferenceError: i is not defined
+
+ +

Extensiones let no-estandar

+ +

Bloques let

+ +
+

La sintaxis del bloque y expresion let es no-estandar y sera deshechado en un futuro. ¡No deben ser usados! ver error 1023609 y error 1167029 para mas detalles.

+
+ +

Un bloque let provee una manera de asociar valores con variables dentro del alcance de un bloque sin afectar el valor de variables con nombre similar fuera del bloque.

+ +

Sintaxis

+ +
let (var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]) {declaración};
+ +

Descripción

+ +

El bloque let provee alcance local para las variables. Funciona enlazando cero o más variables en el alcance léxico de un solo bloque de código; de otra manera, es exactamente lo mismo que una declaración de bloque. Hay que notar particularmente que el alcance de una variable declarada dentro de un bloque let usando var es equivalente a declarar esa variable fuera del bloque let; dicha variable aún tiene alcance dentro de la función. Al usar la sintaxis de bloque let, los paréntesis siguientes a let son requeridos. Una falla al incluir dichos paréntesis resultará en un error de sintaxis.

+ +

Ejemplo

+ +
var x = 5;
+var y = 0;
+
+let (x = x+10, y = 12) {
+  console.log(x+y); // 27
+}
+
+console.log(x + y); // 5
+
+ +

Las reglas para el bloque de código son las mismas que para cualquier otro bloque de código en JavaScript. Es posible tener sus propias variables locales usando declaraciones let en dicho bloque.

+ +

Reglas de alcance

+ +

El alcance de las variables definidas usando let es el mismo bloque let, así como cualquier bloque interno contenido dentro de el bloque, a menos que esos bloques internos definan variables con el mismo nombre.

+ +

expresiones let

+ +
+

Soporte de expresiones let ha sido removido en Gecko 41 ({{bug(1023609)}}).

+
+ +

Una expresion let permite establecer variables con alcance dentro de una expresión.

+ +

Sintaxis

+ +
let (var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]) expression;
+ +

Ejemplo

+ +

Podemos usar let para establecer variables que tienen como alcance solo una expresión:

+ +
var a = 5;
+let(a = 6) console.log(a); // 6
+console.log(a); // 5
+ +

Reglas de alcance

+ +

Dada la expresión let siguiente:

+ +
let (decls) expr
+
+ +

Existe un bloque implícito creado alrededor de expr.

+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónEstadoComentarios
{{SpecName('ES2015', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}{{Spec2('ES2015')}}Definición initial. No especifica expresiones ni declaraciones let.
+ +

Compatibilidad en navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico +

{{CompatChrome(41.0)}}

+
{{ CompatGeckoDesktop("1.8.1") }} [1]1117{{CompatUnknown}}
Zona muerta temporal{{CompatUnknown}}{{ CompatGeckoDesktop("35") }} [1]{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Expresión let {{non-standard_inline}}{{CompatNo}}{{ CompatGeckoDesktop("1.8.1") }}-{{ CompatGeckoDesktop("40") }} [1]{{CompatNo}}{{CompatNo}}{{CompatNo}}
Bloque let {{non-standard_inline}}{{CompatNo}}{{ CompatGeckoDesktop("1.8.1") }} [1]{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatUnknown}} +

{{CompatChrome(41.0)}}

+
{{ CompatGeckoMobile("1.8.1") }} [1]{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Zona muerta temporal{{CompatUnknown}}{{CompatUnknown}}{{ CompatGeckoMobile("35") }} [1]{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Expresión let {{non-standard_inline}}{{CompatNo}}{{CompatNo}}{{ CompatGeckoMobile("1.8.1") }}-{{ CompatGeckoMobile("40") }}[1]{{CompatNo}}{{CompatNo}}{{CompatNo}}
Bloque let {{non-standard_inline}}{{CompatNo}}{{CompatNo}}{{ CompatGeckoMobile("1.8.1") }} [1]{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

Notas específicas a Firefox

+ + + +

Ver también

+ + diff --git a/files/es/web/javascript/reference/statements/return/index.html b/files/es/web/javascript/reference/statements/return/index.html new file mode 100644 index 0000000000..6497e97632 --- /dev/null +++ b/files/es/web/javascript/reference/statements/return/index.html @@ -0,0 +1,73 @@ +--- +title: return +slug: Web/JavaScript/Referencia/Sentencias/return +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/return +--- +
{{jsSidebar("Statements")}}
+ +

Resumen

+ +

La sentencia return finaliza la ejecución de la función y especifica un valor para ser devuelto a quien llama a la función.

+ +

Sintaxis

+ +
return [[ expresion ]];
+ +
+
expresion
+
La expresión a retornar. Si se omite, undefined es retornado en su lugar.
+
+ +

Description

+ +

Cuando una instrucción de retorno se llama en una función, se detiene la ejecución de esta. Si se especifica un valor dado, este se devuelve a quien llama a la función. Si se omite la expresión, undefined se devuelve en su lugar. Todas las siguientes sentencias de retorno rompen la ejecución de la función:

+ +
return;
+return true;
+return false;
+return x;
+return x + y / 3;
+ +


+ La inserción automática Punto y coma

+ +

La instrucción de retorno se ve afectada por la inserción automática de punto y coma (ASI). No se permite el terminador de línea entre la palabra clave de retorno y la expresión.

+ +
return
+a + b;
+ +
+
+ +


+ se transforma por ASI en:

+ +
return;
+a + b;
+ +


+ La consola le advertirá "código inalcanzable después de la declaración de retorno".

+ +
+

A partir de Gecko 40 {{geckoRelease(40)}}, una advertencia es mostrada en la consola si se encuentra código inalcanzable despues de una instrucción return.

+
+ +

Ejemplos

+ +

Ejemplo: Usando return

+ +

La siguiente función devuelve el cuadrado de su argumento, x, donde x es un número.

+ +
function cuadrado(x) {
+   return x * x;
+}
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/statements/switch/index.html b/files/es/web/javascript/reference/statements/switch/index.html new file mode 100644 index 0000000000..c550477f2c --- /dev/null +++ b/files/es/web/javascript/reference/statements/switch/index.html @@ -0,0 +1,245 @@ +--- +title: switch +slug: Web/JavaScript/Referencia/Sentencias/switch +translation_of: Web/JavaScript/Reference/Statements/switch +--- +
{{jsSidebar("Statements")}}
+ +

La declaración switch evalúa una expresión, comparando el valor de esa expresión con una instancia case, y ejecuta declaraciones asociadas a ese case, así como las declaraciones en los case que siguen.

+ +

Syntaxis

+ +
switch (expresión) {
+  case valor1:
+    //Declaraciones ejecutadas cuando el resultado de expresión coincide con el valor1
+    [break;]
+  case valor2:
+    //Declaraciones ejecutadas cuando el resultado de expresión coincide con el valor2
+    [break;]
+  ...
+  case valorN:
+    //Declaraciones ejecutadas cuando el resultado de expresión coincide con valorN
+    [break;]
+  default:
+    //Declaraciones ejecutadas cuando ninguno de los valores coincide con el valor de la expresión
+    [break;]
+}
+ +
+
expresión
+
Es una expresión que es comparada con el valor de cada instancia case.
+
case valorN
+
Una instancia case valorN es usada para ser comparada con la expresión. Si la expresión coincide con el valorN, las declaraciones dentro de la instancia case se ejecutan hasta que se encuentre el final de la declaración switch o hasta encontrar una interrupción break.
+
+ +
+
default
+
Una instancia default, cuando es declarada, es ejecutada si el valor de la expresión no coincide con cualquiera de las otras instancias case valorN.
+
+ +

Descripción

+ +

Si ocurre una coincidencia, el programa ejecuta las declaraciones asociadas correspondientes. Si la expresión coincide con múltiples entradas, la primera será la seleccionada, incluso si las mayúsculas son tenidas en cuenta.

+ +

El programa primero busca la primer instacia case cuya expresión se evalúa con el mismo valor de la expresión de entrada (usando comparación estricta, ===) y luego transfiere el control a esa cláusula, ejecutando las declaraciones asociadas. Si no se encuentra una cláusula de case coincidente, el programa busca la cláusula default opcional, y si se encuentra, transfiere el control a esa instancia, ejecutando las declaraciones asociadas. Si no se encuentra una instancia default  el programa continúa la ejecución en la instrucción siguiente al final del switch. Por convención, la instancia default es la última cláusula, pero no tiene que ser así.

+ +

La declaración break es opcional y está asociada con cada etiqueta de case y asegura que el programa salga del switch una vez que se ejecute la instrucción coincidente y continúe la ejecución en la instrucción siguiente. Si se omite el  break  el programa continúa la ejecución en la siguiente instrucción en la declaración de switch .

+ +

Ejemplos

+ +

Usando switch

+ +

En el siguiente ejemplo, si expresión se resuelve a "Platanos", el algoritmo compara el valor con el case "Platanos" y ejecuta la declaración asociada. Cuando se encuentra un break, el programa sale del condicional switch y ejecuta la declaración que lo procede. Si se omite el break, el case "Cerezas" también es ejecutado.

+ +
switch (expr) {
+  case 'Naranjas':
+    console.log('El kilogramo de naranjas cuesta $0.59.');
+    break;
+  case 'Manzanas':
+    console.log('El kilogramo de manzanas cuesta $0.32.');
+    break;
+  case 'Platanos':
+    console.log('El kilogramo de platanos cuesta $0.48.');
+    break;
+  case 'Cerezas':
+    console.log('El kilogramo de cerezas cuesta $3.00.');
+    break;
+  case 'Mangos':
+  case 'Papayas':
+    console.log('El kilogramo de mangos y papayas cuesta $2.79.');
+    break;
+  default:
+    console.log('Lo lamentamos, por el momento no disponemos de ' + expr + '.');
+}
+
+console.log("¿Hay algo más que te quisiera consultar?");
+ +

¿Qué pasa si olvido un break?

+ +

Si olvidas un break, el script se ejecutará desde donde se cumple la condición y ejecutará el siguiente case independientemente si esta condición se cumple o no. Ver el siguiente ejemplo:

+ +
var foo = 0;
+switch (foo) {
+  case -1:
+    console.log('1 negativo');
+    break;
+  case 0: // foo es 0, por lo tanto se cumple la condición y se ejecutara el siguiente bloque
+    console.log(0)
+    // NOTA: el "break" olvidado debería estar aquí
+  case 1: // No hay sentencia "break" en el 'case 0:', por lo tanto este caso también será ejecutado
+    console.log(1);
+    break; // Al encontrar un "break", no será ejecutado el 'case 2:'
+  case 2:
+    console.log(2);
+    break;
+  default:
+    console.log('default');
+}
+
+ +

¿Puedo usar un <default> entre condiciones?

+ +

Sí, ¡es posible! JavaScript retornará a la instancia default en caso de no encontrar una coincidencia:

+ +
var foo = 5;
+switch (foo) {
+  case 2:
+    console.log(2);
+    break; // al encontrar este 'break' no se continuará con el siguiente 'default:'
+  default:
+    console.log('default')
+    // fall-through
+  case 1:
+    console.log('1');
+}
+ +

Al estar el case 1: a continuación de default, y al no haber un break de por medio, veremos que la declaración del case 1: será ejecutada, apareciendo el resultado 1 en el log de consola.

+ +

Metodos para casos con múltiple criterio

+ +

La fuente de esta técnica esta aquí:

+ +

Switch statement multiple cases in JavaScript (Stack Overflow)

+ +

Operación única con múltiples casos

+ +

Este método toma ventaja del hecho de que, si no hay un break debajo de una declaración case, continuará la ejecución hasta el siguiente case, ignorando si en dicho caso se cumple o no el criterio indicado. Comprobar en la sección ¿Qué pasa si olvido un break?

+ +

Este es un ejemplo de operación única con sentencia switch secuencial, donde cuatro valores diferentes se comportan exactamente de la misma manera:

+ +
var Animal = 'Jirafa';
+switch (Animal) {
+  case 'Vaca':
+  case 'Jirafa':
+  case 'Perro':
+  case 'Cerdo':
+    console.log('Este animal subirá al Arca de Noé.');
+    break;
+  case 'Dinosaurio':
+  default:
+    console.log('Este animal no lo hará.');
+}
+ +

Operaciones encadenadas con múltiples casos

+ +

Este es un ejemplo de una sentencia switch secuencial con múltiples operaciones, donde, dependiendo del valor entero dado, se pueden recibir diferentes resultados. Esto demuestra que el algoritmo correrá en el orden en que se coloquen las declaraciones case, y que no tiene que ser numéricamente secuencial. En JavaScript, también es posible combinar definiciones con valores "string" dentro de estas declaraciones case.

+ +
var foo = 1;
+var output = 'Salida: ';
+switch (foo) {
+  case 10:
+    output += '¿Y ';
+  case 1:
+    output += 'Cuál ';
+    output += 'Es ';
+  case 2:
+    output += 'Tu ';
+  case 3:
+    output += 'Nombre';
+  case 4:
+    output += '?';
+    console.log(output);
+    break;
+  case 5:
+    output += '!';
+    console.log(output);
+    break;
+  default:
+    console.log('Por favor, selecciona un valor del 1 al 6.');
+}
+ +

La salida (output) de este ejemplo:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueLog text
foo es NaN o no es 1, 2, 3, 4, 5 ni 10Por favor, selecciona un valor del 1 al 6.
10Salida: ¿Y Cuál Es Tu Nombre?
1Salida: Cuál Es Tu Nombre?
2Salida: Tu Nombre?
3Salida: Nombre?
4Salida: ?
5Salida: !
+ +

Variables centradas en bloques sin un estamento de switch

+ +

Con ECMAScript 2015 (ES6) 

+ +

Compatibilidad en Navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Ver también

+ + diff --git a/files/es/web/javascript/reference/statements/throw/index.html b/files/es/web/javascript/reference/statements/throw/index.html new file mode 100644 index 0000000000..d3e52f83ac --- /dev/null +++ b/files/es/web/javascript/reference/statements/throw/index.html @@ -0,0 +1,153 @@ +--- +title: throw +slug: Web/JavaScript/Referencia/Sentencias/throw +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/throw +--- +
{{jsSidebar("Statements")}}
+ +

Resumen

+ +

Lanza una excepcion definida por el usuario.

+ +

Sintaxis

+ +
throw expresion;
+ +
+
expresion
+
Expresión a lanzar.
+
+ +

Descripción

+ +

Utilice la sentencia throw para lanzar una excepción. Cuando lanza una excepción, expresion especifica el valor de la excepción. Cada uno de los siguientes ejemplos lanza una excepción:

+ +
throw "Error2"; // genera una excepción con un valor cadena
+throw 42; // genera una excepción con un valor 42
+throw true; // genera una excepción con un valor true
+ +

Ejemplos

+ +

Ejemplo: Lanzar un objeto

+ +

Puede especificar un objeto cuando lanza una excepción. Puede entonces referenciar las propiedades del objeto en el bloque catch. El siguiente ejemplo crea un objeto miExcepcionUsuario del tipo ExceptionUsuario y la utiliza usándola en una sentencia throw.

+ +
function ExceptionUsuario(mensaje) {
+   this.mensaje = mensaje;
+   this.nombre = "ExceptionUsuario";
+}
+
+function getNombreMes(mes) {
+   mes = mes - 1; // Ajustar el número de mes al índice del arreglo (1 = Ene, 12 = Dic)
+   var meses = new Array("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul",
+      "Ago", "Sep", "Oct", "Nov", "Dic");
+   if (meses[mes] != null) {
+      return meses[mes];
+   } else {
+      miExcepcionUsuario = new ExceptionUsuario("NumeroMesNoValido");
+      throw miExcepcionUsuario;
+   }
+}
+
+try {
+   // sentencias para try
+   nombreMes = getNombreMes(miMes);
+} catch (excepcion) {
+   nombreMes = "desconocido";
+   registrarMisErrores(excepcion.mensaje, excepcion.nombre); // pasa el objeto exception al manejador de errores
+}
+
+ +

Ejemplo: Otro ejemplo sobre lanzar un objeto

+ +

El siguiente ejemplo comprueba una cadena de entrada para un código postal de EE.UU. Si el código postal utiliza un formato no válido, la sentencia throw lanza una excepción creando un objeto de tipo ExcepcionFormatoCodigoPostal.

+ +
/*
+ * Creates a ZipCode object.
+ *
+ * Accepted formats for a zip code are:
+ *    12345
+ *    12345-6789
+ *    123456789
+ *    12345 6789
+ *
+ * If the argument passed to the ZipCode constructor does not
+ * conform to one of these patterns, an exception is thrown.
+ */
+
+function ZipCode(zip) {
+   zip = new String(zip);
+   pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
+   if (pattern.test(zip)) {
+      // zip code value will be the first match in the string
+      this.value = zip.match(pattern)[0];
+      this.valueOf = function() {
+         return this.value
+      };
+      this.toString = function() {
+         return String(this.value)
+      };
+   } else {
+      throw new ExcepcionFormatoCodigoPostal(zip);
+   }
+}
+
+function ExcepcionFormatoCodigoPostal(valor) {
+   this.valor = valor;
+   this.mensaje = "no conforme con el formato esperado de código postal";
+   this.toString = function() {
+      return this.valor + this.mensaje
+   };
+}
+
+/*
+ * Esto podría estar en un script que valida los datos de una dirección de EE.UU.
+ */
+
+var CODIGOPOSTAL_NOVALIDO = -1;
+var CODIGOPOSTAL_DESCONOCIDO_ERROR = -2;
+
+function verificarCodigoPostal(codigo) {
+   try {
+      codigo = new CodigoPostal(codigo);
+   } catch (excepcion) {
+      if (excepcion instanceof ExcepcionFormatoCodigoPostal) {
+         return CODIGOPOSTAL_NOVALIDO;
+      } else {
+         return CODIGOPOSTAL_DESCONOCIDO_ERROR;
+      }
+   }
+   return codigo;
+}
+
+a = verificarCodigoPostal(95060);         // devuelve 95060
+b = verificarCodigoPostal(9560;)          // devuelve -1
+c = verificarCodigoPostal("a");           // devuelve -1
+d = verificarCodigoPostal("95060");       // devuelve 95060
+e = verificarCodigoPostal("95060 1234");  // devuelve 95060 1234
+
+ +

Ejemplo: Relanzar una excepción

+ +

Puede usar throw para volver a lanzar una excepción después de cogerla. El siguiente ejemplo coge una excepción con un valor numérico y la vuelve a lanzar si el valor es superior a 50. La excepción relanzada propaga hacia arriba la función adjunta o a un nivel superior para que el usuario pueda verla.

+ +
try {
+   throw n; // lanza una excepción con un valor numérico
+} catch (excepcion) {
+   if (excepcion <= 50) {
+      // sentencias para manejar la excepción 1-50
+   } else {
+      // no se puede manejar esta excepción, así que se vuelve a lanzar
+      throw excepcion;
+   }
+}
+
+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/statements/try...catch/index.html b/files/es/web/javascript/reference/statements/try...catch/index.html new file mode 100644 index 0000000000..d429db6163 --- /dev/null +++ b/files/es/web/javascript/reference/statements/try...catch/index.html @@ -0,0 +1,254 @@ +--- +title: try...catch +slug: Web/JavaScript/Referencia/Sentencias/try...catch +tags: + - Error + - Excepción + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/try...catch +--- +
{{jsSidebar("Statements")}}
+ +

La declaración try...catch señala un bloque de instrucciones a intentar (try), y especifica una respuesta si se produce una excepción (catch).

+ +
{{EmbedInteractiveExample("pages/js/statement-trycatch.html")}}
+ +

Sintaxis

+ +
try {
+   try_statements
+}
+[catch (exception_var_1 if condition_1) { // non-standard
+   catch_statements_1
+}]
+...
+[catch (exception_var_2) {
+   catch_statements_2
+}]
+[finally {
+   finally_statements
+}]
+
+ +
+
try_statements
+
Las sentencias que serán ejecutadas.
+
+ +
+
catch_statements_1, catch_statements_2
+
Sentencias que se ejecutan si una excepción es lanzada en el bloque try.
+
+ +
+
exception_var_1, exception_var_2
+
Identificador que contiene un objeto de excepcion asociado a la cláusula catch.
+
+ +
+
condition_1
+
Una expresión condicional.
+
+ +
+
finally_statements
+
Sentencias que se ejecutan después de que se completa la declaración try . Estas sentencias se ejecutan independientemente de si una excepcion fue lanzada o capturada.
+
+ +

Descripción

+ +

La sentencia try consiste en un bloque try que contiene una o más sentencias. Las llaves {} se deben utilizar siempre, incluso para una bloques de una sola sentencia. Al menos un bloque catch o un bloque finally debe estar presente. Esto nos da tres formas posibles para la sentencia try:

+ +
    +
  1. try...catch
  2. +
  3. try...finally
  4. +
  5. try...catch...finally
  6. +
+ +

Un bloque catch contiene sentencias que especifican que hacer si una excepción es lanzada en el bloque try. Si cualquier sentencia dentro del bloque try (o en una funcion llamada desde dentro del bloque try) lanza una excepción, el control cambia inmediatamente al bloque catch . Si no se lanza ninguna excepcion en el bloque try, el bloque catch se omite.

+ +

La bloque finally se ejecuta despues del bloque try y el/los bloque(s) catch hayan finalizado su ejecución. Éste bloque siempre se ejecuta, independientemente de si una excepción fue lanzada o capturada.

+ +

Puede anidar una o más sentencias try. Si una sentencia try interna no tiene una bloque catch, se ejecuta el bloque catch de la sentencia try que la encierra.

+ +

Usted también puede usar la declaración try para manejar excepciones de JavaScript. Consulte la Guía de JavaScript para obtener mayor información sobre excepciones de JavaScript.
+  

+ +

Bloque catch incondicional

+ +

Cuando solo se utiliza un bloque catch, el bloque catch es ejecutado cuando cualquier excepción es lanzada. Por ejemplo, cuando la excepción ocurre en el siguiente código, el control se transfiere a la cláusula catch.

+ +
try {
+   throw "myException"; // genera una excepción
+}
+catch (e) {
+   // sentencias para manejar cualquier excepción
+   logMyErrors(e); // pasa el objeto de la excepción al manejador de errores
+}
+
+ +

El bloque catch especifíca un identificador ( e en el ejemplo anterior) que contiene el valor de la excepción. Este valor está solo disponible en el {{Glossary("Scope", "scope")}} de el bloque catch

+ +

Bloques catch condicionales

+ +

Tambien se pueden crear "bloques catch condicionales", combinando bloques try...catch con estructuras  if...else if...else como estas:

+ +
try {
+    myroutine();  // puede lanzar tres tipos de excepciones
+} catch (e) {
+    if (e instanceof TypeError) {
+        // sentencias para manejar excepciones TypeError
+    } else if (e instanceof RangeError) {
+        // sentencias para manejar excepciones RangeError
+    } else if (e instanceof EvalError) {
+        // sentencias para manejar excepciones EvalError
+    } else {
+       // sentencias para manejar cualquier excepción no especificada
+       logMyErrors(e); // pasa el objeto de la excepción al manejador de errores
+}
+ +

El identificador de excepciones

+ +

Cuando una excepción es lanzada en el bloque try, exception_var (por ejemplo, la e en catch (e)) guarda el valor de la excepción. Se puede usar éste identificador para obtener información acerca de la excepción que fue lanzada. Este valor está solo disponible en el {{Glossary("Scope", "scope")}} de el bloque catch.

+ +
function isValidJSON(text) {
+  try {
+    JSON.parse(text);
+    return true;
+  } catch {
+    return false;
+  }
+}
+ +

La cláusula finally

+ +

La cláusula finally contiene sentencias a ejecutarse después de que las cláusulas try y catch se ejecuten, pero antes de las sentencias que le siguen al bloque try..catch..finally. Note que la cláusula finally se ejecuta sin importar si una excepción es o no lanzada. Si una excepción es lanzada, las instrucciones en la cláusula finally se ejecutan incluso si ninguna cláusula catch maneja la excepción.

+ +

Usted puede usar la cláusula finally para hacer que su script falle plácidamente cuando una excepción ocurra; por ejemplo, para hacer una limpieza general, usted puede necesitar liberar un recurso que su script haya retenido.

+ +

Puede parecer extraño tener una cláusula relacionada a una excepción que se ejecuta sin importar si hay una excepción o no, pero esta concepción en realidad sirve a un propósito. El punto importante no es que la cláusula finally siempre se ejecuta, si no más bien que el codigo ordinario que le sigue a try..catch no.

+ +

Por ejemplo, si otra excepción ocurre dentro de un bloque catch de una declaración try, cualquier codigo restante en el mismo bloque exterior try que encierra ese try..catch (o en el flujo principal, si no es un bloque try exterior) , no será ejecutado, dado que el control es inmediatamente transferido al bloque catch del try exterior (o el generador de error interno, si no es en un bloque try).

+ +

Por lo tanto, cualquier rutina de limpieza hecha en esa sección encerrada (o la principal) antes de que exista, será saltada. Sin embargo, si la declaración try tiene un bloque finally, entonces el código de ese bloque finally será ejecutado primero para permitir tal limpieza, y ENTONCES el bloque catch de la otra declaración try (o el generador de error) tomará el control para manejar la segunda excepción.

+ +

Ahora, si esa rutina de limpieza debiera ser hecha ya sea que el código del try..catch tenga éxito o no, entonces si el bloque finally se ejecutase solo después de una excepción, el mismo código de limpieza tendría que estar presente dentro y fuera del bloque finally, y por lo tanto no hay razón para no tener el bloque finally solo, y dejarlo ejecutarse sin importar si hay excepciones o no.

+ +

El siguiente ejemplo abre un archivo y despues ejecuta sentencias que usan el archivo (JavaScript del lado del servidor permite acceder a archivos). Si una excepción es lanzada mientras el archivo está abierto, la cláusula finally cierra el archivo antes de que el script falle. El código en finally también se ejecuta después de un retorno explícito de los bloques try o catch.

+ +
openMyFile()
+try {
+   // retiene un recurso
+   writeMyFile(theData);
+}
+finally {
+   closeMyFile(); // siempre cierra el recurso
+}
+
+ +

Ejemplos

+ +

Bloques try anidados

+ +

Primero, veamos que pasa con esto:

+ +
try {
+  try {
+    throw new Error('oops');
+  }
+  finally {
+    console.log('finally');
+  }
+}
+catch (ex) {
+  console.error('outer', ex.message);
+}
+
+// Output:
+// "finally"
+// "outer" "oops"
+ +

Ahora, si nosotros ya capturamos la excepción en una declaración try interna agregando un bloque 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"
+ +

Y ahora vamos a relanzar el error.

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

Cualquier excepción dad será capturada solo una vez por el bloque catch más cercano a menos que sea relanzado. Por supuesto cualquier nueva excepción que se origine en el bloque 'interno' (porque el código en el bloque catch puede hacer algo que lanze un error), será capturado por el bloque 'externo'.

+ +

Retornando de un bloque finally

+ +

Si el bloque finally retorna un valor, este valor se convierte en el valor de retorno de toda la producción try-catch-finally, a pesar de cualquier sentencia return en los bloques try y catch. Esto incluye excepciones lanzadas dentro del bloque 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"
+ +

El "oops" externo no es lanzado debido al retorno en el bloque finally. Lo mismo aplicaría para cualquier valor retornado del bloque catch.

+ +

Vea los ejemplos para {{jsxref("Sentencias/throw", "throw")}}.

+ +

Vea también

+ + diff --git a/files/es/web/javascript/reference/statements/var/index.html b/files/es/web/javascript/reference/statements/var/index.html new file mode 100644 index 0000000000..006e40a270 --- /dev/null +++ b/files/es/web/javascript/reference/statements/var/index.html @@ -0,0 +1,163 @@ +--- +title: var +slug: Web/JavaScript/Referencia/Sentencias/var +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/var +--- +
{{jsSidebar("Statements")}}
+ +

Resumen

+ +

La sentencia var declara una variable, opcionalmente inicializándola con un valor.

+ +

Sintaxis

+ +
var nombreDeVariable1 [= valor1] [, nombreDeVariable2 [= valor2] ... [, nombreDeVariableN [=valorN]]]; 
+ +
+
nombreDeVariableN
+
Representa el nombre que el programador da a la variable. Puede ser cualquier identificador legal.
+
+ +
+
valorN
+
Valor inicial de la variable. Puede ser cualquier expresión legal. El valor predeterminado es undefined (en español, indefinida).
+
+ +

Descripción

+ +

Las  declaraciones de variables, donde sea que ocurran, son procesadas antes de que cualquier otro código sea ejecutado. El ámbito de una variable declarada con la palabra reservada var es su contexto de ejecución en curso, que puede ser la función que la contiene o, para las variables declaradas afuera de cualquier función, un ámbito global. Si re-declaras una variable Javascript, esta no perderá su valor.

+ +

Asignar un valor a una variable no declarada implica crearla como variable global (se convierte en una propiedad del objeto global) cuando la asignación es ejecutada. Las diferencias entre una variable declarada y otra sin declarar son:

+ +

1. Las variables declaradas se limitan al contexto de ejecución en el cual son declaradas. Las variables no declaradas siempre son globales.

+ +
function x() {
+  y = 1;   // Lanza un error de tipo "ReferenceError" en modo estricto ('use strict')
+  var z = 2;
+}
+
+x();
+
+console.log(y); // Imprime "1" 
+console.log(z); // Lanza un error de tipo "ReferenceError": z no está definida afuera de x
+ +

2. Las variables declaradas son creadas antes de ejecutar cualquier otro código. Las variables sin declarar no existen hasta que el código que las asigna es ejecutado.

+ +
console.log(a);                // Lanza un error de tipo "ReferenceError".
+console.log('trabajando...'); // Nunca se ejecuta.
+ +
var a;
+console.log(a);                // Imprime "undefined" o "" dependiendo del navegador.
+console.log('trabajando...'); // Imprime "trabajando...".
+ +

3. Las variables declaradas son una propiedad no-configurable de su contexto de ejecución (de función o global). Las variables sin declarar son configurables (p. ej. pueden borrarse).

+ +
var a = 1;
+b = 2;
+
+delete this.a; // Lanza un error de tipo "ReferenceError" en modo estricto ('use strict'), de lo contrario falla silenciosamente.
+delete this.b;
+
+console.log(a, b); // Lanza un error de tipo "ReferenceError". 
+// La propiedad 'b' se eliminó y ya no existe.
+ +

Debido a esas tres diferencias, fallar al declarar variables muy probablemente llevará a resultados inesperados. Por tanto se recomienda siempre declarar las variables, sin importar si están en una función o un ámbito global. Y en el modo estricto (strict mode) de ECMAScript 5, asignar valor a una variable sin declarar lanzará un error.

+ +

Elevación de variables

+ +

Como la declaración de variables (y todas las declaraciones en general) se procesa antes de ejecutar cualquier código, declarar una variable en cualquier parte del código es equivalente a declararla al inicio del mismo. Esto también significa que una variable puede parecer usarse antes de ser declarada. Este comportamiento es llamado hoisting (del inglés "elevación"), ya que la declaración de una variable parecer haber sido movida a la cima de la función o código global.

+ +
bla = 2;
+var bla;
+// ...
+
+// Es entendido implicitamente como:
+
+var bla;
+bla = 2;
+ +

Por esa razón, se recomienda siempre declarar variables al inicio de su ámbito (la cima del código global y la cima del código de función) para que sea claro cuáles variables pertenecen al ámbito de función (local) y cuáles son resueltas en la cadena de ámbito.

+ +

Es importante señalar que la elevación afectará la declaración de variables, pero no su inicialización. El valor será asignado precisamente cuando la sentencia de asignación sea alcanzada:

+ +
function haz_algo() {
+  console.log(bar); // undefined (valor indefinido)
+  var bar = 111;
+  console.log(bar); // 111
+}
+
+// Se entiende implícitamente como: 
+function haz_algo() {
+  var bar;
+  console.log(bar); // undefined (valor indefinido)
+  bar = 111;
+  console.log(bar); // 111
+}
+ +

 

+ +

Ejemplos

+ +

Declarando e inicializando dos variables

+ +
var a = 0, b = 0;
+ +

Asignando dos variables con un solo valor de cadena

+ +
var a = 'A';
+var b = a;
+
+// Equivalente a:
+
+var a, b = a = 'A';
+ +

Sé consciente del orden:

+ +
var x = y, y = 'A';
+console.log(x + y); // Imprimirá "undefinedA"
+ +

Aquí, 'x' & 'y' son declaradas antes de ejecutarse cualquier código, y la asignación ocurre después. Al momento de evaluar "x = y", 'y' existe así que ningún error "ReferenceError" es lanzado y su valor es 'undefined', de modo que 'x' también tiene asignada el valor 'undefined'. Después, a 'y' se le asigna el valor 'A'. Consecuentemente, luego de la primera línea, 'x' es exactamente igual a 'undefined' & 'y' es igual a 'A', de ahí el resultado.

+ +

Initialización de muchas variables

+ +
var x = 0;
+
+function f() {
+  var x = y = 1; // 'x' es declarada localmente, ¡'y' no lo es!
+}
+f();
+
+console.log(x, y); // Lanza un error de tipo "ReferenceError" en modo estricto ('y' no está definida). De lo contrario se imprimiría "0, 1".
+// En modo no-estricto:
+// 'x' es la variable global como se esperaría
+// 'y' sin embargo, se sale de la función
+ +

Globales implícitas y ámbito externo a una función

+ +

Las variables que parecen ser globales implícitas pueden ser referencias a variables en un ámbito externo a  la función:

+ +
var x = 0;  // 'x' es declarada globalmente, luego se le asigna el valor 0.
+
+console.log(typeof z); // Imprime "undefined", pues 'z' aún no existe.
+
+function a() { // Cuando 'a()' es invocada,
+  var y = 2;   // 'y' es declarada localmente en la function 'a()', después se le asigna el valor 2.
+
+  console.log(x, y);   // Imprime "0, 2".
+
+  function b() {       // Cuando 'b()' es invocada,
+    x = 3;  // Asigna el valor 3 a la global 'x' ya existente, no crea una nueva variable global.
+    y = 4;  // Asigna 4 a la externa existente 'y', no crea una nueva variable global.
+    z = 5;  // Crea una nueva variable global 'z' y le asigna un valor de 5. 
+  }         // (Lanza un error de tipo "ReferenceError" en modo estricto.)
+
+  b();     // Invocar 'b()' crea 'z' como variable global.
+  console.log(x, y, z);  // Imprime "3, 4, 5".
+}
+
+a();                   // Invocar 'a()' también llama a 'b()'.
+console.log(x, z);     // Imprime "3, 5", porque 'z' ya es una global.
+console.log(typeof y); // Imprime 'undefined' porque 'y' es local en la función 'a()'
diff --git a/files/es/web/javascript/reference/statements/while/index.html b/files/es/web/javascript/reference/statements/while/index.html new file mode 100644 index 0000000000..8eab047884 --- /dev/null +++ b/files/es/web/javascript/reference/statements/while/index.html @@ -0,0 +1,58 @@ +--- +title: while +slug: Web/JavaScript/Referencia/Sentencias/while +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/while +--- +
{{jsSidebar("Statements")}}
+ +

Resumen

+ +

Crea un bucle que ejecuta una sentencia especificada mientras cierta condición se evalúe como verdadera. Dicha condición es evaluada antes de ejecutar la sentencia

+ +

Sintaxis

+ +
while (condicion)
+  sentencia
+
+ +
+
condicion
+
Una expresión que se evalúa antes de cada paso del bucle. Si esta condición se evalúa como verdadera, se ejecuta sentencia. Cuando la condición se evalúa como false, la ejecución continúa con la sentencia posterior al bucle while.
+
+ +
+
sentencia
+
Una sentecia que se ejecuta mientras la condición se evalúa como verdadera. Para ejecutar múltiples sentencias dentro de un bucle, utiliza una sentencia {{jsxref("Sentencias/block", "block")}} ({ ... }) para agrupar esas sentencias.
+
+ +

Ejemplos

+ +

El siguiente bucle while itera mientras n es menor que tres.

+ +
n = 0;
+x = 0;
+while (n < 3) {
+  n ++;
+  x += n;
+}
+
+ +

Cada interación, el bucle incrementa n y la añade a x. Por lo tanto, x y n toman los siguientes valores:

+ + + +

Después de completar el tercer pase, la condición n < 3 no será verdadera más tiempo, por lo que el bucle terminará.

+ +

Vea También

+ + diff --git a/files/es/web/javascript/reference/statements/with/index.html b/files/es/web/javascript/reference/statements/with/index.html new file mode 100644 index 0000000000..d5dc78d600 --- /dev/null +++ b/files/es/web/javascript/reference/statements/with/index.html @@ -0,0 +1,166 @@ +--- +title: with +slug: Web/JavaScript/Referencia/Sentencias/with +translation_of: Web/JavaScript/Reference/Statements/with +--- +
El uso de la declaración no es recomendado,  ya que puede ser el origen de los errores de confusión y problemas de compatibilidad. See the "Ambiguity Con" paragraph in the "Description" section below for details.
+ +
{{jsSidebar("Statements")}}
+ +

La sentencia with extiende el alcance de una cadena con la declaración.

+ +

Sintaxis

+ +
with (expresión) {
+  declaración
+}
+
+ +
+
expresión
+
Añade la expresión dada a la declaración. Los parentesis alrededor de la expresión son necesarios.
+
declaración
+
Se puede ejecutar cualquier declaración. Para ejecutar varias declaraciónes, utilizar una declaración de bloque ({ ... }) para agrupar esas declaraciónes.
+
+ +

Descripción

+ +

JavaScript looks up an unqualified name by searching a scope chain associated with the execution context of the script or function containing that unqualified name. The 'with' statement adds the given object to the head of this scope chain during the evaluation of its statement body. If an unqualified name used in the body matches a property in the scope chain, then the name is bound to the property and the object containing the property. Otherwise a {{jsxref("ReferenceError")}} is thrown.

+ +
Using with is not recommended, and is forbidden in ECMAScript 5 strict mode. The recommended alternative is to assign the object whose properties you want to access to a temporary variable.
+ +

Performance pro & contra

+ +

Pro: The with statement can help reduce file size by reducing the need to repeat a lengthy object reference without performance penalty. The scope chain change required by 'with' is not computationally expensive. Use of 'with' will relieve the interpreter of parsing repeated object references. Note, however, that in many cases this benefit can be achieved by using a temporary variable to store a reference to the desired object.

+ +

Contra: The with statement forces the specified object to be searched first for all name lookups. Therefore all identifiers that aren't members of the specified object will be found more slowly in a 'with' block. Where performance is important, 'with' should only be used to encompass code blocks that access members of the specified object.

+ +

Ambiguity contra

+ +

Contra: The with statement makes it hard for a human reader or JavaScript compiler to decide whether an unqualified name will be found along the scope chain, and if so, in which object. So given this example:

+ +
function f(x, o) {
+  with (o)
+    print(x);
+}
+ +

Only when f is called is x either found or not, and if found, either in o or (if no such property exists) in f's activation object, where x names the first formal argument. If you forget to define x in the object you pass as the second argument, or if there's some similar bug or confusion, you won't get an error -- just unexpected results.

+ +

Contra: Code using with may not be forward compatible, especially when used with something else than a plain object. Consider this example:

+ +
+
function f(foo, values) {
+    with (foo) {
+        console.log(values)
+    }
+}
+
+ +

If you call f([1,2,3], obj) in an ECMAScript 5 environment, then the values reference inside the with statement will resolve to obj. However, ECMAScript 6 introduces a values property on Array.prototype (so that it will be available on every array). So, in a JavaScript environment that supports ECMAScript 6, the values reference inside the with statement will resolve to [1,2,3].values.

+
+ +

Examples

+ +

Using with

+ +

The following with statement specifies that the Math object is the default object. The statements following the with statement refer to the PI property and the cos and sin methods, without specifying an object. JavaScript assumes the Math object for these references.

+ +
var a, x, y;
+var r = 10;
+
+with (Math) {
+  a = PI * r * r;
+  x = r * cos(PI);
+  y = r * sin(PI / 2);
+}
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-with-statement', 'with statement')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.10', 'with statement')}}{{Spec2('ES5.1')}}Now forbidden in strict mode.
{{SpecName('ES3', '#sec-12.10', 'with statement')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-12.10', 'with statement')}}{{Spec2('ES1')}}Initial definition
+ +

Browser compatibility

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

See also

+ + diff --git a/files/es/web/javascript/reference/strict_mode/index.html b/files/es/web/javascript/reference/strict_mode/index.html new file mode 100644 index 0000000000..d6a596b3e5 --- /dev/null +++ b/files/es/web/javascript/reference/strict_mode/index.html @@ -0,0 +1,368 @@ +--- +title: Modo Estricto +slug: Web/JavaScript/Referencia/Modo_estricto +tags: + - ECMAScript5 + - Guía + - JavaScript + - Modo estricto +translation_of: Web/JavaScript/Reference/Strict_mode +--- +
{{JsSidebar("More", "Más")}}
+ +
A veces, verás que llaman {{Glossary("Sloppy_mode", "sloppy mode — modo poco riguroso")}} al modo no estricto predeterminado. Este no es un término oficial, pero tenlo en cuenta, por si acaso.
+ +

El modo estricto de ECMAScript 5 es una forma de elegir una variante restringida de JavaScript, así implícitamente se deja de lado el modo poco riguroso. El modo estricto no es sólo un subconjunto: intencionalmente tiene diferencia semántica del código normal. Los navegadores que no admiten el modo estricto ejecutarán el código con un comportamiento diferente a los que sí lo soportan, por lo tanto no confíes en el modo estricto sin antes hacer pruebas de sus características más relevantes. Los modos estricto y no estricto pueden coexistir, por lo tanto el código se puede transformar a modo estricto incrementalmente.

+ +

El modo estricto tiene varios cambios en la semántica normal de JavaScript:

+ +
    +
  1. Elimina algunos errores silenciosos de JavaScript cambiándolos para que lancen errores.
  2. +
  3. Corrige errores que hacen difícil para los motores de JavaScript realizar optimizaciones: a veces, el código en modo estricto puede correr más rápido que un código idéntico pero no estricto.
  4. +
  5. Prohíbe cierta sintaxis que probablemente sea definida en futuras versiones de ECMAScript.
  6. +
+ +

Ve transición a modo estricto, si deseas cambiar tu código para trabajar en la variante estricta de JavaScript.

+ +

Invocar el modo estricto

+ +

El modo estricto se aplica a un script completo o a funciones individuales. No se aplica a bloques entre corchetes {}; intentar aplicarlo en tales contextos no hace nada. Código eval, código Function, atributos de controladores de eventos, cadenas pasadas a setTimeout, y similares son scripts enteros, de modo que invocar modo estricto en tales contextos funciona como se espera.

+ +

Modo estricto para scripts

+ +

Para invocar el modo estricto en todo un script, escribe exactamente "use strict"; (o 'use strict';) antes de cualquier otra expresión.

+ +
// Sintaxis del modo estricto para todo el script
+'use strict';
+var v = "¡Hola! ¡Estoy en modo estricto para script!";
+
+ +

Esta sintaxis tiene un problema que ya ha afectado a cierta página bien conocida: no es posible concatenar ciegamente scripts conflictivos entre sí. Si concatena un script en modo estricto con otro que no es, la concatenación de ambos producirá código en modo estricto. Lo contrario también es cierto: código en modo no estricto mas código estricto produce código que no es estricto. Concatenar scripts no produce problemas si todos están en modo estricto (o si todos están en modo no estricto). El problema es mezclar scripts en modo estricto con scripts en modo no estricto. Por eso se recomienda habilitar el modo estricto a nivel de función solamente (al menos durante el periodo de transición de un programa).

+ +

Otra opción es envolver el contenido completo del script en una función y tener esa función externa en modo estricto. Así se elimina el problema de la concatenación, pero entonces tienes que hacerte cargo de exportar explícitamente las variables globales fuera del ámbito de la función.

+ +

Modo estricto para funciones

+ +

De igual forma, para invocar el modo estricto para una función, escribe exactamente "use strict"; (o 'use strict';) en el cuerpo de la función antes de cualquier otra expresión.

+ +
function strict() {
+  // Sintaxis del modo estricto a nivel de función
+  'use strict';
+  function nested() { return "¡Y yo también!"; }
+  return "¡Hola!  ¡Soy una función en modo estricto!  " + nested();
+}
+function notStrict() { return "Yo no soy estricto."; }
+
+ +

Modo estricto para módulos

+ +

ECMAScript 2015 introdujo módulos y por tanto una tercera manera de entrar en el modo estricto. Todo el contenido de los módulos de JavaScript se encuentra automáticamente en modo estricto, sin necesidad de una declaración para iniciarlo.

+ +
function strict() {
+    // debido a que este es un módulo, soy estricto por omisión
+}
+export default strict;
+
+ +

Cambios en modo estricto

+ +

El modo estricto cambia la sintaxis y el comportamiento en tiempo de ejecución. Los cambios generalmente caen dentro de estas categorías: cambios que convierten equivocaciones en errores (como errores de sintaxis o en tiempo de ejecución), cambios que simplifican cómo se calcula el nombre de una variable particular, cambios que simplifican el uso de eval y arguments, cambios que hacen más fácil escribir JavaScript "seguro", y cambios que anticipan la evolución futura de ECMAScript.

+ +

Convertir equivocaciones en errores

+ +

El modo estricto cambia algunos errores de sintaxis tolerados en modo no estricto y los convierte en errores. JavaScript fue diseñado de modo que fuera fácil para programadores novatos, y puede haber operaciones semánticas que deberían ser errores pero son tratadas como libres de error. A veces esto sirve para solucionar el problema en el momento, pero puede crear problemas más graves en el futuro. El modo estricto trata las equivocaciones como errores, para que se puedan descubrir y subsanar inmediatamente.

+ +

En primer lugar, el modo estricto hace imposible crear variables globales por accidente. En JavaScript no estricto, si se escribe mal una variable en una asignación, se creará una nueva propiedad en el objeto global y el código continuará "trabajando" como si nada (aunque es posible que el código así escrito falle en el futuro, en concreto, en JavaScript moderno). En modo estricto, cualquier asignación que produzca variables globales por accidente lanzará un error:

+ +
'use strict';
+                       // Asumiendo que exista una variable global llamada mistypedVariable
+mistypeVariable = 17;  // esta línea lanza un ReferenceError debido a
+                       // una errata en el nombre de la variable
+
+ +

En segundo lugar, el modo estricto lanza una excepción en asignaciones que de otro modo fallarían silenciosamente. Por ejemplo, NaN es una variable global que no puede ser asignada. En un código normal, asignar a NaN no tiene efecto; el programador no recibe ningún mensaje de error. En cambio, en modo estricto, si se intenta asignar un valor a NaN, el programador recibirá una excepción. Cualquier asignación que falle silenciosamente en código normal (asignaciones a una propiedad de no escritura, asignaciones a una propiedad captadora, asignaciones a una nueva propiedad o a un objecto {{jsxref("Global_Objects/Object/preventExtensions", "no extensible")}}) lanzará una excepción en modo estricto:

+ +
'use strict';
+
+// Asignación a una no-escritura global
+var undefined = 5; // lanza un TypeError
+var Infinity = 5; // lanza un TypeError
+
+// Asignación a una propiedad de no-escritura
+var obj1 = {};
+Object.defineProperty(obj1, "x", { value: 42, writable: false });
+obj1.x = 9; // lanza un TypeError
+
+// Asignación a una propiedad de tipo getter
+var obj2 = { get x() { return 17; } };
+obj2.x = 5; // lanza un TypeError
+
+// Asignación a una nueva propiedad en un objeto no extensible
+var fixed = {};
+Object.preventExtensions(fixed);
+fixed.newProp = "ohai"; // lanza un TypeError
+
+ +

En tercer lugar, el modo estricto lanza una excepción al intentar eliminar propiedades no eliminables (mientra que en código normal el intento no tendría ningún efecto):

+ +
'use strict';
+delete Object.prototype; // lanza un TypeError
+
+ +

En cuarto lugar, la versión de modo estricto anterior a Gecko 34 requiere que todas las propiedades nombradas en un objeto sean únicas. En código normal se pueden duplicar nombres, siendo el último el que determina el valor de la propiedad. Pero como el último es el único que hace algo, la duplicidad da origen a errores si el código se modifica para cambiar el valor de la propiedad. Duplicar nombres de propiedades es un error de sintaxis en modo estricto.

+ +
+

Este ya no es el caso en ECMAScript 2015 (error 1041128).

+
+ +
'use strict';
+var o = { p: 1, p: 2 }; // !!! error de sintaxis
+
+ +

En quinto lugar, el modo estricto requiere que los nombres de los parámetros de una función sean únicos. En código normal, el último argumento repetido oculta argumentos anteriores con el mismo nombre. Estos argumentos permanecen disponibles a través de arguments[i], de modo que no son completamente inaccesibles. Aun así, esta ocultación tiene poco sentido y es probablemente indeseable (pues puede ocultar, por ejemplo, un error al teclear una letra). Por lo tanto, en modo estricto, duplicar nombres de argumentos es un error de sintaxis:

+ +
function sum(a, a, c) { // !!! error de sintaxis
+  'use strict';
+  return a + a + c; // incorrecto si este código se ejecutó
+}
+
+ +

En sexto lugar, en modo estricto ECMAScript 5 se prohíbe la notación octal. La notación octal no es parte de ECMAScript 5, pero está soportada en todos los navegadores al poner como prefijo un cero al número: 0644 == 420 y "\045" === "%". En ECMAScript 2015, el número octal es compatible con el prefijo de un número con "0o". Es decir:

+ +
var a = 0o10; // ES2015: Octal
+ +

Los programadores novatos a veces creen que un prefijo cero inicial no tiene un significado semántico, por lo que lo usan como dispositivo de alineación, ¡pero esto cambia el significado del número! Una sintaxis de cero a la izquierda para los octales rara vez es útil y se puede usar por error, por lo que el modo estricto lo convierte en un error de sintaxis:

+ +
'use strict';
+var sum = 015 + // !!! error de sintaxis
+          197 +
+          142;
+
+var sumWithOctal = 0o10 + 8;
+console.log(sumWithOctal); // 16
+
+ +

Séptimo, el modo estricto en ECMAScript 2015 prohíbe establecer propiedades en valores {{Glossary("Primitive", "primitivos")}}. La sintaxis octal rara vez es útil y se puede usar equivocadamente, de modo que en modo estricto, utilizar notación octal lanza un {{jsxref("TypeError")}}:

+ +
(function() {
+'use strict';
+
+false.true = '';         // TypeError
+(14).sailing = 'home';   // TypeError
+'with'.you = 'far away'; // TypeError
+
+})();
+ +

Simplificación en el uso de variables

+ +

El modo estricto simplifica el modo en que el nombre de una variable es asignado a un variable particular en el código. Muchas optimizaciones del compilador se basan en la habilidad para decir el lugar específico en que una variable está almacenada, lo cual es crítico para una optimización completa del código JavaScript. Algunas veces JavaScript hace que esta asignación básica del nombre de una variable y su valor no suceda hasta que no se está en tiempo de ejecución. El modo estricto elimina muchos de los casos en los que esto pasa, de modo que el compilador puede optimizar mejor el código que es estricto.

+ +

Primero, el modo estricto prohíbe el uso de with. El problema con with es que cualquier nombre dentro del bloque pude ser asignado a una propiedad del objecto pasado como argumento, o a una variable en su ámbito circundante (o incluso global), en tiempo de ejecución: es imposible saber de antemano cuál será. El modo estricto hace que el uso de with sea un error de sintaxis, de modo que no hay oportunidad de que una variable dentro de un with se refiera a una dirección desconocida en tiempo de ejecución:

+ +
'use strict';
+var x = 17;
+with (obj) { // !!! error de sintaxis
+  // Si este no estuviera un modo estricto, ¿sería var x?, o
+  // ¿sería obj.x en su lugar?  Es imposible en general
+  // decirlo sin ejecutar el código, por lo que el nombre no
+  // se puede optimizar.
+  x;
+}
+
+ +

En vez de usar with, existe la simple alternativa de asignar el objecto a una variable de nombre más corto, y después acceder a la propiedad correspondiente de esa variable.

+ +

Segundo, el uso de eval en modo estricto no introduce nuevas variables en el ámbito circundante. En código normal, eval("var x;") introduce una variable x dentro de la función circundante o el ámbito global. Esto significa que, en general, en una función que contiene una llamada a eval en cada nombre que no se refiera a un argumento o a una variable local, se debe asignar a una definición en particular en tiempo de ejecución (debido a que eval puedo haber introducido una nueva variable que podría ocultar una variable externa). En modo estricto, eval crea variables solo para el código que se está evaluando, por lo que eval no puede afectar si un nombre se refiere a una variable externa o a alguna variable local:

+ +
var x = 17;
+var evalX = eval("'use strict'; var x = 42; x");
+console.assert(x === 17);
+console.assert(evalX === 42);
+
+ +

En el ejemplo anterior, si la función eval es invocada por una expresión de la forma eval(...) en código de modo estricto, el código será evaluado en modo estricto. El código puede explícitamente invocar el modo estricto, pero no es necesario.

+ +
function strict1(str) {
+  'use strict';
+  return eval(str); // str será tratado como código de modo estricto
+}
+function strict2(f, str) {
+  'use strict';
+  return f(str); // no eval(...): str es estricto si y solo
+                 // si invoca el modo estricto
+}
+function nonstrict(str) {
+  return eval(str); // str es estricto si y solo
+                    // si invoca el modo estricto
+}
+
+strict1("'¡Código en modo estricto!'");
+strict1("'use strict'; '¡Código en modo estricto!'");
+estricto2(eval, "'Código no estricto'");
+strict2(eval, "'use strict'; '¡Código en modo estricto!'");
+nonstrict("'Código no estricto'");
+nonstrict("'use strict'; '¡Código en modo estricto!'");
+
+ +

Así los nombres en modo estricto usando eval se comportan idénticamente a los nombres en modo estricto no siendo evaluados como resultado de eval.

+ +

Tercero, el modo estricto prohíbe eliminar nombres planos. De este modo, delete name produce un error de sintaxis.

+ +
'use strict';
+
+var x;
+delete x; // !!! error de sintaxis
+
+eval("var y; delete y;"); // !!! error de sintaxis
+ +

Haciendo eval y arguments más simples

+ +

El modo estricto hace que el uso de arguments y eval sea más intuitivo. Ambos envuelven un considerable misticismo en código normal: eval al añadir o remover los enlaces y cambiar los valores de dichos enlaces, y arguments al poder sustituir los nombres de los argumentos por propiedades indexadas. El modo estricto ofrece un gran paso al tratar a eval y a arguments como palabras clave, aunque soluciones finales no estarán disponibles hasta futuras ediciones de ECMAScript.

+ +

Primero, las palabras eval y arguments no se pueden ligar o asignar en la sintaxis del lenguaje. Cualquier intento producirá un error de sintaxis:

+ +
'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;");
+
+ +

Segundo, el modo estricto no permite usar alias en elementos del objecto arguments creados dentro de la función. En una función en código normal cuyo primer parámetro sea args, si se cambia el valor de args también se cambiará de arguments[0], y viceversa (a menos que no se proporcionen parámetros o se elimine arguments[0]). El objecto arguments para el modo estricto almacena los parámetros originales cuando la función es invocada. arguments[i] no guarda el valor del correspondiente nombre del parámetro, ni tampoco un parámetro con nombre guarda el valor correspondiente de 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);
+
+ +

Tercero, arguments.callee no está soportado. En código normal, arguments.callee se refiere a la función envolvente. Este caso de uso es débil: ¡simplemente nombra la función envolvente!. Además arguments.callee merma el desempeño de funciones en línea pues debe ser posible proveer la referencia de la función que llamó a la función original cada vez que se usa arguments.callee. arguments.callee en modo estricto es una propiedad no eliminable y lanza una excepción cuando se le asigna un valor o se intenta regresar su valor.

+ +
'use strict';
+var f = function() { return arguments.callee; };
+f(); // lanza un TypeError
+
+ +

+ +

El modo estricto hace más fácil el escribir código "seguro" en JavaScript. Algunos sitios web ofrecen ahora medios para que los usuarios codifiquen en JavaScript para que el código corra en el sitio en beneficio de otros usuarios. JavaScript en los navegadores puede acceder a la información privada del usuario, por lo que dicho JavaScript se debe transformar parcialmente antes de ejecutarse, para censurar el acceso a funciones prohibidas. La flexibilidad de JavaScript hace que efectivamente sea imposible hacer esto sin muchas comprobaciones en tiempo de ejecución. La flexibilidad de JavaScript hace casi imposible hacer esto sin hacer revisiones en tiempo de ejecución. Unos pocos ajustes del modo estricto, además de requerir que el JavaScript enviado por el usuario sea código de modo estricto y que se invoque de cierta manera, reducen sustancialmente la necesidad de esas comprobaciones en tiempo de ejecución.

+ +

Primero, el valor this pasado a una función en modo estricto no forzosamente debe ser un objeto (es decir, "empaquetado"). Para una función normal, this siempre es un objeto: o el objeto proporcionado si se llama con un this con valor de objeto; el valor, empaquetado, si se llama con un booleano, una cadena o un número this; o el objeto global si se llama con un undefined o null this. (Usar {{jsxref("Global_Objects/Function/call", "call")}}, {{jsxref("Global_Objects/Function/apply", "apply")}}, o {{jsxref("Global_Objects/Function/bind", "bind")}} para especificar un valor del this particular). Este empaquetado automático al pasar valores a una función tiene un costo en el rendimiento; no solo eso, si no que al exponer el objeto global en los navegadores es un riesgo de seguridad, debido a que el objeto global provee acceso a una funcionalidad que el código de JavaScript "seguro" debe restringir. Así, en una función en modo estricto , el valor de this no está empaquetado dentro de un objecto, y si no se especifica, this toma el valor de undefined.

+ +
'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);
+
+ +

Esto significa, entre otras cosas, que en los navegadores no es posible hacer referencia al objeto window a través de this dentro de una función en modo estricto.

+ +

Segundo, en modo estricto ya no es posible "recorrer" la pila de JavaScript a través de extensiones de ECMAScript. En código normal con estas extensiones, cuando una función llamada fun está en medio de su ejecución, fun.caller es la función que más recientemente llamó a fun, y fun.arguments son los parámetros para esa invocación de fun. Ambas extensiones son problemáticas para JavaScript "seguro", debido a que permiten acceder a funciones "privilegiadas" y sus (potencialmente inseguros) argumentos. Si fun está en modo estricto, tanto fun.caller como fun.arguments son propiedades no eliminables que lanzan una excepción cuando se establecen o recuperan:

+ +
function restricted() {
+  'use strict';
+  restricted.caller;    // lanza un TypeError
+  restricted.arguments; // lanza un TypeError
+}
+function privilegedInvoker() {
+  return restricted();
+}
+privilegedInvoker();
+
+ +

Tercero, en funciones de modo estricto, el objeto arguments no provee acceso a las variables usadas al llamar a la función. En algunas implementaciones antiguas de ECMAScript, arguments.caller era un objeto cuyas propiedades apuntaban a las variables en la función. Esto es una amenaza de seguridad por que rompe la habilidad de ocultar valores privilegiados a través de la abstracción de la función; además, frena algunas optimizaciones. Por estas razones los navegadores modernos no la implementan. Por su funcionalidad a lo largo de los años, arguments.caller en una función de modo estricto es una propiedad que lanza una excepción cuando se usa.

+ +
'use strict';
+function fun(a, b) {
+  'use strict';
+  var v = 12;
+  return arguments.caller; // lanza un TypeError
+}
+fun(1, 2); // no expone v (o a o b)
+
+ +

Preparando el camino para futuras versiones de ECMAScript

+ +

Las futuras versiones de ECMAScript introducirán nuevos cambios, y el modo estricto en ECMAScript 5 aplica algunos de esos cambios para hacer una transición más suave. Será más fácil hacer cambios si las bases de esos cambios son prohibidas en modo estricto.

+ +

Primero, en modo estricto una lista de identificadores se convierte en palabras reservadas. Estas palabras son implements, interface, let, package, private, protected, public, static, y yield. De modo que en modo estricto, no se pueden usar estas palabras para nombrar variables o argumentos.

+ +
function package(protected) { // !!!
+  'use strict';
+  var implements; // !!!
+
+  interface: // !!!
+  while (true) {
+    break interface; // !!!
+  }
+
+  function private() { } // !!!
+}
+function fun(static) { 'use strict'; } // !!!
+
+
+ +

Dos advertencias específicas de Mozilla: Primero, si tu código esta escrito en JavaScript 1.7 o mayor (por ejemplo en código chrome o cuando se usa bien <script type="">) y el código esta en modo estricto, let y yield tienen la funcionalidad que han tenido desde que esas palabras clave se introdujeron por primera vez. Pero el código en modo estricto en la web, cargado con <script src=""> o <script>...</script>, no podrá usar let/yield como identificadores. Segundo, mientras que ES5 incondicionalmente reserva las palabras class, enum, export, extends, import y super, Mozilla Firefox 5 solo las reserva en modo estricto.

+ +

En segundo lugar, el modo estricto prohíbe las declaraciones de función, no en el nivel superior de un script o función. En el modo normal de los navegadores, las declaraciones de función se permiten "en todas partes". ¡Esto no es parte de ES5 (ni siquiera de ES3)! Es una extensión con semántica incompatible en diferentes navegadores. Ten en cuenta que en ES2015 se permiten declaraciones de función fuera del nivel superior.

+ +
'use strict';
+if (true) {
+  function f() { } // !!! error de sintaxis
+  f();
+}
+
+for (var i = 0; i < 5; i++) {
+  function f2() { } // !!! error de sintaxis
+  f2();
+}
+
+function baz() {   // legal
+  function eit() { } // también legal
+}
+
+ +

Esta prohibición no es el modo estricto propiamente dicho porque tales declaraciones de función son una extensión de ES5 básico. Pero es la recomendación del comité ECMAScript y los navegadores la implementarán.

+ +

Modo estricto en navegadores

+ +

La mayoría de los navegadores ya implementan el modo estricto. Sin embargo, no dependas ciegamente de él, ya que todavía hay numerosas Versiones del navegador utilizadas en la naturaleza que solo tienen soporte parcial para el modo estricto o no lo admiten en absoluto (por ejemplo, Internet Explorer por debajo de la versión 10). El modo estricto cambia la semántica. Depender de esos cambios provocará equivocaciones y errores en los navegadores que no implementan el modo estricto. Ten cuidado al usar el modo estricto y respalda la dependencia del modo estricto con pruebas de funciones que comprueben si se implementan las partes relevantes del modo estricto. Finalmente, asegúrate de probar tu código en navegadores que admitan y no admitan el modo estricto. Si realizas tus pruebas solo en navegadores que no admiten el modo estricto, es muy probable que tengas problemas en los navegadores que sí lo hacen, y viceversa.

+ +

Especificaciones

+ + + + + + + + + + +
Especificación
{{SpecName('ESDraft', '#sec-strict-mode-code', 'Código en modo estricto')}}
+ +

Ve también

+ + diff --git a/files/es/web/javascript/reference/template_literals/index.html b/files/es/web/javascript/reference/template_literals/index.html new file mode 100644 index 0000000000..708c879383 --- /dev/null +++ b/files/es/web/javascript/reference/template_literals/index.html @@ -0,0 +1,314 @@ +--- +title: Plantillas literales (plantillas de cadenas) +slug: Web/JavaScript/Referencia/template_strings +tags: + - ECMAScript 2015 + - Experimental + - Expérimental(2) + - JavaScript +translation_of: Web/JavaScript/Reference/Template_literals +--- +
{{JsSidebar("More")}}
+ +

Las plantillas literales son cadenas literales que habilitan el uso de expresiones incrustadas. Con ellas, es posible utilizar cadenas de caracteres de más de una línea, y funcionalidades de interpolación de cadenas de caracteres.

+ +

En ediciones anteriores de la especificación ES2015, solían llamarse "plantillas de cadenas de caracteres".

+ +

Sintaxis

+ +
`texto de cadena de caracteres`
+
+`línea 1 de la cadena de caracteres
+ línea 2 de la cadena de caracteres`
+
+`texto de cadena de caracteres ${expresión} texto adicional`
+
+etiqueta`texto de cadena de caracteres ${expresión} texto adicional`
+
+ +

Descripción

+ +

Las plantillas literales se delimitan con el caracter de comillas o tildes invertidas (` `) (grave accent), en lugar de las comillas sencillas o dobles.

+ +

Las plantillas de cadena de caracteres pueden contener marcadores, identificados por el signo de dólar y envueltos en llaves (${expresión}). Las expresiones contenidas en los marcadores, junto con el texto entre ellas, son enviados como argumentos a una función.

+ +

La función por defecto sencillamente concatena las partes para formar una única cadena de caracteres. Si hay una expresión antes de la plantilla literal (aquí indicada mediante etiqueta), se le conoce como "plantilla etiquetada". En este caso, la expresión de etiqueta (típicamente una función) es llamada con la plantilla literal como parámetro, que luego puede ser manipulada antes de ser devuelta.

+ +

En caso de querer escapar una comilla o tilde invertida en una plantilla literal, se debe poner una barra invertida (\) antes de la comilla o tilde invertida.

+ +
`\`` === '`' // --> true (cierto)
+ +

Cadenas de más de una línea

+ +

Los caracteres de fin de línea encontrados forman parte de la plantilla literal.

+ +

Utilizando cadenas de caracteres normales, sería necesario utilizar la siguiente sintaxes para producir cadenas de más de una línea:

+ +
console.log('línea 1 de cadena de texto\n' +
+'\línea 2 de cadena de texto');
+// "línea 1 de cadena de texto
+// línea 2 de cadena de texto"
+
+ +

Utilizando plantillas literales, se puede obtener el mismo resultado de la siguiente forma:

+ +
console.log(`línea 1 de la cadena de texto
+línea 2 de la cadena de texto`);
+// "línea 1 de la cadena de texto
+// línea 2 de la cadena de texto"
+ +

Interpolación de expresiones

+ +

Para insertar expresiones dentro de cadenas de caracteres normales, se utilizaría la siguiente sintaxis:

+ +
let a = 5;
+let b = 10;
+console.log('Quince es ' + (a + b) + ' y\nno ' + (2 * a + b) + '.');
+// "Quince es 15 y
+// no 20."
+ +

Ahora, con las plantillas literales, se pueden utilizar sus nuevas capacidades (es decir, insertar expresiones con ${ } e incluir caracteres de fin de linea literales dentro de la cadena) para simplificar la sintaxis:

+ +
let a = 5;
+let b = 10;
+console.log(`Quince es ${a + b} y
+no ${2 * a + b}.`);
+// "Quince es 15 y
+// no 20."
+ +

Anidamiento de plantillas

+ +

En ciertos casos, anidar una plantilla es la forma más fácil, e incluso más legible, de tener cadenas configurables. Dentro de una plantilla con tildes invertidas, es sencillo permitir tildes invertidas interiores simplemente usándolas dentro de un marcador de posición ${ } dentro de la plantilla.

+ +

Por ejemplo, si la condición a es true (cierta): entonces return (devuelva) este literal con plantilla.

+ +

En ES5:

+ +
let classes = 'header'
+classes += (isLargeScreen() ?
+   '' : item.isCollapsed ?
+     ' icon-expander' : ' icon-collapser');
+ +

En ES2015 con plantillas literales y sin anidamiento:

+ +
const classes = `header ${ isLargeScreen() ? '' :
+    (item.isCollapsed ? 'icon-expander' : 'icon-collapser') }`;
+ +

En ES5 con plantillas literales anidadas:

+ +
const classes = `header ${ isLargeScreen() ? '' :
+ `icon-${item.isCollapsed ? 'expander' : 'collapser'}` }`;
+ +

Plantillas etiquetadas

+ +

Una forma más avanzada de plantillas literales son las plantillas etiquetadas.

+ +

Con ellas es posible modificar la salida de las plantillas utilizando una función. El primer argumento contiene un array con una o más cadenas de caracteres. El segundo y subsiguientes argumentos se asocian con las expresiones de la plantilla.

+ +

La función de etiqueta puede ejecutar cualesquiera operaciones deseadas con estos argumentos, y luego devolver la cadena manipulada. (También puede devolver algo totalmente distinto, como se muestra en uno de los siguientes ejemplos.)

+ +

El nombre de la función utilizada con la etiqueta no es nada especial, se puede utilizar cualquier nombre de función en su lugar.

+ +
let persona = 'Mike';
+let edad = 28;
+
+function myTag(strings, expPersona, expEdad)
+{
+  let str0 = strings[0]; // "Ese "
+  let str1 = strings[1]; // " es un "
+
+  // Tecnicamente, hay una cadena de
+  // caracteres después de la expresión
+  // final (en nuestro ejemplo) pero
+  // está vacia (""), asi que se ignora.
+  // let str2 = strings[2];
+
+  let strEdad;
+  if (expEdad > 99)
+  {
+    strEdad = 'viejo';
+  }
+  else
+  {
+    strEdad = 'joven';
+  }
+
+  // Podemos incluso retornar una cadena de
+  // caracteres utilizando una plantilla literal.
+  return `${str0}${expPersona}${str1}${strEdad}`;
+}
+
+var salida = myTag`Ese ${ persona } es un ${ edad }`;
+
+console.log(salida);
+// Ese Mike es un joven
+
+ +

Las funciones de etiqueta incluso pueden devolver valores que no sean cadenas de caracteres:

+ +
function plantilla(cadenas, ...claves) {
+  return (function(...valores) {
+    let diccio = valores[valores.length - 1] || {};
+    let resultado = [cadenas[0]];
+    claves.forEach(function(clave, i) {
+      let valor = Number.isInteger(clave) ? valores[clave] : diccio[clave];
+      resultado.push(valor, cadenas[i + 1]);
+    });
+    return resultado.join('');
+  });
+}
+
+let t1Closure = plantilla`¡${0}${1}${2}${2}${3}!`;
+//let t1Closure = plantilla(["¡","","","","","","!"],0,1,2,3);
+t1Closure('H', 'U', 'R', 'A');              // "¡HURRA!"
+
+let t2Closure = plantilla`${0} ${'foo'}!`;
+//let t2Closure = plantilla(["¡",""," ","!"],0,"foo");
+t2Closure('Hola', {foo: 'Mundo'}); // "¡Hola Mundo!"
+
+let t3Closure = plantilla`Me llamo ${'nombre'}. Tengo casi ${'edad'} años.`;
+//let t3Closure = plantilla(["Me llamo ", ". Tengo casi ", " años."], "nombre", "edad");
+t3Closure('foo', {nombre: 'MDN', edad: 30}); //"Me llamo MDN. Tengo casi 30 años."
+t3Closure({nombre: 'MDN', edad: 30}); //"Me llamo MDN. Tengo casi 30 años."
+ +

Cadenas en crudo (raw)

+ +

La propiedad especial raw, disponible en el primer argumento de la función de etiqueta, permite acceso a las cadenas de caracteres tal como fueron ingresadas, sin procesar secuencias de escape.

+ +
function etiqueta(cadenas) {
+  console.log(cadenas.raw[0]);
+}
+
+etiqueta`texto de cadena de caracteres 1 \n texto de cadena de caracteres 2`;
+// muestra "texto de cadena de caracteres 1 \n texto de cadena de caracteres 2" ,
+// incluyendo los caracteres '\' y 'n'
+ +

Adicionalmente, el método {{jsxref("String.raw()")}} permite crear cadenas de caracteres en crudo tal como serían generadas por la función por defecto de plantilla, concatenando sus partes.

+ +
let cadena = String.raw`¡Hola\n${2+3}!`;
+// "¡Hola\n5!"
+
+cadena.length;
+// 9
+
+Array.from(cadena).join(',');
+// "¡,H,o,l,a,\,n,5,!"
+
+ +

Plantillas etiquetadas y secuencias de escape

+ +

Comportamiento en ES2016

+ +

Comenzando con ECMAScript 2016, las plantillas etiquetadas se comportan de acuerdo con las normas de las siguientes secuencias de escape:

+ + + +

Esto significa que una plantilla etiquetada como la siguiente podría causar problemas, dado que, de acuerdo con la gramática de ECMAScript, un analizador buscará secuencias de escape de formato Unicode válidas pero encontrará sintaxis equivocado:

+ +
latex`\unicode`
+// En ECMAScript 2016 y versiones anteriores, lanza
+// SyntaxError: malformed Unicode character escape sequence
+ +

Revision de secuencias de escape no permitidas en ES2018

+ +

Las plantillas etiquetadas deberías permitir la inserción de lenguages (como los DSL, o LaTeX), en donde otras secuencias de escape se ven comúnmente. La propuesta para ECMAScript Template Literal Revision (Revisión de Plantilla Literal) (Cuarta Etapa, en camino a ser integrada al estándar de ECMAScript 2018) elimina la restricción de las secuencias de escape en ECMAScript para las plantillas etiquetadas.

+ +

Aún así, las secuencias de escape no permitidas deben ser representadas en la representación "cocinada" de la cadena. Aparecerán como elementos no definidos en el array llamado "cocinado" en el siguiente ejemplo.

+ +
function latex(str) {
+  return { "cocinado": str[0], "en crudo": str.raw[0] }
+}
+
+latex`\unicode`
+
+// { cocinado: undefined, en crudo: "\\unicode" }
+ +

Cabe destacar que la restricción para secuencias de escape solo ha sido eliminada para plantillas etiquetadas. Aún permanece para plantillas literales sin etiqueta:

+ +
let bad = `bad escape sequence: \unicode`;
+ +

Especificaciones

+ + + + + + + + + + + + + + +
EspecificaciónStatusComentarios
{{SpecName('ES6', '#sec-template-literals', 'Template Literals')}}
+ {{SpecName('ES6', '#sec-tagged-templates', 'Tagged Templates')}}
{{Spec2('ES6')}}Definición inicial.
+ +

Compatibilidad de navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FuncionalidadChromeFirefox (Gecko)Internet ExplorerOperaSafari
Soporte básico{{CompatChrome(41)}}{{CompatGeckoDesktop("34")}}{{CompatNo}}{{CompatOpera(29)}}{{CompatSafari(9.1)}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FuncionalidadAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Soporte básico{{CompatAndroid(67)}} +

{{CompatChrome(71)}}

+
{{CompatGeckoMobile("63")}}{{CompatNo}}{{CompatOpera(46)}}{{CompatSafari(9)}}
+
+ +

Ver también

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