浏览器:javascript 三个部分: ECMAScript + BOM + DOM 服务器:javascript = ECMAScript + 系统内置的核心模块(fs http)javascript
ECMAScript 是什么? 是一个 规范。 ECMA 是一个组织协会,协会专门负责制定各类规则。他们制定了一个 ECMAscript 规范,规定脚本语言实现。变量声明 var function fnName 有哪些语言实现这个规范: 1. JavaScript 2. actionScript(flash 动画 flash小游戏)java
发展过程当中 js 有不少的版本的迭代 咱们前面学习的版本 ECMAscript5 版本node
如今学习 ECMAScript6版本,也叫作es6版本。引入了不少新的语法特性。例如使用 let 声明变量 const 声明常量。es6
使用var关键字声明变量的弊端:数组
一、var声明的变量有预解析,形成 逻辑混乱,能够先使用,后声明浏览器
二、var能够重复定义同一个变量,逻辑错误,第二次应该是修改变量,而不是定义服务器
三、var用在for循环条件中,形成for 循环的污染的问题markdown
四、var 声明的变量没有块级做用域(ES5中的做用域:全局和局部)app
// 一、var声明的变量有解析,形成 逻辑混乱,能够先使用,后声明
// var a = 10;
// console.log(a);
// 二、var能够重复定义同一个变量,逻辑错误,第二次应该是修改变量,而不是定义
// var a = 10;
// var a = 30;
// console.log(a);
// 三、var用在for循环条件中,形成for 循环的污染的问题
// for(var i=0; i<10; i++){
// console.log(i);
// }
// console.log("=====================");
// console.log(i);
// 四、var 声明的变量没有块级做用域(ES5中的做用域:全局和局部)
// {
// var b = 200;
// }
// console.log(b);
复制代码
上面这些弊端,都在 ES6中的let关键字中获得解决: 上面这些弊端,都在 ES6中的let关键字中获得解决:ide
// console.log(a); //报错
// let a = 10;
// let a = 10;
// let a = 30; //报错
// for(let i=0; i<10; i++){
// console.log(i);
// }
// console.log("=====================");
// console.log(i); //报错
{
let b = 200;
}
console.log(b); //报错
复制代码
因此,let的特色:
一、let声明的变量没有预解析,不会有变量提高
二、let不能够重复定义同一个变量
三、let用在for循环条件中,不会形成for 循环的污染的问题
四、let声明的变量有块级做用域(ES6中的做用域:全局和局部还有块级做用域)
一、这种定义出来的量不容许被修改。修改就报错。
二、通常的,大多数状况下,会把const定义的量用大写来书写。
三、引入某个模块的某个对象,也能够用const,能够进行小写命名。
四、对象型的常量,它的属性能够修改
五、数组型常量中的每一项数据能够修改 五、数组型常量中的每一项数据能够修改
var PI = 3.141592653;
console.log(PI);
PI = 3.5; //不符合咱们认知,由于π是个定值
console.log(PI);
//----------------------------------------------------
const PI = 3.141592653; //定义PI常量
PI = 3.5; //报错
//----------------------------------------------------
const OBJ = {
name: "nodejs",
age:11,
email:"nodejs@163.com"
};
OBJ = {}; //报错
OBJ.job = "nodejs@qq.com"; //能够修改为功
console.log(OBJ); //{ name: 'nodejs', age: 11, email: 'nodejs@qq.com' }
//----------------------------------------------------
const ARR = [10, 0, 30];
ARR[1] = 20;
console.log(ARR); //[ 10, 20, 30 ]
复制代码
// 对象解构
let obj = {
name:"nodejs",
age:11,
email:"nodejs@163.com"
}
let name = "zhangsan"
获取obj的属性有哪些方法:
方法1:
let name = obj.name;
let age = obj.age;
let email = obj.eamil;
// 方法2:
let name = obj["name"];
let age = obj["age"];
let email = obj["email"];
// 方法3:(解构)
let {name, email, age} = obj; //彻底解构 解构的写法等效于上面的方法1
console.log(name, age, email);
let {name} = obj; // 部分解构 等效于: let name = obj.name
console.log(name);
let {name:myName} = obj; // 部分解构起别名 等效于: let name = obj.name
console.log(myName);
// 注意点:
一、大括号里面的变量名,都只能是obj里面的属性名。
二、大括号里面的变量名顺序能够任意
三、若是只想获取部分属性,能够只写这部分属性名
四、let {name} = obj; 等效于: let name = obj.name
五、let {name:myName} = obj; 给name起了一个别名叫myName,取obj的name属性赋值给myName这个新变量
复制代码
let arr1 = [10, 20, 30];
let [a, b, c] = arr1;
console.log(a); //10
console.log(b); //20
console.log(c); //30
// 部分解构
let [d] = arr1;
console.log(d); //10
let [ , ,f] = arr1;
console.log(f); //30
// 复合解构
let arr2 = [1, 2, [10, 20, 30]];
let [ j, k, [x, y, z]] = arr2;
console.log(j); //1
console.log(k); //2
console.log(x); //10
console.log(y); //20
console.log(z); //30
复制代码
let string1 = "xyz";
let [a,b,c] = string1;
console.log(a); //x
console.log(b); //y
console.log(c); //z
string1[1] = "Y";
console.log(string1); // xyz 没法修改
console.log(string1[1]); // y
复制代码
var userInfo = {
id: 1,
name: 'andy',
email: 'gogery@163.com'
}
// 需求:但愿把对象拼接为字符串: the userId is xxx, my name is xxx, my email is xxx;
/*var tmpl = 'the userId is '
+ userInfo.id + ', my name is '
+ userInfo.name + ', my email is '
+ userInfo.email;
console.log(tmpl);*/
var es5tpl = 'the userId is xxx, my name is xxx, my email is xxx';
// es6 提供一个语法表示一个字符串,使用的标识符是 反引号;
// 之前定义字符串使用的: '' ""
// 1. 容许换行 2. 容许在模板字符串里面直接使用变量
var infos = 'lorem';
var tmpl = `the userId is ${userInfo.id},
my name is ${userInfo.name},
string is ${infos}
my email is ${userInfo.email}`;
// `` 反引号 数字键 1旁边的键,须要是 shift + `
console.log(tmpl);
复制代码
/*var name = 'andy';
var age = 12;
var userInfo = {
id: 1,
name: name,
age: age
}
console.log(userInfo);*/
let id = 12;
let name = 'andy';
let age = 12;
let fn = function(){
console.log(`my name is ${this.name}` );
}
// es6 写法
let userInfo = {
id,
// 若是咱们的变量的名称和属性的名称一致,则能够直接只写变量名
name, // name: name
age,
fn // 若是咱们的函数的名称和属性的名称一致,直接写函数名便可
}
console.log(userInfo);
userInfo.fn();
复制代码
注意: es6 语法特性若是是在nodejs的高版本执行没啥问题,高版本支持 es6;
若是是nodejs 低版本 4 5 不支持 es6(ECMAScript6 ECMAScript2015) 除了能够在nodejs 也能够在浏览器执行 注意:浏览器高版本才能够执行, 若是是 IE 678 确定不认识,直接报错。