【问题标题】:Ramda 'is' to vanila jsRamda \'is\' 到 vanilla js
【发布时间】:2022-08-10 12:51:54
【问题描述】:

嗨,我很困惑 ramda 是如何工作的,我得到了这段代码,但我不确定它是如何工作的 https://ramdajs.com/docs/#is

const render = curry(
  (renderer, value) => is(Function, renderer) && renderer(value)
);

我只需要了解将is(Function, renderer) 转换为Vanilla JS 的简单方法。 我开始检查它的字符串、数字和对象,但检查只使用\'string\'类型而不是Function

  • typeof renderer === \'function\'

标签: javascript ramda.js


【解决方案1】:

Ramda 是开源的。你可以看到the implementation

function is(Ctor, val) {
  return val instanceof Ctor ||
    val != null && (
      val.constructor === Ctor ||
      (Ctor.name === 'Object' && typeof val === 'object'));
}

【讨论】:

    【解决方案2】:

    此函数允许您安全地调用renderer,前提是它确实是一个函数。我假设在最初的开发人员头脑中,它可能是未定义的或不是函数。

    const render = curry(
      (renderer, value) => is(Function, renderer) && renderer(value)
    );
    

    他们的香草等价物是:

    const render = (renderer = () => {}, value = null) => renderer(value);
    // or
    const render = (renderer, value) => renderer?.(value)
    

    【讨论】:

      【解决方案3】:

      我在许多程序中使用is -

      const is = (T, t) =>
        t?.constructor === T
       
      console.log(is(Array, 1)) // false
      console.log(is(Array, null)) // false
      console.log(is(Array, {a: 1})) // false
      console.log(is(Array, [2])) // true
      
      console.log(is(Object, 1)) // false
      console.log(is(Object, undefined)) // false
      console.log(is(Object, [1,2])) // false
      console.log(is(Object, {a:1})) // true
      
      console.log(is(Number, 1)) // true
      console.log(is(Number, NaN)) // true
      console.log(is(Number, undefined)) // false
      console.log(is(Number, [3])) // false
      console.log(is(Number, x => x + 1)) // false
      
      console.log(is(Function, x => x + 1)) // true
      console.log(is(RegExp, /foo/g)) // true
      console.log(is(String, "hello")) // true
      .as-console-wrapper { min-height: 100%; top: 0; }

      【讨论】:

        猜你喜欢
        • 2019-03-16
        • 1970-01-01
        • 1970-01-01
        • 2017-05-24
        • 1970-01-01
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        • 2021-09-30
        相关资源
        最近更新 更多