ПредишенСледващото

typeof проверки на оператора, ако променливата наистина не е определено.

typeof оператор. За разлика от другите оператори не ReferenceError генерира изключение, когато се използва с една необявена променлива.

Все пак, имайте предвид, че typeof нулеви декларации "обект" на. Ние трябва да бъдем внимателни, за да се избегне грешка инициализиране на променлива присвоява. За да се подсигурите, че е нещо, което бихме могли да използваме вместо това:

@StevenPenny сега. Всичко започна много по-различно, а след това ОП редактирано от него, докато той беше почти без промяна. - ЗАД-Man 19 май '17 в 10:12

Това е доста глупаво, но. - TrojanByAccident 19 май '17 в 10:12

@SamuelLiew Те може, но в първия случай е в действителност е вярно (и законно) и е без значение на въпроса за анти - === ==. - Алнитак 19 май '17 в 10:12

Ако (! Variable_here) ; Тя не може да се определи дали дадена променлива е невярна или несигурно. - Бо 19 май '17 в 10:12

Stackoverflow - това е правилният отговор, а не икони. Освен това, никой не бива никога да се нарича променлива дефинирана. Не мога да повярвам, че тя работи. - Кори Даниелсон 19 май '17 в 10:12

ако (! variable_here) ще бъде прекъснато в много случаи. Ако променливата е равна на 0 или лъжа, той ще се провали. Това не е това, което искате. - Кори Даниелсон 19 май '17 в 10:12

Не можете да решите дали да го гласуват. Строго погледнато, typeof Foo === "неопределен" право, и по-добре, отколкото в началото гласува отговор, но допълнителни бележки само правят този отговор объркващо. - Алнитак 19 май '17 в 10:12

@Saiid неопределени могат да се предефинират. Например: неопределен = фалшива; неопределен = вярно. Отговорът - единственият сигурен начин да се уверите, че променливата не е наистина определени. - Самуел Liew 19 май '17 в 10:12

@SamuelLiew IMHO ви ще бъде по-добре просто да се премахне и двете бележки. Каква стойност се сравнява с променлива, съдържаща "неопределен". Използването === вместо == - наистина е добра практика, но си обосновка защо няма смисъл. - Алнитак 19 май '17 в 10:12

променлива === неопределени работи добре - TrojanByAccident 19 май '17 в 10:12

В повечето случаи, трябва да използвате:

За разлика от проста, ако (ELEM). тя позволява 0. невярно. NaN и ''. но отхвърля нулевата или неопределени. което я прави добър общ тест за наличие на спор или свойство на обекта прави.

Други проверки също са погрешни, те просто използват различни начини:

ако (ELEM). Тя може да се използва, ако обектът е ELEM гарантирано, или ако лъжа. 0 и Т. D. Счита подразбиране (следователно еквивалент неопределен или нула).

typeof ELEM == 'недефинирана "може да се използва в случаите, когато споменатата нула има определена стойност или на неинициализирани променливи свойства.

  • Това е единствената проверка, която няма да доведе до грешка, ако ELEM не е обявено (т.е. Var. И не прозореца на собственост. Или не аргументът на функцията). Това, по мое мнение, е доста опасно, тъй като ви позволява да се промъкнат незабелязано печатни грешки. За да избегнете това, вижте. Методът по-долу.

Също така е полезно да се сравни със строго дефинирана.

Въпреки това, тъй като глобалната недефинирани може да се замени с друга стойност, по-добре е да се декларира променлива неопределени в цялата област преди да го използвате:

Второто предимство на този метод се състои в това, че JS мини-филтри могат да намалят недефинирана променлива един знак, като същевременно се спестяват няколко байта всеки път.

Отговорено Дейвид Танг 19 май '17 в 10:12

Поради това предимство пред проблема, винаги трябва да се използва за невалидни (0), вместо на дефинирана. - Барт Залевски 19 май '17 в 10:12

Тя хвърля изключение, и изисква да използвате прозорец. преди променливата ако то се използва в глобален контекст. това не е най-добрият начин. - Alex W 19 май '17 в 10:12

Трябва да се приеме отговор. Сравнение с неопределена и с помощта typeof в повечето случаи или не се изисква или сгрешил. Програмиране - надеждност, лесна за четене, лесни за поддържане. Не е за фантазия. - jose.angel.jimenez 19 май '17 в 10:12

Как да проверите дали съществува променлива

Това е доста бронирани разтвор за изпитване, ако съществува променлива и е инициализирана:

Това най-често се използва в комбинация с тройния оператор, за да настроите стойностите по подразбиране Ако променливата не е била инициализирана:

Проблеми с капсулиране

За съжаление, не може просто да се оформят такива чекове функция.

Можете да мисля за това как да се направи нещо като това:

Въпреки това, ако се обаждате, например, това ще доведе до линкове за грешки. Isset (Foo) и променливата на Mt. не е определена, тъй като не може да премине към несъществуващ променлива функция:

Неподготвен ReferenceError: Foo не е определена

Тестване на несигурни функционални параметри

Въпреки, че нашата функция Isset не може да се използва за проверка на наличието или отсъствието на една променлива (от съображения за описаните по-горе), тя ни позволява да се провери дали са определени параметрите на функцията:

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

Един алтернативен набор от отговорите е да се използва typeof hasOwnProperty (). което, разбира се, да провери дали даден обект е (почти всички в JS) т.е. променливи свойства (наред с други неща).

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

Всеки обект е получен от обекта наследява метод hasOwnProperty (). Този метод може да се използва за да се определи дали предметът има определен терен с директна собственост на обекта; За разлика от оператора. Този метод не проверява прототип верига на обекта.

Забележителното в hasOwnProperty (). Факт е, че когато го наричат, ние не използваме променлива, която все още не е определена, което, разбира се, половината от проблема.

Въпреки че решението не винаги е добра или идеална. при определени обстоятелства това е просто работа!

Голям подобрение, прост бързо да се разбере, благодаря ти! - CPHPython 19 май '17 в 10:13

@CPHPython Редактирано от; Добър? - Фред Gandt 19 май '17 в 10:13

Удоволствието от работата с вас ;-) - Фред Gandt 19 май '17 в 10:13

Това е фантастична алтернатива и трябва да бъде в горната част на upvoted този въпрос. Моля опрости глава работен пример отговор, който се връща вярно (например, window.hasOwnProperty ( "конзола") или Var хоп = "р"; window.hasOwnProperty ( "хмел")). - CPHPython 19 май '17 в 10:13

Не е необходимо да се дефинира функция за обяснение, хората веднага ще го признаят, но Краткият отговор е да се чете по-бързо. Ако все пак искате да оставите фрагмент, просто го оставете на два реда, като първата и втората определя VAR - резултатите за печат. - CPHPython 19 май '17 в 10:13

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

Отговорено Jith 19 май '17 в 10:12

Би било полезно да се покаже на вградения терминал на всеки предупреждение. - demisx 19 май '17 в 10:12

@demisx Договорена, а да предлагат редактиране, защо просто не го направи? Опцията е налице поради някаква причина. Някои може да помисли за това грубо; Мисля, че това е много ефективен - така че той е променил (в процес на одобрение) отговор. - Фред Gandt 19 май '17 в 10:12

Подкрепете проекта - споделете линка, благодаря!