美文网首页JavaScript 使用记录
JavaScript 基本类型和引用类型的值的区别

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

作者: 赵者也 | 来源:发表于2017-12-07 19:54 被阅读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);

输出结果:

输出结果

相关文章

  • JS数据类型

    数据类型分类和区别 分类 javascript数据类型分为:值类型(基本数据类型)、引用数据类型; 区别 值类型 ...

  • 基本类型值和引用类型值

    JavaScript变量可以用来保存两种类型的值:基本类型值和引用类型值。 *引用类型包括: 基本类型值和引用类型...

  • JS 作用域及变量值的引用

    基本类型和引用类型的值 JavaScript 变量可以用来保存两种类型的值:基本类型值和引用类型值。基本类型值源自...

  • 变量、作用域和内存问题

    1. 基本类型值和引用类型的值 JavaScript变量可以用来保存两种类型的值:基本类型值和引用类型的值。 基本...

  • 引用类型对象拷贝

    1.引用类型有哪些?非引用类型有哪些 JavaScript数据分为基本类型值和引用类型值基本类型值(数值、布尔值、...

  • JS中实现浅拷贝和深拷贝

    (一)JS中基本类型和引用类型 JavaScript的变量中包含两种类型的值:基本类型值 和 引用类型值,在内存中...

  • 2018-07-05

    javascript 普通类型和对象的区别 1、基本数据类型和引用数据类型ECMAScript包括两个不同类型的值...

  • JavaScript变量、作用域和内存问题

    JavaScript类型松散,值和类型都可以改变 基本类型和引用类型的值 ECMAScript变量包括基本类型和引...

  • 第4章: 变量、作用域和内存问题

    4.1 基本类型和引用类型的值 区别:基本类型传递的是值, 操作的也是值本身.引用类型传递是对象的引用(也叫地址 ...

  • 变量、作用域和内存问题

    javascript的变量和其他语言的变量有很大区别。 基本类型和引用类型的值 ECMAScript变量可能包含两...

网友评论

    本文标题:JavaScript 基本类型和引用类型的值的区别

    本文链接:https://www.haomeiwen.com/subject/dgpqixtx.html