ES6基本语法(一)

1.1 let关键字

let 关键字用来声明变量,使用 let 声明的变量有几个特点:

1) 不允许重复声明

2) 块儿级作用域

3) 不存在变量提升

4) 不影响作用域链

应用场景:以后声明变量使用 let 就对了。

<body>
    <script>
        //声明变量
        let a;
        let b, c, d;
        let e = 100;
        let f = 521, g = 'iloveyou', h = [];

        //1. 变量不能重复声明
        // let star = '罗志祥';
        // let star = '小猪';

        //2. 块儿级作用域  全局, 函数, eval
        // if else while for 
        // {
        //     let girl = '周扬青';
        // }
        // console.log(girl);

        //3. 不存在变量提升
        // console.log(song);
        // let song = '恋爱达人';

        //4. 不影响作用域链
        {
            let school = 'XATU';
            function fn() {
                console.log(school);
            }
            fn();
        }

    </script>
</body>

1.2 const 关键字

const 关键字用来声明常量,const 声明有以下特点 :

1) 声明必须赋初始值

2) 标识符一般为大写

3) 不允许重复声明

4) 值不允许修改

5) 块儿级作用域

注意: 对象属性修改和数组元素变化不会出发 const 错误

应用场景声明对象类型使用 const,非对象类型声明选择 let


    <script>
        //声明常量
        const SCHOOL = 'XATU';

        //1. 一定要赋初始值
        // const A;
        //2. 一般常量使用大写(潜规则)
        // const a = 100;
        //3. 常量的值不能修改
        // SCHOOL = 'ATGUIGU';
        //4. 块儿级作用域
        // {
        //     const PLAYER = 'UZI';
        // }
        // console.log(PLAYER);
        //5. 对于数组和对象的元素修改, 不算做对常量的修改, 不会报错
        const TEAM = ['UZI','MXLG','Ming','Letme'];
        // TEAM.push('Meiko');

        
    </script>

1.3 变量的解构赋值

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

数组的解构赋值:

<script>
        const arr = ['张学友', '刘德华', '黎明', '郭富城'];
        let [zhang, liu, li, guo] = arr;
        console.log(zhang);
        console.log(liu);
        console.log(li);
        console.log(guo);
    </script>

对象的解构赋值:

<script>
        const lin = {
            name: '林志颖',
            tags: ['车手', '歌手', '小旋风', '演员']
        };
        let { name, tags } = lin;
        console.log(name);
        console.log(tags);
    </script>

复杂解构:

let wangfei = { 
 name: '王菲', 
 age: 18, 
 songs: ['红豆', '流年', '暧昧', '传奇'], 
 history: [ 
 {name: '窦唯'}, 
 {name: '李亚鹏'}, 
 {name: '谢霆锋'} 
 ] 
}; 
let {songs: [one, two, three], history: [first, second, third]} = wangfei; 

1.4 模板字符串

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

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

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

<script>
        // 定义字符串 
        let str = `<ul> 
            <li>沈腾</li> 
            <li>玛丽</li> 
            <li>魏翔</li> 
            <li>艾伦</li> 
                 </ul>`;
 </script>
<script>
        // 变量拼接 
        let star = '王宁';
        let result = `${star}在前几年离开了开心麻花`;
        console.log(result);
</script>

注意:当遇到字符串与变量拼接的情况使用模板字符串

1.5 简化对象写法

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

<script>
        let name = 'XATU';
        let slogon = '永远追求教育更高标准';
        let improve = function () {
            console.log('可以提高你的技能');
        }
        //属性和方法简写 
        let atguigu = {
            name,
            slogon,
            improve,
            change() {
                console.log('可以改变你')
            }
        };
        console.log(atguigu);
    </script>

注意:对象简写形式简化了代码,所以以后用简写就对了

1.6 箭头函数

ES6 允许使用「箭头」(=>)定义函数。

<script>
        /** 
        * 1. 通用写法 
        */
        let fn = (arg1, arg2, arg3) => {
            return arg1 + arg2 + arg3;
        }
</script>

