javascript瀏覽器發(fā)展史,JS介紹舶得,入門掰烟,JS引入,變量,值類型纫骑,運算符

前端不像是后端有那么多選擇蝎亚,像Python、PHP先馆、JAVA发框、C#等等。學(xué)前端煤墙,JavaScript可以說是必學(xué)的一門語言梅惯。而在現(xiàn)在的21世紀(jì),編程重要仿野,還有另外一門技術(shù)同樣很重要铣减。那就是英語!英語+互聯(lián)網(wǎng)是最完美的組合脚作,如果再加上金融葫哗,那就是真的幾乎可以上天了。當(dāng)然球涛,劣针,我這里說的金融不是股票什么的,而是最低資金成本宾符,金融也不是一般人能玩得起的酿秸,除非你有能力,有財力魏烫, 對金融也足夠了解辣苏。

JavaScript瀏覽器發(fā)展及入門

瀏覽器組成

有兩部分,一是shell哄褒,另外一部分是內(nèi)核稀蟋,當(dāng)然,內(nèi)核是最值錢的呐赡。
  • shell:指的是我們能夠看見的瀏覽器的標(biāo)簽退客、頁面、設(shè)置链嘀、書簽管理器萌狂、導(dǎo)航等等。凡是我們能看見的都可稱之為shell怀泊。

  • 內(nèi)核(大致分為三個模塊):
    內(nèi)核就是用來處理我們的各種請求的代碼茫藏,那些高難度的資源處理都是內(nèi)核完成。

    • 渲染引擎(HTML霹琼、CSS等語法規(guī)則和渲染)
    • JS引擎
    • 其他模塊

現(xiàn)時主要的四大排版引擎為

  • Trident(應(yīng)用于Internet Explorer)务傲;
  • Gecko(應(yīng)用于Mozilla Firefox)凉当;
  • Blink(應(yīng)用于Chrome );
  • WebKit (應(yīng)用于Apple Safari和早期版本的Google Chrome)比較火熱售葡。
    瀏覽器幾大內(nèi)核問題看杭,可 參照這里

JavaScript的兩大特點

  • 編譯性 和 解釋性

計算機在執(zhí)行程序員編寫的代碼時,計算機認(rèn)識這些代碼嗎挟伙?答案肯定是否定的楼雹,那么怎么讓它讀取并執(zhí)行?那就需要轉(zhuǎn)譯尖阔。JavaScript代碼轉(zhuǎn)換為機械碼的兩種方式烘豹,編譯性翻譯和解釋性翻譯。這兩種方式只是其翻譯的方式不同诺祸,其本質(zhì)是相同的。

1祭芦、編譯性翻譯

  • 方式:編譯性翻譯是通篇看完文件后再翻譯筷笨,翻譯完成后生成翻譯完的文件,程序最終執(zhí)行的是這個翻譯完的文件龟劲。
    比如C-->.obj胃夏,JAVA-->.class。

  • 優(yōu)點:快昌跌。
    就像讀書一樣仰禀,是通篇讀完理解再寫快還是看一句寫一句快?當(dāng)然是前者快蚕愤,它節(jié)省了多次抬頭低頭的時間答恶。

  • 不足:移植性不好,不跨平臺萍诱。
    不跨平臺是什么意思悬嗓?比如在windows上生成的翻譯文件,在Linux上不能執(zhí)行裕坊,Linux系統(tǒng)不認(rèn)識包竹,那就得單獨為Linux重新寫一個。大多家用配置都是windows籍凝,但服務(wù)器用的是Linux周瞎、UNIX,因為它比較穩(wěn)定饵蒂。UNIX比較有故事 声诸,它是黑客和工程師共同開發(fā)的,所以黑客很難攻進(jìn)去苹享。(服務(wù)器其實就是電腦双絮,只是它提供的接口不一樣而已浴麻。)

  • C、C++都是編譯性語言

2囤攀、解釋性語言

  • 方式:翻譯一行執(zhí)行一行软免,不生成文件。

  • 優(yōu)點:跨平臺焚挠。

  • 缺點:稍微慢一點膏萧。

  • JavaScript、PHP蝌衔、Python都是解釋性語言

注意:JAVA既不是編譯性語言也不是解釋性語言榛泛,JAVA的翻譯過程是:.java通過javac進(jìn)行編譯-->.class-->JVM(虛擬機)-->解釋執(zhí)行。JAVA原來是oracle語言噩斟。

