一篇文章帶你快速入門JavaScript(自學者福利)

一、開始之前

1、JavaScript的簡史
1)1992年Nombas開發出C-minus-minus,也叫C–,沒錯,就是C++的另一個兄弟。它是嵌入式腳本語言(最初綁定在CEnvi軟件中).後將其改名ScriptEase,是一種客戶端執行語言。
2)那個時候有好幾個版本的Web編程語言,歐洲計算機制造協會爲了統一幾家語言,定義了ECMA-262規範。從此,Web 瀏覽器將 ECMAScript 作爲 JavaScript 實現的基礎。
3)Javascript 是Angularjs、Vue 等技術的基礎,它是一門相當完善的編程語言,能夠寫前端也可以寫後端,只是用作前端開發比較多

2、JavaScript的組成
儘管 ECMAScript 是一個重要的標準,但完整的JavaScript其實有三大部分組成:

  • 核心(ECMAScript)
  • 文檔對象模型(DOM) Document object model (整合js,css,html)
  • 瀏覽器對象模型(BOM) Broswer object model(整合js和瀏覽器)

順便提一下,JavaScript的基於對象的編程語言,屬於面向對象的一種特殊情況,JavaScript本身提供了很多我們可以直接使用的對象。

3、JavaScript的引入方式
1)直接引入

<script>
    alert("hello JS");
</script>

2)導入js文件
js文件

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

4、注意:
<script>標籤一般放在<body>標籤內,也可以放在與<body>和<head>標籤同級
JavaScript使用來註釋/* */ //
使用{}來封裝代碼塊
每個語句結束後可加‘;’號,也可不加分號

二、數據類型

1、變量

1)概念:
ES5 只有全局作用域和函數作用域,沒有塊級作用域,這帶來很多不合理的場景,因此在ES6中用let和const來解決這個問題。

  • 直接定義:全局變量
  • 帶var:只有全局作用域和函數作用域概念,沒有塊級作用域的概念。但是會把{}內也假稱爲塊作用域
  • 帶let:只有塊級作用域的概念 ,由 { } 包括起來,if語句和for語句裏面的{ }也屬於塊級作用域。
//整個for循環是父級作用域,循環體內是另一個{}塊級作用域
    for( let i = 0 ; i < 3 ; i++ )
    {
        let i = 'hello';    //用var替代let會報錯提示已經定義,若沒有任何關鍵字則每次賦值給i,最後只會輸出一次abc
        console.log(i);   // 輸出3次abc
    }

2)var和let的區別:
第一,就是var是全局作用域和函數作用域概念,而let是塊級作用域概念;
第二,let在變量聲明之前就訪問變量的話,會直接提示 ReferenceError,而不像 var 那樣使用默認值 undefined;
第三, var 存在變量提升,而 let,const(後面會提及)聲明的變量卻不存在變量提升,所以用 let 定義的變量一定要在聲明後再使用,否則會報錯。

3)暫時性死區(TDZ):

var a = 99;
if(ture)
{
    console.log(a);  //ReferrenceError
    let a = 66;
}

因爲let所聲明的變量會鎖在它所在的作用域裏,不允許訪問。意思就是,它會先掃描一遍,把let聲明的變量保存起來,但是不允許使用,這時候你訪問a,由於此作用域中有a,就不用訪問外面的a了,但是你不能在它聲明之前訪問它。
也就是說,var變量可以多次聲明,而let不允許在相同作用域內重複聲明。

<script>
    if (true) {
      let a;
      let a; // Uncaught SyntaxError: Identifier 'a' has already been declared
    }

    if(true){
      var d;
      var d;    //不會報錯
    }

    if (true) {
      var c;
      let c; // Uncaught SyntaxError: Identifier 'c' has already been declared
    }

    if (true) {
      let d;
      var d; // Uncaught SyntaxError: Identifier 'd' has already been declared
    }
</script>

4)const常量:
const常量與let的作用域是一樣的,都是塊級作用域。
const 一旦被賦值,就不能再改變,但這並不意味着使用 const 聲明的變量本身不可變,只是說它不可被再次賦值,因此const 聲明的變量必須經過初始化(定義時就賦值)。

