前端基礎之JavaScript

一、JavaScript的歷史


二、ECMAScript

注:ES6就是指ECMAScript 6。

儘管 ECMAScript 是一個重要的標準,但它並不是 JavaScript 唯一的部分,當然,也不是唯一被標準化的部分。實際上,一個完整的 JavaScript 實現是由以下 3 個不同部分組成的:

    核心(ECMAScript) 

    文檔對象模型(DOM) Document object model (整合js,css,html)

    瀏覽器對象模型(BOM) Broswer object model(整合js和瀏覽器)

簡單地說,ECMAScript 描述了JavaScript語言本身的相關內容。

    JavaScript 是腳本語言

    JavaScript 是一種輕量級的編程語言。

    JavaScript 是可插入 HTML 頁面的編程代碼。

    JavaScript 插入 HTML 頁面後,可由所有的現代瀏覽器執行。


三、JavaScript引入方式

1、在HTML文件的Script標籤內寫代碼

        <script>

          // 在這裏寫你的JS代碼

        </script>

2、HTML文件引入額外的JS文件

    <script src="myscript.js"></script>


四、JavaScript語言規範

1、註釋(註釋是代碼之母)

    // 這是單行註釋

    /*

        這是多行註釋

    */

2、結束符

    JavaScript中的語句要以分號(;)爲結束符。


五、JavaScript語言基礎

1、變量聲明

    JavaScript的變量名可以使用_,數字,字母,$組成,不能以數字開頭。

    聲明變量使用 var 變量名; 的格式來進行聲明

        var name = "Alex";

        var age = 18;

注意:

    變量名是區分大小寫的。

    推薦使用駝峯式命名規則。

    保留字不能用做變量名。


六、JavaScript數據類型

1、JavaScript擁有動態類型

    var x;  // 此時x是undefined

    var x = 1;  // 此時x是數字

    var x = "Alex"  // 此時x是字符串 

2、數字類型

    JavaScript不區分整型和浮點型,就只有一種數字類型。

    var a = 12.34;

    var b = 20;

    var c = 123e5;  // 12300000

    var d = 123e-5;  // 0.00123

3、還有一種NaN,表示不是一個數字(Not a Number)。

常用方法:

    parseInt("123")  // 返回123

    parseInt("ABC")  // 返回NaN,NaN屬性是代表非數字值的特殊值。該屬性用於指示某個值不是數字。

    parseFloat("123.456")  // 返回123.456

4、字符串

    var a = "Hello"

    var b = "world;

    var c = a + b; 

    console.log(c);  // 得到Helloworld

常用方法:

方法說明
.length返回長度
.trim()移除空白
.trimLeft()移除左邊的空白
.trimRight()移除右邊的空白
.charAt(n)返回第n個字符
.concat(value, ...)拼接
.indexOf(substring, start)子序列位置
.substring(from, to)根據索引獲取子序列
.slice(start, end)切片
.toLowerCase()小寫
.toUpperCase()大寫
.split(delimiter, limit)分割


拼接字符串一般使用“+”

補充:slice和ubstirng的區別:

        string.slice(start, stop)和string.substring(start, stop):

        兩者的相同點:

            如果start等於end,返回空字符串

            如果stop參數省略,則取到字符串末

            如果某個參數超過string的長度,這個參數會被替換爲string的長度

        substirng()的特點:

            如果 start > stop ,start和stop將被交換

            如果參數是負數或者不是數字,將會被0替換

        silce()的特點:

            如果 start > stop 不會交換兩者

            如果start小於0,則切割從字符串末尾往前數的第abs(start)個的字符開始(包括該位置的字符)

            如果stop小於0,則切割在從字符串末尾往前數的第abs(stop)個字符結束(不包含該位置字符)

 5、布爾類型  區別於Python,true和false都是小寫。

    var a = true;

    var b = false;

    ""(空字符串)、0、null、undefined、NaN都是false。

6、數組 類似於Python中的列表。

    var a = [123, "ABC"];

    console.log(a[1]);  // 輸出"ABC"

     常用方法:

方法說明
.length數組的大小
.push(ele)尾部追加元素
.pop()獲取尾部的元素
.unshift(ele)頭部插入元素
.shift()頭部移除元素
.slice(start, end)切片
.reverse()反轉
.join(seq)將數組元素連接成字符串
.concat(val, ...)連接數組
.sort()排序

 補充:關於sort的問題:

        如果調用sort方法時沒有傳入參數,將按字母順序對數組中的元素進行排序,說得更精確點,是按照字符編碼的順序進行排序。要實現這一點,首先應把數組的元素都轉換成字符串(如有必要),以便進行比較。

        如果想按照其他標準進行排序,就需要提供比較函數,該函數要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:

        若 a 小於 b,在排序後的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。

        若 a 等於 b,則返回 0。

        若 a 大於 b,則返回一個大於 0 的值。

        // 根據上面的規則自行實現一個排序函數:

        function sortNumber(a,b) {

          return a - b

        }

        // 調用sort方法時將定義好的排序函數傳入即可。

        stringObj.sort(sortNumber)