線程

  • 單線程:同一時間只能干一件事
  • 多線程:同一時間可以干多件事曹锨。比如左手畫圓右手畫方,當(dāng)然我是做不到的剃允。

標(biāo)準(zhǔn)(ECMA)

每一門語言都有他的標(biāo)準(zhǔn)沛简,JavaScript兼容于ECMA標(biāo)準(zhǔn),因此也被稱為ECMAScript斥废,JavaScript到現(xiàn)在做了很大的改變椒楣,還推出了DOM和BOM。
關(guān)于ES6標(biāo)準(zhǔn)牡肉,可以參考這里

JavaScript三大部分

  • ECMAScript:這是JavaScript原始部分捧灰,能夠進(jìn)行加減乘除。
  • DOM:操作文檔(html统锤、css)
  • BOM :操作瀏覽器對象毛俏。

JavaScript執(zhí)行隊列

單線程的執(zhí)行有一個專業(yè)名詞:輪轉(zhuǎn)時間片

下面舉個栗子:
比如現(xiàn)在同時執(zhí)行兩個任務(wù)跪另,task1和task2拧抖。它會把兩個任務(wù)切成無數(shù)片段,以微秒或毫秒為單位免绿,吧這些片段排成隊列唧席,但是誰排前面誰排后面完全隨機,誰排第一頁不一定嘲驾,這就叫爭搶時間片淌哟,完全看概率。排完后一個片段一個片段地往JavaScript引擎送辽故,JavaScript一2一個時間片為基準(zhǔn)單位來執(zhí)行這個時間片段徒仓,然后把task1和task2按時間片段來執(zhí)行。大概類似下圖:

時間片段


面試常被問到的問題
1誊垢、主流瀏覽器及內(nèi)核掉弛、

  • IE ---- trident
  • chrome ---- 以前是webkit症见,2014年新出blink
  • firefox ---- Gecko
  • opera ---- presto
  • safari ---- webkit

2、面試最后面試官通常會問:你還有什么問題想問我殃饿?

問這個問題的原因是什么呢谋作,面試官希望通過這個問題看出你的學(xué)習(xí)能力和學(xué)習(xí)現(xiàn)狀,包括探究方向

開始學(xué)習(xí)JavaScript

1乎芳、引用js遵蚜。

  • 這個也就內(nèi)部JS及外部JS文件引用,引用方式都可以百度到奈惑,我只強調(diào)一點捡鱼,對于type屬性 璧疗,你可以不寫告私,但是不能寫錯咨油。

  • 為符合web結(jié)構(gòu)(html)、樣式(css)原在、行為(js)相分離的標(biāo)準(zhǔn)不撑,通常采用外部引入。

  • 相分離晤斩,主要是為了在需要看得時候更加清晰,改的時候更加方便姆坚,移植性也會比較好澳泵。

2、JS基本語法

  • 變量
    • 變量聲明
      • 聲明兼呵、賦值分解兔辅。也就是說聲明和賦值是可以分開 進(jìn)行的,你可以先聲明變量击喂,之后再賦值维苔。
      • 單一var聲明變量
    • 命名規(guī)則
      • 變量名必須以英文字母、_懂昂、$開頭
      • 可以包括英文字母介时、_、$凌彬、數(shù)字
      • 不可用關(guān)鍵字和保留字作變量名沸柔。JS關(guān)鍵字和保留字匯總
    var a = 10,
        b = 20;
        c = 30;
        d;

    document.write(a,b,c,d);
    //102030Undefined

3、基本類型

  • 值類型——數(shù)據(jù)類型
    • 不可變的原始值(stack棧數(shù)據(jù))
      • Number铲敛、String褐澎、Boolean、Undefined(聲明變量未賦值時就是undefined)伐蒋、Null
    • 引用值(heap堆數(shù)據(jù))
      • array工三、object迁酸、function
    • 引用這和原始值唯一的不同就是賦值形式的不同。

