Es6的解构赋值,以及作用域

1 全局作用域

解释:var变量是定义在window上

    var a = 123;
 
​    console.log(a); //123
 
​    console.log(window); //window a: 123

2 函数级作用域

function fn() {
​      var b = 234;
​      console.log(b); //234
      console.log(window); //没有b属性,因为它是函数级作用域,有c属性.因为在函数不定义直接使用属于全局变量
 
​      c = 555;
​      console.log(window); //window c: 555 ,因为在函数不定义直接使用属于全局变量
 
​    }
 
​    fn()

3 变量提升

 // 变量提升将变量的声明会提升至本作用域的最顶部
 
​    console.log(a); //undefined
​    var a = 123;
​    //上面代码相当于
​    var a;
​    console.log(a);
​    a = 123;

4  const和let

// let和const声明的变量不存在变量提升 因为let和const声明变量后会将当前代码块转化为一个暂 
   //时性的死区
 
​    //暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有 
   //等到声明变量的那一行代码出现,才可以获取和使用该变量
 
​    // let声明的变量首次可以不赋值 let声明的变量在相同作用于内不能重复定义, const声明的常量必须 
  //有默认值 const声明的是常量 不能重新赋值 但是如果值是引用数据类型 数据内部的属性是可以修改

 const a = 1;
​    console.log(a);//1
​    a = 2 //报错  无法直接修改常量
 
​    const obj = {
​      name: '张三'
​    }
 
​    obj.name = '李四';
​    console.log(obj.name); //李四

5 解构赋值

总结: 
      1 解构赋值就是按照一定的模式将对象或者数组中的数据取出赋值给变量,数组解构按照索引等号两边相对应,对象解构按照key解构,
 
      2 无论是对象的解构赋值还是数组的解构赋值 "等号" 两边的数据类型都要保持一致, 不然是undefined.前后数据结构也要保持一致, 不然解构的可能与原数组解构嵌套不同

数组类型 ''='' 如果前后类型不同是undefined

var arr = [1, 2, 3, 4];
var a, b, c, d = arr //类型不同
console.log(a, b, c); //undefined undefined undefined
console.log(d) //(4) [1, 2, 3, 4]

解构交换变量

var a = 1;
var b = 2;
console.log(a, b);//1 2
var [a, b] = [b, a];
console.log(a, b);// 2 1

数组的解构赋值 数组的解构赋值是按照前后数据的索引值一一对应的

var arr = [1, 2, 3, 4];
var [a, b, , d] = arr;
console.log(a, b, d); //1 2 4,逗号也算一位

前后数据结构也要保持一致,不然解构的可能与原数组解构嵌套不同

var arr = [1, [2, 3, [4]]];
var [a, [b, c, [d]]] = arr;
console.log(a, b, c, d); //1 2 3 4

数组解构时的默认值

var arr = [1, 2, 3, 4, undefined];
var [a, b, c, d, e = 5] = arr; //直接赋值默认值
console.log(a, b, c, d, e);//1 2 3 4 5
let arr = [];//三个空数组,有时候直接用数组长度作为判断条件
arr.length = 3;
console.log(arr); //(3) [empty × 3]

对象的解构赋值 对象的解构赋值是按照key一一解构


var obj = {
name: "张三",
age: 16,
tel: 110
}
let { name } = obj
 
console.log(name); //张三

解构数组,如果有两个值必须写在后面,rest参数

let arr = [1, 2, 3];
let [a, ...b] = arr;//rest参数是解构所有剩余参数
console.log(a) //1
console.log(b) //[2,3]
 
错误写法
 
let arr = [1, 2, 3]
 
let [...a, b] = arr//直接报错

解构对象rest参数前写谁就不解构谁

let obj = {
name: '张三',
age: 16,
tel: 110
}
 
let { tel, ...obj2 } = obj;//写tel
 
//解构对象rest参数前写谁就不解构谁,因为rest参数是解构所有剩余参数,所以是{name: '张三', age: 16}
 
console.log(obj2); //{name: '张三', age: 16}

解构函数的剩余参数

function fn(a, b, ...c) {
// console.log(arguments);
console.log(a, b, c); //1 ,2 , [3, 4]
}
 
fn(1, 2, 3, 4)

函数的形参可以写赋值形式,对象是键值对

function fn({ method = 'get',url}) {
console.log(method); //get
};
 
fn({ url: 'xxx', data: {} })

Js默认字符串前面有一个空字符串拼接

var str = "" + "德玛西亚"
 
var str2 = "德玛西亚"
 
console.log(str === str2); //true js默认字符串前面有一个空字符串拼接
 
console.log(str[1]); //玛 字符串可以用数组方式
 
console.log(str.length); //4

扩展运算符

let arr = [1, 2, 3];
let arr2 = [4, 5, 6];
console.log([...arr, ...arr2]);

前端小白一个,如果有写的不全或者写错的,欢迎评论区补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值