Можно сделать некоторую хирургию к jquerys val функция для действия как этот. Возвратите TRUE или FALSE, нет ли никакого значения attr.
(function (){
var jval = $.fn.val
function superval(value){
if (value === undefined){
if (this.is("input") && this.attr("type") == "checkbox"){
if (this.attr("value")===undefined){
return this[0].checked
}
}
return jval.call(this)
} else {
return jval.call(this, value)
}
}
$.fn.val = superval
})()
console.log($('<input type="checkbox"/>').val()); // false
console.log($('<input type="checkbox" checked="whatever"/>').val()); // true
console.log($('<input type="checkbox" checked="whatever" value="yes"/>').val()); // yes
console.log($('<input type="text" value="heya"/>').val()); // heya
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>