ES6

标签(空格分隔): ES6


严格模式 "use strict"

注意:严格模式也有作用域,如果在某个函数内部声明的话,只在该函数内部有作用
    1) 严格模式下全局变量声明必须用 var,否则会报错; var a = 10;

    2)严格模式下函数直接调用时,内部的this指向 undefined(非严格模式时,指向window);

    function fn(){
console.log(this);
}
fn(); //打印 undefined 3) 严格模式下 delete 不能删除全局变量,会报错; 4) 严格模式下,函数参数不能重名; 5)严格模式下,arguments设置为关键字,不能赋值,不追踪形参值的变化,只储存实参的集合; funtion fn1(a,b){
a = 10; //修改不起作用
console.log(a,b);
}
fn1(1,2); // 打印 [1,2] 6)函数必须声明在顶层,或者函数内部,不能在逻辑语句中声明; 7)函数表达式中声明一个有名函数的话,函数名会作为局部变量,只能在函数内部使用; var a = function fn2(){
console.log( fn2 );
}
a(); // 打印 整个函数 console.log( fn2 ); //会报错 ( fn2 is not defined)

es6新语法

let

let 声明变量

1. let 声明的变量在预解析的时候不会提前;
2.
2. let 声明的变量不会挂载再window上;
3.
3.let 声明得变量只能在当前作用域中使用; 例如for循环中用let 声明 i 再for循环外面,不能使用 i;
4. 用 let 声明变量,在当前块级作用域中 , 名字不能重复;
  • 暂存死区

    从块的开始到声明这段的区域

  • 什么是块级作用域

    一对{}包括的区域称为代码块;

    块级作用域指一个变量或者函数只在该区域才起作用。

  • 如何形成块级作用域 使用let关键字在代码块中声明的变量,只能在该代码块及子级作用域起作用

const 声明常量 常量的值不可以修改,行业惯例常量名全大写;

    const A = 10;
A = 20; // 会报错;

什么是解构赋值

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

数组的解构赋值语法
var [a, b, c] = [1, 2, 3]; 对象的解构赋值语法
var { foo, bar } = { foo: "aaa", bar: "bbb" }; 解构赋值时可以够变量赋默认值
var [a=0, b=0, c=0] = [1, 2];
console.log(a,b,c) //打印 1,2,0 解构赋值的作用
函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便。
funtion fn(){ return [1,2,3];
}
var [a,b,c] = fn(); console.log(a,b,c); // 1,2,3

Number 方法扩展

Number.isNaN( XXX ); 检测传入的参数是否是NaN
Number.isFinite( n )用来检查一个数值(n)是否为有限的(finite);
例子:
Number.isFinite(NaN) // false
Number.isFinite(1/3) // true 无线小数也被判定为有限的
Number.isFinite(Infinity) // false

Math

Math.sign()  // 去除小数,取整数

Math.sign方法用来判断一个数到底是正数、负数、还是零。
它会返回五种值:
参数为正数,返回+1;
参数为负数,返回-1;
参数为0,返回0;
参数为-0,返回-0;
其他值,返回NaN。 Math.cbrt() // 求立方根 Math.cbrt(8) // 2

for of(便利线性集合(有序集合)的 value 值

遍历数组:
var arr = [1,2,3]
for (let value of arr){
console.log(value) // 1,2,3
}

for of 直接便利对象会报错,因为对像没有遍历器接口(对象是非线性的集合没有顺序);

Object.assign 合并对象

	var obj = {a:1,b:2};
var obj2 = {c:3};; console.log( Object.assign(obj,obj2) ) // {a:1,b:2,C:3} console.log( obj ) // {a:1,b:2,C:3}

函数参数的默认值:

function fn(x,y=3){
console.log( y );
return x + y;
}
fn(1,2) //打印 2
fn(1) //打印默认值3

rest形式的参数:

函数有多个参数时,为了方便接收可以用...arg (arg是一个变量) 来储存形参到数组中
function fn2(...arg){
console.log( arg ); }
fn2(1,2,3); 打印 //[1,2,3] function fn3(a,...arg){ console.log( arg );
}
fn3(1,4,5,6) 打印 //[4,5,6] 注意:arg必须是最后一个参数,后面不可以再写参数,会报错

(...arr)扩展运算符

把数组的每一项用逗号分割成一个参数序列;
var arr = [1,2,3,4];
console.log(...arr); 打印 // 1 2 3 4 function fn(...a){
console.log(a);
}
fn(...arr); // 打印结果[1,2,3,4] (...arr 把数组的每一项都转成参数传入函数, ...a 又把参数储存到数组中 )

箭头函数()=》{}

箭头函数注意事项:
1.箭头函数不能作为构造函数;
2. 箭头函数中不能使用 arguments可以用rest方式接收参数(...arg);
3.箭头函数中的this 指向定义函数时的作用域中的this; var a = ()=>{
console.log(1);
}
a(); // 打印 1 ---------- var x = 2;
document.onclick = function(){
this.x = 1;
let a = ()=>{
console.log(this.x);
}
a();
}
点击document的时候,打印 1 ;

