Python 调用腾讯云音视频 TRTC

[Mybatis源码篇]四、Configuration类详解

  返回  

ECMAScript-6.0

2021/8/20 11:03:46 浏览:

let和const命令

let 和 const 声明的变量有块级作用域,不能重复声明,没有变量提升,

const 声明一个只读的常量,一旦声明,常量的值就不能改变,const一旦声明必须要赋值,不然就没有意义了,一般用于全局变量,通常变量名全部大写,如果const声明了一个对象,那么不能重复声明赋值对象,可以修改里面的值。

暂时性死区

使用 let/const 声明变量之前,该变量都是不可用的,若非要在声明之前使用变量,就会报错,这称为 “暂时性死区”

解构赋值

解构赋值是对赋值运算符的扩展

针对数组或者对象进行模式匹配,然后对其中的变量进行赋值

代码简洁且易读,语义更加清晰明了,方便了复杂对象中数据字段获取

let [a, b, c] = [1, 2, 3];

a = 1,b = 2,c = 3 相当于重新定义了变量a,b,c,取值也更加方便

, = 占位符

let arr = ["小明", "小花", "小鱼", "小猪"];

let [ , , one] = arr; // 这里会取到小鱼

解构整个数组

let strArr = [...arr];

得到整个数组

console.log(strArr);

let obj = {

className : "卡西诺",

age: 18

}

let {className} = obj; // 得到卡西诺

let {age} = obj; // 得到18

剩余运算符

let {a, b, ...demo} = {a: 1, b: 2, c: 3, d: 4};

a = 1

b = 2

demo = {c: 3, d: 4}

forEach遍历数组

for of 只能遍历数组,不能遍历对象

for in 获取的是索引

for of和 for in 的区别,一个能遍历对象一个不能遍历对象, for of 只能遍历数组,会直接获取数组里面的值

reset运算符   ->会把函数中多余的实参存起来

对象扩展运算符

如果赋值对象时没有...运算符,那么只是映射了一个,一个改变,同时改变。(浅拷贝)

如果有...运算符,那就在内存中重新开辟了一个空间,各改各的(深拷贝)

模板字符串

模板字符串相当于加强版的字符串,用反引号 ` `

除了作为普通字符串,还可以用来定义多行字符串,可以在字符串中加入变量和表达式

let str1 = "穿堂而过的";

let str2 = "风";

// 模板字符串

let newStr = `我是${str1}${str2}`; // 我是穿堂而过的风

// 字符串中调用方法

function fn3(){

return "帅的不行!";

}

let string2= `我真是${fn3 ()}`;

console.log(string2); // 我真是帅的不行!

模板字符串中插入变量${变量名}

模板字符串中插入函数${函数名()}

字符串新特性:

repeat重复一个字符串

字符串补全长度:

padStart() 在字符串前面补充到指定的长度

padEnd() 在字符串后面补充到指定的长度

padStart(10) 一个参数默认补充空格

padStart(10,'*') 在前面填充第二个参数的内容 //*******aaa

includes(); 查找字符串是否包含 "指定的字符":,如果包含返回true,不包含返回false

startsWith() 判断是否是指定字符串开头,如果是的话返回true,false

endsWith() 判断是否指定字符串结尾,如果是的话返回true,false

对象的新特性:

属性名和属性值变量名一致可以简写

let userInfo ={

name, //name:name

age //age:age

}

Object.is(a,b) 判断两个值是否全等,类似于 ===

Object.is()和===的区别:

(-0 === 0) true Object.is(0,-0) false

(NaN === NaN) false Object.is(NAN,NaN) true

Object.assign(a,b) 合并对象,把obj2的属性和方法合并到 obje1里面,如有重复就覆盖

写法二合并新对象 let obj3 = Object.assign({},obj1,obj2)

Object.keys() 返回键值数组

Object.values() 返回属性值数组

Object.entries() 返回数组,该数组存放所有可枚举的键值对,键值对以数组的形式存储。

数组新方法:

forEach() 数组遍历

for of() 也可以遍历数组

for in() 也可以遍历数组

map() 映射,就是把数组每一个值都存到回调函数中,进行操作

filter() 过滤,可以把所有满足条件的值,存放到一个新数组中,并把这个新数组返回出来

some() 查找是否有符合条件的元素, 返回 true 或 false

短路操作,只要找到符合条件的元素,后面的循环就停止

every() 查找每个元素都符合条件,返回 true 或 false

短路操作,找到不符合条件的元素,后面的循环就停止,并返回false,都满足返回true

reduce() 归并

数组新特性:

Array.of() 将一组值作为元素形成数组

Array.from() 将类数组对象或可迭代对象转化为数组

fill() 方法用于将一个固定值替换数组的元素9

// 用参数1替换, 从参数2的位置开始替换,替换到参数3的位置,不包括参数3

如果只有一个参数,会把数组里面的值全部替换成这个参数的内容

