1、let 与const
-let 1、只能在当前的代码块中有效 2、let变量不能提升 3、不能重复声明 4、for循环体现let父子作用域
- cosnt 1、 声明必须赋值,
2、模板字符串
var obj = {
name:'李明',
age:34
}
//模板字符串
console.log('名字'+obj.name+'年龄'+obj.age);
//`名字:${obj.name} 年龄:${obj.age}`
console.log(`名字:${obj.name} 年龄:${obj.age}`);
3、简化对象的书写
var a=1;
var b=2;
var obj1={
a, //省略同名关键字
b,
setA(x){
console.log('aaaa'); //省略function关键字
}
}
console.log(obj1);
4、箭头函数
**一般形式**: let fn1=(x,y)=>{ console.log(this); } fn1(); **/* 注意this指向的问题:箭头函数的this指向不是在调用时决定的,而是在定义的时候决定的 * 1、如果外部有函数,那么this指向外部函数的this * 2、如果外部没有函数,指向window*/**
总结:箭头函数将它的词法作用域绑定在原来的上下文中
箭头后面只有一条执行语句时,大括号可以不写,此时执行后的语句会默认有返回值。
// 当函数体只有一条语句的时候{}可省略不写, 当{}省略不写的时候会自动返回当前语句的执行结果; let fun4 = (x, y) => { return x + y }; console.log(fun4(4, 1)); //5
let obj={};
let fn1=(x,y)=>{ console.log(this);//window
let fn3=()=>{ console.log(this);//window
function f4() {
console.log(this); //obj
}
f4.call(obj);
}
fn3.call(obj); //call不会改变箭头函数的this指向}
fn1.call(obj);//call会改变普通函数的this指向
function foo2() {
let fn1=(x,y)=>{
console.log(this); //obj
}
fn1();
}
foo2.call(obj); //call会改变this指向
5、三点运算符
//三点运算符可以将伪数组转换为真数组
function args(a,b,c,d){
//获取实参列表,伪数组
console.log(arguments);
//返回这个函数本身
console.log(arguments.callee);
}
args(1,2,3,4);
//函数中的应用:真数组
function foo(...args){
console.log(...args); //1 2
console.log(args); //[1, 2]
}
foo(1,2);
//数组中的应用
let arr1=[1,2];
let arr2=[3,...arr1,4];
console.log(arr2); //[3, 1, 2, 4]
6、形参默认值
function foo(x=1,y=2){
this.x=x;
this.y=y
}
var f=new foo(); //没有实参,执行形参默认值
console.log(f);
var p=new foo(4,5); //有实参,执行实参中的值
console.log(p);
7、变量的解构赋值
// 2 对象的解构赋值
let obj = {name:'kobe',age:20};
let {age} = obj;
console.log(age);
//3. 数组的解构赋值 不经常用
let arr=[1,2,4,'ni'];
let [,,,r] = arr;