JavaScript學(xué)習(xí)筆記-數(shù)據(jù)類型和變量

一 語(yǔ)法

JavaScript的語(yǔ)法和Java語(yǔ)言類似伴嗡,每個(gè)語(yǔ)句以;結(jié)束,語(yǔ)句塊用{...}瘪校。但是澄暮,JavaScript并不強(qiáng)制要求在每個(gè)語(yǔ)句的結(jié)尾加;,瀏覽器中負(fù)責(zé)執(zhí)行JavaScript代碼的引擎會(huì)自動(dòng)在每個(gè)語(yǔ)句的結(jié)尾補(bǔ)上;阱扬。
但是泣懊,讓 JavaScript 引擎自動(dòng)添加分號(hào)會(huì)在某些情況下改變程序的語(yǔ)義,導(dǎo)致運(yùn)行結(jié)果與期望的不一致麻惶。

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

1 Number

JavaScript不區(qū)分整數(shù)和浮點(diǎn)數(shù)馍刮,統(tǒng)一用Number表示,以下都是合法的Number類型:

123; // 整數(shù)123
0.456; // 浮點(diǎn)數(shù)0.456
1.2345e3; // 科學(xué)計(jì)數(shù)法表示1.2345x1000窃蹋,等同于1234.5
-99; // 負(fù)數(shù)
NaN; // NaN表示Not a Number卡啰,當(dāng)無(wú)法計(jì)算結(jié)果時(shí)用NaN表示
Infinity; // Infinity表示無(wú)限大静稻,當(dāng)數(shù)值超過了JavaScript的Number所能表示的最大值時(shí),就表示為Infinity

Number可以直接做四則運(yùn)算匈辱,規(guī)則和數(shù)學(xué)一致振湾。

2 字符串

字符串是以單引號(hào)'或雙引號(hào)"括起來(lái)的任意文本,比如'abc'亡脸,"xyz"等等押搪。

(1)字符轉(zhuǎn)義:

轉(zhuǎn)義字符\可以轉(zhuǎn)義很多字符,比如\n表示換行梗掰,\t表示制表符嵌言,字符\本身也要轉(zhuǎn)義,所以\\表示的字符就是\及穗。
ASCII字符可以以\x##形式的十六進(jìn)制表示摧茴,例如:

'\x41'; // 完全等同于 'A'

還可以用\u####表示一個(gè)Unicode字符:

'\u4e2d\u6587'; // 完全等同于 '中文'

(2)多行字符

由于多行字符串用\n寫起來(lái)比較費(fèi)事,所以最新的ES6標(biāo)準(zhǔn)新增了一種多行字符串的表示方法埂陆,用反引號(hào)(ESC下方的鍵)表示:

`這是一個(gè)
多行
字符串`;

(3)模板字符串

要把多個(gè)字符串連接起來(lái)苛白,可以用+號(hào)連接:

var name = '小明';
var age = 20;
var message = '你好, ' + name + ', 你今年' + age + '歲了!';
alert(message);

如果有很多變量需要連接,用+號(hào)就比較麻煩焚虱。ES6新增了一種模板字符串购裙,表示方法和上面的多行字符串一樣,但是它會(huì)自動(dòng)替換字符串中的變量:

