ES6自学自查笔记系列

1. ES6简介

2. ES6兼容性和新特性

ES6兼容的平台:IE10+、Chrome、FireFox、移动端、Node.js、混合开发
兼容解决办法:
一、在线转化
二、提前编译(beble.js ==browser.js)

	<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
		<script type="text/babel">
			let a=12;
			let b=5;
			alert(a+b);
	</script>

ES6新特性:

  1. 变量
  2. 函数
  3. 数组
  4. 字符串
  5. 面向对象
  6. Promise
  7. generator
  8. 模块化

3. 变量 let 和 const

变量 var :

  1. 可以重复声明
  2. 没有限制修改
  3. 没有块作用域

变量 let 不能重复声明,变量(可以修改),块级作用域
变量 const 不能重复声明,常量(不可修改变量),块级作用域

!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script type="text/javascript">
	window.function(){
		var aBtn=document.getElementsByTagName('input');

		for(var i=0;i<aBtn.length;i++){
			(function(i){
				aBtn[i].onclick=function(){
				alert(i);
			};
			})(i);
			
		}
	};
	</script>
</head>
<body>
	<input type="button"	value="按钮1">
	<input type="button"	value="按钮2">
	<input type="button"	value="按钮3">
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script type="text/javascript">
	window.function(){
		var aBtn=document.getElementsByTagName('input');

		for(let i=0;i<aBtn.length;i++){
			aBtn[i].onclick=function(){
				alert(i);
			};
		}
	};
	</script>
</head>
<body>
	<input type="button"	value="按钮1">
	<input type="button"	value="按钮2">
	<input type="button"	value="按钮3">
</body>
</html>

4. 箭头函数

普通函数
function 名字(){

}

<script type="text/javascript">
	let show=function(a){
		return a*2;
	}

	alert(show(12));
</script>

箭头函数
()=>{

}

<script type="text/javascript">
	let show=(a)=>{
		return a*2;
	}

	alert(show(12));
</script>

  1. 如果只有一个参数,()可以省
<script type="text/javascript">
	let show=function(a){
		return a*2;
	}

	alert(show(12));
</script>

<script type="text/javascript">
	let show=a=>{
		return a*2;
	}

	alert(show(12));
</script>
  1. 如果只有一个return,{return }可以省
<script type="text/javascript">
	let show=function(a){
		return a*2;
	}

	alert(show(12));
</script>

<script type="text/javascript">
	let show=a=>return a*2;

	alert(show(12));
</script>

5. 参数(函数)

  1. 参数扩展、展开
  2. 默认参数

参数扩展:

  1. 收集剩余参数
<script type="text/javascript">
	function show(a,b,...args){
		alert(a);
		alert(b);
		alert(args);
	}

	show(1,2,3,4,6,67,7,7);
	</script>

**Rest Parameter必须是最后一个

  1. 展开数组
    展开后的效果,与直接把数组展开后内容相同
<script type="text/javascript">
	let arr1=[1,2,3];
	let arr2=[2,3,4]

	//let arr=[1,2,3,2,3,4];
	let arr=[...arr1,...arr2];

	alert(arr);
</script>

默认参数

<script type="text/javascript">
	function show(a,b=2,c=3){
		alert(a+b+c);
	}
	show(1);
	</script>

6. 解构赋值

  1. 左右两边结构必须一样
  2. 解构右边必须合法
  3. 声明与赋值不能分开
<script type="text/javascript">
	let arr=[1,2,3];

	/*let a=arr[0];
	let b=arr[1];
	let c=arr[2];*/

	let [a,b,c]=[1,2,3];

	alert(a+ " "+b+ " "+ c);
</script>

#左右结构一样
let [a,b,c]={a:1,b:2,c: 3}
#语法合法
let {a,b}={1,2} //右边不是合法语法
#声明与赋值不能分开
let [a,b];
[a,b]=[1,2];

7. 数组

map 映射 一对一
[20,70,30,88,99] // 分数
[不及格、及格、不及格、及格、及格]
[20,32,14,57,65] // ID
[
{name : ’ a’, level : 0, role : 0},
{name : ’ b’, level : 2, role : 99},
{name : ’ c’, level : 44, role : 23},
{name : ’ d’, level : 23, role : 33},
{name : ’ e’, level : 99, role : 0},
]
reduce 汇总 一堆出来一个
算总数
【12,40000,23333333】=>XXXXXX

