JavaScript基礎part1

 

JavaScript介紹css

你不知道它是什麼就學?這就是一個網頁嵌入式腳本語言...僅此而已html

JavaScript組成python

一個完整的 JavaScript 實現是由如下 3 個不一樣部分組成的:編程

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

Javascript 在開發中絕大多數狀況是基於對象的,也是面向對象的。數組

ECMAScript 描述瞭如下內容:瀏覽器

  • 語法 
  • 類型 
  • 語句 
  • 關鍵字 
  • 保留字 
  • 運算符 
  • 對象 (封裝 繼承 多態) 基於對象的語言.使用對象

JavaScript引入方式ide

//直接編寫,header裏面
<script>
    alert('hello world')
</script>
//導入文件
<script src="hello.js"></script>

 

變量函數

聲明變量使用var關鍵字,不須要指定變量類型spa

//普通方式
var i;    //聲明變量
i=10;    //變量賦值

//簡寫方式
var j=20;    //聲明變量及賦值

 

一行能夠聲明多個變量,能夠是不一樣的類型3d

var name="bob", age=20, job="teacher";

 

若是聲明變量的時候不用var,那麼該變量是全局變量

變量命名,首字符只能是字母,下劃線,$美圓符 三選一,餘下的字符能夠是下劃線、美圓符號或任何字母或數字字符且區分大小寫,x與X是兩個變量

Camel 標記法
首字母是小寫的,接下來的字母都以大寫字符開頭。例如:
var myTestValue = 0, mySecondValue = "hi";

Pascal 標記法
首字母是大寫的,接下來的字母都以大寫字符開頭。例如:
Var MyTestValue = 0, MySecondValue = "hi";

匈牙利類型標記法
在以 Pascal 標記法命名的變量前附加一個小寫字母(或小寫字母序列),說明該變量的類型。例如,i 表示整數,s 表示字符串,以下所示「
Var iMyTestValue = 0, sMySecondValue = "hi";
命名規範

  

常量

常量是直接在程序中出現的數據值,如圓周率3.1415926同樣的不會輕易改變的變量。

 

標識符

由不以數字開頭的字母、數字、下劃線(_)、美圓符號($)組成,經常使用於表示函數、變量等的名,例如:_abc,$abc,abc,abc123是標識符,而1abc不是

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

 

數據類型

 

JavaScript是一門弱類型語言。

強類型: 變量/對象必定是有類型的,且變量/對象的類型一旦肯定,其類型再也不容許更改,不一樣類型的變量/對象不容許賦值和初始化。

弱類型:變量/對象的類型概念很弱或者沒有類型的概念,不一樣變量/對象的類型能夠更改,不一樣類型的變量/對象容許賦值賦值和初始化。

靜態類型:類型檢查在編譯時進行。

  編譯或解釋的時候就知道每個變量的類型,由於類型錯誤而不能作的事情是語法錯誤。所以,在用靜態語言編程時,必須事先定義變量/對象的類型,以便讓編譯器或解釋器在編譯時就知道每一個實體的具體類型。

動態類型:類型檢查在運行時進行。

   編譯的時候不知道每個變量的類型,由於類型錯誤而不能作的事情是運行時錯誤。所以,在用動態語言編程時,不用事先定義變量/對象的類型,該語言會在你第一次給變量/對象賦值時,自動記下它的類型。




靜態類型語言
一種在編譯期間就肯定數據類型的語言。大多數靜態類型語言是經過要求在使用任一變量以前聲明其數據類型來保證這一點的。Java 和 C 是靜態類型語言。 
動態類型語言
一種在運行期間纔去肯定數據類型的語言,與靜態類型相反。VBScript 和 Python 是動態類型的,由於它們肯定一個變量的類型是在您第一次給它賦值的時候。 
強類型語言
一種老是強制類型定義的語言。Java 和 Python 是強制類型定義的。您有一個整數,若是不明確地進行轉換 ,不能將把它當成一個字符串去應用。 
弱類型語言
一種類型能夠被忽略的語言,與強類型相反。JS 是弱類型的。在JS中,能夠將字符串 '12' 和整數 3 進行鏈接獲得字符串'123',而後能夠把它當作整數 123 ,全部這些都不須要任何的顯示轉換。 
因此說 Python 既是動態類型語言 (由於它不使用顯示數據類型聲明),又是強類型語言 (由於只要一個變量得到了一個數據類型,它實際上就一直是這個類型了)。
語言類型

 

number(數值)
  • 不區分整型數值和浮點型數值
  • 全部數字都採用64位浮點格式存儲,至關於Java和C語言中的double格式
  • 能表示的最大值是±1.7976931348623157 x 10308
  • 能表示的最小值是±5 x 10 -324  

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

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

2進制: 1111 0011 1101 0100   <-----> 16進制:0xF3D4 <-----> 10進制:62420
2進制: 1 111 001 111 010 100 <-----> 8進制:0171724
16進制和8進制與2進制的換算

 

string(字符串):重點在後面字符串對象

是由Unicode字符、數字、標點符號組成的序列。

字符串常量首尾由單引號或雙引號括起。

JavaScript中沒有字符類型。

經常使用特殊字符在字符串中的表達。

字符串中部分特殊字符必須加上右劃線\。

