【问题标题】:Handling when Obj does not have keyObj 没有密钥时的处理
【发布时间】:2021-06-21 02:24:00
【问题描述】:

我们如何让 obj 在没有键的情况下处理/执行函数?

例如

const abc = {
 a: () => console.log('key exist')
}


console.log(abc.a())

console.log (abc.c())

在这里,console.log(abc.a()) 将打印密钥存在,但我希望如果有人试图访问不存在的密钥,那么它应该运行不同的函数。

我希望它在对象级别处理这件事,即我可以做if (abc[c]) 然后做其他事情但是因为我要从许多不同的地方调用这个 obj 并且我不想有 if-else 条件.

这可能吗?

【问题讨论】:

标签: javascript


【解决方案1】:

也许是这个?

const abc = {
 a: () => console.log('key exist'),
 notfound: () => console.log('key does\'t exit')
}


console.log(abc.a())

console.log ((abc?.c||abc.notfound)())

【讨论】:

    【解决方案2】:

    您可以先检查属性 c 是否存在于对象上。我还添加了一个检查,看看它是否确实是一个函数。

    const abc = {
      a: () => console.log('key exist')
    }
    
    
    console.log(abc.a());
    
    console.log (abc.c && typeof abc.c === 'function' ? abc.c() : "not found");

    【讨论】:

      【解决方案3】:

      我想避免每次需要运行一个可能存在也可能不存在的函数时都使用if/else,可以创建一个全局函数:

      const run = (cb) => typeof cb ===  "function" ? cb() : () => {}
      
      const abc = {
        a: () => console.log('key exist')
      }
      
      
      console.log(run(abc.a))
      
      console.log(run(abc.c))

      【讨论】:

        【解决方案4】:

        您可以使用 Nullish 合并运算符来解决您的问题:

        nullish 合并运算符 (??) 是一个逻辑运算符,当其左侧操作数为 null 或未定义时返回其右侧操作数,否则返回其左侧操作数。

        更多信息见MDN Web Docs - Nullish Coalescing Operator

        Nulish 合并运算符是 ECMAScript 2020 规范的一部分。查找 can i use 了解浏览器支持详情。

        //With external default
        (() => {
        
          const abc = {
            a: () => console.log('key exist')
          }
        
          const myFunction = abc.c ?? (() => console.log("key doesn't exist"))
          myFunction();
        
        })();
        
        //With internal default
        (() => {
        
          const abc = {
            a: () => console.log('key exist'),
            default: () => console.log("key doesn't exist")
          }
        
          const myFunction = abc.c ?? abc.default
          myFunction();
        
        })();

        如果您的项目需要支持旧版浏览器,请改用二元逻辑运算符 OR (||)

        当且仅当其一个或多个操作数为真时,一组操作数的逻辑 OR (||) 运算符(逻辑析取)为真。

        如果一个值可以转换为true,那么这个值就是所谓的truthy。如果一个值可以转换为false,那么这个值就是所谓的falsy。

        可以转为假的表达式

        • null
        • NaN
        • 0
        • 空字符串(""''``
        • undefined

        更多信息见MDN Web Docs - Logical OR

        //With external default
        (() => {
        
          const abc = {
            a: () => console.log('key exist')
          }
        
          const myFunction = abc.c || (() => console.log("key doesn't exist"))
          myFunction();
        
        })();
        
        //With internal default
        (() => {
        
          const abc = {
            a: () => console.log('key exist'),
            default: () => console.log("key doesn't exist")
          }
        
          const myFunction = abc.c || abc.default
          myFunction();
        
        })();

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-05
          • 2020-12-10
          • 2018-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多