2015-09-16 5 views
9

Какова цель вызоваЧто цель, если (TYPEOF окно! == «не определено»)

if (typeof window !== 'undefined') 

Я видел его в JSPM plugin-css, а также некоторые другие библиотеки.

+0

для автора этого кода, и, как он используется, он спрашивает: «Я работаю в chrome или node.js?» ... этот отличный гибридный код работает в «обоих» местах работает javascript. – dandavis

ответ

7

Это проверка, выполняется ли сценарий в веб-браузере или нет.

В веб-страницы, есть несколько встроенных объектов, таких как window, другие среды (например, Node.js) не будет иметь window, но может иметь и другие объекты, такие как console (ну, console существует в настоящее время в большинстве браузеров в настоящее время, но это было не изначально).

+0

Он по-прежнему не будет равен строке '' undefined'', хотя верно? Это '! ==' not '! =' – Blindy

+0

@Blindy Тип объекта 'window', возвращаемого оператором' typeof', будет равен строке '' undefined''. –

+0

О, я вижу, это имеет смысл. Это тип, а не сам объект. – Blindy

6

Это может использоваться для определения того, работает ли код в типичной среде браузера (например, в среде с DOM браузера) или в какой-либо другой среде JS, поскольку объект window существует в типичном браузере JS, но не существует в что-то вроде node.js или даже webWorker в браузере.

Если window объект не существует, то

typeof window === 'undefined' 

так код, который вы спросили о:

if (typeof window !== 'undefined') 

выполнит if блок, если window объект существует в качестве переменной верхнего уровня ,

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

+0

@dandavis - откуда появился ваш комментарий о 'Workers()? Я ничего не говорил о 'Workers()'. – jfriend00

+0

@ dandavis - Я не понимаю, какой код webWorker должен быть связан с этим вопросом. Извините, но я просто не понимаю ваш комментарий. Этот код обнаруживает наличие браузера типа «окна». Это само по себе может рассказать вам, существует ли DOM и соответствующие объекты (vs. node.js, где они этого не делают), но он не может рассказать вам все, что вы, возможно, захотите узнать о своей среде. Некоторые другие вещи в окружающей среде могут потребовать других тестов (которые не были предметом вопроса). И в конкретном коде, на который делается ссылка, он используется для определения возможности использования DOM. – jfriend00

+0

второстепенным является то, что не у всех браузеров JS есть объект верхнего уровня _window_, например Workers, но типичный - вы правы;) – dandavis