經常使用的轉義字符 \n:換行 \':單引號 \":雙引號 \\:右劃線

boolean(布爾值)

Boolean類型僅有兩個值:true和false,也表明1和0,實際運算中true=1,false=0
布爾值也能夠看做on/off、yes/no、1/0對應true/false
Boolean值主要用於JavaScript的控制語句,例如:

if (x==1){
      y=y+1;
}else{
      y=y-1;
      }

 

undefined和null

Undefined類型

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

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

Null類型

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

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

 

運算符

算術運算符:
    +   -    *    /     %       ++        -- 

比較運算符:
    >   >=   <    <=    !=    ==    ===   !==

邏輯運算符:
     &&   ||   !

賦值運算符:
    =  +=   -=  *=   /=

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

 

注:下面沒有提到的符號和python同樣

算術運算符

注意1: 自加自減

假如x=2,那麼x++表達式執行後的值爲3,x--表達式執行後的值爲1;i++至關於i=i+1,i--至關於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);

 

i++和++i是有區別的,當有賦值操做的時候,如ret=i++和ret=++1,前者表示先賦值再運算,即ret值爲10,i爲11,後者表示先運算再賦值,即ret值爲11,i爲11。

 

注意2:單元運算

- 除了能夠表示減號還能夠表示負號  例如:x=-y

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

 

注意3:NaN

NAN值屬於Number類型: 當遇到將字符串轉成數字無效時,就會獲得一個NaN數據

var s="yuan";
var ret2=+s;
console.log(ret2);
console.log(typeof ret2)

 

特色

var n=NaN;
alert(n>3);
alert(n<3);
alert(n==3);
alert(n==NaN);
alert(n!=NaN);//NaN參與的全部的運算都是false,除了!=

 

 

比較運算符

用於控制語句時:

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 轉換成 0,true 爲 1。 
若是一個運算數是字符串,另外一個是數字,在檢查相等性以前,要嘗試把字符串轉換成數字。 
若是一個運算數是對象,另外一個是字符串,在檢查相等性以前,要嘗試把對象轉換成字符串。 
若是一個運算數是對象,另外一個是數字,在檢查相等性以前,要嘗試把對象轉換成數字。 

在比較時,該運算符還遵照下列規則:
值 null 和 undefined 相等。 
在檢查相等性時,不能把 null 和 undefined 轉換成其餘值。 
若是某個運算數是 NaN,等號將返回 false,非等號將返回 true。 
若是兩個運算數都是對象,那麼比較的是它們的引用值。若是兩個運算數指向同一對象,那麼等號返回 true,不然兩個運算數不等。 

 

 

邏輯運算符

if (2>1 && [1,2]){
    console.log("條件與")
}

// 思考返回內容?
console.log(1 && 3);    //3
console.log(0 && 3);    //0
console.log(0 || 3);    //3
console.log(2 || 3);    //2

 

流程控制

  • 順序結構(從上向下順序執行)
  • 分支結構
  • 循環結構

順序結構

<script>
    console.log(「星期一」);
    console.log(「星期二」);
    console.log(「星期三」);
</script>

 

 

條件分支結構

if...else...單分支結構

if (表達式){
   語句1;
   ......
   } 
else{ 語句2; ..... } //功能說明:若是表達式的值爲true則執行語句1,不然執行語句2

 

if...else if...else...多分支結構

if (表達式1) {
    語句1;
}
else if (表達式2){
    語句2;
}
else if (表達式3){
    語句3;
}
else{
    語句4;
}

 

示例:

var num=67;

if (num>90){
    alert("優秀")
}
else if (num>80 ){
    alert("良")
}

else if (num>60){
    alert("及格")
}
else {
    alert("不及格")
}

 

switch-case多分支結構

switch (表達式) {
    case 值1:語句1;break;
    case 值2:語句2;break;
    case 值3:語句3;break;
    default:語句4;
}

示例:

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="未定義";
}

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

 

循環結構

for循環結構(推薦)

for(初始表達式;條件表達式;自增或自減)
{
        執行語句
        ……
}
//功能說明:實現條件循環,當條件成立時,執行語句1,不然跳出循環體

 

 

for循環迭代式

for( 變量 in 數組或對象)
    {
        執行語句
        ……
    }

 

示例:

for (var i=0;i<10;i++){
    console.log(i);
}

 

while循環

while (條件){
    語句1;
    ...
}
//功能說明:運行功能和for相似,當條件成立循環執行語句花括號{}內的語句,不然跳出循環;一樣支持continue與break語句

 

示例:

var count=0;
var sum=0;
while (count<101){
    sum+=count;
    count++;
}
console.log(sum);

 

 

異常處理

try {
    //這段代碼從上往下運行,其中任何一個語句拋出異常該代碼塊就結束運行
}
catch (e) {
    // 若是try代碼塊中拋出了異常,catch代碼塊中的代碼就會被執行。
    //e是一個局部變量,用來指向Error對象或者其餘拋出的對象
}
finally {
     //不管try中代碼是否有異常拋出(甚至是try代碼塊中有return語句),finally代碼塊中始終會被執行。
}
//注:主動拋出異常 throw Error('xxxx')
相關文章
相關標籤/搜索