zoukankan      html  css  js  c++  java
  • _#【传值 / 传址】

    var o1 = {}
    var o2 = o1
    
    o2.a = 'a' // o2和o1指向相同 
    console.log(o1, o2)
    
    o2 = {b: 'b'} // o2指向新的
    console.log(o1, o2)
    var a = 10, // 基本数据类型
        b = a, // 将变量a保存的值复制一份,传给变量b,a和b各保存一份数据
        c = [1, 2, 3], // 复杂数据类型
        d = c; // 将变量c指向的数据的内存地址传给变量d,c和d指向同一份数据
    b++;
    d.push(4);
    console.log(a); // 10
    console.log(b); // 11 变量b保存的数据更改不会影响到变量a
    console.log(c); // [1,2,3,4] 变量c和d指向同一份数据,数据更改会互相影响
    console.log(d); // [1,2,3,4]
    /* 赋值语句会用传值和传址两种不同的方式进行赋值,如果是数值型、布尔型、字符型等基本数据类型,在进行赋值时会将数据复制一份,将复制的数据进行赋值,也就是通常所说的传值,如果是数组、hash对象等复杂数据类型(数组、hash对象可包括简单类型数据),在进行赋值时会直接用内存地址赋值,而不是将数据复制一份,用复制的数据进行赋值,也就是通常所说的传址。 */
    console.log([] == []) // false
    console.log({} == {}) // false
    console.log(1 === 1) // true
    var a = [1, 2, 3],
        b = {name: 'adang', sex: 'male', tel: '1234567'},
        c = [],
        d = {};
    for (var p in a) {
        c[p] = a[p];
    }
    for (var p in b) {
        d[p] = b[p];
    }
    c.pop();
    d.email = 'xxx@gmail.com';
    console.log(a); // 1,2,3
    console.log(c); // 1,2
    console.log(b.email); // undefined
    console.log(d.email); // xxx@gmail.com
    /* 在原生javascript中,选择传值还是传址是根据数据类型自动判定的,但传址有时候会给我们带来意想不到的麻烦,所以我们需要对复杂类型的赋值进行控制,让复杂类型也可以进行传值。最简单的做法是遍历数组或hash对象,将数组或hash对象这种复杂的数据拆分成一个个简单数据,然后分别赋值 */
    
    // 对于数组的传值还可以使用数组类的slice或concat方法实现
    var e = [7, 8, 9],
        f = e.slice(), // slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
        g = e.concat(); // concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
    f.pop();
    g.push(10);
    console.log(e); // 7,8,9
    console.log(f); // 7,8
    console.log(g); // 7,8,9,10

    关于指针

    function change(Obj) {
        Obj.name = 'first'
        console.log(Obj, a)
        Obj = new Object()
        Obj.name = 'second'
        console.log(Obj, a)
    }
    var a = new Object()
    change(a)
    //console.log(Obj) // Obj is not defined
    console.log(a.name) // first
  • 相关阅读:
    HDU 5744
    HDU 5815
    POJ 1269
    HDU 5742
    HDU 4609
    fzu 1150 Farmer Bill's Problem
    fzu 1002 HangOver
    fzu 1001 Duplicate Pair
    fzu 1150 Farmer Bill's Problem
    fzu 1182 Argus 优先队列
  • 原文地址:https://www.cnblogs.com/jzm17173/p/2492193.html
Copyright © 2011-2022 走看看