ES6,全称ECMAScript6.0,也是一种规范。
数据类型:
1.值类型(基本类型):
- 字符串(String)
- 数字(Number)
- 布尔(Boolean)
- 对空(Null)
- 未定义(Undefined)
- Symbol(注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。)
2.引用数据类型:
- 对象(Object)
- 数组(Array)
- 函数(Function)
let用法
1、let 不能进行变量提升
2、let 具有块级作用域 {}它之间的内容就可以称之为块
注意
(1)同一块作用域内,不允许重复声明变量
(2)函数内不允许使用let重新声明函数的参数
例1:点击按钮弹出对应的索引
var arr = [];
for(var i=0;i++;i<10){
arr[i] = function(){
console.log(i);
}
}
arr[1](); //输出结果:10
//把var换成let
var arr = [];
for (let i = 0;i < 10; i++ ) {
arr[i] = function () {
console.log(i)
}
}
arr[4](); //输出结果:4
例2:
var a = 1;
(function(){
alert(a);
var a = 2;
}) ();
//弹出undefined,因为一开始做到了变量提升,只提升var的,
//alert只是定义(声明)了,没有赋值
例3:
var a = 1;
(function(){
alert(a);
let a = 2;
}) (); //输出结果:a is not defined
const
定义常量,顾名思义,常量就是不可以改变的量。
常量的特点:
1.不可修改
const name = '张三';
name = '李四'; //报错:Assignment to constant variable
2.只有块级作用域有效果
if(true){
const name = '李四';
console.log(name); //输出结果:李四
}
if(true){
const name = '李四';
}
console.log(name); //输出结果:空
- 不存在变量提升,必须先声明后使用
if(true){
console.log(name);
const name = 'abc'; //报错:Cannot access 'name' before initialization
}
- 不可重复声明同一个变量
var name = '张三';
const name = '李四'; //报错:Identifier 'name' has already been declared
- 声明后必须要赋值
const name; //报错:Missing initializer in const declaration
//常量在对象中的应用
const Person = { 'name': '张三', 'age': 20 };
Person.name = '李四';
Person.age = 30;
console.log(Person); //输出结果:{name: "李四", age: 30}
数据类型:基本数据类型(按值传递),引用数据类型(按地址传递)
const Person = { 'name': '张三', 'age': 20 };
Person.name = '李四';
Person = {'sex':'男'};
console.log(Person); //报错:Assignment to constant variable.