JavaScript基礎知識(一)

来源:http://www.cnblogs.com/gdwkong/archive/2017/08/17/7381648.html
-Advertisement-
Play Games

一、JavaScript基礎 1、JavaScript用法: HTML 中的腳本必須位於 <script> 與 </script> 標簽之間。 腳本可被放置在 HTML 頁面的 <body> 和 <head> 部分中。 HTML引入外部js文件方法示例: <!DOCTYPE html> <html> ...


一、JavaScript基礎

 1、JavaScript用法:

  • HTML 中的腳本必須位於 <script> 與 </script> 標簽之間。
  • 腳本可被放置在 HTML 頁面的 <body> 和 <head> 部分中。
  • HTML引入外部js文件方法示例:
  • <!DOCTYPE html> 
    <html> 
    <body> 
        <script src="myScript.js"></script> 
    </body> 
    </html>

2、<script> 標簽:

  • 在 HTML 頁面中插入 JavaScript,請使用 <script> 標簽。
  • <script> 和 </script> 會告訴 JavaScript 在何處開始和結束。

3、JavaScript使用限制:

  • 在 HTML 文檔中放入不限數量的腳本。
  • 腳本可位於 HTML 的 <body> 或 <head> 部分中,或者同時存在於兩個部分中。
  • 通常的做法是把函數放入 <head> 部分中,或者放在頁面底部,不會幹擾頁面的內容。

4、JavaScript輸出

  ①JavaScript通常用來操作HTML

  ②文檔輸出: 

  • 使用 document.write() 方法將內容寫到 HTML 文檔中。
  • 使用 window.alert() 彈出警告框。
  • 使用 innerHTML 寫入到 HTML 元素。
  • 使用 console.log() 寫入到瀏覽器的控制台。

5、JavaScript語句:

  ①JavaScript 語句:

    向瀏覽器發出的命令。語句的作用是告訴瀏覽器該做什麼。

  ②分號:

  用於分隔 JavaScript 語句,通常我們在每條可執行的語句結尾添加分號,使用分號的另一用處是在一行中編寫多條語句。

  ③JavaScript 代碼

  JavaScript 代碼是 JavaScript 語句的序列。瀏覽器按照編寫順序依次執行每條語句。

  ④標識符:

  標識符必須以字母、下劃線或美元符號開始

  語句標識符是保留關鍵字不能作為變數名使用。

  ⑤JavaScript對大小寫敏感

  ⑥空格:JavaScript 會忽略多餘的空格。您可以向腳本添加空格,來提高其可讀性。

  ⑦語句標識符是保留關鍵字不能作為變數名使用。如break、var、do ... while等

  ⑧換行:不允許在語句單詞中換行。

6、註釋

  ①單行註釋以 // 開頭。

  ②多行註釋以 /* 開始,以 */ 結尾。

7、JavaScript 變數

  變數是用於存儲信息的"容器"。var x=5; var y=6; var z=x+y; 

  • 變數必須以字母開頭
  • 變數也能以 $ 和 _ 符號開頭(不過我們不推薦這麼做)
  • 變數名稱對大小寫敏感(y 和 Y 是不同的變數)

8、JavaScript 數據類型

  字元串(String)、數字(Number)、布爾(Boolean)、數組(Array)、對象(Object)、空(Null)、未定義(Undefined)。

二、JavaScript 語法

1、JavaScript運算符

  ①JavaScript 算術運算符

  y=5,下麵的表格解釋了這些算術運算符:

運算符描述例子x 運算結果y 運算結果
+ 加法 x=y+2 7 5
- 減法 x=y-2 3 5
* 乘法 x=y*2 10 5
/ 除法 x=y/2 2.5 5
% 取模(餘數) x=y%2 1 5
++ 自增 x=++y 6 6
x=y++ 5 6
-- 自減 x=--y 4 4
x=y-- 5 4

  ②JavaScript 賦值運算符

  給定 x=10  y=5,下麵的表格解釋了賦值運算符:

運算符例子等同於運算結果
= x=y   x=5
+= x+=y x=x+y x=15
-= x-=y x=x-y x=5
*= x*=y x=x*y x=50
/= x/=y x=x/y x=2
%= x%=y x=x%y x=0

  ③用於字元串的 + 運算符

  + 運算符用於把文本值或字元串變數加起來(連接起來)。

2、JavaScript 比較 和 邏輯運算符

  ①比較運算符

  比較運算符在邏輯語句中使用,以測定變數或值是否相等。

  x=5,下麵的表格解釋了比較運算符:  

運算符描述比較返回值
== 等於(不限類型) x==8 false
x==5 true
=== 絕對等於(值和類型均相等) x==="5" false
x===5 true
!=  不等於 x!=8 true
!==  不絕對等於(值和類型有一個不相等,或兩個都不相等) x!=="5" true
x!==5 false
>  大於 x>8 false
<  小於 x<8 true
>=  大於或等於 x>=8 false
<=  小於或等於 x<=8 true

  ②邏輯運算符

    邏輯運算符用於測定變數或值之間的邏輯。

    給定 x=6 以及 y=3,下表解釋了邏輯運算符:

運算符描述例子
&& and (x < 10 && y > 1) 為 true
|| or (x==5 || y==5) 為 false
! not !(x==y) 為 true

  ③條件運算符

    JavaScript 還包含了基於某些條件對變數進行賦值的條件運算符。

   語法: variablename=(condition)?value1:value2;  

3、條件語句

  通常在寫代碼時,您總是需要為不同的決定來執行不同的動作。您可以在代碼中使用條件語句來完成該任務。

  在 JavaScript 中,我們可使用以下條件語句:

  • if 語句 - 只有當指定條件為 true 時,使用該語句來執行代碼
  • if...else 語句 - 當條件為 true 時執行代碼,當條件為 false 時執行其他代碼
  • if...else if....else 語句- 使用該語句來選擇多個代碼塊之一來執行
if (condition1)
{
    當條件 1 為 true 時執行的代碼
}
else if (condition2)
{
    當條件 2 為 true 時執行的代碼
}
else
{
  當條件 1 和 條件 2 都不為 true 時執行的代碼
}
  • switch 語句 - 使用該語句來選擇多個代碼塊之一來執行
switch(n)
{
    case 1:
        執行代碼塊 1
        break;
    case 2:
        執行代碼塊 2
        break;
    default:
        與 case 1 和 case 2 不同時執行的代碼
}

4、JavaScript for 迴圈

  JavaScript 支持不同類型的迴圈:

  • for - 迴圈代碼塊一定的次數
  • for (語句 1; 語句 2; 語句 3)
    {
        被執行的代碼塊
    }
  • for/in - 迴圈遍歷對象的屬性
  • var person={fname:"John",lname:"Doe",age:25}; 
    for (x in person)
    {
        txt=txt + person[x];
    }
  • while - 當指定的條件為 true 時迴圈指定的代碼塊
  • while (條件)
    {
        需要執行的代碼
    }
  • do/while - 同樣當指定的條件為 true 時迴圈指定的代碼塊
  • do
    {
        需要執行的代碼
    }
    while (條件);

5、JavaScript 跳轉語句 break 和 continue   

  • break 語句用於跳出迴圈。
  • continue 用於跳過迴圈中的一個迭代。

6、JavaScript 標簽

  break 和 continue 語句僅僅是能夠跳出代碼塊的語句。

  語法:

 break labelname;

 continue labelname;  

continue 語句(帶有或不帶標簽引用)只能用在迴圈中。

break 語句(不帶標簽引用),只能用在迴圈或 switch 中。

通過標簽引用,break 語句可用於跳出任何 JavaScript 代碼塊:

cars=["BMW","Volvo","Saab","Ford"];
list: {
    document.write(cars[0] + "<br>");
    document.write(cars[1] + "<br>");
    document.write(cars[2] + "<br>");
    break list;
    document.write(cars[3] + "<br>");
    document.write(cars[4] + "<br>");
    document.write(cars[5] + "<br>");
}

7、JavaScript typeof, null, 和 undefined

  ①typeof 操作符

  可以使用 typeof 操作符來檢測變數的數據類型。

typeof "John"                // 返回 string 
typeof 3.14                  // 返回 number
typeof false                 // 返回 boolean
typeof [1,2,3,4]             // 返回 object
typeof {name:'John', age:34} // 返回 object

  在JavaScript中,數組是一種特殊的對象類型。 因此 typeof [1,2,3,4] 返回 object。

  ②null

  在 JavaScript 中 null 表示 "什麼都沒有"。

  null是一個只有一個值的特殊類型。表示一個空對象引用。

  用 typeof 檢測 null 返回是object。

  設置為 null 來清空對象: var person = null; // 值為 null(空), 但類型為對象 

  ③Undefined

  在 JavaScript 中, undefined 是一個沒有設置值的變數。

  typeof 一個沒有值的變數會返回 undefined。

 var person; // 值為 undefined(空), 類型是undefined 

  任何變數都可以通過設置值為 undefined 來清空。 類型為 undefined.

  ④Undefined 和 Null 的區別

null 和 underfined 的值相等,但類型不等:
typeof undefined             // undefined
typeof null                  // object
null === undefined           // false
null == undefined            // true

8、JavaScript 類型轉換

  Number() 轉換為數字, String() 轉換為字元串, Boolean() 轉化為布爾值。

  JavaScript 變數可以轉換為新變數或其他數據類型:

    • 通過使用 JavaScript 函數
    • 通過 JavaScript 自身自動轉換

  ①將數字轉換為字元串

  全局方法 String() 可以將數字轉換為字元串。

  該方法可用於任何類型的數字,字母,變數,表達式:

 String(x) // 將變數 x 轉換為字元串並返回

String(123) // 將數字 123 轉換為字元串並返回

String(100 + 23) // 將數字表達式轉換為字元串並返回 

  Number 方法 toString() 也是有同樣的效果。

 x.toString()

(123).toString()

(100 + 23).toString() 

  常用數字轉換為字元串的方法:

方法

描述

toExponential()

把對象的值轉換為指數計數法。

toFixed()

把數字轉換為字元串,結果的小數點後有指定位數的數字。

toPrecision()

把數字格式化為指定的長度。

  ②將布爾值轉換為字元串

  全局方法 String() 可以將布爾值轉換為字元串。

