JavaScript全總結(jié)之基本數(shù)據(jù)類型

昨天花一天時(shí)間弃甥,把css基本上的整理了一下爽室,畢竟知識(shí)點(diǎn)并不算很多,而且也是沒說動(dòng)畫這些CSS3的新東西淆攻,梳理的時(shí)候自己也重新理解一遍阔墩,還是值得的。那么繼續(xù)瓶珊,把JS也整理一下啸箫。

首先依舊是如何在html和css在加入js:

方法有兩種:

  • 一種就是style標(biāo)簽里面直接寫
  • 還有就是外部類似這樣 <script src="index.js"></script>

我們還得給我們所要使用的變量,屬性伞芹,函數(shù)取一個(gè)不錯(cuò)的名字忘苛,這稱之為標(biāo)識(shí)符

標(biāo)識(shí)符是有一些規(guī)則的:

  • 區(qū)分大小寫
  • 第一個(gè)字符必須是字母、下劃線(_)唱较、或者是$
  • 后面的可以是字母扎唾、數(shù)字、下劃線绊汹、$

一些命名規(guī)范稽屏,比如駝峰命名,等

變量

js是弱類型語言西乖,也就是說,我在聲明的時(shí)候不需要規(guī)定是什么類型坛增,并且可以在之后變化获雕。(甚至在比較的時(shí)候也會(huì)自動(dòng)轉(zhuǎn)換)

注意的事情:變量提升
一般來說js是按行執(zhí)行的(所以雖然可以不加;但是最好還是加上以免出錯(cuò))收捣,但是變量聲明是先解析届案,所以你在聲明之前用的時(shí)候不會(huì)報(bào)錯(cuò),但是呢是沒有賦值的罢艾,是undefined楣颠。但是話又說回來尽纽,你這不是沒事找事嘛,一般要用變量就把他放到最上面吧童漩。
順道再說下:函數(shù)提升
上面剛說js是按行執(zhí)行的弄贿,但是函數(shù)又不一樣,也就是說函數(shù)也可以在聲明前使用矫膨,我就直接給代碼差凹,也很簡(jiǎn)單。

1.
// Outputs: "Definition hoisted!"
definitionHoisted();
// TypeError: undefined is not a function
definitionNotHoisted();

function definitionHoisted() { 
    console.log("Definition hoisted!");
}
var definitionNotHoisted = function () { 
     console.log("Definition not hoisted!");
};
2.
// ReferenceError: funcName is not defined
funcName();
// TypeError: undefined is not a function
varName();
var varName = function funcName() { 
    console.log("Definition not hoisted!");
};

稍微解釋下侧馅,1是說明了危尿,如果吧函數(shù)賦值給變量,變量只是變量提升馁痴。
2呢則是吧有函數(shù)嗎的賦值給變量谊娇,只有變量提升,沒有函數(shù)提升罗晕。

最后的命名的時(shí)候注意一些關(guān)鍵字和保留字济欢。具體就不在這里浪費(fèi)空間了,網(wǎng)上到處都是攀例。

數(shù)據(jù)類型

接下來就是極為重要的數(shù)據(jù)類型船逮,數(shù)據(jù)類型一般分為兩種,一種是原始類型粤铭,也就是不可拆分的(字符串挖胃,布爾值,數(shù)值)梆惯,以及對(duì)象這種復(fù)合類的酱鸭,至于null和undefined屬于類型特殊情況。
(es6還有一個(gè)symbol垛吗,這個(gè)暫時(shí)先不提凹髓,回頭再總結(jié))
對(duì)象又可以分成三個(gè)子類型。

  • 狹義的對(duì)象(object)
  • 數(shù)組(array)
  • 函數(shù)(function)

狹義的對(duì)象和數(shù)組是兩種不同的數(shù)據(jù)組合方式怯屉,而函數(shù)其實(shí)是處理數(shù)據(jù)的方法蔚舀。JavaScript把函數(shù)當(dāng)成一種數(shù)據(jù)類型,可以像其他類型的數(shù)據(jù)一樣锨络,進(jìn)行賦值和傳遞赌躺,這為編程帶來了很大的靈活性,體現(xiàn)了JavaScript作為“函數(shù)式語言”的本質(zhì)羡儿。
這里需要明確的是礼患,JavaScript的所有數(shù)據(jù),都可以視為廣義的對(duì)象。不僅數(shù)組和函數(shù)屬于對(duì)象缅叠,就連原始類型的數(shù)據(jù)(數(shù)值悄泥、字符串、布爾值)也可以用對(duì)象方式調(diào)用
基本類型肤粱、引用類型

  • 基本類型值(數(shù)值弹囚、布爾值、null和undefined):指的是保存在棧內(nèi)存中的簡(jiǎn)單數(shù)據(jù)段狼犯;
  • 引用類型值(對(duì)象余寥、數(shù)組、函數(shù)悯森、正則):指的是那些保存在堆內(nèi)存中的對(duì)象宋舷,變量中保存的實(shí)際上只是一個(gè)指針,這個(gè)指針執(zhí)行內(nèi)存中的另一個(gè)位置瓢姻,由該位置保存對(duì)象
