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?

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?

WBOY
Freigeben: 2016-08-23 09:17:45
Original
1965 Leute haben es durchsucht

<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>
Nach dem Login kopieren
Nach dem Login kopieren

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?

Antwortinhalt:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage