码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript的基本类型和引用类型的值。

时间:2016-01-05 22:10:27      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

ECMAScript变量包含两种数据类型的值:基本类型值引用类型值
 
在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。
基本类型:string,number,boolean,undefined和null。
     基本类型值:简单的数据段,保存在栈内存中同时占有固定大小的空间,按值访问,因此可以操作保存在变量中的实际的值。
引用类型:Object,Array,Date
    引用类型值: 由多个值构成的对象,在栈内存中变量保存的实际上是一个地址,这个地址指向堆内存中所保存的对象。对象的大小不固定(数组可以动态增加),所以不能存放在栈内存中,但是栈内存中存放的地址是固定的。当查询引用类型的变量时,首先从栈中读取内存地址,然后"顺杆爬"地找到保存在堆中的对象。这种方式一般称为按"引用"访问,所以在操作对象时,实际上是在操作对象的引用而不是实际的对象。
 
从一个变量向另一个变量复制基本类型的值,会创建这个值得副本。此后这两个变量可以参与任何操作而不会相互影响。
var value1 = 10;
var value2 = value1;
value2 += 20;
console.log(value1);
//10 console.log(value2); //30
 
从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象(对象保存在堆内存中)。
var obj1 = {};
var obj2 = obj1;
obj1.name = "我是你家隔壁小曾";
console.log(obj1.name);
//我是你家隔壁小曾 console.log(obj2.name); //我是你家隔壁小曾
在栈内存中包含引用类型的变量实际上包含的并不是对象本身,而是一个指向该对象的指针(也可以称之为地址)。
 
要检测一个变量是否为基本数据类型时,我们可以使用 typeof操作符
  
 1 var str = "hello world";
 2 var num = 100;
 3 var boo = true;
 4 var u;
 5 var fn = function(){};
 6 var n = null;
 7 var obj = {};
 8 var arr = [];
10 typeof str // "string" 11 typeof num // "number" 12 typeof boo // "boolean" 13 typeof u // "undefined" 14 typeof fn // "function" 15 typeof n // "object" 16 typeof obj // "object" 17 typeof arr // "object"

从上面的例子中不难看出 typeof 操作符是确定一个变量是字符串、布尔、数值,还是undefined的最佳工具。但如果变量的值是一个对象或null,则 typeof 操作符会统一返回 "object"。

通常我们并不想知道某个值是对象,其实我们是想知道它具体是什么类型的对象,这个时候我们可以使用 instanceof 操作符。

var arr = [];
var obj = {};
var date = new Date();
var fn = function(){};
var str = new String(‘123‘);

console.log(arr instanceof Array);      //true
console.log(obj instanceof Object);     //true
console.log(date instanceof Date);      //true
console.log(fn instanceof Function);    //true
console.log(str instanceof String);     //true

如果变量是给定引用类型的实例,那么 instanceof 操作符就会返回 true。而且所有引用类型的值都是Object的实例。因此,检测一个引用类型值和Object构造函数时,instanceof 操作符始终返回true。

如果使用 instanceof操作符检测基本类型的值,则该操作符始终返回false,因为基本类型值不是对象。

每一点滴小的知识积累,才会造就质的飞跃,坚持和热爱。

JavaScript的基本类型和引用类型的值。

标签:

原文地址:http://www.cnblogs.com/jimmzy/p/5103736.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!