JS中的數(shù)據(jù)類型

[JS中的數(shù)據(jù)類型]

js中有五種基本數(shù)據(jù)類型(Number,String,Boolean,Undefined,Null),和一種復(fù)雜數(shù)據(jù)類型(Object)。

typeof 操作符

由于js中的變量是松散類型的,所以它提供了一種檢測當(dāng)前變量的數(shù)據(jù)類型的方法,也就是typeof關(guān)鍵字.

typeof 123   //Number

typeof 'abc'  //String

typeof true //Boolean

typeof undefined //Undefined

typeof null //Object

typeof { } //Object

typeof [ ] //Object

typeof console.log() //Function

null類型進(jìn)行typeof操作符后,結(jié)果是object,原因在于,null類型被當(dāng)做一個(gè)空對象引用。

1.Number類型

Number類型包含整數(shù)和浮點(diǎn)數(shù)(浮點(diǎn)數(shù)數(shù)值必須包含一個(gè)小數(shù)點(diǎn),且小數(shù)點(diǎn)后面至少有一位數(shù)字)兩種值。

NaN:非數(shù)字類型。特點(diǎn):① 涉及到的 任何關(guān)于NaN的操作,都會返回NaN ② NaN不等于自身。

isNaN() 函數(shù)用于檢查其參數(shù)是否是非數(shù)字值。

isNaN(123) //false isNaN("hello") //true

2.String類型

字符串有l(wèi)ength屬性。

字符串轉(zhuǎn)換:轉(zhuǎn)型函數(shù)String(),適用于任何數(shù)據(jù)類型(null,undefined 轉(zhuǎn)換后為null和undefined);toString()方法(null,defined沒有toString()方法)。

3.Boolean類型

該類型只有兩個(gè)值,true和false

4.Undefined類型

只有一個(gè)值,即undefined值。使用var聲明了變量,但未給變量初始化值,那么這個(gè)變量的值就是undefined。

5.Null類型

null類型被看做空對象指針,前文說到null類型也是空的對象引用。

6.Object類型

js中對象是一組屬性與方法的集合。這里就要說到引用類型了,引用類型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)據(jù)和功能組織在一起。引用類型有時(shí)候也被稱為對象定義,因?yàn)樗鼈兠枋龅氖且活悓ο笏哂械膶傩院头椒ā?/p>

三大引用類型

1.Object類型

我們看到的大多數(shù)類型值都是Object類型的實(shí)例,創(chuàng)建Object實(shí)例的方式有兩種。

第一種是使用new操作符后跟Object構(gòu)造函數(shù),如下所示

var person = new Object();

person.name = "Micheal";

person.age = 24;

第二種方式是使用對象字面量表示法,如下所示

var person = {

name : "Micheal",

age : 24

};

2.Array類型

數(shù)組的每一項(xiàng)可以用來保存任何類型的數(shù)據(jù),也就是說,可以用數(shù)組的第一個(gè)位置來保存字符串,第二個(gè)位置保存數(shù)值,第三個(gè)位置保存對象....另外,數(shù)組的大小是可以動(dòng)態(tài)調(diào)整的。

創(chuàng)建數(shù)組的基本方式有兩種

第一種是使用Array構(gòu)造函數(shù),如下所示

var colors = new Array("red","blue","yellow");

第二種是使用數(shù)組字面量表示法,如下所示

var colors = ["red","blue","yellow"];

3 Function類型

每個(gè)函數(shù)都是Function類型的實(shí)例,而且都與其他引用類型一樣具有屬性和方法。函數(shù)通常是使用函數(shù)聲明語法定義的,如下所示

function sum(num1,num2){

return num1 + num2;

};

這和使用函數(shù)表達(dá)式定義函數(shù)的方式相差無幾。

var sun = function (){

return sum1 + sum2;

};

也就是說,js按照存儲方式分為值類型和引用類型。那么他們的計(jì)算有什么區(qū)別呢?

題目1: var a = 100;

var b = a;

a = 200;

console.log (b);

題目2: var a = {age : 20};

var b = a;

b.age = 21;

console.log (a.age);

題目1的答案是 100,題目2的答案是21,

題目1是簡單的值類型,在從一個(gè)變量向另一個(gè)變量賦值基本類型時(shí),會在該變量上創(chuàng)建一個(gè)新值,然后再把該值復(fù)制到為新變量分配的位置上。

此時(shí),a中保存的值為 100 ,當(dāng)使用 a 來初始化 b 時(shí),b 中保存的值也為100,但b中的100與a中的是完全獨(dú)立的,該值只是a中的值的一個(gè)副本,此后,
這兩個(gè)變量可以參加任何操作而相互不受影響。也就是說基本類型在賦值操作后,兩個(gè)變量是相互不受影響的。

題目2是引用類型,當(dāng)從一個(gè)變量向另一個(gè)變量賦值引用類型的值時(shí),同樣也會將存儲在變量中的對象的值復(fù)制一份放到為新變量分配的空間中。

這時(shí)保存在變量中的是對象在堆內(nèi)存中的地址,所以,與簡單賦值不同,這個(gè)值的副本實(shí)際上是一個(gè)指針,而這個(gè)指針指向存儲在堆內(nèi)存的一個(gè)對象。那么賦值操作后,
兩個(gè)變量都保存了同一個(gè)對象地址,則這兩個(gè)變量指向了同一個(gè)對象。因此,改變其中任何一個(gè)變量,都會相互影響。

因此,引用類型的賦值其實(shí)是對象保存在棧區(qū)地址指針的賦值,因此兩個(gè)變量指向同一個(gè)對象,任何的操作都會相互影響。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,616評論 0 13
  • 簡介 JavaScript 語言的每一個(gè)值,都屬于某一種數(shù)據(jù)類型。JavaScript 的數(shù)據(jù)類型,共有六種。(E...
    zzyo96閱讀 369評論 0 1
  • js中的數(shù)據(jù)類型分6種 1;string 字符串型; 2;Number;數(shù)字型; 在js中數(shù)據(jù)類型就...
    pangzhi閱讀 410評論 0 1
  • `計(jì)算機(jī)顧名思義可以進(jìn)行數(shù)學(xué)計(jì)算的機(jī)器,因此,計(jì)算機(jī)理所當(dāng)然的可以處理各種數(shù)值,但是,計(jì)算機(jī)能夠處理的遠(yuǎn)遠(yuǎn)不只是數(shù)...
    吧啦啦小湯圓閱讀 455評論 0 0
  • 胡歌是我喜歡一個(gè)演員。他扮演的角色都能讓我感受到他的敬業(yè)精神和魅力。在某年的金鷹節(jié)發(fā)表的獲獎(jiǎng)感言讓我動(dòng)容。那...
    教育雜談閱讀 451評論 0 1

友情鏈接更多精彩內(nèi)容