zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    hdu 5446 Unknown Treasure lucas和CRT
    Hdu 5444 Elven Postman dfs
    hdu 5443 The Water Problem 线段树
    hdu 5442 Favorite Donut 后缀数组
    hdu 5441 Travel 离线带权并查集
    hdu 5438 Ponds 拓扑排序
    hdu 5437 Alisha’s Party 优先队列
    HDU 5433 Xiao Ming climbing dp
    hdu 5432 Pyramid Split 二分
    Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造
  • 原文地址:https://www.cnblogs.com/koala0521/p/7275246.html
Copyright © 2011-2022 走看看