可以使用以下方式遍歷數組中的元素:

    var a = [10, 20, 30, 40];

    for (var i=0;i<a.length;i++) {

      console.log(i);

    }

7、null和undefined

    null表示值是空,一般在需要指定或清空一個變量時纔會使用,如 name=null;

    undefined表示當聲明一個變量但未初始化時,該變量的默認值是undefined。還有就是函數無明確的返回值時,返回的也是undefined。

    null表示變量的值是空,undefined則表示只聲明瞭變量,但還沒有賦值。

8、類型查詢

typeof是一個一元運算符(就像++,--,!,- 等一元運算符),不是一個函數,也不是一個語句。

    typeof "abc"  // "string"

    typeof null  // "object"

    typeof true  // "boolean"

    typeof 123 // "number"

對變量或值調用 typeof 運算符將返回下列值之一:

    undefined - 如果變量是 Undefined 類型的

    boolean - 如果變量是 Boolean 類型的

    number - 如果變量是 Number 類型的

    string - 如果變量是 String 類型的

    object - 如果變量是一種引用類型或 Null 類型的


六、運算符

1、算數運算符

    + - * / % ++ --

2、比較運算符

    > >= < <= != == === !==

注意:

    1 == “1”  // true

    1 === "1"  // false

3、邏輯運算符

    && || !

4、賦值運算符

    = += -= *= /=


七、流程控制

1、if-else

    var a = 10;

    if (a > 5){

      console.log("yes");

    }else {

      console.log("no");

    }

2、if-else if-else 

    var a = 10;

    if (a > 5){

      console.log("a > 5");

    }else if (a < 5) {

      console.log("a < 5");

    }else {

      console.log("a = 5");

    }

3、switch

    var day = new Date().getDay();

    switch (day) {

      case 0:

      console.log("Sunday");

      break;

      case 1:

      console.log("Monday");

      break;

    default:

      console.log("...")

    }

注意:switch中的case子句通常都會加break語句,否則程序會繼續執行後續case中的語句。

4、for

    for (var i=0;i<10;i++) {

      console.log(i);

    }

5、while

    var i = 0;

    while (i < 10) {

      console.log(i);

      i++;

    }

6、三元運算

    var a = 1;

    var b = 2;

    var c = a > b ? a : b


八、函數

1、函數定義

JavaScript中的函數和Python中的非常類似,只是定義方式有點區別。

// 普通函數定義

    function f1() {

      console.log("Hello world!");

    }

// 帶參數的函數

    function f2(a, b) {

      console.log(arguments);  // 內置的arguments對象

      console.log(arguments.length);

      console.log(a, b);

    }

// 帶返回值的函數

    function sum(a, b){

      return a + b;

    }

    sum(1, 2);  // 調用函數

// 匿名函數方式

    var sum = function(a, b){

      return a + b;

    }

    sum(1, 2);

// 立即執行函數

    (function(a, b){

      return a + b;

    })(1, 2);

2、arguments

    function add(a,b){

      console.log(a+b);

      console.log(arguments.length)

    }

    add(1,2)

3、函數的全局變量和局部變量

局部變量:

    在JavaScript函數內部聲明的變量(使用 var)是局部變量,所以只能在函數內部訪問它(該變量的作用域是函數內部)。只要函數運行完畢,本地變量就會被刪除。

全局變量:

    在函數外聲明的變量是全局變量,網頁上的所有腳本和函數都能訪問它。

變量生存週期:

    JavaScript變量的生命期從它們被聲明的時間開始。

    局部變量會在函數運行以後被刪除。

    全局變量會在頁面關閉後被刪除。

4、作用域

首先在函數內部查找變量,找不到則到外層函數查找,逐步找到最外層。

幾個例子:

1)

    var city = "BeiJing";

    function f() {

      var city = "ShangHai";

      function inner(){

        var city = "ShenZhen";

        console.log(city);

      }

      inner();

    }

    f();  //輸出結果是?ShenZhen

2)

    var city = "BeiJing";

    function Bar() {

      console.log(city);

    }

    function f() {

      var city = "ShangHai";

      return Bar;

    }

    var ret = f();

    ret();  // 打印結果是?Beijing

3)閉包

    var city = "BeiJing";

    function f(){

        var city = "ShangHai";

        function inner(){

            console.log(city);

        }

        return inner;

    }

    var ret = f();

    ret(); // 打印結果是?ShangHai


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章