JS第四周——day1

122 阅读4分钟

ES:ECMAScript

ES5提供了一些新的API

1、保护对象:保护对象的属性和方法

1、四大特性保护对象

(1)对象的每个属性都有4大特性,其中3个开关默认为true

{
    value: XXX,//保存实际值的地方
    writable: true,//开关:控制属性是否可以被修改 
    enumerable: true,//开关:控制属性是否可以被for in循环遍历
    configurable: false//开关:控制属性是否可以被删除,总开关,一旦设置为false就不会允许修改其他特性,它本身一旦改为false不可逆
}

(2)修改对象的某个属性的四大特性:

Object.defineProperties(obj,{
		"属性名":{四大特性},
		...
})

2、三个级别

(1)防扩展:防添加

Object.preventExtensions(obj);

(2)密封:防添加防删除

Object.seal(obj)

(3)冻结:防添加防删除防修改

Object.freeze(obj);

2、数组的新的API(简化for循环)

1、【判断】:判断数组中的元素是否满足我们的条件

(1)every:判断数组中的元素是否【都】满足我们的条件,类似于我们的&&,只要有一个为false则为false

(2)some:判断数组中的元素是否【包含】满足我们的条件,类似于我们的||,只要有一个为true则为true

语法:

arr.every/some(function(val,i,arr){
    //val:当前值
    //i:当前值的下标
    //arr:数组本身
    //切忌:函数自带return undefined;
    return 判断条件;
})

2、【遍历】:把数组中的每个元素取出来执行相同 或 相似的操作

(1)forEach:直接修改原数组

arr.forEach(function(val,i,arr){
        直接写操作;
})

(2)map:不修改原数组,直接返回新数组

var newArr=arr.map(function(val,i,arr){
    return 直接写操作;
})

3、汇总和过滤:

(1)过滤:筛选出符合条件的元素: - 不会修改原数组

var subArr=arr.filter(function(val,i,arr){
    return 判断条件;
})

(2)汇总:将所有的数组的元素进行+-*/

var sum=arr.reduce(function(prev,val,i,arr){
    return prev+val;
},base)

3、根据一个父对象创建一个子对象并且继承已经设置完毕,提前保护对象

var 子对象=Object.create(父对象,{
	"属性名":{四大特性},
	...
}) 

4、call/apply/bind:替换了函数中的this

1、call/apply:临时替换了函数中的this - 借

差别:call:要求传入的实参必须单独传入

apply:要求传入的实参必须整理为一个数组,只能传一个数组参数

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

用法:方法名.call(借用的对象,实参,...)

方法名.apply(借用的对象,[实参,...]) - apply自动打散数组

固定套路:

Object.prototype.toString.call/apply(数组);
Math.max/min.apply(Math,arr);

关键点:将类数组转为普通数组

lis=Array.prototype.slice.call(lis);

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

(1)创建了一个函数功能和原函数完全一样

(2)将新函数的this永久绑定为了你指向的对象

(3)将信函书中的部分固定参数提前永久绑定

用法:

var 新方法名=方法名.bind(永久绑定的对象,永久绑定的实参,...);

不会立刻执行,需要手动调用

5、严格模式

开启严格模式:"use strict"; - 可以出现在任何作用域的顶部

用处:(1)禁止给未声明的变量进行赋值;(2)将静默失败升级为错误

2、ES6:简化了/改变了语法

1、模板字符串:支持直接在字符串中书写变量

`我的名字叫${name}`
再也不用""''

2、块级作用域:

将var替换为let用于创建变量:优先使用let

作用:

1、let之前不允许出现未声明的同名变量——解决声明提前

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

3、*绑定事件时,会记录着当前元素的下标——不需要自己定义自定义下标

3、箭头函数:简化一切的回调函数

回调函数:匿名函数,没有自调,就是回调

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

箭头函数中如果出现this->外部的对象

建议:我们在事件中暂时不要简化为箭头函数

4、for...of循环

for(var v of arr){
    v;//当前值
}

缺点:1、不能直接修改原数组,只能返回新数组;2、不能遍历hash数组,不能遍历对象