【问题标题】:Set a default value for a nested object property using the pipe symbol使用管道符号为嵌套对象属性设置默认值
【发布时间】:2014-03-06 02:22:53
【问题描述】:

对于给定的哈希:

var hash = {
    a: "one",
    b: { cat: "two" }
};

使用两个管道|| 允许放置一个未定义的替代值:

var number = hash.a || "just a number";  // -> "one"
var number = hash.c || "just a number";  // -> "just a number"

但是,定位嵌套哈希会导致错误:Cannot read property 'value' of undefined:

var number = hash.c.dog || "just a number";  // -> Cannot read property 'value' of undefined

我的问题是如何定位嵌套哈希并设置默认值,就像我们使用“普通”哈希一样?

【问题讨论】:

  • 相关:Javascript: How to set object property given its string name,也许这会给你一个想法。
  • @FelixKling 有趣...当然可以为该任务构建一个函数,但我想知道是否有更好的方法?!
  • 好吧,如果这就是你的意思,那么没有内置的方法。如果要测试嵌套属性是否存在,则还必须测试每个“中间”属性是否存在。
  • 你是对的。随着哈希越来越深,它变得越来越复杂。我会给它更多的机会,也许有人会想出一个创意。谢谢!

标签: javascript jquery hash nested-attributes


【解决方案1】:

JavaScript 没有为此提供特殊语法。在假设它已定义并尝试访问其成员之一之前,您需要测试每个可能未定义的值。

您仍然可以为此使用||&&,但在不平凡的情况下,最好只使用if

使用||

var hash = {
    a: "one",
    b: { cat: "two" }
};

var x = (hash.c || {}).cat 

使用&&

var x = hash && hash.c && hash.c.cat

【讨论】:

  • 您可能是对的,JS 没有针对这些情况的特殊语法(Felix Kling 也提到过)。感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 2018-03-25
  • 2020-12-07
相关资源
最近更新 更多