Почему JSLint говорит мне использовать "=== undefined" вместо "typeof... === 'undefined'"?

Я закодировал следующее:

showTitles = (typeof showTitles !== 'undefined') ? showTitles : 'Y';
showSelectGroup = (typeof showSelectGroup !== 'undefined') ? showSelectGroup : 'Y';

Но JSLint говорит:

Предупреждение 3 JS Lint: Неожиданный тип. Используйте '===' для сравнения непосредственно с undefined.

Как мне изменить код?

Ответ 1

Обратите внимание, что если это лучше всего в практике, это дискуссионно, но если вы хотите, чтобы он работал с JSLint, вы могли бы сделать это

showTitles = (showTitles !== undefined) ? showTitles : 'Y';

Ответ 2

Возможно, используя

showTitles = (showTitles === undefined) ? 'Y' : showTitles;
showSelectGroup = (showSelectGroup === undefined) ? 'Y' : showSelectGroup;

jslint не имеет проблем с этим (предполагается, что showTitles и showSelectGroup объявлены с помощью var)

Однако я бы написал его как

var showTitles = showTitles || 'Y';
var showSelectGroup = showSelectGroup || 'Y';

Ответ 3

Это сообщение отражает новейшие передовые методы. Что касается строгого режима ES5, глобальное значение undefined больше не может быть изменено, а прямое сравнение - это более простой код и быстрее. Короче говоря, JSLint знает обо всем этом и дает вам хороший совет.

В этом случае измените typeof showTitles !== 'undefined' на showTitles === undefined.