В нестрогом режиме this
претерпел преобразование Object(this)
, поэтому оно всегда правдиво. Исключения составляют null
и undefined
, которые отображаются на глобальный объект. Так что this
никогда не бывает null
и всегда правдиво, делая обе проверки лишними.
В строгом режиме, однако, this
может быть чем угодно, поэтому в этом случае вам следует остерегаться. Но опять же, вы должны сами выбрать строгий режим, поэтому, если вы этого не сделаете, не стоит беспокоиться.
(function() { return this; }).call(null); // global object
(function() { "use strict"; return this; }).call(null); // null
Спецификация ES5 гласит:
Значение thisArg передается без изменения как значение this. Это изменение по сравнению с выпуском 3, где неопределенный или нулевой thisArg заменяется на глобальный объект и ToObject применяется ко всем другим значениям, и этот результат передается как значение this.