1. 程式人生 > >小白學前端--------------JavaScript基本語法

小白學前端--------------JavaScript基本語法

JavaScript基本語法

一.JavaScript引入方式

1.引入方式

  • Script標籤內

    <script>
      // 在這裡寫你的JS程式碼
    </script>
    
  • 引入額外的JS檔案

    <script src="myscript.js"></script>
    
  • 通過事件屬性定義在元素內部

    <button onclick="alert('啊,好疼啊')">點我啊</button>
    
  • 註釋

    // 這是單行註釋
    
    /*
    這是
    多行註釋
    */
    
  • JavaScript中的語句要以分號(;)為結束符。

  • document.write(‘你是不是喜歡我?’); 輸出到頁面上

  • console.log(‘hello world’); 輸出到控制檯

2.JavaScript 程式

  • 三個基本彈框

    alert() 
    跳出彈窗,只有確定按鈕
    confirm() 
    跳出彈窗,有確定與取消按鈕,控制檯可以得到返回值truefalse
    prompt()
    跳出彈窗,可以輸入文字內容,會顯示在控制檯(取消得到null)
    
  • 獲取HTML中的DOM元素

    document.getElementById()
    
  • 元素的應用 得到元素的屬性

  • 事件的應用 觸發了事件在執行某段程式碼(onclick)

  • 函式的應用

  • 運算子的應用

  • 新增改變元素的內容

二.JavaScript語言基礎

1.變數

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

  • 宣告變數使用 var 變數名; 的格式來進行宣告

  • ES6新增了let命令,用於宣告變數。其用法類似於var,但是所宣告的變數只在let命令所在的程式碼塊內有效。例如:for迴圈的計數器就很適合使用let命令。

  • ES6新增const用來宣告常量。一旦宣告,其值就不能改變。

    var name = "Alex";
    let age = 18;
    const PI = 3.1415; 
    var a=100,b=200,c=300;	同時宣告多個變數s
    

    變數名是區分大小寫的。

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

    保留字不能用做變數名。

2.資料型別

原始型別 Number String Boolean Null Undefined

