优秀的编程知识分享平台

网站首页 > 技术文章 正文

ES6核心特性2-对象扩展分析(es6对象新增方法)

nanyue 2024-07-20 23:48:39 技术文章 11 ℃

ES6除了在语法上有改进外,基于原有对象的功能扩展及增强也有重大优化。

字符串,数值

字符串基本数据类型,它的包装类新增了几个常用方法

  • includes(): 返回布尔值, 表示是否找到了参数字符串。
  • startsWith(): 返回布尔值, 表示参数字符串是否在原字符串的头部。
  • endsWith(): 返回布尔值, 表示参数字符串是否在原字符串的尾部。
  • repeat():repeat 方法返回一个新字符串, 表示将原字符串重复 n 次
  • codePointAt():JavaScript 内部, 字符以 UTF-16 的格式储存, 每个字符固定为 2 个字节。 对于那些需要 4 个字节储存的字符(Unicode 码点大于 0xFFFF 的字符) , JavaScript 会认为它们是两个字符 。ES6 提供了 codePointAt 方法, 能够正确处理 4 个字节储存的字符, 返回一个字符的码点。
  • at():ES5 对字符串对象提供 charAt 方法, 返回字符串给定位置的字符。 该方法不能识别码点大于 0xFFFF 的字符。at 方法, 可以识别 Unicode 编号大于 0xFFFF 的字符, 返回正确的字符。

而数值将一些ES5的全局方法,集成到了一个static常量对象中,也标志着ES6正在像面像对象编程语言过度

  • Number.isFinite(), Number.isNaN()
    ES6 在 Number 对象上, 新提供了 Number.isFinite()和 Number.isNaN()两个方法。

Number.isFinite()用来检查一个数值是否为有限的(finite) , 即不是 Infinity。

Number.isNaN()用来检查一个值是否为 NaN。

  • Number.parseInt(), Number.parseFloat()
    ES6 将全局方法 parseInt()和 parseFloat(), 移植到 Number 对象上面, 行为完全保持不变。
  • Number.isInteger()
    Number.isInteger()用来判断一个数值是否为整数。
    例如:Number.isInteger(25) // trueNumber.isInteger(25.1) // false

函数

  • 参数默认值赋值,与解构赋值默认值结合使用
  • 新增箭头函数,类似java中的lamda表达式,简化函数声明及参数声明。但是同lamda表达式不完全是同一个概念,它还有一个绑定this指针到当前作用域的功能。类似于Object.method.bind(this)作用。

数组

  • 扩展运算符

扩展运算符(spread) 是三个点(...) 。 它好比 rest 参数的逆运算, 将一个数组转为用逗号分隔的参数序列

  • Array.from()
    Array.from 方法用于将两类对象转为真正的数组: 类似数组的对象(array-like object) 和可遍历(iterable) 的对象(包括 ES6新增的数据结构 Set 和 Map) 。
    下面是一个类似数组的对象, Array.from 将它转为真正的数组。
  • Array.of()
    Array.of 方法用于将一组值, 转换为数组。
  • 数组实例的 find() 和 findIndex()
    数组实例的 find 方法, 用于找出第一个符合条件的数组成员。 它的参数是一个回调函数, 所有数组成员依次执行该回调函数, 直到找出第一个返回值为 true 的成员, 然后返回该成员。 如果没有符合条件的成员, 则返回 undefined。
  • 数组实例的 fill()
    fill 方法使用给定值, 填充一个数组。
  • 数组实例的 includes()
    Array.prototype.includes 方法返回一个布尔值, 表示某个数组是否包含给定的值, 与字符串的 includes 方法类似。 ES2016 引入了该方法。

对象

  • 扩展运算符,同数组一样
  • 简洁表示法

ES6 允许直接写入变量和函数, 作为对象的属性和方法。 这样的书写更加简洁

  • Object.is()
    ES5 比较两个值是否相等, 只有两个运算符: 相等运算符(==) 和严格相等运算符(===) 。 它们都有缺点, 前者会自动转换数据类型, 后者的 NaN 不等于自身, 以及+0 等于-0。 JavaScript 缺乏一种运算, 在所有环境中, 只要两个值是一样的, 它们就应该相等。
    ES6 提出“Same-value equality”(同值相等) 算法, 用来解决这个问题。 Object.is 就是部署这个算法的新方法。 它用来比较两个值是否严格相等, 与严格比较运算符(===) 的行为基本一致
  • Object.assign()
    Object.assign 方法用于对象的合并, 将源对象(source) 的所有可枚举属性, 复制到目标对象(target)
  • __proto__属性, Object.setPrototypeOf(), Object.getPrototypeOf()
    JavaScript 语言的对象继承是通过原型链实现的。 ES6 提供了更多原型对象的操作方法。
    __proto__属性
    __proto__属性(前后各两个下划线) , 用来读取或设置当前对象的 prototype 对象。 目前, 所有浏览器(包括 IE11) 都部署了这
    个属性。
    // es6 的写法 const obj = {
    method: function() { ... }};
    obj.__proto__ = someOtherObj;
    // es5 的写法 var obj = Object.create(someOtherObj);
    obj.method = function() { ... };
  • Object.setPrototypeOf()
    Object.setPrototypeOf 方法的作用与__proto__相同, 用来设置一个对象的 prototype 对象, 返回参数对象本身。 它是 ES6 正式推荐的设置原型对象的方法。
  • Object.getPrototypeOf()
    该方法与 Object.setPrototypeOf 方法配套, 用于读取一个对象的原型对象

  • Object.keys(), Object.values(), Object.entries()
    Object.keys()
    ES5 引入了 Object.keys 方法, 返回一个数组, 成员是参数对象自身的(不含继承的) 所有可遍历(enumerable) 属性的键名

Object.values()
Object.values 方法返回一个数组, 成员是参数对象自身的(不含继承的) 所有可遍历(enumerable) 属性的键值。

Object.entries
Object.entries 方法返回一个数组, 成员是参数对象自身的(不含继承的) 所有可遍历(enumerable) 属性的键值对数组。




Tags:

最近发表
标签列表