bwin娱乐官网JavaScript中把一个关联数组a赋值给b,然后改变a的内容,为什么b也跟着发生变化?

2016/12 01 13:12
此文章不得转载,如有需要请联系网站管理员。

一度的温暖,一百度的爱情,来自于bwin娱乐官网的点点滴滴

JS:
var a = {"Client":"jQuery","Server":"PHP"};
var b = a;
a["New"] = "Element";
console.logb;
// 输入 Object { Client="jQuery",  Server="PHP",  New="Element"}

PHP例程1:
$a = arrayClient=>jQuery,Server=>PHP;
$b = $a;
$a[New] = Element;
var_export$b;
//输入 arrayClient=>jQuery,Server=>PHP

PHP例程2:
$a = arrayClient=>jQuery,Server=>PHP;
$b = &$a; //援用赋值
$a[New] = Element;
var_export$b;
//输入 arrayClient=>jQuery,Server=>PHP,New=>Element

JavaScript中把一个联络干系数组a赋值给b,然后改动a的内容,为什么b也随着发作变革?

关于数组这种非平凡范例(字符串,整型,布尔),你的赋值相称于地点拷贝,便是a、b占用了分歧段地点。以是改了b,a也会变,本质上a、b便是一个东西。

这里这个答复比较细致,数组属于援用范例值,存储在堆中。https://www.zhihu.com/questio…

网上看到有人说,JS中赋值时,原始范例比如字符串是复制值,援用范例比如联络干系数组是复制援用.

var a = {"Client":"jQuery","Server":"PHP"};
var b = JSON.stringifya; //转成字符串后赋值
a["New"] = "Element";
console.logJSON.parseb; //运用时转回联络干系数组东西
//输入 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]-->

以为JS数组没有PHP矫捷,PHP支持用&声明援用赋值,PHP数组是”写时复制”:

echo roundmemory_get_usage/1024*1024."MB\n"; //0MB
$a = file/home/eechen/note.txt, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES;
echo roundmemory_get_usage/1024*1024."MB\n"; //9MB
$b = $a;
echo roundmemory_get_usage/1024*1024."MB\n"; //9MB赋值后内存没有变革
$b[new] = element;
echo roundmemory_get_usage/1024*1024."MB\n"; //14MB修正后内存发作变革,即写时复制

特别地,PHP东西默许是援用赋值,而不是值复制:

class foo {
    public $bar = php;
}
$foo = new foo;
$tmp = $foo;
$tmp->bar = sql;
echo $foo->bar."\n"; //输入sql

PHP东西复制需求经过clone关键字来完成:
http://php.net/clone

由于a跟b指向的都是分歧个数组呀。

要想做到不改动,就先把东西转化成字符串,再转化返来东西,便是两个差别的东西了。直接用的话,真实便是一个。楼上曾经给出正解。

这个是php和js的一个差别点,js对数组转达是援用的,但是php的是值转达

js对数组转达是援用的

(看完/读完)这篇文章有何感想! 来看看bwin娱乐官网是怎么评论的吧!

--转载请注明: bwin娱乐官网_bwin娱乐官网平台_bwin娱乐官网平台下载 » bwin娱乐官网JavaScript中把一个关联数组a赋值给b,然后改变a的内容,为什么b也跟着发生变化?

发表评论

(必填)