Неправильный ответ - см. РЕДАКТИРОВАТЬ в конце
Позвольте мне опираться на ответ Алекса.
Чтобы предотвратить создание объекта данных, если он не существует, я бы лучше сделал:
$.fn.hasData = function(key) {
var $this = $(this);
return $.hasData($this) && typeof $this.data(key) !== 'undefined';
};
Затем, где $thisне создан объект данных, $.hasDataвозвращается, falseи он не будет выполняться $this.data(key).
РЕДАКТИРОВАТЬ: функция $.hasData(element)работает, только если данные были установлены с использованием $.data(element, key, value), а не element.data(key, value). Из-за этого мой ответ не верен.
data-атрибуте ничего не хранится, но в jQuery хранятся данные и наоборот.