typeof運(yùn)算符

JavaScript有三種方法祝蝠,可以確定一個(gè)值到底是什么類型。

  • typeof運(yùn)算符
  • instanceof運(yùn)算符
  • Object.prototype.toString方法
先介紹null和undefined

對(duì)于null和undefined幻碱,可以大致可以像下面這樣理解绎狭。

  1. null表示空值,即該處的值現(xiàn)在為空褥傍。典型用法是:
  • 作為函數(shù)的參數(shù)儡嘶,表示該函數(shù)的參數(shù)是一個(gè)沒有任何內(nèi)容的對(duì)象。
    作為對(duì)象原型鏈的終點(diǎn)恍风。
  1. undefined表示不存在值蹦狂,就是此處目前不存在任何值。典型用法是:
  • 變量被聲明了朋贬,但沒有賦值時(shí)凯楔,就等于undefined。
  • 調(diào)用函數(shù)時(shí)锦募,應(yīng)該提供的參數(shù)沒有提供摆屯,該參數(shù)等于undefined。
  • 對(duì)象沒有賦值的屬性糠亩,該屬性的值為undefined虐骑。
  • 函數(shù)沒有返回值時(shí),默認(rèn)返回undefined赎线。
boolean布爾值

只有兩個(gè)值 true 和 false(并不是字符富弦,也可以寫作1和0,對(duì)和錯(cuò)氛驮,只是表示兩個(gè)狀態(tài))
常用做條件判斷
下列運(yùn)算符會(huì)返回布爾值:

  • 兩元邏輯運(yùn)算符: && (And),|| (Or)
  • 前置邏輯運(yùn)算符: !(Not)
  • 相等運(yùn)算符:===济似,!==矫废,==盏缤,!=
  • 比較運(yùn)算符:>,>=蓖扑,<唉铜,<=

如果JavaScript預(yù)期某個(gè)位置應(yīng)該是布爾值,會(huì)將該位置上現(xiàn)有的值自動(dòng)轉(zhuǎn)為布爾值律杠。轉(zhuǎn)換規(guī)則是除了下面六個(gè)值被轉(zhuǎn)為false潭流,其他值都視為true。

  • undefined
  • null
  • false
  • 0
  • NaN
  • ""(空字符串)
    值得一說的是空對(duì)象和空數(shù)組都是true
Number數(shù)值
  1. 在js里面柜去,數(shù)字都用number灰嫉,不分浮點(diǎn)數(shù)和整數(shù),還有一些其他的進(jìn)制:
var a = 10; //十進(jìn)制
var b = 073; //八進(jìn)制
vat c = 0xf3; //十六進(jìn)制
  1. number是有范圍的嗓奢,具體值反正很大讼撒,超出就會(huì)成為Infinity
  2. 如果0當(dāng)成分母的除法在js中并不會(huì)報(bào)錯(cuò),答案是NaN股耽。NaN不等于NaN根盒。
  3. 數(shù)值轉(zhuǎn)換
  • 有三個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值
    Number()
    parseInt()
    parseFloat()
  • Number規(guī)則相當(dāng)復(fù)雜而且不合理,幾乎不使用物蝙,常用的是后兩個(gè)炎滞,兩個(gè)規(guī)則類似
    1. 忽略字符串前面的空白字符,找到第一個(gè)非空白字符
    2. 如果第一個(gè)字符不是-或者數(shù)字返回NaN
    3. 如果是繼續(xù)解析诬乞,直到非數(shù)值模式為止
    4. 0開頭會(huì)當(dāng)做八進(jìn)制册赛,0x開頭會(huì)當(dāng)做十六進(jìn)制,但是可以指定第二個(gè)參數(shù)指定基數(shù)
