JS基礎(chǔ)[1]

原文鏈接https://github.com/vqun/blog/issues/1

  1. 基本概念
    ===
    1.1 變量

ECMA變量是松散型的妥凳,愛保存啥類型的數(shù)據(jù)都行。變量申明使用的是var,當(dāng)然也可以不用智玻。使用var证膨,申明局部變量,不使用申明全局變量有鹿。不使用var是為JS界所鄙視的旭旭,所以,建議申明變量時(shí)葱跋,帶上var持寄。

function f(){
  var x = 1; // x是局部變量,只在f
  y = 2; // y是全局變量
}
f();
alert(x); // 報(bào)錯(cuò)
alert(y); // 2(當(dāng)然娱俺,前提是你注釋了上一句話)

變量有三個(gè)階段:申明稍味、賦值和使用。

申明和賦值是兩個(gè)完全不同的概念荠卷,解釋器對于這兩個(gè)階段也是完全不同的模庐,申明是在代碼期(寫代碼時(shí)期,業(yè)界喜歡叫預(yù)編譯還是啥的)僵朗,賦值是在運(yùn)行期赖欣。

var a; // 這是申明
a = 1; // 這是賦值

var b = 2; // 這句話,在代碼期验庙,解釋器只做了var b顶吮;在運(yùn)行期,做了b = 2

這也牽扯一下JS界都喜歡問的一個(gè)題:

alert(c); // undefined
var c = 3;

之所以是undefined粪薛,涉及到了所謂的“Hoisting”(變量提升)悴了。變量提升里說了,變量申明會(huì)被提前,于是乎上述代碼被等同于:

var c;
alert(c);
c = 3;

這其實(shí)是因?yàn)樯昝骱唾x值在兩個(gè)不同階段湃交。
1.2 區(qū)分大小寫


這個(gè)你懂的
1.3 標(biāo)識符


說一點(diǎn)熟空,一般認(rèn)為的標(biāo)識符,是非保留字搞莺,以_息罗、$、字母開頭才沧。實(shí)際上迈喉,還可以是Unicode、ASIIC温圆,因此挨摸,連中文都可以直接作為標(biāo)簽符的,例如:

var 你好 = 1;
alert(你好);
var \u7788 = 2;
alert(\u7788);

上面兩個(gè)都可以正常運(yùn)行岁歉。當(dāng)然得运,這種用寫法在實(shí)際編程里是不推薦的,只是曾經(jīng)有吃飽沒事干的面試官出過這種面試題锅移,算是普及一下
1.4 注釋


兩種注釋風(fēng)格熔掺,和C/C++類似,單行注釋和多行注釋:

// 單選注釋
/*
 * 多行注釋
 */

1.5 分號

關(guān)于分號帆啃,編程習(xí)慣就是在語句的結(jié)尾加分號金赦。當(dāng)然塔鳍,如果你想裝逼,好好看ECMA262,里面告訴你了什么時(shí)候要加分號核无,什么時(shí)候不用浮梢。
1.6 關(guān)鍵字和保留字


曾經(jīng)有人問编曼,關(guān)鍵字和保留字有什么區(qū)別靶剑。其實(shí),從實(shí)際角度講呢压怠,因?yàn)槟愣疾粫?huì)去當(dāng)成標(biāo)識符眠冈,所以沒區(qū)別;概念角度講呢菌瘫,關(guān)鍵字是真不能用(加了引號可以)蜗顽,保留字呢,目前可用雨让,以后估計(jì)就不能用了雇盖。
1.7 數(shù)據(jù)類型


五種基本類型+一種引用類型。五種基本類型:Undefined栖忠、Null崔挖、Number贸街、String、Boolean狸相,一種引用類型:Object薛匪。

typeof:這是一個(gè)比較讓人無語的操作符,以致于業(yè)界都不喜歡用它來判斷數(shù)據(jù)類型脓鹃。其實(shí)逸尖,讓人無語,主要是因?yàn)閷ull将谊,array使用typeof時(shí)冷溶,返回的不是期望的“null”和“array”渐白,而是“object”尊浓。這個(gè)其實(shí)沒什么,從理解角度講纯衍,是挺合理的栋齿,null本身就是代表的空對象,array本身在JS里根本沒這個(gè)類型襟诸。當(dāng)然瓦堵,Number、Boolean等直接new出來的歌亲,typeof結(jié)果也是“object”菇用。

1.8 操作符

操作符都有返回值。合理利用這個(gè)返回值陷揪,可以提升你的代碼逼格惋鸥。比如,一般人都這么寫:

var obj = {
  "a": {
    "name": "hello",
    "value": 1
  },
  "b": {
    "name": "world",
    "value": 2
  }
}, tmp, n, ret = {};
for(var k in obj){
  tmp = obj[k];
  n = tmp.name;
  !!n && ret[n] = tmp;
}

博主喜歡這么裝逼:

var obj = {
  "a": {
    "name": "hello",
    "value": 1
  },
  "b": {
    "name": "world",
    "value": 2
  }
}, tmp, n, ret = {};
for(var k in obj)
  !!(n = (tmp = obj[k]).name) && ret[n] = tmp;

