"的运作,=&引用;在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
数组
pub_json.holis
,被分配给pub_json.holis
,可以理解,它什么也不做,并且是非操作
JS中的所有内容都是按值传递的。对于对象,该值恰好是对对象的引用。这与通过引用传递不同!你说得对,我的错。这是一条不幸的心理捷径。我已经删除了误导性的句子