//會報錯,Uncaught ReferenceError: ture is not defined
    // const zoroo;
    // zoroo="ok";
    // console.log(zoroo);
    //正確定義
    const zoroo="ok";
    console.log(zoroo);

2、數字類型(number)

1)概念

  • 最基本的數據類型;
  • 不區分整型數值和浮點型數值;
  • 所有數字都採用64位浮點格式存儲,相當於Java和C語言中的double格式;

2)NaN表示Not a number,非數字類型

//NaN表示Not a number,非數字類型
        console.log(parseInt("hello"));
        console.log(parseInt("123hello"));
        console.log(parseInt(3.1415926));

3、字符串類型(string)

  • 是由Unicode字符、數字、標點符號組成的序列;
  • JavaScript中沒有字符類型
  • 常用特殊字符在字符串中的表達:
    字符串中部分特殊字符必須加上右劃線
    常用的轉義字符 \n:換行 ':單引號 ":雙引號 \:右劃線

以上幾條都是字符串類型的幾個基礎點,在後文介紹“字符串對象”時還有關於字符串更多的用法

4、布爾型、Null和Undefined

1)布爾型
Boolean類型僅有兩個值:true和false,也代表1和0,實際運算中true=1,false=0

2)undefined型
Undefined 型只有一個值,即 undefined;
當聲明的變量未初始化時,該變量的默認值是 undefined;
當函數無明確返回值時,返回的也是值 “undefined”。

3)Null型
Null型只有一個專用值 null,即它的字面量;
值 undefined 實際上是從值 null 派生來的,因此 ECMAScript 把它們定義爲相等的;
儘管這兩個值相等,但它們的含義不同:undefined 是聲明瞭變量但未對其初始化時賦予該變量的值,null 則用於表示尚未存在的對象(在討論 typeof 運算符時,簡單地介紹過這一點);
如果函數或方法要返回的是對象,那麼找不到該對象時,返回的通常是 null。

5、數據類型轉換

1)概念:
JavaScript屬於鬆散類型的程序語言,變量在聲明的時候並不需要指定數據類型;
變量只有在賦值的時候纔會確定數據類型;
表達式中包含不同類型數據則在計算過程中會強制進行類別轉換;

  • 數字 + 字符串:數字轉換爲字符串
  • 數字 + 布爾值:true轉換爲1,false轉換爲0
  • 字符串 + 布爾值:布爾值轉換爲字符串true或false
console.log("hello"+2);
        console.log("hello"+true);
        console.log(2+true);

