前端基礎---JavaScript

JavaScript

1.JS的引入方式

直接編寫

<script>
        alert('hello yuan')
   </script>

 

導入文件

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

 

2. JS的變量、常量和標識符

a.變量

1、聲明變量時不用聲明變量類型,全都使用var關鍵字

var a;<br>a=3;

2、一行可以聲明多個變量,並且可以是不同類型

var name="yuan", age=20,job="lecturer";

3、聲明變量時 可以不用var. 如果不用var ,那麼它是全局變量

4、變量命名,首字符只能是字母、下劃線、三選一,餘下的字符可以是下劃線、$或任何字母或數字字符且區分大小寫

變量命名規範:

Camel 標記法:首字母是小寫的,接下來的字母都以大寫字符開頭

var myTestValue = 0, mySecondValue ="hi";

Pascal 標記法:首字母是大寫的,接下來的字母都以大寫字符開頭

Var MyTestValue = 0, MySecondValue ="hi";

匈牙利類型標記法:在以 Pascal標記法命名的變量前附加一個小寫字母(或小寫字母序列),說明該變量的類型。例如,表示整數,表示字符串

Var iMyTestValue = 0, sMySecondValue ="hi";

 

b.常量和標識符

常量 :直接在程序中出現的數據值

標識符:

1由不以數字開頭的字母、數字、下劃線(_)、美元符號($)組成

2常用於表示函數、變量等的名稱

例如:_abc,$abc,abc,abc123是標識符,而1abc不是

3 JavaScript語言中代表特定含義的詞稱爲保留字,不允許程序再定義爲標識符

7c80592fac42c48596674cc0d3e22dc1.png

2807d098d2fe2afc2622c24fed9adbe9.png


3.JS的數據類型


1a6301cbb2efc16b8e8be9d11d7caebe.png

b26cebe402f9da7a76d9f665e54e0735.png

number    -----  數值

boolean   -----  布爾值

string    -----  字符串

undefined -----  undefined

null      -----   null 

 

