"的运作,=&引用;在javascript中

"的运作,=&引用;在javascript中,javascript,Javascript,考虑以下代码 var pub_json_general = {"holis":["12/10/2013","12/25/2013","12/26/2013"]}; var holiday = {"holis":["12/02/2013"]}; var pub_json = pub_json_general; pub_json.holis = $.merge(pub_json.holis,holiday.holis); 合并后,pub_json.holis的长度变为4,这是正确的。然而,当我使用

考虑以下代码

var pub_json_general = {"holis":["12/10/2013","12/25/2013","12/26/2013"]};
var holiday = {"holis":["12/02/2013"]};
var pub_json = pub_json_general;
pub_json.holis = $.merge(pub_json.holis,holiday.holis);
合并后,pub_json.holis的长度变为4,这是正确的。然而,当我使用firefox调试器时,我发现pub_json_general.holis也会被更改,这意味着pub_json_general和pub_json总是相同的


因此,javascript中的“=”操作不是复制右侧并创建左侧来存储它,而是创建与右侧共享相同内存空间的左侧?

是的,您已经自己正确解释了一切:)


对于引用类型,等式将引用指定给对象,而不是克隆对象。因此,当你改变一个问题时,另一个也会改变。

你可能想看看这个问题来解决你的问题

javascript中的“=”操作不是复制右侧并创建左侧来存储它,而是创建与右侧共享相同内存空间的左侧

这是一个非常令人困惑的问题。如果您想了解上一句话中发生了什么,请看以下内容:

  • 计算表达式
    $.merge(pub_json.holis,holiday.holis)
    。因此,
    holiday.holis
    的内容被追加到位于
    pub_json.holis
    的数组中(该数组与
    pub_json_general.holis
    引用的数组相同)

    表达式的结果是新修改的
    pub_json.holis
    数组

  • 1的结果,
    pub_json.holis
    ,被分配给
    pub_json.holis
    ,可以理解,它什么也不做,并且是非操作


  • JS中的所有内容都是按值传递的。对于对象,该值恰好是对对象的引用。这与通过引用传递不同!你说得对,我的错。这是一条不幸的心理捷径。我已经删除了误导性的句子