这里写目录标题
let
:声明遍历,与var不同,他不存在变量提升,不影响作用域链。
const
:定义常量,值不能修改的量,常量一般使用大写,常量所指向的地址没有发生改变,就不会报错。
数组解构赋值:
const my = ['test1','test2','test3'];
let [t1] = my
console.log(t1) // test1
对象解构赋值:
const my = {
name: '我的名字',
age: '18',
test: function(){
console.log("我");
}
};
let {name} = my;
console.log(name) // 我的名字
参数默认值
function connect({host="127.0.0.1", username,password, port}){}
`
:模板字符串,内容中可以直接换行,变量拼接。
let name = '名字'
let my = `我的名字是:${name}`
箭头函数
=>
:箭头函数,箭头函数的this
是是静态的,永远指向函数声明所在的作用域下的 this 的值,因此使用call
是无法改变箭头函数的this
的
function getName(){
console.log(this.name);
}
let getName2 = () => {
console.log(this.name);
}
window.name = 'WindowName';
const school = {
name: "schoolName"
}
getName.call(school) // schoolName
getName2.call(school) // WindowName
1)不能实例化,因为this是静态的。
2)不能使用 arguments 变量(arguments是用来保存参数的)
3)箭头函数适合与 this 无关的回调. 定时器, 数组的方法回调
4)箭头函数不适合与 this 有关的回调. 事件回调, 对象的方法
...args
:REST参数,用来获取函数的实参,代替arguments
function date(...args){
console.log(args);// filter some every map
}
date('test1','test2','test3'); // ['test1','test2','test3']
...
:spread扩展运算符,将『数组』或『对象』转换为逗号分隔的『参数序列』
const my = ['test1','test2','test3'];
function t1(){
console.log(arguments);
}
t1(...my);// chunwan('test1','test2','test3')
// 对象合并
const skillOne = {q: '天音波'}
const skillTwo = {w: '金钟罩'}
const mangseng = {...skillOne, ...skillTwo};
function * name()
:生成器
是一种异步编程的解决方案。通过next()方法控制向下执行,yield是一个分隔符。
参数传递=>
function * gen(arg){
console.log(arg);
let one = yield 111;
console.log(one);
let two = yield 222;
}
//执行获取迭代器对象
let iterator = gen('AAA');
console.log(iterator.next());
//next方法可以传入实参
console.log(iterator.next('BBB'));
// AAA
// {value: 111, done: false}
// BBB
// {value: 222, done: false}
异步=>
//模拟获取 用户数据 订单数据
function getUsers(){
setTimeout(()=>{
let data = '用户数据';
//调用 next 方法, 并且将数据传入
iterator.next(data);
}, 1000);
}
function getOrders(){
setTimeout(()=>{
let data = '订单数据';
iterator.next(data);
}, 1000)
}
function * gen(){
let users = yield getUsers();
let orders = yield getOrders();
}
//调用生成器函数
let iterator = gen();
iterator.next();
模块化的优势:防止命名冲突、代码复用、高维护性
三种包暴露方式
// 第一种:分别暴露
export let school = '尚硅谷';
// 第二种:统一暴露
let school = '尚硅谷';
function findJob(){
console.log("我们可以帮助你找工作!!");
}
export {school, findJob};
// 第三种:默认暴露
export default {
school: 'ATGUIGU',
change: function(){
console.log("我们可以改变你!!");
}
}
三种包引入方式
// 第一种:通用引入
import * as m1 from "./src/javascript/m1.javascript";
// 第二种:解构赋值
import {school, teach} from "./src/javascript/m1.javascript";
import {school as guigu, findJob} from "./src/javascript/m2.javascript";
import {default as m3} from "./src/javascript/m3.javascript";
// 第三种:简便形式针对默认暴露
import m3 from "./src/javascript/m3.javascript";
Array.prototype.includes
- 检查数组中是否包含某个元素,返回布尔值
- 指数操作符
**
- 跟
Math.pow
是一样的,都是幂运算,计算次方