是否有允许分配/创建的语言功能的名称?

时间:2010-03-30 02:41:56

标签: javascript language-features object-notation

这对我来说有点难以表达,但在PHP中你可以这样说:

$myArray['someindex'] = "my string";

如果没有名称的索引,它将创建/分配值,如果有索引,它将覆盖现有值。

将此与Javascript进行比较,今天我必须做这样的检查:

if (!myObject[key]) myObject[key] = "value";

我知道这可能有点挑剔,但有一个PHP(和许多其他语言)能够自己进行这些检查的能力的名称,而不是更详细(读取:PITA)方法Javascript?

修改

我很困惑地问这个问题。假设您要添加到此结构中:

myobject = {
    holidays : {easter : {date : 4/20/2010,
                          religion : Christianity}
                holi : {date : 3/10/2010,
                        religion : hindu} 
}

今天我遇到了一个问题,我收到了表格数据,我希望通过构建一个对象将它放入树中。

当我开始循环时,我很难制作像myobject['holidays'][thisVariable][date] = 4/20/2010这样的新索引,如果树基本上没有建立到这一点。

如果不清楚的话,我会从我的另一台计算机上获取一个代码示例,对不起的想法感到抱歉。

3 个答案:

答案 0 :(得分:6)

你错了。要在javascript中为对象的键指定值,您不需要执行该检查。将分配该值是否已存在该键的值。

想一想。如果你必须首先得到一个值,你怎么能把值放到一个对象或哈希?

答案 1 :(得分:4)

我认为来自Perl的'自动生成'http://en.wikipedia.org/wiki/Autovivification可能是相关的,但它的工作方式与您描述的不同。维基页面有一个很好的总结。其他语言(如Ruby)支持尚未分配的哈希键的“默认操作”钩子,也可用于自动生成。

例如,在Ruby中:


>> h = Hash.new {|h,k| h[k] = {}}
=> {}
>> h["hello"]["world"] = 20
=> 20
>> h["hello"]["world"]
=> 20

答案 2 :(得分:1)

Javascript与PHP完全相同:myObject [key] =“value”将覆盖现有值(如果存在)。你能告诉我们为什么你会这么想吗?