第一部分:

1.初始化项目 npm init -y
2.安装ES6 环境
.babelrc 文件
babel-cli -g
babel-ecmascript2015 babel-cli --save-dev

#######################################################################################################

第二部分:
变量的三种声明方式:
var -- 全局声明(容易产生污染)
let -- 局部声明(只存在于当前作用域)
const -- 变量声明之后,不允许随意更改(也可理解为常量)

#######################################################################################################

第三部分:
1.变量的解构赋值
<< ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。解构赋值在实际开发中可以大量减少我们的代码量,并且让我们的程序结构更清晰。

<< 1.
let a = 0;
let b = 1; =>
let c = 2;
let [a,b,c] = [1,2,3] => var a = 1,b = 2, c = 3;
let [a,[b,c],d] = [1,[2,3],4] => var a = 1,b = 2,c =3 ,d = 4
注:如果等号两边形式不一样,很可能获得undefined或者直接报错。

<< 2.数组的解构:
1>
let [foo=true] = [];
console.log(foo) // true
2>
let [a,b="zcc"] = ['hello']
console.log(a+b) // hellozcc
3>undefined相当于什么都没有,b解构成了null。
let [a,b="zcc"] = ['hello',undefined]
console.log(foo) // hellozcc
4>null 有值,但值为null,b取null。
let [a,b="zcc"] = ['hello', null]
console.log(foo) // hello null

<< 3.对象的解构
注意:对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

1.解构不仅可以用于数组,还可以用于对象。
let foo;
({foo,bar} = {foo : 'zcc',bar : '000'});
console.log(foo+bar) // zcc000
<< 4.字符串的解构
字符串也可以解构,这是因为,此时字符串被转换成了一个类似数组的对象。
const [a,b,c,d]="JFAS";
console.log(a);
console.log(b);
console.log(c);
console.log(d);

#######################################################################################################

第三部分:扩展运算符和rest运算符
<< 1.对象扩展运算符(...):
(主要用于:当我们声明一个变量方法,但不确定参数个数的时候)
function argument(...arg){
console.log(arr[0])
console.log(arr[1])
console.log(arr[2])
console.log(arr[3])
}
argument(1,2,3)

1.eg: 这里的arr2 是对arr1 的映射
let arr1=['www','xiaoming','com'];
let arr2=arr1;
console.log(arr2); // www,xiaoming,com
arr2.push('shengHongYu');
console.log(arr1); // www,xiaoming,com,shengHongYu
2.eg: 这里的arr2 是对arr1 的扩展
let arr1=['www','xiaoming','com'];
let arr2=[...arr1];
console.log(arr2); // www,xiaoming,com
arr2.push('shengHongYu');
console.log(arr2); // www,xiaoming,com,shengHongYu
console.log(arr1); // www,xiaoming,com
<< 2.rest(剩余) 运算符

function argument(first,...arg){
console.log(arg.length)
for(let i = 0;i < arg.length; i++){
console.log(arg[i]) // 1,2,3,4,5,6
}

for(let val of arg){ // ES6 循环更高效率
console.log(val) // 1,2,3,4,5,6
}

}
argument(0,1,2,3,4,5,6) // 6

#######################################################################################################

第五部分:字符串模版
ES6对字符串新增的操作,最重要的就是字符串模版,字符串模版的出现让我们再也不用拼接变量了,而且支持在模板里有简单计算操作。
<< 1. 字符串拼接
let str1 = 'zcc2333';
let str2 = '字符串2'; // let str2 = `${str1}我是一个字符串`;

<< 2.查找字符串
let str = "zcc2333";
let str2 = "zcc2333我是一个字符串";

console.log(str2.indexOf(str1)); //返回索引,没有返回-1;
console.log(str2.includes(str1)); //返回 true 不存在返回false
console.log(str2.startsWith(str1)) //返回 查看开头是否有 true/false
console.log(str2.endsWith(str1)) //返回 查看结尾是否有 true/false

<< 3.字符串复制
document.write('zcc2333|'.repeat(10)) // 第一个参数是要复制的字符串,repeat(num) 要复制的个数

#######################################################################################################

第六部分:ES6数字操作

