JavaScript嚴(yán)格執(zhí)行

strict模式

啟用strict模式的方法是在JavaScript代碼的第一行寫上:
'use strict';
  • 數(shù)據(jù)類型

Number

1.計算機中的float類型都是不能直接比較的
2.NaN:not a number岂昭,表示無法計算結(jié)果聂宾。
3.Infinity:表示無限大。

比較運算符

1.==瓶珊,它會自動轉(zhuǎn)換數(shù)據(jù)類型再比較朵你,很多時候球榆,會得到非常詭異的結(jié)果池摧;
2.===橙数,它不會自動轉(zhuǎn)換數(shù)據(jù)類型,如果數(shù)據(jù)類型不一致虐杯,返回false玛歌,如果一致,再比較擎椰;
3.不要使用==比較支子,始終堅持使用===比較。
4.NaN這個特殊的number與所有其他值都不相等达舒,包括它自己值朋。NaN===NaN叹侄;//false
4.所以,判斷NaN只能通過isNaN()函數(shù)昨登。isNaN(NaN);//true
5.要比較兩個浮點數(shù)是否相等趾代,只能計算它們之差的絕對值,看是否小于某個閾值丰辣。
    1 / 3 === (1 - 2 / 3); // false
    Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

null 與 undefined

null表示一個“空”的值撒强,它和0以及空字符串''不同,
0是一個數(shù)值笙什,''表示長度為0的字符串飘哨,而null表示“空”。
還有一個和null類似的undefined琐凭,它表示“未定義”芽隆。
JavaScript的設(shè)計者希望用null表示一個空的值,而undefined表示值未定義统屈。
事實證明胚吁,這并沒有什么卵用,區(qū)分兩者的意義不大鸿吆。
大多數(shù)情況下囤采,我們都應(yīng)該用null。undefined僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下有用惩淳。

String

*需要特別注意的是*蕉毯,字符串是不可變的,
如果對字符串的某個索引賦值思犁,不會有任何錯誤代虾,但是,也沒有任何效果激蹲。
而JavaScript為字符串提供的一些常用方法棉磨,注意,調(diào)用這些方法本身不會改變原有字符串的內(nèi)容学辱,而是返回一個新字符串乘瓤。

數(shù)組

1.JavaScript的Array可以包含任意數(shù)據(jù)類型,并通過索引來訪問每個元素策泣。
var arr = [1, 2, 3.14, 'Hello', null, true];
2.要取得Array的長度衙傀,直接訪問length屬性。
arr.length; // 6
3.*請注意*萨咕,直接給Array的length賦一個新的值會導(dǎo)致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]
4.*請注意*,如果通過索引賦值時,索引超過了范圍聪建,同樣會引起Array大小的變化钙畔。
  var arr = [1, 2, 3];
  arr[5] = 'x';
  arr; // arr變?yōu)閇1, 2, 3, undefined, undefined, 'x']
但是,如果僅是訪問而沒有賦值是不會改變的金麸。
  var a=[1,2,3];
  alert(a);//1,2,3
  var x=a[5];
  alert(a[5]);//undefined
  alert(a);//1,2,3

對象

