var myObject = {
a:2
};
Object.getOwnpropertyDescriptor(myObject,"a");
{
value:2,
writable:true,
emumerable:true,
configurable:true
}

这段代码中的属性描述符不仅只有2,还有writable(可写)、enumerable(可枚举)、configurable(可配置)三种

在创建普通属性时属性描述符会使用默认值,我们也可以使用 Object.defineProperty(...)来添加一个新属性或者修改一个已有属性(如果是configurable)并对特性进行设置

代码示例:

var myObject = {};
Object.defineProperty(myObject,"a",{
value:2,
writable:true,
configurable:true,
emumerable:true
});
console.log(myObject.a);//

下面是对这三个属性描述符的介绍:

1)writable:决定是否可以修改属性的值

var myObject = {};
Object.defineProperty(myObject,"a",{
value:2,
writable:false,
configurable:true,
emumerable:true
});
myObject.a = 3;
console.log(myObject.a);//

解析:writable:false 可以看作为属性不可改变,在严格模式("use strict";)下,引擎会抛出TypeError的异常,这表示我们无法修改一个不可写的属性

2)configurable:只要属性是可配置的,就可以使用 defineProperty(...)方法来修改属性描述符

注意!!

a)在false情况下,如果修改,不管是不是严格模式,都会抛出TypeError的错误

b)在这种情况下,我们仍可以将可写性的状态由true改为false

c)delete属性也会被禁止(delete myObject.a;)

3)emumerable:可枚举,如果将它设置为false,则这个属性将不会出现在枚举中,但可以正常访问他

  

  

 

JS属性描述符的更多相关文章

  1. JS属性描述符之Object.defineProperty()定义对象属性特性

    一.Object.defineProperty的作用 用来给对象新增属性,和修改对象中的属性. 二.JS对象中的描述符 js对象中两种属性描述符:数据描述符和存取描述符(访问描述符). 注意事项: 1 ...

  2. JS - 属性描述符各配置的默认值的注意事项

    通过字面量或者obj.x = 1;创建的属性 与 通过Object.defineProperty创建的属性,他们的属性描述符的默认值是不同的,前者都为true,后者都为false.

  3. js 面向对象之属性描述符

    上回介绍了面向对象之构造器属性.这次介绍下属性描述符 遍历对象属性 let person = {name: "lisi"} for (key in person) { consol ...

  4. 理解JavaScript中的属性描述符

    我们把描述JavaScript中定义内部特性的属性叫做属性描述符 分为两大类:数据描述符和存取描述符 数据描述符是一个拥有可写或不可写的属性(Writable); 存取描述符不包含数据值,是一组拥有g ...

  5. 深入理解javascript对象系列第三篇——神秘的属性描述符

    × 目录 [1]类型 [2]方法 [3]详述[4]状态 前面的话 对于操作系统中的文件,我们可以驾轻就熟将其设置为只读.隐藏.系统文件或普通文件.于对象来说,属性描述符提供类似的功能,用来描述对象的值 ...

  6. JavaScript 属性描述符

    属性描述符(Property Descriptor)是 ES5 之后出现的概念,顾名思义,它用于描述属性应该是什么样,例如是否只读,能否枚举,能否可配置等.所有对象属性均可使用属性描述符来定义. 属性 ...

  7. Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)

    Python:高级主题之(属性取值和赋值过程.属性描述符.装饰器) 背景 学习了Javascript才知道原来属性的取值和赋值操作访问的“位置”可能不同.还有词法作用域这个东西,这也是我学习任何一门语 ...

  8. Python 属性描述符和属性的查找过程

    属性描述符可以用来控制给属性赋值的时候的一些行为 import numbers class IntField: def __get__(self, instance, owner): return s ...

  9. python之属性描述符与属性查找规则

    描述符 import numbers class IntgerField: def __get__(self, isinstance, owner): print('获取age') return se ...

随机推荐

  1. java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4

    概述 信息安全基本概念: DES(Data Encryption Standard,数据加密标准) 3DES(Triple DES,三重数据加密算法(TDEA,Triple Data Encrypti ...

  2. 唐伯猫的 sql server 2008 的安装和操作记录

    在服务器win 2008 server r2 上安装sql 首先下载sql  server 2008  ,云盘有存储sql,很多论坛也有下载SQLEXPRADV_x64_CHS.exe 双击sql s ...

  3. 1789: [Ahoi2008]Necklace Y型项链

    1789: [Ahoi2008]Necklace Y型项链 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 421  Solved: 258[Submit] ...

  4. i++和++i 的学习

    在<<C++ Primer>> 第四版 5.5中讲解到: ++i:返回操作之后的结果,且是个左值. i++:返回操作之前的结果,且是有右值. // 2_3.cpp : 定义控制 ...

  5. H5 Canvas vs. SVG

    HTML 5 Canvas vs. SVG HTML5 SVG HTML5 地理定位 Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的. SVG SVG 是一种使用 XM ...

  6. 【HAL库每天一例】freemodbus移植

    例程下载:资料包括程序.相关说明资料以及软件使用截图 百度云盘:https://pan.baidu.com/s/1slN8rIt 密码:u6m1 360云盘:https://yunpan.cn/OcP ...

  7. android:layout_gravity和android:gravity属性的区别1

    一.介绍: gravity的中文意思就是"重心",就是表示view横向和纵向的停靠位置 (1).android:gravity:是对view控件本身来说的,是用来设置view本身的 ...

  8. Button颜色选择器进阶

    drawable/button_color.xml <?xml version="1.0" encoding="utf-8"?> <selec ...

  9. Ubuntu 16.04系统下安装RapidSVN版本控制器及配置diff,editor,merge和exploer工具

    在Window下我们使用TortoiseSVN(小乌龟),可以很方便地进行查看.比较.更新.提交.回滚等SVN版本控制操作. 在Linux下我们可以使用RapidSVN.RapidSVN是一款轻量级的 ...

  10. c#XML操作类的方法总结

    using System.Xml;using System.Data; namespace DotNet.Utilities{    /// <summary>    /// Xml的操作 ...