<< 1.二进制和八进制
1>. 二进制
二进制声明: 二进制的英文单词是Binary,二进制的开始是0(零),然后第二个位置是b(注意这里大小写都可以实现),然后跟上二进制的值就可以了。
let binary = 0B100110;
console.log(binary) // 21
2>. 八进制
八进制声明:八进制的英文单词是Octal,也是以0(零)开始的,然后第二个位置是O(欧),然后跟上八进制的值就可以了。
let octonary = 0O666;
console.log(octonary) // 438
<< 2.数字判断和转换
1>. 数字验证Number.isFinite( xx )
注意:可以使用Number.isFinite( )来进行数字验证,只要是数字,不论是浮点型还是整形都会返回true,其他时候会返回false。
let a = 11/4;
console.log(Number.isFinite(a));//true
console.log(Number.isFinite('xiaoming'));//false
console.log(Number.isFinite(NaN));//false
console.log(Number.isFinite(undefined));//false
3>. NaN验证
NaN是特殊的非数字,可以使用Number.isNaN()来进行验证。下边的代码控制台返回了true。
console.log(Number.isNaN(NaN)); // true
4>. 判断是否为整数Number.isInteger(xx)
let a=123.1;
console.log(Number.isInteger(a)); //false
5>. 整数转换Number.parseInt(xxx)和浮点型转换Number.parseFloat(xxx)
let a='9.18';
console.log(Number.parseInt(a)); // 9
console.log(Number.parseFloat(a)); // 9.18
<< 3.整数取值范围操作
注意:整数的操作是有一个取值范围的,它的取值范围就是2的53次方。我们先用程序来看一下这个数字是什么。
let a = Math.pow(2,53)-1;
console.log(a); //9007199254740991

1>. 最大安全整数
console.log(Aumber.MAX_SAFE_INTEGER(a))
2>. 最小安全整数
console.log(Number.MIN_SAFE_INTEGER(a))
3>. 安全整数判断
let a = Math.pow(2,53) - 1;
console.log(Nuber.isSafeInteger(a)) // fasle

#######################################################################################################

第七部分:ES6中新增的数组知识(1)

<< 1. json 转换数组方法 Array.from()
let json1 = {
"0": "小明",
"1": 18,
'2': "china",
length: 3
}
这就是一个标准的JSON数组格式,跟普通的JSON对比是在最后多了一个length属性。只要是这种特殊的json格式都可以轻松使用ES6的语法转变成数组。在ES6中绝大部分的Array操作都存在于Array对象里。我们就用Array.from(xxx)来进行转换。然后再控制台输出一下:
let arr = Array.from(json)
console.log(arr) // arr = ["小明",18,"china"]

<< 2.Array.of()
它负责把一堆文本或者变量转换成数组。在开发中我们经常拿到了一个类似数组的字符串,需要使用eval来进行转换,我们知道 eval 转换的效率是很低的,它会拖慢我们的程序。这时候我们就可以使用Array.of方法。我们看下边的代码把一堆数字转换成数组并打印在控制台上:
数字转数组:
let arr =Array.of(3,4,5,6);
console.log(arr); // [3,4,5,6]

字符串转数组:
let arr =Array.of('小明','18','china');
console.log(arr); // ['小明','18','china']

<< 3.find( )实例方法:
所谓的实例方法就是并不是以Array对象开始的,而是必须有一个已经存在的数组,然后使用的方法,这就是实例方法。
这里的find方法是从数组中查找。在find方法中我们需要传入一个匿名函数,函数需要传入三个参数:
1> value: 表示当前查找的值。
2> index: 表示当前查找的数组索引。
3> arr: 表示当前数组。

#####################################################################################

第八部分:ES6中新增的数组知识(2)

<< 1.fill( )实例方法:
fill()也是一个实例方法,它的作用是把数组进行填充,它接收三个参数,第一个参数是填充的变量,第二个是开始填充的位置,第三个是填充到的位置。
let arr=[0,1,2,3,4,5,6,7,8,9];
arr.fill('xiaoming',2,5);
console.log(arr);

<< 2.for...of循环:
这种形式比ES5的for循环要简单而且高效。先来看一个最简单的for…of循环。
let arr = ['小明','18','china.'];