1俭正、語言分為兩大類奸鬓,一類是靜態(tài)語言,一類是動態(tài)語言段审。動態(tài)語言基本是解釋性語言全蝶,解釋性語言基本是腳本語言。
2寺枉、解釋性語言特點是:聲明變量的關(guān)鍵字只有一個抑淫,比如JS聲明變量,只有var姥闪。不像java始苇,有int、float筐喳、char催式、string。
3避归、為什么只需要var聲明變量荣月,而不需要聲明變量類型?因為解釋性語言是解釋一行執(zhí)行一行梳毙,不會通篇翻譯哺窄。
4、如果你還不知道什么是解釋性語言账锹,請看這里

關(guān)于JavaScript

  • JavaScript是動態(tài)語言萌业,javascript的數(shù)字類型天生就是浮點型。
  • JavaScript是由值決定類型奸柬,其他的比如java生年,是由類型決定值,比如你定義了一個int a;你就必須給a賦一個int類型的值廓奕。
  • 原始值是存在棧里抱婉,棧是first-in-last-out。站內(nèi)存之間愛你的賦值都是拷貝桌粉。
    var a = 10;
    var b = a;  //是對a值得一個拷貝
    a = 20;  //重新賦值時授段,并不止在原基礎(chǔ)上改變的,而是申請了一個內(nèi)存空間番甩,再把a指向這個心的地址空間
    document.write(b);
    //10
  • 引用值存在heap堆里侵贵,堆是先進(jìn)先出。引用值得棧內(nèi)存的是堆內(nèi)存的地址缘薛,真是的數(shù)據(jù)時存放在堆里的窍育。而引用值賦值的時候只是拷貝地址卡睦,不拷貝原始數(shù)據(jù)。
    var arr = [1];
    var arr1 = arr;
    arr.push(2);
    document.write(arr1);
    //1,2
    //引用值arr1跟著變化了 漱抓,因為它指向的本身就是arr的地址表锻。

注意:

    var arr = [1];
    var arr1 = arr;
    arr = [1,3];   //這里新申請了一個內(nèi)存空間,不會覆蓋原有的地址空間乞娄,也就是說原來的[1,2]地址還在瞬逊,且arr1指向了它。
    document.write(arr1);
    //1,2

4仪或、JS運算符

但凡是運算确镊,就要求結(jié)果。

運算操作符

- +
    - 數(shù)學(xué)運算范删、字符串連接
    - **任何數(shù)據(jù)類型加字符串都等于字符串**
- "-"蕾域、"*"、"/"到旦、"%"旨巷、"="、"()"
- 優(yōu)先級"="最弱添忘,"()"最強
- "--"采呐、"++"、"+="搁骑、"-="懈万、"%="、"*="等
    //示例:
    var a = a+1;   //a1
    var a = 1 + 1 + a;   //11a
    var a = a + 1 + 1;    //a11

除號"/"的一些注意事項:

  • 1/0 結(jié)果是Infinity(Infinity是Number型)
  • 0/0 結(jié)果是 Nan(not a number)靶病。但是Num也是number的一員
  • -1/0 結(jié)果是-Infinity
  • 記住運算順序:先括號, 再乘除口予,最后加減

先看一個練習(xí)題娄周,很簡單,給定兩個數(shù)a沪停、b煤辨,交換兩個數(shù)。

常見方法木张,引入新變量

    var a = 123;
    var b = 234;
    var c = a;
    a = b;
    b= c;

上面的方法可以實現(xiàn)众辨,但是可以用另外一個更上一層的方法。

    var a = 123;
    var b = 234;
    a = a + b;
    b = a - b;
    a = a - b;
    //這樣寫的好處是舷礼,如果a鹃彻、b變化了,仍然使用妻献。

比較運算符

  • >蛛株、<团赁、==、<=谨履、>=欢摄、!=;
  • 比較結(jié)果為Boolean值笋粟。

任何東西都能比較怀挠,只是規(guī)則不同,例如字符串之間比較的是ASC碼順序害捕。

  • ASC I碼是七位二進(jìn)制數(shù)(0~128)绿淋。
  • ASC II碼是八位二進(jìn)制數(shù)(1~255)。

邏輯運算符

  • $$吨艇、||躬它、!东涡。
  • 運算結(jié)果為真實值冯吓。

被認(rèn)定為false的值。

  • undefined疮跑、null组贺、NaN、""祖娘、0失尖、false。

  • 特殊原則:

    NaN = NaN;     //false

也就是非數(shù)NaN不等于任何東西渐苏,包括自己掀潮。

下面重點說一下邏輯運算符:

