日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

学习JavaScript第一弹(上)——ECMAScript(JavaScript基础)

發(fā)布時間:2024/3/26 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习JavaScript第一弹(上)——ECMAScript(JavaScript基础) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、編程語言、ECMA、JavaScript、瀏覽器的發(fā)展史

1.1 編程語言

編程
  • 編程:
    • 就是讓計算機為解決某個問題而使用某種程序設(shè)計語言編寫程序代碼,并最終得到結(jié)果的過程。
  • 計算機程序:
    • 就是計算機所執(zhí)行的一系列的指令集合,而程序全部都是用我們所掌握的語言來編寫的,所以人們要控制計算機一定要通過計算機語言向計算機發(fā)出命令。
計算機語言
  • 計算機語言指用于人與計算機之間通訊的語言,它是人與計算機之間傳遞信息的媒介。

  • 計算機語言的種類非常的多,總的來說可以分成機器語言,匯編語言和高級語言三大類。

  • 實際上計算機最終所執(zhí)行的都是 機器語言,它是由“0”和“1”組成的二進制數(shù),二進制是計算機語言的基礎(chǔ)。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1FUILawB-1619832519409)(G:/BaiduNetdiskDownload/【00】源碼+課件+常用軟件/07-10 JavaScript網(wǎng)頁編程/01-JavaScript基礎(chǔ)語法資料/JavaScript基礎(chǔ)第01天/4-筆記/images/圖片1.png)]

編程語言
編程語言:可以通過類似于人類語言的“語言”來控制計算機,讓計算機為我們做事情,這樣的語言就叫做編程語言(Programming Language)。編程語言是用來控制計算機的一系列指令,它有固定的格式和詞匯(不同編程語言的格式和詞匯不一樣),必須遵守。如今通用的編程語言有兩種形式:匯編語言和高級語言。 語言類型說明
匯編語言匯編語言和機器語言實質(zhì)是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的標識符,容易識別和記憶。
高級語言高級語言主要是相對于低級語言而言,它并不是特指某一種具體的語言,而是包括了很多編程語言,常用的有C語言、C++、Java、C#、Python、PHP、JavaScript、Go語言、Objective-C、Swift等。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-jX4d8dFV-1619832519419)(G:/BaiduNetdiskDownload/【00】源碼+課件+常用軟件/07-10 JavaScript網(wǎng)頁編程/01-JavaScript基礎(chǔ)語法資料/JavaScript基礎(chǔ)第01天/4-筆記/images/圖片2.png)]

翻譯器
高級語言所編制的程序不能直接被計算機識別,必須經(jīng)過轉(zhuǎn)換才能被執(zhí)行,為此,我們需要一個翻譯器。翻譯器可以將我們所編寫的源代碼轉(zhuǎn)換為機器語言,這也被稱為二進制化。

編程語言和標記語言區(qū)別
語言說明
編程語言編程語言有很強的邏輯和行為能力。在編程語言里, 你會看到很多 if else 、for 、while等具有邏輯性和行為能力的指令,這是主動的。
標記語言標記語言(html)不用于向計算機發(fā)出指令,常用于格式化和鏈接。標記語言的存在是用來被讀取的, 他是被動的。

