Когато пишем JavaScript / TypeScript кодове, ние използваме удивителен знак със знаци за равенство (!= или !==) в условни изрази, за да определим дали две стойности не са равни една на друга. Освен това има няколко приложения за него. В тази статия ще обясня другите му приложения в JavaScript и TypeScript кодове.

Можем да го обсъдим в 3 теми.

  • НЕ оператор
  • Двойно НЕ оператор
  • Ненулев оператор за твърдение

1) Оператор НЕ (удивителен знак отпред)

В JavaScript използваме оператора NOT, за да инвертираме стойността на булева стойност. Ако стойността на булевото е true, операторът NOT връща false. Ако стойността на булевото е false, операторът NOT връща true. Булевата стойност може да бъде стойност, върната от булева променлива, булев израз или сложно условие.

Въпреки че обикновено използваме това с булеви стойности, ако използваме това с различна от булева стойност, тя първо се преобразува в булева стойност и след това се отрича.

Следната таблица на истината показва изхода на оператора NOT за различни типове стойности.

2) Двоен оператор НЕ (двоен удивителен знак отпред)

Тук всъщност това, което се случва, е, че обръщаме булева стойност два пъти. Има повече смисъл, когато се използва с небулеви типове, тъй като обръщането на булева стойност два пъти дава резултат от оригиналната булева стойност, така че няма смисъл, но когато се използва с небулева стойност, първо се преобразува в булева и след това получава обърнат два пъти, така че в крайна сметка можем да получим съответната булева стойност на тази стойност от небулев тип.

В горния раздел за оператор NOT споменах, че ако използваме небулева стойност с оператор NOT, тя първо се преобразува в булева стойност и след това се обръща. В оператора double Not небулевата стойност се преобразува в булева и след това се обръща и отново се обръща. И така, това, което се случва в двойния оператор NOT, е подобно на прилагането на оператор NOT два пъти.

Това е полезно за изрично преобразуване на небулева стойност (или израз) в съответната булева стойност.

Следната таблица на истината показва изхода на оператора NOT и оператора двойно NOT за различни типове стойности.

3)Ненулевоператор за твърдение (удивителен знак след променлива/израз)

В нашия код на TypeScript може да има места, където компилаторът на TypeScript се оплаква от нулеви или недефинирани стойности, въпреки че знаем, че те не могат да бъдат нулеви или недефинирани. С оператора за твърдение Non-Null можем изрично да кажем на компилатора, че дадена стойност/израз има стойност, различна от null или undefined.

Моля, обърнете внимание, че компилаторът на TypeScript проверява за присвояване на недефинирани и нулеви типове само ако флагът „strictNullChecks“ е включен. Така че този оператор е полезен само когато този флаг е включен.

Нека обсъдим някои примери, за да разберем по-добре как можем да използваме този оператор.

Пример 1: Обработчици на събития с React refs

В React ние използваме React refs за достъп до изобразени HTML DOM възли или React елементи. Refs могат да бъдат създадени с помощта на React.createRef‹HTMLDivElement›() и прикачени към елемента с помощта на атрибута ref. Когато използваме React refs, трябва да имаме достъп до текущия атрибут (ref.current). Ако посоченият елемент е демонтиран, стойността ref.current може да е нулева.

В следващия пример, когато щракнем върху бутона, входен елемент ще бъде превъртен в изгледа.

В горния пример компилаторът на TypeScript показва следната грешка, тъй като стойността ref.current може да бъде нула, докато елементът не бъде изобразен.

Тъй като можем да приемем, че входният елемент вече е изобразен по времето, когато събитието onClick на бутона е задействано, можем да използваме оператора за твърдение Non-Null тук, за да кажем на компилатора на TypeScript, че стойността на ref.current value не може да бъде нула.

Пример 2: Извършване на търсене на масив

Да приемем, че имаме масив от обекти Student и искаме да търсим студент с конкретен идентификатор на студент.

Когато пишете горния код, можете да видите, че TypeScript дава следната грешка.

Това е така, защото методът „find“ може да върне недефинирано, ако не може да намери обекта ученик с дадения идентификатор на ученик. Но в този сценарий знаем, че конкретен обект ученик съществува, но компилаторът на TypeScript не го знае и показва тази грешка. В ситуация като тази можем да използваме оператора за твърдение Non-Null, за да се справим с тази грешка.

Като използваме оператора за твърдение Non-Null, можем да се отървем от грешката на TypeScript, но имайте предвид, че това не променя поведението на кода по време на изпълнение. Въпреки че използвахме оператора за твърдение Non-Null, ако стойността действително се окаже нулева или недефинирана, ще бъде хвърлена грешка и това ще наруши изпълнението. Така че разработчиците не трябва да използват това сляпо, за да игнорират грешката при компилиране.

Този оператор за твърдение Non-Null е полезен само с TypeScript, тъй като JavaScript няма строгост на типа.

В рамките на тази статия се опитах да обясня накратко различните употреби на удивителни знаци в кодовете на JavaScript / TypeScript. Надявам се тази статия да ви е полезна. Благодаря за четенето!