JavaScript 使用记录

JavaScript 基本类型和引用类型的值的区别

2017-12-07  本文已影响34人  赵者也
  1. 引用类型可以有动态的属性,基本类型没有
        var person = new Object();
        person.name = "Toby";
        console.log("person name is ", person.name);

        var name = "Toby";
        name.age = 27;
        console.log("person age is ", name.age);

输出结果:

输出结果

从输出上我们就能发现,我们为引用类型的变量 person 添加了 name 属性,如果对象不被销毁或者这个属性不被删除,则这个属性将一直存在。但是,我们不能给基本类型的值添加属性,尽管这不会导致任何错误。

  1. 我们复制引用类型时,实际上是复制了一个指针
        var num1 = 5;
        var num2 = num1;
        console.log("num1: ", num1);
        console.log("num2: ", num2);
        num1 = 6;
        console.log("num1: ", num1);
        console.log("num2: ", num2);
        num2 = 7;
        console.log("num1: ", num1);
        console.log("num2: ", num2);

        var obj1 = new Object();
        var obj2 = obj1;
        obj1.name = "Toby";
        console.log("obj1: ", obj1.name);
        console.log("obj2: ", obj2.name);
        obj1.name = "Tim";
        console.log("obj1: ", obj1.name);
        console.log("obj2: ", obj2.name);
        obj2.name = "Neo";
        console.log("obj1: ", obj1.name);
        console.log("obj2: ", obj2.name);

上面的实例的输出结果:

输出结果

基本类型复制之后是完全独立的,它们可以继续参与任何操作而不会相互影响。

引用类型复制操作结束之后,两个变量实际上将引用同一个对象。因此,改变其中一个变量,就会影响另一个变量。

  1. ECMAScript 中所有的函数的参数都是按值传递的。
    function addTen(num) {
        return num + 10;
    }

    function setName(obj) {
        obj.name = "Toby";
        obj = new Object(); // 新的赋值不会影响外部的引用变量
        obj.name = "Neo"; // 说明内部的 obj 只是一个局部的副本
    }

    Component.onCompleted: {
        var num1 = 5;
        var num2 = addTen(num1);
        console.log("num1: ", num1);
        console.log("num2: ", num2);

        var obj1 = new Object();
        setName(obj1);
        console.log("obj1: ", obj1.name);
    }

通过上面的实例,我们完全可以把 ECMAScript 函数的参数想象成局部变量。这一点问题都没有。

  1. 在检测引用类型的值时,typeof 操作符的作用不大,需要使用 instanceof 操作符
        var s = "Neo";
        var b = true;
        var i = 22;
        var u;
        var n = null;
        var o = new Object();

        console.log(typeof s);
        console.log(typeof b);
        console.log(typeof i);
        console.log(typeof u);
        console.log(typeof n);
        console.log(typeof o);

        console.log(o instanceof Object);
        console.log(n instanceof Object);
        console.log(o instanceof Array);

输出结果:

输出结果
上一篇 下一篇

猜你喜欢

热点阅读