有木有覺得逼格一樣子提升了好幾個(gè)檔次悍缠,連for循環(huán)的花括號都省了卦绣。。飞蚓。其實(shí)滤港,我會(huì)告訴你,只是因?yàn)楹笳叩男阅芨吲颗。晕也庞玫摹?br> 1.9 語句


語句包括:if溅漾、do-while、while著榴、for添履、for-in、label兄渺、break和continue缝龄、with以及switch汰现。除了with,其他的都很簡單叔壤,只要記得JS沒有塊作用域就可以了瞎饲。

關(guān)于with,“with會(huì)在原作用域鏈里插入新的作用域炼绘,影響性能”這句話是JS界里流行的幾句話[1]之一嗅战。確實(shí),因?yàn)樽饔糜蜴湹膯栴}俺亮,with存在性能問題驮捍,不過,很多模版引擎卻用了with來實(shí)現(xiàn)脚曾,如underscoreJs內(nèi)置的template东且,其“編譯”完之后的代碼里,就用了with來遍歷對象本讥,以達(dá)到在模版里直接使用對象的屬性名珊泳。

[1]JS界里流行的幾句話:

1. 變量申明會(huì)被提到最前面
2. eval是邪惡的
3. with會(huì)在原作用域鏈里插入新的作用域,影響性能

1.10 函數(shù)

函數(shù)定義有三種方式:函數(shù)申明拷沸、函數(shù)表達(dá)式和構(gòu)造函數(shù)色查。

// 函數(shù)申明
function f(){
  console.log("declaration");
}
// 函數(shù)表達(dá)式
var f = function(){
  console.log("expression");
}
// 構(gòu)造函數(shù)
var f = new Function("console.log('constructor')");

函數(shù)申明會(huì)在預(yù)編譯階段就確定,表達(dá)式和構(gòu)造函數(shù)是在運(yùn)行時(shí)確定撞芍。這再牽扯一下業(yè)界面試題喜歡玩的一個(gè)題:

alert(a); // 輸出那個(gè)function
var a = 1;
alert(a); // 輸出1
function a(){
  console.log("function")
}
alert(a); // 輸出1

上述代碼中秧了,由于在預(yù)編譯時(shí),function a(){...}確定了序无,因此验毡,在運(yùn)行時(shí),第一個(gè)alert就將這個(gè)函數(shù)申明alert出了愉镰,而第二個(gè)第三個(gè)alert米罚,就很明顯了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丈探,一起剝皮案震驚了整個(gè)濱河市录择,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碗降,老刑警劉巖隘竭,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異讼渊,居然都是意外死亡动看,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門爪幻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菱皆,“玉大人须误,你說我怎么就攤上這事〕鹎幔” “怎么了京痢?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長篷店。 經(jīng)常有香客問我祭椰,道長,這世上最難降的妖魔是什么疲陕? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任方淤,我火速辦了婚禮,結(jié)果婚禮上蹄殃,老公的妹妹穿的比我還像新娘携茂。我一直安慰自己,他們只是感情好窃爷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布邑蒋。 她就那樣靜靜地躺著,像睡著了一般按厘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钱慢,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天逮京,我揣著相機(jī)與錄音,去河邊找鬼束莫。 笑死懒棉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的览绿。 我是一名探鬼主播策严,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饿敲!你這毒婦竟也來了妻导?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤怀各,失蹤者是張志新(化名)和其女友劉穎倔韭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓢对,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寿酌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了硕蛹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醇疼。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硕并,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秧荆,到底是詐尸還是另有隱情鲤孵,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布辰如,位于F島的核電站普监,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏琉兜。R本人自食惡果不足惜凯正,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豌蟋。 院中可真熱鬧廊散,春花似錦、人聲如沸梧疲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幌氮。三九已至缭受,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間该互,已是汗流浹背米者。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宇智,地道東北人蔓搞。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像随橘,于是被迫代替她去往敵國和親喂分。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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

  • js的歷史 在上個(gè)世紀(jì)的1995年机蔗,當(dāng)時(shí)的網(wǎng)景公司正憑借其Navigator瀏覽器成為Web時(shí)代開啟時(shí)最著名的第一...
    LaBaby_閱讀 280評論 0 2
  • 近期開始接觸學(xué)習(xí)extjs框架蒲祈。該框架是基于JavaScript的。為了更好地理解學(xué)習(xí)extjs蜒车,必然需要先對Ja...
    六尺帳篷閱讀 801評論 2 12
  • 第一章: JS簡介 從當(dāng)初簡單的語言讳嘱,變成了現(xiàn)在能夠處理復(fù)雜計(jì)算和交互,擁有閉包酿愧、匿名函數(shù)沥潭, 甚至元編程等...
    LaBaby_閱讀 1,640評論 0 6
  • 《ijs》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,073評論 0 7
  • 我不是一個(gè)安靜的人 這我很肯定 但我常常裝成 一個(gè)安靜的人 總有人高談闊論 總有人 我不得不 安靜得更大點(diǎn)聲 像根...
    瘋界閱讀 223評論 0 1