a.數字類型(number

不區分整型數值和浮點型數值;

所有數字都採用64位浮點格式存儲,相當於JavaC語言中的double格式

能表示的最大值是±1.7976931348623157x 10308

能表示的最小值是±5 x 10-324

整數:
           JavaScript中十進制的整數由數字的序列組成
           精確表達的範圍是-9007199254740992 (-253)  9007199254740992 (253)
           超出範圍的整數,精確度將受影響
浮點數:
           使用小數點記錄數據
           例如:3.45.6
           使用指數記錄數據
           例如:4.3e23 = 4.3 x 1023

16進制和8進制數的表達:
           16進制數據前面加上0x,八進制前面加0;16進制數是由0-9,A-F16個字符組成;8進制數由0-78個數字組成

           16進制和8進制與2進制的換算:

2進制: 1111 0011 1101 0100   <-----> 16進制:0xF3D4 <-----> 10進制:62420

2進制: 1 111 001 111 010 100 <-----> 8進制:0171724

 

b. 字符串類型(string)

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

c. 布爾類型(boolean)

Boolean類型僅有兩個值:truefalse,也代表10,實際運算中true=1,false=0
布爾值也可以看作on/offyes/no1/0對應true/false
Boolean值主要用於JavaScript的控制語句,例如:

if (x==1){

     y=y+1;

}else{

     y=y-1;

}

 

 

d.Null & Undefined類型

Undefined類型

Undefined 類型只有一個值,即 undefined。當聲明的變量未初始化時,該變量的默認值是 undefined

當函數無明確返回值時,返回的也是值"undefined";

Null類型

另一種只有一個值的類型是 Null,它只有一個專用值 null,即它的字面量。值 undefined 實際上是從值 null 派生來的,因此 ECMAScript 把它們定義爲相等的。

儘管這兩個值相等,但它們的含義不同。undefined是聲明瞭變量但未對其初始化時賦予該變量的值,null則用於表示尚未存在的對象(在討論 typeof 運算符時,簡單地介紹過這一點)。如果函數或方法要返回的是對象,那麼找不到該對象時,返回的通常是null

 

4、運算符

算術運算符:

   +   -    *   /     %       ++       --

比較運算符:

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

邏輯運算符:

    &&   ||   

賦值運算符:

   =  +=   -= *=   /=

字符串運算符:

   +  連接,兩邊操作數有一個或兩個是字符串就做連接運算

 

算術運算符

注意1: 自加自減

假如x=2,那麼x++表達式執行後的值爲3x--表達式執行後的值爲1i++相當於i=i+1i--相當於i=i-1
遞增和遞減運算符可以放在變量前也可以放在變量後:--i

var i=10;

console.log(i++);

console.log(i);

console.log(++i);

console.log(i);

console.log(i--);

console.log(--i);

 

注意2: 單元運算符

除了可以表示減號還可以表示負號  例如:x=-y

除了可以表示加法運算還可以用於字符串的連接  例如:"abc"+"def"="abcdef"

 

js不同於python,是一門弱類型語言

靜態類型語言

一種在編譯期間就確定數據類型的語言。大多數靜態類型語言是通過要求在使用任一變量之前聲明其數據類型來保證這一點的。Java  C 是靜態類型語言。

動態類型語言

一種在運行期間纔去確定數據類型的語言,與靜態類型相反。VBScript  Python 是動態類型的,因爲它們確定一個變量的類型是在您第一次給它賦值的時候。

強類型語言

一種總是強制類型定義的語言。Java Python 是強制類型定義的。您有一個整數,如果不明確地進行轉換 ,不能將把它當成一個字符串去應用。

弱類型語言

一種類型可以被忽略的語言,與強類型相反。JS 是弱類型的。在JS中,可以將字符串 '12' 和整數 3 進行連接得到字符串'123',然後可以把它看成整數 123 ,所有這些都不需要任何的顯示轉換。

所以說 Python 既是動態類型語言 (因爲它不使用顯示數據類型聲明),又是強類型語言 (因爲只要一個變量獲得了一個數據類型,它實際上就一直是這個類型了)

 

注意3: NaN

var d="yuan";

   d=+d;

   alert(d);//NaN:屬於Number類型的一個特殊值,當遇到將字符串轉成數字無效時,就會得到一個NaN數據

   alert(typeof(d));//Number

 

   //NaN特點:

   

   var n=NaN;

   

   alert(n>3);

    alert(n<3);

   alert(n==3);

   alert(n==NaN);

   

alert(n!=NaN);//NaN參與的所有的運算都是false,除了!=

 

b.比較運算符

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

用於控制語句時:

       if (2>1){       //  3 0  false null undefined []

           console.log("條件成立!")

       }

 

等號和非等號的同類運算符是全等號和非全等號。這兩個運算符所做的與等號和非等號相同,只是它們在檢查相等性前,不執行類型轉換。

console.log(2==2);

console.log(2=="2");

console.log(2==="2");

console.log(2!=="2");

注意1

var bResult = "Blue" <"alpha";

alert(bResult); //輸出 true

在上面的例子中,字符串"Blue" 小於 "alpha",因爲字母 B 的字符代碼是 66,字母 a 的字符代碼是 97

比較數字和字符串

另一種棘手的狀況發生在比較兩個字符串形式的數字時,比如:

var bResult = "25" <"3";

alert(bResult); //輸出 "true"

上面這段代碼比較的是字符串"25"  "3"。兩個運算數都是字符串,所以比較的是它們的字符代碼("2" 的字符代碼是 50"3" 的字符代碼是 51)。

不過,如果把某個運算數該爲數字,那麼結果就有趣了:

var bResult = "25" < 3;

alert(bResult); //輸出 "false"

這裏,字符串"25" 將被轉換成數字 25,然後與數字 3 進行比較,結果不出所料。

總結:

比較運算符兩側如果一個是數字類型,一個是其他類型,會將其類型轉換成數字類型.

比較運算符兩側如果都是字符串類型,比較的是最高位的asc,如果最高位相等,繼續取第二位比較.

 

注意2

等性運算符:執行類型轉換的規則如下:

如果一個運算數是 Boolean 值,在檢查相等性之前,把它轉換成數字值。false 轉換成 0true  1

如果一個運算數是字符串,另一個是數字,在檢查相等性之前,要嘗試把字符串轉換成數字。

如果一個運算數是對象,另一個是字符串,在檢查相等性之前,要嘗試把對象轉換成字符串。

如果一個運算數是對象,另一個是數字,在檢查相等性之前,要嘗試把對象轉換成數字。

在比較時,該運算符還遵守下列規則:

 null  undefined 相等。

在檢查相等性時,不能把 null  undefined 轉換成其他值。

如果某個運算數是 NaN,等號將返回 false,非等號將返回 true

如果兩個運算數都是對象,那麼比較的是它們的引用值。如果兩個運算數指向同一對象,那麼等號返回 true,否則兩個運算數不等。

 

c.邏輯運算符

if (2>1 && [1,2]){

   console.log("條件與")

}

// 思考返回內容?

console.log(1 && 3);

console.log(0 && 3);

console.log(0 || 3);

console.log(2 || 3);

 

5、流程控制

順序結構(從上向下順序執行)

分支結構

循環結構

a.順序結構

<script>

       console.log(“星期一”);

        console.log(“星期二”);

       console.log(“星期三”);

   </script>

 

b.分支結構

1. if-else結構:

if (表達式){

          語句1;

          ......

    } else{

          語句2;

          .....

    }

功能說明:如果表達式的值爲true則執行語句1,否則執行語句2

示例:

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

       //獲取今天的星期值,0爲星期天

        var y;

 

       if ( (x==6) || (x==0) ) {

           y="週末";

       }else{

           y="工作日";

           }

       

       console.log(y);

 

       /*等價於

 

       y="工作日";

       if ( (x==6) || (x==0) ) {

       y="週末";

       }

       console.log(y);  */

 

2. if-elifelse結構:

if (表達式1) {

    語句1;

}else if (表達式2){

    語句2;

}else if (表達式3){

    語句3;

} else{

    語句4;

}

 

示例:

var score=window.prompt("您的分數:");

if (score>90){

   ret="優秀";

}else if (score>80){

   ret="";

}else if (score>60){

   ret="及格";

}else {

   ret = "不及格";

 

}

alert(ret);

 

3. switch-case結構:

switch基本格式

switch (表達式) {

   case 1:語句1;break;

   case 2:語句2;break;

   case 3:語句3;break;

   default:語句4;

}

532519f06e14f09736c2286c0d4f9b9d.png

 

示例:

switch(x){

case 1:y="星期一";   break;

case 2:y="星期二";   break;

case 3:y="星期三";   break;

case 4:y="星期四";   break;

case 5:y="星期五";   break;

case 6:y="星期六";   break;

case 7:y="星期日";   break;

default: y="未定義";

}

switchelse if結構更加簡潔清晰,使程序可讀性更強,效率更高。

 

b. 循環結構

             6f9cabb00bbf4c78ff1b53664ad8ff4c.png

               循環語句流程圖    

1. for循環:

語法規則:

    for(初始表達式;條件表達式;自增或自減)

    {

           執行語句

           ……

    }

功能說明:實現條件循環,當條件成立時,執行語句1,否則跳出循環體

for循環的另一種形式:

for( 變量 in 數組或對象)

    {

       執行語句

       ……

    }

 

2. while循環:

語法規則:

while (條件){

    語句1

   ...

}

功能說明:運行功能和for類似,當條件成立循環執行語句花括號{}內的語句,否則跳出循環;同樣支持continuebreak語句。

var i=1;

while (i<=7) {

   document.write("<H"+i+">hello</H"+i+"> ");

   document.write("<br>");

   i++;

}

//循環輸出H1H7的字體大小

 

C. 異常處理

try {

   //這段代碼從上往下運行,其中任何一個語句拋出異常該代碼塊就結束運行

}

catch (e) {

   // 如果try代碼塊中拋出了異常,catch代碼塊中的代碼就會被執行。

   //e是一個局部變量,用來指向Error對象或者其他拋出的對象

}

finally {

    //無論try中代碼是否有異常拋出(甚至是try代碼塊中有return語句),finally代碼塊中始終會被執行。

}

注:主動拋出異常 throwError('xxxx')

 

6JavaScript的對象

簡介:

JavaScript中除了nullundefined以外其他的數據類型都被定義成了對象,也可以用創建對象的方法定義變量,StringMathArrayDateRegExp都是JavaScript中重要的內置對象,在JavaScript程序大多數功能都是基於對象實現的。

 

<scriptlanguage="javascript">

var aa=Number.MAX_VALUE;

//利用數字對象獲取可表示最大數

var bb=new String("helloJavaScript");

//創建字符串對象

var cc=new Date();

//創建日期對象

var dd=new Array("星期一","星期二","星期三","星期四");

//數組對象

</script>

ceaf08b214acb7456c0c9459fdcac605.png

 

3.1 String對象

字符串對象創建

字符串創建(兩種方式)
        變量 = “字符串”
        字串對象名稱 = new String (字符串)

var str1="hello world";

var str1= new String("helloword");

 

字符串對象的屬性和函數

x.length         ----獲取字符串的長度

 

 x.toLowerCase()        ----轉爲小寫

 x.toUpperCase()        ----轉爲大寫

 x.trim()               ----去除字符串兩邊空格      

 

 

----字符串查詢方法

 

x.charAt(index)         ----str1.charAt(index);----獲取指定位置字符,其中index爲要獲取的字符索引

 

x.indexOf(findstr,index)----查詢字符串位置

x.lastIndexOf(findstr) 

 

x.match(regexp)         ----match返回匹配字符串的數組,如果沒有匹配則返回null

x.search(regexp)        ----search返回匹配字符串的首字符位置索引

 

                        示例:

                        var str1="welcometo the world of JS!";

                        varstr2=str1.match("world");

                        var str3=str1.search("world");

                        alert(str2[0]);  // 結果爲"world"

                        alert(str3);     // 結果爲15

                       

 

----子字符串處理方法

 

x.substr(start, length) ----start表示開始位置,length表示截取長度

x.substring(start, end) ----end是結束位置

 

x.slice(start, end)     ----切片操作字符串

示例:

varstr1="abcdefgh";

varstr2=str1.slice(2,4);

varstr3=str1.slice(4);

var str4=str1.slice(2,-1);

varstr5=str1.slice(-3,-1);

alert(str2); //結果爲"cd"

alert(str3); //結果爲"efgh"

alert(str4); //結果爲"cdefg"

alert(str5); //結果爲"fg" 

x.replace(findstr,tostr) ----    字符串替換 

x.split();                 ----分割字符串

varstr1=",,,,,,";

varstrArray=str1.split(",");

alert(strArray[1]);//結果爲""                              

x.concat(addstr)         ----    拼接字符串

 

7array對象

a.數組創建

創建數組的三種方式:

創建方式1:

var arrname = [元素0,元素1,.];          // var arr=[1,2,3];

 

創建方式2:

var arrname = new Array(元素0,元素1,.); // vartest=new Array(100,"a",true);

 

創建方式3:

var arrname = new Array(長度);

           //  初始化數組對象:

                var cnweek=new Array(7);

                    cnweek[0]="星期日";

                    cnweek[1]="星期一";

                    ...

                    cnweek[6]="星期六";

 

創建二維數組:

var cnweek=new Array(7);

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

   cnweek[i]=new Array(2);

}

