Почему JSHint не обнаруживает ошибку «не определено»?

#javascript #jshint

#javascript #jshint

Вопрос:

Я пытался использовать JSHint в своем проекте. Но для меня это явно не работает. Например:

 (function () {
    if (!window.myApp) window.myApp = {};
    var myApp = window.myApp;
    var a = function (key) {
        key = key || "key";
        return myApp.someModule.get(key);
    };

    a();
})();
  

Этот фрагмент должен выдавать ошибку, что-то вроде этого: «Ошибка типа: MyApp.SomeModule не определена», но JSHint по-прежнему молчит. Я использую настройки по умолчанию для JSHint изhttp://jshint.com / . Кто-нибудь может мне помочь? Большое спасибо.

Комментарии:

1. Возможно, вы не установили undef параметр? Взгляните на документацию: jshint.com/options

Ответ №1:

Достаточно уверен, что он проверяет только переменные в «локальной» области видимости, он не будет проверять все цепочки объектов. На самом деле я бы сказал, что это невозможно обнаружить во всех случаях.

Рассмотрим:

 var o = {};
someAjaxRequest({
    callback: function(response) { 
        o[response.responseText] = 'found!';
    }
});
  

Комментарии:

1. Это так странно, не так ли? 🙂 Но, по-видимому, это причина. Спасибо!

2. На самом деле, было бы практически невозможно полностью разобраться в этом без фактического запуска кода. Я обновлю свой пост примером.

3. Я думаю, JSHint должен обнаруживать ситуацию, когда метод некоторого объекта не определен. В вашем примере, если я добавлю строку var a = o["h"].method(); , она все еще не обнаружена. Но я могу ошибаться.

4. Конечно, но дело в том, что ее действительно трудно поймать во всех сценариях, особенно при динамическом назначении свойств и способе работы свойств объекта, поэтому кажется, что она не пытается.