可以在javascript中检查空内联吗?
我有一个函数,它解析GoogleMapsAPI的地址组件可以在javascript中检查空内联吗?,javascript,null,Javascript,Null,我有一个函数,它解析GoogleMapsAPI的地址组件JSON,然后返回城市/地区/路线名称 如果找不到键,则getAddressComponent()返回一个null let route=getAddressComponent(addressComponents,'route').value.long\u name 假设它没有找到键,那么我得到一个错误:TypeError:无法读取未定义的属性'long_name',显然是因为它没有定义 除了条件方法(a==null),如何在javascri
JSON
,然后返回城市/地区/路线名称
如果找不到键,则getAddressComponent()
返回一个null
let route=getAddressComponent(addressComponents,'route').value.long\u name代码>
假设它没有找到键,那么我得到一个错误:TypeError:无法读取未定义的属性'long_name',显然是因为它没有定义
除了条件方法(a==null)
,如何在javascript中检查null
我怎样才能像这样用检查?
编辑:安全导航操作员
let route=getAddressComponent(addressComponents,'route')?.value.long\u name代码>
如果它不存在,它可能会将route
设置为null
,而不是抛出错误
let component = getAddressComponent(addressComponents, 'route');
let route = component ? component : null
您可以使用?
运算符检查值是否为true
或false
,然后在javascript中设置值null
将为false您需要的是null合并运算符。
Javascript没有。大多数情况下,人们使用逻辑OR|
来实现此目的,但它不适用于属性访问
有人建议在语言中添加null合并,但这离此还很远:
如果你真的,真的,绝对想使用它,你可以使用这个巴别塔插件:
但我强烈建议您不要这样做:这可能永远不会应用到该语言中,并且您的代码库中会有未经验证的代码。?
不能在javascript中使用,因此,您可以查看typescript
例如,您可以使用try…catch
构造:
let route
try {
route = getAddressComponent(addressComponents, 'route').value.long_name
} catch (error) {
route = null
}
对于空字符串,可以使用代码>:
var foo='yo';
console.log(!foo);
var foo=null;
console.log(!foo)代码>更新2020
这个期待已久的特性现在可以在JavaScript中使用了
我将重定向到,这很好地涵盖了它
2018年原始答案
- Javascript(EcmaScript 5或6)中没有“空安全导航操作符”,比如C#中的
?。
、角度模板等(有时也称为Elvis操作符,在编写?:
)时,至少不幸的是现在还没有
- 您可以测试
null
,并使用三元运算符?:
,在单行中返回一些依赖表达式,如其他答案中所示:
(使用==null
仅检查null
s值,使用==null
检查null
和未定义的值)
- 在某些情况下,如您的情况,当您的变量应该包含一个
对象
,您可以简单地使用一个事实,即任何对象都是真实的,而null
和未定义
都是虚假的值:
您可以通过使用合并到布尔值来测试伪值代码>并使其内联:
console.log(!!myVar ? myVar.myProp : 'fallbackValue');
但是,使用此“falsy测试”时要非常小心,因为如果变量是0
、'
或NaN
,那么它也是falsy,即使它不是空的/未定义的
下面的代码简化返回数值?num:0
对于我:
returnnum | | 0代码>2020答案,它存在!!!
您现在可以直接使用?。
内联测试是否存在。它被称为可选链接操作符
,受到所有现代浏览器的支持
如果属性存在,则进行下一次检查,或返回值。任何故障都将立即短路并返回未定义的
const example = {a: ["first", {b:3}, false]}
example?.a // ["first", {b:3}, false]
example?.b // undefined
example?.a?.[0] // "first"
example?.a?.[1]?.a // undefined
example?.a?.[1]?.b // 3
domElement?.parentElement?.children?.[3]?.nextElementSibling
要确保默认定义的值,可以使用??
。如果需要第一个truthy值,可以使用|
example?.c ?? "c" // "c"
example?.c || "c" // "c"
example?.a?.[2] ?? 2 // false
example?.a?.[2] || 2 // 2
如果不检查案例,则左侧属性必须存在。否则,它将抛出一个异常
example?.First // undefined
example?.First.Second // Uncaught TypeError: Cannot read property 'Second' of undefined
-89%,2021年3月
-89%
-v14+getAddressComponent是否异步?您的意思是(element!=null?element.value.long\u name:null)
?@mplungjan否not@GalAbra不,我的意思是如果我能做一些类似的事情,注意“空字符串”和“空值”不一样,但是当强制为布尔值时,它们都是错误的(比如当你应用!
,或者在中如果应用)。var foobar='';console.log((!foobar?'falsy like null':'not falsy');console.log((foobar==null?'==null':'!==null');console.log((foobar==null?==null':');
。
example?.c ?? "c" // "c"
example?.c || "c" // "c"
example?.a?.[2] ?? 2 // false
example?.a?.[2] || 2 // 2
example?.First // undefined
example?.First.Second // Uncaught TypeError: Cannot read property 'Second' of undefined