(Set 和 Map )

Set 和 Map是数据结构,就像似数组和对象,的用来储存数据的仓库;

Set 类似数组,但是成员的值都是唯一的,没有重复的值。

Set([array])

ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set是一个构造函数,可以传入一个数组初始化默认值。

Set的一些方法

set.size

Set实例的成员个数(数组的长度)

set.add(value)

为Set的实例添加值

set.delete(value)

删除Set实例的值

set.has(value)

判断传入的参数是否为set的成员

set.clear()

清除set中所有成员

用Set和扩展用算符实现合并数组并且去重

var arr1 = [1,2,3];
var arr2 = [3,4,6]; [...arr1,...arr2] //利用扩展用算符展开到一个数组中; new Set([...arr1,...arr2]) //set去重 var arr = [ ...new Set([...arr1,...arr2]) ] //再展开到新数组

Map

ES6提供了map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

Map也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组

map.get(key) //通过key获取value

map.set(key,value) //为Map的实例添加新键值对

map.has(key) // 查找key值是否存在。

map.delete(key) //删除对应键值对 map.clear()

javascript ES5、ES6的一些知识的更多相关文章

  1. JavaScript Learning Paths(ES5/ES6/ES-Next)

    JavaScript Learning Paths(ES5/ES6/ES-Next) JavaScript Expert refs https://developer.mozilla.org/en-U ...

  2. Atitit js版本es5 es6新特性

    Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...

  3. 简述ES5 ES6

    很久前的某一天,一位大神问我,你知道ES6相对于ES5有什么改进吗? 我一脸懵逼的反问,那个啥,啥是ES5.ES6啊. 不得不承认与大神之间的差距,回来深思了这个问题,结合以前的知识,算是有了点眉目. ...

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

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

  5. Atitit js es5 es6新特性 attilax总结

    Atitit js es5 es6新特性 attilax总结 1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 ...

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

    1.ES6中的面向对象的类 1.1.定义类 在ES5中,我们写一个类,通常是这么写的 function Person(name,age){ this.name = name; this.age = a ...

  7. React/React Native的 ES5 ES6 写法对照

      ES5 ES6 模块 var React = require("react-native); var { Image, Text, View } = React;   import Re ...

  8. Javascript语言精粹之正则表达式知识整理

    Javascript语言精粹之正则表达式知识整理 1.正则表达式思维导图 2.正则表达式常用示例 2.1 移除所有标签,只留下innerText var html = "<p>& ...

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

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

  10. 【转】React Native中ES5 ES6写法对照

    很多React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教程和例子都是 ...

随机推荐

  1. Mysql(三)-2:数据类型

    一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data ...

  2. js利用闭包封装自定义模块的几种方法

    1.自定义模块: 具有特定功能的js文件 将所有的数据和功能都封装在一个函数的内部 只向外暴露一个包含有n个方法的对象或者函数 模块使用者只需要通过模块暴露的对象调用方法来实现相对应的功能 1.利用函 ...

  3. 将Object对象转换成Map 属性名和值的形式

    将Java对象转换成Map的键值对形式 代码: package cn.lonelcoud.util; import com.sun.deploy.util.StringUtils; import ja ...

  4. iOS原生和H5的相互调用

    为什么现在越来越多的APP中开始出现H5页面? 1,H5页面开发效率更高,更改更加方便: 2,适当缩小APP安装包的大小: 3,蹭热点更加方便,比如五一,十一,双十一搞活动: 那么为什么说H5无法取代 ...

  5. POJ - 2698 贪心

    经典面替换算法,每次选择最远的那个碟片请求进行替换. AC代码 #include <cstdio> #include <cmath> #include <algorith ...

  6. home目录迁移至新分区

    在用户home目录越来越大时,就可以考虑将home目录迁移至新的分区. 1.创建新分区. fidisk /dev/sda:用磁盘管理器打开磁盘 n:新建 +10g :设置分区为10G w :保存 保存 ...

  7. Spark SQL1.2与HDP2.2结合

    1.hbase相同的rowkey里存在多条记录问题的调研解决方案 VERSIONS => 3,Hbase version 最多插入三条记录 将一个集群hbase中表 "Vertical ...

  8. orcale和hive常用函数对照表(?代表未证实)

    函数分类 oracle hive 说明 字符函数 upper('coolszy') upper(string A) ucase(string A) 将文本字符串转换成字母全部大写形式 lower('K ...

  9. Maven就是这么简单

    什么是Maven Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一 ...

  10. ORACLE不可见索引(Invisible Indexes)

    不可见索引概念 不可见索引(Invisible Index)是ORACLE 11g引入的新特性.不可见索引是会被优化器忽略的不可见索引,除非在会话或系统级别上将OPTIMIZER_USE_INVISI ...