当前位置: 首页 > news >正文

ES5新特性

ES5

ECMAScript5.0正式版规范发布于2009年,(es4由于各大浏览器厂商没有达成共识,所以草案难产,随后es3.1被改名为ES5发布)ES5纸面化了很多事实上已经在浏览器形成共识的语言规范解析并且增加了对自第三版发布以来的新功能的支持。

ES5多半是扩展原生对象的功能,让Object、Array、Function更加强大,ES5的大部分特性都在主流浏览器(IE9+)中被支持。

下面收集了一些新特性

  1. 关键字和保留字

    es5中新增了一些关键字和保留字,这些关键字不可以用来当作变量名,负责会报错

  2. 属性特性

    ES5允许使用用户定义的属性描述来覆盖给定属性的enumerable、configurable、writable、get、set等属性了。具体方法是使用定义在Object对象上的静态函数。

    1. value:值,默认是undefined

    2. writable:是否是只读property,默认是false,有点像C#中的const

    3. enumerable:是否可以被枚举(for in),默认false

    4. configurable:是否可以被删除,默认false

    5. get:返回property值的方法,默认是undefined

    6. set:为property设置值的方法,默认是undefined

    同样可以像C#、Java一样些get/set,不过这两个不能和value、writable同时使用

  3. 严格模式

    在代码顶部添加 use strict来开启严格模式,

    严格模式下变量必须先申明再使用,

    不使用八进制数据,

    不使用with语句,

    外部不能访问在eval()函数中定义的变量,

    不能修改函数内部对象arguments对象,

    不能使用delete删除显示声明(var 显示声明)的变量和函数,

    修改一个特性[[writable]]为false的属性时,会抛出异常,而不是静默失败,同样的使用delete删除特性[[configurable]]为false的属性时也会抛出异常

4、Object

所有对象操作中,如果o不是Object类型,将会抛出TypeError异常

Object.getPrototypeOf(o)
获取给定对象的prototype对象。等价于以前的o.__proto__

Object.getOwnPropertyDescriptor(o,p)
获取对象描述,和Object.defineProperty的相关方法

Object.getOwnPropertyNames(o)
获取自有属性名列表,结果列表将不包含原型链上的属性。

Object.create(o,p)
以给定对象o为prototype创建新的对象并返回。如果对象描述p存在,就使用其定义刚创建的对象(类似调用Object.defineProperties(obj,p) )。

Object.defineProperty(o,p,attrs)
根据规则attrs定义对象o上,属性名为p的属性

Object.defineProperties(o,props)
根据对象描述props来定义对象o,通常props包含多个属性的定义。

Object.seal(o)
一个对象在默认状态下,
extensible 可以添加新的属性
configurable 可以修改已有属性的特性

Object.freeze(o)
讲对象的每个自有属性做如下操作
属性的writable特性置为false
属性的configurable特性置为false
同时该对象将不可扩展,可见,该方法比Object.seal更加严格的限制了对一个对象的未来改动。

Object.isSealed(o)
判断一个对象是否sealed:
对象的每个自有属性;如果属性的configurable特性为true,则返回false
如果对象为extensible的,那么返回false
不满足以上两个条件,则返回true

Object.isFrozen(o)
对每个自有属性,如果该属性的configurable或writable特性为true,则返回false
如果对象为extensible的,那么返回false
不满足以上两个条件,则返回true

Object.isExtensible(o)
判断一个对象是否可扩展。

Object.keys(o)
返回对象o的所有可枚举(enumerable)属性的名称

Object.prototype.isPrototypeOf(v)
检查对象是否是位于给定对象v原型链上。

Object.prototype.propertyIsEnumerable(p)
检查一个对象上的属性p是否可枚举。

5、Array

Array.isArray(a)
判断a是否为真正的Array

Array.prototype.indexOf(e,i)
使用严格等来判断元素e在数组中的素引号,一个可选的搜索起点i

Array.prototype.lastIndex(e,i)
获取元素e在数组中最后出现的位置,起始位置i为可选。

Array.prototype.every(t,c)
测试数组中的每个元素都必须满足测试t。一个可选的上下文对象c,t函数通常有如下签名,function t(item,index,array){}

Array.prototype.some(t,c)
测试数组中是否有元素满足测试t

Array.prototype.forEach(f,c)
使用函数f遍历每个数组的元素

Array.prototype.map(f,c)
使用函数f修改每个数组的每个元素,按照序收集f的每个返回值,并返回这个新组成的数组

Array.prototype.forEach(f,c)
使用函数f遍历每个数组的元素。

Array.prototype.map(f,c)
使用函数f修改每个数组的每个元素,按顺序收集f的每个返回值,并返回这个新组成的数组。

Array.prototype.filter(f,c)
收集通过函数测试f的数组元素

Array.prototype.reduce(r,v)
从左向右,使用函数r聚集数组的每个元素,可以可选的指定一个初始值v。

Array.prototype.reduceRight(r,v)
Array.prototype.reduce的从右向左的版本。

6、String

String.prototype.trim
去掉字符串两头的空白符和换行符

字符订阅
"abc"[2] === "c"

7、Function

Function.prototype.bind(thisTarget,arg1,...argn)
为了指定当前函数的上下文对象和运行参数,该函数创建一个新的函数,保留给定的this对象和运行参数。

8、JSON

JSON.Parse(text)
解析JSON文本为对象

JSON.stringify(obj)
讲指定对象obj序列化为JSON文本

9、Date

Date.now()
获取当前时间距1970.1.1 00:00:00的毫秒数

#相关资料

http://www.cnblogs.com/liuxinjin/p/3663960.html

https://segmentfault.com/a/1190000000515151

转载于:https://my.oschina.net/tongjh/blog/991546

相关文章:

  • MySQL用命令行复制表,查看表结构
  • java并发之TimeUnit理解
  • spring定时任务
  • 读《十亿美金的教训》看中国传奇人物
  • TCP端口状态说明ESTABLISHED、TIME_WAIT
  • http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 异常
  • tomcatserver管理界面username和password忘记
  • 安装gitlab
  • 图解 Java IO : 一、File源码
  • Linux下软件分类与安装
  • flume自定义拦截器
  • [sqoop] sqoop 小试牛刀
  • linux select函数详解【转】
  • 前端优化的技巧
  • Android view的测量及绘制
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 3.7、@ResponseBody 和 @RestController
  • CSS 专业技巧
  • JS函数式编程 数组部分风格 ES6版
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Node 版本管理
  • NSTimer学习笔记
  • Promise面试题2实现异步串行执行
  • Puppeteer:浏览器控制器
  • React+TypeScript入门
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Sublime text 3 3103 注册码
  • v-if和v-for连用出现的问题
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 回顾 Swift 多平台移植进度 #2
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端面试之CSS3新特性
  • 前端学习笔记之观察者模式
  • 强力优化Rancher k8s中国区的使用体验
  • 入门级的git使用指北
  • 手机app有了短信验证码还有没必要有图片验证码?
  • MPAndroidChart 教程:Y轴 YAxis
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #{} 和 ${}区别
  • #window11设置系统变量#
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (简单) HDU 2612 Find a way,BFS。
  • (南京观海微电子)——COF介绍
  • (篇九)MySQL常用内置函数
  • (十)c52学习之旅-定时器实验
  • (实战篇)如何缓存数据
  • (转)VC++中ondraw在什么时候调用的
  • (转)创业家杂志:UCWEB天使第一步