// Access Properties
user?.name; // user might be null/undefined
user.name?.firstName // user will be available however name is not guaranteed.
// Access array values
addresses?.[index]; // array addresses might be undefined
// May be function??
user.getGeolocation?.(); // If the function exists execute it.
// Example:
function foo(input) // some Array as input {
//.. Some stuff
return [input??[]].concat(bar); //if input is empty ignore and concat bar on an empty array and return.
}
//----
const defaultVal = 'someVal';
...
const val = this.someObj.prop1??defaultVal;
var x = (window.user || {}).name; // or var x = (global.user || {}).name;
为了安全地执行功能,
var noop = function(){}; //Just a no operation function
(windowOrSomeObj.exec || noop)(); //Even if there is no property with the name `exec` exists in the object, it will still not fail and you can avoid a check. However this is just a truthy check so you may want to use it only if you are sure the property if exists on the object will be a function.
6条答案
按热度按时间ecfdbz9o1#
您可以使用optional chaining
示例:
另一个特性Nullish coalescing operator ??与null/undefined的处理略有不同,但与之相关
您可以这样做,因为没有内置的方式:
如果用户未定义(空),则不会中断脚本。
同样,如果在全局范围内,则可以显式检查此变量是否为全局范围的属性,以避免出现上述错误
例如:
为了安全地执行功能,
w8rqjzmb2#
选择性链接运算子
是a new proposal for ECMAScript。
这是在一个早期阶段,但我们可以开始使用它与巴别塔。
这就是问题所在:
它是这样工作的:
要开始使用它,我们需要巴别塔阿尔法7:
我们需要将插件添加到我们的.babelrc
Adam Bene Medium Post which explains how to use it and another use cases
ykejflvf3#
可以使用逻辑AND(
&&
)运算符。它的工作方式与大多数语言不同,因为它的结果是而不是布尔值。例如:下表显示了使用此运算符的所有可能结果:
5w9g7ksd4#
这和Javascript中的代码是一样的:
这将返回
undefined
而不是nil
,但在大多数情况下这是等效的。我认为Rails需要try
方法的原因是因为您无法访问示例变量,除非它们是可访问的。为了补充@PSL的方法,我通常会这样做:
yzuktlbb5#
在Rails4中,
try
执行以下操作:调用其名称作为第一个参数的公共方法,就像
public_send
一样,不同之处在于,如果接收方不响应它,则调用将返回nil,而不是引发异常。在Rails3中,
try
类似于Rails4中的try!
,并且与try
相同,只是如果对象不理解你试图调用的方法,它会发出抱怨。try
的最初意图是隐藏一系列nil
检查,这样你就可以说:而不是
Rails4版本还隐藏了一个检查,检查对象是否理解您要调用的方法。
在JavaScript中没有特殊的语法,但是可以将这些丑陋的东西放到一个函数中。
Rails 4版本的
try
在JavaScript中看起来像下面的函数:如果
obj
不理解method_name
(包括obj
是null
还是undefined
),你会说x = rtry(obj, 'method_name', arg1, arg2, ...)
和x
是null
。演示:http://jsfiddle.net/ambiguous/BjgjL/
Rails3版本很简单,那只是一个
null
检查:而JavaScript本身将引发
obj
没有m
方法的异常。这个版本等效于CoffeeScript的?
存在运算符的“它是函数吗”版本。演示:http://jsfiddle.net/ambiguous/FQCS2/
通常情况下,如果你处理的是原生方法而不是用JavaScript编写的方法,事情可能不会那么顺利。
typeof (6).toString
在一个JavaScript环境中可能是'function'
,但我不认为它在任何地方都是'function'
。尽管如此,主要用途(即隐藏null
和undefined
检查)应该在任何地方都有效。hyrbngr76#
我不这么认为。为什么不自己卷?不完全等同,但做的工作。