Здесь много полуправды, поэтому я решил кое-что прояснить.
На самом деле вы не можете точно определить, существует ли переменная (если вы не хотите обернуть каждую вторую строку вблок try-catch).
Причина в том, что Javascript имеет пресловутое значение undefined
, что поразительно не означает, что переменная не определена или что она не существует undefined !== not defined
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
Так что и переменная, которая существует, и другая, которая не может сообщить вам тип undefined
.
Что касается заблуждения @ Кевина, null == undefined
.Это происходит из-за приведения типов, и это главная причина, по которой Крокфорд постоянно говорит всем, кто не уверен в подобных вещах, всегда использовать оператор строгого равенства ===
для проверки возможных ложных значений.null !== undefined
дает вам то, что вы могли ожидать.Также обратите внимание, что foo != null
может быть эффективным способом проверки, является ли переменная ни undefined
, ни null
.Конечно, вы можете быть явным, потому что это может помочь читабельности.
Если вы ограничите вопрос проверкой существования объекта, typeof o == "object"
может быть хорошей идеей, за исключением случаев, когда вы не рассматриваете объекты массивов,также сообщается, что это тип object
, который может немного запутать вас.Не говоря уже о том, что typeof null
также даст вам object
, что просто неправильно.
Первичная область, где вы действительно должны быть осторожны с typeof
, undefined
, null
, unknown
и другие тайны являются объектами хозяина.Им нельзя доверять.Они свободны делать почти любую грязную вещь, которую хотят.Поэтому будьте осторожны с ними, по возможности проверяйте их функциональность, потому что это единственный безопасный способ использовать функцию, которая может даже не существовать.