快速入門

數(shù)據(jù)類型和變量

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

Number

123(正常數(shù)字)随闺、NaN(不是數(shù)字)、Infinity(無限大)
16進(jìn)制表示:0xff19

比較運算符

==會自動轉(zhuǎn)換數(shù)據(jù)類型再比較兔综,會得到非常詭異的結(jié)果氓奈。
===不會轉(zhuǎn)換類型了袁。先判斷數(shù)據(jù)類型是否一致坦仍,一致的話再比較具體值。
特殊:

  • NaN===NaN;//false
    唯一判斷NaN的方法是通過isNaN()
    isNaN(NaN);//true
  • 浮點數(shù)由于精度的問題得糜,比較不會相等敬扛。
    1/3===(1-2/3);//false
    應(yīng)該用:Math.abs(1/3-(1-2/3))<0.000001;//true

null和undefined

null表示空值。0是一個數(shù)字朝抖。''是一個空字符串啥箭。

JavaScript的設(shè)計者希望用null表示一個空的值,而undefined表示值未定義治宣。事實證明急侥,這并沒有什么卵用,區(qū)分兩者的意義不大侮邀。大多數(shù)情況下坏怪,我們都應(yīng)該用null。undefined僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下有用瑟捣。

數(shù)組

創(chuàng)建方法:

  • [1,2,'abc']
  • new Array(1,2,3)

從可讀性考慮近迁,建議使用第一種方法來創(chuàng)建數(shù)組翎冲。
數(shù)組元素通過索引來訪問:

var arr = [1,2,3];
console.log(arr[0]);

對象

JavaScript的對象是一組由鍵-值組成的無序集合。

var person = {
    name: 'Bob',
    age: 20,
    tags: ['js', 'web', 'mobile'],
    city: 'Beijing',
    hasCar: true,
    zipcode: null
};

變量

strict模式

JavaScript在設(shè)計之初鹏秋,為了方便初學(xué)者學(xué)習(xí),并不強制要求用var申明變量亡笑。這個設(shè)計錯誤帶來了嚴(yán)重的后果:如果一個變量沒有通過var申明就被使用侣夷,那么該變量就自動被申明為全局變量。
在同一個頁面的不同的JavaScript文件中况芒,如果都不用var申明惜纸,恰好都使用了變量i叶撒,將造成變量i互相影響,產(chǎn)生難以調(diào)試的錯誤結(jié)果耐版。

使用var申明的變量則不是全局變量祠够,它的范圍被限制在該變量被申明的函數(shù)體內(nèi)。

在strict模式下運行的JavaScript代碼粪牲,強制通過var申明變量古瓤,未使用var申明變量就使用的,將導(dǎo)致運行錯誤腺阳。
啟用strict模式的方法是在JavaScript代碼的第一行寫上:
'use strict';

字符串

轉(zhuǎn)義:
\n:換行
\\:\(兩個反斜杠轉(zhuǎn)義成一個斜杠)
ASCII字符可以用\x##形式的十六進(jìn)制表示:
\x41:A
\u####表示一個Unicode字符:
\u4e2d\u6587:中文

es6新增換行字符串的表示:

var str = `你好
我是
一棵樹`;
代碼 含義
s.length 長度
s[2] 區(qū)字符串某個字符落君,類似數(shù)組。索引越界不會報錯亭引,返回undefined

注意:字符串是不可變的绎速,如果對字符串的某個索引賦值,不會有任何錯誤焙蚓,但是纹冤,也沒有任何效果。

var s = 'Test';
s[0] = 'X';
alert(s); // s仍然為'Test'
代碼(調(diào)用這些方法不會改變原來的字符串购公,而是返回一個新字符串) 含義
s.toUpperCase 大寫
s.toLowerCase 小寫
'hello,world'.indexOf('world') 返回7(注意區(qū)分大小寫)
s.substring(0,10) 返回字串萌京,注意前包后不包。沒有第二個參數(shù)代表到最后

數(shù)組

