目录
一、ECMA
1、ECMA(European Computer Manufacturers Association)中文名称为欧洲计算机制造商协会,这个组织的目标是评估、开发和认可电信和计算机标准。1994 年后该组织改名为 Ecma 国际。
2、ECMAScript:ECMAScript 是由 Ecma 国际通过 ECMA-262 标准化的脚本程序设计语言。
3、什么是ECMA-262:Ecma 国际制定了许多标准,而 ECMA-262 只是其中的一个
4、ECMA-262 历史:ECMA-262 - Ecma International
5、ECMAScript 和 JavaScript 的关系
一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系?
要讲清楚这个问题,需要回顾历史。1996 年 11 月,JavaScript 的创造者 Netscape 公司,决定将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标准。次年,ECMA 发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,这个版本就是 1.0 版。
因此,ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 Jscript 和 ActionScript)
二、基本语法
1、let声名变量
在传统的javaScript中用var声名变量,let替代var功能要比var高级,解决了var的部分缺陷
1、let定义的变量不可以重复声名,var可以
2、let有块级作用域,var没有块级作用域。说白了就是var局部生命变量不走该逻辑仍然可以打印,但是在java语句是不行的,但是let局部声明变量该段逻辑为false就不能打印。
2、const声明常量
//声明常量
const PI = 3.1415926
console.log(PI)
//声名常量的时候要有初始值
//const A
//一旦赋予了初始值就不能改变
// PI = 0.99
//规范:大写字母和下划线形式
const A_B_C = 1
console.log(A_B_C)
//对于数组和对象的元素修改, 不算做对常量的修改, 不会报错
const TEAM = ['郝樽','苏轼','曾国藩','欧阳修']
TEAM.push('寇准')
TEAM = 100
console.log(TEAM)
3、解构赋值
//ES6 允许按照一定模式从数组和对象中提取值,对变量进行赋值,
//这被称为解构赋值。
//1. 数组的解构
const F4 = ['苏轼','王安石','欧阳修','张载']
let [su,wang,ou,zhang] = F4
console.log(su)
console.log(wang)
console.log(ou)
console.log(zhang)
//2.对象解构
const sushi = {
username:'苏轼',
age:'千古',
shiren:function(){
console.log('写诗')
}
}
let {username,age,shiren} = sushi
console.log(username)
console.log(age)
console.log(shiren)
shiren()
//3. 根据名字自动解构
// let (shiren) = sushi
// xieshi()
4、模板字符串
// ES6 引入新的声明字符串的方式 『``』 '' ""
//1. 声明
let str = `醉里挑灯看剑`
console.log(str);
//2. 内容中可以直接出现换行符
let htmlStr =
`<ul>
<li>范仲淹</li>
<li><赵匡义/li>
</ul>`
console.log(htmlStr);
//3.拼接变量
let runman = '韩跑跑'
let out = `跑路第一人${runman}千古留名了`
console.log(out);
5、声明对象简写
//声明对象的简写形式
let username = '张居正'
let age = '千古'
let transform = function(){
console.log('张居正度量田地改革');
}
// let zhangjuzheng = {
// username:username1,
// age:age1,
// transform:transform1
// }
let zhangjuzheng = {
username,
age,
transform
}
console.log(zhangjuzheng.username);
console.log(zhangjuzheng.age);
zhangjuzheng.transform();
6、定义方法简写
// 传统
let person1 = {
sayHi: function () {
console.log('无边落木萧萧下')
},
}
person1.sayHi()
// ES6 ,省略了function
let person2 = {
sayHi() {
console.log('不尽长江滚滚来')
},
}
person2.sayHi()
7、参数的默认值
//注意:函数在JavaScript中也是一种数据类型,JavaScript中没有方法的重载
function add(a,b = 0){
console.log('a是:'+ a);
console.log('b是:'+ b);
return 100 + a;
}
let result = add(10);
console.log(result);
8、对象拓展运算符
//展开对象(拷贝对象)
let person = { name: '路飞', age: 17 }
// let someone = person //引用赋值
let someone = { ...person } //对拷拷贝,对象指向不同的地址
someone.name = '索隆'
console.log(person)
console.log(someone)
9、箭头函数
// function fn(a){
// return 100 + a
// }
// let fn = function(a){
// return 100 + a
// }
// let fn = a =>{
// return 100 + a
// }
let fn = a => 100 + a
let result = fn(1)
console.log(result);
10、Promise
Promise 是ES6 引入的异步编程的新解决方案。语法上 Promise 是一个构造函数, 用来封装异步操作并可以获取其成功或失败的结果。
//异步编程解决方案:文件读取、ajax等
const fs = require('fs') //引入node.js本地文件扩展模块
//实例化Promise
//Promise对象有三个状态:初始化,成功,失败
//resolve:函数类型的参数,可以将Promise的状态设置为成功
//reject:函数类型的参数,可以将Promise的状态设置为失败
const p = new Promise((resolve,reject) => {
//执行异步操作
//第一个参数:读取文件的路径
//第二个参数:读取过程中响应结果的处理
fs.readFile('./虞美人.txt',(erro,data) =>{
//当文件读取失败时错误对象
if(erro){
reject(erro)//将Promise的状态改为失败
}
//当文件读取成功是的内容
resolve(data)//将Promise的状态改为成功
})
})
//p.then 当Promise的状态为成功时被调用
//p.catch 当Promise的状态为失败时被调用
p.then((response) => {
//成功的业务逻辑
console.log(response.toString());
}).catch((error) => {
console.log('出错了');
console.log(error);
})
总结:借助于Promise,可以使异步操作中的成功和失败的处理函数独立出来。