String(false)        // 返回 "false"
String(true)         // 返回 "true"
Boolean 方法 toString() 也有相同的效果。
false.toString()     // 返回 "false"
true.toString()      // 返回 "true"

  ③將日期轉換為字元串

  Date() 返回字元串。

 Date() // 返回 Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time) 

  全局方法 String() 可以將日期對象轉換為字元串。

 String(new Date()) // 返回 Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time) 

  Date 方法 toString() 也有相同的效果。

obj = new Date()
obj.toString()   // 返回 Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)

  常用日期轉換為字元串的函數:

方法

描述

getDate()

從 Date 對象返回一個月中的某一天 (1 ~ 31)。

getDay()

從 Date 對象返回一周中的某一天 (0 ~ 6)。

getFullYear()

從 Date 對象以四位數字返回年份。

getHours()

返回 Date 對象的小時 (0 ~ 23)。

getMilliseconds()

返回 Date 對象的毫秒(0 ~ 999)。

getMinutes()

返回 Date 對象的分鐘 (0 ~ 59)。

getMonth()

從 Date 對象返回月份 (0 ~ 11)。

getSeconds()

返回 Date 對象的秒數 (0 ~ 59)。

getTime()

返回 1970 年 1 月 1 日至今的毫秒數。

 

 

  ④將字元串轉換為數字

  全局方法 Number() 可以將字元串轉換為數字。

  字元串包含數字(如 "3.14") 轉換為數字 (如 3.14).

  空字元串轉換為 0。

  其他的字元串會轉換為 NaN (不是個數字)。

Number("3.14")    // 返回 3.14
Number(" ")       // 返回 0 
Number("")        // 返回 0
Number("99 88")   // 返回 NaN

  常用字元串轉為數字的方法:

方法

描述

parseFloat()

解析一個字元串,並返回一個浮點數。

parseInt()

解析一個字元串,並返回一個整數。

   ⑤一元運算符 +

  Operator + 可用於將變數轉換為數字:

var y = "5";      // y 是一個字元串
var x = + y;      // x 是一個數字

  如果變數不能轉換,它仍然會是一個數字,但值為 NaN (不是一個數字):

   var y = "John"; // y 是一個字元串

var x = + y; // x 是一個數字 (NaN)  

  ⑥將布爾值轉換為數字

  全局方法 Number() 可將布爾值轉換為數字。

 Number(false) // 返回 0

Number(true) // 返回 1 

  ⑦將日期轉換為數字

  全局方法 Number() 可將日期轉換為數字。

   d = new Date();

Number(d) // 返回 1404568027739 

  日期方法 getTime() 也有相同的效果。

   d = new Date();

d.getTime() // 返回 1404568027739  

  ⑧自動轉換類型

  當 JavaScript 嘗試操作一個 "錯誤" 的數據類型時,會自動轉換為 "正確" 的數據類型。

  以下輸出結果不是你所期望的:

5 + null    // 返回 5         null 轉換為 0
"5" + null  // 返回"5null"   null 轉換為 "null"
"5" + 1     // 返回 "51"      1 轉換為 "1"  
"5" - 1     // 返回 4         "5" 轉換為 5

  ⑨自動轉換為字元串

  當你嘗試輸出一個對象或一個變數時 JavaScript 會自動調用變數的 toString() 方法:

document.getElementById("demo").innerHTML = myVar;
// if myVar = {name:"Fjohn"}  // toString 轉換為 "[object Object]"
// if myVar = [1,2,3,4]       // toString 轉換為 "1,2,3,4"
// if myVar = new Date()      // toString 轉換為 "Fri Jul 18 2014 09:08:55 GMT+0200"
數字和布爾值也經常相互轉換:
// if myVar = 123             // toString 轉換為 "123"
// if myVar = true            // toString 轉換為 "true"
// if myVar = false           // toString 轉換為 "false" 

9、JavaScript 正則表達式

  正則表達式(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)使用單個字元串來描述、匹配一系列符合某個句法規則的字元串搜索模式。

  搜索模式可用於文本搜索和文本替換。

  語法:

 /正則表達式主體/修飾符(可選) 

  其中修飾符可選,如: 

var patt = /runoob/i 
解析:/runoob/i  是一個正則表達式。
    runoob  是一個正則表達式主體 (用於檢索)。
    i  是一個修飾符 (搜索不區分大小寫)。

  ①使用字元串方法

  在 JavaScript 中,正則表達式通常用於兩個字元串方法 : search() 和 replace()。

  search() 方法 用於檢索字元串中指定的子字元串,或檢索與正則表達式相匹配的子字元串,並返回子串的起始位置。

 var str = "Visit Runoob!";

var n = str.search(/Runoob/i);//輸出結果6 

  search 方法可使用字元串作為參數。字元串參數會轉換為正則表達式。

  replace() 方法 用於在字元串中用一些字元替換另一些字元,或替換一個與正則表達式匹配的子串。

 var str = document.getElementById("demo").innerHTML;

var txt = str.replace(/microsoft/i,"Runoob");//輸出結果Visit Runoob! 

  replace() 方法將接收字元串作為參數

  ②正則表達式修飾符

  修飾符 可以在全局搜索中不區分大小寫:

