1

这对我来说有点难以表达,但在 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的索引,就像树还没有建立到那个时候一样。

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

4

3 回答 3

6

你误会了。要在 javascript 中为对象的键分配值,您不需要执行该检查。无论该键是否已经存在值,都将分配该值。

想想看。如果你必须先有一个值,你怎么能把值放入一个对象或散列?

于 2010-03-30T02:57:24.953 回答
4

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

例如,在 Ruby 中:


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

于 2010-03-30T03:10:15.087 回答
1

Javascript 在此处与 PHP 执行完全相同的操作:myObject[key] = "value" 将覆盖现有值(如果存在)。你能告诉我们你为什么不这么认为吗?

于 2010-03-30T02:59:43.780 回答