箭头函数的注意点:

1) 如果形参只有一个,则小括号可以省略

2) 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果

3) 箭头函数 this 指向声明时所在作用域下 this 的值

4) 箭头函数不能作为构造函数实例化

5)不能使用 arguments

// ES6 允许使用「箭头」(=>)定义函数。
        // 声明一个函数
        // let fn = function(){

        // }
        let fn = (a,b) => {
            return a + b;
        }
        // 调用函数
        let result = fn(1, 2);
        console.log(result);

(1). this 是静态的. this 始终指向函数声明时所在作用域下的 this 的值

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

        // //设置 window 对象的 name 属性
        window.name = 'XATU';
        const school = {
            name: "ATGUIGU"
        }

        //直接调用
        getName();
        getName2();

        //call 方法调用
        getName.call(school);
        getName2.call(school);

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

//2. 不能作为构造实例化对象
        let Person = (name, age) => {
            this.name = name;
            this.age = age;
        }
        let me = new Person('xiao',30);
        console.log(me);

(3). 不能使用 arguments 变量

//3. 不能使用 arguments 变量
        let fn = () => {
            console.log(arguments);
        }
        fn(1,2,3);

(4). 箭头函数的简写

//4. 箭头函数的简写
        //1) 省略小括号, 当形参有且只有一个的时候
        let add = n => {
            return n + n;
        }
        console.log(add(9));
        //2) 省略花括号, 当代码体只有一条语句的时候, 此时 return 必须省略
        // 而且语句的执行结果就是函数的返回值
        let pow = n => n * n;

        console.log(pow(8));

1.7 rest参数

ES6 引入 rest 参数(形式为 ...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

<script>
        function add(...args) {
            console.log(args);
        }
        let str = add(1, 2, 3, 4, 5);
        console.log(str);
</script>
<script>
        function add(...values) {
            let sum = 0;
            for (var k of values) {
                sum += k;
            }
            return sum;
        }
        let str = add(2, 5, 3) 
        console.log(str);// 10
</script>

上面代码的add函数是一个求和函数,利用 rest 参数,可以向该函数传入任意数目的参数。

arguments对象不是数组,而是一个类似数组的对象。所以为了使用数组的方法,必须使用Array.prototype.slice.call先将其转为数组。rest 参数就不存在这个问题,它就是一个真正的数组,数组特有的方法都可以使用。下面是一个利用 rest 参数改写数组push方法的例子。

<script>
        function push(arr, ...items) {
            items.forEach(function (item) {
                arr.push(item);
                console.log(item);
            });
        }
        var a = [];
        push(a, 1, 2, 3);
</script>

rest 参数必须是最后一个形参

<script>
        function minus(a, b, ...args) {
            console.log(a, b, args);
        }
        minus(100, 1, 2, 3, 4, 5, 19);
</script>

1.8 spread扩展运算符

扩展运算符(spread)也是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列,对数组进行解包。

<script>
        let tfboys = ['德玛西亚之力', '德玛西亚之翼', '德玛西亚皇子'];
        function fn() {
            console.log(arguments);
        }
        fn(...tfboys)
</script>

数组合并:

扩展运算符提供了数组合并的新写法。

<script>
        const arr1 = ['a', 'b'];
        const arr2 = ['c'];
        const arr3 = ['d', 'e'];
        // ES5 的合并数组
        arr1.concat(arr2, arr3);
        // [ 'a', 'b', 'c', 'd', 'e' ]
        // ES6 的合并数组
        console.log([...arr1, ...arr2, ...arr3]);
        // [ 'a', 'b', 'c', 'd', 'e' ]
</script>

与解构赋值结合:

扩展运算符可以与解构赋值结合起来,用于生成数组。

<script>
        const [first, ...rest] = [1, 2, 3, 4, 5];
        console.log(first);
        console.log(rest);
</script>

如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。

<script>
        const [...butLast, last1] = [1, 2, 3, 4, 5];
        // 报错
        const [first, ...middle, last2] = [1, 2, 3, 4, 5];
        // 报错
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值