Zgodnie z dokumentacją MDN na tematundefined
:
We współczesnych przeglądarkach (JavaScript 1.8.5 / Firefox 4+) undefined jest niemożliwą do skonfigurowania, niemożliwą do zapisu właściwością zgodnie ze specyfikacją ECMAScript 5. Nawet jeśli tak nie jest, unikaj przesłonięcia.
Jednym z atrybutów niezdefiniowanych jest to, że nie można zapisywać.
Ale jeśli to zrobię:
var undefined = 'hello';
var test = undefined;
console.log(typeof test);
//string
Czy to oznacza, że mogę zastąpić wartość undefined
? Co się stanie, jeśli ktoś to zrobi? Czy JavaScript powinien o tym ostrzegać?
javascript
typeof
pmiranda
źródło
źródło
typeof test === "undefined"
)typeof undefined
powraca"undefined"
w normalnych okolicznościach."undefined"
jest ciąg. Pytanie nie dotyczy tego, cotypeof (typeof undefined)
ocenia. Pytanie o to, cotypeof undefined
ocenia. Zwraca"undefined"
, a nie"string"
typeof ______
to wyrażenie, którego wynikiem jest łańcuch zawierający typ______
. Nie rozumiesz pytania.Odpowiedzi:
Usunięty komentarz Amy daje rozwiązanie. Tworzysz zmienną o nazwie
undefined
i nie działa ona, jeśli wykonasz fragmenty w zakresie globalnym:Ale działa skutecznie, jeśli robisz to w zasięgu lokalnym, w którym niezdefiniowane nie odnosi się już do zmiennej globalnej:
Aby uniknąć tego błędu, możesz użyć
'use strict';
dyrektywy:Jeśli piszesz kod, w którym nie możesz kontrolować, gdzie będzie on wykonywany (np. Biblioteka, osadzanie itp.), Dobrym pomysłem jest użycie IIFE, który sprawia, że możesz zagwarantować, że niezdefiniowane zawsze będzie poprawne / użyteczne. Oto przykład:
Wszystkie moje testy zostały wykonane przy użyciu przeglądarki Firefox 72.0b10 (64 bity) na Ubuntu, a wynik pierwszego fragmentu może się różnić w starszej przeglądarce.
źródło
let indefinido= dataArray( (a) => (anotherArray.includes(someName)));
sprawdzaliśmy, czy ta zmienna była „niezdefiniowana” (wynikfind
bez znalezienia elementów), czy nie. Potem przełożyćindefinido
doundefined
Widziałam, że ja go przetestować na Chrome i Edge, widząc jakąś różnicę. Właśnie dlatego przyjechałem tutaj, aby zapytać o opinię pozostałych, ponieważ też się uczę.void 0
Źródło https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
undefined
nie jest zarezerwowany, dlatego możliwe jest przypisanie mu nowej wartości.Kiedy nie używasz
strict mode
, zasadniczo tworzysz zmienną o nazwieundefined
w zasięgu lokalnym i przypisujesz jejstring
wartość.undefined
jest własnością obiektu globalnego . Wartość początkowa niezdefiniowana jest wartością pierwotnąundefined
.use strict
pomoże uniknąć tego błędu w zakresie globalnym, podczas gdy nadal można go zastąpić w zakresie lokalnym.Jeśli chcesz być bardziej bezpieczny, powinieneś użyć
void 0
zamiast tegoundefined
zawsze zwracaundefined
.źródło
undefined
, czytając go jako argument. Ponieważ IIFE nigdy nie przekazuje żadnych argumentów, będą oneundefined
w nim zawarte. Np.((undefined) => console.log(typeof undefined))()