定义类
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()