ES6的学习

ES6的学习记录

提示:根据视频学习的一些记录


一、day1的学习内容

1.let关键字

1).变量不能重复声明

//1.变量不能重复声明
    // let star = '杨幂';
    // let star = '小狐狸'

2).块儿级作用域

//2.块儿级作用域
    //if else while for
    // {
    //     let body = '魏大勋';
    // }
    // console.log(body);
    //会报错Uncaught ReferenceError: body is not defined at 01.let关键字.html:65

3).不存在变量提升

// console.log(song);
    // let song = '爱的供养';
    //会报错Uncaught ReferenceError: Cannot access 'song' before initialization at 01.let关键字.html:69

4).不影响作用域链

//4.不影响作用域链
    {
        let school= '尚硅谷';
        function fn(){
            console.log(school);
        }
        fn();
    }
    //会打印出尚硅谷

2.const关键字

1).一定要赋初始值

//1.一定要赋初始值
const a;

2).一般常量使用大写(潜规则)

// 2.一般常量使用大写(潜规则)
const a = 100;

3).常量的值不能修改

const SCHOOL = '西南石油大学';
// 3.常量的值不能修改
SCHOOL = '西南交通大学';
//会报错Uncaught TypeError: Assignment to constant variable. at 02.const关键字.html:64

4).块儿级作用域

{
	const PLAYER = 'xiaochen';
}
console.log(PLAYER);
//会报错Uncaught ReferenceError: PLAYER is not defined at 02.const关键字.html:70

5).对于数组和对象元素的修改

// 5.对于数组和对象元素的修改,不算做对常量的修改,不会报错
const TEAM = ['China','American'];
TEAM.push('Canada');
//是不会报错的

3.变量的解构赋值

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

1).数组的解构

const F4 = ['小沈阳','刘能','赵四','宋小宝'];
let [xiao,liu,zhao,song] = F4;
console.log(xiao);
console.log(liu);
console.log(zhao);
console.log(song);

2).对象的解构

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

    let {xiaopin} = zhao;
    xiaopin();

4.模板字符串

ES6引入新的声明字符串的方式   ``

1).内容可以直接出现换行符

let str = `<ul>
                <li>沈腾</li>
                <li>马丽</li>
                <li>常远</li>
                <li>艾伦</li>
            </ul>`

2).变量的拼接

let lovest = '马丽';
let out = `${lovest}是我心中最好的喜剧演员`;
console.log(out);
//打印结果:马丽是我心中最好的喜剧演员

5.对象的简化写法

ES6允许在大括号里面,直接写入变量和函数,作为对象的属性和方法,这样的书写会更加简洁
<script>
    let name = 'xiaochen';
    let change = function(){
        console.log('你是最棒的!');
    }

    // const people = {
    //     name : name,
    //     change:change,
    //     speak:function(){
    //         console.log('是的,我是最棒的!');
    //     }
    // }
    //等价于
    const school = {
        name,
        change,
        speak(){
            console.log('是的,我们是最棒的!');
        }
    }

    console.log(school);
</script>

控制台运行结果:
在这里插入图片描述

6.箭头函数

ES6允许使用箭头(=>)来定义函数

1).声明函数的两个方式

let fn = function(){

    }
    let fn1 = (a,b) => {
        return a + b;
    }
    调用函数
    let result = fn1(1,2);
    console.log(result);   //控制台结果为3

2).this是静态的

this是静态的,this始终指向的是函数声明时所在的作用域下的 this 的值
function getName(){
    console.log(this.name);
}
let getName2 = () => {
    console.log(this.name);
}

window.name = '小陈';
const school = {
    name:'陈陈'
}

//直接调用
getName();   //打印结果:小陈
getName2();   //打印结果:小陈

// call 方法调用
getName.call(school);    //打印结果:陈陈
getName2.call(school);    //打印结果:小陈

3).不能作为构造实例化对象

let person = (name,age) => {
        this.name = name;
        this.age = age;
    }
    let me = new person('小陈',19);
    console.log(me);
    //打印结果:Uncaught TypeError: person is not a constructor at 06.箭头函数.html:90

4).不能使用 arguments 变量

let fn= () => {
       console.log(arguments);
   }
   fn(1,3,2);
   //打印结果:Uncaught ReferenceError: arguments is not defined at fn (06.箭头函数.html:95) at 06.箭头函数.html:97

5).箭头函数的简写

// 1).省略小括号,当形参有且只有一个的时候
 let add  = (n) => {
     return n + n;
 }
 //等价于
 let add  = n => {
     return n + n;
 }
 console.log(add(8));   //打印结果16

 //2).省略花括号,当代码体只有一条语句的时候,此时 return 语句必须省略,而且语句的执行结果就是函数的返回值
 let pow = (n) => {
     return n * n;
 }
 //等价于
 let pow = n => n * n;
 console.log(pow(6));   //打印结果36

7.参数默认值

1).形参初始值
//1.形参初始值    具有默认值的参数,一般位置要靠后(潜规则)
    function add(a,b,c) {
        return a + b + c;
    }
    console.log(add(1,2));   //打印结果 NaN
    console.log(add(1,2,3));   //打印结果 6

    function add(a,c = 10,b) {
        return a + b + c;
    }
    console.log(add(1,2));   //打印结果 NaN
