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 undefinedregresa"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 undefinedevalú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 quefindno se encontraron elementos) o no. Luego tradujoindefinidoaundefinedVi 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 0Fuente https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
undefinedno está reservado, por lo tanto, es posible asignarle un nuevo valor.Cuando no está utilizando
strict mode, básicamente está creando una variable llamadaundefineden el ámbito local y asignándole unstringvalor.undefinedes una propiedad del objeto global . El valor inicial de indefinido es el valor primitivoundefined.use strictayudará 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 0lugar de loundefinedque siempre regresaundefined.fuente
undefinedleerlo como un argumento. Como el IIFE nunca pasa ningún argumento aquí, estaránundefineddentro de él. Por ejemplo((undefined) => console.log(typeof undefined))()