Проблемы с обнаружением функции "Заполнитель" HTML5

Мне нужно проверить поддержку заполнителя. Следующее отлично работает во всех современных браузерах, а также IE7, IE8, IE9:

$.support.placeholder = (function () {
    var i = document.createElement("input");
    return "placeholder" in i;
}());

Это работает, но JSLint жалуется на использование in:

Неожиданный 'in'. Сравните с undefined или используйте hasOwnProperty вместо этого.

Хорошо, поэтому я реорганизую его на это:

$.support.placeholder = (function () {
    var i = document.createElement("input");
    return i.hasOwnProperty("placeholder");
}());

Теперь это пропускает JSLint без каких-либо ошибок или предупреждений, но он разбивается на IE7 и IE8 с этим старым каштаном:

Объект не поддерживает свойство или метод 'hasOwnProperty'

Любая идея, как сделать JSLint счастливым, а также IE7 и IE8?

Ответ 1

Вы также можете использовать другое решение, предлагаемое JSLint:

return typeof i.placeholder !== 'undefined';

Это должно работать с перекрестным браузером без проблем.

Ответ 2

Мой ответ не будет. Не делайте JSLint счастливым. JSLint - это то, как Crockford считает, что JavaScript должен быть выполнен. Это его личный стандарт. Если вы хотите какой-то линт для JavaScript, используйте JSHint. Это разветвленная версия JSLint, которая полностью настраивается и без сумасшедших требований. С его домашней страницы:

JSHint - это вилка JSLint, инструмент, написанный и поддерживаемый Дугласом Крокфорд.

Первоначально проект начинался как попытка сделать больше настраиваемая версия JSLint - та, которая не применяет один конкретный стиль кодирования для своих пользователей, но затем преобразован в отдельный инструмент статического анализа с его собственными целями и идеалами.

Ответ 3

Вы можете получить функцию через Object.prototype, затем call на элементе. Это означает, что функция доступна, и вы можете называть ее способом i.hasOwnProperty -fashion (т.е. Значение this за кулисами при вызове i):

Object.prototype.hasOwnProperty.call(i, "placeholder");