1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
---
title: Novedades en JavaScript 1.8
slug: Web/JavaScript/Novedades_en_JavaScript/1.8
tags:
- JavaScript
- Todas_las_Categorías
- Visión_general_de_las_versiones_JavaScript
translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8
---
<p>{{jsSidebar("New_in_JS")}}JavaScript 1.8 esta planificado para integrarse como parte de Gecko 1.9 (el cual sera incorporado en <a href="es/Firefox_3_para_desarrolladores">Firefox 3</a>). Esta es una actualización menos sustancial que la descrita en <a href="es/Novedades_en_JavaScript_1.7">JavaScript 1.7</a>, pero tiene algunas actualizaciones para comprobar el progreso hacia ECMAScript 4/JavaScript 2. Esta versión incluirá todas las nuevas características especificadas en <a href="es/Novedades_en_JavaScript_1.6">JavaScript 1.6</a> y <a href="es/Novedades_en_JavaScript_1.7">JavaScript 1.7</a>.</p>
<p>Lee el {{ Bug(380236) }} para estar al día del progreso de desarrollo de JavaScript 1.8.</p>
<h3 id="Usando_JavaScript_1.8" name="Usando_JavaScript_1.8">Usando JavaScript 1.8</h3>
<p>Para poder usar algunas de las nuevas características de JavaScript 1.8 en el HTML, usar:</p>
<pre class="eval"> <script type="application/javascript;version=1.8"> ... su código aquí ... </script>
</pre>
<p>Cuando uses la <a href="es/Introducci%c3%b3n_al_shell_de_JavaScript">Shell de JavaScript</a>, componentes XPCOM de JavaScript, o elementos <code><script></code> XUL <code><script></code>, se usará automaticamente la última versión de JS (JS1.8 en Mozilla 1.9), lee ({{ Bug(381031) }}, {{ Bug(385159) }}).</p>
<p>Las características que requieren el uso de las nuevas palabras clave "yield" y "let" requiere que especifique la versión 1.7 o mayor ya que el código existente podría usar estas palabras clave como variables o nombres de función. Las características que no introducen nuevas palabras claves (como el generador de expresiones) pueden ser usadas sin especificar la versión de JavaScript.</p>
<p> </p>
<h3 id="Cierres_de_Expresi.C3.B3n" name="Cierres_de_Expresi.C3.B3n">Cierres de Expresión</h3>
<p>Esta adición es simplemente una manera más simplificada de escribir funciones sencillas, dándole al lenguaje algo similar al típico <a class="external" href="http://es.wikipedia.org/wiki/C%C3%A1lculo_lambda#C.C3.A1lculo_lambda_y_los_lenguajes_de_programaci.C3.B3n">cálculo Lambda</a>.</p>
<p><a href="es/Novedades_en_JavaScript_1.7">JavaScript 1.7</a> y versiones anteriores:</p>
<pre class="eval"> function(x) { return x * x; }
</pre>
<p>JavaScript 1.8:</p>
<pre class="eval"> function(x) x * x
</pre>
<p>Esta sintaxis te permite dejar fuera las llaves y las declaraciones 'return' - haciéndolas implícitas. No hay beneficio adicional en escribir código de esta manera, sino que el único es tener un código prácticamente mas corto.</p>
<p><br>
<strong>Ejemplos:</strong></p>
<p>Una manera simplificada para vincular event listeners:</p>
<pre class="eval"> document.addEventListener("click", function() false, true);
</pre>
<p>Usando esta notación con algunas de las funciones desde <a href="es/Novedades_en_JavaScript_1.6">JavaScript 1.6</a>:</p>
<pre class="eval"> elems.some(function(elem) elem.type == "text");
</pre>
<p> </p>
<h3 id="Generador_de_Expresiones" name="Generador_de_Expresiones">Generador de Expresiones</h3>
<p>Esta adición te permite simplemente crear generadores (los cuales fueron introducidos en <a href="es/Novedades_en_JavaScript_1.7">JavaScript 1.7</a>). Típicamente debería crear una función personalizada la cual podría tener un impacto sobre esta, pero esta adición le permite usar <a href="es/Novedades_en_JavaScript_1.7#Comprensi.C3.B3n_de_arrays">sintaxis de comprensión de arrays</a> para crear una declaración de generador idéntica.</p>
<p><br>
En <a href="es/Novedades_en_JavaScript_1.7">JavaScript 1.7</a>, podrías escribir algo como lo siguiente para crear un generador personalizado para un objeto:</p>
<pre class="eval"> function add3(obj) {
for ( let i in obj )
yield i + 3;
}
let it = add3(someObj);
try {
while (true) {
document.write(it.next() + "<br>\n");
}
} catch (err if err instanceof StopIteration) {
document.write("End of record.<br>\n");
}
</pre>
<p>En JavaScript 1.8, puedes eludir esto creando una función para un generador personalizado usando una expresión del generador:</p>
<pre class="eval"> let it = (i + 3 for (i in someObj));
try {
while (true) {
document.write(it.next() + "<br>\n");
}
} catch (err if err instanceof StopIteration) {
document.write("End of record.<br>\n");
}
</pre>
<p><br>
Las expresiones del generador también pueden ser pasadas, como valores, a una función. Esto es particularmente notable ya que los generadores no son ejecutados hasta que sean absolutamente necesarios (no como una situación de comprensión de arrays típica, donde los arrays son construidos antes de tiempo ). Un ejemplo de la diferencia puede verse aquí:</p>
<p><br>
Usando JavaScript 1.7 Comprensión de Arrays</p>
<pre class="eval"> handleResults([ i for ( i in obj ) if ( i > 3 ) ]);
function handleResults( results ) {
for ( let i in results )
// ...
}
</pre>
<p>Usando JavaScript 1.8 Generador de Expresiones</p>
<pre class="eval"> handleResults( i for ( i in obj ) if ( i > 3 ) );
function handleResults( results ) {
for ( let i in results )
// ...
}
</pre>
<p><br>
La diferencia entre los dos ejemplos radica en que usando el generador de expresiones, solo tendría que recorrer sobre la estructura 'obj' una sola vez, en total, en lugar de una vez en la comprensión de la matriz, y de nuevo cuando ocurran iteraciones a través de la misma.</p>
<h3 id="M.C3.A1s_extras_sobre_Arrays" name="M.C3.A1s_extras_sobre_Arrays">Más extras sobre Arrays</h3>
<p>Existen dos nuevos métodos de iteracion <code><a href="es/Referencia_de_JavaScript_1.5/Objetos_globales/Array">Array</a></code> incluidos en JavaScript 1.8, especificamente:</p>
<ul>
<li><code><a href="es/Referencia_de_JavaScript_1.5/Objetos_globales/Array/reduce">reduce()</a></code> - ejecuta una función en cada elemento en el array y colecciona los resultados de llamadas previas:</li>
<li><code><a href="es/Referencia_de_JavaScript_1.5/Objetos_globales/Array/reduceRight">reduceRight()</a></code> - ejecuta una función en cada objeto del array y colecciona los resultados de llamadas previas, pero en orden inverso.</li>
</ul>
<h3 id="Cambios_en_destructuracion_for..in" name="Cambios_en_destructuracion_for..in">Cambios en destructuracion for..in</h3>
<p><a href="es/Novedades_en_JavaScript_1.7#Iteraci.C3.B3n_sobre_objetos">Novedades en JavaScript_1.7#Iteración sobre objetos</a> ({{ Bug(366941) }}).</p>
<h3 id="Cambios_pr.C3.B3ximos" name="Cambios_pr.C3.B3ximos">Cambios próximos</h3>
<p>Los cambios que se espera que lleguen con JavaScript 1.8 incluyen:</p>
<ul>
<li>Codificación - Decodificacion en JSON.</li>
<li>Sintaxis slice</li>
<li>Destructuracion generalizada for...in</li>
</ul>
<h3 id="Tambi.C3.A9n_puedes_ver" name="Tambi.C3.A9n_puedes_ver">También puedes ver</h3>
<p><a href="es/JavaScript">Portada JavaScript</a></p>
<p> </p>
<div class="noinclude"> </div>
<p>{{ languages( { "en": "en/New_in_JavaScript_1.8", "fr": "fr/Nouveaut\u00e9s_dans_JavaScript_1.8", "ja": "ja/New_in_JavaScript_1.8", "ko": "ko/New_in_JavaScript_1.8", "pl": "pl/Nowo\u015bci_w_JavaScript_1.8", "pt": "pt/Novidades_no_Javascript_1.8" } ) }}</p>
|