JS 中函数进行布尔运算的时候怎样得到 toString 的值?

function fn(a) {
   return a * a;
}
fn.toString = function() {
    return 0;
}
fn.valueOf = function() {
    return 0;
}
console.log(fn)  =>  0
console.log(fn + 1)  =>  1
console.log(!fn)  =>  false

最近写一个工具函数要用到类似这样的功能,函数不传参使用的话就获取 toString 或 valueOf 的值。通常情况下是能获取到值的,但是当我需要做布尔运算的时候却得不到想要的结果,不会取 toSring 的值再做布尔运算,而是直接将函数做布尔运算,函数永远是真值,取反则为 false,即 !fn => !true => false,而我希望的是:!fn => !0 => true

有什么黑科技能解决这个问题么?

阅读 1.4k
1 个回答
console.log(!(+fn))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题