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

javascript值类型和引用类型

时间:2015-07-09 11:02:47      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

一、引言

     ECMAScript包含两个不同类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段;引用类型值指由多个值构成的对象。当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值。(《javascript高级程序设计(第3版)》)

二、基本类型值和引用类型值

(1)基本类型值

  包括Undefined、Null、Boolean、Number和String.这5种基本数据类型是按值访问的,操作保存在变量中的实际的值。

  例子:

var aa = 10;
var bb =aa;
console.log(aa); //10
console.log(bb); //10

bb=11;
console.log(aa); //10
console.log(bb); //11

上面的例子,bb获取值是aa值的一份拷贝,虽然,两个变量的值是相等,但是两个变量分别保存了一份基本数据类型值,完全是独立的。所以,当bb的值改变时,aa的值依然是10;

演示:

技术分享

 

(2)引用类型值

包括Function、Object、Array。引用类型变量的复制:复制的是存储在栈中的指针,将指针复制到栈中未新变量分配的空间中,而这个指针副本和原指针执行存储在堆中的同一个对象。

例子:

var a=[1,2,3]; 
var b=a;
alert(b);//1,2,3

a[0]=100; 
alert(b); //100,2,3 

 对象是存放在内存中的堆。上面的例子,b是a的一份拷贝,而a和b其实是存储在栈中的地址,指向数组对象的地址,复制操作结束后,a,b两个变量实际上将引用同一个对象,因此改变其中的一个,将影响另一个。

演示:

 技术分享

三、类型检测

 typeof 可以检测出Undefined、Null、Boolean、Number、String和Object。但是却无法检测出是否是array,那么还有一个检测方法 instanceof。

var s = ‘hello‘;
var n =1;
var u;
var b =true;
var nu=null;
var o =new object();
var a = new Array();

console.log(typeof s); //string
console.log(typeof n); //number
console.log(typeof u); //undefine
console.log(typeof b); //boolean
console.log(typeof nu); //object
console.log(typeof o); //object
console.log(typeof a); //object

console.log(o instanceof Object); //true 
console.log(a instanceof Array); //true 
console.log(o instanceof RegExp); //false


  

 四、问题

    那么对于引用类型的数据,该怎么备份?难道把数组变为基本类型,这个问题我暂时没有找到答案。

javascript值类型和引用类型

标签:

原文地址:http://www.cnblogs.com/helloparty/p/4629386.html

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