xml地图|网站地图|网站标签 [设为首页] [加入收藏]

对象属性描述符,轻松学习

来源:http://www.ccidsi.com 作者:呼叫中心培训课程 人气:71 发布时间:2019-05-02
摘要:writable 属性的值是或不是能够改造是由writable特征决定的。要是writable设置为false,那么属性的值不可能更换,JavaScript将忽略属性值中的任何改换。请看上边包车型地铁代码: var cat =

writable

属性的值是或不是能够改造是由writable特征决定的。要是writable设置为false,那么属性的值不可能更换,JavaScript将忽略属性值中的任何改换。请看上边包车型地铁代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { writable: false }); console.log(cat.name); // foo cat.name = "koo"; // JavaScript will ignore it as writable is set to false console.log(cat.name); // foo

1
2
3
4
5
6
7
8
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { writable: false });
console.log(cat.name); // foo
cat.name = "koo"; // JavaScript will ignore it as writable is set to false
console.log(cat.name); // foo

你能够行使Object.defineProperty退换writable、enumerable和configurable特征的值。大家稍后会在那篇小说中详细商讨Object.defineProperty,但正如您在上头的代码片段中见到的那样,咱们已经将writable属性设置为false,从而退换了name属性的值。JavaScript将忽略重新分配,并且name属性的值将维持为foo。

若是以从严形式运维代码,那么为了重新分配writable设置为false的属性值,JavaScript将抛出卓殊。请看上面包车型客车代码:

'use strict'; var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { writable: false }); console.log(cat.name); // foo cat.name = "koo"; // error

1
2
3
4
5
6
7
8
'use strict';
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { writable: false });
console.log(cat.name); // foo
cat.name = "koo"; // error

在此处,JavaScript以从严情势运维,因而,当您重新分配name属性的值时,JavaScript将抛出万分,如下所示:

图片 1

此处的错误音讯说,你不可能赋值到只读属性。约等于说,假设属性的writable特征设置为false,那么属性将负担只读属性。

接待到场学习交流群569772九八2,大家齐声学学调换。

JavaScript——第 7部分:对象属性描述符,javascript 在JavaScript中,你能够如下所示创造3个对象字面量: var cat = { name: 'foo', age:...

要是您了然属性描述符,那么你就能够回答全数这么些难题。

结论

用作一名专门的学业的JavaScript开荒人士,你不能够不对JavaScript对象属性描述符有1个很好的通晓,作者愿意您能从这篇小说中学到一些知识!请继续关怀大家的下一篇文章,继续读书JavaScript中更关键的定义。

1 赞 收藏 评论

图片 2

自在学习 JavaScript——第 柒 部分:对象属性描述符,javascript

在JavaScript中,你能够如下所示制造二个目的字面量:

var cat = {
  name: 'foo',
  age: 9
};

乍一看,好像对象cat有字符串和数字值那两特性子。不过,这不光是JavaScript解释器。在ES5中,介绍了品质描述符的定义。在大家继续切磋属性描述符在此以前,让我们试着应对多少个难点:

  • 如何创立只读属性?
  • 哪些制订多如牛毛的质量?
  • 如何使属性不可配置?
  • 怎样规定2性格能是还是不是是只读的?

1经您通晓属性描述符,那么你就能够答应全体这个主题素材。

请看上面包车型大巴代码:

var cat = {
    name: 'foo',
    age: 9
};
var a = Object.getOwnPropertyDescriptor(cat, 'name');
console.log(a);

输出将如下所示:

  图片 3 image

正如你在此处看看的,那脾本性有多少个特征:

value保存属性的数量,而writable,enumerable和configurable则描述属性的任何特色。接下来大家将对那一个特征一一演讲。

writable

属性的值是或不是足以改造是由writable特征决定的。若是writable设置为false,那么属性的值不能够退换,JavaScript将忽略属性值中的任何改变。请看上边的代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { writable: false });
console.log(cat.name); // foo 
cat.name = "koo"; // JavaScript will ignore it as writable is set to false 
console.log(cat.name); // foo

你能够选用Object.defineProperty改造writable、enumerable和configurable特征的值。大家稍后会在那篇小说中详细研究Object.defineProperty,但正如您在上边的代码片段中看出的这样,我们早已将writable属性设置为false,从而改动了name属性的值。JavaScript将忽略重新分配,并且name属性的值将保持为foo。

若果以严峻方式运转代码,那么为了重新分配writable设置为false的属性值,JavaScript将抛出特别。请看上边包车型大巴代码:

'use strict';
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { writable: false });
console.log(cat.name); // foo 
cat.name = "koo"; // error

在那边,JavaScript以严格格局运营,由此,当你重新分配name属性的值时,JavaScript将抛出13分,如下所示:

图片 4

image

那边的错误消息说,你无法赋值到只读属性。也等于说,假若属性的writable特征设置为false,那么属性将充当只读属性。

自在学习 JavaScript(7):对象属性描述符

2018/01/11 · JavaScript · 对象

原稿出处: Dhananjay Kumar   译文出处:码农网/小峰   

在JavaScript中,你能够如下所示成立3个对象字面量:

var cat = { name: 'foo', age: 9 };

1
2
3
4
var cat = {
    name: 'foo',
    age: 9
};

乍1看,好像对象cat有字符串和数字值那三个属性。然则,那不仅是JavaScript解释器。在ES5中,介绍了品质描述符的概念。在大家一连探讨属性描述符在此之前,让大家试着应对多少个难点:

  • 怎么创立只读属性?
  • 什么制定不可胜言的个性?
  • 何以使属性不可配置?
  • 什么样规定二特性质是不是是只读的?

假如你精通属性描述符,那么您就足以应对所有这几个主题材料。

请看上面包车型客车代码:

var cat = { name: 'foo', age: 9 }; var a = Object.getOwnPropertyDescriptor(cat, 'name'); console.log(a);

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
var a = Object.getOwnPropertyDescriptor(cat, 'name');
console.log(a);

出口将如下所示:

图片 5

正如你在那边看到的,那脾性子有伍本性格:

value保存属性的数目,而writable,enumerable和configurable则讲述属性的任何特色。接下来我们将对那些特色一一解说。

writable

性子的值是不是能够更改是由writable特征决定的。即使writable设置为false,那么属性的值无法改变,JavaScript将忽略属性值中的任何变动。请看下边包车型大巴代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { writable: false });
console.log(cat.name); // foo 
cat.name = "koo"; // JavaScript will ignore it as writable is set to false 
console.log(cat.name); // foo

您能够运用Object.defineProperty更动writable、enumerable和configurable特征的值。大家稍后会在那篇小说中详尽座谈Object.defineProperty,但正如您在地点的代码片段中来看的那样,大家早就将writable属性设置为false,从而更改了name属性的值。JavaScript将忽略重新分配,并且name属性的值将保障为foo。

假如以严峻方式运作代码,那么为了重新分配writable设置为false的属性值,JavaScript将抛出越发。请看下边包车型地铁代码:

'use strict';
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { writable: false });
console.log(cat.name); // foo 
cat.name = "koo"; // error

在此间,JavaScript以从严方式运转,由此,当您重新分配name属性的值时,JavaScript将抛出非凡,如下所示:

  图片 6 image

此间的百无一用音信说,你不可能赋值到只读属性。相当于说,若是属性的writable特征设置为false,那么属性将担任只读属性。

var cat = {
    name: 'foo',
    age: 9
};
var a = Object.getOwnPropertyDescriptor(cat, 'name');
console.log(a);

enumerable

对此一个个性,即便您设置了enumerable:false,那么那么些脾气将不会油但是生在枚举中,由此它不可能用在诸如for … in循环那样的言辞中。

请看上边包车型地铁代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { enumerable: false }); for (let f in cat) { console.log(f); // will print only age }

1
2
3
4
5
6
7
8
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
for (let f in cat) {
    console.log(f); // will print only age
}

在此间,你只可以获得age,因为name的enumerable被设置为了false。那是另二个内需记住的重要事项:通过设置enumerable:false,唯一的习性将不得用于枚举。大家来看上边的代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { enumerable: false }); console.log(cat.name); // foo console.log('name' in cat); // true

1
2
3
4
5
6
7
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
console.log(cat.name); // foo
console.log('name' in cat); // true

