作者:继续微笑丶保持硪的骄傲_195 | 来源:互联网 | 2023-09-18 10:25
1.属性的简约示意法在ES6中许可直接写入变量和函数,作为对象的属性和要领,使得代码的誊写更加简约。constfaconstb{f}b{f:a}等同于constb{f:f}在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入门之let、cont
ES6入门之变量的解构赋值
ES6入门之字符串的扩大
ES6入门之正则的扩大
ES6入门之数值的扩大
ES6入门之函数的扩大
ES6入门之对象的新增要领
Git教程
前端Git基础教程