之间的确切区别是什么?和?:角运算符

Raj*_*one 4 typescript angular

我不是在考虑?:(三元运算符)。有时我在YouTube教程中观看人们在使用?。HTML页面中的运算符,有时它们在TS(typescript)页面中使用?:。我不清楚它们到底有什么不同?

dee*_*Dev 6

所以使用?有区别吗?在Angular中,这是您可能会引用的三种用法。

安全操作员

当在HTML中设置带有问号的值时,这是安全的检查,因此在访问变量之前先检查其是否已定义。(尝试访问值不存在将导致错误)。

下面的代码段将this.example在检查文本之前检查其值,这将导致错误。如果在未定义的情况下访问文本,则几乎可以确保不需要的行为。

<p>{{example?.text}}</p>
Run Code Online (Sandbox Code Playgroud)

这可以确保一切安全,要了解有关安全运算符的更多信息,请阅读此处的Angular文档

可选参数

我认为您正在寻找的下一个用途是函数/接口中的可选值。这意味着,如果接口exampleValue现在不定义为,则如果不调用而不会引发错误。

export interface Itest
{
 exampleValue?: string; // optional
 neededValue: string; // non-optional
}
Run Code Online (Sandbox Code Playgroud)

或在函数内,如果没有可选的指示符(?),则调用函数时将发生错误。this.exampleFunction();

public exampleFunction(test?): void 
{
  console.log(test);
  // this function can be called with or without test being passed in without causing an error.
}
Run Code Online (Sandbox Code Playgroud)

有关此示例的更多示例,请参见这篇有关可选参数的简短文章。

条件(三元)运算符

问题不是要寻找这个问题,而是认为将它弹出是?可以使用的另一种情况。

在打字稿中看到时,您可以在(if / else)类似这样的条件三元语句中使用它。

<p>{{example?.text}}</p>
Run Code Online (Sandbox Code Playgroud)

这与编写以下语句相同。

export interface Itest
{
 exampleValue?: string; // optional
 neededValue: string; // non-optional
}
Run Code Online (Sandbox Code Playgroud)

可在此处找到有关条件(三元)运算符的更多信息和用法

  • `console.log(example === 'hello' ? 'im true' : 'im false';` (2认同)