cnweek[0][0]="星期日";

cnweek[0][1]="Sunday";

cnweek[1][0]="星期一";

cnweek[1][1]="Monday";

...

cnweek[6][0]="星期六";

cnweek[6][1]="Saturday";

 

b. 數組對象的屬性和方法

join方法:

x.join(bystr)       ----將數組元素拼接成字符串

 

                            var arr1=[1, 2, 3,4, 5, 6, 7];

                varstr1=arr1.join("-");

                alert(str1);  //結果爲"1-2-3-4-5-6-7"

 

concat方法:

x.concat(value,...)    ----

                   var a = [1,2,3];

                  var b=a.concat(4,5) ;

                  alert(a.toString());  //返回結果爲1,2,3           

                  alert(b.toString());  //返回結果爲1,2,3,4,5

 

數組排序-reverse sort

//x.reverse()

//x.sort()

var arr1=[32, 12, 111, 444];

//vararr1=["a","d","f","c"];

 

arr1.reverse(); //顛倒數組元素

alert(arr1.toString());

//結果爲444,111,12,32

 

arr1.sort();    //排序數組元素

alert(arr1.toString());

//結果爲111,12,32,444

 

//------------------------------

arr=[1,5,2,100];

 

//arr.sort();

//alert(arr);

//如果就想按着數字比較呢?

 