var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}歲了!`;
alert(message);

3 布爾值

三種運(yùn)算:&& 鹃栽,||躏率, !

4 比較運(yùn)算符

當(dāng)我們對(duì)Number做比較時(shí)民鼓,可以通過比較運(yùn)算符得到一個(gè)布爾值:

2 > 5; // false
5 >= 2; // true
7 == 7; // true

實(shí)際上薇芝,JavaScript允許對(duì)任意數(shù)據(jù)類型做比較:

false == 0; // true
false === 0; // false

==和===的區(qū)別:
==比較:會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型再比較,很多時(shí)候會(huì)得到詭異的結(jié)果丰嘉;
===比較:不會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型夯到,如果數(shù)據(jù)類型不一致,返回false饮亏,如果一致再比較耍贾。
由于JavaScript的這種設(shè)計(jì)缺陷,不要使用==比較路幸,始終堅(jiān)持使用===比較

另一個(gè)例外是NaN這個(gè)特殊的Number與所有其他值都不相等荐开,包括它自己

NaN === NaN; // false

唯一能判斷NaN的方法是通過isNaN()函數(shù):

isNaN(NaN); // true

最后要注意浮點(diǎn)數(shù)的相等比較:

1 / 3 === (1 - 2 / 3); // false

這不是JavaScript的設(shè)計(jì)缺陷。浮點(diǎn)數(shù)在運(yùn)算過程中會(huì)產(chǎn)生誤差简肴,因?yàn)橛?jì)算機(jī)無(wú)法精確表示無(wú)限循環(huán)小數(shù)誓焦。要比較兩個(gè)浮點(diǎn)數(shù)是否相等,只能計(jì)算它們之差的絕對(duì)值,看是否小于某個(gè)閾值:

Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

null和undefined

null表示一個(gè)“空”的值杂伟,它和0以及空字符串''不同移层,0是一個(gè)數(shù)值,''表示長(zhǎng)度為0的字符串赫粥,而null表示“空”观话。
在其他語(yǔ)言中,也有類似JavaScript的null的表示越平,例如Java也用null频蛔,Swift用nil,Python用None表示秦叛。但是晦溪,在JavaScript中,還有一個(gè)和null類似的undefined挣跋,它表示“未定義”三圆。
JavaScript的設(shè)計(jì)者希望用null表示一個(gè)空的值,而undefined表示值未定義避咆。事實(shí)證明舟肉,這并沒有什么卵用,區(qū)分兩者的意義不大查库。大多數(shù)情況下路媚,我們都應(yīng)該用null。undefined僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下有用

5 數(shù)組

數(shù)組是一組按順序排列的集合樊销,集合的每個(gè)值稱為元素整慎。JavaScript的數(shù)組可以包括任意數(shù)據(jù)類型。例如:

[1, 2, 3.14, 'Hello', null, true];

另一種創(chuàng)建數(shù)組的方法是通過Array()函數(shù)實(shí)現(xiàn):

new Array(1, 2, 3); // 創(chuàng)建了數(shù)組[1, 2, 3]

6 對(duì)象

(1)定義:

JavaScript的對(duì)象是一組由鍵-值組成的無(wú)序集合围苫。例如裤园,為了描述“小明”這個(gè)淘氣的小朋友,我們可以用若干鍵值對(duì)來(lái)描述他:

var xiaoming = {
    name: '小明',
    birth: 1990,
    school: 'No.1 Middle School',
    height: 1.70,
    weight: 65,
    score: null
};

(2)訪問屬性:

訪問屬性是通過.操作符(即:對(duì)象變量.屬性名的方式)完成的够吩,但這要求屬性名必須是一個(gè)有效的變量名。如果屬性名包含特殊字符丈氓,就必須用''括起來(lái):

var xiaohong = {
    name: '小紅',
    'middle-school': 'No.1 Middle School'
};

xiaohong的屬性名middle-school不是一個(gè)有效的變量周循,就需要用''括起來(lái)。訪問這個(gè)屬性也無(wú)法使用.操作符万俗,必須用['xxx']來(lái)訪問:

xiaohong['middle-school']; // 'No.1 Middle School'
xiaohong['name']; // '小紅'
xiaohong.name; // '小紅'

如果訪問一個(gè)不存在的屬性會(huì)返回什么呢湾笛?JavaScript規(guī)定,訪問不存在的屬性不報(bào)錯(cuò)闰歪,而是返回undefined:

(3)添加和刪除屬性:

由于JavaScript的對(duì)象是動(dòng)態(tài)類型嚎研,你可以自由地給一個(gè)對(duì)象添加或刪除屬性:

var xiaoming = {
    name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一個(gè)age屬性
xiaoming.age; // 18
delete xiaoming.age; // 刪除age屬性
xiaoming.age; // undefined
delete xiaoming['name']; // 刪除name屬性
xiaoming.name; // undefined
delete xiaoming.school; // 刪除一個(gè)不存在的school屬性也不會(huì)報(bào)錯(cuò)

(4)檢測(cè)對(duì)象是否擁有某屬性:

如果我們要檢測(cè)xiaoming是否擁有某一屬性(包括從父類繼承的),可以用in操作符:

var xiaoming = {
    name: '小明',
    birth: 1990,
    school: 'No.1 Middle School',
    height: 1.70,
    weight: 65,
    score: null
};
'name' in xiaoming; // true
'grade' in xiaoming; // false

要判斷一個(gè)屬性是否是xiaoming自身?yè)碛械模皇抢^承得到的临扮,可以用hasOwnProperty()方法:

var xiaoming = {
    name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false

7 變量

變量在JavaScript中就是用一個(gè)變量名表示论矾,變量名是大小寫英文、數(shù)字杆勇、$和_的組合贪壳,且不能用數(shù)字開頭。變量名也不能是JavaScript的關(guān)鍵字蚜退,如if闰靴、while等。申明一個(gè)變量用var語(yǔ)句钻注,比如:

var a; // 申明了變量a蚂且,此時(shí)a的值為undefined
var $b = 1; // 申明了變量$b,同時(shí)給$b賦值幅恋,此時(shí)$b的值為1
var s_007 = '007'; // s_007是一個(gè)字符串
var Answer = true; // Answer是一個(gè)布爾值true
var t = null; // t的值是null

在JavaScript中杏死,使用等號(hào)=對(duì)變量進(jìn)行賦值〖亚玻可以把任意數(shù)據(jù)類型賦值給變量识埋,同一個(gè)變量可以反復(fù)賦值,而且可以是不同類型的變量零渐,但是要注意只能用var申明一次窒舟。這種變量本身類型不固定的語(yǔ)言稱之為動(dòng)態(tài)語(yǔ)言,與之對(duì)應(yīng)的是靜態(tài)語(yǔ)言诵盼。靜態(tài)語(yǔ)言在定義變量時(shí)必須指定變量類型惠豺,如果賦值的時(shí)候類型不匹配,就會(huì)報(bào)錯(cuò)风宁。例如Java洁墙,Swift是靜態(tài)語(yǔ)言

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市戒财,隨后出現(xiàn)的幾起案子热监,更是在濱河造成了極大的恐慌,老刑警劉巖饮寞,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孝扛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡幽崩,警方通過查閱死者的電腦和手機(jī)苦始,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)慌申,“玉大人陌选,你說我怎么就攤上這事。” “怎么了咨油?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵您炉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我臼勉,道長(zhǎng)邻吭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任宴霸,我火速辦了婚禮囱晴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓢谢。我一直安慰自己畸写,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布氓扛。 她就那樣靜靜地躺著枯芬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪采郎。 梳的紋絲不亂的頭發(fā)上千所,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音蒜埋,去河邊找鬼淫痰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛整份,可吹牛的內(nèi)容都是我干的待错。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼烈评,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼火俄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起讲冠,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瓜客,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后竿开,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谱仪,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年德迹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芽卿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揭芍。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胳搞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肌毅,我是刑警寧澤筷转,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站悬而,受9級(jí)特大地震影響呜舒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笨奠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一袭蝗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧般婆,春花似錦到腥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至啤咽,卻和暖如春晋辆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宇整。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工瓶佳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人没陡。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓涩哟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盼玄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贴彼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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