Я б дотримувався використання typeof foo === "undefined"
скрізь. Це ніколи не може піти не так.
Я уявляю, що причина, по якій jQuery рекомендує два різні методи, полягає в тому, що вони визначають свою власну undefined
змінну в межах функції, в якій живе jQuery-код, тому всередині цієї функції undefined
захищено від підробки ззовні. Я б також міг уявити, що хтось десь орієнтував два різні підходи і виявив, що foo === undefined
це швидше, і тому вирішив, що це шлях. [ОНОВЛЕННЯ: як зазначається в коментарях, порівняння з цим undefined
також трохи коротше, що може врахувати.] Однак виграш у практичних ситуаціях буде абсолютно незначним: ця перевірка ніколи не буде, ніколи не буде вузьким місцем, і що таке Ви втрачаєте важливо: оцінка властивості об'єкта хоста для порівняння може призвести до помилки, тоді як atypeof
перевірити ніколи не буде.
Наприклад, для ISE для аналізу XML використовується наступне:
var x = new ActiveXObject("Microsoft.XMLDOM");
Щоб перевірити, чи є у нього loadXML
метод безпечно:
typeof x.loadXML === "undefined"; // Returns false
З іншої сторони:
x.loadXML === undefined; // Throws an error
ОНОВЛЕННЯ
Ще однією перевагою typeof
перевірки, яку я забув згадати, було те, що вона також працює з незадекларованими змінними, чого foo === undefined
перевірка не робить, а насправді викидає a ReferenceError
. Дякую @LinusKleen за те, що нагадав. Наприклад:
typeof someUndeclaredVariable; // "undefined"
someUndeclaredVariable === undefined; // throws a ReferenceError
Підсумок: завжди використовуйте typeof
чек.