总目录

从C#到TypeScript - 变量

TypeScript的变量声明和ES6差不多,相比之前主要是多了letconst

为什么不用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}`);

这里就把数组的第一个成员和第二个成员分别用firstsecond解构出来,就省去了分别声明两个变量,并用下标取数组里的值来赋值了。

这也可以方便的提供一些功能,比如交换数组里的两个值,按以前的做法需要借助下中间变量,现在就不需要了:

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本身并没有在上面多做什么。

从C#到TypeScript - 变量的更多相关文章

  1. Typescript - 变量类型

    原文:TypeScript基本知识点整理 一.number let num1 : number = 20; let num2 : number = 175.5; let a1 : number = I ...

  2. Typescript变量声明

    let 和 const 是 javascript 里面最新的变量声明方式,let 与 var 很相似,而 const 是 let 的增强,能阻止对一个变量的再次赋值. var 声明 弱类型:var 声 ...

  3. typescript变量声明(学习笔记非干货)

    var a=10; function f(){ var message="hello,world"; return message; } function f(){ a=10; r ...

  4. TypeScript 变量声明(二)

    ES6 中,变量声明一共有6种,分别是var.function .let.const.class和import. let 基本语法:let 变量名 :类型.其中类型不是必须的. 1.用于声明变量,其用 ...

  5. C# vs TypeScript - 高级类型

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

  6. 从C#到TypeScript - 接口

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

  7. 从C#到TypeScript - 类

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

  8. 从C#到TypeScript - function

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

  9. 从C#到TypeScript - 装饰器

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

随机推荐

  1. Analyzing the Meaning of Sentences

    1. How can we represent natural language meaning so that a computer can process these representation ...

  2. GCJ 2008 APAC local onsites C Millionaire

    时间复杂度很大.dp[i][j]表示第i轮 j这种状态的概率. #include<cstdio> #include<cstring> #include<cmath> ...

  3. iOS 之UICollectionView 之原理介绍

    0. 简介 参考:支持重排的iOS9 UICollectionView 参考:http://www.cnblogs.com/langtianya/p/3902801.html 参考:http://ww ...

  4. cf Round 594

    A.Warrior and Archer(思维) 战士一定会ban掉当前边缘的位置.而战士和射手就会选择剩下的最远的两点.我们让剩下的最远的两点最近就达到了均衡.于是我们枚举战士ban掉的边缘,ban ...

  5. myeclipse的常用快捷键

    创建一个类 Alt+Shift+N,C,输入Demo,回车 创建类属性 按3次下方向键,回车,输入String name;,回车 创建构造器 Alt+Shift+S,O,回车 创建getter/set ...

  6. java实现——003二维数组中的查找

    import java.util.Scanner; public class T003 { public static void main(String[] args) { Scanner in = ...

  7. UVa 11790 - Murcia's Skyline

    题目大意:给一个建筑的序列,建筑用高度和宽度描述,找出按高度的LIS和LDS,最长XX子序列的长度按照序列中建筑的宽度和进行计算. 其实就是带权的最长XX子序列问题,原来是按个数计算,每个数权都是1, ...

  8. RAMOS系统 WIN7+VHD+GURB map

    转载(并未验证) 前段时间加了一个内存条,将笔记本内存升级到了6G,由于之前用的是32位的win7不可以直接使用6G内存,便装了64位的系统.网上找资源的时候发现,大内存可以使用RamOS,从内存中虚 ...

  9. 使用nodejs爬取和讯网高管增减持数据

    为了抓取和讯网高管增减持的数据,首先得分析一下数据的来源: 网址: http://stockdata.stock.hexun.com/ggzjc/history.shtml 使用chrome开发者工具 ...

  10. C++中vector 容器的基本操作

    vector是一种简单高效的容器,具有自动内存管理功能.对于大小为n的vector容器,它的元素下标是0~n-1. vector有二个重要方法:     begin(): 返回首元素位置的迭代器.   ...