JavaScript數據類型有哪些

1 JavaScript數據類型

????????js 數據類型一共有8中分別是Undefined、null、number、boolean、string、arry、object、function。但是它們又有一下劃分。

????????ECMAScript中有5中簡單數據類型(也稱為基本數據類型):?Undefined、Null、Boolean、Number、String。還有1中復雜的數據類型————Object,Object本質上是由一組無序的名值對組成的。

????????其中Undefined、Null、Boolean、Number都屬于基本類型。Object、Array和Function則屬于引用類型,String有些特殊,具體的會在下面展開分析。


1.1 JavaScript變量

????????ECMAScript中用var關鍵字來定義變量,因為js是弱類型的,所以無法確定變量一定會存儲什么值,也就不知道變量到底會是什么類型,而且變量的類型可以隨時改變。這就是ECMAScript是松散類型的來由,所謂松散類型就是可以用來保存任何類型的數據。

ps:

? ??????es6中新增了let命令來聲明變量、const命令聲明一個只讀的常量。

? ??????let的用法類似于var,但是所聲明的變量,只在let命令所在的代碼塊內有效。

? ??????const一旦聲明,常量的值就不能改變。

? ??????關于let、const這里不做展開討論,可以參考?阮一峰 - ECMAScript 6 入門

typeof 操作符

????????由于js中的變量是松散類型的,所以它提供了一種檢測當前變量的數據類型的方法,也就是typeof關鍵字.

????????通過typeof關鍵字,對這5種數據類型會返回下面的值(以字符串形式顯示)

? ? ? ? typeof(未定義變量) = undefined

? ? ? ? typeof(變量是布爾值) = Boolean

? ? ? ? typeof(這個值是字符串) = string

? ? ? ? typeof(這個值是數字類型) = number

? ? ? ? typeof(這個值是null或者是object) = object

1.2 Undefined

????????Undefined類型只有一個值,即特殊的undefined。在使用var聲明變量但未對其加以初始化時,這個變量的值就是undefined。

1.3 Null

????????Null類型是第二個只有一個值的數據類型,這個特殊的值是null。從邏輯角度來看,null值表示一個空對象指針,而這也正是使用typeof操作符檢測null時會返回object的原因。

var car=null; console.log( typeofcar );// "object"

????????如果定義的變量準備在將來用于保存對象,那么最好將該變量初始化為null而不是其他值。這樣一來,只要直接檢測null值就可以知道相應的變量是否已經保存了一個對象的引用了。

例如:

