JavaScript学习笔记第一天——基本数据类型(值类型)和引用类型

一、JavaScript值类型和引用类型有哪些 

(1)值类型:数值、布尔值、null、undefined、string(字符串在赋值运算中会按引用类型的方式来处理)。 

(2)引用类型:对象、数组、函数。 

 

值类型一般是一些固定的字节大小的;引用类型往往存储数组,对象,函数这些实现很难知道占据内存大小的量。

 

二、如何理解值类型和引用类型及举例 

我们可以用“连锁店”和“连锁店钥匙”来理解。 

(1)值类型理解:变量的交换等于在一个新的地方按照连锁店的规范标准(统一店面理解为相同的变量内容)新开一个分店,这样新开的店与其它旧店互不相关、各自运营。

【值类型例子】

 

function chainStore() { 
   var store1='Nike China'; 
   var store2=store1; 
   store1='Nike U.S.A.'; 
   alert(store2); //Nike China 

chainStore(); 


//把一个值类型(也可以叫基本类型)store2传递给另一个变量(赋值)时,其实是分配了一块新的内存空间,因此改变store1的值对store2没有任何影响,因为它不像引用类型,变量的交换其实是交换了指像同一个内容的地址。

 

(2)引用类型理解:变量的交换等于把现有一间店的钥匙(变量引用地址)复制一把给了另外一个老板,此时两个老板同时管理一间店,两个老板的行为都有可能对一间店的运营造成影响。

【引用类型例子】

function chainStore() { 

   var store1=['Nike China']; 
   var store2=store1; 
   alert(store2[0]); //Nike China 
   store1[0]='Nike U.S.A.'; 
   alert(store2[0]); //Nike U.S.A. 

chainStore(); 
//在上面的代码中,store2只进行了一次赋值,理论上它的值已定,但后面通过改写store1的值,发现store2的值也发生了改变,这正是引用类型的特征,也是我们要注意的地方。

 

基本数据类型使用值(value)的方式进行比较                

var a = "Roger";
var b = "Roger";
 
if (a == b) // => true
if (a === b) // => true

引用类型通过引用(reference)进行比较

var a = { x: 1, y: 7 };
var b = { x: 1, y: 7 };
if (a == b) // => false
if (a === b) // => false
 
b = a;
if (a == b) // => true
if (a === b) // => true

基本数据类型使用值(value)的方式进行传递

function foo(bar) {
  bar = 2;
}
var a = 1;
foo(a);
alert(a); // => 1

引用类型通过引用(reference)方式进行传递

function foo(bar) {
  bar.x = 2;
}
var a = { x: 1, y: 7 };
foo(a);
alert(a.x); // => 2
 
注意  去引用之后将不能再修改原来的值  (此时bar指向了{x:2}这个对象,不再指向{x:1,y:2})
function foo(bar) {
     bar = { x: 2 };
}
var a = { x: 1, y: 7 };
foo(a);
alert(a.x); // still 1

 

posted @ 2014-06-17 15:32  刺客隐  阅读(132)  评论(0编辑  收藏  举报