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: 174582
  • Creada:
  • Creador: Unixcoder
  • ¿Es la revisión actual? No
  • Comentario Revision #7

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 incoporado en Firefox 3). Esta es una actualizacion menos sustancia que JavaScript 1.7, pero tiene algunas actualizaciones para comprobar el progreso hacia ECMAScript 4/JavaScript 2. Esta liberacion incluira todas las nuevas caracteristicas 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 JavaScript shell, componentes XPCOM de JavaScript, o elementos <script> XUL <script>, la ultima version de JS (JS1.8 en Mozilla 1.9) es usada automaticamente ({{template.Bug(381031)}}, {{template.Bug(385159)}}).

Las caracteristicas que requieren el uso de las nuevas palabras clave "yield" y "let" requiere que usted especifique la version 1.7 o mayor ya que codigo existente podria usar estas palabras clave como variables o nombres de funcion. Las caracteristicas que no introducen nuevas palabras claves ( como el generador de expresiones ) pueden ser usadas sin especificar la version de JavaScript.


Cierres de Expresion

Esta adicion es nada mas que una manera mas simplificada de escribir simples funciones, dandole al lenguaje algo similar al tipico 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' - haciendolas implicitas. No hay beneficio adicional en escribir codigo de esta manera, sino que el unico tener un codigo sintacticamente corto.


Ejemplos:

Una manera simplificada para vincular event listeners:

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

Usando esta notacion con algunas de las funciones desde JavaScript 1.6:

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

Generador de Expresiones

Esta adicion le permite simplemente crear generadores (los cuales fueron introducidos en JavaScript 1.7). Tipicamente usted deberia crear una funcion personalizada la cual podria tener un impacto sobre esta, pero esta adicion le permite usar sintaxis de array comprension como sintaxis para crear una declaracion de generador identica.


En JavaScript 1.7, usted podria 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 funcion para un generador personalizado usando una expresion 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 tambien pueden ser pasadas, como valores, a una funcion. Esto es particularmente notable ya que los generadores no son ejecutados hasta que sean absolutamente necesarios ( no como un situacion de tipica comprension de arrays, donde los arrays son construidos antes de tiempo ). Un ejemplo de la diferencia puede verse aqui:


Usando JavaScript 1.7 Comprehension 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 ejemplo radica en que usando el generador de expresiones, usted solo tendria que recorrer sobre la estructura 'obj' una sola vez, total, en lugar de una vez cuando la comprensión de la matriz, y de nuevo cuando ocurran iteraciones a través de él.

Mas Extras sobre Array

Existen dos nuevos metodos de iteracion Array incluidos en JavaScript 1.8, especificamente:

  • reduce() - ejecuta una funcion 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 llamdas previas, pero en orden inverso.

Changes in destructuring for..in

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

Proximos Cambios

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


{{ 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 incoporado en <a href="es/Firefox_3">Firefox 3</a>). Esta es una actualizacion menos sustancia que  <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 liberacion incluira todas las nuevas caracteristicas 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/Introduction_to_the_JavaScript_shell">JavaScript shell</a>, componentes XPCOM de JavaScript, o elementos <code>&lt;script&gt;</code> XUL <code>&lt;script&gt;</code>, la ultima version de JS (JS1.8 en Mozilla 1.9) es usada automaticamente ({{template.Bug(381031)}}, {{template.Bug(385159)}}).
</p><p>Las caracteristicas que requieren el uso de las nuevas palabras clave "yield" y "let" requiere que usted especifique la version 1.7 o mayor ya que codigo existente podria usar estas palabras clave como variables o nombres de funcion. Las caracteristicas que no introducen nuevas palabras claves ( como el generador de expresiones ) pueden ser usadas sin especificar la version de JavaScript.
</p><p><br>
</p>
<h3 name="Cierres_de_Expresion"> Cierres de Expresion </h3>
<p>Esta adicion es nada mas que una manera mas simplificada de escribir simples funciones, dandole al lenguaje algo similar al tipico <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' - haciendolas implicitas. No hay beneficio adicional en escribir codigo de esta manera, sino que el unico tener un codigo sintacticamente 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 notacion 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>
<h3 name="Generador_de_Expresiones"> Generador de Expresiones </h3>
<p>Esta adicion le permite simplemente crear generadores (los cuales fueron introducidos en <a href="es/Novedades_en_JavaScript_1.7">JavaScript 1.7</a>). Tipicamente usted deberia crear una funcion personalizada la cual podria tener un impacto sobre esta, pero esta adicion le permite usar sintaxis de array comprension como sintaxis para crear una declaracion de generador identica. 
</p><p><br>
En <a href="es/Novedades_en_JavaScript_1.7">JavaScript 1.7</a>, usted podria 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 funcion para un generador personalizado usando una expresion 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 tambien pueden ser pasadas, como valores, a una funcion.  Esto es particularmente notable ya que los generadores no son ejecutados hasta que sean absolutamente necesarios ( no como un situacion de tipica comprension de arrays, donde los arrays son construidos antes de tiempo ). Un ejemplo de la diferencia puede verse aqui:
</p><p><br>
Usando JavaScript 1.7 Comprehension 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 ejemplo radica en que usando el generador de expresiones, usted solo tendria que recorrer sobre la estructura 'obj' una sola vez, total, en lugar de una vez cuando la comprensión de la matriz, y de nuevo cuando ocurran iteraciones a través de él.
</p>
<h3 name="Mas_Extras_sobre_Array"> Mas Extras sobre Array </h3>
<p>Existen dos nuevos metodos 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 funcion 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 llamdas previas, pero en orden inverso.
</li></ul>
<h3 name="Changes_in_destructuring_for..in"> Changes in destructuring for..in </h3>
<p>TBD: mention <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="Proximos_Cambios"> Proximos Cambios  </h3>
<p>Los cambios que se espera que arriben con JavaScript 1.8 incluyen:
</p>
<ul><li> Codificacion - Decodificacion en JSON.
</li><li> Sintaxis slice 
</li><li> Destructuracion generalizada <code>for...in</code> ( esto significa otra cosa que  <a href="#Changes_en_destructuracion_for..in">#Changes en destructuracion for..in</a>? --<a href="User:Unixcoder">UnixCoder</a> 10:51, 16 Diciembre 2007 =
</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