1. 程式人生 > >JavaScript學習---JavaScript基礎知識

JavaScript學習---JavaScript基礎知識

amp 打印 符號 rule 檢查 右劃 ava 循環 名稱

JavaScript的引入方式

JavaScript的引入方式:

1.直接在script裏面寫;

2.使用<script src="JS的文件位置">

{#1 直接編寫#}
    <script>
        alert(‘hello yuan‘)
    </script>
{#2 導入文件#}
    <script src="hello.js"></script>

JavaScript的規範

JavaScript的規範

1.變量:
    0 變量是弱類型的(很隨便);
    1 聲明變量時不用聲明變量類型. 全都使用var關鍵字;      var a;
   2 一行可以聲明多個變量.並且可以是不同類型.        var name="hello", age=20, job="lecturer";
   3 (了解) 聲明變量時 可以不用var. 如果不用var 那麽它是全局變量.
   4 變量命名,首字符只能是字母,下劃線,$美元符 三選一,且區分大小寫,x與X是兩個變量,不能是關鍵字
   5 一般我們以封號為結束符號,規範寫法必須寫;系統默認是換行符為結束標誌
   6 變量還應遵守以下某條著名的命名規則:
          var s = "helloWorld";    【Camel  標記法: 首字母小寫,其余單詞首字母大寫】
          var s = "HelloWorld";    【Pascal 標記法:首字母大寫,其余單詞首字母大寫】
【推薦】  var s = "sHelloWorld";   【匈牙利類型標記法:用s表示String類型,用i表示int類型,首字母大寫】

註意:不加var的表示的是全局變量 

2.註釋:支持多行註釋和單行註釋.
    單行註釋: //var = "hello";
    多行註釋:
            /*
                var="hello";
                var="world";
            */
3.代碼打印:
      alert(‘hello world‘)
     document.write(‘hello wrold‘)
     consol.log(‘hello world‘)
4.常量和標示符
常量 :直接在程序中出現的數據值
標識符:
    由不以數字開頭的字母、數字、下劃線(_)、美元符號($)組成
    常用於表示函數、變量等的名稱
    JavaScript語言中代表特定含義的詞稱為保留字,不允許程序再定義為標識符

技術分享圖片

數據類型

數據類型:

基本數據類型:Number String Boolean Null[對象] Undefined[系統]

引用數據類型:函數, 數組, 對象等

技術分享圖片

基本數據類型:

數字類型:在JavaScript中10進制的整數由數字的序列組成
    整數
    浮點型
字符串:   是由Unicode字符、數字、標點符號組成的序列
    字符串常量首尾由單引號或雙引號括起
    常用的轉義字符 \n:換行  \‘:單引號   \":雙引號  \\:右劃線
布爾型:
    Boolean類型僅有兩個值:true和false,也代表1和0,實際運算中true=1,false=0
    布爾值也可以看作on/off、yes/no、1/0對應true/false
Undefined:
    Undefined 類型只有一個值,即 undefined。當聲明的變量未初始化時,該變量的默認值是 undefined。
    當函數無明確返回值時,返回的也是值 "undefined";
Null 類型
    它只有一個專用值 null,用來存對象的,默認是Object類型,typeof(null)
註意:
    undefined 是聲明了變量但未對其初始化時賦予該變量的值,系統賦值  var str;
    null 則用於表示尚未存在的對象,開發人員做的

數據類型轉換

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

數字 + 字符串:  數字轉換為字符串
數字 + 布爾值:  true轉換為1,false轉換為0;   alert(1+ture) --> 2  [true=1]
字符串 + 布爾值:布爾值轉換為字符串true或false; alert(‘hello‘+true) --> hellotrue

強制數據類型轉換

函數parseInt:   強制轉換成整數,如果是非數字,則顯示NAN,not a number,跟自己比也報False
  例如 parseInt("6.12")=6  ; parseInt(“12a")=12 ; parseInt(“a12")=NaN  ;parseInt(“1a2")=1
函數parseFloat: 強制轉換成浮點數  parseFloat("6.12")=6.12
函數eval:       將字符串強制轉換為表達式並返回結果 
  例如:eval("1+1")=2 ; eval("1<2")=true

運算符

運算符:

基礎算法
加(+)、 減(-)、 乘(*) 、除(/) 、余數(% )  加、減、乘、除、余數和數學中的運算方法一樣  例如:9/2=4.5,4*5=20,9%2=1
-除了可以表示減號還可以表示負號  例如:x=-y
+除了可以表示加法運算還可以用於字符串的連接  例如:"abc"+"def"="abcdef"

自增/自減
var i=1;
console.log(i++);     // 此時i=2,打印: i=1
console.log(++i);     // 此時i=2, 完成++i後,i=3
console.log(i--);     // 此時i=2,打印i--=3
console.log(--i);     //打印1
console.log(i)        //打印1

一元加法
//var a=3      #此時b=3,   且數值為Number
//var a=3.2    #此時b=3.2, 且數值為Number
//var a=‘3.2‘  #此時b=3.2, 且數值為Number
//var a=‘123a456‘#此時為b=Nan,非數字
  var a=‘hello‘ # 費字符串
var b+=a
alert(typeof(b))
結論:一元加法可以實現字符串的轉換,如果本身是Number,則不變;如果為數字型的字符串型,則改為Number類型;當遇到字符串的時候,轉換失敗,顯示Nan

邏輯運算符
等於 ( == )  、不等於( != ) 、 大於( > ) 、 小於( < ) ?大於等於(>=) 、小於等於(<=)
與 (&&) 、或(||) 、非(!)
--------------------------------------------------------------------------------------------
邏輯 AND 運算的運算數可以是任何類型的,不止是 Boolean 值。
如果某個運算數不是原始的 Boolean 型值,邏輯 AND 運算並不一定返回 Boolean 值:
如果某個運算數是 null,返回 null。 
如果某個運算數是 NaN,返回 NaN。 
如果某個運算數是 undefined,返回undefined。 
1 && 1 = 1  1 || 1 = 1
1 && 0 = 0  1 || 0 = 1
0 && 0 = 0  0 || 0 = 0

技術分享圖片

賦值運算符和全等號
=代表賦值
兩個等號==表示判斷是否相等,如果有字符串和整數的比較,會將整數轉換為字符串進行比較
三個等號===表示全等於,如果有字符串和整數的比較,不會將整數轉換為字符串進行比較
2==‘2‘  -->true
2===‘2‘ -->false

等性運算符
執行類型轉換的規則如下:
    如果一個運算數是 Boolean 值,在檢查相等性之前,把它轉換成數字值。false 轉換成 0,true 為 1。
    如果一個運算數是字符串,另一個是數字,在檢查相等性之前,要嘗試把字符串轉換成數字。
    如果一個運算數是對象,另一個是字符串,在檢查相等性之前,要嘗試把對象轉換成字符串。
    如果一個運算數是對象,另一個是數字,在檢查相等性之前,要嘗試把對象轉換成數字。

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

技術分享圖片

switch為什麽比if-else效率高?

1.switch用來根據一個整型值進行多路分支,並且編譯器可以對多路分支進行優化
2.switch-case只將表達式計算一次,然後將表達式的值與每個case的值比較,進而選擇執行哪一個case的語句塊
3.if..else 的判斷條件範圍較廣,每條語句基本上獨立的,每次判斷時都要條件加載1次。
所以在多路分支時用switch比if..else if .. else結構要效率高。

for循環

//方法一: 類似Python的不規範for循環
var a = [1,2,‘123‘]
for(var i in a){
    alert(i)  // 0 1 2 打印鍵值
    alert(a[i])//打印值,類似數組的操作
}
//方法二: 規範for循環    [推薦格式]
var b= [1,2,‘123‘]
for(var i=0;i<3;i++){
    alert(b[i])
}
// for循環支持:JSON數據的操作
var x={"hello":"world","good":"morning","arr":[1,2,3]}
alert(typeof (x))   // object
alert(x)            // object:Object
for(var i in x){
    alert(x[i])  // world morning 1,2,3
}

while循環: 適合已經知道循環次數的循環

//-------------------while 循環------------------
var i=1;
var ret=0;
while (i<101){
    ret+=i;
    i++;      //控制變量
}
alert(ret)

異常處理

try {
    //這段代碼從上往下運行,其中任何一個語句拋出異常該代碼塊就結束運行
}
catch (e) {
    // 如果try代碼塊中拋出了異常,catch代碼塊中的代碼就會被執行。
    //e是一個局部變量,用來指向Error對象或者其他拋出的對象
}
finally {
     //無論try中代碼是否有異常拋出(甚至是try代碼塊中有return語句),finally代碼塊中始終會被執行。
}
註:主動拋出異常 throw Error(‘xxxx‘) 
try{
    var b=123;
    alert(b);
    throw new Error("hello")
    return 666
}
catch(e){
    alert(e);
}
finally {
    alert("success!")

JavaScript學習---JavaScript基礎知識