三值算子与Elvis算子与安全导航算子与逻辑算子或角度运算符的比较
三元运算符(语句)?obj : obj)
let gender = user.male ? "male" : "female";埃尔维斯算子(?:)
let displayName = user.name ?: "";安全导航操作员(?)
let displayName = user.name ?. "";逻辑或运算符
let displayName = user.name || "";上面所有的操作符都在进行相同的处理。有什么不同的好处,哪一个是最好的和最差的?
发布于 2017-05-18 11:58:36
更新
使用TypeScript 3.7,他们实现了可选的链接,这就像安全的导航操作符,但是更好。此外,Nullish Coalescing已经找到了它的方法到现场。
如果您正在使用此版本,下面的答案将过时。
也许我错过了几个版本,但据我所知,TypeScript没有猫王操作员或安全导航操作符。他们所拥有的唯一额外的东西是一个非空断言操作符!.,但这只适用于编译器,在编译后的js中,!将被删除。但是,在它们的模板中确实有安全的导航操作符,但是在模板下,这将解析为逻辑或||。这里的好处是增加了可读性和更小的模板。
此外,TypeScript确实有?:表示法,但是在接口或方法参数中使用它来指示值是可选的。
这就给我们留下了三值运算符对逻辑或。如果有3个值,您将使用第一个值。问题,答案是结果,和答案没有结果对上述问题。
而后者则是当有2个值时。哪里的第一个,如果决心要诚实,就会得到答案,否则就会有第二个答案,不管它的价值如何。
从利益的角度来说,我说的不多。我希望他们的速度同样快,但差别不大。也许使用三元选项增加了可读性,显然可以使用这个选项而不是逻辑或||,但就我个人而言,我喜欢使用||,因为它保持代码紧凑。
TLDR;
如果不是简化的话,在任何地方都可以获得
?:无法在类型记录/javascript/angular中获得,本质上与||相同
?.只适用于角模板,用于防止对象参数导航中的空指针。
||如果不是左手,那就用右手。如果是其他的话就更简单了。可在类型/javascript/angular中找到
发布于 2017-05-18 12:00:39
安全导航操作员(?)它在Angular2中也被错误地称为Elvis算子
这是一个Angular2模板绑定,它在javascript中不可用。
三元运算符(语句)?obj : obj)
这是当您想要检查一个条件,如果这个条件是真实的,返回一个值,或者如果它是假的返回另一个值。
逻辑或运算符
当你想要返回一个基于它自身存在或真实的值时(所以没有其他规则),它与Ternery有很大的不同。
let displayName = user.name || "";在上面的例子中,您是在说如果这些表达式中有一个是真实的,请返回它,在下面的位置:
let gender = user.male ? "male" : "female";你的意思是:如果我的情况是真实的,还“男性”,否则还“女性”
埃尔维斯算子(?:)
这在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 :比较它们是没有意义的,他们根本没有做同样的事情。
发布于 2017-05-18 12:06:54
let gender = user.male ? "male" : "female";可以用于javascript(Typescript)和HTML标记绑定,
基本上,当您在javascript代码中使用这个操作符时,意味着如果第一个语句为真,而不是先执行,否则执行第二个选项。
在Safe Navigation Operator (?.)术语中,Ternary Operator被称为Ternary Operator,也可以使用术语Elvis Operator (?: ),该术语在从后端或某种数据库获取异步数据时使用。
Elvis Operator (?: )替代 :-您也可以在angular2模板中像这样使用(我们可以说这是速记属性)
let gender = user.gender || "";你也看看这里
https://stackoverflow.com/questions/44046927
复制相似问题