Novedades en JavaScript 1.8

  • Enlace amigable (slug) de la revisión: Novedades_en_JavaScript_1.8
  • Título de la revisión: Novedades en JavaScript 1.8
  • Id de la revisión: 174585
  • Creada:
  • Creador: Unixcoder
  • ¿Es la revisión actual? No
  • Comentario Limpieza Final Beta # 3 - Correciones ortograficas, acentos, etc.

Contenido de la revisión

{{wiki.template('Traducción', [ "inglés", "New_in JavaScript 1.8", "en" ])}}

{{template.Fx_minversion_header(3)}} JavaScript 1.8 esta planificado para integrarse como parte de Gecko 1.9 (el cual sera incorporado en Firefox 3 para desarrolladores). Esta es una actualización menos sustancial que la descrita en JavaScript 1.7, pero tiene algunas actualizaciones para comprobar el progreso hacia ECMAScript 4/JavaScript 2. Esta liberación incluirá todas las nuevas características especificadas en JavaScript 1.6 y JavaScript 1.7.

Vea {{template.Bug(380236)}} para estar al dia del progreso de desarrollo de JavaScript 1.8.

Usando JavaScript 1.8

Para poder usar algunas de las nuevas caracteristicas de JavaScript 1.8 en el HTML, usar:

 <script type="application/javascript;version=1.8"> ... su codigo aqui ... </script>

Cuando use la Shell de JavaScript, componentes XPCOM de JavaScript, o elementos <script> XUL <script>, la ultima versión de JS (JS1.8 en Mozilla 1.9) es usada automáticamente, vea ({{template.Bug(381031)}}, {{template.Bug(385159)}}).

Las características que requieren el uso de las nuevas palabras clave "yield" y "let" requiere que usted especifique la versión 1.7 o mayor ya que 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.


Cierres de Expresión

Esta adición es simplemente una manera mas simplificada de escribir simples funciones, dándole al lenguaje algo similar al típico Lambda notation.

JavaScript 1.7 y versiones anteriores:

 function(x) { return x * x; }

JavaScript 1.8:

 function(x) x * x

Esta sintaxis le 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.


Ejemplos:

Una manera simplificada para vincular event listeners:

 document.addEventListener("click", function() false, true);

Usando esta notación con algunas de las funciones desde JavaScript 1.6:

 elems.some(function(elem) elem.type == "text");


Generador de Expresiones

Esta adición le permite simplemente crear generadores (los cuales fueron introducidos en JavaScript 1.7). Tipicamente usted debería crear una función personalizada la cual podría tener un impacto sobre esta, pero esta adición le permite usar sintaxis de comprensión de arrays para crear una declaración de generador idéntica.


En JavaScript 1.7, usted podría escribir algo como lo siguiente para crear un generador personalizado para un objeto:

 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");
 }

En JavaScript 1.8, usted puede eludir esto creando una función para un generador personalizado usando una expresión del generador:

 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");
 }


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 típica de comprensión de arrays, donde los arrays son construidos antes de tiempo ). Un ejemplo de la diferencia puede verse aquí:


Usando JavaScript 1.7 Comprensión de Arrays

 handleResults([ i for ( i in obj ) if ( i > 3 ) ]);
 
 function handleResults( results ) {
   for ( let i in results )
     // ...
 }

Usando JavaScript 1.8 Generador de Expresiones

 handleResults( i for ( i in obj ) if ( i > 3 ) );
 
 function handleResults( results ) {
   for ( let i in results )
     // ...
 }


La diferencia entre los dos ejemplos radica en que usando el generador de expresiones, usted 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.

Mas Extras sobre Arrays

Existen dos nuevos métodos de iteracion Array incluidos en JavaScript 1.8, especificamente:

  • reduce() - ejecuta una función en cada elemento en el array y colecciona los resultados de llamadas previas:
  • reduceRight() - ejecuta una funcion en cada objeto del array y colecciona los resultados de llamadas previas, pero en orden inverso.

Cambios en destructuracion for..in

Novedades en JavaScript_1.7#Iteración sobre objetos ({{template.Bug(366941)}}).

Próximos Cambios

Los cambios que se espera que arriben con JavaScript 1.8 incluyen:

  • Codificación - Decodificacion en JSON.
  • Sintaxis slice


