es6 新语法分享给爱前端的伙伴
相信es6大家并不陌生,那么我还是简单介绍一下es6,es是15年发布的,可以用babel转化成es5可以支持低端浏览器,es6是一种新的语法,流行的库基本都是基于es6开发的。所以小伙伴要掌握哦!而且写起来简单优雅。
下面我给大家介绍一下es的常用语法。
一、let和const
这两个语法相信很多小伙伴已经经常使用了,下面我介绍一下var ,let, const 的区别
1、var:
var a=1; console.log(a);//1 console.log(window.a) ;//1
// 如此可见用var声明一个变量a 是直接挂载到了window中哦,作用于全局,从而会污染全局。 {var a=1}
console.log(a) //1
{let a=1}
console.log(a) //a is not defined
2、let和const
let与const都是只在声明所在的块级作用域内有效。
let 声明的变量可以改变,值和类型都可以改变,没有限制。
const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
const a ;//报错,一旦声明变量,应该立即赋值!
const b = 2;
b = 3//报错,因为定义常量之后不能成重新赋值!! 对于复合类型的变量,如数组和对象,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心。
//不会报错,因为names指向的地址不变,改变的只是内部数据
const names = [];
names[0] = 1
names[1] = 2
names[2] = 3
下面介绍一个小的语法点
如果想让定义的对象或数组的内部数据也不能够修改和改变,可以使用object.freeze(names)进行冻结,这样为对象添加新属性就不起作用。
除了将对象本身冻结,对象的属性也应该冻结。下面是一个将对象彻底冻结的函数

