1. 程式人生 > 實用技巧 >JavaScript入門-學習筆記(二)

JavaScript入門-學習筆記(二)

關於js變數

  • 變數,就是一個用來儲存資料的容器
  • 一般來說,我們的變數都是可以得先宣告,再使用,就像是一個東西先必須存在,才能看得見摸得著。然而在js裡(es5),可以先使用,後宣告。
    a = 100;
    var b =200;
    console.log(a,b)
    var a;
    輸出結果為:100,200
ps:這樣的語法在es5裡是能夠執行的,雖然它不符合我們的邏輯思維。在js裡叫做,變數提升。
  • 如果在宣告變數時,沒有賦值,直接列印不會報錯,因為它有一個預設的值,undefined,表示未定義的值。
  • 變數的型別:js是一種弱語言,變數宣告時,它的資料型別不明確,只有在賦值的那一刻,變數的資料型別才確定。
  • 變數的重複定義:
        var a = 3
        var a = a-1;
        console.log(a)
        //輸出結果為2
像這樣的語法在Java,c等中,絕對報錯,但是在es5中,叫做重複定義。這個邏輯也不符合正常,就好比出生,都是出生一次,沒有說有出生兩次三次的說法,因此這上面的幾個不太符合邏輯的特點,我們知道就行,儘量避開就行。

JavaScript中的7種資料型別

口訣: 3 2 2

三種基本資料型別

  • number 數字型別。不區分小數,整數,浮點數,只要是個數,都歸類為number型別。
    (ps:NaN表示非數字型別,就是除了數字意外的,叫做非數字,他是number的一個屬性)
  • string 字元型別。這個不用多解釋,var str = '';'和"都可以
    ps:建議不要使用new String('xxxx'),因為這個影響執行速度
  • Boolean 布林型別 。 只有兩個值,true/false,非真即假

兩個引用資料型別

  • Object 物件型別。
    //1.    直接用{}建立物件
    var obj = {name:'rainbow',age=20,run : function(){
        console.log('i love runnning');
    }};
    //2.    用new關鍵字例項化一個物件
    var obj2 =  new Object();
    obj2.name = 'rainbow';
    obj2.age = 20;
    obj.say = function(){
        console.log('hello world')
    }
  • Array 陣列型別
        //1.    直接用[]建立
        var arr = [];//空陣列
        //2.    new 
        var arr2= new Array();

ps:注意的是,js可以不用給陣列一個初始長度,並且這個長度可讀可寫,但是不建議寫,因為可能導致資料丟失

兩種特殊資料型別

  • undefined
    未定義的資料型別
  • null
    值為null

typeof關鍵字

typeof就是用來檢測一個變數的資料型別
使用方法:typeof 變數名(或者常量名)

賦值運算子

自增自減:a++,++a,a--,--a;
ps:++a 和 a++的區別:
如果單單是一條語句而言,兩者並沒有什麼區別,就僅僅是一條語句而已,執行後,自己都加了1,但是在有賦值和其他複雜的運算時,就有區別了;

    e.g.
        var a = 8;
        ++a;
        var b = a++;
        var c = --b;
        console.log(a,b,c);
        //輸出結果為a,b,c為10,8,8
b = ++a; 先自增,後賦值
b = a++; 先賦值,後自增

比較運算子

  1. ASCII的比較
    d > f false
    a > 2 false
    查閱ASCII表,記住幾個常用的ASCII碼值就行了。
  2. == !=
    比較的兩邊的值是否相等或者不相等,不同的資料型別也可以比較
  3. === !==
    === 首先比較兩邊的資料型別是否相等,不相等後面就不再比較了。如果同類型,那麼就比較值是否相等。(推薦使用)
    !== 就是不全等,===的取反

邏輯運算子

與或非

            or      and     not
    邏輯運算 ||      &&       !         
    位運算   |       &
    三目運算子  A<B?表示式1:表示式2; //true放回表示式1,否則為表示式2
    //表示真假的運算
                真      假
    布林值      true    false
    數字        非0      0
    字串      非空    null

短路與和短路或

口訣:
短路與 有0出0,全1為1
短路或 有1出1,全0為0
ps:注意,短路與和短路或在運算時,結果並不是返回true或者false布林值,而是返回左邊或右邊具體的值。比如

        //短路與
        console.log(1 && 1);//1
        console.log(19 && 20);//20
        console.log(0 && 20);//0

        //短路或
        console.log( true || 1)//true
        console.log( '' || 1 )//1 
        console.log( ' ' || 1 )//' '    空格不是空

字串拼接

自動轉換

    1.  number -> string 
        console.log(1+2+'3')//輸出:33 字串型別
        
        console.log('1'+4+6+9) //1469
        
        console.log(10+8+'1'+4+6) //18146

    2.  string -> number
        console.log(1+2+'3'-4);//輸出29,number型別

        console.log(true + 1);//3 number

        console.log(true - 1);//0 number

ps:如果字串出現在最左邊,那麼後面的數字都會拼接。
   如果字串出現在最右邊,那麼前面的數字都會相加,再拼接。

強制轉換

首先我們需要理解一個知識,什麼是包裝類?
它其實就是把幾種基本的資料型別(除了undefined和null),封裝成一個類,並給這個類新增屬性和方法。

例項化
    我們列印一下這個未例項化的Number,輸出的是?
    console.log(Number);
    //結果:ƒ Number() { [native code] },是一個function

    //例項化後
    console.log(new Number(2));
    //結果:Number{2}
            __proto__: Number[[PrimitiveValue]]: 2

字串轉數字
    var a = 1;
    var b = '2';
    轉換:
    b = Number(b);//這個時候就相當於呼叫了Number方法,返回一個number型別資料
    //a + b 等於 3,number型別

ps:如果b是含有數字之外的字元,那麼無法正常轉換,結果為NaN。

parseInt()
去掉小數點後面的數,轉為整數。
如果是字串,也可以轉,但是得看情況:
    1.parseInt('12px'); // 結果為12
    2.parseInt('px12'); // 結果為NaN
parseFloat()
沒啥用,和parseInt區別不大。雖然方法名以為是轉為浮點數,但是實際效果不會帶有小數點。
toString()
一般用於字串的拼接,obj.toString(1+2+'3d')//33d