如果一个参数没有,那么把数组内容全部替换成undefined

find 返回数组中第一个满足条件的元素

findIndex() 获取数组中满足条件元素的索引

entries() 获取数组的key和value

includes() 表示数组中是否包含某个指定的值 返回boolean

函数新特性:

函数的默认参数: num为默认参数,如果不传,则默认为10

只有在未传递参数,或者参数为 undefined 时,才会使用默认参数,null 值被认为是有效的值传递。

不定参数: 此处的values是不定的,且无论你传多少个 function f(...values){ console.log(values.length); } f(1,2); // 2 f(1,2,3,4); // 4

箭头函数:

箭头函数是一种更加简洁的函数书写方式

箭头函数本身没有作用域(无this)

箭头函数的this指向上一层,上下文决定其this

基本语法:参数 => 函数体

let fn = v => v; //等价于 let fn = function(num){ return num; }

在对象里面创建函数方法的时候,不建议用箭头函数,因为this指向问题

var obj = { //这里面不能用箭头函数

name,

say(){ //函数的简便写法

console.log(111)

}

} 带参数的写法:

let fn2 = (num1,num2) => { let a = num1 + num2; return a; }

如果没有形参,必须保留形参()

一个形参可以不用()两个形参必须要写()

箭头函数this指向问题:

箭头函数本身没有this,箭头this指向根据上下文去找(所在的作用域this指向谁,他里面的this就指向谁)

let Person1 = {

'age': 18,

'sayHello': function () {

setTimeout(()=>{

console.log(this.age);

});

}

};

var age = 20;

Person1.sayHello(); // 18

当箭头函数要返回对象的时候,为了区分于代码块,要用 () 将对象包裹起来

var f = (id,name) => ({id: id, name: name});

reduce:

计算数组里面每个元素相加的和

参数1 回调函数 (a,b) a是数组里面第一个值 b是后面的那些值

参数2 初始值,会把数组里面的和计算完成后在跟我初始值相加

return  参1+参2

set数据类型:

set数据类型本身是一个构造函数,需要new,首字母大写,值都是唯一的会自动去重,键和值相同, 不能使用for in 遍历,值和索引相同

要遍历使用遍历 for  of  或 forEach

for Each 遍历set类型

add() 添加

delete() 想删除的值

clear() 全删

has() 判断是否存在某个值

var b = a.size 获取长度

var b = a.keys() 获取所有的key

var b = a.values() 获取所有的value

var b = a.entries() 同时获取所有的key 和value

var a = new Set()

map数据类型:

map的属性名,可以是对象,数组,初始值

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

注意: 如果你使用数组或者对象当做key的时候,要先把它存放到一个变量中在去往里面存

map方法:

map.set(key,value) 添加

map.get(key) 获取

map.delete(key) 删除某个特定的值

map.clear() 清空

map.has(key) 判断是否存在

map.size() 获取长度

symbol数据类型:

唯一性,不需要加new   一般当做属性名去用 防止属性名相同被覆盖.

不能使用for in,

存的使用 obj[Symbol('xx')]

取值Object.getOwnPropertySymbols(abc) 使用函数去取属性名,不能直接写 Symbol('xx')

他可以获取对象里面的Symbol属性名 返回一个数组

存的时候如果使用变量存放的Symbol数据需要 [变量]来解析

obj[Symbol('haha')] = '哈哈哈'

只获取当前对象里面使用Symbol数据类型存放的属性名,把他们存放到一个数组中,返回出来

var xxoo = Object.getOwnPropertySymbols(obj)

console.log(xxoo)  //数组  

console.log(xxoo[0])   //Symbol(haha)

Proxy:进行预处理

需要new  会返回一个Proxy对象

参1  obj    要被处理的对象

参2  { }对象   这个对象里面有两个自带的方法

get(参1,参2,参3)   

当你获取一个属性的时候,会自动调用此方法

          原对象传入到到参1,把属性名传入到参2,把Proxy对象传入到参3中

set(参1,参2,参3,参4)  set方法可以做过滤

当你设置一个属性的时候,会自动调用此方法

          原对象传入到参1,把属性名传入到参2,把属性值传入到参3中,把Proxy对象传入到参4中

注意在Proxy里面修改原对象,外面的Proxy也会跟着发生变化

promise 对象:

含义:本身不是异步,是封装异步操作的容器,统一异步的标准

特点:对象的状态不受外界影响;一旦状态改变就不会再变,任何时候都可以得到这个结果

主要是解决 ajax回调地狱问题

Promise对象,这个对象里面有then()方法

                then(参1,参2)

                    参1 callback 回调函数,用来处理成功的结果集

                    参2 callback 回调函数,用来处理失败的结果集

class  类:

是js构造函数语法糖,使用class 定义的类 没有变量提升,使用extends 关键字继承

构造方法 constructor(){ this.name = name}

构造方法,外面一实例化我这个类,会自动调用 constructor这个方法