2).与解构赋值结合
	function connect({host,username,password,port}){
        console.log(host);   //localhost
        console.log(username);    //root
        console.log(password);    //root
        console.log(port);   //3306
    }
    connect({
        host:'localhost',
        username:'root',
        password:'root',
        port:3306
    })



    function connect({host = '127.0.0.1',username,password,port}){
        console.log(host);   //127.0.0.1
        console.log(username);    //root
        console.log(password);    //root
        console.log(port);   //3306
    }
    connect({
        username:'root',
        password:'root',
        port:3306
    })



    function connect({host = '127.0.0.1',username,password,port}){
        console.log(host);   //baidu.com
        console.log(username);    //root
        console.log(password);    //root
        console.log(port);   //3306
    }
    connect({
        host:'baidu.com',
        username:'root',
        password:'root',
        port:3306
    })

8.rest参数

1).ES5获取实参的方式
	function data (){
        console.log(arguments);   //不是数组,是一个对象
    }
    data('小红','小明','小玲');
2).rest参数
	function data(...args){
        console.log(args);
    }
    data('小橙','小黄','小蓝');   //返回的是数组,就可以使用 filter some every map等

    //rest 参数必须放在参数的最后
    function fn(a,b,...args){
        console.log(a);   //1
        console.log(b);   //2
        console.log(args);   //[3,4,5,6]
    }
    fn(1,2,3,4,5,6);

9.spread扩展运算符

扩展运算符能将 数组 转换为逗号分隔的 参数序列
1).扩展运算符的使用
//声明一个数组
const tfboys = ['易烊千玺','王源','王俊凯'];
// => '易烊千玺','王源','王俊凯'

//声明一个函数
function chunwan(){
    console.log(arguments);
}
chunwan(tfboys);   //0: (3) ["易烊千玺", "王源", "王俊凯"]
chunwan(...tfboys);  //Arguments(3) ["易烊千玺", "王源", "王俊凯", callee: ƒ, Symbol(Symbol.iterator): ƒ] 0: "易烊千玺" 1: "王源" 2: "王俊凯"
2).扩展运算符的应用
数组的合并
数组的克隆
将伪数组转为真正的数组
<script>
    //1.数组的合并
    const kuaizi = ['王太利','肖央'];
    const fenghuang = ['曾毅','玲花'];
    // const zuixuanxiaopingguo = kuaizi.concat(fenghuang);
    //等价于
    const zuixuanxiaopingguo = [...kuaizi,...fenghuang];
    console.log(zuixuanxiaopingguo);  //["王太利", "肖央", "曾毅", "玲花"]

    //2.数组的克隆
    const sanzhihua = ['8','5','7'];
    const sanyecao = [...sanzhihua];
    console.log(sanyecao);  //["8", "5", "7"]

    //3.将伪数组转为真正的数组
    const divs = document.querySelectorAll('div');
    const divarr = [...divs];
    console.log(divarr);  //[]
</script>

10.Symbol

1).Symbol数据类型

ES6引入了一种新的原始数据类型Symbol,表示独一无二的值,了它是JavaScript语言的第七种数据类型,
是一种类似字符串的数据类型。

特点:
1.Symbol 的值是唯一的,用来解决命名冲突问题
2.Symbol 值不能与其他数据进行运算
3.Symbol 定义的对象属性不能使用 for…in 循环遍历,但是可以使用Reflect.ownKeys 来获取对象的所有键名

JS中的数据类型
u undefined
s string symbol
o object
n null number
b boolean

<script>
    //创建Symbol(函数创建)
    let s = Symbol();
    console.log(s,typeof s);//Symbol() "symbol"

    let s2 = Symbol('小陈');
    let s3 = Symbol('小陈');
    console.log(s2 === s3);   //false   地址不一样

    //用 Symbol.for()   (对象创建)
    let s4 = Symbol.for('xiaochen');
    let s5 = Symbol.for('xiaochen');
    console.log(s4 === s5);    //true   指向同一个对象,所以地址是一样的

    //不能与其他数据类型进行运算
    let result = s + 100;  
    //Uncaught TypeError: Cannot convert a Symbol value to a number at 11.Symbol数据类型.html:72
    let result2 = s > 100;
    //Uncaught TypeError: Cannot convert a Symbol value to a number at 11.Symbol数据类型.html:72
    let result3 = s + '100';
    //Uncaught TypeError: Cannot convert a Symbol value to a number at 11.Symbol数据类型.html:72
</script>
2).Symbol创建对象属性
//向对象中添加方法  up  down
    let game = {
        name:'樱桃小丸子',
        up: function(){
            console.log('向阳生长的樱桃');
        },
        down: function(){
            console.log('垂涎欲滴的樱桃');
        }
    }

    //方法一:声明一个对象
    let methods = {
        up: Symbol(),
        down: Symbol()
    };

    game[methods.up] = function(){
        console.log('我是一个新的向上的方法');
    }
    game[methods.down] = function(){
        console.log('我是一个新的向下的方法');
    }

    console.log(game)
    console.log(game.down)
    // ƒ (){
    //         console.log('垂涎欲滴的樱桃');
    // }
    console.log(game[methods.down]);   
    // ƒ (){
    //     console.log('我是一个新的向下的方法');
    // }
    console.log("------------------")

    //方法二
    let youxi = {
        name:'狼人杀',
        [Symbol('say')] : function(){
            console.log('我可以发言');
        },
        [Symbol('zibao')] : function(){
            console.log('我可以自爆');
        }
    }
    console.log(youxi);
</script>

结果如下图所示:
在这里插入图片描述

3).Symbol的内置对象属性

这里仅列出两个,其他可在文档查阅

<script>
    class Person{
        static [Symbol.hasInstance](para){
            console.log(para)
            console.log("我被用来检测类型了")
            // return true   
            return false     //这里返回true,和false都一样,可以自己控制
        }
    }

    let o = {};

    console.log(o instanceof Person)

    const arr = [1,2,3]
    const arr1 = [4,5,6]
    console.log(arr.concat(arr1))
</script>

结果如下图所示;
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值