function intSort(a,b){

   if (a>b){

       return 1;//-1

    }

   else if(a<b){

       return -1;//1

    }

   else {

       return 0

    }

}

 

arr.sort(intSort);

 

alert(arr);

 

function IntSort(a,b){

   return a-b;

}

 

數組切片操作:

//x.slice(start, end)

//

//使用註解

//

//x代表數組對象

//start表示開始位置索引

//end是結束位置下一數組元素索引編號

//第一個數組元素索引爲0

//startend可爲負數,-1代表最後一個數組元素

//end省略則相當於從start位置截取以後所有數組元素

 

var arr1=['a','b','c','d','e','f','g','h'];

var arr2=arr1.slice(2,4);

var arr3=arr1.slice(4);

var arr4=arr1.slice(2,-1);

 

alert(arr2.toString());

//結果爲"c,d"

alert(arr3.toString());

//結果爲"e,f,g,h"

alert(arr4.toString());

//結果爲"c,d,e,f,g"

 

刪除子數組:

//x. splice(start, deleteCount, value, ...)

 

//使用註解

 

//x代表數組對象

//splice的主要用途是對數組指定位置進行刪除和插入

//start表示開始位置索引

//deleteCount刪除數組元素的個數

//value表示在刪除位置插入的數組元素

//value參數可以省略            

var a = [1,2,3,4,5,6,7,8];

a.splice(1,2);

alert(a.toString());//a變爲 [1,4,5,6,7,8]

a.splice(1,1);

alert(a.toString());//a變爲[1,5,6,7,8]

a.splice(1,0,2,3);

alert(a.toString());//a變爲[1,2,3,5,6,7,8]

 

數組的pushpop

//push pop這兩個方法模擬的是一個棧操作

//x.push(value, ...)  壓棧

//x.pop()             彈棧     

//使用註解

//

//x代表數組對象

//value可以爲字符串、數字、數組等任何值

//push是將value值添加到數組x的結尾

//pop是將數組x的最後一個元素刪除

var arr1=[1,2,3];

arr1.push(4,5);

alert(arr1);

//結果爲"1,2,3,4,5"

arr1.push([6,7]);

alert(arr1)

//結果爲"1,2,3,4,5,6,7"

arr1.pop();

alert(arr1);

//結果爲"1,2,3,4,5"

 

數組的shiftunshift

//x.unshift(value,...)

//x.shift()

//使用註解

//x代表數組對象

//value可以爲字符串、數字、數組等任何值

//unshift是將value值插入到數組x的開始

//shift是將數組x的第一個元素刪除

var arr1=[1,2,3];

arr1.unshift(4,5);

alert(arr1);  //結果爲"4,5,1,2,3"

arr1. unshift([6,7]);

alert(arr1);  //結果爲"6,7,4,5,1,2,3"

arr1.shift();

alert(arr1);  //結果爲"4,5,1,2,3"

 

總結js的數組特性:

// js中數組的特性

        //java中數組的特性,  規定是什麼類型的數組,就只能裝什麼類型.只有一種類型.

        //js中的數組特性1: js中的數組可以裝任意類型,沒有任何限制.

        //js中的數組特性2: js中的數組,長度是隨着下標變化的.用到多長就有多長.

        var arr5 = ['abc',123,1.14,true,null,undefined,new String('1213'),newFunction('a','b','alert(a+b)')];

       /*  alert(arr5.length);//8

        arr5[10] = "hahaha";

        alert(arr5.length); //11

        alert(arr5[9]);// undefined */

 

8Date對象

a.創建Date對象

//方法1:不指定參數

var nowd1=new Date();

alert(nowd1.toLocaleString( ));

 

//方法2:參數爲日期字符串

var nowd2=new Date("2004/3/20 11:12");

alert(nowd2.toLocaleString( ));

var nowd3=new Date("04/03/2011:12");

alert(nowd3.toLocaleString( ));

 

//方法3:參數爲毫秒數

var nowd3=new Date(5000);

alert(nowd3.toLocaleString( ));

alert(nowd3.toUTCString());

 

//方法4:參數爲年月日小時分鐘秒毫秒

var nowd4=new Date(2004,2,20,11,12,0,300);

alert(nowd4.toLocaleString( ));//毫秒並不直接顯示

 

Date對象的方法—:

獲取日期和時間

getDate()                 獲取日

getDay ()                 獲取星期

