Heim >Backend-Entwicklung >PHP-Tutorial >Wenn in JavaScript ein assoziatives Array a b zugewiesen wird und dann der Inhalt von a geändert wird, warum ändert sich dann auch b?
<code>JS: var a = {"Client":"jQuery","Server":"PHP"}; var b = a; a["New"] = "Element"; console.log(b); // 输出 Object { Client="jQuery", Server="PHP", New="Element"} PHP例程1: $a = array('Client'=>'jQuery','Server'=>'PHP'); $b = $a; $a['New'] = 'Element'; var_export($b); //输出 array('Client'=>'jQuery','Server'=>'PHP') PHP例程2: $a = array('Client'=>'jQuery','Server'=>'PHP'); $b = &$a; //引用赋值 $a['New'] = 'Element'; var_export($b); //输出 array('Client'=>'jQuery','Server'=>'PHP','New'=>'Element')</code>
Wenn in JavaScript ein assoziatives Array a b zugewiesen wird und dann der Inhalt von a geändert wird, warum ändert sich dann auch b?
<code>JS: var a = {"Client":"jQuery","Server":"PHP"}; var b = a; a["New"] = "Element"; console.log(b); // 输出 Object { Client="jQuery", Server="PHP", New="Element"} PHP例程1: $a = array('Client'=>'jQuery','Server'=>'PHP'); $b = $a; $a['New'] = 'Element'; var_export($b); //输出 array('Client'=>'jQuery','Server'=>'PHP') PHP例程2: $a = array('Client'=>'jQuery','Server'=>'PHP'); $b = &$a; //引用赋值 $a['New'] = 'Element'; var_export($b); //输出 array('Client'=>'jQuery','Server'=>'PHP','New'=>'Element')</code>
Wenn in JavaScript ein assoziatives Array a b zugewiesen wird und dann der Inhalt von a geändert wird, warum ändert sich dann auch b?
Für nicht übliche Typen wie Arrays (Strings, Ganzzahlen, Boolean) entspricht Ihre Zuweisung dem Kopieren von Adressen, d. h. a und b belegen dieselbe Adresse. Wenn also b geändert wird, ändert sich auch a. Im Wesentlichen sind a und b dasselbe.
Diese Antwort hier ist detaillierter. Arrays sind Referenztypwerte und werden im Heap gespeichert. https://www.zhihu.com/questio...
Ich habe jemanden online sagen sehen, dass beim Zuweisen von Werten in JS Originaltypen (z. B. Zeichenfolgen) kopierte Werte und Referenztypen (z. B. assoziative Arrays) kopierte Referenzen sind.
<code>var a = {"Client":"jQuery","Server":"PHP"}; var b = JSON.stringify(a); //转成字符串后赋值 a["New"] = "Element"; console.log(JSON.parse(b)); //使用时转回关联数组(对象) //输出 Object { Client="jQuery", Server="PHP"} IE8不支持JSON.parse和JSON.stringify,需要引入json2.js: http://www.json.org/js.html https://github.com/douglascrockford/JSON-js/blob/master/json2.js IE9以下版本: <!--[if lt IE 9]><script src="json2.js"></script><![endif]--></code>
Ich bin der Meinung, dass JS-Arrays nicht so flexibel sind wie PHP. PHP-Arrays unterstützen „Copy-on-Write“:
<code>echo round(memory_get_usage()/(1024*1024))."MB\n"; //0MB $a = file('/home/eechen/note.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); echo round(memory_get_usage()/(1024*1024))."MB\n"; //9MB $b = $a; echo round(memory_get_usage()/(1024*1024))."MB\n"; //9MB(赋值后内存没有变化) $b['new'] = 'element'; echo round(memory_get_usage()/(1024*1024))."MB\n"; //14MB(修改后内存发生变化,即写时复制)</code>
Weil a und b beide auf dasselbe Array verweisen.
Wenn Sie es unverändert lassen möchten, konvertieren Sie das Objekt zuerst in eine Zeichenfolge und dann wieder in ein Objekt. Es handelt sich um zwei verschiedene Objekte. Bei direkter Verwendung ist es tatsächlich eins. Die richtige Antwort wurde oben gegeben.