• 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()

  • 相关阅读:
    如何划分与组织内存(上)?
    CountDownLatch和CyclicBarrier:如何让多线程步调一致?
    怎样用读写锁快速实现一个缓存?
    并发容器的前世今生是怎样的?
    java的原子类到底是啥?ABA,CAS又是些什么?
    设置工作模式与环境(中):建造二级引导器
    希尔排序
    order by是怎样工作的?
    如何用信号量去实现一个限流器?
    读多写少的场景下,竟然还有比读写锁更牛X的锁?
  • 原文地址:https://www.cnblogs.com/koala0521/p/7275246.html
Copyright © 2020-2023  润新知