if ( car != null ){ //對car對象執行某些操作 }

????????實際上,undefined值是派生自null值的,因此ECMA-262規定對它們的相等性測試要返回true。

console.log(undefined==null);//true

????????盡管null和undefined有這樣的關系,但它們的用途完全不同。無論在什么情況下都沒有必要把一個變量的值顯式地設置為undefined,可是同樣的規則對null卻不適用。換句話說,只要意在保存對象的變量還沒有真正保存對象,就應該明確地讓該變量保存null值。這樣做不僅可以體現null作為空對象指針的慣例,而且也有助于進一步區分null和undefined。

1.4 Boolean

????????該類型只有兩個字面值:true和false。這兩個值與數字值不是一回事,因此true不一定等于1,而false也不一定等于0。

????????雖然Boolean類型的字面值只有兩個,但JavaScript中所有類型的值都有與這兩個Boolean值等價的值。要將一個值轉換為其對應的Boolean值,可以調用類型轉換函數Boolean(),例如:

va rmessage = 'Hello World'; var messageAsBoolean = Boolean(message);

????????在這個例子中,字符串message被轉換成了一個Boolean值,該值被保存在messageAsBoolean變量中。可以對任何數據類型的值調用Boolean()函數,而且總會返回一個Boolean值。至于返回的這個值是true還是false,取決于要轉換值的數據類型及其實際值。下表給出了各種數據類型及其對象的轉換規則。

var message = 'Hello World'; if ( message ) { alert( "Value is true" ); }

????????運行這個示例,就會顯示一個警告框,因為字符串message被自動轉換成了對應的Boolean值(true)。由于存在這種自動執行的Boolean轉換,因此確切地知道在流控制語句中使用的是什么變量至關重要。

ps:使用!!操作符轉換布爾值

????????!!一般用來將后面的表達式強制轉換為布爾類型的數據(boolean),也就是只能是true或者false;

????????對null與undefined等其他用隱式轉換的值,用!操作符時都會產生true的結果,所以用兩個感嘆號的作用就在于將這些值轉換為“等價”的布爾值;

var foo; alert( !foo );//undifined? 情況下,一個感嘆號返回的是true;??

alert ( !goo );//null? 情況下,一個感嘆號返回的也是true;??

var o = { flag : true }; var est= !!o.flag;//等效于var test=o.flag||false;? alert(test);

????????這段例子,演示了在undifined和null時,用一個感嘆號返回的都是true,用兩個感嘆號返回的就是false,所以兩個感嘆號的作用就在于,如果明確設置了變量的值(非null/undifined/0/”“等值),結果就會根據變量的實際值來返回,如果沒有設置,結果就會返回false。

????????還有其他的小技巧,可以參考這12個JavaScript技巧

1.5 Number

????????這種類型用來表示整數和浮點數值,還有一種特殊的數值,即NaN(非數值 Not a Number)。這個數值用于表示一個本來要返回數值的操作數未返回數值的情況(這樣就不會拋出錯誤了)。例如,在其他編程語言中,任何數值除以0都會導致錯誤,從而停止代碼執行。但在JavaScript中,任何數值除以0會返回NaN,因此不會影響其他代碼的執行。

????????NaN本身有兩個非同尋常的特點。首先,任何涉及NaN的操作(例如NaN/10)都會返回NaN,這個特點在多步計算中有可能導致問題。其次,NaN與任何值都不相等,包括NaN本身。例如,下面的代碼會返回false。

alert ( NaN == NaN );//false

1.6 String

????????String類型用于表示由零或多個16位Unicode字符組成的字符序列,即字符串。字符串可以由單引號(')或雙引號(")表示。

String類型的特殊性

????????string類型有些特殊,因為字符串具有可變的大小,所以顯然它不能被直接存儲在具有固定大小的變量中。由于效率的原因,我們希望JS只復制對字符串的引用,而不是字符串的內容。但是另一方面,字符串在許多方面都和基本類型的表現相似,而字符串是不可變的這一事實(即沒法改變一個字符串值的內容),因此可以將字符串看成行為與基本類型相似的不可變引用類型

2 總結

????????Boolean、Number、String 這三個是Javascript中的基本包裝類型,也就是這三個其實是一個構造函數,他們是Function的實例,是引用類型,至于這里的String與以上說的String是同名,是因為其實上文說的String是指字符串,這里的String指的是String這個構造函數,上面那么寫,是為了更好的理解,因為Javascript是松散類型的。我們可以看下String實例化的例子:

var name = String( "jwy" );

alert( typeof( name )); //"string"

var x = new String( '12345' ); typeof( x ); //object

x = '12345'; typeof(x)? //string

var author = "Tom"; alert( typeof( name ));? //"string"

????????至于author這個會有length,substring等等這些方法,其實string只是String的一個實例,類似于C#中的String,和string.

????????注意:?typeof 變量 如果值是"string" 的話,也就是這個變量是字符串,在Javascript中,字符串是基本類型,而在C#或Java中,字符串是引用類型,但是Javascript中的String是引用類型,因為它是Javascript中定義好的基本包裝類型,在C#中,String跟string其實是一樣的。

????????本帖只是簡要的copy了一些JavaScript高級程序設計(第三版)內容,外加了自己側重的角度,看本帖的朋友還是要看書啊,這里只是做個參考。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容

  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,261評論 0 4
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執行單位為行(line),也就是一...
    悟名先生閱讀 4,184評論 0 13
  • JAVA面試題 1、作用域public,private,protected,以及不寫時的區別答:區別如下:作用域 ...
    JA尐白閱讀 1,171評論 1 0
  • 前言: 你對手機存儲到底了解多少?從安卓4.4以后在外置內存卡中有沒有存儲過東西。先上兩張圖片。第一張圖片是酷我音...
    yzzCool閱讀 2,506評論 0 0
  • 2017年3月29日,三月又該逝去了。 今夜微涼,從不好酒者,今夜卻想好一場無醉方休。在荒涼的大街上,何來找酒買?...
    韻韻韻華閱讀 223評論 0 0