<script>
	let arr=[12,56,291,4444];

	let result=arr.reduce(function(a,b,c){
		// alert(a+','+b+','+c);
		return a+b;
	});
	console.log(result);
	</script>

算平均分
【12,59,99】 =>56.7

<script>
	let arr=[12,56,291,4444];

	let result=arr.reduce(function(a,b,c){
		if(c!=arr.length-1){
			return	a+b;
		}else{
			return (a+b)/arr.length;
		}
	});
	console.log(result);
	</script>

filter 过滤器

<script>
	let arr=[
	{title: '男士衬衫',price: 75},
	{title: '女士衣服',price: 1000},
	{title: '男士鞋',price: 222},
	{title: '女士包包',price: 333}
	];
	let result=arr.filter(json=>json.price>=500);
	console.log(result);
	</script>

foreach 循环(迭代)

<script>
	let arr=[120,23,24,66];
	arr.forEach((item,index)=>{
		alert(index+":"+item);
	});
	</script>

8. 字符串

  1. 多了两个新方法
  • startsWith
<script>
		let str="http://www.baidu.com";
		if(str.startsWith('http://')){
			alert('普通网址');
		}else if(str.startsWith('https://')){
			alert('加密网址');
		}else if(str.startsWith('git://')){
			alert('git网址');
		}else if('svn://'){
			alert('svn地址');
		}else{
			alert('其他');
		}
	</script>
  • endsWith
<script>
	let str='1.txt';

	if(str.endsWith('.txt')){
		alert('文本文件');
	}else if(str.endsWith('.jpg')){
		alert("JPG 文件");
	}else{
		alert('其他');
	}
	</script>
  1. 字符串模板
    字符串连接
<script>
		let tilt="标题";
		let content='内容';

		let str='<div>\
		<h1>'+title+'</h1>\
		<p>'+content+'</p>\
		</div>';

		let str2=`<div>
		<h1>{title}</h1>
		<p>{content}</p>
		</div>`;
</script>

i. 直接把字符塞进字符串里面

<script>
	/*
	let str="abc";
	let sstr='abc';
	 */
	
	//let str=`abc`;

	let a=12;
	let str=`a${a}bc`;
	alert(str);		//a12bc
	</script>

ii. 可以折行

<script>
		let tilt="标题";
		let content='内容';

		let str='<div>\
		<h1>'+title+'</h1>\
		<p>'+content+'</p>\
		</div>';

		let str2=`<div>
		<h1>{title}</h1>
		<p>{content}</p>
		</div>`;
	</script>

9. 面向对象

  1. class关键字、构造器和类分开
  2. class里面直接加方法
<script>
	class User{
		//构造器
		constructor(name,pass){
			this.name=name;
			this.pass=pass;
		}

		//添加方法
		showName(){
			alert(this.name);
		}

		showPass(){
			alert(this.pass);
		}
	}

	var ul=new User('blue','12345');
	ul.showName();
	ul.showPass();
	</script>

继承

super

<script>
		class User{
			//构造器
			constructor(name,pass){
				this.name=name;
				this.pass=pass;
			}

			//添加方法
			showName(){
				alert(this.name);
			}

			showPass(){
				alert(this.pass);
			}
		}

		class VipUser extends User{
			constructor(name,pass,level){
				//继承父类
				super(name,pass);

				this.level=level;
			};
			
			showLevel(){
				alert(this.level);
			}
		}

		var v1=new VipUser('blue','12345',3);

		v1.showName();
		v1.showPass();
		v1.showLevel();
	</script>

10. 面向对象实例

面向对象应用——React

React:

  1. 组件化——Class
  2. JSX=bable=browser.js
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="js/react.js"></script>
	<script src="js/react-dom.development.js"></script>
	<script src="js/babel.min.js"></script>
	<script type="text/babel">
		window.function(){
			let oDiv=document.getElementById('div1');

			ReactDom.render(
				<span>123</span>
				oDiv;
			);
		}
	</script>
</head>
<body>
	<div id="div1"></div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
	<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
	<!-- 生产环境中不建议使用 -->
	<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
	<script type="text/babel">

	class Item extends React.Component{
		constructor(...args){
			super(...args);
		}

		render(){
			return	<li>{this.props.str}</li>;
		}
	}
	
	class List extends React.Component{
		constructor(...args){
			super(...args);
		}

		render(){

			let aItems=[];

			for(let i=0;i<this.props.arr.length;i++){
				aItems.push(<Item str={this.props.arr[i]}></Item>);
			}
			return	
			<ul>
				{aItems}
			</ul>;
		}
	}

	window.function(){
		let oDiv=document.getElementById('div1');

		ReactDom.render(
			<List arr="{['asd','asfw','aagag']}"></List>;
			oDiv;
		);
	}
	</script>
