1. 程式人生 > >js基本語法之 值類型(數據類型)(變量類型)

js基本語法之 值類型(數據類型)(變量類型)

ring 定義 bsp log padding console object eight 因此

一.不可改變的原始值(棧數據)(五個)

數字(number),字符串(string),布爾值(boolean),undefined,null

其中;undefined是未定義的意思,而null是空的意思,他們倆的區別在於,null有值,不過這個值是空值,而undefined是未定義,完全沒有值的意思。null一般用作占位。

var a = 4;
var b = a;
a = 10;
console.log(b);//4
//原始值是把一個值a放到另一個值b裏面,改了第一個值a,第二個之值b不變

二.引用值(堆數據)

數組(array),對象(object),函數(function)

註意:只要對變量進行賦值就會進行內存的重新申請

1.

var arr = [1, 2];
var arr1=arr;
arr.push(3);
console.log(arr1); //[1, 2, 3]
//引用值時把第一個值放到第二個值裏面,改變第一個值,第二個值也改變
//引用值是在棧內存裏面存放堆的地址,拷貝的是地址,所以改變了arr,實際上是改變了arr指向的地址內存放的內容,而arr和arr1指向同一個地址,故arr1也跟著變

地址

變量

存儲值

0x0001

arr

[1,2] [1,2,3] <--arr.push(3)

0x0002

arr1

0x0001

2.

var arr = [1,2];
var arr1 = arr; arr = [1,3]; console.log(arr1);//[1,2]; //arr = [1,3]實際上是在堆內另建了一個地址,arr指向了新的地址,而arr1還是指向原來的地址,故arr1值不變

地址

變量

存儲值

0x0001

arr

[1,2]

0x0002

arr1

0x0001

0x0003

arr

[1,3]

3.

var a = {n:1};
var b = a;
a.n= a={m:1};
console.log(a);//{m:1}
console.log(b);//{n:{m:1}}

1.var a = {n:1},在內存中申請兩個地址,分別存放a和n;

2.var b = a;申請一個地址存放b,值指向a的地址;

3.a.n= a={m:1};

(1)(這裏對變量進行了賦值,因此要重新申請內存)先申請了內存地址n(0x0004)和a(0x0005);由於n值占用了新的內存,故0x0001處 存儲值由n:0x0002變為n:0x0004;

(2)賦值;a={m:1},申請m地址(0x0006),

因此:a : {m:0x0006}--->{m:1}

   b: {0x0001}--->{n:0x0004}---->{ n:0x0005}---->{n:{m:0x0006}}--->{n:{m:1}}

地址

變量

存儲值

0x0001

a (1)

n:0x0002 n:0x0004 ---(1)

0x0002

-n- (1)

1

0x0003

b

0x0001

0x0004

n (1)

0x0005

0x0005

a (1)

m:0x0006 (2)

0x0006

m (2)

1 (2)

js基本語法之 值類型(數據類型)(變量類型)