• 2017-5-26基本类型和引用类型的值


    基本类型和引用类型的值

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

      • 概念:基本类型值:指的是简单的数据段;引用类型值:指那些可能由多个值构成的对象.

      • 基本数据类型:Undefined,Null,Bollean,Number和String,这5种数据类型是按值访问的,因为可以操作保存在变量中的实际的值

      • 引用变量:是保存在内存中的对象,JavaScript不允许直接访问内存中的位置,在操作对象时,实际上是在操作对象的引用而不是实际的对象,所以引用类型的值是按引用访问的.

    • 4.1.2 复制变量

      • 1.基本类型值得复制:会在变量对象上创建一个新值,然后把该值复制到位为新变量分配的位置上,且这两个变量可以参与任何操作而互不影响

      • 2.变量对象的复制:复制时会将存储在变量对象中的值复制一份放到新变量分配的空间中,不同的是,这个值得副本实际上是一个指针,指针指向存储在堆中的一个对象,复制操作结束后,两个变量实际上将引用同一个对象,并会随着其中任意一个值得改变而改变.

    • 4.13 传递参数

      • 概念:在向参数传递基本类型的值时,被传递的值会复制给一个局部变量;在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数外部

      • 1.基本类型的值传递;

      • 2.向参数传递引用类型的值

      • 3.引用类型在局部作用域和全局作用域中的表现,证明对象是按值传递的

    • 4.1.4 检测类型

      • 检测一个变量是不是基本数据类型,typeof操作符是最佳工具

      • 1.typeof操作符确定一个变量是:字符串,数值,布尔,undefined;如果变量的值是一个对象或者null则返回object;

      • 2.instanceof检测引用类型是什么类型对象

    1. /** 
    2. * Created by Administrator on 2017-5-25. 
    3. */ 
    4. /* 
    5. * --------------------------------------------------------第4章 变量,作用域和内存问题 -------------------- 
    6. * 4.1 基本类型和引用类型的值 
    7. * 
    8. * 概念:基本类型值:指的是简单的数据段;引用类型值:指那些可能由多个值构成的对象. 
    9. * 基本数据类型:Undefined,Null,Bollean,Number和String,这5种数据类型是按值访问的,因为可以操作保存在变量中的实际的值 
    10. * 引用变量:是保存在内存中的对象,JavaScript不允许直接访问内存中的位置,在操作对象时,实际上是在操作对象的引用而不是实际的对象,所以引用类型的值是按引用访问的. 
    11. * */ 
    12.  
    13.  
    14. /* 
    15. * 4.1.1 动态属性 
    16. * 定义基本类型值和引用类型值 
    17. * 1.对于引用类型的值可执行的操作,可以添加属性和方法 
    18. * 
    19. * */ 
    20.  
    21. // 1.引用类型的值添加属性和方法; 
    22. var person = new Object(); 
    23. person.name = "武松"; //为引用类型添加属性 
    24. console.log(person.name); // 
    25.  
    26.  
    27. /* 
    28. * 4.1.2 复制变量 
    29. * 1.基本类型值得复制:会在变量对象上创建一个新值,然后把该值复制到位为新变量分配的位置上,且这两个变量可以参与任何操作而互不影响 
    30. * 2.变量对象的复制:复制时会将存储在变量对象中的值复制一份放到新变量分配的空间中,不同的是,这个值得副本实际上是一个指针,指针指向存储在堆中的一个对象,复制操作结束后,两个变量实际上将引用同一个对象,并会随着其中任意一个值得改变而改变. 
    31. * 
    32. * */ 
    33.  
    34. //1.基本类型的复制 
    35. var num1 = 5; //num1中保存的值是5 
    36. var num2 = num1; //num1的值来初始化num2,num2中的值也是5,但,num2中的5和num1中的5是完全独立的,num2中的值只是num1的副本,num2的值并不会随num1的改变而改变. 
    37.  
    38. //2.变量对象的复制 
    39. var obj1 = new Object(); //创建一个变量对象 
    40. var obj2 = obj1; 
    41. obj1.name = "武松"
    42. console.log(obj2.name); //原理:指针都指向了堆内存中的同一个对象 
    43.  
    44. /* 
    45. * 4.13 传递参数 
    46. * 概念:在向参数传递基本类型的值时,被传递的值会复制给一个局部变量;在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数外部 
    47. * 1.基本类型的值传递; 
    48. * 2.向参数传递引用类型的值 
    49. * 3.引用类型在局部作用域和全局作用域中的表现,证明对象是按值传递的 
    50. * 
    51. * */ 
    52.  
    53. // 1.基本类型的值传递 
    54. function addTen (num)
    55. num += 10
    56. return num; 

    57. var count = 20
    58. var result = addTen(count); 
    59. console.log(count); //20 
    60. console.log(result); //30 
    61.  
    62. //2.向参数传递引用类型的值 
    63. function setName(obj)
    64. obj.name = "武松"

    65. var person = new Object(); //创建一个对象 
    66. setName(person); //把这个对象作为参数传递到函数中去 
    67. console.log(person.name); //武松 
    68. //3.引用类型的值在局部作用域和全局作用域中的表现,证明对象是按值传递的 
    69. function setName(obj)
    70. obj.name = "武松"
    71. obj = new Object(); 
    72. obj.name = "宋江"

    73. var person = new Object(); 
    74. setName(person);//如果person是按引用传递的,那么name属性就会指向"宋江"这个新对象; 
    75. console.log(person.name); //武松 
    76.  
    77. /* 
    78. * 4.1.4 检测类型 
    79. * 检测一个变量是不是基本数据类型,typeof操作符是最佳工具 
    80. * 1.typeof操作符确定一个变量是:字符串,数值,布尔,undefined;如果变量的值是一个对象或者null则返回object; 
    81. * 2.instanceof检测引用类型是什么类型对象 
    82. * */ 
    83. //1.typeof操作符确定一个变量是:字符串,数值,布尔,undefined;如果变量的值是一个对象或者null则返回object 
    84. var name = "武松"
    85. var sex = true
    86. var age = 19
    87. var weight = null
    88. var height; 
    89. var student = new Object(); 
    90.  
    91. console.log(typeof name); //string 
    92. console.log(typeof sex); // boolean 
    93. console.log(typeof age); //number 
    94. console.log(typeof weight); //object 
    95. console.log(typeof height); //undefined 
    96. console.log(typeof student); //object 
    97.  
    98. //2.instanceof检测引用类型是什么类型的对象 
    99. var constructor = new Object(); 
    100. var ary = new Array(); 
    101. //esult = variable instanceof constructor; 
    102. console.log( constructor instanceof Object); //true 
    103. console.log(ary instanceof Array); //true 
    104.  
    105.  
    106.  
    每天叫醒的不是闹钟,而是梦想
  • 相关阅读:
    CSS之定位
    选择器小结
    ASP.NET Web API + Elasticsearch 6.x 快速做个全文搜索
    获取服务端https证书
    使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错
    MVC和WebForm的优缺点比较
    C#之VS开发工具快捷键大全
    Scrum敏捷开发之扫盲篇
    Asp.net 中数据量较小插入数据库
    xml解析
  • 原文地址:https://www.cnblogs.com/shuiyaodongwu310988929/p/6907147.html
Copyright © 2020-2023  润新知