</head>
<body>
	<div id="div1"></div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
	<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
	<!-- 生产环境中不建议使用 -->
	<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
	<script type="text/babel">
	
	class Item extends React.Component{
		constructor(...args){
			super(...args);
		}

		render(){
			return	<li>{this.props.str}</li>;
		}
	}

	class aItems extends React.Component{
		constructor(...args){
			super(...args);
		}

		render(){
			let aItems=this.props.arr.map(a=><Item str={a}></Item>);
			
			return
			<ul>
				{aItems}
			</ul>;
		}
	}

	window.function(){
		let oDiv=document.getElementById('div1');

		ReactDom.render(
			<aItems arr={['abc','aer','afaf']}></aItems>
			oDiv;
		);
	}
	</script>
</head>
<body>
	<div id="div1"></div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
	<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
	<!-- 生产环境中不建议使用 -->
	<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
	<script type="text/babel">
	
	class Item extends React.Component{
		constructor(...args){
			super(...args);
		}

		render(){
			return	<li>{this.props.str}</li>;
		}
	}

	class aItems extends React.Component{
		constructor(...args){
			super(...args);
		}

		render(){
			
			return
			<ul>
				{this.props.arr.map(a=><Item str={a}></Item>)}
			</ul>;
		}
	}

	window.function(){
		let oDiv=document.getElementById('div1');

		ReactDom.render(
			<aItems arr={['abc','aer','afaf']}></aItems>
			oDiv;
		);
	}
	</script>
</head>
<body>
	<div id="div1"></div>
</body>
</html>

10. JSON

  1. JSON对象
    JSON.parse();
    JSON.stringify
    json的标准写法
    1、只能用双引号
    2、所有的名字都必须用引号包起来

    JSON转换成字符串

<script>
	let json={a: 12,b: 5};

	let str="http://www.baidu.com?date="+encodeURIComponent(JSON.stringify(json));

	alert(str);
	</script>

字符串转换成JSON

<script type="text/javascript">
	let str='{"a" : 12, "b" : 5, " c " : "test"}';
	let json=JSON.parse(str);

	console.log(json);
	</script>
</head>
  1. 简写
    名字一样
<script>

	let a=1;
	let b=2;
	// let json={a:a,b:b,c:23};
	let json={a,b,c:23};
	console.log(json);
	</script>
	方法简写
<script>
	let json={
		a:12,

		/*show:function(){
			alert(this.a);
		}*/
		
		show(){
			alert(this.a);
		}
	};
	json.show();
	</script>

11.Promise

异步:操作之间不相关 同时并行进行多个操作
同步:同时只能做一件事

无Promise异步数据请求

<script type="text/javascript">
		$.ajax(url:'/banners',function(banners_date){
			$.ajax(url:'hots',function(hots_date){
				$.ajax(url:'price',function(price_date){

				},function(){
					alert('失败了');
				});
			},function(){
				alert('失败了');
			});
		},function(err){
			alert('失败了');
		});
	</script>

有了Promise

Promise.all([
		$.ajax({url: 'json.txt',dateType: 'json'}),
		$.ajax({url: 'arr.txt',dateType: 'json'})
	]).then(function(arr){
		let	[res1,res2]=arr;
		alert('全部成功了');

		console.log(res1);

		alert(res2);
	},function(err){
		alert('至少一个失败了');
	})
</script>

12.Generator

  • generator 生成器函数
    • 普通函数,一路到底
    • generator函数,中间可以停,到哪停呢,用 yield 配合,交出执行权
    • yield 有 放弃、退让、退位的意思
    • 需要调用next()方法启动执行,需要遇到 yield 停, 踹一脚走一步
    • generator函数前面加一个 * 两边可以有空格,或靠近函数或function
    • 背后实际生成多个小函数,实现走走停停
runner(function * () {
    let userData = yield $.ajax({url: 'getUserData'})

    if (userData.type == 'VIP') {
        let items = yield $.ajax({url: 'getVIPItems'})
    } else {
        let items = yield $.ajax({url: 'getItems'})
    }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值