【问题标题】:What does ?. and ?? operator in javascript do? [duplicate]有什么作用?。和 ?? javascript中的操作符是做什么的? [复制]
【发布时间】:2026-01-21 21:45:01
【问题描述】:

我最近在 java 脚本代码库中注意到这样的用法,它的作用是什么。我找不到任何相关文件。尽管直觉上操作员似乎在检查属性是否存在。有没有这方面的官方文档。

例如:

args?.propertyName !== 'someValue'
const value = props.someProp ?? props.defaultProp;

【问题讨论】:

标签: javascript operators


【解决方案1】:

它们是可选的:

val ?? other 称为空值合并运算符,等效于val == null ? other : val

optionalThing?.property 被称为可选链接,与optionalThing == null ? null : optionalThing.property 相同

当存在引用可能丢失的可能性时(允许您执行optionalThing?.optionalProperty?.anotherOptionalProperty?.property 之类的操作),当访问链接属性时,此可选链接表达式会产生更短和更简单的表达式。

【讨论】:

    【解决方案2】:

    ?. 称为可选链接运算符 (TC39 Stage 4),当您不确定嵌套属性是否存在时使用。如果您尝试使用. 运算符来访问undefined 的属性,您会得到TypeError

    例如:

    const obj = {foo: {} };
    
    //This is safe, results in undefined
    console.log(obj?.foo?.bar?.baz);
    
    //This results in Uncaught TypeError: Cannot read property 'baz' of undefined
    console.log(obj.foo.bar.baz);
    

    ?? 被称为空合并运算符 (TC39 Stage 3)。当您使用空字符串"" 或带有|| 运算符的0 等虚假值时,|| 右侧的操作数将被返回,因为虚假值被忽略。

    ?? 当您不想要它并且实际上您想考虑虚假值时会派上用场。如果左侧的值为nullundefined,则仅采用?? 右侧的值:

    例如:

    const empString = "";
    const defaultValue = empString || "A default value";
    //Outputs A default value as "" empty string is falsy
    console.log(defaultValue);
    
    const actualValue = empString ?? "A default value";
    //Does not print the default value as the empString is neither null or undefined
    console.log(actualValue);
    

    0false 等其他虚假值相同,与将输出'default 字符串的|| 运算符不一致:

    console.log(false ?? 'default') //false
    
    console.log(0 ?? 'default') // 0
    

    仅适用于undefinednull,这将输出与|| 运算符一致提供的默认值:

    console.log(undefined ?? 'default') //default
    
    console.log(null ?? 'default') //default
    

    【讨论】:

      最近更新 更多