(二) ES6 新特性 ——变量的解构赋值、模板字符串、简化对象写法

CSDN话题挑战赛第2期
参赛话题:学习笔记

目录

1. 变量的解构赋值

数组的解构赋值

对象的解构赋值

解构赋值的深拷贝与浅拷贝

2. 模板字符串

3. 简化对象写法


1. 变量的解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值。

let [a, b, c] = [1, 2, 3];
// a = 1
// b = 2
// c = 3

数组的解构赋值

const F4 = ['小沈阳','刘能','赵四','宋小宝'];
let [xiao, liu, zhao, song] = F4; //声明四个变量,里面的值就等于F4对应的值
console.log(xiao);
console.log(liu);
console.log(zhao);
console.log(song);

对象的解构赋值

const zhao = {
  name: '赵本山',
  age: '不详',
  xiaopin: function(){
  console.log("我可以演小品");
  }
};

let {name, age, xiaopin} = zhao;
  console.log(name);
  console.log(age);
  console.log(xiaopin);
  xiaopin();

遇到方法频繁调用,则可以用解构赋值

// zhao.xiaopin();
// zhao.xiaopin();
// zhao.xiaopin();

// 创建了多个重复的zhao 不如解构赋值

let {xiaopin} = zhao;
   xiaopin();

解构赋值的深拷贝与浅拷贝

  • 深拷贝:修改新变量的值不会影响原有变量的值。默认情况下基本数据类型(number,string,null,undefined,boolean)都是深拷贝。
  • 浅拷贝:修改新变量的值会影响原有的变量的值。默认情况下引用类型(object)都是浅拷贝。

 解构赋值中深拷贝情况:

        1)一维数组且里面的数据是简单类型

        2)对象里面是简单类型

        其他情况都是浅拷贝。

let a = {
    age: 18
}
 
// 引用赋值
let b = a;
b.age = 22;
 
console.log(a.age); // 22
let a = {
    age: 18
}

//解构赋值 
let b = {...a};
b.age = 22;
 
console.log(a.age); // 18

 可以看到改变 b的属性 age 的值,并不会改变对象 a 的属性的 age 的值。所以是一次深拷贝。

但是:

let a = {
    age: 18,
    address: {
        city: 'shanghai'
    }
}
 
let b = {...a};
b.address.city = 'shenzhen';
 
console.log(a.address.city);  // shenzhen

我们发现,解构出来的属性city的改变引起了原来数据的改变,也就是说,解构赋值其实依然是浅拷贝。

解构赋值,如果所解构的原对象是

1)一维数组且里面的数据是简单类型

2)对象里面是简单类型

那他就是深拷贝。
对于复杂类型,本质就是对引用类型数据进项等号赋值,那它就是浅拷贝;

2. 模板字符串

模板字符串(template string)是增强版的字符串,用反引号(`)标识,特点:

1. 字符串中可以出现换行符

let str = `<ul>
              <li>沈腾</li>
              <li>玛丽</li>
              <li>魏翔</li>
              <li>艾伦</li>
              </ul>`;

2. 可以使用 ${xxx} 形式输出变量

let lovest = '魏翔';
let out = `${lovest}是我心目中最搞笑的演员!!`;
console.log(out);

3. 简化对象写法

ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。

即:变量 → 对象.属性;函数 → 对象.方法

这样的书写更加简洁。

	let name = '尚硅谷';
        let change = function(){
            console.log('我们可以改变你!!');
        }

        const school = {
            name,
            change,
            improve(){
                console.log("我们可以提高你的技能");
            }
        }
        
        // 等效于
        // const school = {
        //     name: name,
        //     change: change,
        //     improve: function(){
        //         console.log("我们可以提高你的技能");
        //     }
        // }

        console.log(school);

猜你喜欢

转载自blog.csdn.net/a45667/article/details/127072387