广西十一选五玩法|广西十一选五开奖查询
  • 從C#到TypeScript - 變量

    發布:51Code 時間: 2018-06-01 10:10

  • 很多前端工程師會把自己比作魔法師,而對于JavaScript這門語言,我也想把它喚作一門有魔力的語言。因為這群有無限想法的人,真的在用它創造各種讓你驚嘆的事物。 一、前言 幾年前...

  • TypeScript的變量聲明和ES6差不多,相比之前主要是多了let和const。

    為什么不用var?

    不管是TypeScript還是ES6都會兼容以前的javascript,所以在TypeScript里var也還是保留了。

    雖然C#里也有var,但和JavaScript的可不一樣,var在javascript里會有一些奇怪的表現。

    比如會置前,而且作用域是整個函數,可以不寫var來聲明變量,然后變量變成全局。

    這些都可能會帶了一些不容易注意到的問題。

    比如經典的:

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

        setTimeout(function() { console.info(i); }, 100);

    }

    結果并不是期望的0, 1, 2, 3...,跑出來的結果全是10,這是因為var出來的i的作用域是整個函數。

    這就導致循環完成后i變成10,setTimeout內的函數才被執行,所以結果都是10了。

    雖然可以用立即完成函數把重新構建一個作用域,但畢竟用起來麻煩,而且不符合人的思維,所以就有了let。

    使用let聲明變量

    let主要是對var的一個代替,用let更符合人思考的過程,這才和C#var的功能是差不多。

    let的用法和var是一樣的:

    let str = 'string';

    let的作用域是塊級作用域,比如上面的循環,用let聲明i的話就可心得到期望的值。

    for (let i = 0; i < 10; i++) {

        setTimeout(function() { console.info(i); }, 100);

    }

    這里得到的結果就是0, 1, 2....9。

    所以建議還是拋棄var,選擇let。

    const

    C#也有const,意義上差不多,都是常量,不想變量被改變。

    const str = 'string';

    str = 'new string'; // 編譯不了

    一般情況下,主張確定不變的變量用const聲明來增加代碼健壯性和可讀性。

    解構

    所謂解構,就是把對象或數組里的成員分解出來。

    比如數組:

    let [first, second] = [1, '2', false];

    console.info(`first: ${first}`);

    這里就把數組的第一個成員和第二個成員分別用first和second解構出來,就省去了分別聲明兩個變量,并用下標取數組里的值來賦值了。

    這也可以方便的提供一些功能,比如交換數組里的兩個值,按以前的做法需要借助下中間變量,現在就不需要了:

    let [first, second] = [second, first];

    可以利用...擴展符號來解開數組,再并入其他數組。

    let arr = [1, 2, 3];

    let newArr = [...arr, 4, 5];

    console.info(newArr); // 1, 2, 3, 4, 5

    對象同樣可以被解構:

    class Test{

        str = "string";

       int = 1;

       bool = false;

       func(){        

            console.info('func');

        }

    }

    let {str, bool, func} = new Test(); //名字必須和類里的保持一致

    let {str: newStr} = new Test(); //通過這種方式可以把str改為newStr

    console.info(`${str}, ${bool}`);

    func();

    ...符號同樣可以用于對象,不過只能解開可枚舉的變量,所以函數不會解出來。

    延用上面的class:

    let {str, ...other} = new Test();

    console.info(other.int); // 輸出1

    console.info(other.func()); // 編譯錯誤,...符號不能解出函數

    還可以加上默認值,當解出來的值是undefined時會用上默認值。

    class Test{

        empty;

        str = '';

    }

    let {empty='empty', str='str'} = new Test();

    console.info(`${empty}, ${str}`); // 輸出 empty, ,因為str有值,所以用原始的''

    以上就是常用的變量聲明及賦值的使用方法,不過基本都是ES6的標準語法,TypeScript本身并沒有在上面多做什么。

    文章來源:網絡
    上文內容不用于商業目的,如涉及知識產權問題,請權利人聯系博為峰小編(021-64471599-8103),我們將立即處理。
  • 上一篇:JavaWeb與Asp.net工作原理比較分析

    下一篇:干貨:一文看懂.NET的各種變體

網站導航
Copyright(C)51Code軟件開發網 2003-2020 , 滬ICP備05003035號-6
广西十一选五玩法 365彩票软件app下载 体育比分网站源码 喜乐彩 足球即时指数即时赔率 上海快3 雷速体育分析师 湖北十一选五 nba球探网 江苏十一选五 内蒙十一选五开奘结果