static 定义静态方法 :

静态方法是通过类名去访问,通过这个class实例化出来的对象不能访问静态方法

继承的子类通过使用 类名.方法() 访问父类上的静态方法

使用extends 关键字继承:比如bb想继承aa -> class bb extends aa{ }

注意:要有super(), super和伪装this异曲同工

迭代器Iterator:

Iterator 是 ES6 引入的一种新的遍历机制,迭代器有两个核心概念:

迭代器是一个统一的接口,它的作用是使各种数据结构可被便捷的访问,它是通过一个键为Symbol.iterator 的方法来实现。

迭代器是用于遍历数据结构元素的指针(如数据库中的游标)

通过 Symbol.iterator 创建一个迭代器,指向当前数据结构的起始位置

随后通过 next 方法进行向下迭代指向下一个位置, next 方法会返回当前位置的对象,对象包含了 value 和 done 两个属性, value 是当前属性的值, done 用于判断是否遍历结束, done 为 true 时则遍历结束

Generator 函数:

定义 function* 不需要new 

注意使用的时候,把函数放到变量中,通过这个变量调用next

Generator除了return语句,还可以用yield返回多次

next()方法会执行generator的代码,然后,每次遇到yield a;

就返回一个对象{value: a, done: true/false}, 然后“暂停”。返回的value就是yield的返回值,

当done 为false的时候,证明这个函数还没有运行完毕,只有遇到return的时候 done里面才开始存放true,这才会证明你的函数执行完了,并且会把return的值放到 value里面,遇到yield暂停后,想让他继续执行需要调用next(),如果done为true,则value就是return的返回值。

yield*可以调用另外的generator函数

注意:要用的时候别直接这样拿着用,先把函数放到一个变量中再用

async:

函数前面加上 async, async function aa(){ }

async 是 generator的语法糖 不需要next , await 替代yield

想要获取返回值,需要调用then方法,会把return结果放到then的回调函数中

async返回的是promise对象

canvas:

画布默认宽度是300 高度是150 , 比例是2-1

var box = $('#box')[0]

        box1 =  box.getContext('2d'); //创建一个画布2d对象

        box1.fillstyle = "rgb(255,10,0)" //设置画笔的颜色

        box1.beginPath(0,0) //新建一条路径

        box1.moveTo(x, y) //移动画笔(x, y)

        box1.closePath() //闭合路径

        box1.stroke() //开始画

box1.fill() //填充路径内容

fillStyle = "rgb()";   //填充颜色,默认黑色

circle //画圆

不建议用css修改宽高,因为用css修改的话,放大就会模糊,但是缩小不会,容易用坏了

如果canvas中没有设定宽高,那么浏览器就会取默认值并进行拉伸,会导致在css中定义的宽高并没有生效,出现变形的情况。

ES6 模块化:解决变量污染问题

<script type = 'module'> module别忘了

每个js文件都是一个独立的模块

导入模块成员:import

暴露模块成员:export

在ES6中每一个模块即是一个文件,在文件中定义的变量,函数,对象在外部是无法获取的。如果你希望外部可以读取模块当中的内容,就必须使用 export来对其进行暴露(输出)

as可以更改变量名

        import  {aa as oo }  from "./a.js"

使用者不知道变量名的情况下,可以使用export default进行默认输出

export default 向外暴露的成员,可以使用任意变量名来import

在一个模块中,export default 只允许向外暴露一次。

在一个模块中,可以同时使用export default 和export 向外暴露成员,default暴露后在接收的时候,给default暴露的数据起了个变量名。

export可以向外暴露多个成员,如果不需要某些成员导入,可以在import时不写

使用export导出的成员,必须严格按照导出时候的名称,来使用{ }按需接收

模块化

优点:

每个模块里面的变量和方法如果你不使用export主动暴露,外面是访问不到的,可以解决变量污染问题

如果暴露出去的变量名字和你的冲突了,可以使用as 来起别名

注意: 

引入模块的时候 script里面要设置 type属性的值为 module

不要直接使用file协议,会报错CORS,请使用服务器运行

如不是 default暴露的,请使用{}结构赋值的语法去接收

weakSet:

属性值是唯一的,只能是对象,不能遍历

WeakSet结构有三个方法:

add(value): 向WeakSet实例添加一个新成员

delete(value): 清除WeakSet实例的指定成员

has(value): 返回一个布尔值,表示某个值是否在WeakSet实例中

WeakSet不能遍历,因为成员都是弱引用,随时可以能消失,遍历机制无法保证成员存在。

WeakSet的用处是储存DOM节点,而不担心这些节点从文档移除时会引发内存泄露

WeakSet是一个构造函数,可以使用new命令创建WeakSet数据结构。

作为构造函数,WeakSet可以接受一个数组或类似数组的对象作为参数。

weakMap:

和mapqubie

键必须是对象

键所执行的对象是弱引用

不可以遍历没有实现 interator接口

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号