ES6新语法(一)

李傕
• 阅读 1776

ES6(ECMAScript 6的简称),是于2015年6月正式发布的JavaScript语言的标准

let/const

//var
var a=1;
var a=5;
if(a>4){
    var b=10;
}
console.log(b);    //10

//let
let a=1;
let a=5;    //报错:dentifier 'a' has already been declared

let a=5;
if(a>4){
    let b=10;
}
console.log(b);    //报错:b is not defined

//const
const a=1;
a=5;    //报错:Assignment to constant variable.

var可以重复定义并无块级作用域,let不能重复定义有块级作用域,const定义常量

赋值

let list=[1,2,3]
let [a,b,c]=list
console.log(a,b,c)    //1 2 3

let dict={name:'jim',age:21}
let {name,age}=dict
console.log(name,age)    //jim 21

let dict={name:'jim',age:21}
let [name,age]=dict    //报错:dict is not iterable

在解构赋值过程总,必须左右结构相同

  • 箭头函数(python中的lambda)
#普通函数
function fn(arg1,arg2){
    return arg1+arg2
}

#箭头函数
(arg1,arg2)=>arg1+arg2
var fn=(arg1,arg2)=>arg1+arg2    //方便以后多次调用

箭头函数中当参数只有一个的时候可以省略括号,当无参数时必须写一对小括号,当函数体只有一句时可以省略大括号,且语句默认就是返回值,不需要写return

for in/of

#js中的in只能用来遍历下表,这是一个很大的痛点,所以of的出现本人非常的喜欢
let iterator=[0,2,4,6,8,16,32,64]

for i in iterator:
    console.log(i)    //0,1,2,3,4,5,6,7
    
for i of iterator:
    console.log(i)    //0,2,4,6,8,16,32,64

默认参数

//之前
function fn(arg1,arg2){
    let x=arg1 || 5;
    let y=arg2 || 6;
    return x+y
}
console.log(fn)    //11

//es6
function fn(arg1=5,arg2=6){
    return arg1+arg2
}
console.log(fn)    //11  

let list=[1,2,3,4,5,6]
function fn(arg1,arg2,...args){
    console.log(arg1,arg2,args)
}  
fn(...list)    //1 2 Array(4)    Array(4)表示为[3,4,5,6]

这种写法更直观清晰,且介绍内部的逻辑代码,和python写法很类似

数组

let list = [1, 2, 3, 4, 5, 6]
//map
let new_list=list.map((arg)=>{    //每个元素将作为参数依此传入
            if(arg>4){
                return true
            }else{
                return false
            }
        })
        console.log(new_list)    //[false, false, false, false, true, true]
//reduce
let list = [1, 2, 3, 4, 5, 6]
        let new_list=list.reduce((sum,arg)=>{    //第一次将前两个参数传入,接下来将结果作为第一个参数,其他list元素以此传入
            return sum+arg
        })
        console.log(new_list)    //21
//filter
let new_list=list.filter((arg)=>{
            if(arg>4){
                return true    //根据返回的布尔值判断是否放入新list
            }
        })
        console.log(new_list)    //[5,6]
//forEach
let new_list=list.map((arg)=>{    //每个元素将作为参数依此传入
            return arg
        })
        console.log(new_list)    //[1, 2, 3, 4, 5]

这和python中的map,reduce,filter高阶函数作用几乎相同,只不过在js中只作为了数组的方法,而python中是没有forEach方法的,原因可能是map可以达到作用吧,在我看来是这个样子,如有不同,请告知本宝宝,哈哈。

对象

let name='jim'
let age=21
let obj={
name:name,
age:age,
show:function(){
    console.log(name,age)
}
}
obj.show()        //jim 21
console.log(obj)    //{name: "jim", age: 21, show: ƒ}
                    
//以上可以简化为
let obj={
name,
age,
show(){
    console.log(name,age)
}
}

同名的key和value我们可以省略成只写一个,对于函数我们可以省略function

字符串

let str="http://www.jim.com/index.html"    //不存在,瞎写的
//startsWith判断是否以某字符串开始
if (str.startsWith('http://')){
    console.log("这是一个http的地址")    //这是一个http的地址
}
//endsWith判断是否以某后缀结束
if (str.endsWith('.html')){
    console.log("这是一个html文件")    //这是一个html文件
}

很多语言的字符串都有这种判断方法,现在的javascript也在不断的完善,666

面向对象

//以前
function Person(name,age){
      this.name=name;
      this.age=age;
}
Person.prototype.show=function(){    //当然也可以在Person函数内部定义,若使用箭头函数,则函数将失去效果,this指向了window对象    this.show=function(){ 函数体 }
      console.log(this.name,this.age)
}
let p=new Person('jim','21');
p.show()    //jim 21
function Chil(name,age,role){
    Person.call(this)
    this.name=name
    this.age=age    //可以直接将参数写入call函数内
    this.role=role
}
Chil.prototype.show=Person.prototype.show    不写的话用不到show函数,当然这只是一种方式
let c=new Chil('han','23','student')
c.show()

//es6
class Person{
    constructor(name,age){
        this.name=name
        this.age=age
    }
    show(){
        console.log(this.name,this.age)
    }
}
let p=new Person('jim',23)
p.show()    //jim 23
class Chil extends Person{
    constructor(name,age,role){
        super(name,age)
        this.role=role
    }
}
let c=new Chil('han','23','student')
c.show()    han 23

使用class来定义类,constructor定义构造函数super实现对基类构造的调用,还有extends的继承,都借鉴了java等语言,使js语法变得更易读,易编写。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这