有啥作用?。和 ?? javascript中的操作符是做啥的? [复制]
Posted
技术标签:
【中文标题】有啥作用?。和 ?? javascript中的操作符是做啥的? [复制]【英文标题】:What does ?. and ?? operator in javascript do? [duplicate]有什么作用?。和 ?? javascript中的操作符是做什么的? [复制] 【发布时间】:2020-04-26 19:39:45 【问题描述】:我最近在 java 脚本代码库中注意到这样的用法,它的作用是什么。我找不到任何相关文件。尽管直觉上操作员似乎在检查属性是否存在。有没有这方面的官方文档。
例如:
args?.propertyName !== 'someValue'
const value = props.someProp ?? props.defaultProp;
【问题讨论】:
***.com/questions/48341869/…?.
指的是可选链。
这能回答你的问题吗? Is it possible to check for null inline in javascript?
【参考方案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
等虚假值时,||
右侧的操作数将被返回,因为虚假值被忽略。
??
当您不想要它并且实际上您想考虑虚假值时会派上用场。如果左侧的值为null
或undefined
,则仅采用??
右侧的值:
例如:
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);
与0
、false
等其他虚假值相同,与将输出'default
字符串的||
运算符不一致:
console.log(false ?? 'default') //false
console.log(0 ?? 'default') // 0
仅适用于undefined
和null
,这将输出与||
运算符一致提供的默认值:
console.log(undefined ?? 'default') //default
console.log(null ?? 'default') //default
【讨论】:
以上是关于有啥作用?。和 ?? javascript中的操作符是做啥的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
javascript 的 src 属性中的 `//` 有啥作用? [复制]