javascript ES5、ES6的一些知识
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的一些知识的更多相关文章
- JavaScript Learning Paths(ES5/ES6/ES-Next)
		JavaScript Learning Paths(ES5/ES6/ES-Next) JavaScript Expert refs https://developer.mozilla.org/en-U ... 
- Atitit js版本es5 es6新特性
		Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ... 
- 简述ES5 ES6
		很久前的某一天,一位大神问我,你知道ES6相对于ES5有什么改进吗? 我一脸懵逼的反问,那个啥,啥是ES5.ES6啊. 不得不承认与大神之间的差距,回来深思了这个问题,结合以前的知识,算是有了点眉目. ... 
- javascript的ES6学习总结(第二部分)
		1.数组循环 介绍数组循环之前,先回顾一下ES5数组的循环 (1)数组遍历(代替普通的for):arr.forEach(callback(val,index,arr){todo}) //val是数组的 ... 
- Atitit js es5 es6新特性 attilax总结
		Atitit js es5 es6新特性 attilax总结 1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 ... 
- javascript的ES6学习总结(第三部分)
		1.ES6中的面向对象的类 1.1.定义类 在ES5中,我们写一个类,通常是这么写的 function Person(name,age){ this.name = name; this.age = a ... 
- React/React Native的 ES5 ES6 写法对照
		ES5 ES6 模块 var React = require("react-native); var { Image, Text, View } = React; import Re ... 
- Javascript语言精粹之正则表达式知识整理
		Javascript语言精粹之正则表达式知识整理 1.正则表达式思维导图 2.正则表达式常用示例 2.1 移除所有标签,只留下innerText var html = "<p>& ... 
- javascript的ES6学习总结(第一部分)
		ES6(ESNext学习总结——第一部分) ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版. ECMA每年6月份,发布一个版本 201 ... 
- 【转】React Native中ES5 ES6写法对照
		很多React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教程和例子都是 ... 
随机推荐
- linux 中  svn 服务器搭建 重启
			鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始****** ... 
- MySQL数据库基础(一)(启动/停止、登录/退出、语法规范及最基础操作)
			1.启动/停止MySQL服务 启动:net start mysql 停止:net stop mysql 2.MySQL登录/退出 登录:mysql 参数:如果连接的是本地服务器,一般用命令:my ... 
- sqlite不存在记录则插入数据
			问题:如下图在Sqlite数据库中存在一张Student表,现需要向表中插入数据,如果不存在同名记录则插入,否则不进行插入操作. 解答:利用not exists语句,如下: insert into [ ... 
- 由select引发的思考
			一.前言 网络编程里一个经典的问题,selec,poll和epoll的区别?这个问题刚学习编程时就接触了,当时看了材料很不明白,许多概念和思想没有体会,现在在这个阶段,再重新回头看这个问题,有一种豁然 ... 
- Redux:从action到saga
			前端应用消失的部分 一个现代的.使用了redux的前端应用架构可以这样描述: 一个存储了应用不可变状态(state)的store 状态(state)可以被绘制在组件里(html或者其他的东西).这个绘 ... 
- 转 Caffe学习系列(2):数据层及参数
			http://www.cnblogs.com/denny402/p/5070928.html 要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个 ... 
- ORACLE虚拟索引(Virtual Index)
			ORACLE虚拟索引(Virtual Index) 虚拟索引概念 虚拟索引(Virtual Indexes)是一个定义在数据字典中的假索引(fake index),它没有相关的索引段.虚拟索引的目 ... 
- 常用u-boot命令详解(全)
			U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,命令行模式模式下支持"Tab"键的命令补全和命令的历史记录功能.而且如果你输入的命令的前几个字符和别的 ... 
- 视频显示格式720p
			720p是一种视频显示格式.字母p意为逐行扫描(progressive scan),数字720则表示水平方向有720条扫描线. 通常720p的画面分辨率为1280×720,一般亦可称为高画质(HD). ... 
- HighCharts之2D柱状图、折线图的组合双轴图
			HighCharts之2D柱状图.折线图的组合双轴图 1.实例源码 DoubleAxis.html: <!DOCTYPE html> <html> <head> & ... 
