2015-02-18 2 views
6

У меня были некоторые проблемы в моих условиях относительно неопределенных переменных. Что, если суммировать это, лучший способ проверить, не указана ли переменная?Лучшая практика проверки, если переменная не определена

я был в основном борется с

x === undefined 

и

typeof x === 'undefined' 
+2

возможно дубликат [Обнаружение неопределенного свойства объекта] (http://stackoverflow.com/questions/27509/detecting-an-undefined-object-property) – Anatoli

ответ

9

Вы можете использовать оба способа, чтобы проверить, соответствует ли значение undefined. Тем не менее, есть немного нюансов, о которых вам нужно знать.

Первый подход использует строгое сравнение === оператора для сравнения с undefinedtype:

var x; 
// ... 

x === undefined; // true 

Это будет работать, как ожидалось только если переменная объявлена, но не определено, то есть undefined значение, это означает, что вы есть var x где-то в вашем коде, но ему никогда не присваивалось значение. Так что по определению это undefined.

Но если переменная не объявлено с var ключевым словом выше кода будет бросать ссылочную ошибку:

x === undefined // ReferenceError: x is not defined 

В подобных ситуациях typeof сравнения является более надежным:

typeof x == 'undefined' // true 

, который будет работать правильно в обоих случаях: если переменной никогда не присваивалось значение, и если ее значение действительно undefined.

1
x === undefined 

не работает, если переменная не объявлена. Это возвращает true, только если переменная объявлена, но не определена.

Лучше использовать

typeof x === 'undefined'

+2

Обе работают на самом деле, открывают консоль и проверяют. – dfsq

+0

@dfsq На самом деле я это сделал, он не работал на консоли хром. Я что-то упустил? –

+1

Есть небольшой момент. Проверьте мой ответ. В вашем случае это не сработало, потому что переменная 'x' не определена. Если он был определен как 'var x', вы можете проверить, является ли он' undefined' с '=== undefined'. – dfsq

0

Вы можете использовать любой из них. Если вы хотели бы проверить, если переменная не определена, либо нулевое значение, вы можете использовать:

x == null 

Это приводит верно, если х не определен или нуль.

0

Я думаю, оба, в зависимости от того, что вы тестируете? Если это свойство, я всегда буду использовать x === undefined, так как он яснее (и, похоже, быстрее).

Как и другие, x === undefined не будет работать, если x не объявлен. Лично я считаю, что это еще лучшая причина для его использования, поскольку обычно я не должен проверять, объявлена ​​ли вообще переменная - это обычно является признаком ошибки кодирования.

Я видел много другой версии для тестирования аргументов - f = function(x) {if (typeof x == 'undefined') …} - если я код кода, как это, я скажу им, чтобы изменить его.Мы знаем, что переменная объявлена, и привычка писать ее таким образом увеличивает вероятность того, что вы будете тратить время на то, чтобы преследовать ошибки опечатки.

Основное исключение - когда вы пытаетесь проверить, правильно ли загружен или инициализирован компонент или библиотека. if (typeof jQuery == 'undefined') … имеет смысл. Но в среднесрочной перспективе все это должно стать модулем в любом случае, и в этом случае тест типа должен, по-моему, быть поэтапным, как вредный.

(Кроме того, лично я предпочитаю if (window.jQuery === undefined) для этого случая тоже. Это не портативный для изоморфного кода, хотя.)

Смежные вопросы