getMonth ()               獲取月(0-11

getFullYear ()            獲取完整年份

getYear ()                獲取年

getHours ()               獲取小時

getMinutes ()             獲取分鐘

getSeconds ()             獲取秒

getMilliseconds ()        獲取毫秒

getTime ()                返回累計毫秒數(1970/1/1午夜)

 

實例練習:

function getCurrentDate(){

       //1. 創建Date對象

       var date = new Date(); //沒有填入任何參數那麼就是當前時間

       //2. 獲得當前年份

       var year = date.getFullYear();

       //3. 獲得當前月份 js中月份是從011.

       var month = date.getMonth()+1;

       //4. 獲得當前日

       var day = date.getDate();

       //5. 獲得當前小時

       var hour = date.getHours();

       //6. 獲得當前分鐘

       var min = date.getMinutes();

       //7. 獲得當前秒

       var sec = date.getSeconds();

       //8. 獲得當前星期

       var week = date.getDay(); //沒有getWeek

       // 20140618 15:40:30 星期三

       return year+""+changeNum(month)+""+day+" "+hour+":"+min+":"+sec+""+parseWeek(week);

}

 

alert(getCurrentDate());

//解決 自動補齊成兩位數字的方法

   function changeNum(num){

   if(num < 10){

       return "0"+num;

   }else{

       return num;

    }

 

}

//將數字 0~6 轉換成 星期日到星期六

   function parseWeek(week){

    vararr = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];

   //             0      1     2      3 .............

   return arr[week];

}

 

Date對象的方法設置日期和時間

//設置日期和時間

//setDate(day_of_month)       設置日

//setMonth (month)                 設置月

//setFullYear (year)               設置年

//setHours (hour)         設置小時

//setMinutes (minute)     設置分鐘

//setSeconds (second)     設置秒

//setMillliseconds (ms)       設置毫秒(0-999)

//setTime (allms)     設置累計毫秒(1970/1/1午夜)

   

var x=new Date();

x.setFullYear (1997);    //設置年1997

x.setMonth(7);        //設置月7

x.setDate(1);        //設置日1

x.setHours(5);        //設置小時5

x.setMinutes(12);    //設置分鐘12

x.setSeconds(54);    //設置秒54

x.setMilliseconds(230);        //設置毫秒230

document.write(x.toLocaleString()+"<br>");

//返回19978151254

 

x.setTime(870409430000); //設置累計毫秒數

document.write(x.toLocaleString()+"<br>");

//返回199781122350

 

Date對象的方法日期和時間的轉換:

getTimezoneOffset():8個時區×15×4/=480;

返回本地時間與GMT的時間差,以分鐘爲單位

toUTCString()

返回國際標準時間字符串

toLocalString()

返回本地格式時間字符串

Date.parse(x)

返回累計毫秒數(1970/1/1午夜到本地時間)

Date.UTC(x)

返回累計毫秒數(1970/1/1午夜到國際時間)

 

9Math對象

//該對象中的屬性方法 和數學有關.

abs(x)   返回數的絕對值。

exp(x)   返回 e 的指數。

floor(x)對數進行下舍入。

log(x)   返回數的自然對數(底爲e)。

max(x,y)   返回 x  y 中的最高值。

min(x,y)   返回 x  y 中的最低值。

pow(x,y)   返回 x  y 次冪。

random()   返回 0 ~ 1 之間的隨機數。

round(x)   把數四捨五入爲最接近的整數。

sin(x)   返回數的正弦。

sqrt(x)   返回數的平方根。

tan(x)   返回角的正切。

 

//方法練習:

       //alert(Math.random()); // 獲得隨機數 0~1 不包括1.

       //alert(Math.round(1.5)); // 四捨五入

       //練習:獲取1-100的隨機整數,包括1100

            //var num=Math.random();

            //num=num*10;

            //num=Math.round(num);

            //alert(num)

       //============max min=========================

       /* alert(Math.max(1,2));// 2

       alert(Math.min(1,2));// 1 */

       //-------------pow--------------------------------

       alert(Math.pow(2,4));// pow 計算參數的參數次方.

 

10function對象

a.函數的定義

function 函數名 (參數){<br>   函數體;

    return 返回值;

}

功能說明:

可以使用變量、常量或表達式作爲函數調用的參數
函數由關鍵字function定義
函數名的定義規則與標識符一致,大小寫是敏感的
返回值必須使用return
Function 類可以表示開發者定義的任何函數。

 Function 類直接創建函數的語法如下:

var 函數名 = new Function("參數1","參數n","function_body");

雖然由於字符串的關係,第二種形式寫起來有些困難,但有助於理解函數只不過是一種引用類型,它們的行爲與用 Function 類明確創建的函數行爲是相同的。

示例:

function func1(name){

   alert('hello'+name);

    return8

}

 

   ret=func1("yuan");

   alert(ret);

 

 

var func2=newFunction("name","alert(\"hello\"+name);")

func2("egon")

注意:js的函數加載執行與python不同,它是整體加載完纔會執行,所以執行函數放在函數聲明上面或下面都可以:

<script>

    //f();--->OK

 

    functionf(){

       console.log("hello")

 

    }

 

   f() //----->OK

</script>

 

b. Function 對象的屬性

如前所述,函數屬於引用類型,所以它們也有屬性和方法。
比如,ECMAScript 定義的屬性 length 聲明瞭函數期望的參數個數

alert(func1.length)

 

c. Function 的調用

function func1(a,b){

   alert(a+b);

}

   func1(1,2);  //3

   func1(1,2,3);//3

   func1(1);    //NaN

   func1();     //NaN

    //只要函數名寫對即可,參數怎麼填都不報錯.

 