物件型別 Object Array

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

    • 還有一種NaN,表示不是一個數字(Not a Number)。但是NaN本身是一個Number型別,可以使用isNaN(引數)判斷
  • 字串

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

    拼接字串一般用"+"

    ES6中引入了模板字串。模板字串(template string)是增強版的字串,用反引號(`)標識。它可以當做普通字串使用,也可以用來定義多行字串,或者在字串中嵌入變數。

    `這是普通字串!`
    
    `這是多行的
    文字`
    
    // 字串中嵌入變數
    var name = "q1mi", time = "today";
    `Hello ${name}, how are you ${time}?`
    
  • 布林值true和false

    • “”(空字串)、0、null、undefined、NaN都是false.
  • null和undefined

    • null表示值是空,一般在需要指定或清空一個變數時才會使用,如 name=null;
    • undefined表示當宣告一個變數但未初始化時,該變數的預設值是undefined。還有就是函式無明確的返回值時,返回的也是undefined。
    • null表示變數的值是空,undefined則表示只聲明瞭變數,但還沒有賦值。
  • 資料型別轉換

    • 自動轉換:取決於運算子
    • 強制轉換:Number() String() Boolean()
  • 物件Object

    • JavaScript 中的所有事物都是物件:字串、數值、陣列、函式…此外,JavaScript 允許自定義

    • JavaScript 提供多個內建物件,比如 String、Date、Array 等等。

    • 物件只是帶有屬性和方法的特殊資料型別。

    • 陣列物件的作用是:使用單獨的變數名來儲存一系列的值。類似於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() 排序
    .forEach() 將陣列的每個元素傳遞給回撥函式
    .splice() 刪除元素,並向陣列新增新元素。
    .map() 返回一個數組元素呼叫函式處理後的值的新陣列

    關於sort()需要注意:

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

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

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

    var a = [10, 20, 30, 40];
    for (var i=0;i<a.length;i++) {
      console.log(a[i]);
    }* 
    
  • symbol

    ES6新引入了一種新的原始資料型別(Symbol),表示獨一無二的值。它是JavaScript語言的第7種資料型別。

  • 型別查詢 typeof

    typeof "abc"  // "string"
    typeof null  // "object"
    typeof true  // "boolean"
    typeof 123 // "number"
    

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

    對變數或值呼叫 typeof 運算子將返回下列值之一:

    • undefined - 如果變數是 Undefined 型別的
    • boolean - 如果變數是 Boolean 型別的
    • number - 如果變數是 Number 型別的
    • string - 如果變數是 String 型別的
    • object - 如果變數是一種引用型別或 Null 型別的
  • 弱型別和強型別 動態型別和靜態型別(瞭解)

    • 動態型別: 不需要提前為變數指定資料型別

    • 靜態型別: 需要為變數提前指定資料型別

    • 強型別: 資料型別不能自動轉換

    • 弱型別: 資料可以自動轉換

      JavaScript   弱型別  動態型別
      python       強型別  動態型別
      

3.運算子

  • 算數運算子

    +  -  *  /  %  ++  --
    
  • 比較運算子

    > < <= >= (!=  == 弱等於) (!== === 強等於)
    
  • 邏輯運算子

    &&=and ||=or !=not
    
  • 賦值運算子

    = += -= *= /=
    
  • 其他運算子

    ?:
    typeof
    + 字串拼接
    in
    instanceof
    void 
    

4.流程控制

  • if-else

    var a = 10
    if(a>5){
    console.log("大於5");
    }else{
    console.log("小於5");
    }
    
  • switch…case

    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中的語句。

  • 分支結構巢狀

    if (表示式) {
        if (表示式) {
            code....
        }
        code ...
    } else {
        code...
    }
    

5.for迴圈

必須寫三部分,不寫也要用;佔位
for (迴圈變數; 迴圈條件; 迴圈變數變化) {
    code ...
}

//迴圈輸出 0-10
for (var i = 0; i <= 10; i++) {
    console.log(i)
}

==================================================
var arr1 = [1,2,3,4];
for (let i=0;i<arr1.length;i++){
console.log(i,"-",arr1[i]);
}
==================================================   
for...in 迴圈
var obj = {name:'JIM', age:20}
for (k in obj) {
    console.log(k, obj[k])
}
//for...in 可以遍歷 javaScript 的物件型別,一切皆物件

===================================================
for...of 迴圈
var list = [10,20,304,405,3]
for (v of list) {
    console.log(v)
}
//用於遍歷JavaScript中的可迭代型別(Iterable) 主要包括 陣列、類陣列物件、字串、Map、Set、Anguments、NodeList等

6.while迴圈

var num = 0;
while (num<=10){
console.log(num);
num++;
}

do...while 不管while成不成立,先執行do,再執行while判斷
do {
    console.log(num);
	num++;
} while ((num<=10);

其他語句

跳轉語句

continue;  跳出當前迴圈,繼續下一次
break;	結束迴圈
return; 結束函式

異常語句

try {
    tryCode - 嘗試執行程式碼塊
}
catch(err) {
    console.log(err) - 捕獲錯誤的程式碼塊
} 
finally {
    finallyCode - 無論 try / catch 結果如何都會執行的程式碼塊
}

注意:

​ 當分支語句和迴圈語句結構體({}內)只有一行程式碼的時候可以省略{}.

嚴格模式

//寫再所有程式碼的最前面
//開啟嚴格模式
'use strict'
在嚴格模式下宣告變數必須加var或者let

7.三元運算

var n = 10;
var m = 5;
var x = n>m ? n:m

var n = 10;
var m = 5;
var x = n>100 ? n:(m===5)?m:0

三.函式

3.1.函式的引數及return

  • JS中如果沒有明確指定返回值,預設返回一個undefined
  • 函式引數問題
    • 實引數量>形引數量 多給的實參會被忽略
    • 實引數量<形引數量 形參預設值為undefined
  • 可變數量的引數
    • arguments可以獲取所有的實參,但是隻能在函式中使用
    • arguments是類陣列物件,用法同陣列,可以使用for迴圈遍歷
  • return
    • return可以結束函式,返回值
    • JS中的return只能返回一個值,如果需要返回多個值,可以放進陣列內返回.
//關鍵字方式
function 函式名(引數1,引數2...){
    code...
}
關鍵字方式定義的函式,會粗壯乃函式提升(在函式定義的前面可以呼叫函式)
    
//表示式方式
var 函式名 = function(引數1,引數2...){
    code...
}

//設定預設值
function 函式名(引數1,引數2=預設值){
        code...
 }
//可變數量的引數

===================================================================
function f1(){
	console.log("hello");
}
f1();
這是呼叫函式列印的結果hello
返回值是undefined
====================================================================


function f2(a,b){
	console.log(a,b);
}
f2("hello","world");
列印結果:hello world
返回值是undefined
====================================================================


function f3(a,b){
	console.log(a,b);
    return "哈哈";
}
f3("hello","world");
列印結果:hello world
返回值:"哈哈"
====================================================================


function f4(a,b){
	console.log(a,b)
    return a,b;
}
f4(1,2);
列印結果:1 2
返回值:2
返回值只有一個,是最後一個
====================================================================


function f5(a,b){
	console.log(a,b);
    return [a,b];
}
f5(1,2);
列印結果:1 2
返回值:[1,2]
====================================================================


var f6 = function(a,b){
	console.log(a,b);
	return [a,b];
}
var ret = f6("hello","world");
ret
列印結果:hello world
返回值:["hello","world"]
====================================================================

(function(a,b){
	console.log(a,b);
})(1,2)
====================================================================
    
var f = v=>v*2;
等價於
var f= function(v){
	return v*2;
}
====================================================================

var x= () =>100;

var y = (a,b) => {return a+b};
====================================================================
function f7(a,b){
	console.log(a,b);
	return [a,b];
}
var ret = f7();
ret
列印結果:undefined undefined
返回值:[undefined,undefined]
====================================================================
function f8(a,b){
	console.log(a,b);
	return [a,b];
}
var ret = f8(10,20,30,40);
ret
列印結果:10 20
返回值:[10,20]
====================================================================
function f9(a,b){
    console.log(arguments.length);
    if (arguments.length>2){
		console.log("引數傳多了")
	}else {
	console.log(a,b);
	return [a,b];
    }
}
var ret = f9(10,20,30,40);
ret
列印結果:引數傳多了
返回值:undefined

3.2回撥函式

  • 函式的引數還是函式

3.3 自調函式

(function(){
	code...
})();
    
(function 函式名(){
	code...
})()
// 如果多個自調函式連續寫,中間必須加; 否則報錯
// 產生區域性作用域
//有效避免全部變數汙染

3.4 遞迴函式

函式內部呼叫自己就是遞迴函式

//用遞迴 實現階乘
function multiply(n) {
    if (n == 1) {
        return 1
    }
    return n * multiply(n - 1)
}

下面程式碼則執行了subgo()函式,

<a href="javascript:void(0)" onclick="subgo()">點我</a>

在這裡,javascript:void(0),沒啟實質上的作用,它僅僅是一個死連結,執行的函式是subgo()。

void可以是一個a標籤變成一個死連結

onclick是執行一段JavaScript