ES 与 TS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES 与 TS相关的知识,希望对你有一定的参考价值。

参考技术A ES6 是一种 JS 的规范化, JS 是 ES 的拓展。

TS 是一种 JS 的类型补充。

Web 中的 JS = ES + Web API ( DOM + BOM )

Node 中的 JS = ES + Node API ( fs + Net + etc )

TS = JS + 类型系统

如下图 3.1

ES6 中推出了两个新的关键字 let 、const 。

因为 var 存在变量提升,所以在定义之前调用变量不会报错,而是会得到一个 undefined 。这在很多编码过程中看来,是不合理的,因为变量先定义后使用,才是符合正常的思维逻辑的。故而推出了两个关键字 let 、const 。

两者都没有变量提升,因为闭包机制, 所以只在声明位置所属的块作用域内生效。

Proxy  可以理解为监听器 , 拦截器, 可以修改对象原本的方法。可以通过构造函数的方法使用,也可以在对象内部定义为  Proxy  属性的方式来调用。

Proxy 两种使用方法

Proxy  传入两个参数,都是对象格式。  target  是被拦截的对象, handler  中盛放了拦截 target  的方法。如果被拦截的对象是一个空对象,那么在使用构造函数调用时候,可以用构造对象调用拦截方法会产生相同效果。

target为空对象情况

Reflect

Reflect  是一种新的  API  ,将Object对象的属于语言内部的方法放到 Reflect  对象上,即从  Reflect  对象上拿  Object  对象内部方法。

将用老  Object  方法报错的情况,改为返回  false 。

让 Object  操作变成函数行为。

Reflect  和  Proxy  有着一样的方法,两者可以相辅相成 。

图片引自阮一峰 ES6

这样的操作使得拦截操作更为合理,把拦截的操作交给  Reflect  ,而  Proxy  的功能主要为输出日志。

Set   不重复集合。

Symbol 具有唯一性,可以作为对象的 key ,避免重复。

生成器 Generator : 内部可以通过 yeld 来分步执行。返回一个对象 value, done。

ts与es6学习记录

ts遵循es6语法,也是js以后发展的方向,学好ts对于以后都有帮助。

1.字符模板

以前对这个方法认知的还是太少了,直接上代码吧。

var n1 = ‘1‘;
var n2 = ‘2‘;
var n3 = ‘3‘;
var fn = function(){
    return 4
}

//这个时候函数也是可以返回的

console.log(`返回${n1},${n2},${n3},和函数${fn()}`)
返回:返回1,2,3,和函数4

 

函数中使用

 

function demo(str,str2,str3){
    console.log(str)
    console.log(str2)
    console.log(str3)
}
var str = 1;
var str2 = 2;
var str3 = 3;
//调用
demo`测试${str}${str2}${str3}`;

//第一个参数就是传入的字符串,然后按照顺序打印,str3这个时候就没有了

 

技术分享图片

 

 

数组和对象在字符模板的中使用方法

var obj = {
  name:"lojze",
  age:"18"    
}

console.log(`打印一个对象${obj}`);

//返回  打印一个对象[object Object]

正确的使用方式

console.log(`${JSON.stringify(obj)}`)

//返回

{"name":"lojze","age":"18"}

数组!

var arr= [1,2,3,4];

console.log(`${arr}`)

 

2. * yield 

该方法作用就是控制程序的开始停止,使用`netx()`控制,一帧一阵的运行下去。

这样说,可能对一些人来说不知道他到底能干啥?

假设这个时候有个场景,吃饭之前都要抢个红包,对吧,只有固定点击的人才可以抢到红包,这个时候,我们就可以使用yield。

//第5个人才能抢到
var active = 5;

//已经当前有10个人在抢这个红包
var max = 10;
var maths = start(max);

//创建一个随机人数方法
function* start(max) {
//假设有 1 -10 个人在抢这个红包
    while (true) {
//同一时间不知道有多人点击,设置一个随机数
    yield max = max - parseInt(Math.random() * 10);
    }
}

while (max > active) {
    max = maths.next().value;
    //为了方便看到有多人点击
    console.count(max)
}
if (max == 5) {
    console.log(`这个时候可以抢拉${max}`)
} else {
    console.log(`红包已经被抢完了,你是第${10 -max}个点击的`)
}

技术分享图片

技术分享图片

这个列子可以帮助我们理解 * yield 方法,炒股啊,运用的场景还是挺多的。

 


以上是关于ES 与 TS的主要内容,如果未能解决你的问题,请参考以下文章

重读《学习JavaScript数据结构与算法-第三版》-第2章 ES和TS

尝试通过 --experimental-loader 选项使用 mocha、ES6 模块和 ts-node

无法再获取节点或 ts-node/register 以使用 es2020(flatMap 不是函数)

在混合 ES/TS 项目中使用 Vue 组件

ts ES5/ES3 中的异步函数或方法需要 'Promise' 构造函数

lib.es2015.promise.d.ts(33, 34):未提供“价值”的参数