zoukankan      html  css  js  c++  java
  • JS的可选链操作符(?.)与双问号(??),你用到了吗?

    可选链操作符(?.)

    以前一般这样使用:

    let nestedProp = obj.first && obj.first.second;
    

    或者这样:

    let temp = obj.first;
    let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);
    

    现在我们这样使用:

    let nestedProp = obj.first?.second; // 访问属性
    let result = someInterface.customMethod?.(); // 调用方法
    let nestedProp = obj?.['prop' + 'Name']; // 表达式
    let arrayItem = arr?.[42]; // 访问数组
    

    详细使用可参考:Optional chaining (?.)

    双问号(??)

    语法:

    leftExpr ?? rightExpr
    

    ??在leftExpr和rightExpr之间,只有当leftExprnull或者 undefined时取rightExpr,否则取leftExpr0,false,""被认为是有意义的,所以还是取leftExpr

    以前这样使用:

    let foo;
    let someDummyText = foo || 'Hello!';
    

    基础示例:

    const nullValue = null;
    const emptyText = ""; // falsy
    const someNumber = 42;
    
    const valA = nullValue ?? "default for A";
    const valB = emptyText ?? "default for B";
    const valC = someNumber ?? 0;
    
    console.log(valA); // "default for A"
    console.log(valB); // "" (as the empty string is not null or undefined)
    console.log(valC); // 42
    

    特殊示例:

    null || undefined ?? "foo"; // raises a SyntaxError
    true || undefined ?? "foo"; // raises a SyntaxError
    
    (null || undefined) ?? "foo"; // returns "foo"
    

    详细使用可参考:Nullish coalescing operator (??)

    工程中怎样使用

    babel7以上版本支持,可以添加以下2个devDependencies依赖:

    @babel/plugin-proposal-optional-chaining // 可选链
    @babel/plugin-proposal-nullish-coalescing-operator // 双问号
    

    .babelrc或者babel.config.js中这加入2个插件(plugins属性放在JSON顶层):

    {
     "plugins": [
        "@babel/plugin-proposal-nullish-coalescing-operator",
        "@babel/plugin-proposal-optional-chaining"
      ]
    }
    
  • 相关阅读:
    给xpath添加正则表达式匹配函数
    利用window.open实现post方式的参数传递
    利用Http状态码检查网页内容是否更新
    一款很不错的html转xml工具Html Agility Pack
    ASP.NET MVC SiteMap provider的一个bug
    a标记链接相对路径的问题
    下载文件的Restful接口的前端实现
    游戏服务器体系结构
    c++资源之不完全导引 (收藏)
    Apache学习路线
  • 原文地址:https://www.cnblogs.com/moqiutao/p/15675434.html
Copyright © 2011-2022 走看看