修飾符

描述

i

執行對大小寫不敏感的匹配。

g

執行全局匹配(查找所有匹配而非在找到第一個匹配後停止)。

m

執行多行匹配。

    正則表達式模式

  方括弧用於查找某個範圍內的字元:

表達式

描述

[abc]

查找方括弧之間的任何字元。

[0-9]

查找任何從 0 至 9 的數字。

(x|y)

查找任何以 | 分隔的選項。

  元字元是擁有特殊含義的字元:

元字元

描述

\d

查找數字。

\s

查找空白字元。

\b

匹配單詞邊界。

\uxxxx

查找以十六進位數 xxxx 規定的 Unicode 字元。

  量詞:

量詞

描述

n+

匹配任何包含至少一個 n 的字元串。

n*

匹配任何包含零個或多個 n 的字元串。

n?

匹配任何包含零個或一個 n 的字元串。

  ③test()

  test() 方法是一個正則表達式方法。

  test() 方法用於檢測一個字元串是否匹配某個模式,如果字元串中含有匹配的文本,則返回 true,否則返回 false。

  ④exec()

  exec() 方法是一個正則表達式方法。

  exec() 方法用於檢索字元串中的正則表達式的匹配。

  該函數返回一個數組,其中存放匹配的結果。如果未找到匹配,則返回值為 null。

10、變數的提升

  JavaScript 中,變數可以在使用後聲明,也就是變數可以先使用再聲明。

  JavaScript 只有聲明的變數會提升,初始化的不會。

11、JavaScript 代碼規範

   JavaScript 代碼規範

  代碼規範通常包括以下幾個方面:

    • 變數和函數的命名規則
    • 空格,縮進,註釋的使用規則。
    • 其他常用規範……

  規範的代碼可以更易於閱讀與維護。

  代碼規範一般在開發前規定。

  ①變數名

  變數名推薦使用駝峰法來命名(camelCase):

firstName = "John";
lastName = "Doe";
price = 19.90;
tax = 0.20;
fullPrice = price + (price * tax);

  ②空格與運算符

  通常運算符 ( = + - * / ) 前後需要添加空格:

var x = y + z;
var values = ["Volvo", "Saab", "Fiat"];

  ③語句規則

  簡單語句的通用規則:

    • 一條語句通常以分號作為結束符。
var values = ["Volvo", "Saab", "Fiat"];
var person = {
    firstName: "John",
    lastName: "Doe",
    age: 50,
    eyeColor: "blue"
};

  複雜語句的通用規則:

    • 將左花括弧放在第一行的結尾。
    • 左花括弧前添加一空格。
    • 將右花括弧獨立放在一行。
    • 不要以分號結束一個複雜的聲明。
function toCelsius(fahrenheit) {
    return (5 / 9) * (fahrenheit - 32);
}

  迴圈:

for (i = 0; i < 5; i++) {
    x += i;
}

  條件語句:

if (time < 20) {
    greeting = "Good day";
} else {
    greeting = "Good evening";
}

  ④對象規則

  對象定義的規則:

    • 將左花括弧與類名放在同一行。
    • 冒號與屬性值間有個空格。
    • 字元串使用雙引號,數字不需要。
    • 最後一個屬性-值對後面不要添加逗號。
    • 將右花括弧獨立放在一行,並以分號作為結束符號。
var person = {
    firstName: "John",
    lastName: "Doe",
    age: 50,
    eyeColor: "blue"
};

  短的對象代碼可以直接寫成一行:

var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};

  每行代碼字元小於 80

  為了便於閱讀每行字元建議小於數 80 個。

  如果一個 JavaScript 語句超過了 80 個字元,建議在運算符或者逗號後換行。