-------------------面試題-----------

 functiona(a,b){

    alert(a+b);

}

 

   vara=1;

   varb=2;

  a(a,b)

 

 d. 函數的內置對象arguments

function add(a,b){

 

       console.log(a+b);//3

       console.log(arguments.length);//2

       console.log(arguments);//[1,2]

 

    }

   add(1,2)

 

    ------------------arguments的用處1 ------------------

    functionnxAdd(){

       var result=0;

       for (var num in arguments){

           result+=arguments[num]

       }

       alert(result)

    }

   nxAdd(1,2,3,4,5)

 

//    ------------------arguments的用處2 ------------------

 

    functionf(a,b,c){

       if (arguments.length!=3){

           throw new Error("function f called with"+arguments.length+" arguments,but it just need 3 arguments")

       }

       else {

           alert("success!")

       }

    }

 

   f(1,2,3,4,5)

 

e. 匿名函數

// 匿名函數

    varfunc = function(arg){

       return "tony";

    }

 

// 匿名函數的應用

    (function(){

       alert("tony");

    })()

 

    (function(arg){

        console.log(arg);

   })('123')

 

11BOM對象

a. window對象

所有瀏覽器都支持 window 對象。
概念上講.一個html文檔對應一個window對象.
功能上講控制瀏覽器窗口的.
使用上講: window對象不需要創建對象,直接使用即可.

b. Window 對象方法

alert()            顯示帶有一段消息和一個確認按鈕的警告框。

confirm()          顯示帶有一段消息以及確認按鈕和取消按鈕的對話框。

prompt()           顯示可提示用戶輸入的對話框。

 

open()             打開一個新的瀏覽器窗口或查找一個已命名的窗口。

close()            關閉瀏覽器窗口。

setInterval()      按照指定的週期(以毫秒計)來調用函數或計算表達式。

clearInterval()    取消由 setInterval() 設置的 timeout

setTimeout()       在指定的毫秒數後調用函數或計算表達式。

clearTimeout()     取消由 setTimeout() 方法設置的 timeout

scrollTo()         把內容滾動到指定的座標。

 

1. 方法使用

1alert confirm prompt以及open函數

   //----------alert confirm prompt----------------------------

   //alert('aaa');

   

   

   /* var result = confirm("您確定要刪除嗎?");

   alert(result); */

 

   //prompt 參數1 : 提示信息.   參數2:輸入框的默認值返回值是用戶輸入的內容.

 

   // var result = prompt("請輸入一個數字!","haha");

   // alert(result);

 

    方法講解:   

       //open方法 打開和一個新的窗口  進入指定網址.參數1 : 網址.

       //調用方式1

           //open("http://www.baidu.com");

       //參數什麼都不填 就是打開一個新窗口.  參數2.填入新窗口的名字(一般可以不填). 參數3: 新打開窗口的參數.

           open('','','width=200,resizable=no,height=100'); // 新打開一個寬爲200 高爲100的窗口

        //close方法  將當前文檔窗口關閉.

           //close();

示例:

 varnum = Math.round(Math.random()*100);

   function acceptInput(){

   //2.讓用戶輸入(prompt)    並接受 用戶輸入結果

   var userNum = prompt("請輸入一個0~100之間的數字!","0");

   //3.將用戶輸入的值與 隨機數進行比較

           if(isNaN(+userNum)){

               //用戶輸入的無效(重複2,3步驟)

                alert("請輸入有效數字!");

                acceptInput();

           }

           else if(userNum > num){

           //大了==> 提示用戶大了,讓用戶重新輸入(重複2,3步驟)

                alert("您輸入的大了!");

                acceptInput();

            }else if(userNum < num){

           //小了==> 提示用戶小了,讓用戶重新輸入(重複2,3步驟)

                alert("您輸入的小了!");

                acceptInput();

           }else{

           //答對了==>提示用戶答對了 , 詢問用戶是否繼續遊戲(confirm).

                var result = confirm("恭喜您!答對了,是否繼續遊戲?");

                if(result){

                    // ==> 重複123步驟.

                    num =Math.round(Math.random()*100);

                    acceptInput();

                }else{

                    //==> 關閉窗口(close方法).

                    close();

                }

           }

    }

 

2.setIntervalclearInterval

setInterval() 方法會不停地調用函數,直到 clearInterval() 被調用或窗口被關閉。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的參數

語法:<br>    setInterval(code,millisec)

其中,code爲要調用的函數或要執行的代碼串。millisec週期性執行或調用 code 之間的時間間隔,以毫秒計

示例:

<input id="ID1" type="text"onclick="begin()">

<button onclick="end()">停止</button>

 

<script>

    functionshowTime(){

          var nowd2=new Date().toLocaleString();

          var temp=document.getElementById("ID1");

          temp.value=nowd2;

 

    }

    varID;

    functionbegin(){

       if (ID==undefined){

            showTime();

            ID=setInterval(showTime,1000);

       }

    }

    functionend(){

       clearInterval(ID);

       ID=undefined;

    }

</script>

 

11DOM對象

什麼是HTML  DOM

    HTML  DocumentObject Model(文檔對象模型)

    HTML DOM 定義了訪問和操作HTML文檔的標準方法

    HTML DOM  HTML 文檔呈現爲帶有元素、屬性和文本的樹結構(節點樹)

a.DOM

5fa45d9785f96b7971daf32d32f13969.png

8c9438854b06df971ac470dd48d34e6d.png

 dom樹是爲了展示文檔中各個對象之間的關係,用於對象的導航。

