• 第四周预习


    1. JavaScript 的版本

       JavaScript这种语言的基本语法结构是由ECMAScript来标准化的, 所以我们说的JavaScript版本一般指的是ECMAScript版本.
      

    2009年12月,ECMAScript 5.0版正式发布

    2011年6月,ECMAscript 5.1版发布

    2015年6月,ECMAScript 6正式发布,并且更名为“ECMAScript 2015”。

    2016年6月,ECMAScript6.1发布, 与ECMAScript6差异较小

    ES5 : ECMAScript 5

    ES5的严格模式:

      所谓严格模式,从字面上就很好理解,即更严格的模式 在这种模式下执行,浏览器会对JS的要求更苛刻,语法格式要求更细致,更符合逻辑。
    
      怪异模式:就是我们之前一直使用的开发模式,就叫怪异模式。因为很多时候出来的结果是非常怪异的,所以才称之为怪异模式。
    

    使用严格(全局)模式

        "use strict";
    
        n = 10;
    
        console.log(n);
    

    使用严格(局部)模式

        function fn(){
    
            "use strict";
    
            n = 10
    
            console.log(n);
    
        }
    

    Javascript 为什么要设立严格模式:

    1.消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

    2.代码运行的一些不安全之处,保证代码运行的安全;

    3.提高编译器效率,增加运行速度;

    例如以下几点:

    1. 不可以省略var声明变量

    2. 禁止函数使用this关键字指向全局变量

    3. 禁止使用八进制方法

    4. 不允许在非函数的代码块内声明函数

    5. 严格模式下,arguments变量,形参是不会变(不同步)

    ES5-Array新增

    map(): 和forEach非常相似,都是用来遍历数组中的每一项的,区别是map的回调函数中支持return返回

    不管是forEach还是map 都支持第二个参数值,第二个参数的意思是把匿名回调函数中的this进行修改。

    var arr = [1,2,3,4,5];

    var newArr = arr.map(function(value, index, array){

        return value * 2;
    

    });

    console.log(arr); //[1,2,3,4,5]

    console.log(newArr); //[2,4,6,8,10]

    注意:forEach和map不支持IE8及以下

    ES5-Array新增

    reduce()用法: 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终为一个值,是ES5中新增的一个数组逐项处理方法
    

    var result = arr.reduce(function(pre, cur, index, array){

    console.log("前一个值:" + pre + "当前值:" + cur + ", 下标:" + index + ", 数组:" + array);

    return cur;

    }, 10);

    reduce接收四个两个参数, 第二个参数可选(为pre的初始值)

    第一个参数是回调函数,该回调函数中又包含四个参数, 分别为:

    pre:上一次调用回调函数时的返回值,或者初始值
    
    cur:当前正在处理的数组元素
    
    index : 当前正在处理的数组元素下标
    
    array : 调用reduce()方法的数组
    

    result: 遍历完数组后的最终结果

    什么是ES6?
    ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。

      ES6的目标,是使得JavaScript语言可以用来编写大型的复杂的应用程序,成为企业级开发语言。

    支持ES6的浏览器:

    虽说ES6已经作为新一代标准发布了,但是各大浏览器对新功能实现支持的还需要一段时间,那么我们怎么知道自己使用的浏览器是否支持ES6的相应功能呢?
    

      不用紧张,对ES6的支持可以查看kangax.github.io/es5-compat-table/es6/,在这里可以清晰的了解到不同版本的浏览器对ES6功能的支持情况。随着时间的推移,支持度会越来越高了。

      由于浏览器对ES6的支持度还不完整, 所以在实际开发过程中我们通常需要将ES6的代码转换成ES5。
    

    ES6-String新增方法:
    传统上,JavaScript只有 indexOf 方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。
    includes():返回布尔值,表示是否找到了参数字符串。
    startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
    endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
    repeat(): 返回一个新字符串,表示将原字符串重复n次.

    模板字符中,支持字符串插值
    document.write(Hello ${first} ${last}!); //注意引号

    ES6-Array新增:
    Array.from()方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)
    Array.from(arrayLike, mapFn, thisArg)
    Array.from()还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理.
    Array.of(): 方法用于将一组值,转换为数组
    Array.of(3, 11, 8) // [3,11,8]
    find()和findIndex()

    数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。

    箭头函数:
    ES6允许使用“箭头”(=>)定义函数
    var fn = v => v;

    上面的箭头函数等同于:
    var fn = function(v) {
    return v;
    }

    如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
    var fn = () => 5; 等同于: var fn = function () { return 5 };
    var sum = (a, b) => a+b; 等同于:
    var sum = function(a, b) {
    return a+b;
    };

    如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,使用return语句返回。
    var sum = (a, b) =>( { let c = a+b; return c; })

    由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号。
    var fn = id => ({ id: 11, name: "zhangsan" });

    箭头函数使得表达更加简洁。
    const isEven = n => n % 2 == 0;
    const square = n => n * n;

    箭头函数可以简化回调函数的写法:

    // 正常函数写法

    [1,2,3].map(function (x) {

      return x * x;
    

    });

    // 箭头函数写法

    [1,2,3].map(x => x * x);

    ES6-Object新增:

    属性的简写:
    
      var foo = 'bar';
    
      var baz = {foo};    // 等同于 var baz = {foo: 'bar'};
    
    方法的简写:
    
      var o = {
    
            method() { 
    
                return "Hello!";
    
            }
    
      };
    

    属性名表达式:

      let obj = {};
    
      obj['a'+'bc'] = 123;
    
      console.log(obj);
    
    方法名表达式:
    
      let obj = {
    
            ['h'+'ello']() {
    
                return 'hi';
    
            }
    
      };
    

    Object.is( , )用来比较两个值是否严格相等。它与严格比较运算符(===)的行为基本一致, 不同之处只有两个:一是+0不等于-0,二是NaN等于自身

    Object.assign() 方法用来将源对象(source)的所有可枚举属性,复制到目标对象(target)。它至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。只要有一个参数不是对象,就会抛出TypeError错误。

    var target = { a: 1 };
    
    var source1 = { b: 2 };
    
    var source2 = { c: 3 };
    
    Object.assign(target, source1, source2);
    
    console.log(target) // {a:1, b:2, c:3}
    

    ES6-Map:

    Map 是一个“超对象”,其 key 除了可以是 String 类型之外,还可以为其他类型(如:对象)

    let map = new Map([[1, 'one'],[2, 'two'],[3, 'three']]);

    他的方法和 Set 差不多:

    size:返回成员总数。

    set(key, value):设置一个键值对。

    get(key):读取一个键。

    has(key):返回一个布尔值,表示某个键是否在Map数据结构中。

    delete(key):删除某个键。

    clear():清除所有成员。

    keys():返回键名的遍历器。

    values():返回键值的遍历器。

    entries():返回所有成员的遍历器。

  • 相关阅读:
    线性最小二乘两种方法
    Coursera machine learning 第二周 编程作业 Linear Regression
    Coursera machine learning 第二周 quiz 答案 Octave/Matlab Tutorial
    Coursera machine learning 第二周 quiz 答案 Linear Regression with Multiple Variables
    Codeforces Round #392 (Div. 2) F. Geometrical Progression
    四边形不等式优化DP——石子合并问题 学习笔记
    Codeforces Round #373 (Div. 2) E. Sasha and Array
    hihoCoder #1388 : Periodic Signal
    hihoCoder #1388 : Periodic Signal ( 2016 acm 北京网络赛 F题)
    Java动态代理分析
  • 原文地址:https://www.cnblogs.com/wmf0616/p/16369428.html
Copyright © 2020-2023  润新知