De acuerdo con la documentación de MDN sobreundefined
:
En los navegadores modernos (JavaScript 1.8.5 / Firefox 4+), undefined es una propiedad no configurable, no escribible según la especificación ECMAScript 5. Incluso cuando este no sea el caso, evite anularlo.
Uno de los atributos de propiedad de undefined es que no se puede escribir.
Pero si lo hago:
var undefined = 'hello';
var test = undefined;
console.log(typeof test);
//string
¿Eso significa que puedo sobrescribir el valor de undefined
? ¿Qué pasa si alguien hace eso? ¿Debería JavaScript advertir sobre eso?
javascript
typeof
pmiranda
fuente
fuente
typeof test === "undefined"
)typeof undefined
regresa"undefined"
en circunstancias normales."undefined"
es una cadena. La pregunta no es preguntar a qué setypeof (typeof undefined)
evalúa. Se está preguntando a qué setypeof undefined
evalúa. Regresa"undefined"
, no"string"
typeof ______
es una expresión que se evalúa como una cadena que contiene el tipo de______
. Estás malinterpretando la pregunta.Respuestas:
Un comentario eliminado por Amy da la solución. Está creando una variable llamada
undefined
, y no funciona si hace sus fragmentos en el ámbito global:Pero funciona efectivamente si lo hace en un ámbito local donde indefinido ya no se refiere a la variable global:
Para evitar este error, puede usar la
'use strict';
directiva:Si está escribiendo código donde no puede controlar dónde se ejecutará (p. Ej., Biblioteca, incrustación, etc.), es un buen patrón utilizar un IIFE que lo hace para que pueda garantizar que indefinido siempre será correcto / utilizable. Aquí hay un ejemplo:
Todas mis pruebas se realizaron con Firefox 72.0b10 (64 bits) en Ubuntu, y el resultado para el primer fragmento puede diferir en un navegador anterior.
fuente
let indefinido= dataArray( (a) => (anotherArray.includes(someName)));
que estábamos verificando si esa var estaba 'indefinida' (el resultado de quefind
no se encontraron elementos) o no. Luego tradujoindefinido
aundefined
Vi que lo probé en Chrome y Edge, viendo alguna diferencia. Por eso vine aquí para pedir la opinión del resto, porque también estoy aprendiendo.void 0
Fuente https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
undefined
no está reservado, por lo tanto, es posible asignarle un nuevo valor.Cuando no está utilizando
strict mode
, básicamente está creando una variable llamadaundefined
en el ámbito local y asignándole unstring
valor.undefined
es una propiedad del objeto global . El valor inicial de indefinido es el valor primitivoundefined
.use strict
ayudará a prevenir este error en el ámbito global, mientras que aún puede sobrescribirse en el ámbito local.Si desea estar más seguro, debe usar en
void 0
lugar de loundefined
que siempre regresaundefined
.fuente
undefined
leerlo como un argumento. Como el IIFE nunca pasa ningún argumento aquí, estaránundefined
dentro de él. Por ejemplo((undefined) => console.log(typeof undefined))()