• JavaScript 数据类型和数据结构


    动态类型

    JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。这也意味着你可以使用同一个变量保存不同类型的数据:

    var foo = 42;    	// foo is a Number now
    foo = "bar"; 		// foo is a String now
    foo = true;  		// foo is a Boolean now
    

    数据类型

    最新的 ECMAScript 标准定义了 8 种数据类型:

    7种基本数据类型:BooleanNullUndefinedNumberBigIntStringSymbol

    1种引用数据类型:Object

    基本数据类型

    基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问

    var a = 10
    var b = a;
    b = 20
    console.log(a) 		// 10值
    console.log(b); 	// 20值
    

    赋值过程:

    img

    引用数据类型

    引用数据类型是存放在堆内存中的对象。变量其实是保存的在栈内存中的一个指针(保存的是堆内存中的引用地址,这个指针指向堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。

    注意:与其他语言的不同是,JavaScript没有按引用传递,而是传递引用类型的参数(是按值传递),不可以直接访问堆内存空间中的位置和操作堆内存空间,只能操作对象在栈内存中的引用地址。

    var obj1 = new Object();
    var obj2 = obj1;
    obj2.name = "测试名称";
    console.log(obj1.name); 	// 测试名称
    console.log(obj2.name); 	// 测试名称
    

    赋值过程:

    img

    综合案例:

    var a = [1,2,3,4]
    var b = a	      //引用类型传址,对象中传给变量的数据是引用类型的,会存储在堆中
    var c = a[0]	      //基本类型传值,把对象中的属性/数组中的数组项赋值给变量,这时变量C是基本数据类型,存储在栈内存中;改变栈中的数据不会影响堆中的数据
    console.log(b)	//1,2,3,4
    console.log(c)	//1
    
    //改变数值 
    b[3] = 6;
    c = 7;
    console.log(a[3]);	//6 
    console.log(a[0]);	//1
    

    赋值过程:

    无标题

    总结

    ​ 变量a为引用类型变量数组,在栈中存储的堆内存中的引用地址。当把变量a赋值给变量b时,传递的值为堆内存中的引用地址。此为传址

    ​ 当把变量a[0]赋值给变量c时,其传递的实质为基本类型赋值,会将变量a[0]值直接赋值给c,变量a与变量c并未进行引用地址的传递。此为传值

    参考原文:

      https://www.cnblogs.com/huangshikun/p/6510482.html

      https://www.cnblogs.com/cxying93/p/6106469.html

  • 相关阅读:
    美国州名来源
    SQL Constraint/Index
    英语中的 姓氏/Surname
    GNU glibc
    英语人名探源/字母升序排列
    About 'atoi'
    封装一个类似jquery的ajax方法
    函数柯里化
    AngularJS实现TodoMVC
    webpack简单使用
  • 原文地址:https://www.cnblogs.com/Scooby/p/13522975.html
Copyright © 2020-2023  润新知