ES6常用语法

本文详细介绍了ES6中的重要特性,包括let命令用于块级作用域的变量声明,const命令声明不可变常量,箭头函数简化函数定义,以及模板字符串、解构赋值等。此外,还讲解了模块化的概念,通过export和import关键字实现代码的组织和复用。这些新特性使JavaScript的语法更严谨,提高了代码的可读性和维护性。
摘要由CSDN通过智能技术生成

ES6常用语法

let命令

在ES6中新增了let命令,用来声明变量,用法与var类似,但是用let声明的变量,只在let所声明的代码块内有效,let命令可以使js的语法规则更加严格。

for(var i=0;i<3;i++){}
    console.log(i);//3
    
    for(let i=0;i<2;i++){}
    console.log(i);//3
for(let i=0;i<2;i++){}
    console.log(i);//未声明

使用let特性解决闭包副作用

var a = [];
        for (let i = 0; i < 3; i++) {
            a[i] = function() {
                console.log(i);
            };
        }
        a[0]();//0

const命令

const命令声明一个只读的常量,一旦声明,常量的值就不能够改变

使用const命令声明变量(常量)在定义时必须进行初始化

const命令的作用域与let命令一样,只在所声明的块级作用域内有效

箭头函数

在ES6中新增了:箭头(=>)语法定义函数表达式的能力。任何可以使用函数表达式都可以使用箭头函数,常用于内置匿名函数

匿名箭头函数定义格式

(参数列表)=>{代码块}

箭头函数定义格式

let a =()=>{
//箭头函数定义
conlose("aaa");
}
a();

只有一个参数时,可以不使用括号,只有多个参数或者没有参数的情况下就一定需要使用括号(参数列表)

在不使用{}时,箭头后面只能接一排语句,会隐藏返回这个语句;

let triple=(x)=>{3*x};
console.log(triple(3));//undefined
let triple=(x)=>3*x;
console.log(triple(3));//9

箭头函数虽然语法简洁,但也有很多场合不适用;

传递给箭头函数的参数不能使用arguments关键字访问,而只能通过定义的命名参数访问,但是箭头函数可以接受其他函数的arguments对象

function foo(){
            let bar=()=>{
                console.log(arguments[0])
            };
            bar();
        };
    foo(5);//5

关于箭头函数中this的使用

箭头函数中没有自己的this对象,它的this是继承而来的,默认指向定义它时所指的对象(宿主对象)

var a ={
            b:function(){
                console.log(this);//a
                var c = function(){
                    console.log(this);//windows
                };
                c();
                var d=()=>{
                    console.log(this);//a
                    
                };
                d();
            },
            name:"aaa"
        }
        a.b()
 let a = {
            name: "aaaa",
            show:() => {
            console.log(this);//windows
        }
        }
        a.show()
        a.show=function() {
                console.log(this);//a
            }
        a.show()

参数的默认值

function textfn(text = '默认值') {
            console.log(text);
        }
        textfn();//默认值
        textfn(1);//1

在使用参数默认值时,arguments对象的值不会反映参数的默认值,只会反映传给函数的参数

function textfn(text = '默认值') {
            console.log(arguments[0]);
        }
        textfn()//undefined
        textfn(1);//1

与ES5严格模式一样,修改命名参数也不会影响arguments对象,它始终以调用函数时传入的值为准。

  function textfn(text = '默认值') {
            text=3;
            console.log(arguments[0]);
        }
        textfn()//undefined
        textfn(1);//1

函数默认值只有在函数被调用时求值,而不会在函数定义时求值,而且,计算默认值的函数只有在调用函数但未传相应函数时才会被调用。

箭头函数同样可以使用默认参数值,并且必须使用括号。

    let textfn = (text = '默认值') => {
            console.log(text);
        }
        textfn()

暂时性死区

后面定义的默认值参数可以引用前面的,但前面定义的不能引用后面的。