在这里,name属性enumerable设置为false,但你能够访问它。在检查name是否属于cat的本性时,你也会意识是true。

突发性,你大概须要检查某些特定属性enumerable是或不是设置为false或true。你能够经过行使propertyIsEnumerable方法来成功那或多或少:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { enumerable: false }); console.log(cat.propertyIsEnumerable("name")); // false

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
console.log(cat.propertyIsEnumerable("name")); // false

enumerable

对此一个性子,假如您设置了enumerable:false,那么那天性情将不会出现在枚举中,由此它不能够用在诸如for … in循环那样的言辞中。

请看上边包车型地铁代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
for (let f in cat) {
    console.log(f); // will print only age 
}

在那边,你只好得到age,因为name的enumerable被安装为了false。这是另贰个亟待记住的关键事项:通过设置enumerable:false,唯一的质量将不得用于枚举。大家来看下边包车型地铁代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
console.log(cat.name); // foo 
console.log('name' in cat); // true

在此间,name属性enumerable设置为false,但你能够访问它。在自己商量name是还是不是属于cat的性质时,你也会发觉是true。

神跡,你大概须求检查有些特定属性enumerable是不是设置为false或true。你能够经过应用propertyIsEnumerable方法来产生那或多或少:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
console.log(cat.propertyIsEnumerable("name")); // false

enumerable

对此三个脾性,如若您设置了enumerable:false,那么那一个天性将不会出现在枚举中,由此它无法用在诸如for … in循环那样的言辞中。

请看上面的代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
for (let f in cat) {
    console.log(f); // will print only age 
}

在此处,你只好获得age,因为name的enumerable棉被服装置为了false。这是另三个亟需记住的第2事项:通过设置enumerable:false,唯一的脾气将不得用于枚举。大家来看上边包车型客车代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
console.log(cat.name); // foo 
console.log('name' in cat); // true

在此地,name属性enumerable设置为false,但你可以访问它。在检讨name是还是不是属于cat的属性时,你也会发掘是true。

偶尔,你只怕须要检讨有个别特定属性enumerable是或不是设置为false或true。你可以经过行使propertyIsEnumerable方法来落成那一点:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
console.log(cat.propertyIsEnumerable("name")); // false

configurable

属性的别的特色是或不是能够配备取决于configurable的值。若是属性configurable设置为false,则不可能改动writable和enumerable的值。请看上面包车型客车代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); Object.defineProperty(cat, 'name', { enumerable: false });

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { enumerable: false });

在这里,大家将name属性的configurable设置为false。之后,大家将enumerable设置为false。如前所述,1旦1个属性的configurable设置为false,那么你就不可能改换另一个表征。

对于地点的代码,JavaScript会抛出贰个TypeError至极,如下图所示。你会赚取不可能再度定义属性名称的错误:

图片 7

在行使configurable的时候,你须求牢记,更改configurable的值只可以做一遍。即便将品质的configurable设置为false,那么您就不能够重新分配它;你不可能撤消对configurable的改造。请看上边包车型客车代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); Object.defineProperty(cat, 'name', { configurable: true });

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { configurable: true });

咱们在重新分配name属性的configurable,不过,JavaScript会对上述操作抛出二个TypeError,如下图所示。正如您所见到的,1旦configurable被装置为false,就不可能撤除那么些更动。

图片 8

另贰个至关心珍视要的事体是,即便configurable设置为false,writable也得以从true更换为false——但反之则不然。请看下边包车型客车代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); Object.defineProperty(cat, 'name', { writable: false }); cat.name = 'koo'; console.log(cat.name); // foo

1
2
3
4
5
6
7
8
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { writable: false });
cat.name = 'koo';
console.log(cat.name); // foo

壹旦不是在从严格局下,下面的代码不会抛出其余分外。正如我们后面所商议的,纵然configurable为false,writable也可以从true变为false,反之则不然。另一个亟待牢记的主要事项是,你不可能删除configurable设置为false的性质。

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); delete cat.name; // wont delete as configurable is false console.log(cat.name); // foo delete (cat.age); // will be deleted console.log(cat.age); // undefined

1
2
3
4
5
6
7
8
9
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
delete cat.name; // wont delete as configurable is false
console.log(cat.name); // foo
delete (cat.age); // will be deleted
console.log(cat.age); // undefined