{{ wiki.languages( { "fr": "fr/Nouveaut\u00e9s_dans_JavaScript_1.8", "pl": "pl/Nowo\u015bci_w_JavaScript_1.8", "ja": "ja/New_in_JavaScript_1.8", "pt": "pt/Novidades_no_Javascript_1.8", "en": "en/New_in_JavaScript_1.8" } ) }}

Fuente de la revisión

<p>{{wiki.template('Traducción', [ "inglés", "New_in JavaScript 1.8", "en" ])}}
</p><p>{{template.Fx_minversion_header(3)}}
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 para desarrolladores</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 liberació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>Vea {{template.Bug(380236)}} para estar al dia del progreso de desarrollo de JavaScript 1.8.
</p>
<h3 name="Usando_JavaScript_1.8"> Usando JavaScript 1.8 </h3>
<p>Para poder usar algunas de las nuevas caracteristicas de JavaScript 1.8 en el HTML, usar:
</p>
<pre class="eval"> &lt;script type="application/javascript;version=1.8"&gt; ... su codigo aqui ... &lt;/script&gt;
</pre>
<p>Cuando use la <a href="es/Introducci%c3%b3n_al_shell_de_JavaScript">Shell de JavaScript</a>, componentes XPCOM de JavaScript, o elementos <code>&lt;script&gt;</code> XUL <code>&lt;script&gt;</code>, la ultima versión de JS (JS1.8 en Mozilla 1.9) es usada automáticamente, vea ({{template.Bug(381031)}}, {{template.Bug(385159)}}).
</p><p>Las características que requieren el uso de las nuevas palabras clave "yield" y "let" requiere que usted especifique la versión 1.7 o mayor ya que 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><br>
</p>
<h3 name="Cierres_de_Expresi.C3.B3n"> Cierres de Expresión </h3>
<p>Esta adición es simplemente una manera mas simplificada de escribir simples funciones, dándole al lenguaje algo similar al típico <a class="external" href="http://en.wikipedia.org/wiki/Lambda_calculus#Lambda_calculus_and_programming_languages">Lambda notation</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 le 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>
<b>Ejemplos:</b>
</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><br>
</p>
<h3 name="Generador_de_Expresiones"> Generador de Expresiones </h3>
<p>Esta adición le permite simplemente crear generadores (los cuales fueron introducidos en <a href="es/Novedades_en_JavaScript_1.7">JavaScript 1.7</a>). Tipicamente usted 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>, usted podría 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() + "&lt;br&gt;\n");
   }
 } catch (err if err instanceof StopIteration) {
   document.write("End of record.&lt;br&gt;\n");
 }
</pre>
<p>En JavaScript 1.8, usted puede 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() + "&lt;br&gt;\n");
   }
 } catch (err if err instanceof StopIteration) {
   document.write("End of record.&lt;br&gt;\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 típica de comprensión de arrays, 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 &gt; 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 &gt; 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, usted 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 name="Mas_Extras_sobre_Arrays"> Mas Extras sobre Arrays </h3>
<p>Existen dos nuevos métodos de iteracion <code><a href="es/Core_JavaScript_1.5_Reference/Objects/Array">Array</a></code> incluidos en JavaScript 1.8, especificamente:
</p>
<ul><li> <code><a href="es/Core_JavaScript_1.5_Reference/Objects/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/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight">reduceRight()</a></code> - ejecuta una funcion en cada objeto del array y colecciona los resultados de llamadas previas, pero en orden inverso.
</li></ul>
<h3 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> ({{template.Bug(366941)}}).
</p>
<h3 name="Pr.C3.B3ximos_Cambios"> Próximos Cambios  </h3>
<p>Los cambios que se espera que arriben con JavaScript 1.8 incluyen:
</p>
<ul><li> Codificación - Decodificacion en JSON.
</li><li> Sintaxis slice 
</li></ul>
<p><br>
</p>
<div class="noinclude">
</div>
<div class="noinclude">
</div>
{{ wiki.languages( { "fr": "fr/Nouveaut\u00e9s_dans_JavaScript_1.8", "pl": "pl/Nowo\u015bci_w_JavaScript_1.8", "ja": "ja/New_in_JavaScript_1.8", "pt": "pt/Novidades_no_Javascript_1.8", "en": "en/New_in_JavaScript_1.8" } ) }}
Revertir a esta revisión