gpt4 book ai didi

javascript - 使用 try-catch 检索嵌套属性的值。这是一种有效的方法吗?

转载 作者:行者123 更新时间:2023-11-29 18:31:06 25 4
gpt4 key购买 nike

我们有一个对象(由 data 引用)并且我们想要检索嵌套属性的值。理想情况下,我们希望这样做:

value = data.category3.section2.article4.title;

我们不能这样做,因为如果任何中间对象(category3section2article4) 未在 data 对象中定义(在相应位置)。


现在,为了消除任何可能抛出的潜在引用错误,我们可以将上面的行放在 try-catch 语句中:

try {
value = data.category3.section2.article4.title;
} catch (err ) {}

这行得通!但是,我不确定以这种方式依赖 try-catch 是一种好的做法。替代解决方案是手动遍历到所需的属性值。我已经编写了一个紧凑的实用函数来实现这一点:

function get( val, names ) {
names = names.split( '.' );
while ( val && names.length ) { val = val[ names.shift() ]; }
return val;
}

现在我们可以这样获取属性值了

value = get( data, 'category3.section2.article4.title' );

所以,我的问题是:

try-catch 方法是有效的解决方案吗? 或者是否有正当理由应该避免使用它?

顺便说一句,try-catch 方法在这个线程中有严重的偏差:What's the simplest approach to check existence of deeply-nested object property in JavaScript?

最佳答案

为什么不呢:

var value = data && 
data.category3 &&
data.category3.section2 &&
data.category3.section2.article4 &&
data.category3.section2.article4.title;

那是安全的(如果遍历链中的任何一个对象没有被设置,值将为null)。这比一堆 if block 更整洁,并且避免(?误)使用异常。

该方法的另一种用法是在失败时提供默认值:

var value = data && 
data.category3 &&
data.category3.section2 &&
data.category3.section2.article4 &&
data.category3.section2.article4.title || 'default value';

关于javascript - 使用 try-catch 检索嵌套属性的值。这是一种有效的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8195834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com