arr.length來獲取數(shù)組長度
注意:

  • 直接給Array的length賦值會改變Array的大小宏浩。
var arr = [1, 2, 3];
arr.length; // 3
arr.length = 6;
arr; // arr變?yōu)閇1, 2, 3, undefined, undefined, undefined]
arr.length = 2;arr; // arr變?yōu)閇1, 2]
  • 如果通過索引賦值時知残,索引超過了范圍,同樣會引起Array
    大小的變化
var arr = [1, 2, 3];
arr[5] = 'x';
arr; // arr變?yōu)閇1, 2, 3, undefined, undefined, 'x']
方法 含義
arr.indexOf(10); ie8不兼容該方法比庄,可以使用$.inArray(value,array)代替求妹。注意10和'10'不是一回事。
arr.slice(2,4) 對應(yīng)str.substring印蔗。如果沒有參數(shù)相當(dāng)于復(fù)制整個數(shù)組扒最。var copy = arr.slice()
arr.push(1,2) 向數(shù)組中添加,返回數(shù)組新長度
arr.pop() 返回并刪除數(shù)組最后一個元素华嘹“扇ぃ空數(shù)組不會報錯,而是返回undefined
arr.unshift(1,2) 類似push耙厚,從數(shù)組開頭添加
arr.shift() 返回并刪除數(shù)組第一個元素
arr.sort() 對數(shù)組進(jìn)行排序
arr.reverse() 對數(shù)組進(jìn)行反轉(zhuǎn)
splice 從指定索引刪除n個元素强挫,然后再插入幾個元素
arr1.concat(arr2); 將兩個數(shù)組進(jìn)行拼接并返回新數(shù)組(并沒有修改當(dāng)前數(shù)組)
arr.join('-') 將數(shù)組的每一個元素用指定字符串連接,然后返回字符串薛躬。
``
``
``
``
``

splice

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 從索引2開始刪除3個元素,然后再添加兩個元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 返回刪除的元素 ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只刪除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不刪除:
arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因為沒有刪除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

join

var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'

對象

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

訪問屬性是通過.操作符完成的俯渤,但這要求屬性名必須是一個有效的變量名。如果屬性名包含特殊字符型宝,就必須用''括起來:

var xiaohong = {
    name: '小紅',
    'middle-school': 'No.1 Middle School'
};
xiaohong['middle-school'];
xiaohong.name;
代碼 含義
xiaohong.sex='男'; 給對象添加屬性
delete xiaohong.sex; 刪除對象的屬性
'name' in xiaohong 判斷某個對象是否擁有某個屬性(這個屬性有可能是繼承來的)八匠。
xiaohong.hasOwnProperty('name') 判斷對象自身是否擁有某個屬性

條件判斷

if-else

注意:JavaScript把null絮爷、undefined、0梨树、NaN坑夯、''都視為false。

循環(huán)

for(;;)

for...in(可以把一個對象的所有屬性依次循環(huán)出來)

for...of(for in和for of的差別就是抡四,for in操作數(shù)組柜蜈、字符串等取出來的是索引key,for of操作數(shù)組指巡、字符串等取出來的是值value)

var o = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for (var key in o) {
    if (o.hasOwnProperty(key)) {//過濾掉繼承過來的屬性
        alert(key); // 'name', 'age', 'city'
    }
}

由于Array也是對象淑履,而它的每個元素的索引被視為對象的屬性,因此藻雪,for ... in循環(huán)可以直接循環(huán)出Array的索引(這里得出來的索引是String而不是Number):

var a = ['A', 'B', 'C'];
for (var i in a) {
    alert(i); // '0', '1', '2'
    alert(a[i]); // 'A', 'B', 'C'
}

while

do...while

Map和Set

JavaScript的默認(rèn)對象表示方式{}可以視為其他語言中的Map或Dictionary的數(shù)據(jù)結(jié)構(gòu)秘噪,即一組鍵值對。

但是JavaScript的對象有個小問題阔涉,就是鍵必須是字符串缆娃。但實際上Number或者其他數(shù)據(jù)類型作為鍵也是非常合理的。

