De acordo com a documentação da MDN sobreundefined
:
Nos navegadores modernos (JavaScript 1.8.5 / Firefox 4+), undefined é uma propriedade não configurável e não gravável de acordo com a especificação do ECMAScript 5. Mesmo quando não for esse o caso, evite substituí-lo.
Um dos atributos de propriedade de indefinido é que não é gravável.
Mas se eu fizer:
var undefined = 'hello';
var test = undefined;
console.log(typeof test);
//string
Isso significa que eu posso substituir o valor de undefined
? O que acontece se alguém faz isso? O JavaScript deve alertar sobre isso?
javascript
typeof
pmiranda
fonte
fonte
typeof test === "undefined"
)typeof undefined
retorna"undefined"
em circunstâncias normais."undefined"
é uma string. A questão não é perguntar o que étypeof (typeof undefined)
avaliado. Está perguntando o quetypeof undefined
avalia. Ele retorna"undefined"
, não"string"
typeof ______
é uma expressão que é avaliada como uma sequência que contém o tipo de______
. Você está entendendo mal a pergunta.Respostas:
Um comentário removido por Amy fornece a solução. Você está criando uma variável denominada
undefined
e ela não funcionará se você fizer seus snippets no escopo global:Mas funciona efetivamente se você fizer isso em um escopo local em que indefinido não se refira mais à variável global:
Para evitar esse erro, você pode usar a
'use strict';
diretiva:Se você está escrevendo um código em que não pode controlar onde ele será executado (por exemplo, biblioteca, incorporação, etc.), é um bom padrão usar um IIFE que faça com que seja possível garantir que indefinidos sempre sejam corretos / utilizáveis. Aqui está um exemplo:
Todos os meus testes foram feitos usando o Firefox 72.0b10 (64 bits) no Ubuntu, e o resultado do primeiro trecho pode ser diferente em um navegador mais antigo.
fonte
let indefinido= dataArray( (a) => (anotherArray.includes(someName)));
estávamos verificando se esse var estava 'indefinido' (o resultado defind
nenhum elemento encontrado) ou não. Então ele traduziuindefinido
paraundefined
eu vi que eu testei no Chrome e Edge, vendo alguma diferença. Por isso vim aqui pedir a opinião do resto, porque também estou aprendendo.void 0
Fonte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
undefined
não é reservado, portanto, é possível atribuir um novo valor a ele.Quando você não está usando,
strict mode
está essencialmente criando uma variável chamadaundefined
no escopo local e atribuindo umstring
valor a ela.undefined
é uma propriedade do objeto global . O valor inicial de indefinido é o valor primitivoundefined
.use strict
ajudará a evitar esse erro no escopo global enquanto ele ainda pode ser substituído no escopo local.Se você quer ser mais seguro, use em
void 0
vez doundefined
que sempre retornaundefined
.fonte
undefined
lê-lo como argumento. Como o IIFE nunca passou por nenhum argumento aqui, ele estaráundefined
dentro dele. Por exemplo((undefined) => console.log(typeof undefined))()