• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

var undefined

Object Storage Arubacloud
0 głosów
232 wizyt
pytanie zadane 10 marca 2018 w JavaScript przez gnx Dyskutant (7,720 p.)

Siemanko!

Eksprerymentuję dziś nieco z undefined. Da się przypisać do window.undefined inną wartość, ale po chwili zdaje się ona być nadpisana.

console.log(window.undefined = 'string') // 'string'
console.log(window.undefined) // undefined

Czy ktoś mógłby wyjaśnić mi, jak to się dzieje?

2 odpowiedzi

+5 głosów
odpowiedź 10 marca 2018 przez Tomek Sochacki Ekspert (227,510 p.)
wybrane 10 marca 2018 przez gnx
 
Najlepsza

Odpowiedź:

Object.getOwnPropertyDescriptor(window, undefined);

// {value: undefined, writable: false, enumerable: false, configurable: false}

wszystkie deskryptory są ustawione na false, co oznacza, że nie da się nadpisać tej właściwości.

komentarz 10 marca 2018 przez gnx Dyskutant (7,720 p.)
Wielkie dzięki!
2
komentarz 10 marca 2018 przez Tomek Sochacki Ekspert (227,510 p.)

Nie ma za co :)

Tego typu właściwości możesz też tworzyć w "normalnych" obiektach, np:

const myObj = {};

Object.defineProperty(myObj, 'name', {
  value: 'Tomek',
  writable: false
});

myObj.name;  //"Tomek"
myObj.name = 'Adam';

myObj.name; //"Tomek", zignorowano 'Adam'

 

5
komentarz 10 marca 2018 przez niezalogowany

Można dodać, że w strict mode taka próba napisania rzuci błędem.

0 głosów
odpowiedź 11 marca 2018 przez gnx Dyskutant (7,720 p.)

To jeszcze pociągnę trochę temat.

Czy można użyć stwierdzenia, że jest zarówno typ undefined jak i wartość undefined?

const foo;
console.log(foo);

foo jest typu undefined i ma wartość undefined?

komentarz 11 marca 2018 przez Tomek Sochacki Ekspert (227,510 p.)

Nie myśl w ten sposób bo zapędzisz się i pogubisz :)

Generalnie ja proponuję o zmiennych w JS myśleć w taki sposób, że nie tyle mają one jakiś typ, lecz ich wartość jest określonego typu. W tym myśleniu nie ma więc zmiennej x typu string, tylko jest zmienna x, której wartość jest typu string. Według mnie takie podejście lepiej pozwala zrozumieć zmienność typów w JS, to znaczy fakt, że zmienna x może zawierać wartość innego typu, co może lepiej widać na kodzie:

let str = 'Tomek'

typeof str; //"string"

str = 5;    //5
typeof str; //"number"

str = ['Tomek']; //["Tomek"]
typeof str;      //"object"
Object.getPrototypeOf(str) === Array.prototype; //true

W tym wypadku zwróć też uwagę, że dokonuję deklaracji poprzez LET, a nie const, gdyż w przypadku const zmiana typu wartości byłaby niemożliwa.

Tak więc reasumując ja proponuję patrzeć na JS w ten sposób, że jest tu słabe typowanie nie tyle samych zmiennych lecz słabe typowanie wartości zmiennych.

Zobacz też na ostatni przykład. Taka ciekawostka - w JS tablice nie są oddzielnym typem wartości, lecz są obiektami z tzw. prototypem Array.prototype. Pamiętaj o tym, aby nie robić nigdy np. porównania 

const arr = [];

if(arr) {
    //kod, który wykona się zawsze!
}

aby to rozkminić poczytaj sobie o konwersji typów w JS do wartości boolean.

O typach w JS pisałem też kiedyś na moim blogu jeśli byłbyś zainteresowany tą tematyką (PODSTAWOWE TYPY ZMIENNYCH W JS).

komentarz 11 marca 2018 przez gnx Dyskutant (7,720 p.)

Dzięki :D w sumie słuszna uwaga, by patrzeć na to przez pryzmat typu wartości zmiennej.

Co arraya, to wspominałem ostatnio w swoim artykule o jeszcze jednym ciekawym błędzie u początkujących.

if(typeof someVariable === 'object'){
  console.log('It is an object!);
} else if (someVariable instanceof Array){
  console.log('This block of code will never run because of the else statement!');
}

Warto o tym pamiętać. Pozdrawiam :)

Podobne pytania

0 głosów
1 odpowiedź 193 wizyt
pytanie zadane 15 stycznia 2019 w JavaScript przez PROFF Obywatel (1,180 p.)
+1 głos
1 odpowiedź 418 wizyt
pytanie zadane 13 listopada 2021 w C# przez DeniS1 Początkujący (410 p.)
0 głosów
2 odpowiedzi 1,242 wizyt
pytanie zadane 30 stycznia 2019 w C# przez TheFunny Gaduła (3,420 p.)

92,572 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...