js中的基本型別和引用型別

2021-09-17 03:44:28 字數 2553 閱讀 4026

基本資料型別:按值訪問,可操作儲存在變數中的實際的值。基本型別值指的是簡單的資料段。

基本資料型別有這六種:undefined、null、string、number、boolean、symbol(es6)。

引用型別:當複製儲存著物件的某個變數時,操作的是物件的引用,但在為物件新增屬性時,操作的是實際的物件。引用型別值指那些可能為多個值構成的物件。

引用型別有這幾種:object、array、regexp、date、function、特殊的基本包裝型別(string、number、boolean)以及單體內建物件(global、math)。

對於基本型別值和引用型別值的區別:

① 引用型別值可新增屬性和方法,而基本型別值則不可以。

//為引用型別值新增屬性

var p = new object();

p.age=11;

alert(p.age);//11

//為基本型別值新增屬性

var name = 'a';

name.age = 11;

alert(name.age); //undefined

② 在複製變數值時,基本型別會在變數物件上建立乙個新值,再複製給新變數。此後,兩個變數的任何操作都不會影響到對方。而引用型別在建立乙個物件型別時,計算機會在記憶體中開闢乙個空間來存放值,我們要找到這個空間,需要知道這個空間的位址,變數存放的就是這個位址,複製變數時其實就是將位址複製了乙份給新變數,兩個變數的值都指向儲存在堆中的乙個物件,也就是說,其實他們引用了同乙個物件,改變其中乙個變數就會影響到另乙個變數。

//基本型別值

var a = 'a';

var b = a;

a = 'b';

alert(b); //a

引用型別值,以陣列為例:

//引用型別值,以陣列為例

//1.對其中乙個變數直接賦值不會影響到另乙個變數(並未操作引用的物件)

var a = [1,2,3];

var b = a;

a = [1,2,3,4];

alert(a);//1,2,3,4

alert(b); //1,2,3

//2.使用push(操作了引用的物件)

var a = [1,2,3];

var b = a;

a.push(4);

alert(a);//1,2,3,4

alert(b); //1,2,3,4

傳遞引數:按值傳遞,將函式外部的值複製給函式內部的引數(乙個區域性變數),當對區域性變數進行操作時,區域性變數的變化會反應在函式外部,但是這並不會影響函式外部的值。

function add(a)

var num = 10;

var result = add(num);

alert(num); //10

alert(result); //20

當然,使用物件時可能會不好理解:

function setname(obj)

var p = new object();

setname(p);

alert(p.name); //a

明明引數是按值傳遞的,為什麼建立的p例項也能獲取到在setname()中新增的name屬性呢?

因為obj和p引用的是同乙個物件,即便按值傳遞,obj也會按引用來訪問同乙個物件。看一下下面的例子就能清楚了。

function setname(obj)

var p = new object();

var p2 = setname(p);

alert(p.name); // a

alert(p2.name); // b

在函式內部重寫obj物件,此時obj物件引用的是乙個區域性物件,外部的p還是原始的引用,因此不會改變。

檢測型別:

typeof:確定變數是字串、數值、布林值還是undefined的最佳工具。

var num = 1;

var a = 'a';

var b;

var flag = true;

var o = null;

var fn = function(){};

var rg = /hello/;

alert(typeof num); //number

alert(typeof a); //string

alert(typeof b); //undefined

alert(typeof flag); //boolean

alert(typeof o); //object

alert(typeof fn); //function

alert(typeof rg); //object(sarari5、chrome7前返回function)

instanceof :判斷是否是某個物件型別。

var a = [1,2,3];

alert(a instanceof object); //true

alert(a instanceof array); //true

alert(a instanceof regexp); //false

js 引用型別和基本型別

js中的資料型別有以下幾種 基本型別 number boolean string undefined null symbol 引用型別 object array,function,date,正則物件,json物件 基本型別的資料是存放在棧記憶體中的,而引用型別的資料是存放在堆記憶體中的 複製變數值 ...

js 引用型別和基本型別

js中的資料型別有以下幾種 number boolean undefined object function string null 基本型別 number boolean string undefined null 引用型別 object function 基本型別的資料是存放在棧記憶體中的,而引...

js中基本型別和引用型別理解

一 基本型別有6種。普通基本型別 null undefined symbol 特殊基本型別 object boolean number 二 引用型別。object array regexp date function。三 兩者的區別 引用型別值可以新增屬性和方法,而基本型別值不可以。1 基本型別。基...