JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(1)--------JavaScript基礎(chǔ)

? 時(shí)間過得可真是快啊,總是不經(jīng)意間敲打你一下,讓你知道居然已經(jīng)過了這么久了。現(xiàn)在臨近年末,仔細(xì)一想,居然已經(jīng)大學(xué)畢業(yè)小半年了,更過分的是參加工作居然已經(jīng)一年了??!一想到這一年前半年基本都是在學(xué)校忙著搞畢業(yè)設(shè)計(jì),畢業(yè)后就被派到成都去出差了,忙個(gè)半死。一年下來,除了感覺身體似乎變差,找到一個(gè)女朋友以外,就是驚嘆自己專業(yè)方面居然沒有一點(diǎn)進(jìn)步。于是最近久想繼續(xù)學(xué)習(xí)一下。至于為什么要從算法方面開始,一方面公司里的工作大多數(shù)是和JavaScript打交道,另一個(gè)方面是公司有一套自有框架,再學(xué)新框架暫時(shí)也用不到,還不如精進(jìn)現(xiàn)在已經(jīng)學(xué)到的,使用算法提高自己現(xiàn)在解決問題的效率,所以就準(zhǔn)備從算法入手,從JavaScript基礎(chǔ)開始再學(xué)習(xí)一遍。


  1. JavaScript變量

    ? JavaScript變量類型有數(shù)字字符(串)、布爾值函數(shù)、對象null、undefined、數(shù)組日期正則表達(dá)式。JavaScript類型雖然也很多,但是JavaScript不是一個(gè)強(qiáng)類型的語言,不同于Java、C、C++等使用不同的關(guān)鍵字聲明不同類型的變量,JavaScript只需使用var即可聲明各種類型的變量。一下為聲明各類型變量

    var num = 1;         // 1
    num = 2;             // 2
    var name = `KuiSAhn`;    // 3
    var boo = true;          // 4
    var nullValue = null;    // 5
    var und;             // 6
    

    ? 以上六行聲明依次為數(shù)字,數(shù)字,字符串,布爾,null,undefined。

    變量根據(jù)數(shù)據(jù)類型又可分為兩大類:

    • 原始數(shù)據(jù)類型:null、undefined、數(shù)字、字符串、布爾、Symbol
    • 派生數(shù)據(jù)類型:JavaScript對象----數(shù)組、函數(shù)和正則表達(dá)式2
  2. JavaScript變量作用域

    ? JavaScript變量作用域指得是變量只有再當(dāng)前作用域訪問它 才可以正確的獲得值,跳脫當(dāng)前作用域后再獲取這個(gè)值的話獲取的就不是正確的值了。一下為例子

    var x = "test1";                 // 1
    y = "test2";                     // 2
    
    function local(){
        console.log(x);                  // 3
        console.log(y);                  // 4
        var z = "test3";             // 5
        zz = "test4";                    // 6
    }
    
    function globl(){
        console.log(x);                  // 7
        console.log(zz);             // 8
        console.log(z);                  // 9
    }
    
    local();
    globl();
    

    ? 以上代碼中,x和y是定義再最外邊的,x相當(dāng)于是全局變量,而y由于沒有聲明的關(guān)鍵字,所以它就是全局變量。而z和zz都是定義在函數(shù)local中,而這個(gè)函數(shù)local久相當(dāng)于是一個(gè)作用域,但是zz沒有關(guān)鍵字,所以它就是個(gè)全局變量。

    ? 字后打印出來的就是

    test1

    test2

    test1

    test4

    40 Uncaught ReferenceError: z is not defined

    ? 函數(shù)global中要答應(yīng)的z就會(huì)報(bào)錯(cuò),再此時(shí),z就是一個(gè)未定義的變量。

  3. JavaScript運(yùn)算符

    ? JavaScript中的運(yùn)算符可以分為算數(shù)運(yùn)算符、賦值運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符位運(yùn)算符。

    var num = 0;                         
    num = num + 2;       // 加法
    num = num * 3;       // 乘法
    num = num / 2;       // 除法
    num++;               // 遞增 
    num--;               // 遞減
    

    以上就是算數(shù)運(yùn)算符。

    var num = 0;
    num += 1;                // 加賦值==>num = num + 1
    num -= 1;                // 減賦值==>num = num - 1
    num *= 2;                // 乘賦值==>num = num * 2
    num /= 1;                // 除賦值==>num = num / 2
    num %= 2;                // 取余賦值==>num = num % 2
    

    以上為賦值運(yùn)算符

    var a = 1,b = 2;
    b > a        // 大于
    b < a        // 小于
    b == a       // 等于
    b === a      // 全等
    b <= a       // 小于等于
    b >= a       // 大于等于
    b != a       // 不等于
    

    以上是比較運(yùn)算符

    x == 2 && y == 3         // 與
    x == 5 || y == 6         // 或
    !x                           // 非,x取反
    

    以上是邏輯運(yùn)算符。還有一個(gè)位運(yùn)算符不怎么常用。

  4. JavaScript中的真值和假值

    JavaScript中不光布爾值有真假,其他的一些類型的值也是有值的

    類型 轉(zhuǎn)換成布爾值
    null false
    undefined false
    布爾值 true是true,false是false
    數(shù)字 +0、-0、NaN是false,其他的都是true
    字符串 長度為0時(shí)為false,長度大于1時(shí)為true
    對象 對象都為true

    可用一下代碼檢驗(yàn)

    function testT(value){
        if(value){
            return true;
        }else {
            return false;
        }
    }
    
    console.log(`null為${testT(null)}`);
    console.log(`undefined為${testT(undefined)}`);
    console.log(`-0為${testT(-0)}`);
    console.log(`+0為${testT(+0)}`);
    console.log(`NaN為${testT(NaN)}`);
    console.log(`"test"為${testT("test")}`);
    console.log(`{"test":"test"}為${testT({"test":"test"})}`);
    

    運(yùn)行代碼后為:

    null為false

    undefined為false

    -0為false

    +0為false

    NaN為false

    "test"為true

    {"test":"test"}為true

  5. JavaScript中的==和===

    ? ==和==都是判斷兩邊的值是都相等的運(yùn)算符,使用==時(shí)如果雙方類型不同,但是值相同的話會(huì)返回true,使用===時(shí)只要類型不相同時(shí)就會(huì)返回false。

    console.log(false == 0)          // 1
    console.log(false === 0)     // 2
    

    ? 運(yùn)行代碼后為:

    true

    false

    ? 這是因?yàn)?/ 1在比較前會(huì)將false轉(zhuǎn)換為0,所以在比較時(shí)會(huì)返回true,而// 2會(huì)因?yàn)轭愋筒幌嗤苯臃祷豧alse。事實(shí)上,使用弱等于的話,在判斷前都會(huì)進(jìn)行一次類型轉(zhuǎn)換,一下表格展示不同類型變量在弱等于比較時(shí)進(jìn)行的判斷時(shí)進(jìn)行的類型轉(zhuǎn)換。

    類型 轉(zhuǎn)換用的方法
    字符 toNumber
    布爾 toNumber
    對象 toPrimitive
  6. JavaScript中的條件語句

    ? JavaScript中常用的條件語句為if...else...和switch...case...。

    ? 其中if...else...在使用時(shí)的條件是if中的值當(dāng)且僅當(dāng)為真時(shí)才會(huì)執(zhí)行,當(dāng)if中的值為假時(shí)便會(huì)執(zhí)行else下的代碼。這樣的條件語句也可以用三元運(yùn)算符替換。

    if(x === 0){
        x++;
    }else {
        x--;
    }
    // 等價(jià)于
    (x === 0) ? x++ : x--;
    

    ? 如果有多個(gè)判斷條件,可以使用多個(gè)if...else...。

    ? 最后是switch...case...語句。

    switch(x){
        case 1:
            x += 1;
            break;
        case 2:
            x += 2;
            break;
        case 3:
            x += 3
            break;
    }
    // 等價(jià)于if...else...
    if(x === 1){
        x += 1;
    }else if(x === 2){
        x += 2;
    }else if(x === 3){
        x += 3;
    }
    

    實(shí)際開發(fā)中if...else...比switch...case...用的更多,因?yàn)槿绻壿嫲l(fā)生變化,修改if...else ...比switch...case...方便的多。

  7. JavaScript循環(huán)

    ? JavaScript中的循環(huán)和其他語言的循環(huán)都是一樣的,for循環(huán)、while循環(huán)、do...while循環(huán)。

    ? 其中for循環(huán)是設(shè)定一個(gè)計(jì)數(shù)值,然后再設(shè)置循環(huán)條件,然后改變計(jì)數(shù)值。for(var i = 0; i < 10 ;i++)。

    ? while循環(huán)是如果滿足條件的情況下就會(huì)執(zhí)行代碼,直至不滿足循環(huán)條件。while(i < 10)。

    ? do...while循環(huán)是先執(zhí)行代碼,然后再判斷是否滿足條件,如果滿足條件就執(zhí)行do下邊的代碼,如果不滿足就直接跳過。

  8. JavaScript函數(shù)

    JavaScript函數(shù)在實(shí)際開發(fā)中會(huì)大量應(yīng)用。一下為簡單的使用:

    function fun1(){             // 定義函數(shù)
        console.log("test");
    }
    
    fun1()                           // 調(diào)用函數(shù),終端打印test
    
    function fun2(text){             // 定義帶參數(shù)的函數(shù)
        console.log(text);
    }
    
    fun2("test")                     // 調(diào)用函數(shù)時(shí)傳參數(shù)"test",終端打印test
    
    function fun3(){                 // 定義一個(gè)有返回值得函數(shù)
        return "test";
    }
    
    console.log(fun3())                      // 調(diào)用函數(shù),直接將返回值打印出來
    
  9. JavaScript面向?qū)ο缶幊?/p>

    JavaScript的對象就是就是普通的鍵值對集合,所以聲明JavaScript對象可以用一下集中方法

    var obj = {}、var obj = new Object()

    可以在定義對象時(shí)直接完成這個(gè)對象:

    var obj = {
        "key1" : key1,
        key2   : key2
    }
    

    以上,JavaScript對象中的鍵就是對象的屬性,值就是屬性對應(yīng)的值。

    ? 在面向?qū)ο缶幊讨校瑢ο笫穷惖膶?shí)例,一個(gè)類定義了對象的各種屬性。

    function people(name,sex,height,weight){         // 聲明類
     this.name = name;
     this.sex = sex;
        this.height = height;
        this.weight = weight;
        this.printName = function(){                 // 聲明的屬性可以直接是函數(shù)
            console.log(this.name);
        }
    }
    
    // 用下邊這個(gè)代碼實(shí)例化這個(gè)類,得到一個(gè)對象
    var man = new people("kuisahn","male","180cm","70kg");
    
    // 然后就可以修改這個(gè)對象了
    man.name = "KVCION";
    console.log(man.name);                   // 打印"KVCION"
    
    man.printName();                     // 調(diào)用對象中的函數(shù),打印"KVCION"
    
    // 設(shè)置對象中的函數(shù)也可以這樣做
    people.prototype.printSex = function (){
        console.log(this.sex);
    }
    
    // 然后在實(shí)例中調(diào)用
    man.printSex()                           // 調(diào)用剛剛定義的函數(shù),打印"male"
    

以上。

才疏學(xué)淺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容