ES5&ES6 day16

  • 一、ES5:

1、保护对象:保护对象的成员(属性和方法)

如何保护:

(1)、四大特性-每一个属性和方法都有四大特性

如何设置四大特性:

        Object.defineProperties(obj,{

                "属性名":{

                        value:实际保存值得地方

                        writable:true/false;//开关:控制着这个属性是否可以被修改;

                        enumerable:true/false;//开关:控制着这个属性是否可以被for in循环遍历到

                        configurable:true/false;//开关:控制着这个属性是否可以被删除

                        }                

          })

(2)、三个级别:

①、防扩展:禁止给对象添加新属性

        object.preventExtensions(obj);

②、密封:禁止给对象添加新属性和删除属性

        object.seal(obj);

③、冻结:禁止给对象添加新属性和删除属性和修改属性

        object.freeze(obj);

2、*数组新的API:3组6个

(1)、判断:判断结果一定是一个布尔值

       ①、 every:每一个——要求每一个元素都要满足,结果才为true,只要一个不满足,结果则为false——类似&&:碰到false就不会在执行后续操作了

        语法:arr.every(function(val,i,arr){

                       //var-当前值

                        //i-当前下标

                        //arr-数组本身

                       return 判断条件

                })

        ②、some:有一些——要求每一个元素都不满足,结果才为false,只要有一个满足,结果则为true——类似  ||:碰到true就不会再执行后续操作了

                语法:arr.some(function(val,i,arr){

                                return 判断条件

                        })

(2)、遍历:将数组中每一个元素取出来执行 相同或相似的操作

              ①、  forEach:遍历数组,直接修改原数组

                语法:arr.forEach(function(var,i,arr){

                                直接操作

                        })

                ②、map:遍历数组,不修改原数组,返回一个新数组

                        语法:var newArr=arr.map(function(val,i,arr){

                                        return 操作;

                                      })

(3)汇总和过滤:

        ①、过滤:筛选出自己想要的,但是不会修改原数组

                语法:var newArr=arr.filter(function(val,i,arr){

                                return 判断条件

                                })

        ②、汇总:把数组中的每个元素都汇总到一起

                语法:var result=arr.reduce(function(prev,val,i,arr){

                                return prev+val

                        },基础值)

以上6个API的底层都是for循环,目的-简化for循环

3、Object.create():希望根据父对象创建子对象,继承自动设置完毕。

        语法:var 子对象=Object.create(父对象,{

                                       "自由属性":{四大特性},

        })

4、面试:严格模式:很严格

        开启:在你的任何作用域的顶部都可以加上这句话:"use strict"

        功能:1、禁止给未声明的变量赋值-解决了全局污染

                  2 、禁默失败升级为错误

5、*****call/apply/bind:不是自己方法也可以使用,

        (1)、call/appiy:【临时替换函数中心的this】-借用

                        语法:函数名.call(借用的对象,实参,.....);-单独传入每一个实参

                                   函数名.apply(借用的对象,[实参,....]);-只能传入一个实参,是一个数组,但是其实apply也会悄悄地将数组打散

                        强调:call/apply,相当于立刻调用函数,立刻执行

        (2)、bind:【永久替换了函数中的this】-买

                3件事:

                ①、创建了一个和原函数功能完全相同的新函数

                ②、新函数中的this永久的绑定固定为了指定的对象,别人借不走

                ③、将新函数中的部分参数永久固定

                语法:var 新函数=原函数.bind(指定对象,永久固定参数,.....);-不是立刻执行,需要自己调用

                 强调:bind绑定的新函数是没有办法被call/apply借走的

        推荐使用:call/apply-借

        固定套路:

                1、Math.max/min.apply(Math,arr)

                2、Object.prototype.toString.call/apply(arr)==="[object Array]"

                3、***类数组转为不同数组:保存一下=Array.prototype.slice.call/apply(类数组)

二、ES6:简化了语法-都是干货

1、*模板字符串:可以在字符串中放入变量,不需要在做字符串的拼接了,简化了输入法的切换,${} 还实现了一个简单的js环境

        语法:我的名字${name}

2、*块级作用域:尽量以后创建变量【优先】使用let关键字

        let  变量名=值

        作用:

                1、禁止了声明提前

                2、添加了块级作用域:一个{}就是一个块

                3、记录者当前触发事件的元素的下标

3、***箭头函数:简化回调函数

        公示:去掉function,在()和{}之间添加=>,如果形参只有一个,省略()如果函数体只有一句话,省略{},如果函数体只有一句话并且是return,return和{}都省略

        特殊:千万不要将事件也简化为箭头函数-this会失效-暂时

4、for of 循环-不推荐

        for(var v of arr){

                v;//当前元素

}

缺点:1、不能修改原数组,只能返回新数组

           2、不支持hash数组,不支持对象

                                

你可能感兴趣的:(javascript,html5)