Оба же работают с свойствами и атрибутами? Не могу понять в чем разница)
Вообще оба но есть нюансы, attr работает со значением атрибута, но им не задают значение, для этого используют prop(только свойства), вот простой пример:
$("input").change(function() {
var $input = $(this);
$("p").html(".attr('checked'): " $input.attr('checked') "
"
".prop('checked'): " $input.prop('checked') "
");
}).change();
<input id="check" type="checkbox" checked="checked">
<label for="check">Check me