function a(name='a',b=name){
            console.log(name,b);//a,a
        }
        a();
function a(b=name,name='a'){// 报错Cannot access 'name' before initialization
            console.log(name,b);
        }
        a();

参数存在自己的作用域中,它们不能引用函数体的作用域

function a(name=b){//报错b is not defined
            var b =12;
            console.log(name);
        }
        a();

模板字符串

新的字符串拼接方法

使用反引号  `` 表示模板字符串。并且还${}语法插入变量

$("#band")[0].innerHTML += `<div class="0"><p>${item}</p></div>`;

...操作符

“..."接受spread/rest操作符,具体是展开/收集需要看上下文语境。

当一个整体进行展开操作时,那么...的作用就是展开操作

(展开操作数组,对象)

该操作符可以将一个数组迭代转化为用逗号分隔开的参数序列

 var a1=[1,2,3];
        var a2=[4,5,6];
        var a3 = [...a1,...a2];
        console.log(a3);//[1,2,3,4,5,6]
        var a1=[1,2,3];
        var a2=[4,5,6];
        a1.push(...a2);
        console.log(a1);//[1,2,3,4,5,6]

展开操作对象

如果展开操作符操作的是一个对象,那么只会生成一个指向该对象的引用

展开运算符不会深度的递归对象的所有属性,只会拷贝可枚举的属性, 链同样也不会被拷贝。

同时存在两个对象,那么后面添加的对象会将之前对象中重复的属性覆盖掉

 var stu = {
            sname:"stu",
            sgae:18,
            ssex:"男"
        }
        var stu2 = {
            sgae:10
        }
        var stutest={...stu,...stu2}
        console.log(stutest)

当被用于函数传递时,...则变成一个rest操作符会将参数当作一个数组返回;

function foo(...agr1){
            console.log(agr1);//[1,2,3,4,5]
        }
        foo(1,2,3,4,5);

关于解构

解构表示从数组和对象提取值并赋值给独特的变量。

1.解构对象级获得对象在的属性值

 let stu={
        name:"tom",
        age:21,
        sex:"男"
    };
    let {name,sex,age}=stu;
    console.log(age,name,sex);

2.解构数组即获得数组中的元素

  let arr=['one','two','three'];
    let [a,b,c]=arr;
    console.log(a,b,c)

ES6模板

ES6模板可以模拟一整块JavaScript代码当作一个功能块使用。一个文件可以默认为一个模块,模块通过export向外暴露接口,实现模块之间的交互功能,使用<script>标签应用代码,然后通过type="modlue"属性告诉浏览器相关代码作为模块执行,而不是作为传统的脚本执行。

<script type="module">
    //代码块
    </script>
<script type="module" src="js文件目录"></script>

与传统脚本不同,使用模板都会默认定义一个defer属性。当页面解析到模板标签后,会立即下载脚本文件,但执行会延迟到文档解析完成后执行,值得注意的是,无论对嵌入式的模块代码,还是引入式的外部模块文件,都是一样的

<script type="module">在页面中出现的顺序就是他们执行的顺序。与< scriot defer>一样,修改模块标签的文字,无论是<head>还是<body>中,只会影响模板什么是加载,而不会影响模块什么是执行。

模块导出

使用“export”关键字对模块进行导出,导出的语句必须在模块顶部(模块顶部并不是代码顶部)

 //模块1,定义模块
    export var a = 3;
    //模块二,判断模块
    //错误示范
    if(true){
        export var a=4;
    }

export关键字在代码中出现的顺序没有限制

let str = "abc";
​
export {str}

命名导出:直接使用变量名导出

 //导出a
    export var a=3;
    //导出ab
    var a = 3;
    var b=2;
    export{a,b}

别名导出

 //使用str别名,导出a
    var a = 3;
    export{a as str};

使用“import”关键字将其他模板导入到当前模板中使用

格式:import{变量名}from"路径";

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值