document.getElementById("demo").innerHTML =
    "Hello Runoob.";

  ⑤命名規則

  一般很多代碼語言的命名規則都是類似的,例如:

    • 變數和函數為駝峰法( camelCase
    • 全局變數為大寫 (UPPERCASE )
    • 常量 (如 PI) 為大寫 (UPPERCASE )

  HTML 和 CSS 的橫杠(-)字元:

  HTML5 屬性可以以 data- (如:data-quantity, data-price) 作為首碼。

  CSS 使用 - 來連接屬性名 (font-size)。

  通常在 JavaScript 中被認為是減法,所以不允許使用。

  下劃:

  很多程式員比較喜歡使用下劃線(如:date_of_birth), 特別是在 SQL 資料庫中。

  PHP 語言通常都使用下劃線。

  帕斯卡拼寫法(PascalCase):

  帕斯卡拼寫法(PascalCase) 在 C 語言中語言較多。

  駝峰法:

  JavaScript 中通常推薦使用駝峰法,jQuery 及其他 JavaScript 庫都使用駝峰法。

  變數名不要以 $ 作為開始標記,會與很多 JavaScript 庫衝突。

  HTML 載入外部 JavaScript 文件

  使用簡潔的格式載入 JavaScript 文件 ( type 屬性不是必須的):

  <script src="myscript.js">

  使用 JavaScript 訪問 HTML 元素

  一個糟糕的 HTML 格式可能會導致 JavaScript 執行錯誤。

  以下兩個 JavaScript 語句會輸出不同結果:

var obj = getElementById("Demo")
var obj = getElementById("demo")

  HTML 與 JavaScript 儘量使用相同的命名規則。

  文件擴展名

    • HTML 文件尾碼可以是 .html (或r .htm)。
    • CSS 文件尾碼是 .css 。
    • JavaScript 文件尾碼是 .js 。

  使用小寫文件名:

大多 Web 伺服器 (Apache, Unix) 對大小寫敏感: london.jpg 不能通過 London.jpg 訪問。

其他 Web 伺服器 (Microsoft, IIS) 對大小寫不敏感: london.jpg 可以通過 London.jpg 或 london.jpg 訪問。

三、JavaScript 函數

(一) JavaScript 函數

  函數是由事件驅動的或者當它被調用時執行的可重覆使用的代碼塊。

  JavaScript 使用關鍵字 function 定義函數,函數可以通過聲明定義,也可以是一個表達式。

1、函數聲明

  語法 :

function functionName(parameters) {
   執行的代碼
}

  註意:

  • 分號是用來分隔可執行JavaScript語句。
  • 由於函數聲明不是一個可執行語句,所以不以分號結束。
  • 函數聲明後不會立即執行,會在我們需要的時候調用到。
  • JavaScript 對大小寫敏感。關鍵詞 function 必須是小寫的,並且必須以與函數名稱相同的大小寫來調用函數。

2、函數表達式

  JavaScript 函數可以通過一個表達式定義。

  函數表達式可以存儲在變數中: var x = function (a, b) {return a * b}; 

  在函數表達式存儲在變數後,變數也可作為一個函數使用:

var x = function (a, b) {return a * b};
var z = x(4, 3);

  以上函數實際上是一個 匿名函數 (函數沒有名稱)。

  上述函數以分號結尾,因為它是一個執行語句。

3、Function() 構造函數

  函數同樣可以通過內置的 JavaScript 函數構造器(Function())定義。

var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
//上面實例可以寫成:
var myFunction = function (a, b) {return a * b}
var x = myFunction(4, 3);

  在 JavaScript 中,很多時候,你需要避免使用 new 關鍵字。

4、函數提升(Hoisting)

  提升(Hoisting)是 JavaScript 預設將當前作用域提升到前面去的的行為。

  提升(Hoisting)應用在變數的聲明與函數的聲明。

  因此,函數可以在聲明之前調用:

myFunction(5);
function myFunction(y) {
    return y * y;
}

  使用表達式定義函數時無法提升。

5、自調用函數

函數表達式可以 "自調用",自調用表達式會自動調用。如果表達式後面緊跟 () ,則會自動調用。

不能自調用聲明的函數。

通過添加括弧,來說明它是一個函數表達式:

(function () {
    var x = "Hello!!";      // 我將調用自己
})();

  以上函數實際上是一個 匿名自我調用的函數 (沒有函數名)。

6、函數可作為一個值使用

  JavaScript 函數作為一個值使用:

function myFunction(a, b) {
    return a * b;
}
var x = myFunction(4, 3);

7、函數是對象

  在 JavaScript 中使用 typeof 操作符判斷函數類型將返回 "function" 。

  但是JavaScript 函數描述為一個對象更加準確。

  JavaScript 函數有 屬性 和 方法。

  arguments.length 屬性返回函數調用過程接收到的參數個數:

function myFunction(a, b) {
    return arguments.length;
}

(二)JavaScript 函數參數

  JavaScript 函數對參數的值沒有進行任何的檢查。

1、函數顯式參數(Parameters)與隱式參數(Arguments)

  函數的顯式參數:

functionName(parameter1, parameter2, parameter3) { // 要執行的代碼…… }

  函數顯式參數在函數定義時列出。

  函數隱式參數在函數調用時傳遞給函數真正的值。

  ①參數規則

    • JavaScript 函數定義時顯式參數沒有指定數據類型。
    • JavaScript 函數對隱式參數沒有進行類型檢測。
    • JavaScript 函數對隱式參數的個數沒有進行檢測。

  ②預設參數

  如果函數在調用時未提供隱式參數,參數會預設設置為: undefined

  有時這是可以接受的,但是建議最好為參數設置一個預設值:

function myFunction(x, y) { y = y || 0; }

  如果y已經定義 , y || 返回 y, 因為 y 是 true, 否則返回 0, 因為 undefined 為 false。

2、Arguments 對象

  JavaScript 函數有個內置的對象 arguments 對象。

  argument 對象包含了函數調用的參數數組。

  通過這種方式你可以很方便的找到最大的一個參數的值:

x = findMax(1, 123, 500, 115, 44, 88); 
function findMax() { 
    var i, max = arguments[0]; 
    if(arguments.length < 2) return max;
    for (i = 0; i < arguments.length; i++) { 
        if (arguments[i] > max) { 
            max = arguments[i]; 
        } 
    } 
    return max; 
}    

  ①通過值傳遞參數

  在函數中調用的參數是函數的隱式參數。

  JavaScript 隱式參數通過值來傳遞:函數僅僅只是獲取值。

  如果函數修改參數的值,不會修改顯式參數的初始值(在函數外定義)。

  隱式參數的改變在函數外是不可見的。

  ②通過對象傳遞參數

  在JavaScript中,可以引用對象的值。

  因此我們在函數內部修改對象的屬性就會修改其初始的值。

  修改對象屬性可作用於函數外部(全局變數)。

  修改對象屬性在函數外是可見的。

(三)JavaScript 函數調用

1、函數在HTML中的調用方式:

  • 在<script>標簽內調用
  • <script>
           function demo(){
               var a = 10 ;
               var b = 10 ;
               var sum = a+b ;
               alert(sum)
           }
           demo();//調用函數
    </script>
  • 在HTML文件中調用
  • <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <script>
           function demo(){
               var a = 10 ;
               var b = 10 ;
               var sum = a+b ;
               alert(sum)
           }
        </script>
        <button onclick="demo()">按鈕</button>
    </body>
    </html>

     ③調用帶參數的函數

    在調用函數時,您可以向其傳遞值,這些值被稱為參數。

    這些參數可以在函數中使用,可以發送任意多的參數,由逗號 (,) 分隔:  

      myFunction(argument1,argument2); 

function myFunction(var1,var2){ 代碼 }  

   變數和參數必須以一致的順序出現。第一個變數就是第一個被傳遞的參數的給定的值,以此類推。

 1 <body>
 2     <script>
 3        function demo(a,b){
 4            var sum = a+b ;
 5            alert(sum)
 6        }
 7        demo(10,20);
 8        demo(100,200);
 9     </script>
10 </body>

  ④帶有返回值的函數

  有時,我們會希望函數將值返回調用它的地方。

  通過使用 return 語句就可以實現。

  在使用 return 語句時,函數會停止執行,並返回指定的值。

function myFunction(){
    var x=5;
    return x;
}
var myVar=myFunction();
//document.getElementById("demo").innerHTML=myFunction();

2、JavaScript 函數在js中4 種調用方式:

  每種方式的不同方式在於 this 的初始化。

  this 關鍵字:一般而言,在Javascript中,this指向函數執行時的當前對象。

  註意: this 是保留關鍵字,你不能修改 this 的值。

  ①作為一個函數調用

function myFunction(a, b) { return a * b; } myFunction(10, 2); // myFunction(10, 2) 返回 20

  以上函數不屬於任何對象。但是在 JavaScript 中它始終是預設的全局對象。

  在 HTML 中預設的全局對象是 HTML 頁面本身,所以函數是屬於 HTML 頁面。

  在瀏覽器中的頁面對象是瀏覽器視窗(window 對象)。以上函數會自動變為 window 對象的函數。

  myFunction() 和 window.myFunction() 是一樣的。

  ②全局對象

  當函數沒有被自身的對象調用時, this 的值就會變成全局對象。

  在 web 瀏覽器中全局對象是瀏覽器視窗(window 對象)。

  該實例返回 this 的值是 window 對象:

function myFunction() { return this; } myFunction(); // 返回 window 對象

  函數作為全局對象調用,會使 this 的值成為全局對象。

  使用 window 對象作為一個變數容易造成程式崩潰

  ③函數作為方法調用

  在 JavaScript 中你可以將函數定義為對象的方法。

  以下實例創建了一個對象 (myObject), 對象有兩個屬性 (firstName 和 lastName), 及一個方法 (fullName):

var myObject = { 
    firstName:"John", 
    lastName: "Doe", 
    fullName: function () { 
        return this.firstName + " " + this.lastName; 
    } 
} 
myObject.fullName(); // 返回 "John Doe"

fullName 方法是一個函數。函數屬於對象。 myObject 是函數的所有者。

this對象,擁有 JavaScript 代碼。實例中 this 的值為 myObject 對象。

函數作為對象方法調用,會使得 this 的值成為對象本身。

  ④使用構造函數調用函數

  如果函數調用前使用了 new 關鍵字, 則是調用了構造函數。

  這看起來就像創建了新的函數,但實際上 JavaScript 函數是重新創建的對象:

// 構造函數: 
function myFunction(arg1, arg2) { 
    this.firstName = arg1; 
    this.lastName = arg2; 
} 
// This creates a new object 
var x = new myFunction("John","Doe"); 
x.firstName; // 返回 "John"

構造函數的調用會創建一個新的對象。新對象會繼承構造函數的屬性和方法。

構造函數中 this 關鍵字沒有任何的值。

this 的值在函數調用時實例化對象(new object)時創建。

  ⑤作為函數方法調用函數

  在 JavaScript 中, 函數是對象。JavaScript 函數有它的屬性和方法。

  call() 和 apply() 是預定義的函數方法。 兩個方法可用於調用函數,兩個方法的第一個參數必須是對象本身。

function myFunction(a, b) { return a * b; } myObject =myFunction.call(myObject, 10, 2); // 返回 20

  通過 call() 或 apply() 方法你可以設置 this 的值, 且作為已存在對象的新方法調用。

3、變數

  ①局部變數

  在 JavaScript 函數內部聲明的變數(使用 var)是局部變數,所以只能在函數內部訪問它。(該變數的作用域是局部的)。

  可以在不同的函數中使用名稱相同的局部變數,因為只有聲明過該變數的函數才能識別出該變數。

  只要函數運行完畢,本地變數就會被刪除。

  ②全局變數

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

  ③JavaScript 變數的生存期

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

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

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

  ④向未聲明的 JavaScript 變數分配值

  如果您把值賦給尚未聲明的變數,該變數將被自動作為全局變數聲明。

carname="Volvo";

  將聲明一個全局變數 carname,即使它在函數內執行。

4、JavaScript 閉包

  JavaScript 變數可以是局部變數或全局變數。

  私有變數可以用到閉包。

  函數也可以訪問函數外部定義的變數

  變數聲明時如果不使用 var 關鍵字,那麼它就是一個全局變數,即便它在函數內定義。

  ①變數生命周

  全局變數的作用域是全局性的,即在整個JavaScript程式中,全局變數處處都在。

  而在函數內部聲明的變數,只在函數內部起作用。這些變數是局部變數,作用域是局部性的;函數的參數也是局部性的,只在函數內部起作用。

  ②JavaScript 內嵌函數

  所有函數都能訪問全局變數。  

  實際上,在 JavaScript 中,所有函數都能訪問它們上一層的作用域。

  JavaScript 支持嵌套函數。嵌套函數可以訪問上一層的函數變數。

  該實例中,內嵌函數 plus() 可以訪問父函數的 counter 變數:

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();    
    return counter; 
}

  閉包是可訪問上一層函數作用域里變數的函數,即便上一層函數已經關閉。

四、JavaScript異常處理和事件處理

1、JavaScript 錯誤 - throw、try 和 catch

  • try 語句測試代碼塊的錯誤。
  • catch 語句處理錯誤。
  • throw 語句創建自定義錯誤。

  ①異常的捕獲 try 和 catch

    • try 語句允許我們定義在執行時進行錯誤測試的代碼塊。
    • catch 語句允許我們定義當 try 代碼塊發生錯誤時,所執行的代碼塊。
    • JavaScript 語句 try 和 catch 是成對出現的。
  • try {
      //在這裡運行代碼
    } catch(err) {
      //在這裡處理錯誤
    }

  ②異常的拋出 throw: throw exception 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form>
        <input id="txt" type="text">
        <input id="btn" type="button" onclick="demo()" value="按鈕">
    </form>
    <script>
       function demo(){
            try {
                var e = document.getElementById("txt").value;
                if(e==""){
                    throw "請輸入"
                }
            }catch (err){
                alert(err);
            }
       }
    </script>
</body>
</html>

2、事件

  ①HTML事件:HTML 事件可以是瀏覽器行為,也可以是用戶行為。

    如:HTML 頁面完成載入,HTML input 欄位改變時,HTML 按鈕被點擊

<button onclick="demo()">按鈕</button>
<script>
        function demo(){
            alert("Hello");
        }
</script>

      常見的HTML事件

事件 描述
onclick 單擊事件
onmouseover 滑鼠經過事件
onmouseout 滑鼠移出事件
onchange 文本內容改變事件
onselect 文本框選中事件
onfocus 游標聚集事件
onblur 移開游標事件
onload 瀏覽器已完成頁面的載入
onunload 關閉網頁事件
onkeydown 用戶按下鍵盤按
//onmouseover、onmouseout示例
<div class="div" onmouseout="onOut(this)" onmousemove="onOver(this)"></div> <script> function onOver(ooj) { ooj.innerHTML="Hello"; } function onOut(ooj) { ooj.innerHTML="World" } </script>

  //onselect示例

<form>
     <input type="text" onselect="changeDemo(this)">
     <script>
            function changeDemo(bg) {
                bg.style.background="red";
            }
     </script>
</form>

五、JavaScript DOM對象

1、HTML DOM (文檔對象模型)

  當網頁被載入時,瀏覽器會創建頁面的文檔對象模型(Document Object Model)。

  HTML DOM 模型被構造為對象的樹:

  JavaScript 獲得了足夠的能力來創建動態的 HTML。

    • JavaScript 能夠改變頁面中的所有 HTML 元素
    • JavaScript 能夠改變頁面中的所有 HTML 屬性
    • JavaScript 能夠改變頁面中的所有 CSS 樣式
    • JavaScript 能夠對頁面中的所有事件做出反應

2、DOM操作HTML

  ①改變 HTML 輸出流

  在 JavaScript 中,document.write() 可用於直接向 HTML 輸出流寫內容。

  註意:絕對不要在文檔載入完成之後使用 document.write()。這會覆蓋該文檔。

  ②查找 HTML 元素

   通常,通過 JavaScript,您需要操作 HTML 元素。

   為了做到這件事情,您必須首先找到該元素。有三種方法來做這件事:

    • 通過 id 找到 HTML 元素
    • 通過標簽名找到 HTML 元素
    • 通過類名找到 HTML 元素

  ③改變 HTML 內容

  修改 HTML 內容的最簡單的方法時使用 innerHTML 屬性。

  如需改變 HTML 元素的內容,請使用這個語法: document.getElementById("id").innerHTML=新的 HTML 

  ④改變 HTML 屬性

  如需改變 HTML 元素的屬性,請使用這個語法: document.getElementById("id").attribute=新屬性值 

<body>
    <a id="aid" href="http://www.baidu.com">Hello</a>
    <button onclick="demo()">按鈕</button>
    <script>
        function demo() {
            document.getElementById("aid").href="http://hao123.com";
        }
    </script>
</body>

3、DOM操作CSS

  ①改變 HTML 樣式

  如需改變 HTML 元素的樣式,請使用這個語法: document.getElementById(id).style.property=新樣式 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <style>
 7         .div{
 8             width: 100px;
 9             height: 100px;
10             background-color: red;
11         }
12     </style>
13 </head>
14 <body>
15     <div id="div" class="div">
16         Hello
17     </div>
18     <button onclick="demo()">按鈕</button>
19     <script>
20         function demo() {
21             document.getElementById("div").style.background="blue";
22         }
23     </script>
24 </body>
25 </html>

4、DOM EventListener

  ①addEventListener() 方法

addEventListener() 方法用於向指定元素添加事件句柄。

addEventListener() 方法添加的事件句柄不會覆蓋已存在的事件句柄。

你可以向一個元素添加多個事件句柄。

你可以向同個元素添加多個同類型的事件句柄,如:兩個 "click" 事件。

你可以向任何 DOM 對象添加事件監聽,不僅僅是 HTML 元素。如: window 對象。

addEventListener() 方法可以更簡單的控制事件(冒泡與捕獲)。

當你使用 addEventListener() 方法時, JavaScript 從 HTML 標記中分離開來,可讀性更強, 在沒有控制HTML標記時也可以添加事件監聽。

語法: element.addEventListener(event, function, useCapture); 

    • 第一個參數是事件的類型 (如 "click" 或 "mousedown").
    • 第二個參數是事件觸發後調用的函數。
    • 第三個參數是個布爾值用於描述事件是冒泡還是捕獲。該參數是可選的。

   註意:不要使用 "on" 首碼。 例如,使用 "click" ,而不是使用 "onclick"。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <title></title>
 6 </head>
 7 <body>
 8     <p>該實例使用 addEventListener() 方法在按鈕中添加點擊事件。</p>
 9     <button id="myBtn">點我</button>
10     <script>        
11      document.getElementById("myBtn").addEventListener("click", function(){ 12     alert("Hello World!"); 13     }); 14   </script> 14 </body> 16 </html>

  ②removeEventListener() 方法

  removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄,如: element.removeEventListener("mousemove", myFunction); 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天在搞react native環境時,遇到了一些坑,這裡記錄一下。 首先最重要的一點是一定要按官網一步一步來,不然可能會出現一些奇奇怪怪的問題! "官網配置doc" run ios問題 ios主要是版本問題,就如官網上說的一樣,0.45及以上的版本,在run ios時會出現報錯,這裡就按官網上給的 ...
  • 1.前提條件 a. 安裝了node b.安裝了electron c.你知道自己寫的東西(js,css,html等等)放在那個文件夾(假設這個文件夾命名為 app,下麵會用到)中 2.安裝electron-packager a.在app文件夾中打開命令視窗(在空白處使用 shift + 滑鼠右擊 就可 ...
  • 自己簡要總結了一下webpack+react搭建環境的各個步驟 ...
  • document對象中有innerHTML、innerText這兩個屬性,都是獲取document對象文本內容,但使用起來還是有區別的; 1) innerHTML設置或獲取標簽所包含的HTML+文本信息(從標簽起始位置到終止位置全部內容,包括HTML標簽,但不包括自身) 2) outerHTML設置 ...
  • 微信二次分享不顯示摘要和圖片的解決方法 解決不顯示摘要和圖片的問題,需要調用微信公眾號的js-sdk的api ,需要前端和後臺的配合, 後臺需要返回 appid (公眾號的appid ) 、 timestamp (生成簽名的時間戳) 、nonceStr (簽名的隨機字元串) 、 signature ...
  • 繼續作用域的問題,今天上午看了一會,下午看又看到了一個類型的題,函數名和變數名相同的問題。之前還不會覺得函數名和變數名重名了會有什麼衝突。也是沒有去測試過。。懶了。直接貼代碼: 運行之後大家猜測結果是多少?一口氣:100!!我果然是好大的口氣,沒有思考直接給出答案,實在是不太好的習慣。 出乎意料的報 ...
  • 學習前端開發,第一步要學習的絕對是HTML。 什麼是HTML? HTML 是(Hyper Text Markup Language)四個單詞的縮寫,翻譯過來就是超文本標記語言, 所以它不是一門編程語言,只是一門標記語言。 學習html的第一步就是需要學習它的標簽如何使用。這個沒有什麼技巧,全靠平時多 ...
  • 概述 bootstrap開發標簽頁時,標簽頁顯示正常,但點擊時候對應內容區域沒有變化。 具體癥狀與解決方案 1.標簽頁UI出現,但點擊無反應,標簽頁UI並未隨點擊進行切換 先檢查bootstrap.css,jQuery.js和bootstrap.js是否有正確引入,並保證引入順序jQuery在前,b ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...