1. 程式人生 > >js 值類型和引用類型

js 值類型和引用類型

col 復制 也會 bool null pan pre ceo 不一定

今天來給大家介紹一下數據類型的另一種解讀,值類型和引用類型(及簡單類型和復合類型)

一、基本概念

  ECMAscript變量包括兩種不同的數據類型的值,一種叫做簡單類型(值類型),指的是簡單的數據段,另一種叫做復合數據類型(引用類型),是由多個值構成的對象。

  在js的數據類型中,number,boolean,string,null和undefined都屬於值類型,而函數和對象屬於引用類型。

二、數據類型判斷

  基本類型:typeof

  引用類型:instanceof

var a=10;
console.log(typeof a);
//number

var b=true;
console.log(
typeof b); //boolean var arr=[]; console.log(arr instanceof Array); //true var obj={}; console.log(obj instanceof Object); //true; var fun=function(){ var i=0; console.log(i); } console.log(fun instanceof Function) //true

三、存儲機制

  基本數據類型:是存放於棧內存中,包括變量標識符和變量的值,基本數據類型復制後開辟的是新的內存,兩個變量互不影響。

  引用類型:保存在堆內存中,是對地址的引用(及指針),所以變量復制後的兩個變量指向的還是同一個對象,因此對其中一個進行操作,另一個結果也會受到影響。

  先給大家舉點例子吧

var num1=10;
var num2=num1;
num2-=2;
console.log(num1,num2);
//10,8

var arr1=[1,2,3];
var arr2=arr1;
arr2.push(4);
console.log(arr1,arr2);
//[1,2,3,4],[1,2,3,4]

var person1={
name:‘zhangsan‘,
age:20
}
var person2=person1;
person2.name=‘lisi‘;
console.log(arr1,arr2);
//{name:‘lisi‘,age:20},{name:‘lisi‘,age:20}

四、創建對象實例的方法

  1,使用new操作符後跟Object構造函數

  2,字面量

 

var obj=new Object();//
var obj2={};
console.log(obj,obj2);
//{},{}     console.log(obj==obj2)  false  堆內存,不同地址
/獲取
//以及點表示法和方括號表示法
var person1={
name:‘zhangsan‘,
age:20
}
console.log(person1.name)//zhangsan
console.log(person1[‘name‘])//zhangsan

  ps:點表示法和方括號表示法的區別

  1,能用點表示法標識的一定可以用方括號表示,但能用方括號表示的,不一定能用點表示

  2,方括號表示法可以用變量名做屬性名,點表示法不能

  3,方括號可以用純數字表示屬性,點表示法不能

  4,方括號表示法可以用js的關鍵字和保留字作為屬性,點表示法不能

  此處我就不向大家要一一舉例啦,這裏還是很好理解的,總之就是方括號表示法的功能強於點表示法,但是一般我們用點表示法註意下特殊的就好了。

js 值類型和引用類型