可参考阮一峰的ECMAScript 6 入门
var s1 = `abc`
var obj={ name:"",age:5 };
var s1 ="我叫:"+obj.name+",今年:"+obj.age+"岁。"
var obj={name:"张三",age:18}
var {name,age}=obj;
//生成2个变量,
// name值来自于obj.name、
// age值来自于obj.age
var {name:title}=obj;
//生成一个变量:title,值来自于obj.name
function f1(obj){
console.log(obj.age);
console.log(obj.height)
}
//等价于
function f1({ age,height }){
console.log(age);
console.log(height)
}
f1({age:5,height:180})
var a = 3 ;
var c = 10;
var b = { a,c } ;
//b对象有一个a属性,a属性的值,来自于a变量 ,
//还有一个c属性,c属性的值来自于c变量
console.log(b)
使用背景:es6的
优点:arguments是伪数组,而rest参数是真数组
function fn(...args){
console.log(args); //数组:[1,2,3,4,5]
}
fn(1,2,3,4,5)
场景:用于替换匿名函数
基本用法:
//匿名函数
div.onclick=function(){
console.log("你好")
}
//箭头函数
div.onclick=()=>{
console.log("你好")
}
有一个参数的箭头函数
var fn=(a)=>{
console.log("abc");
}
//等价于:
var fn=a=>{
console.log("abc");
}
有2个及更多参数的箭头函数
var f=(a,b,c)=>{
console.log("abc")
}
箭头函数和普通匿名函数有哪些不同?
var obj1={ age:5,gender:"男" }
var obj2={ ...obj1 }
var obj3={ ...obj1 , age:10 }
为什么要有promise:解决回调地狱的问题
//跟以前的if条件地狱很像
// if(){
// if(){
// if(){
// }
// }
// }
$.get("/getUser",function(res){
$.get("/getUserDetail",function(){
$.get("/getCart",function(){
$.get("/getBooks",function(){
//...
})
})
})
})
//node开发:读取文件;开个服务器、接收一个请求、请求路径、访问数据库
var promise=new Promise((resolve,reject)=>{
//b 把需要执行的异步操作放在这里
$.get("/getUser",res=>{
//获取数据的异步操作已经执行完毕了,等待下一步的执行,通过执行resolve函数,告诉外界你可以执行下一步操作了
//c、
resolve(res)
//而执行的下一步操作,其实就是写在then的回调函数中的
})
})
//a、
promise.then(res=>{
//d、执行后续的操作
console.log(res);
})
new Promise((resolve,reject)=>{
$.get("/getUser",res=>{
resolve(res)
})
}).then(res=>{
//用户基本信息
return new Promise(resolve=>{
$.get("/getUserDetail",res=>{
resolve(res)
})
})
}).then(res=>{
//用户详情
return new Promise(resolve=>{
$.get("/getCart",res=>{
resolve(res)
})
})
}).then(res=>{
//购物车信息
})
方式一
new Promise((resolve,reject)=>{
$.ajax({
url:"/getUser",
type:"GET",
success:res=>{
resolve(res);
},
error:res=>{
reject(res)
}
})
}).then(resSuccess=>{
//成功的返回值
},resError=>{
//失败的返回值
})
方式二:
new Promise((resolve,reject)=>{
$.ajax({
url:"/getUser",
type:"GET",
success:res=>{
resolve(res);
},
error:res=>{
reject(res)
}
})
}).then(resSuccess=>{
//成功的返回值
}).catch(resError=>{
//失败的返回值
})
async其实是一个promise的语法糖
async function get(){
console.log('开始执行');
var res = await timer()
console.log('执行结束:',res);
}
function timer(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("你好");
},1000)
})
}
get();
Generator是ES6的新特性,通过yield关键字,可以让函数的执行流挂起,那么便为改变执行流程提供了可能。
class Person {
constructor(name) {
this.name=name;
}
}
//相当于:
function Person(name){
this.name=name;
}
class Person {
constructor(name,age) {
this.name=name;
this.age=age;
}
//定义方法
say() {
console.log("大家好,我叫:"+this.name+",今年:"+this.age+"岁");
}
travel(){
console.log("坐着飞机去巴厘岛");
}
}
class Animal {
constructor(){
}
static born(){
console.log("小呆萌出生了")
}
}
//访问静态方法
Animal.born();
//父类
class Person {
constructor(name){
this.name=name;
}
}
//Student类继承自Person类
class Student extends Person {
//构造方法
constructor(name,grade){
//规定:必须调用父类构造方法,如果不调用就会报错
super(name);
//调用父类构造方法,从而给子类的实例添加了name属性
this.grade=grade;
}
}
[1,3,5].map(function(value,index){})
[1,3,5].map((value,index)=>{})
//以前变量和字符串拼接,现在用模板字符串
本地调试,会受浏览器同源策略的影响,需要开启web服务才能打开
<script type="module">
//导入模块
</script>
导出模块:
//common.js
export default { name:"abc" }
导入模块:(
//b.js
import common from "common.js"
console.log( common.name ) //"abc"
//person.js
export const jim = { country :"France" }
export const tony = { color:"gray" }
//默认的导出
export default { name:"abc" }
//index.js
import person , { jim , tony } from "person.js"
//person:{ name:"abc" }
//jim:{ country :"France" }
//tony:{ color:"gray" }
//person.js
export const tony = { color:"gray" }
export { tony as Tony }
//index.js
import { Tony } from "person.js"
import { Tony as man} from "person.js"
console.log(man) //{ color:"gray" }
//日期控件
var DatePicker = (function(){
return {
init(){}
}
})();
//Header
// tabbar
// login
//Content
// sidebar
// table
//Footer
var KTV=(function(){
return {
pay(){},
xiaofei(){}
}
})()
requireJS中文网
//1、通过script标签导入requirejs源文件
//2、编写模块文件,基本格式如下:
//home.js
define([],function(){
console.log('home模块');
})
//user.js
define([],function(){
console.log('user模块');
})
//3、首页调用模块:
require(["home","product.js"],function(){ })
require.config({
baseUrl:'js',
paths:{
'jquery':'jquery.min.js',
}
})
//user.js:
define([],function(){
return {
init(){},
addUser(){}
}
})
//首页:运行时加载
require(["cart"],function(cart){
cart.init();
cart.addUser();
})
注意:一般在导入模块的时候,需要将有返回值的模块
在[前面]
导入,无返回值的模块
在[后面]
导入
//userAdd.js
define([],function(){
return {
init(){
console.log("添加用户");
}
}
})
//userEdit.js
define([],function(){
return {
init(){
console.log("编辑用户");
}
}
})
//user.js define(["userAdd","userEdit"],function(userAdd,userEdit){
return {
init(){
console.log("用户初始化");
},
add(){
userAdd.init();
},
edit(){
userEdit.init();
}
}
})
//首页:
require(["user"],function(user){
user.init();
user.add();
user.edit();
})
if ( typeof define === "function" && define.amd ) {
define([], function() {
return jQuery;
} );
}
类似的还有:echarts
一般用于配置第三方模块,比如jquery、bootstrap、zepto等等
require.config(
paths:{
jquery:"js/lib/jquery-1.11.min",
zepto:"js/lib/zepto.min",
bootstrap:"assets/bootstrap/js/bootstrap.min"
}
)
define(["jquery","zepto"],function($,$$){})
require(["jquery","bootstrap"],function($){})
https://github.com/requirejs/requirejs/wiki/Plugins
define(["require","a"],function(require){})
require("a")()
#
开头#
开头