b. DOM節點

1、節點類型

HTML 文檔中的每個成分都是一個節點。

DOM 是這樣規定的:
    整個文檔是一個文檔節點 
    每個 HTML 標籤是一個元素節點 
    包含在 HTML 元素中的文本是文本節點 
    每一個 HTML 屬性是一個屬性節點

67870135e3483b5cf459724fb50014f6.png

 

其中,documentelement節點是重點。

2、節點關係

節點樹中的節點彼此擁有層級關係。
(parent),(child)和同胞(sibling)等術語用於描述這些關係。父節點擁有子節點。同級的子節點被稱爲同胞(兄弟或姐妹)。

    在節點樹中,頂端節點被稱爲根(root

    每個節點都有父節點、除了根(它沒有父節點)

    一個節點可擁有任意數量的子

    同胞是擁有相同父節點的節點

下面的圖片展示了節點樹的一部分,以及節點之間的關係:
18159a0272963cd794491e8c4886d8ee.png

訪問 HTML 元素(節點),訪問 HTML 元素等同於訪問節點,我們能夠以不同的方式來訪問 HTML元素。

3、節點查找

直接查找節點

document.getElementById(“idname”)

document.getElementsByTagName(“tagname”)

document.getElementsByName(“name”)

document.getElementsByClassName(“name”)

 

<div id="div1">

 

    <divclass="div2">i am div2</div>

    <divname="yuan">i am div2</div>

    <divid="div3">i am div2</div>

    <p>hellop</p>

</div>

 

<script>

 

   vardiv1=document.getElementById("div1");

 

////支持;

//   varele= div1.getElementsByTagName("p");

//  alert(ele.length);

////支持

//  var ele2=div1.getElementsByClassName("div2");

//  alert(ele2.length);

////不支持

//  var ele3=div1.getElementById("div3");

//  alert(ele3.length);

////不支持

//   varele4=div1.getElementsByName("yuan");

//  alert(ele4.length)

 

</script>

注意:設計到尋找元素,注意<script>標籤的位置!

 

4、導航節點屬性

'''

parentElement           // 父節點標籤元素

children                // 所有子標籤

firstElementChild       // 第一個子標籤元素

lastElementChild        // 最後一個子標籤元素

nextElementtSibling     // 下一個兄弟標籤元素

previousElementSibling  // 上一個兄弟標籤元素

'''

注意,js中沒有辦法找到所有的兄弟標籤!

 

5、節點操作

創建節點:

createElement(標籤名:創建一個指定名稱的元素

例:var tag=document.createElement(input")
           tag.setAttribute('type','text');

 

添加節點:

追加一個子節點(作爲最後的子節點)

somenode.appendChild(newnode)

把增加的節點放到某個節點的前邊

somenode.insertBefore(newnode,某個節點)

 

刪除節點:

removeChild():獲得要刪除的元素,通過父元素調用刪除

 

替換節點:

somenode.replaceChild(newnode, 某個節點)

 

節點屬性操作:

1、獲取文本節點的值:innerText    innerHTML

2attribute操作

    elementNode.setAttribute(name,value)   

    elementNode.getAttribute(屬性名)       <-------------->elementNode.屬性名(DHTML)

     elementNode.removeAttribute(“屬性名”);

3value獲取當前選中的value
        1.input   
        2.select selectedIndex
        3.textarea  
4innerHTML 給節點添加html代碼:
        該方法不是w3c的標準,但是主流瀏覽器支持   
        tag.innerHTML = <p>要顯示內容</p>;

5、關於class的操作:

elementNode.className

elementNode.classList.add

elementNode.classList.remove

6、改變css樣式:

<p id="p2">Helloworld!</p>

document.getElementById("p2").style.color="blue";

                             .style.fontSize=48px

 

c. DOM Event(事件)

1、事件類型

onclick        當用戶點擊某個對象時調用的事件句柄。

ondblclick     當用戶雙擊某個對象時調用的事件句柄。

onfocus        元素獲得焦點。               練習:輸入框

onblur         元素失去焦點。               應用場景:用於表單驗證,用戶離開某個輸入框時,代表已經輸入完了,我們可以對它進行驗證.

onchange       域的內容被改變。             應用場景:通常用於表單元素,當元素內容被改變時觸發.(三級聯動)

onkeydown      某個鍵盤按鍵被按下。          應用場景當用戶在最後一個輸入框按下回車按鍵時,表單提交.

onkeypress     某個鍵盤按鍵被按下並鬆開。

onkeyup        某個鍵盤按鍵被鬆開。

onload         一張頁面或一幅圖像完成加載。

onmousedown    鼠標按鈕被按下。

onmousemove    鼠標被移動。

onmouseout    鼠標從某元素移開。

onmouseover    鼠標移到某元素之上。

onmouseleave   鼠標從元素離開

onselect       文本被選中。

onsubmit       確認按鈕被點擊。

 

2、綁定事件方式

方式1:

<div id="div" onclick="foo(this)">點我呀</div>

<script>

    functionfoo(self){           // 形參不能是this;

       console.log("點你大爺!");

       console.log(self);  

    }

</script>

 

方式2:

<p id="abc">試一試!</p>

<script>

    varele=document.getElementById("abc");

   ele.onclick=function(){

       console.log("ok");

       console.log(this);    // this直接用

   };

</script>

 

3、事件介紹

onload

onload 屬性開發中只給 body元素加.這個屬性的觸發 標誌着 頁面內容被加載完成.應用場景當有些事情我們希望頁面加載完立刻執行,那麼可以使用該事件屬性.

<!DOCTYPE html>

<html>

<head>

    <metacharset="UTF-8">

    <title>Title</title>

    <script>

        /*

              window.onload=function(){

                   varele=document.getElementById("ppp");

                  ele.onclick=function(){

                   alert(123)

                };

            };

        */

 

         function fun() {

              varele=document.getElementById("ppp");

               ele.onclick=function(){

               alert(123)

           };

         }

    </script>

</head>

<body onload="fun()">

<p id="ppp">hello p</p>

</body>

</html>

 

onsubmit

當表單在提交時觸發該屬性也只能給form元素使用.應用場景在表單提交前驗證用戶輸入是否正確.如果驗證失敗.在該方法中我們應該阻止表單的提交.

<!DOCTYPE html>

<html>

<head>

    <metacharset="UTF-8">

    <title>Title</title>

    <script>

       window.onload=function(){

           //阻止表單提交方式1().

           //onsubmit 命名的事件函數,可以接受返回值其中返回false表示攔截表單提交.其他爲放行.

            var ele=document.getElementById("form");

            ele.onsubmit=function(event) {

           //    alert("驗證失敗 表單不會提交!");

           //    return false;

           // 阻止表單提交方式2event.preventDefault(); ==>通知瀏覽器不要執行與事件關聯的默認動作。

            alert("驗證失敗 表單不會提交!");

            event.preventDefault();

    }

       };

    </script>

</head>

<body>

<form id="form">

           <input type="text"/>

           <input type="submit" value="點我!" />

</form>

</body>

</html>

 

4、事件傳播:

<div id="abc_1" style="border:1pxsolid red;width:300px;height:300px;">

        <div id="abc_2" style="border:1pxsolid red;width:200px;height:200px;">

       </div>

</div>

<script type="text/javascript">

       document.getElementById("abc_1").onclick=function(){

           alert('111');

       };

       document.getElementById("abc_2").onclick=function(event){

           alert('222');

           event.stopPropagation(); //阻止事件向外層div傳播.

       }

</script>

 

5onselect

<input type="text">

<script>

    varele=document.getElementsByTagName("input")[0];

   ele.onselect=function(){

         alert(123);

    }

</script>

 

6onchange:

<select name=""id="">

   <option value="">111</option>

   <option value="">222</option>

   <option value="">333</option>

</select>

<script>

    varele=document.getElementsByTagName("select")[0];

   ele.onchange=function(){

         alert(123);

    }

</script>


7onkeydown:

Event 對象:Event 對象代表事件的狀態,比如事件在其中發生的元素、鍵盤按鍵的狀態、鼠標的位置、鼠標按鈕的狀態。
事件通常與函數結合使用,函數不會在事件發生前被執行!event對象在事件發生時系統已經創建好了,並且會在事件函數被調用時傳給事件函數.我們獲得僅僅需要接收一下即可.比如onkeydown,我們想知道哪個鍵被按下了,需要問下event對象的屬性,這裏就時KeyCode.

<input type="text"id="t1"/>

<scripttype="text/javascript">

    varele=document.getElementById("t1");

   ele.onkeydown=function(e){

       e=e||window.event;

       var keynum=e.keyCode;

       var keychar=String.fromCharCode(keynum);

       alert(keynum+'----->'+keychar);

   };

</script> 

8onmouseoutonmouseleave事件的區別:

<!DOCTYPE html>

<html>

<head>

   <meta charset="UTF-8">

   <title>Title</title>

   <style>

       #container{

           width: 300px;

       }

       #title{

           cursor: pointer;

           background: #ccc;

       }

      #list{

          display: none;

          background:#fff;

      }

 

       #list div{

           line-height: 50px;

       }

       #list  .item1{

           background-color: green;

       }

 

        #list  .item2{

           background-color: rebeccapurple;

       }

 

        #list  .item3{

           background-color: lemonchiffon;

       }

   </style>

