单词掌握
promise中使用 -许诺
resolve 解决
reject 拒绝
reason 原因
const 恒定的
iterator 迭代器
const静态变量
不可改变
const SCHOOL = 123;
数组可以加
const ARR = ['123','456'];
ARR.push('789')
console.log(ARR);
解构赋值
const zhao = ['123','456','789']
let [a,b,c] = zhao;
console.log(a)
console.log(b)
console.log(c)
const cc = {
age:'21',
name:'哈哈',
eat:function (){
console.log("吃个饭")
}
}
let {eat,age} = cc
console.log(age)
eat();
模板参数
let name = '打工仔';
let str = `${name}是世界上最苦逼的人`;
console.log(str)
对象简化写法
let name = '刘哈哈';
let eat = function (){
console.log('吃个蛋')
}
let rxx = {
name,
eat,
hahhaha(){
console.log('1231231')
}
}
rxx.eat();
rxx.hahhaha();
console.log(rxx.name)
箭头函数
箭头函数内this是静态的
let div = document.getElementById('ad')
div.addEventListener('click',function (){
setTimeout(()=>{
this.style.background='pink'
},0)
});
const xiii = [1,2,3,4,5,6,7,8,9,10];
const xiii2 = xiii.filter((item)=>{
if(item>5){
return true;
}
return false;
})
console.log(xiii2);
const xii3 = [1,2,3,4,5,6,7,8,9,10];
const xii31 = xii3.filter(tiem=>tiem>1);;
console.log(xii31);
const ccc = {
name:'测试',
aa(){
console.log(this.name)
return 1;
},
bb:function (){
console.log(this.name)
return 1;
},
cc:()=>{
console.log(22222222)
console.log(this.name)
}
}
console.log(ccc.aa())
console.log(ccc.bb())
ccc.cc()
解构赋值{}
花括号内填写同名变量或者函数名字,可以不用挨个赋值
let connect = ({name='没有名字',age,pwd})=>{
console.log(name)
console.log(age)
console.log(pwd)
}
connect({
age:12,
pwd:'xxxsss'
});
rest(…args)和argument接收参数
function dd(){
console.log(arguments)
}
dd(1,2,3,4,5,6);
function dd2(...args){
console.log(args)
}
dd2('好久啊哈','asdas','收到','xs的')
const ttt = ['张三','李四','王五'];
dd(ttt)
dd(...ttt)
console.log("字符串:"+"-123"[0])
扩展运算符
...数组名字,...对象名字可以用中括号合并为数组结构
let arr = [1,2,3];
let arr2 = [4,5,6];
let arr3 = [...arr,...arr2]
console.log(arr3);
console.log()
Symbol
在对象{}里面添加自定义的Symbol.iterator属性可以自定义返回
[Symbol.iterator](){
let index = 0;
let _this = this;
return {
next:function (){
if(index <_this.stus.length){
const res = {
value:_this.stus[index],
done:false
};
index++;
return res;
}else{
return {
value:undefined,
done:true
}
}
}
}
}
Promise异步处理数据(函数内要定义异步)
let a = new Promise(function (resolve,reject){
setTimeout(()=>{
if(true){
let c = '获取用户数据';
resolve(c);
}else{
let b = '失败';
reject(b)
}
},1000)
});
a.then(function (value){
console.log(value)
},function (reason){
console.log(reason)
})
const fs = require('fs');
let p = new Promise(function (resolve, reject){
fs.readFile('./res/a.tex',function (err,data){
if(err)reject(err)
return resolve(data);
});
});
p.then(function (value){
console.log(value.toString())
},function (reason){
console.log(reason)
});
const fs = require('fs');
let p = new Promise((resole,reject)=>{
fs.readFile('./res/a.txt',(err,data)=>{
if(err) reject(err);
return resole(data);
});
});
p.then(value =>{
return new Promise((resole,reject)=>{
fs.readFile('./res/b.txt',(err,data)=>{
return resole([value,data]);
});
});
}).then(value =>{
return new Promise((resole,reject)=>{
fs.readFile('./res/c.txt',(err,data)=>{
value.push(data)
return resole(value);
});
});
}).then(value => {
console.log(value.join("\n\r"))
})
集合操作
let a = new Set(['你好','你好','你好啊']);
console.log(a,typeof a);
console.log(a);
console.log(a.has('你好'));
console.log(a.has('你好222'));
a.delete('你好')
console.log(a);
a.add('你好222')
console.log(a);
a.clear();
console.log(a);
const arr= [1,1,2,3,4,5];
const arr2= [3,3,4,5,6,6];
console.log([...new Set(arr)]);
console.log([...new Set(arr)].filter(item=>new Set(arr).has(item)));
console.log([...new Set([...new Set(arr),...new Set(arr2)])]);
console.log([...new Set(arr)].filter(item=>new Set(arr).has(item)));
console.log([...new Set(arr2)].filter(item=>new Set(arr).has(item)));
Map操作 类似键值对哈希
let map1 = new Map();
map1.set('name','测试');
console.log(map1);
map1.set('haha',function (){
console.log('这是哈哈');
});
console.log(map1);
map1.get('haha')()
let key = {
'测试1':'好的'
}
map1.set(key,['收阿德1','剑剩','概论']);
console.log(map1);
类操作
function Phone(brand,price){
this.brand = brand;
this.price = price;
}
Phone.name= '属于类的值';
Phone.prototype.call = function (){
console.log('我可以打电话')
};
let huawei = new Phone('huawei',1599);
console.log(huawei)
console.log(huawei.name)
console.log(Phone.name)
huawei.call()
class Shouji{
static name = '就叫你小王八';
constructor(brand,price) {
this.brand = brand;
this.price = price;
}
call(){
console.log('我可以打电话')
}
}
let xiaomi = new Shouji('xiami',1854);
xiaomi.call();
console.log(xiaomi)
console.log(xiaomi.name)
console.log(Shouji.name)
class Phone2{
constructor(brand,price) {
this.brand = brand;
this.price = price;
}
photo(){
console.log('相册')
}
}
class sPhone extends Phone2{
static number;
#age
constructor(brand,price,size) {
super(brand,price);
this.brand = brand;
this.price = price;
this.size = size;
}
wechat(){
console.log('可以使用微信')
}
photo(){
console.log('子类相册')
}
get number(){
console.log('当调用读取number时参数值的时候触发了')
return 'xxx';
}
set number(value){
console.log('当调用设置number时参数值的时候触发了')
return 'xxx';
}
}
let vivo = new sPhone('vivo',1499,5.3);
console.log(vivo)
vivo.wechat();
vivo.photo();
vivo.number;
vivo.number = '15';
数值判断,方法扩展
let n2 = Number.MAX_SAFE_INTEGER;
console.log(Number.MAX_SAFE_INTEGER + 2 )
BigInt(n2) + BigInt(3);
Math.abs('');
if(Math.abs(0.1+0.2) - 0.3<Number.EPSILON){
console.log('认为数是一致的')
}
let a = 0b1010;
let b = 0o777;
let d = 0xff;
Number.isFinite(4/2)
Number.isFinite(100/0)
Number.isFinite(isFinite)
Number.isNaN();
Number.parseInt();
Number.parseFloat();
Math.trunc()
Math.sign()
console.log(NaN === NaN)
Object.is(123,123)
Object.is(NaN,NaN)
const obj1 = {
name:'test1',
age:'25'
}
const obj2 = {
name:'张三',
class:'五年级二班'
}
const obj3 = Object.assign(obj1,obj2);
console.log(obj3)
const school = {
name:'test'
}
const sc_1 = {
banji:['1班','2班','3班']
}
Object.setPrototypeOf(school,sc_1)
Object.getPrototypeOf(school)
const arr4 = ['张三','李四'];
arr4.includes('张三');
console.log(2**10);
console.log(Math.pow(2,10));
const aa = {
name:'哈哈',
city:['北京','上海','广州','杭州']
}
const arrxx = Object.entries(aa);
console.log(arrxx)
console.log(Object.fromEntries(arrxx))
const m1 = new Map(arrxx);
console.log(m1)
let str = '<a href="https://www.baidu.com">百度</a>';
const reg = /<a href="(?<url>.*)>(?<aname>.*)<\/a>/
const result = reg.exec(str);
console.log(result)
console.log(result.groups.url)
console.log(result.groups.aname)
let str = '<a href="https://www.baidu.com">百度</a><a href="https://www.douyin.com">抖音</a>';
const reg = /<a href="(.*)>(.*)<\/a>/g
const result = reg.exec(str);
console.log(result)
const resul2t = str.matchAll(str);
console.log([...resul2t])
let str = " asdkasbd ";
console.log(str.trim())
console.log(str.trimStart())
console.log(str.trimEnd())
const str = Symbol('测试');
console.log(str.description);
const arr34 = [1,2,3,4,5,6];
const arr35 = arr34.flatMap(item=>{
return [item * 10 ]
})
console.log(arr35)
const conf1 = {
db:{
host:'嘎哈',
name:'下划线很喜欢'
},
}
function conf(config){
const name = config && config.db&&config.db.name;
console.log(name)
const xx = config && config.db&&config.db.xx;
console.log(xx)
const name3 = config?.db?.name;
console.log(name3)
}
conf(conf1);
console.log(globalThis)
引入模块化js文件
export 暴漏
import * as m1 from 引入
aa1.js 暴漏-1
export let name ='测试2';
export function getx(){
return '123';
}
aa2.js 暴漏-2
let name ='测试3';
export {
name
}
aa3.js 暴漏-3
export default {
name:'哈哈'
}
<script type="module">
import * as m1 from "./js/aa1.js";
import {name,getx} from "./js/aa1.js";
import {name as name1,getx as getx2} from "./js/aa1.js";
import {default as m4} from "./js/aa3.js";
import m5 from "./js/aa3.js";
</script>
<script src="./js/app.js" type="module"></script>
const btn1 = document.getElementById('btn1');
btn1.addEventListener('click',()=>{
import('./hello.js').then(moudle=>{
console.log(moudle)
moudle.hello()
})
});
把语法ES6转为ES5
初始化npm
mpm init --yes
npm i -D @babel/cli @babel/core
npm i -D @babel/preset-env
npm i browserify -D
bable-cli bable命令行工具
bable-preset-env 预设包可以把最新的ES特性转为ES5特性
browserify 打包工具(可以使用webpack)
-D 开发依赖
npx babel js --out-dir js2 --presets @babel/preset-env
npx browserify js2/app.js -o js2/bundle.js
ES6使用npm Jquery包
npm i jquery
import $ from 'jquery';
$('body').css('background','pink');
npx babel js --out-dir js2 --presets @babel/preset-env
npx browserify js2/app.js -o js2/bundle.js
引入bundle.js
ES8新特性
async function tex(){
return '正确的结果对象Promise';
}
async function tex2(){
return new Error('失败的结果对象Promise,抛出错误');
}
async function tex3(){
return new Promise((resolve,reject)=>{
resolve('我返回啥tex3返回啥');
});
}
tex().then(value => console.log(value));
tex3().then(value => console.log(value));
const fs = require('fs');
function read_a (){
return new Promise((resolve,reject)=>{
fs.readFile('./res/a.txt',(err,data)=>{
if(err) reject(err);
return resolve(data);
})
})
}
function read_b (){
return new Promise((resolve,reject)=>{
fs.readFile('./res/b.txt',(err,data)=>{
if(err) reject(err);
return resolve(data);
})
})
}
function read_c (){
return new Promise((resolve,reject)=>{
fs.readFile('./res/c.txt',(err,data)=>{
if(err) reject(err);
return resolve(data);
})
})
}
async function readall(){
const a = await read_a();
const b = await read_b();
const c = await read_c();
console.log(a.toString());
console.log(b.toString());
console.log(c.toString());
}
readall()
function sendAjax(url){
return new Promise((resolve, reject)=>{
const x = new XMLHttpRequest();
x.open('GET',url);
x.send();
x.onreadystatechange=function (res){
if(x.readyState == 4){
if(x.status >= 200 && x.status<=300 ){
return resolve(x.response);
}else{
reject('err');
}
}
};
})
}
async function se(){
const baidu = await sendAjax('http:/');
console.log(baidu)
}
se();
const p1 = new Promise((resolve, reject)=>{
setTimeout(()=>{
return resolve('模拟成功');
},1000);
})
const p2 = new Promise((resolve, reject)=>{
setTimeout(()=>{
return resolve('成功');
},1000);
})
Promise.all([p1,p2]);
Promise.allSettled([p1,p2]);