2)強制數據類型轉換

  • parseInt函數: 強制轉換成整數 例如parseInt("3.1415926")=3 ; parseInt(“12a")=12 ;
  • parseFloat函數: 強制轉換成浮點數 parseFloat("123.456")=123.456
  • eval函數:將字符串強制轉換爲表達式並返回結果 console.log(eval("1+1")) 結果是2;
    console.log(eval("5+6"));會默認轉化成數字,結果是11

三、運算符

1、基本概念

  • 加(+)、 減(-)、 乘(*) 、除(/) 、餘數(% )
  • -號除了可以表示減號還可以表示負號 例如:x=-y
  • +號除了可以表示加法運算還可以用於字符串的連接 例如:“abc”+“def”=“abcdef”

2、 遞增(++) 與遞減(–)

		let i=10, j=20;
        console.log(i++)
        console.log(++i)
        console.log(j--)
        console.log(--j)

結果是:
遞增遞減
3、邏輯運算符

  • 等於 ( == ) 、不等於( != ) 、 大於( > ) 、 小於( < )

  • 大於等於(>=) 、小於等於(<=)

  • 與 (&&) 、或(||) 、非(!)

		let a=NaN;
        console.log(a==NaN);
        console.log(a!=NaN);
        console.log(2==2);
        console.log(2=="2");
        console.log("3">"20"); //最高位的ASCII碼

結果:
邏輯運算符

四、控制語句

1、if判斷語句
這個與其他編程語言沒有太大區別,格式如下:

		v1="灰太狼";
        if(v1=="慢羊羊")
        {
            alert("老傢伙");
        }
        else if(v1=="灰太狼")
        {
            alert("狼族統治");
        }
        else
        {
            alert("新任村長")
        }

2、switch選擇控制
這個與C語言中的switch用法幾乎是一樣的,格式如下:

		v2=52;
        switch(v2)
        {
            case 13:alert("一生");break;
            case 14:alert("一世");break;
            case 520:alert("五二零");break;
            default:alert("啥也不是");
        }

3、for循環
JavaScript裏的for循環也是和C語言、Java的幾乎相同:

		let v3;
        for(v3=0;v3<10;v3++)
        {
            // alert("v3當前的值爲:"+v3);
            document.write("<br>v3當前的值爲:"+v3);
        }

這裏的documents.write()表示將信息打印到頁面內,結果如下:
for循環

4、while循環
可以說是for循環的基礎版,for循環有三個參數,第一個是定義的值,第二個判斷條件,第三個是每循環一次進行的值操作。
在while循環內,沒有第一個和第三個參數。

		var i=1;
        while (i<=7)
        {
            document.write("<H"+i+">JavaScript</H "+i+"> ");
            document.write("<br>");
            i++;
        }

以上代碼實現的是循環輸出H1到H7字體大小:
while循環

5、異常處理

  • try:正常進行的部分
  • catch:出現異常纔會執行的部分
  • finally:無論如何都會執行的部分
try
        {
            console.log("正常執行!");
            //自行拋出一個異常
            throw Error("自定義異常!");
        }
        catch(e)
        {
            console.log("出現異常!"+e);
        }
        finally
        {
            console.log("終將執行的語句!");
        }

異常處理

五、ECMA對象

1、對象須知

  • object對象:ECMAScript 中的所有對象都由這個對象繼承而來;Object 對象中的所有屬性和方法都會出現在其他對象中
  • 11種內置對象:Array ,String , Date, Math, Boolean, Number Function,
    Global, Error, RegExp , Object
  • 在JavaScript可以用創建對象的方法定義變量,String、Math、Array、Date、RegExp都是JavaScript中重要的內置對象,在JavaScript程序大多數功能都是通過對象實現的
    對象

2、string對象

1)創建字符串的兩種方式
一是直接創建字符串,而是用string對象來創建字符串

	str1="Hello一號";  //字符串方式
    str2=new String("Hello二號");  //字符串對象方式
    console.log(typeof str1);
    console.log(typeof str2);
    console.log(str1.length);  //統計長度的屬性

2)字符串的常用方法

  • 格式編排方法
	str1="Hello一號";
    console.log(str1.italics()); //斜體
    console.log(str1.bold());  //加粗
    console.log(str1.anchor());  //變成a標籤

格式編排

  • 格式轉換
	var str1="helLO,JAvascript";
    var str2=str1.toLowerCase();  //全部變成小寫
    var str3=str1.toUpperCase();  //全部變成大寫
    console.log(str2);
    console.log(str3);

格式轉換

  • 獲取指定字符
	var str1="welcome to the world of JS!梔子!";
    var str2=str1.charAt(28);  //獲取28這個索引下的字符
    var str3=str1.charCodeAt(28);  //獲取28這個索引下字符的編碼
    console.log(str2);
    console.log(str3);

獲取字符

  • 查詢指定字符
	var str1="welcome to the world of JS!";
    var str2=str1.indexOf("o");  //查詢字符o的索引位置
    var str3=str1.lastIndexOf("l");  //查詢字符l的索引位置
    console.log(str2);
    console.log(str3);

查詢

  • 查詢字符串

match返回匹配字符串的數組,如果沒有匹配則返回null
search返回匹配字符串的首字符位置索引

	var str1="welcome to the world of JS!";
    var str2=str1.match("world");
    var str3=str1.search("world");
    console.log(str2[0]);
    console.log(str3);

查詢字符串

  • 截取字符串
	str1="Hello七號";
    console.log(str1.substr(1,5));  //從1截取到4
    console.log(str1.substring(1,5));  //從1截取到5
    console.log(str1.slice(1,5));  //從1切片到5
    console.log(str1.slice(-2,7));  //切片位置可以是負數