var constantize = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach( (key) => {
if ( typeof obj[key] === 'object' ) {
constantize( obj[key] );
}
});
};
有没有对let和const有更深的理解呢~~ 二、模板字符串
//正常我们拼接字符串这样写
let name =“boke”
console.log("我的名字是"+name) //如果是模板字符串 console.log(`我的名字是${name}`) // 模板字符串也支持多行换行的。 let content=` ${name} `
三 、箭头函数 相信我们react开发更熟悉这个箭头函数了,经常用箭头函数来解决this指向的问题。
// 曾经我们这样写函数
function hello(name){
console.log(`hello!${name}`);
}
// 掌握了箭头函数可以这样写
const hello1 = (name) => {
console.log(`hello!${name}`);
}
hello('lili') //hello!lili
hello1('lili') //hello!lili
const num = x =>x*2
num(5) //
// 还可以设置默认值哦
const hello = (name='wenwen') =>{
console.log(`hello!${name}`);
}
hello() //hello!wenwen
hello('zhangfei') // hello!zhangfei
四、展开符的使用
//曾经我们的想给函数传递一个数组我们这样做。
function hello(name1,name2){
console.log(name1,name2);
}
let arr=['wenwen','haomei']
hello.apply(null,arr)
// 现在我们可以这样做哦
hello(...arr)
* 补充知识 apply:
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性.
Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)
// 合并数组 对象
let obj ={name:'wenwen'}
let obj1={age:25}
// console.log({...obj,...obj1}) //{name:'wenwen',age:25}
// console.log({...obj,...obj1,job:'程序猿'}) //{name:'wenwen',age:25,,job:'程序猿'}
// 注意 如果有重复,如果有重复的话第二个可以把第一个覆盖
五、对象的扩展(object)
//取key和value
obj={name:'wenwen',age:25,job:'猴子'} console.log(Object.keys(obj));// ["name","age","job"] console.log(Object.values(obj));// ["wenwen",25,"猴子"] console.log(Object.entries(obj));//[["name","age","job"],["wenwen",25,"猴子"]]
六 、解构赋值
批量赋值
const arr=['wenwen','chaoji','meili']
let [arg1,arg2,arg3]=arr
console.log(arg1,arg2,arg3)//wenwen chaoji meili
const obj={name:'wenwen',age:25,job:'猴子'}
let [name,age,job]=obj
console.log(name,age,job);//wenwen chaoji meili
七、class类
class MyId{
constructor (){
this.name ="wenwen"
}
do (){
console.log(`${this.name}写bug`);
}
}
doSome = new MyId()
doSome.do() //wenwen写bug
八、set去重
let arr=[1,1,'2','2','1','1',null,null]
console.log(new Set(arr));//{1,'2','1',null}
但是这里大家可以看到,set返回的是一个对象,但是我们想要的是数组啊。
这样我们就可以用到Array.from了 ,它的作用,就是可以把类数组对象、可迭代对象转化为数组。
let arr=[1,1,'2','2','1','1',null,null]
let arr2=Array.from(new Set(arr));
console.log(arr2);// [1,'2','1',null]
下面的import 和export就不多说了,到处都可以用的到哦,但是必须放在顶部引用才可以呢!
有不足之处希望大家多多交流给个意见。
es6 新语法分享给爱前端的伙伴的更多相关文章
- ES6新语法之let关键字;有别于传统关键字var的使用
ES6新语法于2015年发布:而我这个前端小白在17年才接触到.惭愧惭愧!!不过到目前为止,似乎只有FireFox和Chrome对ES6的支持相对良好.不过既然人家ES6已经出来了,还是要跟上技术的潮 ...
- ES6新语法
ES6新语法概览 简介 ES6是JavaScript语言的新一代标准,加入了一些新的功能和语法,正式发布于2015年6月,亦称ES2015:该标准由ECMA(欧洲计算机制造联合会)的第39号技术专家委 ...
- ES6新语法的介绍
对于ES6新语法,阮一峰有一篇文章介绍的挺详细 http://es6.ruanyifeng.com/#docs/destructuring
- ES6入门五:箭头函数、函数与ES6新语法
箭头函数的基本用法与特点 函数与ES6新语法 一.箭头函数的基本用法与特点 声明箭头函数采用声明变量和常量的关键字:var.let.const 箭头函数的参数:没有参数用"()"空 ...
- 总结常见的ES6新语法特性
前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ...
- 总结常见的ES6新语法特性。
前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ...
- ES6 | ES6新语法 在编码实践中的应用
本章探讨如何将 ES6 的新语法,运用到编码实践之中,与传统的 JavaScript 语法结合在一起,写出合理的.易于阅读和维护的代码. 多家公司和组织已经公开了它们的风格规范,本文的内容主要参考了 ...
- es6新语法系列,查找字符串,模板字符串
一.模板字符串: ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings).除了使用反撇号字符 ` 代替普通字符串的引号 ' 或 " 外,它们看起来与 ...
- ES6新语法(一)
1.常量 ES5没有定义声明常量的方式,ES6标准中引入了新的关键字const来定义常量. 常量必须给初始值: 常量不能在同一作用域内重新定义或赋值: <scr ...
随机推荐
- MapGIS IGServer for java
但是安装完之后,服务里面没有找到igserver服务 IGServer SManager cxf 怎么会找不到类呢?是服务映射出了问题,所以目录找不到.所以怎么配置目录呢?是在xml还是环境变量,还是 ...
- [CSP-S模拟测试97]题解
A.小盆友的游戏 感觉题解解释的很牵强啊……还是打表找规律比较靠谱 对于每个人,它构造了一个期望函数$f(x)$,设它的跟班个数为$cnt[x]$,那么令$f(x)=2^{cnt[x]}-1$(??鬼 ...
- scrapy电影天堂实战(一)创建数据库
原文链接 这里的排版没微信公众号那么友好,建议查看公众号原文 创建数据库 首先我们需要创建数据库和表等来存储数据 创建mysql.cnf配置文件 oot@ubuntu:/mnt/test_scrapy ...
- HTML--JS 定时刷新、时钟、倒计时
<html> <head> <title>定时刷新时间</title> <script language="JavaScript&quo ...
- Scratch可视化的编程工具
1.是什么? 在线编程网址 是一个编程软件,但是不涉及编程语言,是针对青少年开发的编程积木模块. 2.软件的目的是什么? 激发青少年对编程的兴趣 3.怎么用呢? 软件内部是很多积木模块,需要明白每块是 ...
- [Linux] 008 文件处理命令
1. 文件处理命令:touch 命令名称:touch 命令所在路径:/bin/touch 执行权限:所有用户 语法:touch [文件名] 功能描述:创建空文件 范例: 文件名不包含空格 touch ...
- mysql 主从复制(mysql双机热备的实现)
转:http://blog.csdn.net/qq394829044/article/details/53203645 Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题.还好 ...
- jvm性能监控(4)–JVM的监控工具Jconsole
下面主要说一下怎么JConsole远程连接springboot 项目 java \-Djava.rmi.server.hostname=192.131.149.42 \-Dcom.sun.manag ...
- jenkin 构建失败 才发邮件通知
使用场景:自动化测试,一般需要配置定时执行(每天执行一次,没周执行一次),如果有失败,则发邮件给相关人员关注.此时需要使用jenkins的邮件发送配置.修改job的configure配置步骤如下: 1 ...
- 如何做PPT
如何做出更漂亮的PPT? 1.文字对齐,PPT字体最好使用微软雅黑,文档最好使用宋体 2.总分总的叙述形式 3.颜色最好使用冷色系,蓝色.灰色.灰蓝色等等 4.每段话中的重点内容标出特殊颜色 5.可使 ...