let gender = user.male ? "male" : "female";
let displayName = user.name ?: "";
let displayName = user.name ?. "";
let displayName = user.name || "";
以上所有运营商都在做同样的过程。有什么不同的好处,哪一个是最好的&最坏?
答案 0 :(得分:7)
也许我错过了几个版本,但据我所知,TypeScript没有elvis操作员或安全导航操作员。他们唯一的额外事情是非空断言运算符!.
,但这仅适用于编译器,而在编译的js中,!
将被删除。然而,Angular在其模板中确实有安全的导航操作符,但在引擎盖下,这将解析为逻辑或||
。这里的好处是提高了可读性和更小的模板。
除此之外,TypeScript确实具有?:
表示法,但这在接口或方法参数中用于指示该值是可选的
这使我们得到三元运算符vs逻辑或。如果有3个值,您将使用第一个。问题,答案是结果,答案没有结果提出问题。
后者有2个值时。如果第一个,如果解决为真理将是答案,否则第二个,无论其价值如何。
好处,我真的不能说太多。我希望它们同样快,边际差异。也许使用三元选项可以提高可读性,你显然可以使用它而不是逻辑或||
,但我个人喜欢使用||
,因为它使代码保持紧凑。
<强> TLDR; 强>
简化if else,随处可用
?:
在typescript / javascript / angular中不可用,与||
?.
仅在角度模板中可用,用于防止对象参数导航中的空指针
||
如果不是左手,那么右手。如果不是更简化的话。提供打字稿/ javascript / angular
答案 1 :(得分:2)
安全导航操作员(?。),在Angular2中也被错误地称为Elvis操作符
这是一个Angular2模板绑定的东西,它在javascript中不可用。
三元运算符(声明?obj:obj)
当你想检查一个条件并且该条件是真实的时,返回一个值,或者如果它的假值返回另一个值。
逻辑或运营商
当你想根据它自己的存在或真实性返回一个值时(所以没有涉及其他规则),它与Ternery有很大的不同。
let displayName = user.name || "";
在上面的示例中,您要说的是,如果这些表达式中的任何一个都是真实的,请将其返回,如下所示:
let gender = user.male ? "male" : "female";
你所说的是:如果我的条件是真实的,那么回归&#34;男性&#34;否则返回&#34;女性&#34;
猫王运营商(?:)
这在javascript中不可用,您可以在PHP等其他语言中找到它,它与Ternery运算符基本相同,但在比较的左侧(真实方面)简化了可以用作返回值:
所以:
let m = something ?: somethingElse // if in case of truthiness of `something` you want to return `something` , you can do this
等于:
let m = something ? something : somethingElse
EDIt: 比较它们没有意义,它们根本不做同样的事情。
答案 2 :(得分:1)
let gender = user.male ? "male" : "female";
可用于javascript(Typescript)
以及HTML
标记绑定,
基本上,当您在javascript代码中使用此运算符时,这意味着第一个语句是否为true而不是先执行,否则执行第二个选项
在angular2条款Ternary Operator
中称为 Safe Navigation Operator (?.)
,或者您可以使用当时使用的术语 Elvis Operator (?: )
从后端或某种数据库中获取异步数据。
替代: - 你也可以在angular2模板中使用 Elvis Operator (?: )
这样的(我们可以说这是速记属性)
let gender = user.gender || "";
在这里看看
答案 3 :(得分:1)
@Milad
RameshRajendran
你可以在angular2中使用术语elvis而不是安全导航操作符(?。),根据我的说法,两者都是一样的,不要与名字混淆
我从这个source获得了一些东西:
猫王运营商(?:)
“猫王操作员”是一种缩短 Java的三元运算符。一 这个方便的例子是 返回'合理的默认值' 如果表达式解析为false或 空值。一个简单的例子可能看起来像 这样:
def gender = user.male ? "male" : "female" //traditional ternary operator usage
def displayName = user.name ?: "Anonymous" //more compact Elvis operator
安全导航操作员(?。)
使用安全导航操作符 避免NullPointerException。 通常在您有参考时 您可能需要验证的对象 在访问之前它不是null 对象的方法或属性。 为避免这种情况,安全导航 operator只会返回null 而不是抛出异常,比如 这样:
def user = User.find( "admin" ) //this might be null if 'admin' does not exist
def streetName = user?.address?.street //streetName will be null if user or user.address is null - no NPE thrown
但我想知道以上所有运营商都在做同样的过程。有什么不同的好处,哪一个是最好的&amp;最坏吗