1>. 循环数组中的元素
for(let item of arr){
console.log(item)
}
// '小明' '18' 'china.'
2>. 循环数组中的下标 arr.keys() -> es6 中的实例方法
for(let item of arr.keys()){
console.log(item)
}
// 0 1 2
2>. 同时输出数组的内容和索引
for( let [index,val] of arr.entries){
console.log(index+':'+val)
}
// 0 : 小明 1 : 18 2 : china
<< 3.entries( )实例方法:
entries()实例方式生成的是Iterator形式的数组,那这种形式的好处就是可以让我们在需要时用next()手动跳转到下一个值。我们来看下面的代码:
let arr=['小明','18','china']
let list=arr.entries(); // 将数组生成条目行的形式
console.log(list.next().value); // [0, "小明"]
console.log(list.next().value); // [1, "18"]
console.log(list.next().value); // [2, "china"]

#####################################################################################

第九部分:ES6中的箭头函数和扩展
回顾一下ES5中的函数写法。写一个函数,进行一个加法计算:
function add(a,b){
return a+b
}
add(2); // undefined
add(2,3); // 2+3 =5

<< 1.默认值
在ES6中给我们增加了默认值的操作,我们修改上边的代码,可以看到现在只需要传递一个参数也是可以正常运行的。
function add(a,b=1){ // b 的默认值为 1
return a+b
}
add(2); // 2+1 = 3
add(2,3); // 2+3 =5

<< 2.主动抛出错误
在使用Vue的框架中,可以经常看到框架主动抛出一些错误,比如v-for必须有:key值。那尤大神是如何做到的那?
其实很简单,ES6中我们直接用throw new Error( xxxx ),就可以抛出错误。
function add(a,b=1){
if(a == 0){
throw new Error('This is error')
}
return a+b;
}
console.log(add(0));
<< 3.函数中的严谨模式
在ES5中就经常使用严谨模式来进行编程,但是必须写在代码最上边,相当于全局使用。在ES6中我们可以写在函数体中,相当于针对函数来使用。
function add(a,b=1){
'use strict'
if(a == 0){
throw new Error('This is error');
}
return a+b;
}
console.log(add(1)); // 浏览器报错,严谨模式不允许使用默认值
<< 3.获得需要传递的参数个数
使用别人的框架时,不知道别人的函数需要传递几个参数怎么办?ES6为我们提供了得到参数的方法(xxx.length).我们用上边的代码看一下需要传递的参数个数。
function add(a,b){
'use strict'
if(a == 0){
throw new Error('This is error');
}
return a+b;
}
console.log(add.length); // 2
当其中的a 或 b 含有默认值时 这时候 add.length 为1.
当其中的a 和 b 都有默认值时 这时候 add.length 为0.
function add(a,b=1){
'use strict'
if(a == 0){
throw new Error('This is error');
}
return a+b;
}
console.log(add.length); // 2

<< 5.箭头函数
注:箭头函数不允许使用 new 构造函数!
add(a,b=1) => a+b;
console.log(add(1,3)) // 4
add(a,b=1) => {
return a+b
}
console.log(add(3)) // 4
注:箭头函数不允许使用 new 构造函数!!!

第十部分:ES6中的函数和数组补漏

<< 1.对象的函数解构
我们在前后端分离时,后端经常返回来JSON格式的数据,前端的美好愿望是直接把这个JSON格式数据当作参数,传递到函数内部进行处理。ES6就为我们提供了这样的解构赋值。
let json = {
a:'小明',
b:'china'
}
function fn({a,b='xiaoming'}){

console.log(a,b);
}
fn(json); // 小明 china

let arr = ['小明','18','china'];
function fun(a,b,c){
console.log(a,b,c);
}
fun(...arr); // '小明' '18' 'china'

<< 2.in的用法
in是用来判断对象或者数组中是否存在某个值的。

1>. 对象判断
let obj={
a:'xiaoming',
b:'小明'
}
console.log('a' in obj); //true
2>. 数组判断 (数组空位的判断)
先来看一下ES5判断的弊端,以前会使用length属性进行判断,为0表示没有数组元素。但是这并不准确,或者说真实开发中有弊端。

let arr=[,,,,,];
console.log(arr.length); // 5

上边的代码输出了5,但是数组中其实全是空值,这就是一个坑啊。那用ES6的in就可以解决这个问题。

let arr=[,,,,,];
console.log(0 in arr); //false

let arr1=['xiaoming','小明'];
console.log(0 in arr1); // true

注意:这里的0指的是数组下标位置是否为空。

<< 3.数组的遍历方法
1>. forEach

