javascript 按值传递而不是按具有不同 javascript 序列化字符串的引用传递

javascript pass by value instead of pass by reference having different javascript serialization string

我正在使用 javascript 数组作为 javascript 对象的 属性。每当我修改数组时,它都会影响对象 属性,因为它是通过引用传递的。所以我克隆了对象并将其设置为对象 property.That 问题已解决,但现在每当我尝试序列化对象时,我都会得到不同的序列化字符串。

function Person(name, email, row) {
        this.Name = name;
        this.Email = email;

        var clonedRow = $.extend(true,{}, row);
        this.Row = clonedRow;
    }

    function FnClick() {
        var arr = new Array();
        arr[0] = "aaa";
        arr[1] = "bbb";

        var objPerson = new Person("Pallav", "P@abc.com", arr);
        arr[0] = "xxx";
        arr[1] = "zzz";

        var serializedObj = JSON.stringify(objPerson); //Sys.Serialization.JavaScriptSerializer.serialize(objPerson);
        var UserContext = new Array();
        PageMethods.TestMethod(serializedObj,onSuccess,OnFailure,UserContext);

    }

如果我不克隆行对象并将其设置为 serializedObj 字符串是

{"Name":"Pallav","Email":"P@abc.com","Row":["xxx","zzz"]}

如果我像上面那样克隆对象,serializedObj 字符串是

{"Name":"Pallav","Email":"P@abc.com","Row":{"0":"aaa","1" :"bbb"}}

因此,服务器端的反序列化对象不同,对象的第 属性 行不包含 2 行,尽管它在序列化字符串中。

我该如何克服这个问题?

改变

var clonedRow = $.extend(true,{}, row);

var clonedRow = $.extend(true,[], row);

{} 是一个对象 ('associative array'),而 [] 是一个 simple/flat 数组。