objeto eliminar elemento javascript strict

eliminar elemento de un objeto javascript



¿Permitiría esto "uso estricto" a nivel mundial? (3)

No, las etiquetas de script se consideran programs y son code units . "use strict" no debe transferirse de una etiqueta de script a otra.

Cada etiqueta de script se interpreta individualmente y en realidad tiene su propio alcance. Este alcance no es notable, ya que todo lo que se declara globalmente terminará en el objeto global, pero aún así está ahí. La cadena "use strict" se recolectará como basura al final de la etiqueta program / script ya que no tiene puntero / referencia.

Similar, pero no es lo mismo que, ¿Cómo habilitar ECMAScript "uso estricto" globalmente?

He comprado patrones de JavaScript y se recomienda habilitar el uso estricto. Agregarlo a las dos docenas de archivos javascript sería una tarea un tanto complicada, por lo que habilitarlo globalmente sería bueno. Originalmente pensé en agregar a la parte superior de mi main.js así:

"use strict" require({ priority: ["jquery", "raphael", "myapp"] });

Sin embargo, entonces pensé que tal vez solo lo habilitaría para ese archivo. Entonces pensé en esto:

<script data-main="lib/main" src="lib/require.js">"use strict"</script>

¿Alguno de estos habilitaría el modo estricto ECMAScript 5 globalmente?



TL; DR :

No, un "use strict" en un elemento de script no impone "use strict" en el código de otros elementos de script . Se aplica solo al texto fuente del que forma parte.

(Por separado, vuelva a la etiqueta de script al final de la pregunta: si un elemento de script tiene un src , cualquier texto en línea que se haya considerado se considera "documentación" y se ignora).

Actualización :

Ahora está más claro en la especificación (tal vez estaba claro en ES5, pero no para mí) que sí, los elementos de script separados son independientes para los fines de "use strict" . La cita a continuación en la respuesta original se ha cambiado ligeramente para decir "texto de origen" en lugar de "unidad de código", y la sección de Scripts y módulos se detalla con más detalle.

Respuesta original :

La especificación dice:

Debido a que el modo estricto se selecciona a nivel de una unidad de código sintáctico, el modo estricto solo impone restricciones que tienen efecto local dentro de dicha unidad de código. El modo estricto no restringe ni modifica ningún aspecto de la semántica de ECMAScript que debe funcionar de manera consistente en múltiples unidades de código.

(Sección 4.2.2)

Entonces la pregunta es: ¿Son diferentes etiquetas de script diferentes unidades de código sintáctico?

V8 (el motor de JavaScript dentro de Chrome) parece creer que están separados y, por lo tanto, ponen un solo "use strict"; en el alcance global en la parte superior de su página no funcionaría. Tal vez esté especificado en algún lugar que no haya encontrado todavía, pero en cualquier caso, es una interpretación razonable.

Suponiendo que no se muestre ninguna declaración de foo , este código es presa de The Horror of Implicit Globals en modo normal:

function test() { try { foo = "bar"; display("foo = " + foo); } catch (e) { display("Exception: " + e); } }

En el modo normal, eso crea una nueva variable global foo con el valor "barra" y muestra el mensaje "foo = bar" . En modo estricto, se lanza una excepción porque foo no está definido.

Si pongo esta etiqueta de script en una página:

<script> "use strict"; function test() { try { foo = "bar"; display("foo = " + foo); } catch (e) { display("Exception: " + e); } } </script>

... Tengo la excepción como se esperaba ( ejemplo en vivo ). Si los pongo en etiquetas de script separadas, sin embargo:

<script> "use strict"; </script> <script> function test() { try { foo = "bar"; display("foo = " + foo); } catch (e) { display("Exception: " + e); } } </script>

No obtengo la excepción (en V8) ( example ). Y eso es razonable si piensas en cómo interactúan el navegador y el motor de JavaScript.

Y de manera similar, si la función está desactivada en otro archivo y hago esto:

<script> "use strict"; </script> <script src="/inatoq"></script>

No obtengo la excepción ( example ), probablemente por la misma razón.

Tenga en cuenta que su etiqueta de ejemplo aquí:

<script data-main="lib/main" src="lib/require.js">"use strict"</script>

no es válido. Una etiqueta de script puede tener un atributo o contenido src , pero no ambos. (Bueno, básicamente; detalles here [HTML5] y here [HTML 4.01].) Si tiene un elemento src , se supone que el navegador ignora el contenido, y la mayoría lo hace. Más. :-)