先打破一下的傳統(tǒng)的觀念:

    var a = 1&&2;
    document.write(a);
    //猜一下結(jié)果是多少呢?
    //結(jié)果是2琼富,是不是超出意外仪吧。

&&運算

  • &&運算符,有兩個表達(dá)式的情況鞠眉,先看第一個表達(dá)式轉(zhuǎn)換成布爾值的結(jié)果薯鼠,如果結(jié)果為真,那么它會看第二個表達(dá)式轉(zhuǎn)換為布爾值的結(jié)果械蹋,然后如果只有兩個表達(dá)式的話出皇,只要看到第二個表達(dá)式,就可以返回該表達(dá)式的值哗戈;如果第一個表達(dá)式轉(zhuǎn)換為布爾值為false郊艘,直接返回第一個表達(dá)式的值。
  • 如果有兩個以上表達(dá)式的話,只要為真就往后走暇仲,為假時返回假的位置的表達(dá)式的值步做。

實際應(yīng)用

    //實際應(yīng)用
    var data = "這里是從后臺傳過來的數(shù)據(jù)";
    data && fn(data);
    //這里的意思是說,當(dāng)data有意義時奈附,才執(zhí)行fn(data)調(diào)用全度,否則會造成系統(tǒng)的癱瘓。

||運算

遇到false就一直走斥滤,直到遇見ture或最后一個表達(dá)式則返回表達(dá)式的值将鸵。

    var num = 0 || false || 1;
    document.write(num);
    //false

寫兼容。注意佑颇,在IE瀏覽器里面顶掉,window.event里面有值,e是undefined挑胸;在非IE瀏覽器里面痒筒,window.event里面為undefined,e是有值得茬贵。

    div.onclick = function(e){
        var event = e || window.event;
    }

!運算

    var a = !123;    //先把a變成布爾值再取反簿透。

    var b = !!null;
    var c = !!"";
    var d = !!NaN;
    //b、c解藻、d都返回false
    //這里現(xiàn)將后面的值變成布爾值再取反老充。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市螟左,隨后出現(xiàn)的幾起案子啡浊,更是在濱河造成了極大的恐慌,老刑警劉巖胶背,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巷嚣,死亡現(xiàn)場離奇詭異,居然都是意外死亡钳吟,警方通過查閱死者的電腦和手機廷粒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砸抛,“玉大人,你說我怎么就攤上這事树枫≈北海” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵砂轻,是天一觀的道長奔誓。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么厨喂? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任和措,我火速辦了婚禮,結(jié)果婚禮上蜕煌,老公的妹妹穿的比我還像新娘派阱。我一直安慰自己,他們只是感情好斜纪,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布贫母。 她就那樣靜靜地躺著,像睡著了一般盒刚。 火紅的嫁衣襯著肌膚如雪腺劣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天因块,我揣著相機與錄音橘原,去河邊找鬼。 笑死涡上,一個胖子當(dāng)著我的面吹牛趾断,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吓懈,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歼冰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耻警?” 一聲冷哼從身側(cè)響起隔嫡,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甘穿,沒想到半個月后腮恩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡温兼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年秸滴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片募判。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡荡含,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出届垫,到底是詐尸還是另有隱情释液,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布装处,位于F島的核電站误债,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寝蹈,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一李命、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧箫老,春花似錦封字、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至界斜,卻和暖如春仿耽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背各薇。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工项贺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人峭判。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓开缎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親林螃。 傳聞我的和親對象是個殘疾皇子奕删,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,078評論 25 707
  • 0.web前端需要學(xué)習(xí)的知識: (ps, html5, css3, javascript核心, DOM編程疗认, UI...
    廖馬兒閱讀 446評論 0 1
  • 這個月去坦桑尼亞完残,在肯尼亞的內(nèi)羅畢機場轉(zhuǎn)機時,老婆幫忙辦點了一杯咖啡横漏,她不但把咖啡端來了谨设,還幫忙拿了兩個糖包及...
    回音_陳毅力閱讀 400評論 1 2
  • 一個夢,遇見了很多年不曾見過的人缎浇,依稀還是多年前的少年模樣扎拣,這個夢總感覺很熟悉,熟悉到惡心的感覺素跺! 我想是有些東西...
    紫蘇葉子妖閱讀 156評論 0 0
  • Create a webpack.mix.js file in root directory: Delete gu...
    kylesean閱讀 645評論 0 0