ES5总结

今天总结一下ES5。
ES5:
1、严格模式
使用:在当前作用域顶部添加“use strict”
要求:
①禁止给未声明的变量赋值
在旧js中,强行给未声明的变量赋值,并不会报错,会在全局创建该变量,这就导致内存泄漏。
在ES5中,这种情况会直接报错 :“xx is not defined”
②静默失败升级为错误
静默失败——执行失败,并且不报错!这种情况不便于调试
ES5中静默失败会变为错误显示
③匿名函数自调和普通函数调用中this不再指向window,而是undefined,防止内存泄漏
④禁用了arguments.callee
arguments.callee:在函数内,自动获得正在调用的函数本身,一般在递归调用时使用
问题:递归算法效率极低
如何解决递归:可用使用循环代替
2、保护对象
为了防止对对象属性结构和属性值进行无意义篡改
ES5从新划分了对象属性
命名属性:可以用" . “访问到的属性
数据属性:实际存储属性值的属性
访问器属性:仅提供对数据属性的保护
内部属性:无法用” . "访问到的属性
①保护命名属性:
(1)数据属性是一个小对象,里面不仅有属性值,还包含三个开关:
1).writable:ture/false; 可修改
2).enumerable:true/false; 可遍历
3).configurable:true/false 可删除 为false就不可逆
Object.getOwnPropertyDescriptor(对象,“属性名”) 获取属性的描述信息
Object.defineProperty(对象,“属性名”,{开关名:true/false}) 修改开关
Object.defineProperties(对象,{属性名:{开关名:true/false}…}) 修改多个
使用configurable:false不可逆,来防止打开已关闭的开关
enumerable:false;只是半隐藏,只能防住for in遍历,直接用“ . ” 还是可以访问到
(2)访问器属性提供对另一个数据属性的保护
为属性添加get()和set(value)函数,获取属性值时调用get(),修改属性值是调用set(value)
(3)保护对象结构,禁止对对象的属性结构进行篡改
包括三级别:
1)防扩展:禁止添加新属性
Object.preventExtensions(obj)
2)密封:兼具防扩展,进一步禁止删除属性
Object.seal(obj)
3)冻结:兼具密封,进一步禁止修改属性值
3.Object.create(原型对象,{ 添加属性})
在没有构造函数的情况下,创建子对象
4.更换this
临时更换:函数.call(替换this对象,实参值,…)
函数.apply() 可以穿数组
永久更换:函数.bind()
5.数组函数:
①判断数组内容是否符合要求
var bool=arr.every(function(value,i,arr){ return 判断条件 })
原理:遍历数组中每个元素,每个元素调用一次回调函数,然后用传入的实参值执行判断条件,返回一个Boolean值。只要有一个元素为false,返回结果为false,全为true则为true
var bool=arr.some(function(value,i,arr){ return 判断条件 })
原理:和every一样,但是返回结果相反,有一个为true就为true,全为false则为false
②遍历 (总结)
for(){}
arr.forEach(function(value,i,arr){})
var newArr=arr.map(function(value,i,arr){ return 新值 })
for of(Es6)只能获取属性值
补充:下标数字的用for of遍历 (索引数组,类数组对象)
下标是自定义名称用for in (关联数组,普通对象)
③过滤和汇总
过滤:复制出数组中符合条件的元素,组成新数组返回
var newArr=arr.filter(function(value,i,arr){ return 判断条件 })
汇总:对数组中元素内容进行统计,得出最终结论
var sum=arr.reduce(function(prev,value,i,arr){ return prev+value},起始值)
prev是截止到当前位置之前的临时汇总值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值