parseInt('blue'); //NaN
parseInt('-23ABS'); // -23
parseInt('0xf1'); // 241
parseInt('101', 2); // 5
String(字符串)
  1. String是Unicode字符組成的序列丽惭,俗稱字符串击奶,可以用雙引號(hào)或者單引號(hào)表示,沒有區(qū)別责掏,匹配即可
    字符串也有一些轉(zhuǎn)義字符
    \n: 換行
    \r: 回車
    \t:水平制表符
    \:\
  2. 可以使用 + 運(yùn)算符將多個(gè)字符串連接起來
  3. 字符串的長(zhǎng)度可以通過length屬性獲得
  4. 字符串方法
  5. indexOf:獲取字符位置
    "abc".indexOf('b'); // 1
  6. toLowerCase:轉(zhuǎn)換為小寫柜砾,toUpperCase:轉(zhuǎn)換為大寫
    "aBcD".toLowerCase(); // "abcd"
    "aBcD".toUpperCase(); // "ABCD"
  7. trim:刪除兩端空白字符(IE9+)
    " sd f ".trim(); // "sd f"
  8. replace:字符串替換
    "abc".replace('b', 'B'); // "aBc"
  9. split:分割字符串位數(shù)組
    "a,bc,d,e".split(','); // [a, bc, d, e]
  10. substr(start, length):獲取子字符串
    "abcdef".substr(2,3); // "cde"
  11. substring(start, end):獲取子字符串
    "abcdef".substring(2,3); // "c"
  12. String.prototype.concat()
    連接兩個(gè)字符串文本,并返回一個(gè)新的字符串换衬。
  13. String.prototype.contains() **
    判斷一個(gè)字符串里是否包含其他字符串痰驱。
  14. String.prototype.match()
    使用正則表達(dá)式與字符串相比較。
    String.prototype.replace()
    被用來在正則表達(dá)式和字符串直接比較瞳浦,然后用新的子串來替換被匹配的子串担映。
    String.prototype.search()

    對(duì)正則表達(dá)式和指定字符串進(jìn)行匹配搜索,返回第一個(gè)出現(xiàn)的匹配項(xiàng)的下標(biāo)叫潦。
  15. String.prototype.slice()

    摘取一個(gè)字符串區(qū)域蝇完,返回一個(gè)新的字符串。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市短蜕,隨后出現(xiàn)的幾起案子氢架,更是在濱河造成了極大的恐慌,老刑警劉巖朋魔,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岖研,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡警检,警方通過查閱死者的電腦和手機(jī)孙援,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扇雕,“玉大人拓售,你說我怎么就攤上這事⊥菘悖” “怎么了邻辉?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)腮鞍。 經(jīng)常有香客問我值骇,道長(zhǎng),這世上最難降的妖魔是什么移国? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任吱瘩,我火速辦了婚禮,結(jié)果婚禮上迹缀,老公的妹妹穿的比我還像新娘使碾。我一直安慰自己,他們只是感情好祝懂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布票摇。 她就那樣靜靜地躺著,像睡著了一般砚蓬。 火紅的嫁衣襯著肌膚如雪矢门。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天灰蛙,我揣著相機(jī)與錄音祟剔,去河邊找鬼。 笑死摩梧,一個(gè)胖子當(dāng)著我的面吹牛物延,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仅父,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叛薯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼浑吟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起案训,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤买置,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后强霎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蓉冈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年城舞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寞酿。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡家夺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伐弹,到底是詐尸還是另有隱情拉馋,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布惨好,位于F島的核電站煌茴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏日川。R本人自食惡果不足惜蔓腐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望龄句。 院中可真熱鬧回论,春花似錦、人聲如沸分歇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽职抡。三九已至葬燎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間繁调,已是汗流浹背萨蚕。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹄胰,地道東北人岳遥。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像裕寨,于是被迫代替她去往敵國(guó)和親浩蓉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子派继,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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

  • 標(biāo)簽: 我的筆記 ---學(xué)習(xí)資料:http://javascript.ruanyifeng.com/ 1. 導(dǎo)論 ...
    暗夜的怒吼閱讀 811評(píng)論 0 1
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,233評(píng)論 0 4
  • 函數(shù)JavaScript 的函數(shù)是一種對(duì)象。 對(duì)象 Javascript 中沒有類這樣的語言結(jié)構(gòu), Javascr...
    焉知非魚閱讀 428評(píng)論 0 0
  • 【一】四月天 四月天 茶色入酒夜難眠 春風(fēng)捎來桃花面 【二】彼岸 花又開 雨醉江南 煙雨彌漫 楊柳彼岸 伊人溫婉 ...
    風(fēng)夢(mèng)明珠閱讀 699評(píng)論 55 45
  • 我有一個(gè)最敬佩的人就是“我的唐哥捻艳〖菘撸” 我的堂哥的臉型是圓形的,頭發(fā)不長(zhǎng)认轨。濃濃的眉毛下面長(zhǎng)著我單眼皮的小眼睛绅络,雖然他...
    賈民喆閱讀 360評(píng)論 0 0