JavaScript的對象是一種無序的集合數(shù)據(jù)類型擎析,它由若干鍵值對組成。
var xiaoming = {
    name: '小明',
    birth: 1990,
    'middle-school': 'No.1 Middle School',
    height: 1.70,
    weight: 65,
    score: null
};
訪問屬性是通過.操作符完成的钱骂,但這要求屬性名必須是一個有效的變量名叔锐。如果屬性名包含特殊字符,就必須用''括起來:
xiaoming.name; // '小明'
xiaoming.birth; // 1990
xiaohong['middle-school']; // 'No.1 Middle School'
xiaohong['name']; // '小明'
xiaohong.name; // '小明'
如果訪問一個不存在的屬性會返回什么呢见秽?JavaScript規(guī)定,訪問不存在的屬性不報錯讨盒,而是返回undefined解取。
由于JavaScript的對象是動態(tài)類型,你可以自由地給一個對象添加或刪除屬性:
var xiaoming = {
    name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一個age屬性
xiaoming.age; // 18
delete xiaoming.age; // 刪除age屬性
xiaoming.age; // undefined
delete xiaoming['name']; // 刪除name屬性
xiaoming.name; // undefined
delete xiaoming.school; // 刪除一個不存在的school屬性也不會報錯
要判斷一個屬性是否是xiaoming自身擁有的返顺,而不是繼承得到的禀苦,可以用hasOwnProperty()方法:
var xiaoming = {
    name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false

條件判斷

JavaScript把null、undefined遂鹊、0振乏、NaN和空字符串''視為false,其他值一概視為true秉扑。

Map和Set

1.JavaScript的默認(rèn)對象表示方式{}可以視為其他語言中的Map或Dictionary的數(shù)據(jù)結(jié)構(gòu)慧邮,即一組鍵值對。
2.但是JavaScript的對象有個小問題舟陆,就是鍵必須是字符串误澳。
  但實際上Number或者其他數(shù)據(jù)類型作為鍵也是非常合理的。
  為了解決這個問題秦躯,最新的ES6規(guī)范引入了新的數(shù)據(jù)類型Map忆谓。
  var m = new Map();
  var s = new Set();
3.初始化Map需要一個二維數(shù)組,或者直接初始化一個空Map踱承。Map具有以下方法:
  var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
  m.get('Michael'); // 95
  var m = new Map(); // 空Map
  m.set('Adam', 67); // 添加新的key-value
  m.set('Bob', 59);
  m.has('Adam'); // 是否存在key 'Adam': true
  m.get('Adam'); // 67
  m.delete('Adam'); // 刪除key 'Adam'
  m.get('Adam'); // undefined
4.在Set中倡缠,沒有重復(fù)的key。
  要創(chuàng)建一個Set茎活,需要提供一個Array作為輸入昙沦,或者直接創(chuàng)建一個空Set:
  var s1 = new Set(); // 空Set
  var s2 = new Set([1, 2, 3]); // 含1, 2, 3
  重復(fù)元素在Set中自動被過濾:
  var s = new Set([1, 2, 3, 3, '3']);
  s; // Set {1, 2, 3, "3"}
5.通過add(key)方法可以添加元素到Set中,可以重復(fù)添加妙色,但不會有效果桅滋,
  通過delete(key)方法可以刪除元素。

iterable

1.遍歷Array可以采用下標(biāo)循環(huán),遍歷Map和Set就無法使用下標(biāo)丐谋。
2.for ... in循環(huán)由于歷史遺留問題芍碧,它遍歷的實際上是對象的屬性名稱。
  一個Array數(shù)組實際上也是一個對象号俐,它的每個元素的索引被視為一個屬性泌豆。
  當(dāng)我們手動給Array對象添加了額外的屬性后,for ... in循環(huán)將帶來意想不到的意外效果:
  var a = ['A', 'B', 'C'];
  a.name = 'Hello';
  for (var x in a) {
    alert(x); // '0', '1', '2', 'name'
  }
3.for ... of循環(huán)則完全修復(fù)了這些問題吏饿,它只循環(huán)集合本身的元素:
  var a = ['A', 'B', 'C'];
  a.name = 'Hello';
  for (var x of a) {
    alert(x); // 'A', 'B', 'C'
  }
4.更好的方式是直接使用iterable內(nèi)置的forEach方法踪危,
  它接收一個函數(shù),每次迭代就自動回調(diào)該函數(shù)
  var a = ['A', 'B', 'C'];
  a.forEach(function (element, index, array) {
    // element: 指向當(dāng)前元素的值
    // index: 指向當(dāng)前索引
    // array: 指向Array對象本身
    alert(element);
  });
  Set與Array類似猪落,但Set沒有索引贞远,因此回調(diào)函數(shù)的前兩個參數(shù)都是元素本身:
  var s = new Set(['A', 'B', 'C']);
  s.forEach(function (element, sameElement, set) {
    alert(element);
  });
  Map的回調(diào)函數(shù)參數(shù)依次為value、key和map本身:
  var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
  m.forEach(function (value, key, map) {
    alert(value);
  });
  如果對某些參數(shù)不感興趣笨忌,由于JavaScript的函數(shù)調(diào)用不要求參數(shù)必須一致蓝仲,因此可以忽略它們。
  例如官疲,只需要獲得Array的element:
  var a = ['A', 'B', 'C'];
  a.forEach(function (element) {
    alert(element);
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袱结,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子途凫,更是在濱河造成了極大的恐慌垢夹,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件维费,死亡現(xiàn)場離奇詭異果元,居然都是意外死亡,警方通過查閱死者的電腦和手機掩完,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門噪漾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人且蓬,你說我怎么就攤上這事欣硼。” “怎么了恶阴?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵诈胜,是天一觀的道長。 經(jīng)常有香客問我冯事,道長焦匈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任昵仅,我火速辦了婚禮缓熟,結(jié)果婚禮上累魔,老公的妹妹穿的比我還像新娘。我一直安慰自己够滑,他們只是感情好垦写,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彰触,像睡著了一般梯投。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上况毅,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天分蓖,我揣著相機與錄音,去河邊找鬼尔许。 笑死么鹤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的味廊。 我是一名探鬼主播午磁,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼毡们!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昧辽,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤衙熔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后搅荞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體红氯,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年咕痛,在試婚紗的時候發(fā)現(xiàn)自己被綠了痢甘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡茉贡,死狀恐怖塞栅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腔丧,我是刑警寧澤放椰,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站愉粤,受9級特大地震影響砾医,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衣厘,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一如蚜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦错邦、人聲如沸探赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽期吓。三九已至,卻和暖如春倾芝,著一層夾襖步出監(jiān)牢的瞬間讨勤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工晨另, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留潭千,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓借尿,卻偏偏與公主長得像刨晴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子路翻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

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