function existy(x) {
return x != null
}
console.log(existy(null))
console.log(existy(undefined))
console.log(existy((function() {})()))
console.log(existy({}.a))
console.log(existy(0))
function truthy(x) {
return (x != false) && existy(x)
}
console.log('----------')
console.log(truthy(null))
console.log(truthy(undefined))
console.log(truthy((function() {})()))
console.log(truthy({}.a))
console.log(truthy(0))
console.log(truthy(''))
console.log('----------')
function doWhen(cond, action) {
if(truthy(cond)) {
return action()
} else {
return
}
}
function result(target, name) {
let prop = target[name]
if(prop) {
if(typeof prop === 'function') {
return target[name]()
} else {
return prop
}
}
}
function executeIfHasField(target, name) {
return doWhen(existy(target[name]), function() {
let res = result(target, name)
return res
})
}
console.log(
executeIfHasField([1,2,3], 'reverse')
,executeIfHasField({foo: 123}, 'foo')
,executeIfHasField([1, 2, 3], 'nothing')
,executeIfHasField([1, 2, 3], 'nothing')
)