热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ES6入门之对象的扩大

1.属性的简约示意法在ES6中许可直接写入变量和函数,作为对象的属性和要领,使得代码的誊写更加简约。constfaconstb{f}b{f:a}等同于constb{f:f}在ES6

《ES6入门之对象的扩大》

1. 属性的简约示意法

在ES6中 许可直接写入变量和函数,作为对象的属性和要领,使得代码的誊写更加简约。

const f = 'a'
const b = {f}
b // {f: 'a'}
等同于
const b = {f: f}

在ES6中许可在对象内直接写变量,这时刻属性名为变量名,属性值就是变量值

function u(x, y){
return {x, y}
}
// ====
function u(x, y){
return {x: x, y: y }
}
u(1, 2) // {x:1, y: 2}
或许一下写法:
function o() {
const x = 1;
const x = 2;
return {x, y}
}
o() // {x:1, y:2}

2. 属性名表达式

在Javascript中属性名的表达式的要领有两种,一种 直接用标识符作为属性名,第二种用表达式作为属性名。第二种写的时刻表达式要放在方括号以内

//一
obj.foo = true
//二
obj['a' + 'bc'] = 123
//三
let t = 'm'
let obj = {
[t]: true,
['a' + 'bc']: 123
}

表达式还能够用来定义要领名(注重:属性名表达式不能和简约示意法同时运用)


let obj = {
['h' + 'ello']() {
return 'hi'
}
}
obj.hello() // hi

假如属性名表达式是一个对象,则默许情况下会自动将对象转为字符串[object Object]

const ka = {a: 1}
const kb = {b: 2}
const myObj = {
[ka]: 'va',
[kb]: 'vc'
}
myObj // Object {[object Object]: 'vc'}

3. 要领的 name 属性

函数的name 属性,返回函数名,对象要领也是函数,因而也由name 属性

const p = {
n() {
console.log('h')
}
}
p.n.name // n

特殊情况 getter 和 setter 属性是在 get 和 set上面

const obj = {
get foo() {},
set fod() {}
}
obj.foo.name // undefined
const d = Object.getOwnPropertyDescriptor(obj, 'foo')
d.get.name // get foo
d.set.name // set fod

特殊情况 bind制造的函数 name 属性返回 bound 加上原有函数的名字


var do = function(){}
do.bind().name // bound do

特殊情况 Function组织函数制造的函数,name 返回 anonymous

(new Function()).name // anonymous

假如对象的要领是一个Symbol 那末name 返回这个 Symbol的形貌

const k = Symbol('形貌')
k.name // "[形貌]"

4. 属性的可罗列性和遍历

可罗列性

对象的每一个属性都有一个形貌对象,用来掌握该属性的行动,Object.getOwnPropertyDescriptor 要领能够猎取该属性的形貌对象

let obj = {f: 234}
Object.getOwnPropertyDescriptor(obj, 'foo')
// {
// value: 234,
// writable: true,
// enumerable: true,
// configurable: true
// }

形貌对象的 enumerable 属性,称为 “可罗列性”,假如该属性为true就示意某些操纵会疏忽当前操纵

有四个操纵会疏忽 enumerate 为 false 的属性
- for...in轮回: 只遍历对象本身和继续的可罗列的属性
- Object.keys():返回对象本身的一切可罗列的属性的键名
- JSON.stringify(): 只串行化对象本身的可罗列的属性
- Object.assign(): 疏忽enumerable为false的属性,只
拷贝对象本身的可罗列的属性

ES6中 一切class 的原型的要领都是不可罗列的

属性的遍历

ES6一共有5种要领能够遍历对象的属性。

(1)for...in
for...in轮回遍历对象本身的和继续的可罗列属性(不含 Symbol 属性)。
(2)Object.keys(obj)
Object.keys返回一个数组,包括对象本身的(不含继续的)一切可罗列属性(不含 Symbol 属性)的键名。
(3)Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一个数组,包括对象本身的一切属性(不含 Symbol 属性,然则包括不可罗列属性)的键名。
(4)Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一个数组,包括对象本身的一切 Symbol 属性的键名。
(5)Reflect.ownKeys(obj)
Reflect.ownKeys返回一个数组,包括对象本身的一切键名,不论键名是 Symbol 或字符串,也不论是不是可罗列。 1)for..in
以上五种要领遍历对象的键名,都遵照一样的属性遍历的序次股则 起首遍历一切数值键,根据数值升序分列。
其次遍历一切字符串键,根据到场时候升序分列。
末了遍历一切 Symbol 键,根据到场时候升序分列。

5. super关键字

this的关键字老是指向函数地点的当前对象,ES6 又新增了另一个相似的关键字 super,指向当前对象的原型对象

注重:super关键字示意原型对象时,只能用在对象的要领当中,用在其他他处所都邑报错。

// 报错
const obj = {
foo: super.foo
}
// 报错
const obj = {
foo: () => super.foo
}
// 报错
const obj = {
foo: function () {
return super.foo
}
}

上面三种super的用法都邑报错,由于关于 Javascript 引擎来讲,这里的super都没有用在对象的要领当中。第一种写法是super用在属性内里,第二种和第三种写法是super用在一个函数内里,然后赋值给foo属性。现在,只要对象要领的简写法能够让 Javascript 引擎确认,定义的是对象的要领。

《ES6入门之对象的扩大》

迎接关注 民众号【小夭同砚】

ES6入门系列

ES6入门之let、cont

ES6入门之变量的解构赋值

ES6入门之字符串的扩大

ES6入门之正则的扩大

ES6入门之数值的扩大

ES6入门之函数的扩大

ES6入门之对象的新增要领

Git教程

前端Git基础教程


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
author-avatar
继续微笑丶保持硪的骄傲_195
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有