js-读书笔记-函数式编程-if抽象

// existy truthy
// 判断是否为null或者undefined
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))

// 判断是否为 true 的含义
function truthy(x) {
  return (x != false) && existy(x)
  // return x != false
}
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
    }
  }
}

// 返回if语句及回调函数的调用结果,取值或对原来的数据进行原生函数处理。
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')
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值