為了解決這個問題瑰排,最新的ES6規(guī)范引入了新的數(shù)據(jù)類型Map。

'use strict';
var m = new Map();
var s = new Set();
alert('你的瀏覽器支持Map和Set暖侨!');

iterable

遍歷Array可以采用下標(biāo)循環(huán)椭住,遍歷Map和Set就無法使用下標(biāo)。為了統(tǒng)一集合類型字逗,ES6標(biāo)準(zhǔn)引入了新的iterable類型京郑,Array、Map和Set都屬于iterable類型葫掉。

具有iterable類型的集合可以通過新的for ... of循環(huán)來遍歷些举。

'use strict';
var a = [1, 2, 3];
for (var x of a) {
}
alert('你的瀏覽器支持for ... of');
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市俭厚,隨后出現(xiàn)的幾起案子户魏,更是在濱河造成了極大的恐慌,老刑警劉巖挪挤,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叼丑,死亡現(xiàn)場離奇詭異,居然都是意外死亡扛门,警方通過查閱死者的電腦和手機鸠信,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來论寨,“玉大人星立,你說我怎么就攤上這事爽茴。” “怎么了绰垂?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵闹啦,是天一觀的道長。 經(jīng)常有香客問我辕坝,道長窍奋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任酱畅,我火速辦了婚禮琳袄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纺酸。我一直安慰自己窖逗,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布餐蔬。 她就那樣靜靜地躺著碎紊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪樊诺。 梳的紋絲不亂的頭發(fā)上仗考,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音词爬,去河邊找鬼秃嗜。 笑死,一個胖子當(dāng)著我的面吹牛顿膨,可吹牛的內(nèi)容都是我干的锅锨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恋沃,長吁一口氣:“原來是場噩夢啊……” “哼必搞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起囊咏,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恕洲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匆笤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體研侣,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年炮捧,在試婚紗的時候發(fā)現(xiàn)自己被綠了庶诡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咆课,死狀恐怖末誓,靈堂內(nèi)的尸體忽然破棺而出扯俱,到底是詐尸還是另有隱情,我是刑警寧澤喇澡,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布迅栅,位于F島的核電站,受9級特大地震影響晴玖,放射性物質(zhì)發(fā)生泄漏读存。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一呕屎、第九天 我趴在偏房一處隱蔽的房頂上張望让簿。 院中可真熱鬧,春花似錦秀睛、人聲如沸尔当。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椭迎。三九已至,卻和暖如春田盈,著一層夾襖步出監(jiān)牢的瞬間畜号,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工缠黍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弄兜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓瓷式,卻偏偏與公主長得像,于是被迫代替她去往敵國和親语泽。 傳聞我的和親對象是個殘疾皇子贸典,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

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

  • 本文摘自廖雪峰JavaScript教程 1. 使用方式 JavaScript代碼可以直接嵌在網(wǎng)頁的任何地方,不過通...
    Hobson閱讀 572評論 0 0
  • 廖雪峰js教程 查漏補缺 一.基本類型和變量 1.注意相等運算符 第一種是==比較踱卵,它會自動轉(zhuǎn)換數(shù)據(jù)類型再比較廊驼,很...
    qqqc閱讀 243評論 0 0
  • 基本語法 賦值語句 字符串 每個語句用分號結(jié)束,不介意一行寫多個語句 注釋 大小寫 嚴(yán)格區(qū)分大小 數(shù)據(jù)類型和變量 ...
    陸小琪閱讀 262評論 0 0
  • 自駕游的必經(jīng)線路上惋砂,有一片森林妒挎。 草木郁郁蔥蔥,鳥鳴啾啾不絕于耳西饵,花香沁人心脾酝掩,是天然的露營佳處。 但今天是星期三...
    鋼鐵瑪利亞閱讀 416評論 1 5
  • 對于報表中的每一個數(shù)字 問 what when how why why not 然后找到 what to do 而...
    小魔女jenny閱讀 200評論 0 0