在上面包车型大巴代码中,你会开掘JavaScript不会去除name属性,因为name属性的configurable设置为false。

结论

用作一名正式的JavaScript开垦人士,你必须对JavaScript对象属性描述符有2个很好的知晓,笔者愿意你能从那篇小说中学到部分知识!请继续关切我们的下一篇作品,继续上学JavaScript中更注重的概念。

正如你在此间看到的,那天性子有多性情状:

configurable

属性的其余特色是还是不是能够陈设取决于configurable的值。借使属性configurable设置为false,则无法改变writable和enumerable的值。请看上边包车型客车代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { enumerable: false });

在此间,大家将name属性的configurable设置为false。之后,大家将enumerable设置为false。如前所述,一旦二个属性的configurable设置为false,那么您就无法更换另二个天性。

对此地点的代码,JavaScript会抛出3个TypeError非凡,如下图所示。你会赢得不可能再次定义属性名称的荒谬:

  图片 9 image

在应用configurable的时候,你要求记住,改换configurable的值只好做一遍。假设将质量的configurable设置为false,那么你就不能重新分配它;你不能打消对configurable的转移。请看下边包车型客车代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { configurable: true });

我们在重新分配name属性的configurable,可是,JavaScript会对上述操作抛出1个TypeError,如下图所示。正如您所观望的,一旦configurable棉被服装置为false,就不可能撤废这么些改造。

  图片 10 image

另二个重视的事情是,就算configurable设置为false,writable也能够从true更改为false——但反之则不然。请看上面包车型地铁代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { writable: false });
cat.name = 'koo';
console.log(cat.name); // foo

1旦不是在从严格局下,上边的代码不会抛出任何卓殊。正如小编辈眼前所探讨的,尽管configurable为false,writable也能够从true变为false,反之则不然。另一个索要牢记的主要事项是,你不可能删除configurable设置为false的属性。

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
delete cat.name; // wont delete as configurable is false 
console.log(cat.name); // foo 
delete (cat.age); // will be deleted
console.log(cat.age); // undefined

在上边的代码中,你会发觉JavaScript不会去除name属性,因为name属性的configurable设置为false。

configurable

质量的任何特色是不是足以布署取决于configurable的值。假诺属性configurable设置为false,则无法改换writable和enumerable的值。请看上边包车型大巴代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { enumerable: false });

在此间,大家将name属性的configurable设置为false。之后,大家将enumerable设置为false。如前所述,壹旦一性子子的configurable设置为false,那么你就无法改换另3个天性。

对于地点的代码,JavaScript会抛出二个TypeError非凡,如下图所示。你会博得不可能再一次定义属性名称的谬误:

图片 11

image

在使用configurable的时候,你需求牢记,改动configurable的值只可以做一回。固然将品质的configurable设置为false,那么您就不能够重新分配它;你不或许收回对configurable的退换。请看下边包车型客车代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { configurable: true });

大家在重新分配name属性的configurable,不过,JavaScript会对上述操作抛出1个TypeError,如下图所示。正如你所看到的,一旦configurable被设置为false,就无法撤销那几个更动。

图片 12

image

另一个注重的事务是,纵然configurable设置为false,writable也足以从true改换为false——但反之则不然。请看上面的代码:

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { writable: false });
cat.name = 'koo';
console.log(cat.name); // foo

假设不是在严酷情势下,下边的代码不会抛出任何尤其。正如大家前面所探究的,尽管configurable为false,writable也得以从true变为false,反之则不然。另一个亟需记住的主要事项是,你无法删除configurable设置为false的品质。

var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
delete cat.name; // wont delete as configurable is false 
console.log(cat.name); // foo 
delete (cat.age); // will be deleted
console.log(cat.age); // undefined

在上头的代码中,你会开掘JavaScript不会删除name属性,因为name属性的configurable设置为false。

本文由68399皇家赌场发布于呼叫中心培训课程,转载请注明出处:对象属性描述符,轻松学习

关键词: 68399皇家赌场 JavaScript 日记本

上一篇:JavaScript干货分享,创建对象的几种方式

下一篇:没有了

最火资讯