Javascript 通过引用传递到函数中的对象数

Javascript 通过引用传递到函数中的对象数,javascript,object,Javascript,Object,我读到,当我们将一个对象传递到一个函数中时,“…JavaScript在作为参数传递时总是通过引用使用该对象…”我认为这意味着(如果我错了,请纠正我)如果函数以某种方式修改该对象,它将更改原始定义的对象。我试着用一些代码来说明这一点,它确实做了我认为它做的事情,但当我在博客文章中用数字obj尝试这个例子时,它并没有改变该对象中的原始值。请参阅我的jsbin: console.clear(); /**myobject对象**/ 函数myobject(){ 该值=5; } var o=新的myobj

我读到,当我们将一个对象传递到一个函数中时,“…JavaScript在作为参数传递时总是通过引用使用该对象…”我认为这意味着(如果我错了,请纠正我)如果函数以某种方式修改该对象,它将更改原始定义的对象。我试着用一些代码来说明这一点,它确实做了我认为它做的事情,但当我在博客文章中用数字obj尝试这个例子时,它并没有改变该对象中的原始值。请参阅我的jsbin:

console.clear();
/**myobject对象**/
函数myobject(){
该值=5;
}
var o=新的myobject();
console.log(“o的原始值:+o.value);//o、 值=5
功能对象转换器(fnc){
fnc.value=6;
}
目标更改器(o);
console.log(“o的新值:+o.value);//o、 值现在等于6
/*数字对象*/
var num2=新编号(2);
console.log(“num2的原始值:“+num2”);
功能编号CHANGER(fnc){
返回fnc+1;
}
log(“运行numberChanger:+numberChanger(num2))后的num2);

console.log(“num2的新值:“+num2”)//在Javascript中看起来相同,对象引用数组,由[]或对象{}表示。您可以使用typeof验证变量的类型。这些是通过引用传递的

typeof [2, 5, 3] //object
typeof { a: 10} // object

如果将对象文字传递给函数并修改属性“a”的值,则会导致修改该值

在Javascript中,对象引用数组,由[]或对象{}表示。您可以使用typeof验证变量的类型。这些是通过引用传递的

typeof [2, 5, 3] //object
typeof { a: 10} // object

如果将对象文字传递给函数并修改属性“a”的值,则会导致修改该值

Number对象仍然是对象。因此,它们的值是一个引用,如果函数更改作为参数传递的对象的属性,该对象将在函数外部受到影响

功能变换器(obj){
obj.foo='bar';
}
var num=新编号(123);
console.log(num.foo);//未定义
变换器(num);

console.log(num.foo);/'条形图“
数字对象仍然是对象。因此,它们的值是一个引用,如果函数更改作为参数传递的对象的属性,该对象将在函数外部受到影响

功能变换器(obj){
obj.foo='bar';
}
var num=新编号(123);
console.log(num.foo);//未定义
变换器(num);

console.log(num.foo);/'bar'
当我自己开始进入JavaScript的对象端时,实际上我遇到了很多问题。我能解释的最好方法就是通过这些例子

对象链接。

var obj = {a: 5};
var b = obj.a;
b = 2;
// obj.a: 2
// b: 2
var a = 5;
var b = a;
b = 2;
// a: 5
// b: 2
function deepCopy(objValue) {
    return JSON.parse(JSON.stringify(objValue));
}
var obj = {a: 5};
var b = deepCopy(obj.a);
b = 2;
// obj.a: 5
// b: 2
这将链接到我相信的对象值。因此,如果您更改
b
,它也将更改
obj.a

行为异常的HTML DOM对象链接

var x = document.getElementById("some_div_id");
x.innerHTML = "example"; // this works

var x = document.getElementById("some_div_id").innerHTML;
x = "example"; // this doesn't, it thinks that it's document.getElementById("some_div_id");
当我第一次使用第二个DOM方法时,我花了一些时间来找出问题所在

变量不是链接的,而是复制的。

var obj = {a: 5};
var b = obj.a;
b = 2;
// obj.a: 2
// b: 2
var a = 5;
var b = a;
b = 2;
// a: 5
// b: 2
function deepCopy(objValue) {
    return JSON.parse(JSON.stringify(objValue));
}
var obj = {a: 5};
var b = deepCopy(obj.a);
b = 2;
// obj.a: 5
// b: 2
如您所见,这不会链接该值,而是基于该值创建一个新值

