ES6基本语法1

Unicode编码可以以变量形式存在
f\u006f = 'abc'
console.log(foo) //abc
Base64转码:不适合非ASCII码的字符
应用场景:0-31的ascii无法打印出来,可以用Base64转码;以文本格式传输二进制数据
btoa(string) 任意值转换为Base64编码
atob() base64编码转回原来的值

String.fromCodePoint():用于从Unicode码点返回对应字符,可以识别0xFFFF的字符
str = "hello"
str.length
str.charAt(0) //返回对应索引位置上的字符
str.charCodeAt(0) //返回对应索引位置上字符的码点
str.repeat(n) //将原字符串重复n次,重复0次为空字符串

str.padStart(补全后的字符串长度, 用于补全的字符串); //头部补全
str.padEnd(); //尾部补全
e.g 'x'.padStart(3,'ab') //abx
原字符串长度大于或等于补全后长度,则补全不生效,返回原字符串

s = ' abc '
s.trim() //消除空格
s.trimStart() //消除头部空格
s.trimEnd() //消除尾部空格

正则表达式:
[1]{3,6}$
1、^为匹配输入字符串的开始位置
2、[0-9a-zA-Z]表示匹配所有数字,小写字母,大写字母
3、{3,6}表示3到6的字符长度
4、¥表示结束符
var pattern = new Regexp("x") //创建对象
test() //检索字符串中的指定值,返回true/false
pattern.test("wdx") //true
exec() //检索字符串中的指定值,返回该元素,如果没有发现匹配,则返回null
compile() //修改检索值

let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问。
在相同的作用域或块级作用域中,不能使用 let 关键字来重置 let 关键字声明的变量

const 声明一个只读的常量,一旦声明,常量的值就不能改变。
const本质:const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值,只是不可以对它进行重新赋值。
在相同的作用域或块级作用域中,不能使用 const 关键字来重置 const 关键字声明的变量

var 关键字定义的变量可以在使用后声明,也就是变量可以先使用再声明
const 、let关键字定义的变量则不可以在使用后声明,也就是变量需要先声明再使用。
const、let都具备块级作用域的特性
unshift()方法,在数组头部添加一个或多个元素,返回新数组长度
push()方法,在数组尾部添加一个或多个元素,返回新数组长度

Set
var a = new Set([1,2,3])
Array.from(a) 可以将Set a 转换为数组
[...a] 就是将 set 转换成 array
Set.has(x) 是 set 中的一个方法。即判断当前 set 中是否含有 x,如果有返回 true,没有返回 false。
a.size //返回Set的长度 3
Set.add(x)添加某个值,返回Set本身
Set.delete(x)删除某个值,返回true/false
Set.clear()清除所有成员,无返回值
Set的四个遍历方法:
Set.keys() //返回键名
Set.values() //返回键值
Set.entries() //返回键值对
Set.forEach() //使用回调函数遍历每个成员

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

WeakSet

其成员只能是对象;垃圾回收机制不考虑其对该对象的引用,可以接收数组对象 如: var ws = new WeakSet([[1,2],[4,5]])
有三个方法:add();delete();has()

Map
Map 和 Object的区别
一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值
Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算

key = {}
key ! = = {}

key = function(){}
key !== function(){}

key = ['a']
key !== ['a']

var map = new Map()
map.set(键名,键值) //设置键值对
map.set("foo","123")
map.set("foo",null) //使用map需手动清除,否则内存会堆积,使用循环时内存容易崩溃
map.get(键名) //获取对应的键值
map.has(键名) //判断Map中是否有键名对应的值,返回true/false

WeakMap
只接受对象(null除外)作为键名
WeakMap键名指向的对象,不计入垃圾回收机制
WeakMap和Map的区别:没有遍历操作,没有size属性,无法clear,只可用,set,get,has,delete

函数
函数名是一个指针
arguments:函数的隐式参数,是一个类数组对象,包含传入参数中的所有参数,该对象还拥有一个指针callee,指向拥有该参数对象的函数
e.g 求和函数sum()相当于arguments.cllee()
函数的属性和方法:length //函数希望接收的参数个数 prototype //函数的原型链

this:函数调用方法不同,this会指向不同的对象
1、以函数的形式调用,this永远是window
2、以方法的形式调用,this就是调用方法的那个对象

apply(this,参数数组/arguments)函数接收两个参数,一个是在其中运行函数的作用域(this),另一个是参数数组/隐式参数arguments
call(this,参数1,参数2,...)函数和apply()都是用于设置函数体内this对象的值,call和apply的不同之处在于其参数要逐个列举出来
注意: => 箭头函数没有自己的this,永远指向函数体内,使用时外的外部对象

Symbol
用于设置对象的属性名
let sym = new Symbol();
可用的两种写法:
1、let obj = {}
obj[sym] = "name"
2、obj = {[sym]:"name"}
可以通过Object.getOwnPropertySymbols()方法返回指定对象的所有使用Symbol的属性名,返回值为一个数组,值为所有用作属性名的Symbol值
Symbol设置的值时全局唯一的,如果希望使用同一个Symbol值,可以使用Symbol.for()方法

迭代器
for in 循环只能获得对象的键名,for of循环允许获得对象的键值
具备iteration接口的数据结构如下:
Array、Map、Set、String、typedArray、函数的arguments对象、NodeList对象
e.g 数组迭代:
let arr = [1, 2, 3]
let iter = arrSymbol.iterator
iter.next()


  1. 0-9a-zA-Z ↩︎

posted @ 2021-03-09 20:21  MasterBeyond  阅读(87)  评论(0编辑  收藏  举报