</head>

<body>

<p>先看下使用mouseout的效果:</p>

<div id="container">

       <div id="title">使用了mouseout事件</div>

       <div id="list">

                <divclass="item1">第一行</div>

                <divclass="item2">第二行</div>

                <div>第三行</div>

       </div>

</div>

<script>

// 1.不論鼠標指針離開被選元素還是任何子元素,都會觸發 mouseout 事件。

// 2.只有在鼠標指針離開被選元素時,纔會觸發 mouseleave 事件。

   varcontainer=document.getElementById("container");

   vartitle=document.getElementById("title");

   varlist=document.getElementById("list");

  title.onmouseover=function(){

      list.style.display="block";

   };

  container.onmouseleave=function(){ // 改爲mouseout試一下

      list.style.display="none";

   };

/*

因爲mouseout事件是會冒泡的,也就是onmouseout事件可能被同時綁定到了container的子元素titlelist上,所以鼠標移出每個子元素時也都會觸發我們的list.style.display="none";

*/

  /*

  思考:

  if:

      list.onmouseout=function(){

          list.style.display="none";

   };

     爲什麼移出第一行時,整個list會被隱藏?

     其實是同樣的道理,onmouseout事件被同時綁定到list和它的三個子元素item,所以離開任何一個

     子元素同樣會觸發list.style.display="none";

   */

</script>

</body>

</html>


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