从对象深度复制技巧。

var obj = {a: 5};
var b = obj.a;
b = 2;
// obj.a: 2
// b: 2
var a = 5;
var b = a;
b = 2;
// a: 5
// b: 2
function deepCopy(objValue) {
    return JSON.parse(JSON.stringify(objValue));
}
var obj = {a: 5};
var b = deepCopy(obj.a);
b = 2;
// obj.a: 5
// b: 2
这是很久以前给我的一个技巧,当时我有一个问题,希望对象值存储在变量中并进行编辑,但不将其链接到对象值。过了一段时间,我发现在提高了我的编码技能之后,我再也不需要它了

还有最后一点。我在干净的JavaScript编码中读到,除非是
Date()
对象或模拟类,否则不需要使用
new
对象方法,或者您可能会遇到
=
的类型和值检查问题


无法确定这是否没有错误,但希望这有助于更好地解释。

我自己开始接触JavaScript的对象端时,实际上遇到了很多问题。我能解释的最好方法就是通过这些例子

对象链接。

var obj = {a: 5};
var b = obj.a;
b = 2;
// obj.a: 2
// b: 2
var a = 5;
var b = a;
b = 2;
// a: 5
// b: 2
function deepCopy(objValue) {
    return JSON.parse(JSON.stringify(objValue));
}
var obj = {a: 5};
var b = deepCopy(obj.a);
b = 2;
// obj.a: 5
// b: 2
这将链接到我相信的对象值。因此,如果您更改
b
,它也将更改
obj.a

行为异常的HTML DOM对象链接

var x = document.getElementById("some_div_id");
x.innerHTML = "example"; // this works

var x = document.getElementById("some_div_id").innerHTML;
x = "example"; // this doesn't, it thinks that it's document.getElementById("some_div_id");
当我第一次使用第二个DOM方法时,我花了一些时间来找出问题所在

变量不是链接的,而是复制的。

var obj = {a: 5};
var b = obj.a;
b = 2;
// obj.a: 2
// b: 2
var a = 5;
var b = a;
b = 2;
// a: 5
// b: 2
function deepCopy(objValue) {
    return JSON.parse(JSON.stringify(objValue));
}
var obj = {a: 5};
var b = deepCopy(obj.a);
b = 2;
// obj.a: 5
// b: 2
如您所见,这不会链接该值,而是基于该值创建一个新值

从对象深度复制技巧。

var obj = {a: 5};
var b = obj.a;
b = 2;
// obj.a: 2
// b: 2
var a = 5;
var b = a;
b = 2;
// a: 5
// b: 2
function deepCopy(objValue) {
    return JSON.parse(JSON.stringify(objValue));
}
var obj = {a: 5};
var b = deepCopy(obj.a);
b = 2;
// obj.a: 5
// b: 2
这是很久以前给我的一个技巧,当时我有一个问题,希望对象值存储在变量中并进行编辑,但不将其链接到对象值。过了一段时间,我发现在提高了我的编码技能之后,我再也不需要它了

还有最后一点。我在干净的JavaScript编码中读到,除非是
Date()
对象或模拟类,否则不需要使用
new
对象方法,或者您可能会遇到
=
的类型和值检查问题


无法确定这是否无错误,但希望这有助于更好地解释。

数字是,什么叫。。。将来,请将所有代码包含在问题本身中,而不是在另一个网站上。编号是,whatchamacallit。。。以后,请将所有代码包含在问题本身中,而不是其他网站上。谢谢您的回答。不知道内部细节。所有这些,你没有把“不变性”带到桌子上。我印象深刻。嗯,这很有道理。谢谢你的回答。不知道内部细节。所有这些,你没有把“不变性”带到桌子上。我印象深刻。嗯,这很有道理。谢谢,嗯,但是当我运行a型时。我得到了“object”的回复,抱歉,我没有通过控制台运行我的示例。我的回答不正确。嗯,但是当我运行a型时。我得到了“object”的回复,抱歉,我没有通过控制台运行我的示例。我的回答不正确。