總結(jié)

  • 計算機可以幫助人類解決某些問題
  • 程序員利用編程語言編寫程序發(fā)出指令控制計算機來實現(xiàn)這些任務(wù)
  • 編程語言有機器語言、匯編語言、高級語言
  • 高級語言需要一個翻譯器轉(zhuǎn)換為計算機識別的機器語言
  • 編程語言是主動的有很強的邏輯性
  • 1.2 ECMA

    ? ECMAScript是由網(wǎng)景的布蘭登·艾奇開發(fā)的一種腳本語言的標準化規(guī)范;最初命名為Mocha,后來改名為LiveScript,最后重命名為JavaScript。1995年12月,升陽與網(wǎng)景聯(lián)合發(fā)表了JavaScript。1996年11月,網(wǎng)景公司將JavaScript提交給歐洲計算機制造商協(xié)會進行標準化。ECMA-262的第一個版本于1997年6月被Ecma組織采納。ECMA Script是ECMA-262標準化的腳本語言的名稱。盡管JavaScript和JScript與ECMAScript兼容,但包含超出ECMA Script的功能。

    ? ECMAScript是一種可以在宿主環(huán)境中執(zhí)行計算并能操作可計算對象的基于對象的程序設(shè)計語言。ECMAScript最先被設(shè)計成一種Web腳本語言,用來支持Web頁面的動態(tài)表現(xiàn)以及為基于Web的客戶機—服務(wù)器架構(gòu)提供服務(wù)器端的計算能力。但作為一種腳本語言, ECMAScript具備同其他腳本語言一樣的性質(zhì),即“用來操縱、定制一個已存在系統(tǒng)所提供的功能,以及對其進行自動化”。

    1.3 JavaScript

    ? JavaScript(簡稱“JS”) 是一種具有函數(shù)優(yōu)先的輕量級,解釋型或即時編譯型的編程語言。雖然它是作為開發(fā)Web頁面的腳本語言而出名,但是它也被用到了很多非瀏覽器環(huán)境中,JavaScript 基于原型編程、多范式的動態(tài)腳本語言,并且支持面向?qū)ο蟆⒚钍胶吐暶魇?#xff08;如函數(shù)式編程)風格。 [1]

    ? JavaScript在1995年由Netscape公司的Brendan Eich,在網(wǎng)景導(dǎo)航者瀏覽器上首次設(shè)計實現(xiàn)而成。因為Netscape與Sun合作,Netscape管理層希望它外觀看起來像Java,因此取名為JavaScript。但實際上它的語法風格與Self及Scheme較為接近。 [2]

    ? JavaScript的標準是[ECMAScript ](https://baike.baidu.com/item/ECMAScript /1889420)。截至 2012 年,所有瀏覽器都完整的支持ECMAScript 5.1,舊版本的瀏覽器至少支持ECMAScript 3 標準。2015年6月17日,ECMA國際組織發(fā)布了ECMAScript的第六版,該版本正式名稱為 ECMAScript 2015,但通常被稱為ECMAScript 6 或者ES2015。

    運行模式

    JavaScript是一種屬于網(wǎng)絡(luò)的高級腳本語言,已經(jīng)被廣泛用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁添加各式各樣的動態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現(xiàn)自身的功能的。 [6]

  • 是一種解釋性腳本語言(代碼不進行預(yù)編譯)。 [7]
  • 主要用來向HTML(標準通用標記語言下的一個應(yīng)用)頁面添加交互行為。 [7]
  • 可以直接嵌入HTML頁面,但寫成單獨的js文件有利于結(jié)構(gòu)和行為的分離。 [7]
  • 跨平臺特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等)。
  • JavaScript腳本語言同其他語言一樣,有它自身的基本數(shù)據(jù)類型,表達式和算術(shù)運算符及程序的基本程序框架。JavaScript提供了四種基本的數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型用來處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達式則可以完成較復(fù)雜的信息處理。
  • 1.4 瀏覽器

    瀏覽器是用來檢索、展示以及傳遞Web信息資源的應(yīng)用程序。Web信息資源由統(tǒng)一資源標識符( Uniform Resource Identifier,URI)所標記,它是一張網(wǎng)頁、一張圖片、一段視頻或者任何在Web上所呈現(xiàn)的內(nèi)容。使用者可以借助超級鏈接( Hyperlinks),通過瀏覽器瀏覽互相關(guān)聯(lián)的信息。 [1]

    瀏覽器窗口各部分功能如下。

    1、地址欄:用于輸入網(wǎng)站的地址,IE瀏覽器通過識別地址欄中的信息,正確連接用戶要訪問的內(nèi)容。如要登錄“網(wǎng)址之家”網(wǎng),只需在地址欄中輸入網(wǎng)址之家的網(wǎng)址:http://www.hao123.com,然后按[Enter]鍵或單擊地址欄右側(cè)的按鈕即可。在地址欄中還附帶了IE中常用命令的快捷按鈕,如刷新?、停止(x)等,前進、后退按鈕設(shè)置在地址欄前方 [2] 。

    2、菜單欄:由“文件” “編輯” “查看” “收藏夾” “工具”和“幫助”菜單組成。每個菜單中包含了控制IE工作的相關(guān)命令選項,這些選項包含了瀏覽器的所有操作與設(shè)置功能 [2] 。

    3、選項卡:從Internet Explorer8版本開始,IE瀏覽器可以使用多選項卡瀏覽方式,以選項卡的方式打開網(wǎng)站的頁面 [2] 。

    4、頁面窗口:是IE瀏覽器的主窗口,訪問的網(wǎng)頁內(nèi)容顯示在此。頁面中有些文字或?qū)ο缶哂谐溄訉傩?#xff0c;當鼠標指針放上去之后會變成手狀,單擊鼠標左鍵,瀏覽器就會自動跳轉(zhuǎn)到該鏈接指向的網(wǎng)址;單擊鼠標右鍵,則會彈出快捷菜單,可以從中選擇要執(zhí)行的操作命令 [2] 。

    5、狀態(tài)欄:實時顯示當前的操作和下載Web頁面的進度情況。正在打開網(wǎng)頁時,還會顯示網(wǎng)站打開的進度。另外,通過狀態(tài)欄還可以縮放網(wǎng)頁 [2] 。

    瀏覽器的種類很多,但是主流的內(nèi)核只有四種,各種不同的瀏覽器,就是在主流內(nèi)核的基礎(chǔ)上,添加不同的功能構(gòu)成 [3] 。

    1、Trident內(nèi)核

    代表產(chǎn)品為Internet Explorer,又稱其為IE內(nèi)核。Trident(又稱為MSHTML),是微軟開發(fā)的一種排版引擎。使用Trident渲染引擎的瀏覽器有:IE、傲游、世界之窗瀏覽器、Avant、騰訊TT、Netscape 8、NetCaptor、Sleipnir、GOSURF、GreenBrowser和KKman等 [3] 。

    2、Gecko內(nèi)核

    代表作品為Mozilla Firefox。Gecko是一套開放源代碼的、以C++編寫的網(wǎng)頁排版引擎,是最流行的排版引擎之一,僅次于Trident。使用它的最著名瀏覽器有Firefox、Netscape6至9 [3] 。

    3、WebKit內(nèi)核

    代表作品有Safari、Chrome。WebKit是一個開源項目,包含了來自KDE項目和蘋果公司的一些組件,主要用于Mac OS系統(tǒng),它的特點在于源碼結(jié)構(gòu)清晰、渲染速度極快。缺點是對網(wǎng)頁代碼的兼容性不高,導(dǎo)致一些編寫不標準的網(wǎng)頁無法正常顯示 [3] 。

    4、Presto內(nèi)核

    代表作品Opera。Presto是由Opera Software開發(fā)的瀏覽器排版引擎,供Opera 7.0及以上使用。它取代了舊版Opera 4至6版本使用的Elektra排版引擎,包括加入動態(tài)功能,例如網(wǎng)頁或其部分可隨著DOM及Script語法的事件而重新排版 [3] 。

    2、基本語法:值、變量、運算、語句等等

    2.1 變量

    ? 聲明變量

    /*** 1、聲明變量* var 是一個JS關(guān)鍵字,用來聲明變量(variable),使用該關(guān)鍵字聲明變量后,計算機會自動為變量分配內(nèi)存空間* age 是程序員定義的變量名,通過變量名就可以訪問分配的空間* var 變量名;*/ var age;

    ? 賦值

    /*** 2、賦值* 變量賦值 變量名=值;*/ age=18;

    ? 變量初始化

    /*** 3、變量初始化* 聲明變量并賦值,就是變量的初始化*/var name='zs'; **變量的語法擴展** /*** 4、變量的語法擴展* 1.更新變量* 2.同時聲明多個變量* 3.聲明變量的特殊情況*/ var num=18; num=81; // 變量重新被賦值,原值被覆蓋var age=10,name='zs',sex='Man'; // 同時聲明多個變量,使用英文逗號隔開var a; console.log(a); // 只聲明,不賦值 結(jié)果:undefined console.log(b); // 不聲明,不復(fù)制,直接使用 結(jié)果:報錯 c=10; console.log(c); // 不聲明,只賦值 結(jié)果:10

    ? 變量的命名規(guī)則

    /*** ## 變量的命名規(guī)則* 由字母(A-Z a-z)、數(shù)字(0-9)、下劃線(_)、美元符號($)組成。* 嚴格區(qū)分大小寫。* 不能以數(shù)字開頭。* 不能是關(guān)鍵字、保留字。* 變量名必須有意義。 * 遵守駝峰式命名法。首字母小寫,后面單詞的首字母需要大寫*/ // Good: var userAge,num01,_name; // true var app ; var App; //屬于兩個變量 var userName; //true (駝峰式命名法) // Bad: var 18age; // false var var,for,while; //false var MMD,BBD,nl; // false nl=>age

    2.2 值

    ? 變量(值)是用來存儲值的所在處,它們有名字和數(shù)據(jù)類型。變量的數(shù)據(jù)類型決定了如何將代表這些值的位存儲到計算機的內(nèi)存中。JavaScript 是一種弱類型或者說動態(tài)語言

    JS 把數(shù)據(jù)類型分為兩類:

    • 簡單數(shù)據(jù)類型 (Number,String,Boolean,Undefined,Null)
    • 復(fù)雜數(shù)據(jù)類型 (object)
    基本數(shù)據(jù)類型

    JavaScript 中的簡單數(shù)據(jù)類型及其說明如下:

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-DiXQfTYH-1619832519424)(G:/BaiduNetdiskDownload/【00】源碼+課件+常用軟件/07-10 JavaScript網(wǎng)頁編程/01-JavaScript基礎(chǔ)語法資料/JavaScript基礎(chǔ)第01天/4-筆記/images/圖片16.png)]

    • 數(shù)字型 Number

      var age=21; // 整數(shù) var Age=21.3747; // 小數(shù)

      數(shù)字型進制

      /*** 1、數(shù)字型進制* 最常見的進制有二進制、八進制、十進制、十六進制。*/ var num1=07; // 對用十進制7 var num3=080; // 十進制=>80 var num=0xA; // 十六進制數(shù)字序列范圍:0~9以及A~F

      數(shù)字型范圍

      /*** 2、數(shù)字型范圍* 最大值:Number.MAX_VALUE* 最小值:Number.MIN_VALUE*/ console.log(Number.MAX_VALUE); // 結(jié)果:1.7976931348623157e+308 console.log(Number.MIN_VALUE); // 結(jié)果:5e-32

      數(shù)字型的三個特殊值

      /*** 3、數(shù)字型的三個特殊值* Infinity => 無窮大* -Infinity => 無窮小* NaN => Not a Number*/ console.log(Infinity > num); // 大于任何數(shù)值 console.log(-Infinity < num); // 小于任何數(shù)值 console.log(NaN('a')); // 不是一個數(shù)值

      isNaN

      /*** 4、isNaN* 用來判斷一個變量是否為非數(shù)字的類型,返回true或者false*/ var userAge=21; console.log(isNaN(userAge)); // false,21 不是一個非數(shù)字 var userName='andy'; console.log(userName); // true,"andy" 是一個非數(shù)字
    • 字符串型 String

      字符串引號嵌套

      /*** 1、字符串引號嵌套* JS 可以使用單引號嵌套雙引號,或者雙引號嵌套單引號 (外雙內(nèi)單,外單內(nèi)雙)*/ // Good: var strMsg='我們是"苦逼的"程序員'; var strMsg2="我們是'高尚的'工程師"; // Bad: var badQuotes='What on earth?"; // 報錯,不能單雙引號搭配

      字符串轉(zhuǎn)義符

      /*** 2.字符串轉(zhuǎn)義符* 類似HTML里面的特殊字符,字符串中也有特殊字符,稱為轉(zhuǎn)義符。* 轉(zhuǎn)義符都是 \ 開頭的,常用的轉(zhuǎn)義符及其說明如下:* \n => 換行符* \\ => 斜杠* ' => 單引號* " => 雙引號* \t => tab縮進* \b => 空格*/ console.log('\tThis\bis\bthe\bjavascript,\nHelllo\bworld!');

      字符串長度

      /*** 3、字符串長度* 字符串是由若干個字符組成的,這些字符的數(shù)量就是字符串的長度。* 通過自負床的length屬性可以獲取整個字符串的長度。*/ var strMsg="我們是帥氣多金的程序員!"; console.log(strMsg.length); // 12

      字符串拼接

      /*** 4.字符串拼接* 多個字符串之間可以使用+進行拼接,* 拼接方式:字符串+任何類型=拼接之后的字符串* 拼接前會把字符串相加大的任何類型轉(zhuǎn)成字符串,再拼接成一個新的字符串* 口訣:數(shù)值相加,字符相連*/ // 字符串 "相加" console.log('hello'+' '+'world'); // hello world // 數(shù)值字符串 "相加" console.log('100'+'100'); // 100100 // 數(shù)值字符串 + 數(shù)值 console.log('110'+120); // 110120

      字符串拼接加強

      /*** 5、字符串拼接加強* 經(jīng)常會將字符串和變量來拼接,變量可以很方便的修改里面的值* 變量是不能添加引號的,因為加引號的變量會變成字符串* 如果變量兩側(cè)都有字符串拼接,口訣:引引相加,刪掉數(shù)字,變量寫在中間*/ // Good: console.log('小花' + 18); // 只要有字符就會相連 var age = 18; console.log('小花' + age); // pink老師18 console.log('小花' + age + '歲啦'); // pink老師18歲啦 // Bad: console.log('小花age歲啦'); // 這樣不行哦

      布爾型Boolean

      /*** 6、布爾型Boolean* 布爾型有兩個值:true||false,其中true表示真(對),false表示假(錯)* 布爾型和數(shù)字型相加的時候,true為值1,false為值0。*/ console.log(true+1); // 2 console.log(false+1); // 1

      Undefined和 Null

      /*** 7、undefined和Null*/ // 一個聲明后沒有被賦值的變量會有一個默認值undfined(如果進行相連或相加時,結(jié)果如下:) var variable; console.log(variable); // undefined console.log('你好' + variable); // 你好undefined console.log(11 + variable); // NaN console.log(true + variable); // NaN// 一個聲明變量給null值,里面存的值為空 var vari = null; console.log('你好' + vari); // 你好null console.log(11 + vari); // 11 console.log(true + vari); // 1
    類型轉(zhuǎn)換

    使用表單、prompt 獲取過來的數(shù)據(jù)默認是字符串類型的,此時就不能直接簡單的進行加法運算,而需要轉(zhuǎn)換變量的數(shù)據(jù)類型。

    轉(zhuǎn)換為字符串

    方式說明案例
    toString()轉(zhuǎn)成字符串var num=1;alert(num.toString());
    String() 強制轉(zhuǎn)換轉(zhuǎn)成字符串var num=1;alert(String(num));
    + 拼接字符串和字符串拼接的結(jié)構(gòu)都是字符串var num=1;alert(num+‘字符串’);
    • toString() 和 String() 使用方式不一樣。

    • 三種轉(zhuǎn)換方式,更多第三種加號拼接字符串轉(zhuǎn)換方式, 這一種方式也稱之為隱式轉(zhuǎn)換。

    轉(zhuǎn)換為數(shù)字型(重點)

    方式說明案例
    parseInt(string)將string類型轉(zhuǎn)成整數(shù)數(shù)值型parseInt(‘78’)
    parseFloat(string)將string類型轉(zhuǎn)成浮點數(shù)值型parseFloat(‘78.21’)
    Number(string) 強制轉(zhuǎn)換將string類型轉(zhuǎn)成數(shù)值型Number(‘12’)
    (- * /) js 隱式轉(zhuǎn)換利用算術(shù)運算符轉(zhuǎn)換為數(shù)值型‘12’-0
    • 注意 parseInt 和 parseFloat 單詞的大小寫,這2個是重點
    • 隱式轉(zhuǎn)換是我們在進行算數(shù)運算的時候,JS 自動轉(zhuǎn)換了數(shù)據(jù)類型

    ? 轉(zhuǎn)換為布爾型

    方式說明案例
    Boolean()函數(shù)其他類型轉(zhuǎn)成布爾值Boolean(‘true’)
    • 代表空、否定的值會被轉(zhuǎn)換為 false ,如 ‘’、0、NaN、null、undefined

    • 其余值都會被轉(zhuǎn)換為 true

    2.3 運算

    算數(shù)運算符
    • 算術(shù)運算符概述

      概念:算術(shù)運算使用的符號,用于執(zhí)行兩個變量或值的算術(shù)運算。

      運算符描述實例
      +加+10 + 20 = 30
      -=減10 - 20 = -10
      *10 * 20 = 200
      /10 / 20 = 0.5
      %取余(取模)9 % 2 = 1
    • 浮點數(shù)的精度問題

      /*** 浮點數(shù)精度問題* 浮點數(shù)值的最高精度是17為小數(shù),但在進行算術(shù)計算時其精確度遠遠不如整數(shù)* 注意:不要判斷兩個浮點數(shù)的算術(shù)結(jié)果是否相等*/ var result=0.1 + 0.2; // 結(jié)果:0.30000000000000004 不是0.3 console.log(0.07 * 100); // 結(jié)果:7.000000000000001 不是7
    • 表達式和返回值

      表達式:是由數(shù)字、運算符、變量等以能求得數(shù)值的有意義排列方法所得的組合

      簡單理解:是由數(shù)字、運算符、變量等組成的式子

      表達式最終都會有一個結(jié)果,返回給開發(fā)者,稱為返回值

    遞增和遞減運算符
    • 遞增和遞減運算符概述

      如果需要反復(fù)給數(shù)字變量添加或減去1,可以使用遞增(++)和遞減( – )運算符來完成。

      /*** 在JavaScript中,遞增(++)和遞減(--)既可放在變量前面,還可放在變量后面。* 放在變量前面時,我們可以稱為前置遞增(遞減)運算符,* 放在變量后面時,我們可以稱為后置遞增(遞減)運算符。* 注:遞增和遞減運算符必須和變量配合使用。*/
    • 遞增運算符

      • 前置遞增 / 遞減 運算符
      /*** 1、前置遞增/遞減運算符* ++num 前置遞增,就是自加1,類似于 num = num + 1; ==> ++num* 口訣:先自加,后返回值。* --num 前置遞減,就是自減1,類似于 num = num - 1; ==> --num* 口訣:先自減,后返回值。*/ var num = 10; console.log(++num + 10); // 21 console.log(--num - 10); // -1
      • 后置遞增 / 遞減運算符
      /*** 2、后置遞增/遞減運算符* num++ 后置遞增,就是自加1,類似于 num = num + 1; ==> num++* 口訣:先放回值,后自加* num-- 后置遞減,就是自減1,類似于 num = num - 1; ==> num--* 口訣:先放回值,后自減*/ var num = 10; console.log(10 + num++); // 20 console.log(10 - num--); // 0
    比較運算符
    • 比較運算符概述

      概念:比較運算符(關(guān)系運算符)是兩個數(shù)據(jù)進行比較時所使用的運算符,比較運算后,會返回一個布爾值(true / false)作為比較運算的結(jié)果。

      運算符名稱說明案例結(jié)果
      <小于1 < 2true
      >大于1 > 2false
      <=小于等于2 <= 2true
      >=大于等于3 >= 2true
      ==判等17 == 17true
      !=不等17 != 17false
      === !==全等/不全等37 === ‘37’false
    • 等號比較

      符號作用用法
      =賦值把右邊的 值給左邊
      ==判斷判斷兩邊的值是否相等(注意有隱式轉(zhuǎn)換)
      ===全等判斷兩邊的值和數(shù)據(jù)類型是否完全相同
    邏輯運算符
    • 邏輯運算符概述

      概念:邏輯運算符是用來進行布爾值運算的運算符,其返回值也是布爾值。后面開發(fā)中經(jīng)常用于多個條件的判斷

      邏輯運算符說明案例
      &&邏輯與,簡稱 ’與‘ andtrue && false
      ||邏輯或,簡稱 ’或‘ ortrue || false
      邏輯非,簡稱 ’非‘ not!true
    • 邏輯與&&

      兩邊都是 true才返回 true,否則返回 false

      ?

    • 邏輯或 ||

      兩邊都是 true才返回 true,否則返回 false

      ?

    • 邏輯非 !

      邏輯非(!)也叫作取反符,用來取一個布爾值相反的值,如 true 的相反值是 false

      var isOk = !true; console.log(isOk); // false
    • 短路運算(邏輯中斷)

      短路運算的原理:當有多個表達式(值)時,左邊的表達式值可以確定結(jié)果時,就不再繼續(xù)運算右邊的表達式的值;

      • 邏輯與

        /*** 邏輯與* 語法:表達式1 && 表達式2* - 如果表達式1的值為真,則返回表達式2* - 如果表達式1的值為假,則返回表達式1*/ console.log(123 && 456); // 456 console.log(0 && 456); // 0 console.log(123 && 456 && 789); // 789
      • 邏輯或

        /** * 邏輯或 * 語法:表達式1 || 表達式2 * - 如果表達式1的值為真,則返回表達式1 * - 如果表達式1的值為假,則返回表達式2 */ console.log(123 || 456); // 123 console.log(0 || 456); // 456 console.log(123 || 456 || 789); // 123
    賦值運算符
    概念:用來把數(shù)據(jù)賦值給變量的運算符。 賦值運算符說明案例
    =直接賦值var userName=‘值’;
    +=、-=加、減一個數(shù)后,再賦值var age=10; age+=5; // 15
    *=、/=、%=乘、除、取模 后,再賦值var age=2;age*=5;// 10
    運算符優(yōu)先級
    優(yōu)先級運算符順序
    1小括號()
    2一元運算符++,–,!
    3算術(shù)運算符先*, /, % ;后 +, -
    4關(guān)系運算符> , = ,<, <=
    5相等運算符== , !=, === , !==
    6邏輯運算符先 &&, 后 ||
    7賦值運算符=
    8逗號運算符
    • 一元運算符里面的邏輯非優(yōu)先級很高
    • 邏輯與比邏輯或優(yōu)先級高

    2.4 語句

    順序流程控制

    順序結(jié)構(gòu)是程序中最簡單、最基本的流程控制,它沒有特定的語法結(jié)構(gòu),程序會按照代碼的先后順序,依次執(zhí)行,程序中大多數(shù)的代碼都是這樣執(zhí)行的。
    ?

    分支流程控制
    • 分支結(jié)構(gòu)

      由上到下執(zhí)行代碼的過程中,根據(jù)不同的條件,執(zhí)行不同的路徑代碼(執(zhí)行代碼多選一的過程),從而得到不同的結(jié)果

      JS 語言提供了兩種分支結(jié)構(gòu)語句:if 語句、switch 語句

    • if 語句

      • 語法結(jié)構(gòu)
      /*** if分支* 語句可以理解為一個行為,循環(huán)語句和分支語句就是典型的語句。* 一個程序由很多個語句組成,一般情況下,會分割成一個一個的語句。*/ // 條件成立執(zhí)行代碼,否則什么也不做 if (條件表達式) {// 條件成立執(zhí)行的代碼語句 }
      • 執(zhí)行流程

    • if else語句(雙分支語句)

      • 語法結(jié)構(gòu)

        // 條件成立 執(zhí)行 if 里面代碼,否則執(zhí)行else 里面的代碼 if (條件表達式) {// [如果] 條件成立執(zhí)行的代碼 } else {// [否則] 執(zhí)行的代碼 }
      • 執(zhí)行流程

    • if else if 語句(多分支語句)

      • 語法結(jié)構(gòu)

        // 適合于檢查多重條件。 if (條件表達式1) {語句1} else if (條件表達式2) {語句2} else if (條件表達式3) {語句3.... } else {// 上述條件都不成立執(zhí)行此處代碼 }
      • 執(zhí)行邏輯

    三元表達式
    • 語法結(jié)構(gòu)

      表達式1 ? 表達式2 : 表達式3;
    • 執(zhí)行思路

      • 如果表達式1為 true ,則返回表達式2的值,如果表達式1為 false,則返回表達式3的值
      • 簡單理解: 就類似于 if else (雙分支) 的簡寫
    switch分支流程控制
    • 語法結(jié)構(gòu)

      switch 語句也是多分支語句,它用于基于不同的條件來執(zhí)行不同的代碼。當要針對變量設(shè)置一系列的特定值的選項時,就可以使用 switch。

      /*** switch分支* switch 語句也是多分支語句,它用于基于不同的條件來執(zhí)行不同的代碼。* 當要針對變量設(shè)置一系列的特定值的選項時,就可以使用 switch。* 注意: 執(zhí)行case 里面的語句時,如果沒有break,則繼續(xù)執(zhí)行下一個case里面的語句。*/ switch( 表達式 ){ case value1:// 表達式 等于 value1 時要執(zhí)行的代碼break;case value2:// 表達式 等于 value2 時要執(zhí)行的代碼break;default:// 表達式 不等于任何一個 value 時要執(zhí)行的代碼 }
      • switch :開關(guān) 轉(zhuǎn)換 , case :小例子 選項

      • 關(guān)鍵字 switch 后面括號內(nèi)可以是表達式或值, 通常是一個變量

      • 關(guān)鍵字 case , 后跟一個選項的表達式或值,后面跟一個冒號

      • switch 表達式的值會與結(jié)構(gòu)中的 case 的值做比較

      • 如果存在匹配全等(===) ,則與該 case 關(guān)聯(lián)的代碼塊會被執(zhí)行,并在遇到 break 時停止,整個 switch 語句代碼執(zhí)行結(jié)束

      • 如果所有的 case 的值都和表達式的值不匹配,則執(zhí)行 default 里的代碼

    • switch 語句和 if else if 語句的區(qū)別

      • 一般情況下,它們兩個語句可以相互替換
      • switch…case 語句通常處理 case為比較確定值的情況, 而 if…else…語句更加靈活,常用于范圍判斷(大于、等于某個范圍)
      • switch 語句進行條件判斷后直接執(zhí)行到程序的條件語句,效率更高。而if…else 語句有幾種條件,就得判斷多少次。
      • 當分支比較少時,if… else語句的執(zhí)行效率比 switch語句高。
      • 當分支比較多時,switch語句的執(zhí)行效率比較高,而且結(jié)構(gòu)更清晰。
    循環(huán)
    1. for循環(huán)
    • 語法結(jié)構(gòu)

      /*** for循環(huán)* 執(zhí)行過程:* 1.初始化變量,初始化操作在整個 for 循環(huán)只會執(zhí)行一次。* 2.執(zhí)行條件表達式,如果為true,則執(zhí)行循環(huán)體語句,否則退出循環(huán),循環(huán)結(jié)束。*/ for(初始化變量; 條件表達式; 操作表達式 ){//循環(huán)體 } 名稱作用
      初始化變量通常被用于初始化一個計數(shù)器,該表達式可以使用 var 關(guān)鍵字聲明新的變量,這個變量幫我們來記錄次數(shù)。
      條件表達式用于確定每一次循環(huán)是否能被執(zhí)行。如果結(jié)果是 true 就繼續(xù)循環(huán),否則退出循環(huán)。
      操作表達式用于確定每一次循環(huán)是否能被執(zhí)行。如果結(jié)果是 true 就繼續(xù)循環(huán),否則退出循環(huán)。
  • 執(zhí)行操作表達式,此時第一輪結(jié)束。
  • 第二輪開始,直接去執(zhí)行條件表達式(不再初始化變量),如果為 true ,則去執(zhí)行循環(huán)體語句,否則退出循環(huán)。
  • 繼續(xù)執(zhí)行操作表達式,第二輪結(jié)束。
  • 后續(xù)跟第二輪一致,直至條件表達式為假,結(jié)束整個 for 循環(huán)。
  • 斷點調(diào)試:

    斷點調(diào)試是指自己在程序的某一行設(shè)置一個斷點,調(diào)試時,程序運行到這一行就會停住,然后你可以一步一步往下調(diào)試,調(diào)試過程中可以看各個變量當前的值,出錯的話,調(diào)試到出錯的代碼行即顯示錯誤,停下。斷點調(diào)試可以幫助觀察程序的運行過程 斷點調(diào)試的流程: 1、瀏覽器中按 F12--> sources -->找到需要調(diào)試的文件-->在程序的某一行設(shè)置斷點 2、Watch: 監(jiān)視,通過watch可以監(jiān)視變量的值的變化,非常的常用。 3、摁下F11,程序單步執(zhí)行,讓程序一行一行的執(zhí)行,這個時候,觀察watch中變量的值的變化。
    2. 雙重for循環(huán)
    • 雙重 for 循環(huán)概述

      循環(huán)嵌套是指在一個循環(huán)語句中再定義一個循環(huán)語句的語法結(jié)構(gòu),例如在for循環(huán)語句中,可以再嵌套一個for 循環(huán),這樣的 for 循環(huán)語句我們稱之為雙重for循環(huán)。

    • 雙重 for 循環(huán)語法

      /*** 雙重for循環(huán)* 1 內(nèi)層循環(huán)可以看做外層循環(huán)的循環(huán)體語句* 2 內(nèi)層循環(huán)執(zhí)行的順序也要遵循 for 循環(huán)的執(zhí)行順序 * 3 外層循環(huán)執(zhí)行一次,內(nèi)層循環(huán)要執(zhí)行全部次數(shù)*/ for (外循環(huán)的初始; 外循環(huán)的條件; 外循環(huán)的操作表達式) {for (內(nèi)循環(huán)的初始; 內(nèi)循環(huán)的條件; 內(nèi)循環(huán)的操作表達式) { 需執(zhí)行的代碼;} }
    • for 循環(huán)小結(jié)

      • for 循環(huán)可以重復(fù)執(zhí)行某些相同代碼
      • for 循環(huán)可以重復(fù)執(zhí)行些許不同的代碼,因為我們有計數(shù)器
      • for 循環(huán)可以重復(fù)執(zhí)行某些操作,比如算術(shù)運算符加法操作
      • 隨著需求增加,雙重for循環(huán)可以做更多、更好看的效果
      • 雙重 for 循環(huán),外層循環(huán)一次,內(nèi)層 for 循環(huán)全部執(zhí)行
      • for 循環(huán)是循環(huán)條件和數(shù)字直接相關(guān)的循環(huán)
    3. while循環(huán)

    while語句的語法結(jié)構(gòu)如下:

    /*** while 循環(huán)* 執(zhí)行思路:* 1 先執(zhí)行條件表達式,如果結(jié)果為 true,則執(zhí)行循環(huán)體代碼;如果為 false,則退出循環(huán),執(zhí)行后面代碼* 2 執(zhí)行循環(huán)體代碼* 3 循環(huán)體代碼執(zhí)行完畢后,程序會繼續(xù)判斷執(zhí)行條件表達式,如條件仍為true,則會繼續(xù)執(zhí)行循環(huán)體,直到循環(huán)條件為 false 時,整個循環(huán)過程才會結(jié)束* 注:使用 while 循環(huán)時一定要注意,它必須要有退出條件,否則會成為死循環(huán)*/ while (條件表達式) {// 循環(huán)體代碼 }
    4. do-while循環(huán)

    do… while 語句的語法結(jié)構(gòu)如下:

    /*** do-while循環(huán)* 執(zhí)行思路:* 1 先執(zhí)行一次循環(huán)體代碼 * 2 再執(zhí)行條件表達式,如果結(jié)果為 true,則繼續(xù)執(zhí)行循環(huán)體代碼,如果為 false,則退出循環(huán),繼續(xù)執(zhí)行后面代碼* 注:先再執(zhí)行循環(huán)體,再判斷,do…while循環(huán)語句至少會執(zhí)行一次循環(huán)體代碼*/ do {// 循環(huán)體代碼 - 條件表達式為 true 時重復(fù)執(zhí)行循環(huán)體代碼 } while(條件表達式);
    5. continue、break

    continue 關(guān)鍵字用于立即跳出本次循環(huán),繼續(xù)下一次循環(huán)(本次循環(huán)體中 continue 之后的代碼就會少執(zhí)行一次)。

    3、各種類型的函數(shù)、參數(shù)與原理

    函數(shù)的聲明方式
    • 自定義函數(shù)方式(命名函數(shù))

      // 函數(shù)關(guān)鍵字function自定義函數(shù)方式 function fn(){...} fn();// 函數(shù)調(diào)用(函數(shù)體上下都可以用)
      • 因為有名字,所以也被稱為命名函數(shù)
      • 調(diào)用函數(shù)的代碼既可以放到聲明函數(shù)的前面,也可以放在聲明函數(shù)的后面
    • 函數(shù)表達式方式(匿名函數(shù))

      //利用函數(shù)表達式定義函數(shù),后面跟分號結(jié)尾 var fn=function(){...}; fn(); // 函數(shù)調(diào)用(函數(shù)體下才能用)
      • 因為函數(shù)沒有名字,所以也被稱為匿名函數(shù)
      • 這個fn 里面存儲的是一個函數(shù)
      • 函數(shù)表達式方式原理跟聲明變量方式是一致的
      • 函數(shù)調(diào)用的代碼必須寫到函數(shù)體后面
    函數(shù)的參數(shù)

    ? 函數(shù)參數(shù)語法

    /*** 函數(shù)參數(shù)語法* 形參:函數(shù)定義時設(shè)置接受調(diào)用時傳入* 實參:函數(shù)調(diào)用時傳入小括號內(nèi)的真實數(shù)據(jù)* 參數(shù)的作用:在函數(shù)內(nèi)部某些值不固定,可以通過參數(shù)調(diào)用函數(shù)時傳遞不同的值進去* 1. 調(diào)用的時候?qū)崊⒅凳莻鬟f給形參的* 2. 形參簡單理解為:不用聲明的變量* 3. 實參和形參的多個參數(shù)之間用逗號(,)分隔*/ // 帶參數(shù)的函數(shù)聲明 function 函數(shù)名(形參1, 形參2 , 形參3...) { // 可以定義任意多的參數(shù),用逗號分隔// 函數(shù)體 } // 帶參數(shù)的函數(shù)調(diào)用 函數(shù)名(實參1, 實參2, 實參3...);
    函數(shù)形參和實參數(shù)量不匹配時
    參數(shù)個數(shù)說明
    實參個數(shù) = 形參個數(shù)輸出正確結(jié)果
    實參個數(shù) > 形參個數(shù)只取到形參的個數(shù)
    實參個數(shù) < 形參個數(shù)多的形參定義為undfined,結(jié)果為NaN
    注意:在JavaScript中,形參的默認值是undefined。

    小結(jié):

    • 函數(shù)可以帶參數(shù)也可以不帶參數(shù)
    • 聲明函數(shù)的時候,函數(shù)名括號里面的是形參,形參的默認值為 undefined
    • 調(diào)用函數(shù)的時候,函數(shù)名括號里面的是實參
    • 多個參數(shù)中間用逗號分隔
    • 形參的個數(shù)可以和實參個數(shù)不匹配,但是結(jié)果不可預(yù)計,我們盡量要匹配
    函數(shù)返回值

    ? return 語句

    /*** 函數(shù)返回值* 函數(shù)調(diào)用整體代表的數(shù)據(jù);函數(shù)執(zhí)行完成后可以通過return語句將指定數(shù)據(jù)返回。* - 在使用 return 語句時,函數(shù)會停止執(zhí)行,并返回指定的值* - 如果函數(shù)沒有 return ,返回的值是 undefined*/ // 聲明函數(shù) function 函數(shù)名(){...return 需要返回的值; } // 調(diào)用函數(shù) 函數(shù)名(); // 此時調(diào)用函數(shù)就可以得到函數(shù)體內(nèi)return 后面的值

    break ,continue ,return 的區(qū)別

    • break :結(jié)束當前的循環(huán)體(如 for、while)
    • continue :跳出本次循環(huán),繼續(xù)執(zhí)行下次循環(huán)(如 for、while)
    • return :不僅可以退出循環(huán),還能夠返回 return 語句中的值,同時還可以結(jié)束當前的函數(shù)體內(nèi)的代碼
    arguments的使用

    arguments 是一個類似數(shù)組的對象, 對應(yīng)于傳遞給函數(shù)的參數(shù)。

    ? 當不確定有多少個參數(shù)傳遞的時候,可以用 arguments 來獲取。JavaScript 中,arguments實際上它是當前函數(shù)的一個內(nèi)置對象。所有函數(shù)都內(nèi)置了一個 arguments 對象,arguments 對象中存儲了傳遞的所有實參。arguments展示形式是一個偽數(shù)組,因此可以進行遍歷。偽數(shù)組具有以下特點:

    • 具有 length 屬性

    • 按索引方式儲存數(shù)據(jù)

    • 不具有數(shù)組的 push , pop 等方法

      注意:在函數(shù)內(nèi)部使用該對象,用此對象獲取函數(shù)調(diào)用時傳的實參。

      function fn(arguments){console.log(arguments); }
      • arguments.callee

        指向當前執(zhí)行的函數(shù)。

      • arguments.caller **

        指向調(diào)用當前函數(shù)的函數(shù)。

      • arguments.length

        指向傳遞給當前函數(shù)的參數(shù)數(shù)量。

      arguments 對象可以與剩余參數(shù)、默認參數(shù)和結(jié)構(gòu)賦值參數(shù)結(jié)合使用。

      在嚴格模式下,剩余參數(shù)剩余參數(shù)、默認參數(shù)和結(jié)構(gòu)賦值參數(shù)的存在不會改變 arguments 對象的行為,但是在非嚴格模式下就有所不同了。

    函數(shù)的原理
    /*** 函數(shù)的原理* 1、函數(shù)名:函數(shù)名時函數(shù)開始地址的一個標簽* 2、參數(shù):函數(shù)的參數(shù)是給函數(shù)處理的資料,是函數(shù)的變量。函數(shù)的參數(shù)可以有不止一個,也可以沒有* 3、本地變量:本地變量是只在本函數(shù)中有效,函數(shù)結(jié)束后酒不可用的變量,本地變量對其他函數(shù)不可見。* 4、靜態(tài)變量:靜態(tài)變量是直到結(jié)果都一直有效的變量。函數(shù)內(nèi)的靜態(tài)變量對其他模塊/函數(shù)不可見。* 5、全局變量:全局變量是函數(shù)外申請的變量。如果多個函數(shù)用到這個全局變量,最好直接采用傳參的方式。配置文件保存到全局變量中是個不錯的點子。* 6、返回地址:返回地址是一個不直接使用的隱含的參數(shù)。簡而言之,就是函數(shù)執(zhí)行完之后去執(zhí)行指令的地址。* 7、返回值:返回值是主要的方法傳遞執(zhí)行結(jié)果給上層函數(shù),大多數(shù)語言都只允許有一個返回值。* */

    4、預(yù)編譯、暗示全局變量

    預(yù)編譯

    預(yù)編譯階段發(fā)生變量聲明和函數(shù)聲明,沒有初始化行為(賦值),匿名函數(shù)不參與預(yù)編譯 ; 只有在解釋執(zhí)行階段才會進行變量初始化 ;

    預(yù)編譯(函數(shù)執(zhí)行前)

  • 創(chuàng)建AO對象(Active Object)
  • 查找函數(shù)形參及函數(shù)內(nèi)變量聲明,形參名及變量名作為AO對象的屬性,值為undefined
  • 實參形參相統(tǒng)一,實參值賦給形參
  • 查找函數(shù)聲明,函數(shù)名作為AO對象的屬性,值為函數(shù)引用
  • 預(yù)編譯(腳本代碼塊script執(zhí)行前)

  • 查找全局變量聲明(包括隱式全局變量聲明,省略var聲明),變量名作全局對象的屬性,值為undefined

  • 查找函數(shù)聲明,函數(shù)名作為全局對象的屬性,值為函數(shù)引用

  • 預(yù)編譯小結(jié)
    • 預(yù)編譯兩個小規(guī)則
    • 函數(shù)聲明整體提升-(具體點說,無論函數(shù)調(diào)用和聲明的位置是前是后,系統(tǒng)總會把函數(shù)聲明移到調(diào)用前面)
    • 變量 聲明提升-(具體點說,無論變量調(diào)用和聲明的位置是前是后,系統(tǒng)總會把聲明移到調(diào)用前,注意僅僅只是聲明,所以值是undefined)
    • 預(yù)編譯前奏
    • imply global 即任何變量,如果未經(jīng)聲明就賦值,則此變量就位全局變量所有。(全局域就是Window)
    • 一切聲明的全局變量,全是window的屬性; var a = 12;等同于Window.a = 12;
    • 函數(shù)預(yù)編譯發(fā)生在函數(shù)執(zhí)行前一刻。
  • 總結(jié)

    以上是生活随笔為你收集整理的学习JavaScript第一弹(上)——ECMAScript(JavaScript基础)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。