- ES6是ECMAscript6的简称,是Javascript的下一代标准,于2015年6月正式发布。目标是使Javascript可以用于编写复杂的大型应用程序,成为企业级开发语言。
- let
- let所声明的变量,只在let命令所在的代码块中生效
for (let i = 0; i < 5; i++) { console.log(i); } console.log(i+i); //Uncaught ReferenceError: i is not defined
- const:声明的变量是常量,不能被修改,类似于Java中的final关键字
- includes():返回布尔值,表示是否找到了参数字符串
- startWith():返回布尔值,表示参数字符串是否在原字符串的头部
- endWith():返回布尔值,表示参数字符串是否在原字符串的尾部
let str = "hello ReactJS"; console.log(str,"中是否包含ReactJS",str.includes("ReactJS")); console.log(str,"是否以h开头",str.startsWith("h")); console.log(str,"是否以actJS结尾",str.endsWith("actJS"));
- 字符串模板:在两个``之间的部分都会被作为字符串的值,可以进行任意换行
let str = `c y l`;2.3 解构表达式
- ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,称之为解构
- 1.数组
let arr = [1,2,3]; const [x,y,z] = arr;//x,y,z与arr中的每个位置对应来取值
- 2.对象
const person = { name:"cyl", age:22, language: ['java','go','javascript','HTML'] }; const {name:n,age:a,language:l} = person; console.log(n,a,l);2.4 函数优化
function add(a,b) { //判断b是否为空,为空就给默认值1 b = b || 1; return a + b; } function add(a,b = 1) { return a + b; }2.5 箭头函数
var print = function (obj) { console.log(obj); } var print = obj => console.log(obj); var sum = function (a,b) { return a + b; } var sum = (a,b) => a+b; //无参函数 let sayHello = () => console.log("hello");2.6 对象函数属性简写
let person = { name: "cyl", //以前: eat: function (food) { console.log(this.name + "在吃" + food); }, //现在:这里拿不到this eat: food => console.log(person.anme + "在吃" +food), eat(food){ console.log(this.name + "在吃" + food); } } //箭头函数结合解构表达式 //以前: const person = { name: "cyl", age: 22, language: ['java','HTML','javascript'] } function hello(person) { console.log("hello", + person.name); } //现在: var hello = ({name}) => console.log("hello", + name); hello(person);2.7 map()和reduce()
- map():接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回
let arr = ['1','2','-1','3']; //在map方法中传入方法(将字符串解析为int) //s => parseInt(s)是一个回调函数 let newArr = arr.map(s => parseInt(s)); console.log(newArr);
- reduce():接收一个函数,该函数接收两个参数
- 第一个是上一次reduce处理的结果
- 第二个参数是数组中要处理的下一个元素
const arr = [1,20,-5,3]; let result = arr.reduce((a,b) => { return a + b; },1);2.8 扩展运算符
function add(x,y) { return x + y; } var numbers = [1,2]; //将数组展开,作为参数传递到函数中 console.log(add(...numbers)); //数组合并 let arr = [...[1,2,3],...[4,5]]; console.log(arr); //与解构表达式结合 const [first, ...rest] = [1,2,3,4]; console.log(first,rest);//1 [2, 3, 4] //将字符串转换为数组 console.log([...'hello']);//['h', 'e', 'l', 'l', 'o']2.9 Promise
- 即一个容器,里面保存着某个未来才会结束的事件(通常是一个异步 *** 作)的结果
- 从语法上讲,Promise是一个对象,从它可以获取异步 *** 作的消息
- 通过promise的构造函数来创建promise对象,并在内部封装一个异步执行结果
- 如果要等待异步执行完成之后做一些事情,可通过then方法实现
- 如果要处理promise异步执行失败的事件,可以跟上catch
const p = new Promise((resolve, reject) => { //异步的 *** 作,通常是ajax *** 作 //使用setTimeout()模拟异步 *** 作 setTimeout(() => { //异步 *** 作(模拟) let num = Math.random(); if (num < 0.5) { //代表成功 resolve("succeed" + num); }else{ //代表失败 reject("fail" + num); } }); }); p.then(value => { console.log(value); }).catch(reason => { console.log(reason); });2.10 set和map数据结构
- set集合无序且不可重复
- Java中
,而js中是
const map = new Map([ ['c1','c'], ['c2','y'] ]); map.set("c3","l"); console.log(map.get("c3")); map.forEach((key,value) => { console.log(key,value); })
- map.values() 获取value的迭代器
- map.keys() 获取key的迭代器
- map.entries() 获取entry的迭代器
//通过扩展运算符进行展开 console.log(...map.entries());2.11 class基本用法
class User { constructor(name,age = 22) { this.name = name; this.age = age; } sayHello() { return "hello, " + this.name; } //静态函数 static isAdult(age) { if (age >= 18) {return "adult"} return "too young,too simple!" } } class c1 extends User { constructor() { super("c1",21); } test() { return "test" + this.name; } } let user = new User("cyl"); console.log(user); console.log(user.sayHello()); //静态方法的使用 console.log(User.isAdult(user.age)); let c = new c1(); console.log(c); console.log(c.sayHello()); console.log(c1.isAdult());2.12 Generator函数
- 是ES6提供的一种异步编程解决方案
- function命令与函数名之间有一个星号
- 函数体内部使用yield语句定义不同的内部状态
- 每调用一次next方法返回一个对象,该对象包含了value值和done状态
- 直到执行return或函数执行完毕时,返回状态true表示执行结束
function* hello() { yield "a1"; yield "a2"; yield "a3"; return "a4"; } let h = hello(); console.log(h.next()); console.log(h.next()); console.log(h.next()); console.log(h.next()); //{value: 'a1', done: false} //{value: 'a2', done: false} //{value: 'a3', done: false} //{value: 'a4', done: true} for (let c of h) { console.log(c); }2.13 转码器
- Babel是一个广为使用的ES6转码器,可将ES6代码转换为ES5代码,从而在浏览器或其他环境运行
- 谷歌出品的Traceur转码器也可实现转码
- 阿里开源企业级react框架————UmiJS
- 可插拔的企业级react应用框架
- 插件化:由大量插件组成
- 开箱即用:仅需一个umi依赖即可启动
- 约定式路由:类next.js的约定式路由,支持权限,动态路由,嵌套路由等
- 1.安装node.js(小鹿的版本是v16.3.0),通过node -v命令检测
- 2.安装yarn(小鹿的版本是1.22.17),通过tyarn -v命令检测
- 3.安装umi tyarn global add umi,通过umi命令进行测试
- 在第三个步骤会遇到umi不是内部命令,只需配置yarn的全路径即可
- 4.初始化:tyarn init -y,通过初始化命令生成package.json文件,它是Node.js约定用来存放项目,配置的文件
- 修饰器是一个用来修改类行为的函数
- 类似于Java中的注解
@T //通过@符号引用该方法,类似于Java中的注解 class User { constructor(name,age = 22) { this.name = name; this.age = age; } } function T(target) {//定义一个普通方法 //target对象为修饰的目标对象,这里指目标对象 console.log(target); //为User类添加一个静态属性country target.country = "China"; } console.log(User.country); // 会报如下错误: // Uncaught SyntaxError: Invalid or unexpected token
- 因为ES6中不支持该用法,ES2017中才有,所以不能够直接运行
- 需要进行转码后才能运行,即将ES6或ES2017转为ES5执行
- 即把代码进行拆分,方便重复利用,类似于Java中的导包
- js中没有包的概念,称为模块
- 模块功能主要由两个命令构成:export和import
1.export:用于规定模块的对外接口 2.import:用于导入其他模块的功能
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)