定义类

class Person{
	constructor(name, age){
		this.name = name;
		this.age = age;
	}
	
	getName(){
		console.log(this.name);
	}
	
	setName(){
		this.name = name;
	}
}

var p = new Person('zbx', '18');
p.getName();

继承

class Person{
	constructor(name, age){
		this.name = name;
		this.age = age;
	}
	getInfo(){
		console.log(this.name + ":" + this.age);
	}
}

class Man extends Person{
	constructor(name, age, sex){
		super(name, age);
		this.sex = sex;
	}
	getSex(){
		console.log(this.sex);
	}
}

var man = new Man("zbx", "18", '男');
man.getSex();

//获取异步参数 1.回调

let getName = (callback)=>{
	setTimeout(() =>{
		let name = 'www';
		callback(name);
	}, 1000)
}

getName((name) => {
	console.log(name);
})

2.promise

let getName = new Promise( (resolve, reject) => {
	setTimeout(() => {
		let name = "com";
		resolve(name);
	}, 1000)
})

getName.then((data) => {
	console.log(data);
})

//使方法变成异步 async

async function getData (){
	return "异步方法";
}

console.log(getData());

//使用await 阻塞 将异步改成同步 获取async 内容

async function getName (){
	return 'zbx';
}

async function getAsyncName ()
{
	return await getName();
}
console.log(getAsyncName());
function getName(){
	return new Promise((resolve, reject) => {
		setTimeout(() => {
			let username = "zbx";
			resolve(username);
		}, 1000)
	})
}

async function getAsyncName(){
	console.log(await getName());
}

getAsyncName();

export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。

如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名

let

1.暂时性死区: 在作用域内,let之上未声明变量就使用 报错。
2.不允许重复声明:在相同作用域内,不允许重复声明同一个变量。
3.块级作用域:let 的使用相当于JavaScript新增了块级作用域,外层作用域无法读取内部作用域变量。
4.使用函数表达式:在块级作用域内声明函数,尽量使用函数表达式。

const

1.能用const不用let:为了后期维护方便,和规范。
2.值不可改变:const声明的是一个只读常量,一旦声明不可改变。
3.只在块级作用域内有效:只在声明所在的块级作用域内有效。
4.内存:复合类型的数据(对象数组),变量指向的是一个固定的内存地址,数据内容是可以改变的。简单类型的数据(数值,字符串,布尔值),值是不可改变的。
5.冻结对象:Object.freeze({}); constantize();

解构

1.默认值:解构赋值允许使用默认值。
2.对象解构:对象的取值是根据对象的名字对应。
3.数组解构:数组的取值是根据数组位置。
4.字符串解构:字符串会被转换成类似于一个数组的对象。有一个length属性。
5.数值和布尔值解构:会将数值和布尔值转成对象。
6.函数参数的解构:
解构失败:变量的值等于undefined,如果是嵌套解构失败,将会报错。
undefined和null无法转成对象,如果对其解构会报错。
错误: let x; {x} = {x: 1};
正确: let x; ({x} = {x: 1});

字符串

String.fromCodePoint(0x20BB7);
normalize()//字符串实例
includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
repeat方法返回一个新字符串,表示将原字符串重复n次。
1.字符串遍历:for of 循环遍历, 可以识别大于0xFFFF的码点
2.字符串补全长度:padStart()用于头部补全,padEnd()用于尾部补全。
3.模板字符串(`):
	可以用来定义多行字符串,可以相互嵌套
	可嵌入变量使用${},也可以调用函数${fn()}
	模板字符串空格换行都会被保存,可以使用trim方法消除。

数值

1.Number.isFinite()检测一个值是否有限的,参数不是数值一律返回false。
2.Number.isNaN()检测值是否为NaN,
3.Number.parseInt()
4.Number.parseFloat()
5.Number.isInteger()判断一个数值是否为整数, 在3.0000000000000002 和 5E-325 会返回 true 。
6.Number.EPSILON()表示1与大于1的最小浮点数之间的差。
7.js能够准确的表示的整数范围-2^53 到 2^53之间,超过这个范围将无法准确表示这个值。使用Number.MIN_SAFE_INTEGER 和 Number.MAX_SAFE_INTEGER这两个常量表示。
8.Number.isSafeInteger() 用来判断一个整数是否在Number.MIN_SAFE_INTEGER 和 Number.MAX_SAFE_INTEGER 这两个范围内。
9.Math:
	Math.trunc();方法用于去除一个数的小数部分,返回整数部分。
	Math.sign();方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
	Math.cbrt();方法用于计算一个数的立方根。
	Math.clz32();方法返回一个数的 32 位无符号整数形式有多少个前导 0。
	Math.imul();方法返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。
	Math.fround();方法返回一个数的32位单精度浮点数形式。
	Math.hypot();方法返回所有参数的平方和的平方根。

函数

1.函数参数可以设置默认值
2.设置了默认值,不传参数可传递undefined.
3.length:返回函数没有默认值的参数个数,不包含res参数
4.作用域:
5.res参数:使用...变量名,用于获取多余的参数。res参数是一个数组,将多余的参数放入数组中。
6.name属性:返回函数名字。
7.箭头函数:
    不需要参数或者多个参数,使用一个圆括号代表参数部分
    代码块多于一条语句,使用大括号括起来
    由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在外面加上圆括号,否则报错
    函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
    不适用箭头函数:调用已经包含this的函数,this被指向全局,需要动态 this的地方.
	
	x => x+1;
	等于
	function(x){return x+1;}
	如果是多个参数
	(a, b) => a+b;
	(a, b) => {return a+b;}

数组

1.扩展运算符 ...: 可将字符串转成数组
2.Array.from(): 将两类对象转为真正的数组。类似数组的对象,和可遍历的对象。
3.Array.of(); 将一组值转成数组
4.copyWithin();在当前数组内部,将指定位置的成员复制到其他位置,会覆盖原有成员。
5.find(),用于找出第一个符合条件的数组成员返回该成员,第一个参数是回调函数,第二个参数用来绑定this,回调函数有三个参数,分别是当前的值,当前的位置,和原数组。
6.findIndex(),和find 类似返回的是符合条件的数组成员的位置。
7.fill(填充值,开始的位置,结束的位置)给定值,填充一个数组。
8.keys()对键进行遍历 values()对值进行遍历 entries()对键值对进行遍历 for of 循环进行遍历
9.includes();返回布尔值,表示某个数组是否包含给定的值。
10.flat() 将多维数组变成一维数组。
11.flatMap()