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

JavaScript中的每一個數(shù)據(jù)桃熄,都有它的類型。JS中一共有7種數(shù)據(jù)類型(包括ES6新增的symbol)恨锚。每一種數(shù)據(jù)類型所對應的數(shù)據(jù)分別是:

  1. number:整數(shù)跟小數(shù)(如11.23)宇驾。
  2. string:文本(如hello world)。
  3. boolean:表示兩個狀態(tài)猴伶,真(true)與假(false)课舍。
  4. null:表示空值,及此處的值為空他挎。
  5. undefinde:表示未定義或不存在布卡。
  6. object:對象屬于復雜數(shù)據(jù)類型」透牵可以細分為:
    --狹義的對象(object
    --數(shù)組(array
    --函數(shù)(function
  7. symbol:表示獨一無二的值忿等。

number

JavaScript 內(nèi)部,所有數(shù)字都是以64位浮點數(shù)形式儲存崔挖,即使整數(shù)也是如此贸街。容易造成混淆的是,某些運算只有整數(shù)才能完成狸相,此時 JavaScript 會自動把64位浮點數(shù)薛匪,轉(zhuǎn)成32位整數(shù),然后再進行運算脓鹃。
一個數(shù)在JS內(nèi)部的保存形式為:
(-1)^符號位 * 1.xx...xx(小數(shù)部分) * 2^指數(shù)部分
第1位:

  • 0表示正數(shù)逸尖,1表示負數(shù)

第2-12位:

  • 指數(shù)部分。指數(shù)部分共11位瘸右,意味著指數(shù)部分的最大值是2047娇跟。分出一半表示負數(shù),JavaScript 能夠表示的數(shù)值范圍為2的1024次方到2的-1023次方(開區(qū)間)太颤。

第13-64位:

  • 小數(shù)部分(有效數(shù)字)苞俘。其中1不保存在JS之中,所以JS的有效數(shù)字長度位53位龄章。這意味著吃谣,絕對值小于2的53次方的整數(shù)乞封,都可以精確表示。

string

字符串就是零個或多個排在一起的字符岗憋,放在單引號或雙引號之中肃晚。

  • 在字符串中是用單引號,可以使用\轉(zhuǎn)義字符
  • 將字符串分為多行書寫仔戈,直接換行會報錯陷揪。可以使用
    1 在行末加\
    2 使用+連接多個字符串
  • JavaScript 使用 Unicode 字符集杂穷。JavaScript 引擎內(nèi)部悍缠,所有字符都用 Unicode 表示。
  • 每個字符在 JavaScript 內(nèi)部都是以16位(即2個字節(jié))的 UTF-16 格式儲存耐量。但JavaScript 對 UTF-16 的支持是不完整的飞蚓,對于碼點在U+10000到U+10FFFF之間的字符,JavaScript 總是認為它們是兩個字符(length屬性為2)廊蜒。

boolean

boolean表示真與假兩個狀態(tài)趴拧,真用true表示,假用false表示山叮。
除了以下了六個falsy值的boolean值是false以外著榴,其余的值在JS中都被視為true。
-null
-undefined
-NaN //(Not a Number)
-0
-''"" //空字符串屁倔,需要注意空數(shù)組[]或空對象{}是true
-false

null和undefined

nullundefined都可以表示“沒有”脑又,含義非常相似。在實際使用中也幾乎沒有區(qū)別锐借。

null表示空值问麸,即該處的值現(xiàn)在為空。調(diào)用函數(shù)時钞翔,某個參數(shù)未設(shè)置任何值严卖,這時就可以傳入null,表示該參數(shù)為空布轿。比如哮笆,某個函數(shù)接受引擎拋出的錯誤作為參數(shù),如果運行過程中未出錯汰扭,那么這個參數(shù)就會傳入null稠肘,表示未發(fā)生錯誤。undefined表示“未定義”东且。

  • 在if語句中nullundefined都會轉(zhuǎn)換成false
  • null轉(zhuǎn)化為數(shù)字時启具,會變成0本讥;undefined轉(zhuǎn)為數(shù)字時珊泳,會變成NaN

object

簡單說鲁冯,對象就是一組“鍵值對”(key-value)的集合,是一種無序的復合數(shù)據(jù)集合色查。

1. 狹義的對象

  • 對象的所有鍵名都是字符串薯演,加不加引號都可以。如果不加引號秧了,則鍵名必須符合標識符的規(guī)范跨扮。
  • 對象的每一個鍵名又稱為“屬性”(property),它的“鍵值”可以是任何數(shù)據(jù)類型验毡。如果一個屬性的值為函數(shù)衡创,通常把這個屬性稱為“方法”
  • 如果遇到如下這種情況晶通,無法確定是對象還是代碼塊璃氢,一律解釋為代碼塊。
{ foo: 123 }
{ console.log(123) } // 123  JS認為第一行是代碼庫
//如果需要解釋位對象狮辽,可以加上圓括號
({ foo: 123 }) 
({ console.log(123) }) // 報錯  JS認為第一行是對象
  • 讀取與賦值對象的屬性一也,有兩種方法,一種是使用點運算符喉脖,還有一種是使用方括號運算符椰苟。
  • 如果使用方括號運算符,鍵名必須放在引號里面树叽,否則會被當作變量處理舆蝴。數(shù)值鍵名只能使用方括號運算符。
  • 查看一個對象本身的所有屬性题诵,可以使用Object.keys方法须误。
  • delete命令用于刪除對象的屬性,刪除成功后返回true仇轻。注意京痢,即使刪除的屬性不存在,也會返回true篷店。只有當屬性 存在但不能刪除時才會返回false祭椰。

2. 數(shù)組

數(shù)組(array)是按次序排列的一組值。每個值的位置都有編號(從0開始)疲陕,整個數(shù)組用方括號表示方淤。

  • length屬性的值就是等于最大的數(shù)字鍵加1。不是數(shù)字的鍵值對對length沒有影響蹄殃。
  • for...in不僅會遍歷數(shù)組所有的數(shù)字鍵携茂,還會遍歷非數(shù)字鍵。

3. 函數(shù)

函數(shù)是一段可以反復調(diào)用的代碼塊诅岩。函數(shù)還能接受輸入的參數(shù)讳苦,不同的參數(shù)會返回不同的值带膜。typeof會返回function.

  • JavaScript 有三種聲明函數(shù)的方法。
    1 function 命令
function print(s) {
  console.log(s);
}

2 函數(shù)表達式

var print = function(s) {
  console.log(s);
};
//此時S作為函數(shù)名只能在函數(shù)內(nèi)部使用
//結(jié)尾要加鸳谜;

3 Function 構(gòu)造函數(shù)

var add = new Function(
  'x',
  'y',
  'return x + y'
);

// 等同于
function add(x, y) {
  return x + y;
}
// 最后一個參數(shù)才會被當作函數(shù)體膝藕,前面的都是參數(shù)。只有一個參數(shù)咐扭,該參數(shù)就是函數(shù)體芭挽。
  • 如果同一個函數(shù)被多次聲明,后面的聲明就會覆蓋前面的聲明蝗肪。
  • JavaScript 語言將函數(shù)看作一種值袜爪,與其它值(數(shù)值、字符串薛闪、布爾值等等)地位相同饿敲。由于函數(shù)與其他數(shù)據(jù)類型地位平等,所以在 JavaScript 語言中又稱函數(shù)為第一等公民逛绵。
  • 函數(shù)執(zhí)行時所在的作用域怀各,是定義時的作用域,而不是調(diào)用時所在的作用域术浪。
  • 沒有辦法只省略靠前的參數(shù)瓢对,而保留靠后的參數(shù)。如果一定要省略靠前的參數(shù)胰苏,只有顯式傳入undefined硕蛹。
  • 如果有同名的參數(shù),則取最后出現(xiàn)的那個值硕并。
  • 在有多個參數(shù)的情況下法焰,如果要獲得第一個參數(shù)的值,可以使用arguments對象倔毙。arguments[0]就是第一個參數(shù)埃仪,arguments[1]就是第二個參數(shù),以此類推陕赃。
  • 閉包就是函數(shù)卵蛉,即能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
  • 閉包的最大用處有兩個么库,一個是可以讀取函數(shù)內(nèi)部的變量傻丝,另一個就是讓這些變量始終保持在內(nèi)存中,即閉包可以使得它誕生環(huán)境一直存在诉儒。
  • JavaScript 引擎規(guī)定葡缰,如果function關(guān)鍵字出現(xiàn)在行首,一律解釋成語句。如果要立即調(diào)用匿名函數(shù)泛释,應該加上圓括號:
// 語句
function f() {}

// 表達式
var f = function f() {}
---------------------------------

(function(){ /* code */ }());
// 或者
(function(){ /* code */ })();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滤愕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胁澳,更是在濱河造成了極大的恐慌该互,老刑警劉巖米者,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件韭畸,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔓搞,警方通過查閱死者的電腦和手機胰丁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喂分,“玉大人锦庸,你說我怎么就攤上這事∑哑恚” “怎么了甘萧?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梆掸。 經(jīng)常有香客問我扬卷,道長,這世上最難降的妖魔是什么酸钦? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任怪得,我火速辦了婚禮,結(jié)果婚禮上卑硫,老公的妹妹穿的比我還像新娘徒恋。我一直安慰自己,他們只是感情好欢伏,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布入挣。 她就那樣靜靜地躺著,像睡著了一般硝拧。 火紅的嫁衣襯著肌膚如雪财岔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天河爹,我揣著相機與錄音匠璧,去河邊找鬼。 笑死咸这,一個胖子當著我的面吹牛夷恍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼酿雪,長吁一口氣:“原來是場噩夢啊……” “哼遏暴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起指黎,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤朋凉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后醋安,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杂彭,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年吓揪,在試婚紗的時候發(fā)現(xiàn)自己被綠了亲怠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡柠辞,死狀恐怖团秽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叭首,我是刑警寧澤习勤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站焙格,受9級特大地震影響图毕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜间螟,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一吴旋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厢破,春花似錦荣瑟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至见坑,卻和暖如春嚷掠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荞驴。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工不皆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熊楼。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓霹娄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子犬耻,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容