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

Javascript/TypeScirpt porównanie obiektów const

Object Storage Arubacloud
0 głosów
241 wizyt
pytanie zadane 10 stycznia 2022 w JavaScript przez PramatycznyJunior Początkujący (420 p.)

Hej witajcie, chciałbym prosić o wytłumaczenie co oznacza to stwierdzenie - tzn nie rozumiem dlaczego zawsze będzie warunek logiczny "false", z kolei zmieniając zmienne "stałe" const. na let- warunek już nie bedzie wskazywał na błąd 
 

const firstName = Symbol("name");
const secondName = Symbol("name");
if (firstName === secondName) {
    // Can't ever happen
}

zmiana na poniższy kod już nie pokazuje błędu 

let firstName = Symbol("name");
const secondName = Symbol("name");
const secondName2 = secondName ;
if (firstName === secondName) {
    // Can't ever happen
}

// tu też bez błędu np 
if (secondName2 === secondName) {
    // Can't ever happen
}

rezultat "This condition will always return 'false' since the types 'typeof firstName' and 'typeof secondName' have no overlap." błąd jest oczywiście już podczas kompilacji tzn informuje mnie kompilator o tym, i tutaj zastanawiam się dlaczego to jest "false" a nie np true, skoro mamy dwie stałe zmienne jakby będące tym samym elementem, to jakby porównując ich referencje powinno zawsze być true.
Chyba że, właśnie z faktu że to obiekty i są to stałe do referencji ich referencja nigdy nie bedzie taka sama 

komentarz 10 stycznia 2022 przez VBService Ekspert (253,340 p.)

Symbols

 

Starting with ECMAScript 2015, symbol is a primitive data type, just like number and string.

 

symbol values are created by calling the Symbol constructor.

 

Symbols are immutable, and unique.

 

Because each unique symbol has a completely separate identity, no two unique symbol types are assignable or comparable to each other.

komentarz 10 stycznia 2022 przez PramatycznyJunior Początkujący (420 p.)

Because each unique symbol has a completely separate identity, no two unique symbol types are assignable or comparable to each other.

to dlaczego w momencie kiedy  zmienne nie są stałe, możliwość porównania istnieje i nie jest to błędem? To że obiekt jest immutable nie koniecznie oznacza przynajmniej w obiektowych że  jego wartości nie można zmienić a jedynie referencja jest stała 

1 odpowiedź

+3 głosów
odpowiedź 11 stycznia 2022 przez ScriptyChris Mędrzec (190,190 p.)

to dlaczego w momencie kiedy  zmienne nie są stałe, możliwość porównania istnieje i nie jest to błędem? To że obiekt jest immutable nie koniecznie oznacza przynajmniej w obiektowych że  jego wartości nie można zmienić a jedynie referencja jest stała  

// tu też bez błędu np 
if (secondName2 === secondName) {
    // Can't ever happen
}

W tym przypadku secondName2 === secondName porównywane są te same referencje, ponieważ wcześniej przypisane zostało secondName do secondName2, więc wynikiem jest true (w komentarzu, w stwierdzeniu "Can't ever happen", jest błąd). Zmiana z const na let nie ma tutaj znaczenia.

Podobne pytania

+2 głosów
3 odpowiedzi 1,238 wizyt
pytanie zadane 15 lipca 2017 w C i C++ przez Bondrusiek Maniak (61,370 p.)
0 głosów
1 odpowiedź 1,757 wizyt
pytanie zadane 2 lipca 2018 w JavaScript przez SandraS Obywatel (1,400 p.)
0 głosów
1 odpowiedź 1,418 wizyt
pytanie zadane 12 listopada 2016 w JavaScript przez ReksetoDev Gaduła (4,530 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...