let arr=['小明','18','china'];
arr.forEach((val,index)=>console.log(index,val));

forEach循环的特点是会自动省略为空的数组元素,相当于直接给我们筛空了。但是有时候我们需要这样的空数组,那就会非常尴尬了。

2>. filter
let arr=['小明','18','china'];
arr.filter(x=>console.log(x));
// 小明
// 18
// china
// []
3>. some
let arr=['小明','18','china'];
arr.some(x=>console.log(x));
// 小明
// 18
// china
// false
4>. map
let arr=['小明','18','china'];
console.log(arr.map(x=>'web'));
// ["web", "web", "web"]
// undefined

<< 4.数组转换字符串
1>. join()方法
join()方法就是在数组元素中间,加了一些间隔,开发中很有用处。

let arr=['小明','18','china'];
console.log(arr.join('|'));
// '小明|18|china'

2>. toString()方法
// 转换时是用逗号隔开了。

let arr=['小明','22','china'];
console.log(arr.toString());
第十一部分:ES6中对象
<< 1.

ES6 学习体会的更多相关文章

  1. TagHelper的一些个人学习体会(发现了微软官方文档的一个错误)

    最近一直在学习.net core 上周六开始学习Taghelper的自定义,准备周日写个博客和大家分享一下学习体会,无奈周日去考科四了,回来之后就感冒了,现在还没好.可是我发现了微软官方文档的一个错误 ...

  2. ES6学习目录

    前面的话 ES6是JavaScript语言的下一代标准,已经在 2015 年 6 月正式发布.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言 为什么要学 ...

  3. es6学习笔记-class之继承

    继承 上一篇学习了class的概念,在es5时,对象的继承有好几种,原型链继承,借用构造函数继承,组合继承,原型式继承,寄生式继承以及寄生组合式继承,都是按照函数的形式去集成的,现在class也有它的 ...

  4. es6学习笔记-class之一概念

    前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...

  5. javascript的ES6学习总结(第二部分)

    1.数组循环 介绍数组循环之前,先回顾一下ES5数组的循环 (1)数组遍历(代替普通的for):arr.forEach(callback(val,index,arr){todo}) //val是数组的 ...

  6. javascript的ES6学习总结(第一部分)

    ES6(ESNext学习总结——第一部分) ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版. ECMA每年6月份,发布一个版本 201 ...

  7. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  8. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  9. ES6学习笔记<三> 生成器函数与yield

    为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...

随机推荐

  1. finddler的安装与设置

    这是抓取手机包的设置 过滤 新安装的,可能还需要证书问题

  2. 提高篇(1):RMQ问题与ST表

    RMQ是英文Range Minimum/Maximum Query的缩写,是询问某个区间内的最值,这里讲一种解法:ST算法 ST算法通常用在要多次(10^6级别)询问区间最值的问题中,相比于线段树,它 ...

  3. 【jQeury】input输入框状态,input事件,blur事件,focus事件

    //输入框正在输入时 $("#test1").on('input',function(){ alert('正在输入'); }) //输入框得到焦点时 $("#test2& ...

  4. Numpy安装报错:试过N种安装方法终于

    Import numpy时,会报下面的错误 /home/spyros/.local/lib/python2.7/site-packages/numpy/core/multiarray.so: unde ...

  5. Python系列6之面向对象

    目录 生成器和迭代器 字符串格式化 内置函数vars 反射 面向对象编程 一. 生成器和迭代器  1. 生成器 生成器具有一种生成的能力,它仅仅代表着一种生成的能力,当我们需要使用的时候,才会通过迭代 ...

  6. POJ:2367-Cleaning Shifts

    传送门:http://poj.org/problem?id=2376 Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Sub ...

  7. HNU暑假训练第一场C.Ninja Map

    一.题目大意 Intersections of Crossing Path City are aligned to a grid. There are N east-west streets whic ...

  8. Git Pro Book

    目录 2nd Edition (2014) Switch to 1st Edition Download Ebook The entire Pro Git book, written by Scott ...

  9. python基础之数据类型与变量patr2

    一.元素分类 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中. 即: ...

  10. 16,Flask-Migrate

    终于到了Flask-Migrate,之前在学习Flask-SQLAlchemy的时候,Flask支持 makemigration / migrate 吗? 答案在这里该诉你,如果你同时拥有两个三方组件 ...