js深入理解对象的 属性(properties)的特殊 特性(attributes)

2024-05-27 21:44

本文主要是介绍js深入理解对象的 属性(properties)的特殊 特性(attributes),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对象

   js对象

// 构造一个对象
let obj = {};
let obj = new Object();

        我们知道js中一切皆对象,对象是一个键值对集合(key: value),一个键(key)对应一个值(value),而每个键都是这个对象的属性,我们可以通过对象的属性来获取对应的值,但是对于对象的属性来说,他还有一些“隐式”的特性。

属性标志

对象属性(properties),除 value 外,还有三个特殊的特性(attributes),也就是所谓的“标志”:

  • writable — 如果为 true,则值可以被修改,否则它是只可读的。
  • enumerable — 如果为 true,则会被在循环中列出,否则不会被列出。
  • configurable — 如果为 true,则此属性可以被删除,这些特性也可以被修改,否则不可以。

        当我们用“常用的方式”创建一个属性时,它们都为 true。这表示一个新建的对象,它的属性默认是可修改的,可遍历的,可删除的

Object.getOwnPropertyDescriptor()

         静态方法返回一个对象,该对象描述给定对象上特定属性的一些特性。返回的对象是可变的,但不会影响原来的对象。

let descriptor = Object.getOwnPropertyDescriptor(obj, propertyName);//1.obj---对象。
//2.propertyName---需要从中获取信息的属性的名称。
let obj = {name : "Tom",age : 18
}console.log(obj);let descriptor = Object.getOwnPropertyDescriptor(obj,"name");// 返回一个对象 obj对象的name属性的特性
console.log(descriptor);

 

可以看到obj对象的name属性值是“Tom”,name在obj中是可以遍历的,可以修改的,可以删除的 

这里要注意,descruptor的内容 并不指向这些属性,直接修改descruptor,obj不会有任何影响(obj是一个新对象,只是用来展示,查看)

Object.defineProperty()

Object.defineProperty(obj, prop, descriptor)//1.obj---要定义属性的对象。
//2.prop---一个字符串或 Symbol,指定了要定义或修改的属性(键)。
//3.descriptor---要定义或修改的属性的描述符。

Object.defineProperty() 静态方法会直接在给定的对象上定义一个新属性,或修改其现有属性,并返回此对象。

Object.defineProperty(obj,"sex",{value : "男"
})
console.log(obj,Object.getOwnPropertyDescriptor(obj,"sex"));

 可以看到通过这个方法可以给对象添加属性和值,同时若没有指定其他特性,那默认会设置为false,而直接对属性修改值和添加属性的方式则默认其特性为true。

在这个例子中,obj的sex属性是不能被遍历,修改,和删除的,我们只能读取它的值

总结

了解这些后,我们设置对象时就可以像内建的对象一样,设置常量,而不被修改(例如:Math.PI)

更多相关内容

这篇关于js深入理解对象的 属性(properties)的特殊 特性(attributes)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008675

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的