teach-es6
ES6:
ECMAScript6
js:
组成部分: ECMA DOM BOM
ECMA是“European Computer Manufactures Association”的缩写,中文称欧洲计算机制造联合会。是1961年成立的旨在建立统一的电脑操作格式标准--包括程序语言和输入输出的组织。
这个组织的目标是评估,开发和认可电信和计算机标准。
这个非盈利组织的目标是发展“标准和技术报告以便促进和标准化对信息处理和电信系统的使用过程。
ECMA的总部设在日内瓦, 比方说国际标准化组织(ISO)和国际电子技术协会(IEC)。
DOM
我们都知道, javascript
有三部分构成,ECMAScript
,DOM
和BOM
,根据宿主(浏览器)的不同,具体的表现形式也不尽相同,ie和其他的浏览器风格迥异。
1. DOM 是 W3C 的标准; [所有浏览器公共遵守的标准]
2. BOM 是 各个浏览器厂商根据 DOM
在各自浏览器上的实现;[表现为不同浏览器定义有差别,实现方式不同]
3. window 是 BOM 对象,而非 js 对象;
DOM
(文档对象模型)是 HTML
和 XML
的应用程序接口(API
)。
BOM
主要处理浏览器窗口和框架,不过通常浏览器特定的 JavaScript
扩展都被看做 BOM 的一部分。这些扩展包括:
1
2
3
4
5
6
|
弹出新的浏览器窗口 移动、关闭浏览器窗口以及调整窗口大小 提供 Web 浏览器详细信息的定位对象 提供用户屏幕分辨率详细信息的屏幕对象 对 cookie 的支持 IE 扩展了 BOM,加入了 ActiveXObject 类,可以通过 JavaScript 实例化 ActiveX 对象 |
JS 浏览器BOM
javaScript
actionScript AS3 面向对象 组件 元件 演示
-------------------------------------------
什么是ECMA?
ECMA是标准, js是实现
类似 HTML5是标准,IE10, chrome、FF都是实现
换句话说, 将来也有可能其他 xxxScript来实现ECMA
ECMAscript 简写 ECMA 或者 ES
目前版本:
低级浏览器: 主要支持 ES3.1
高级浏览器: 正在从ES5 过渡到 ES6
------------------------------------------
兼容性:
目前为止 ES5 ES6 支持情况一般
nodeJs用的就是chrome内核, 在node中可以使用ES5 ES6很多特性
ES5和ES6已经逐渐沦为后台语言
------------------------------------------
ES6 从开始制定到最后发布,整整用了15年。
ECMAScript 1.0 是1997年发布的
2011年6月,ECMAscript 5.1 版发布,并且成为 ISO 国际标准(ISO/IEC 16262:2011)。
2013年3月,ECMAScript 6 草案冻结,不再添加新功能。新的功能设想将被放到 ECMAScript 7。
2013年12月,ECMAScript 6 草案发布。然后是12个月的讨论期,听取各方反馈。
2015年6月,ECMAScript 6 正式通过,成为国际标准。从2000年算起,这时已经过去了15年。
ES6 的第一个版本,就这样在2015年6月发布了,正式名称就是《ECMAScript 2015标准》(简称 ES2015)。
node --v8-options
babel
.babelrc
浏览器环境使用es6
Traceur 转码器 google
<script src="https://google.github.io/traceur-compiler/bin/traceur.js"></script>
在线转换
<script src="https://google.github.io/traceur-compiler/bin/BrowserSystem.js"></script>
<script src="https://google.github.io/traceur-compiler/src/bootstrap.js"></script>
<script type="module">
import './Greeter.js';
</script>
node环境使用
在浏览器里面如何使用?
需要用到编译工具
traceur ――由Google出的编译器,把ES6语法编译为ES5
bootstrap 引导程序,跟css里面认识bootstrap不一样
在网页上使用:
用法一: √
<script src="traceur.js"></script>
<script src="bootstrap.js"></script>
<script type="module">
</script>
用法二:
直接在线编译――主要用于测试
http://babeljs.io/repl/
https://google.github.io/traceur-compiler/demo/repl.html
------------------------------------------------------------------------
玩ES6时候:
先不用任何引入东西,测试,如果失败了,引入traceur
------------------------------------------------------------------------
1. 定义变量 ,let ――已经被浏览器实现了
var a=12;
let――用来定义变量
let a=12;
代码块: {} 包起来的代码, 形成了一个作用域,块级作用域
不存在变量提升
不允许重复声明
比如: if for while
特点: 只能在代码块里面使用
var 只有函数作用域
a). let具备块级作用域
b). 不允许重复声明
let a=12;
let a=5; //错的
总结: 其实let才接近其他语言的变量
用处:
封闭空间:
(function(){
var a=12;
})()
现在:
{
let a=12;
}
i问题:
总结: 块级作用域,其实就是 匿名函数立即调用
------------------------------------------------------------------------
const――用来定义 常量
一旦赋值,以后再也修改不了了
const
实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const
只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
const a-=12;
a=15 //报错
注意: const必须给初始值, 不能重复声明
因为以后再也没法赋值了,所以声明的时候一定得有值
用途: 为了防止意外修改变量
比如引入库名,组件名
------------------------------------------------------------------------
字符串连接:
之前:
var str='';
var str=""
反单引号: var str= `` 字符串模板
之前: 'abc'+变量名+'ef'
现在: `abc${变量名}ef`
------------------------------------------------------------------------
解构赋值:
var [a,b,c]=[12,5,101];
var {a,b,c}={b:5,a:12,c:101}; 跟顺序无关
模式匹配:――左侧的样子,需要和右侧一样
var [a,[b,c],d]=[12,[1,2],5];
var [{a,e},[b,c],d]=[{e:'eeee', a:'aaaa'},[1,2],5];
交互――数据解析:
[{title:'', href:'', img:""}]
解构赋值还可以给默认值:
var json={};
var a=json.a || 12
语法:
var {time=12,id=0}={};
运动框架:
function move(obj,json,options){
options=options || {};
options.time=options.time || 300;
}
function move(obj,json,{time=300}={}){
}
-----------------------------------------------
复制数组:
a). 循环
b). Array.from(arr)
c). var arr2=[...arr];
function show(...args){
args.push(5);
console.log(args);
}
show(1,2,3,4);
-----------------------------------------------
循环:
普通for
for in
for of 循环, 可以循环数组,不能循环json
真正目的为了循环 map对象
遍历(迭代、循环)整个对象, 表现 类似 for in
var arr=['apple','banana','orange','pear'];
Map对象:
和json相似,也是一种key-value形式
Map对象为了和for of循环配合而生的
var map=new Map();
设置:
map.set(name,value);
获取:
map.get(name)
删除:
map.delete(name)
遍历map:
不能使用for in,没有效果
for(var name of map){
console.log(name); // a,apple b,banana
}
for(var [key,value] of map){
console.log(key, value); // key value
}
for(var name of map.entries()){
console.log(name);
}
for(var [key,value] of map.entries()){
console.log(name);
}
for(var key of map.keys()){ //只是循环key
console.log(key);
}
for(var val of map.values()){ //只是循环value
console.log(val);
}
for.. of也可以循环数组:
只循环值:
for(var value of arr){}
只循环索引:
for(var key of arr.keys()){}
索引和值都循环:
for(var some of arr.entries()){}
--------------------------------------------------------------
函数:
之前:
function show(){
alert(1);
}
show();
----------------------
function show(a){
return a;
}
show(12);
----------------------
function show(a,b){
return a+b;
}
show(12,5);
箭头函数:
=>
var show=a=>a; function show(a){return a};
var show=(a,b)=>a+b; function show(a,b){return a+b};
var show=()=>'welcome'; function show(){return 'welcome'}
var show=() => { function show(){
alert(1); alert(1);
} }
注意:
this问题, this指向了window
arguments, 不能使用了
--------------------------------------------------
对象:
对象语法简洁化
单体模式:
json
var name='abb';
var age=101;
var preson={
name,
age,
showName(){
return this.name;
},
showAge(){
return this.age;
}
}
面向对象:
之前:
人类 工人类
function Person(name,age){ //类、构造函数
this.name=name;
this.age=age;
}
Person.prototype.showName=function(){
return this.name;
};
Person.prototype.showAge=function(){
return this.age;
};
ES6:
类 class
构造函数 constructor 生成完实例以后,自己就执行的
class Person{ //类
constructor(name,age){
this.name=name;
this.age=age;
}
showName(){
return this.name;
}
showAge(){
return this.age;
}
}
继承:
之前: 子类.prototype=new 父类();
ES6:
class Worker extends Person{
constructor(name,age,job){
//继承父级的构造函数
super(name,age);
this.job=job;
}
}
队列类:
[1,2,3,4]
var q=new Queue([1,2,3,4]);
q.shift();
q._queue
-----------------------------------
--------------------------------------------------------
模块化:――必须引入traceur 和bootstrap, type必须写成 module
seajs requireJs
ES6自带模块化
如何定义(导出)模块:
const a=12;
export default a;
---------------------------
const a=5;
const b=12;
export default {a,b};
如何使用(引用):
import modA from './a.js';
--------------------------------------------------------
异步: 多个操作可以同时进行
ajax
ajax(url,function(){
//1
},fnFail);
//2
--------------------------------------------------------
Promise:――承诺
就是一个对象,用来传递异步操作的数据(消息)
pending(等待、处理中)―> Resolve(完成、fullFilled)
―> Rejected(拒绝、失败)
使用:
var p1=new Promise(function(resolve,reject){
//resolve 成功了
//reject 失败了
});
var p1=new Promise(function(resolve,reject){
if(异步处理成功了){
resolve(成功数据)
}else{
reject(失败原因)
}
});
p1.then(成功(resolve),失败(reject)) √
--------------------------------------------
p1.catch――用来捕获错误
--------------------------------------------
Promise.all――全部,用于将多个promise对象,组合,包装成一个全新的promise实例
Promise.all([p1,p2,p3...]);
所有的promise对象,都正确,才走成功
否则,只要有一个错误,是失败了
--------------------------------------------
Promise.race――返回也是一个promise对象
最先能执行的promise结果, 哪个最快,用哪个
--------------------------------------------
Promise.reject() ――生成错误的一个promise
--------------------------------------------
Promise.resolve() ――生成一个成功的promise对象
语法:
Promise.resolve(value)
Promise.resolve(promise)
-------------------------------------------------------
Generrator――生成器
是一个函数
可以遍历, Generrator就是一个状态机
语法:
function show(){ //普通函数
}
function* show(){ //generator函数
yield xxx
}
形式上:
a). 函数名字前面有 *
b). 函数内部使用 yield语句
function* show(){
yield 'Hello';
yield 'World';
yield 'Es6';
}
var res=show();
res.next() {value:'Hello', done:false}
res.next() {value:'World', done:false}
res.next() {value:'Es6', done:false}
res.next() {value:'undefined', done:true}
总结: 每次返回一个value和done结果
value,每次yield后面值
done是一个布尔值,代表是否遍历结束
yield是否有返回值?
yield语句本身没有返回值,或者每次返回undefined
next可以带参数?
给上一个yield值
for....of循环: 循环generator函数
generator函数放到对象里面:
var json={
*show(){
yield ‘xx’
yield ‘xx’
}
}
teach-es6的更多相关文章
- web开发:javascript操作
一.函数闭包 二.面向对象 三.js选择器 四.事件初始 五.js处理页面内容 六.js事件控制标题栏 七.js控制类名 一.函数闭包 ```js// 函数的嵌套定义, 定义在内部的函数就称之为 闭包 ...
- ES6模块import细节
写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...
- webpack+react+redux+es6开发模式
一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...
- ES6的一些常用特性
由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...
- ES6(块级作用域)
我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...
- es6小白学习笔记(一)
1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...
- ES6之变量常量字符串数值
ECMAScript 6 是 JavaScript 语言的最新一代标准,当前标准已于 2015 年 6 月正式发布,故又称 ECMAScript 2015. ES6对数据类型进行了一些扩展 在js中使 ...
- ES6之let命令详解
let与块级作用域 { var foo='foo'; let bar='bar'; } console.log(foo,'var'); //foo varconsole.log(bar ,'bar') ...
- ES6 箭头函数中的 this?你可能想多了(翻译)
箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...
- ES6+ 现在就用系列(二):let 命令
系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...
随机推荐
- react-缓存
目录结构: 用到缓存的地方: 缓存的方法 清楚缓存
- C# 列排序
private void button2_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns. ...
- [JOI2012春季合宿]Constellation (凸包)
题意 题解 神仙结论题. 结论: 一个点集合法当且仅当其凸包上的两种颜色点分别连续. 证明: 必要性显然. 充分性: 考虑对于一个不同色三角形\(ABC\),不妨设点\(A\)为白点,点\(B,C\) ...
- A. Sea Battle
A. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 记一次关于springboot的netty版本冲突问题
冲突的地放其实很多,大概都是类似,找不到哪个方法了: 类似于: Error starting ApplicationContext. To display the conditions report ...
- Xpath中text(),string(),data()的区别
摘要: 在XPath中,经常使用text()和string(),而我一般都是想到哪个用哪个,究竟他们之间有什么不同,没有在意过. 本质区别 text()是一个node test,而string()是一 ...
- Hive 利用 on tez 引擎 合并小文件
Hive 利用 on tez 引擎 合并小文件 标签(空格分隔): Hive \[f(N) + \sum_{i=2}^N f(N-i+1)*X_i\] SET hive.exec.dynamic.pa ...
- lcx用法
lcx使用方 本机IP:192.168.125.11 目标机IP:192.168.125.101 本机运行: lcx -listen 3333 2222 目标机运行:lcx -slave ...
- shell 之 用linux定时任务crontab和watchdog.sh脚本做软件看门狗
1.简介 看门狗的作用是定期检测服务正常运行,如果发现服务不在了,会重新拉起服务:linux中可以利用系统的定时任务功能crontab定期的去执行watchdog.sh脚本,而watchdog.sh脚 ...
- Pytorch:使用GPU训练
1.模型转为cuda gpus = [0] #使用哪几个GPU进行训练,这里选择0号GPU cuda_gpu = torch.cuda.is_available() #判断GPU是否存在可用 net ...