截取

  • 字符串替換
	var str1="abcdefgh";
    var str2=str1.replace("def","jjjjjj");  //用jjjjjj替換def
    console.log(str2);

替換

  • 字符串分割
	var str1="一,二,三,四,五,六,日";
    var str2=str1.split(",");  //用,號將字符串分割開
    console.log(str2);

分割

  • 字符串連接
	var str1="abcd";
    var str2=str1.concat("efgh");  //在str1後面接上一段
    console.log(str2);

連接

3、Array對象

1)一維數組

	arr1=[1314,"曾經滄海難爲水",{name:"Za huw"}];  //數組內可以放任意元素
    arr2=new Array(3);  //大小爲3的數組對象
    arr3=new Array("數組object對象",true,12345);  //用Array對象方式創建數組
    console.log(arr1);
    console.log(arr2);
    console.log(arr3);

一維
2)二維數組

	cnarr1=new Array(4);
    cnarr1[0]=new Array(7);
    cnarr1[0][0]="Monday";
    cnarr1[0][1]="Tuesday";
    cnarr1[0][2]="Wednesday";
    cnarr1[0][3]="Thursday";
    cnarr1[0][4]="Friday";
    cnarr1[0][5]="Saturday";
    cnarr1[0][6]="Sunday";
    console.log(cnarr1);

第一維的大小爲4,索引爲0的第二維大小爲7
二維

3)數組對象的方法
數組1
數組2

4)join方法

	arr4=new Array("除卻","巫山","不是雲",11,22,33,4);
    console.log(arr4.join("--"));

join
5)toString方法

	vv=new Array(11,22,33,4);
    console.log(vv.toString());
    console.log(typeof vv.toString())

tostring

6)concat方法

	vv2= Array(123,4,5);
    ret=vv2.concat([678,9,10]);
    console.log(ret);
    console.log(typeof ret);

concat

7)reverse方法

	vv3=[11,22,33,44];
    vv4=[5,40,6,1,7];
    console.log(vv3.reverse());  //順序顛倒

顛倒

8)兩種排序
不正經的:

	vv4=[5,40,6,1,7];
    console.log(vv4.sort());

正經的:

	function so(a,b)
    {
        return a-b;
    }
    console.log(vv4.sort(so));

排序
9)push入棧與pop出棧
這兩種出入棧方式都是先進後出

	arr8=[1,2,3];
    arr8.push(4,5,6);  //入棧,加入到最後面
    console.log(arr8); 
    console.log(arr8.pop());  //出棧,移除最後一個6

棧1
10)unshift入棧與shift出棧

	arr9=[8,9,10];
    arr10=["world"];
    arr9.unshift(4,5,6,7);  //入棧,加入到最前面
    arr10.unshift("hello,");  //入棧
    arr9.shift();  //出棧,移除第一個
    console.log(arr9);
    console.log(arr10);

棧2

4、函數對象

1)JS函數概念

  • 可以使用變量、常量或表達式作爲函數調用的參數
  • 函數由關鍵字function定義
  • js的函數加載執行與python不同,它是整體加載完纔會執行,所以執行函數放在函數聲明上面或下面都可以

2)兩種定義方式

  • 複雜版
	obj=new Function("name","console.log(\"哈哈哈\"+name)");
    obj("平底鍋!");
  • 常用版
	function add(x,y,z)
    {
        return x+y+z;
    }
    console.log(add(1,2,3,4,5));  //數字多了不會報錯,只會取前三個
    console.log(add("兩情若是長久時,","又豈在","朝朝暮暮。"));  //字符串也能相加

定義

3)不限參數個數的函數

	function add()
    {
        sum=0;
        for(i=0;i<arguments.length;i++)
        {
            sum+=arguments[i];
        }
        return sum;
    }
    console.log(add(1,2,3,4,5,6,7,8,9,10));

不限個數
4)匿名函數
說白了就是沒有名字的函數,也叫自執行函數;
好處就是簡便;
缺點就是易讀性差

(function(arv){alert(arv);})("歡迎訪問!");

這裏表示的就是一個沒有名字的函數,執行內容在{}內,形參參數是arv;
調用函數時傳入的參數是“歡迎訪問”
最終結果:
匿名函數

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