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检测引用类型是什么类型对象
- /**
- * Created by Administrator on 2017-5-25.
- */
- /*
- * --------------------------------------------------------第4章 变量,作用域和内存问题 --------------------
- * 4.1 基本类型和引用类型的值
- *
- * 概念:基本类型值:指的是简单的数据段;引用类型值:指那些可能由多个值构成的对象.
- * 基本数据类型:Undefined,Null,Bollean,Number和String,这5种数据类型是按值访问的,因为可以操作保存在变量中的实际的值
- * 引用变量:是保存在内存中的对象,JavaScript不允许直接访问内存中的位置,在操作对象时,实际上是在操作对象的引用而不是实际的对象,所以引用类型的值是按引用访问的.
- * */
-
-
- /*
- * 4.1.1 动态属性
- * 定义基本类型值和引用类型值
- * 1.对于引用类型的值可执行的操作,可以添加属性和方法
- *
- * */
-
- // 1.引用类型的值添加属性和方法;
- var person = new Object();
- person.name = "武松"; //为引用类型添加属性
- console.log(person.name); //
-
-
- /*
- * 4.1.2 复制变量
- * 1.基本类型值得复制:会在变量对象上创建一个新值,然后把该值复制到位为新变量分配的位置上,且这两个变量可以参与任何操作而互不影响
- * 2.变量对象的复制:复制时会将存储在变量对象中的值复制一份放到新变量分配的空间中,不同的是,这个值得副本实际上是一个指针,指针指向存储在堆中的一个对象,复制操作结束后,两个变量实际上将引用同一个对象,并会随着其中任意一个值得改变而改变.
- *
- * */
-
- //1.基本类型的复制
- var num1 = 5; //num1中保存的值是5
- var num2 = num1; //num1的值来初始化num2,num2中的值也是5,但,num2中的5和num1中的5是完全独立的,num2中的值只是num1的副本,num2的值并不会随num1的改变而改变.
-
- //2.变量对象的复制
- var obj1 = new Object(); //创建一个变量对象
- var obj2 = obj1;
- obj1.name = "武松";
- console.log(obj2.name); //原理:指针都指向了堆内存中的同一个对象
-
- /*
- * 4.13 传递参数
- * 概念:在向参数传递基本类型的值时,被传递的值会复制给一个局部变量;在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数外部
- * 1.基本类型的值传递;
- * 2.向参数传递引用类型的值
- * 3.引用类型在局部作用域和全局作用域中的表现,证明对象是按值传递的
- *
- * */
-
- // 1.基本类型的值传递
- function addTen (num) {
- num += 10;
- return num;
- }
- var count = 20;
- var result = addTen(count);
- console.log(count); //20
- console.log(result); //30
-
- //2.向参数传递引用类型的值
- function setName(obj) {
- obj.name = "武松";
- }
- var person = new Object(); //创建一个对象
- setName(person); //把这个对象作为参数传递到函数中去
- console.log(person.name); //武松
- //3.引用类型的值在局部作用域和全局作用域中的表现,证明对象是按值传递的
- function setName(obj) {
- obj.name = "武松";
- obj = new Object();
- obj.name = "宋江";
- }
- var person = new Object();
- setName(person);//如果person是按引用传递的,那么name属性就会指向"宋江"这个新对象;
- console.log(person.name); //武松
-
- /*
- * 4.1.4 检测类型
- * 检测一个变量是不是基本数据类型,typeof操作符是最佳工具
- * 1.typeof操作符确定一个变量是:字符串,数值,布尔,undefined;如果变量的值是一个对象或者null则返回object;
- * 2.instanceof检测引用类型是什么类型对象
- * */
- //1.typeof操作符确定一个变量是:字符串,数值,布尔,undefined;如果变量的值是一个对象或者null则返回object
- var name = "武松";
- var sex = true;
- var age = 19;
- var weight = null;
- var height;
- var student = new Object();
-
- console.log(typeof name); //string
- console.log(typeof sex); // boolean
- console.log(typeof age); //number
- console.log(typeof weight); //object
- console.log(typeof height); //undefined
- console.log(typeof student); //object
-
- //2.instanceof检测引用类型是什么类型的对象
- var constructor = new Object();
- var ary = new Array();
- //esult = variable instanceof constructor;
- console.log( constructor instanceof Object); //true
- console.log(ary instanceof Array); //true
-
-
-
每天叫醒的不是闹钟,而是梦想