1.对象的属性

1.1属性表示法

ECMAScript 2015允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

示例代码如下所示:

let name = '一碗周'
let job = '前端攻城狮'

// 属性表示法 直接写入变量
let obj1 = {
  name,
  job,
  sayMe() {
    console.log(name)
  }
}
// 等同于 
let obj2 = {
  name: name,
  job: job,
  sayMe: function() {
    console.log(name)
  }
}
console.log(obj1, obj2);

2.计算属性名

JavaScript中,我们定义属性时,有两种方式:中括号[]或.的方式:

// 方法一
obj.foo = true;
// 方法二
obj['a' 'bc'] = 123;


.运算符具有很大的局限性,比如first name这种属性只能通过中括号的方式来定义。中括号的方式允许我们使用变量或者在使用标识符时会导致语法错误的字符串直接量来定义属性。

例如:

let person = {},
  lastName = "last name";

person["first name"] = "Nicholas";
person[lastName] = "Zakas";
console.log(person["first name"]);      // "Nicholas"
console.log(person[lastName]);          // "Zakas"

这两种方式只能通过中括号的方式来定义的。在ES5中,你可以在对象直接量中使用字符串直接量作为属性,例如:

let person = {
  "first name": "Nicholas"
};
console.log(person["first name"]);      // "Nicholas"


但是当我们的属性名存在一个变量中或者需要计算时,使用对象直接量是无法定义属性的。

在ES5之前,如果属性名是个变量或者需要动态计算 ,则只能通过 对象.[变量名] 的方式去访问。

let p = {
  name : '李四',
  age : 20
}
let attName = 'name';
console.log(p[attName]) //这里 attName表示的是一个变量名。
// 李四

而且这种动态计算属性名的方式 在字面量中 是无法使用的。

let attName = 'name';
  let p = {
    attName : '李四',  // 这里的attName是属性名,相当于各级p定义了属性名叫 attName的属性。
    age : 20
  }
console.log(p[attName])  // undefined


ECMAScript 2015中,把属性名用[ ]括起来,则括号中就可以引用提前定义的变量。

let attName = 'name';
  let p = {
    [attName] : '李四',  // 引用了变量attName。相当于添加了一个属性名为name的属性
    age : 20
  }
console.log(p[attName])  // 李四


在对象直接量中的中括号表明属性名是需要被计算的,它的内容被计算为字符串

3.Object 的方法

3.1Object.is() 方法

ECMAScript 2015比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。

  • 但是这两个运算符都具有缺点
  • 使用相等运算符的时候,会自动转换数据类型

全等运算符会导致NaN不等于自身,以及 0等于-0。

ECMAScript 2015提出 “Same-value equality ”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

语法结构如下所示:

Object.is(value1, value2);


参数说明:

  • value1:被比较的第一个值。
  • value2:被比较的第二个值。

返回一个布尔值。

示例代码如下所示:

console.log( 0 === -0); //true
console.log(NaN === NaN); // false

console.log(Object.is( 0, -0)); // false
console.log(Object.is(NaN, NaN)); // true

3.2Object.assign()方法

Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象 。

语法结构如下所示:

Object.assign(target, ...sources)


参数说明:

  • target :目标对象
  • sources :源对象

值得注意的是,如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。后面的源对象的属性将类似地覆盖前面的源对象的属性。

示例代码如下所示:

let sources = {
  name: '一碗周',
  job: '前端攻城狮'
}
let target = {}
// 使用 assign() 方法所有可枚举属性的值从一个或多个源对象分配到目标对象。
Object.assign(target, sources)
console.log(target);
// 验证是否为深复制
target.name = '一碗粥'
console.log(target, sources); //{ name: '一碗周', job: '前端攻城狮' } { name: '一碗粥', job: '前端攻城狮' }


4.super 关键字

我们知道,this关键字总是指向函数所在的当前对象,ECMAScript 2015又新增了另一个类似的关键字super,指向当前对象的原型对象。

// 定义一个要作为原型对象的对象
const proto = {
  v: 'Hello'
}
// 定义一个对象
const obj = {
  v: 'World',
  printV1() {
    console.log(this.v);
  },
  // 使用 super 关键字
  printV2() {
    console.log(super.v);
  }
}
// 将obj 对象的原型修改为 prtot
Object.setPrototypeOf(obj, proto)
// this 的用法
obj.printV1() // World
// super 的用法
obj.printV2() // Hello


值得注意的是,super关键字表示原型对象时,只能用在对象的方法之中,用在其他地方都会报错。目前,只有对象方法的简写法可以让JavaScript引擎确认,定义的是对象的方法。

5.对象的扩展运算符

对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。

示例代码如下所示:

// 对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。
let obj = {
  name: '一碗周',
  job: '前端攻城狮'
}
let newObj = {
  ...obj
}
console.log(newObj); // { name: '一碗周', job: '前端攻城狮' }
// 验证是否为深复制
newObj.name = '一碗粥'
console.log(obj, newObj); // { name: '一碗周', job: '前端攻城狮' } { name: '一碗粥', job: '前端攻城狮' }


由于数组是特殊的对象,所以对象的扩展运算符也可以用于数组。

let arr = [1, 2, 3, 4, 5]
let obj = {
  ...arr
}
console.log(obj); // { '0': 1, '1': 2, '2': 3, '3': 4, '4': 5 }


如果扩展运算符后面不是对象,则会自动将其转为对象。

console.log(
  {
  ...1 // 等同于 {...Object(1)}
  }
); // {}
console.log(
  {
  ...true // 等同于 {...Object(true)}
  }
); // {}
console.log(
  {
  ...undefined // 等同于 {...Object(undefined)}
  }
); // {}
console.log(
  {
  ...null // 等同于 {...Object(null)}
  }
); // {}

到此这篇关于ECMAscript新特性对象介绍的文章就介绍到这了,更多相关ECMAscript 对象介绍内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

ECMAscript新特性对象介绍的更多相关文章

  1. PHP对象、模式与实践之高级特性分析

    这篇文章主要介绍了PHP对象、模式与实践之高级特性,结合实例形式分析了php面向对象程序设计中的静态属性和方法、抽象类、接口、拦截器、克隆对象等概念与简单实现方法,需要的朋友可以参考下

  2. JS 对象介绍

    JS 对象介绍,需要的朋友可以参考下。

  3. PHP对象实例化单例方法

    本文主要介绍了PHP实例化对象单例的方法,具有很好的参考价值,下面跟着小编一起来看下吧

  4. ajax从JSP传递对象数组到后台的方法

    今天小编就为大家分享一篇ajax从JSP传递对象数组到后台的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  5. JavaScript中FontFace对象的使用方式

    这篇文章主要介绍了JavaScript中FontFace对象的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  6. PHP对象相关知识总结

    这篇文章主要介绍了PHP对象相关知识总结的相关资料,需要的朋友可以参考下

  7. 基于jQuery对象和DOM对象和字符串之间的转化实例

    下面小编就为大家带来一篇基于jQuery对象和DOM对象和字符串之间的转化实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. 如何利用Spring把元素解析成BeanDefinition对象

    这篇文章主要介绍了如何利用Spring把元素解析成BeanDefinition对象,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  9. 关于JavaScript定义类和对象的几种方式

    在说这个话题之前,我想先说几句题外话:最近偶然碰到有朋友问我“hoisting”的问题。即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的。

  10. PHP面向对象程序设计之对象的遍历操作示例

    这篇文章主要介绍了PHP面向对象程序设计之对象的遍历操作,结合具体实例形式分析了php面向对象程序设计中对象属性遍历的相关操作技巧与注意事项,需要的朋友可以参考下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部