ES6相关
说几个es6的新增的一些东西
- 新增声明命令let和const
- 模板字符串(Template String)
- 函数的扩展(默认参数和箭头函数)
- 对象扩展(属性和方法简写,Object.keys(对象)方法和Object.assign(target,obj1,obj2…)方法)
- import和export
- Promise
- 解构赋值
- 展开运算符(…运算符)
- class类
1. let count的详解
- let 和 const 都是块级作用域。以{}代码块作为作用域范围 只能在代码块里面使用。
- 不存在变量提升,只能先声明再使用,否则会报错。在代码块内,在声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
- 在同一个代码块内,不允许重复声明。
- const声明的是一个只读常量,在声明时就需要赋值。(如果 const 的是一个对象,对象所包含的值是可以被修改的。抽象一点儿说,就是对象所指向的地址不能改变,而变量成员是可以修改的。)
2. 模板字符串详解
用一对反引号(`)标识,它可以当作普通字符串使用,也可以用来定义多行字符串,也可以在字符串中嵌入变量,js表达式或函数,变量、js表达式或函数需要写在${ }中
var str = `abc
def
gh`;
console.log(str);
let name = "小明";
function a() {
return "ming";
}
console.log(`我的名字叫做${
name},年龄${
17+2}岁,性别${
'男'},游戏ID:${
a()}`);
3. 函数的扩展详解
- 可以给函数参数设置默认值
function A(a,b=1){
console.log(a+b);
}
A(1); //2
A(2,3); //5
-
箭头函数
- 可以省略function关键字
- 可以不写函数名
- 如果只有一个表达式可以不需要写{} 和 返回值,直接加一个()即可
//省略写法
var people = name => ('hello' + name);
var getFullName = (firstName, lastName) => {
var fullName = firstName + lastName;
return fullName;
}
4. 对象的扩展详解
- 属性的简写。ES6 允许在对象之中,直接写变量,这时,属性名为变量名, 属性值为变量的值.
const foo = 'bar';
const baz = {
foo};//简写
const baz = {
foo: foo};// 等同于这个
- 方法简写。
var o = {
method() {
return "Hello!";
}
};
// 等同于
var o = {
method: function() {
return "Hello!";
}
};
- Object.keys()方法,获取对象的所有属性名或方法名(不包括原形的内容),返回一个数组
//直接传入对象,返回属性名数组
var obj={
name: "john",
age: "21",
getName: function () {
alert(this.name)
}
};
console.log(Object.keys(obj)); // ["name", "age", "getName"]
console.log(Object.keys(obj).length); //3
//如果传入的是数组,则返回数组下标数组,如果传入的是字符串,则返回字符下标数组
console.log(Object.keys(["aa", "bb", "cc"])); //["0", "1", "2"]
console.log(Object.keys("abcdef")); //["0", "1", "2", "3", "4", "5"]
- Object.assign (),assign方法将多个原对象的属性和方法都合并到了目标对象上面。可以接收多个参数,第一个参数是目标对象,后面的都是源对象
var target = {
}; //目标对象
var source1 = {
name : 'ming', age: '19'}; //源对象1
var source2 = {
sex : '女'}