从C#到TypeScript - 变量
总目录
从C#到TypeScript - 变量
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本身并没有在上面多做什么。
从C#到TypeScript - 变量的更多相关文章
- Typescript - 变量类型
原文:TypeScript基本知识点整理 一.number let num1 : number = 20; let num2 : number = 175.5; let a1 : number = I ...
- Typescript变量声明
let 和 const 是 javascript 里面最新的变量声明方式,let 与 var 很相似,而 const 是 let 的增强,能阻止对一个变量的再次赋值. var 声明 弱类型:var 声 ...
- typescript变量声明(学习笔记非干货)
var a=10; function f(){ var message="hello,world"; return message; } function f(){ a=10; r ...
- TypeScript 变量声明(二)
ES6 中,变量声明一共有6种,分别是var.function .let.const.class和import. let 基本语法:let 变量名 :类型.其中类型不是必须的. 1.用于声明变量,其用 ...
- C# vs TypeScript - 高级类型
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...
- 从C#到TypeScript - 接口
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...
- 从C#到TypeScript - 类
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...
- 从C#到TypeScript - function
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...
- 从C#到TypeScript - 装饰器
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...
随机推荐
- Linux建立信任主机
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.先在本机上面装一个sshpass 的安装包 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2.ssh-ke ...
- (中等) POJ 1703 Find them, Catch them,带权并查集。
Description The police office in Tadu City decides to say ends to the chaos, as launch actions to ro ...
- CodeForces 652D Nested Segments
离散化+树状数组 先对坐标离散化,把每条线段结尾所在点标1, 询问某条线段内有几条线段的时候,只需询问这段区间的和是多少,询问结束之后再把这条线段尾部所在点标为0 #include<cstdio ...
- STM32 USB 问题汇总(转)
源:STM32 USB 问题汇总 汇总1:STM32的USB例程修改步骤,来自http://blog.csdn.net/cy757/archive/2010/01/01/5117610.aspx 以下 ...
- UWP_小说在线阅读器:功能要求与技术要求
学了WP开发也有一年了,也没做过什么软件的.17年进发UWP,锻炼自己一下.做一个开源的小说阅读器吧. 既然开发一个软件.所以要设计一下吧. 功能要求: 可能要用到的技术,这个吗,这就是遇到问题在解决 ...
- SQL Server数据库备份方法
数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段.一个合理的数据库备份方案,应该能够在数据丢失时,有效地恢复重要数据,同时需要考虑技术实现难度和有效地利用资源. 数据库 ...
- java web面试
1. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理. 原博http://blog.csdn.net/shuaishenkkk/article/d ...
- scala系列--基础语法
Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义. 类 ...
- 【USB-HID在STM32上的实现】-00-开始
前一段时间参照网上的例程搞了一阵STM32F103的HID程序,改了改例子实现了一个摇杆的外设控制功能.1通道开关量输入,2通道模拟量输入. 之后有空了总结一下,防止忘记.
- 1.TCP/IP基本概念
为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...