JavaScript Object所有方法

news2024/12/22 18:28:20

image.png
下面将会一一介绍上面的方法。

Object.create

Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象。

Object.create(proto [, propertiesObject ])

  • proto 为新创建对象的原型对象,设置为null可创建没有原型的空对象。
  • propertiesObject 包涵若干个属性的描述符和defineProperties的第二个参数一样。
Object.create(Object.prototype, {
	a: {
		value: 1,
		writable: true,
		configurable: true
	}
});

创建一个继承自Object.prototype的对象,有一个属性a,其可写,可配置,不可枚举,值为1。

更多详情。

Object.defineProperty

Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。

Object.defineProperty(obj, prop, descriptor)

descriptor 可包含4个属性,如下:

  • configurable 当且仅当这个属性描述符值为 true 时,该属性可能会改变,也可能会被从相应的对象删除。默认为 false。
  • enumerable true 当且仅当该属性出现在相应的对象枚举属性中。默认为 false。
  • value 属性的值
  • writable 定义属性值是否可写。
  • get 一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。方法将返回用作属性的值。默认为 undefined。
  • set 同get一起使用,功能互补。

其中value和writable一组,get和set一组,不可同时出现。

// 显式
Object.defineProperty(obj, "key", {
	enumerable: false,
	configurable: false,
	writable: false,
	value: "static"
});

上面给obj对象定义了一个属性key,其不可枚举,不可配置,只读,值为static。

更多详情。

Object.defineProperties

Object.defineProperties() 方法在一个对象上添加或修改一个或者多个自有属性,并返回该对象。

Object.defineProperties(obj, props)

更多详情。

Object.getPrototypeOf

Object.getPrototypeOf() 方法返回指定对象的原型(也就是该对象内部属性[[Prototype]]的值)。

Object.getPrototypeOf(object)

可以用来获取对象的原型。

Object.getPrototypeOf({}) === Object.prototype
// > true

在es5之前,要达到上面同样的方法,只能使用 constructor。

({}).constructor.prototype === Object.prototype
// > true

但对于自定义的构造函数,如果复写了prototype,可能导致获取的constructor不正确,如何解决这个问题,可以看这篇文章。

更多详情。

Object.getOwnPropertyDescriptor

Object.getOwnPropertyDescriptor() 返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)

Object.getOwnPropertyDescriptor(obj, prop)

可用来获取或查看对象属性的特性。

var obj = {a: 1};
Object.getOwnPropertyDescriptor(obj, 'a');
// > Object {value: 1, writable: true, enumerable: true, configurable: true}

更多详情。

Object.keys

Object.keys() 方法会返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in循环遍历该对象时返回的顺序一致(两者的主要区别是 for-in 还会遍历出一个对象从其原型链上继承到的可枚举属性)。

Object.keys(obj)

典型的用法如下:

var obj = {a: 1, b: 2};
console.log(Object.keys(obj));
// > ["a", "b"]

keys可以用来代替原来的for in循环,借助es5新增的数组方法,可提升代码可读性。

Object.keys(obj).forEach(function (val) {console.log(val)});

更多详情。

Object.getOwnPropertyNames

Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组。

Object.getOwnPropertyNames(obj)

其和Object.keys的区别就是能够获取自身的全部属性,包括不可枚举属性。

Object.preventExtensions

Object.preventExtensions() 方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。

Object.preventExtensions(obj)

需要注意的是不可扩展的对象的属性通常仍然可以被删除。

尝试给一个不可扩展对象添加新属性的操作将会失败,在非严格模式下是静默的,在严格模式下会抛出TypeError异常。

Object.preventExtensions 只能阻止一个对象不能再添加新的自身属性,仍然可以为该对象的原型添加属性。

在 ECMAScript 5 中可扩展的对象可以变得不可扩展,但反过来不行。

更多详情。

Object.isExtensible

Object.isExtensible() 方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。

更多详情。

Object.seal

Object.seal() 方法可以让一个对象密封,并返回被密封后的对象。密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可能可以修改已有属性的值的对象。

Object.seal(obj)

密封一个对象会让这个对象变的变为不可扩展的,且所有已有属性会变的不可配置。属性不可配置的效果就是属性变的不可删除,以及一个数据属性不能被重新定义成为访问器属性,或者反之。但属性的值仍然可以修改。

尝试删除一个密封对象的属性或者将某个密封对象的属性从数据属性转换成访问器属性,结果会静默失败或抛出TypeError异常(严格模式)。

更多详情。

Object.isSealed

Object.isSealed() 方法判断一个对象是否是密封的(sealed)。

更多详情。

Object.freeze

Object.freeze() 方法可以冻结一个对象。冻结对象是指那些不能添加新的属性,不能修改已有属性的值,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性的对象。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。

Object.freeze(obj)

冻结对象是不可扩展的,密封的,同时期值属性的writable会被设置为false,set也将失效,总之会变为不可更改。任何尝试修改该对象的操作都会失败,可能是静默失败,也可能会抛出异常(严格模式)。

Object.isFrozen

Object.isFrozen() 方法判断一个对象是否被冻结(frozen)。

更多详情。

Object.assign

Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。

更多详情

Object.assign(target, ...sources)

Object.getOwnPropertySymbols

Object.getOwnPropertySymbols() 方法会返回一个数组,该数组包含了指定对象自身的(非继承的)所有 symbol 属性键。

更多详情

Object.is

Object.is() 方法用来判断两个值是否是同一个值。

Object.is与严格比较运算符(===)的行为基本一致,不同之处只有两个:一是+0不等于-0,二是NaN等于自身。

更多详情

Object.setPrototypeOf

将一个指定的对象的原型设置为另一个对象或者null(既对象的[[Prototype]]内部属性)。

Object.setPrototypeOf(obj, prototype)

更多详情

Object.prototype

Object.prototype上的方法,都是实例方法,必须在对象实例上调用。

  • hasOwnProperty
  • isPrototypeOf⑤
  • propertyIsEnumerable⑤
  • proto

Object#hasOwnProperty

hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性。

obj.hasOwnProperty(prop)

在没有Object.keys之前,借助hasOwnProperty,可以让for in 达到类似的效果,代码如下:

for(var key in obj) {
	if (obj.hasOwnProperty(key)) {
		//过滤掉原型上的方法
	}	
}

更多详情。

Object#isPrototypeOf

isPrototypeOf() 方法测试一个对象是否存在于另一个对象的原型链上。

prototype.isPrototypeOf(object)

更多详情。

Object#propertyIsEnumerable

propertyIsEnumerable() 方法返回一个布尔值,表明指定的属性名是否是当前对象可枚举的自身属性。

obj.propertyIsEnumerable(prop)

从原型链上继承的属性,所以该方法会返回false。

如果对象没有指定的属性,该方法返回 false。

更多详情。

Object#proto

一个对象的__proto__ 属性和自己的内部属性[[Prototype]]指向一个相同的值 (通常称这个值为原型),原型的值可以是一个对象值也可以是null(比如说Object.prototype.__proto__的值就是null).该属性可能会引发一些错误,因为用户可能会不知道该属性的特殊性,而给它赋值,从而改变了这个对象的原型。 如果需要访问一个对象的原型,应该使用方法Object.getPrototypeOf。 proto 属性已经被添加在了ES6草案 §B.3.1中。

更多详情。

总结

除了上面介绍的方法,还有一些实验方法,和不常用的方法,可以在这里找到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/828186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes系列-Ingress

1 Ingress 概述 Kubernetes 对外暴露服务(Service)主要有两种方式:NodePort,LoadBalance,此外 externalIps 也可以使各类 service 对外提供服务,但是当集群服务很多的时候,NodePort方式最大的缺…

静态资源导入探究

静态资源可以在哪里找呢?我们看看源码 从这个类进去 里面有个静态类 WebMvcAutoConfigurationAdapter 有个配置类,将这个类的对象创建并导入IOC容器里 这个静态类下有个方法 addResourceHandlers(ResourceHandlerRegistry registry)静态资源处理器 若自…

【测试联调】如何在前后端测试联调时优雅的构造异常场景

目录 背景 使用iptables实现 利用iptables丢弃某ip数据包 使用 -L 列出所有规则 IP 连通性 通信 测试 插入一条规则,丢弃此ip 的所有协议请求 列出所有规则 测试 丢弃规则内的IP 连通性 清除 规则列表的 限制 模拟ip进行丢包50%的处理。 mysql proxy 代理…

面试总结-Redis篇章(十一)——分片集群、数据读写规则

分片集群、数据读写规则 主从(解决高并发)和哨兵(解决高可用)分别解决了高并发读、高可用的问题。但是依然有两个问题没有解决:解决办法:使用分片集群可以解决上述问题。 特征:客户端请求可以访…

【uni-app】【Android studio】手把手教你运行uniapp项目到Android App

最开始想写一个自定义背景的弹窗,因为要用到项目的好几个地方,不希望每个地方都需要引入。而且只需要放张图片,加个关闭按钮和功能按钮就行,类似这种效果: 开始写的时候找了一篇博客,写的很详细&#xff0…

vue element el-upload附件上传、在线预览、下载当前预览文件

上传 在线预览&#xff08;iframe&#xff09;&#xff1a; payload&#xff1a; response&#xff1a; 全部代码&#xff1a; <template><div><el-table :data"tableData" border style"width: 100%"><el-table-column prop"d…

论文阅读 - Social bot detection in the age of ChatGPT: Challenges and opportunities

论文链接&#xff1a;https://www.researchgate.net/publication/371661341_Social_bot_detection_in_the_age_of_ChatGPT_Challenges_and_opportunities 目录 摘要&#xff1a; 引言 1.1. Background on social bots and their role in society 1.2. The rise of AI-gene…

细扒电驱电控整合趋势

电机和电控的配套量方面&#xff0c;领先都是比亚迪的弗迪动力。这与比亚迪整车销量显著领先分不开。在电机和电控排名靠前的企业中&#xff0c;有很多相同的企业。根据科瑞三电系统数据的统计&#xff0c;72%的电机电控来自同一企业&#xff0c;这部分业务量在2022年的同比增速…

剑指大厂,手撕 Java 八股文

tip: 此贴为目录贴&#xff0c;定期更新 toNew: 时间是最好的答案&#xff0c;它能解决所有问题。坚持&#xff01;&#xff01;&#xff01; ✌本文章旨在总结 Java 的知识生态以及帮助需要学习者和求职者&#xff0c;本人从事应用安全和大数据领域&#xff0c;有8年开发经验&…

mse.backward()作用及原理

作用&#xff1a;自动求导。计算那些有关图中叶子节点的tensors的梯度(这里的叶子节点指的是那些require_gardtrue的叶子节点) 计算叶子节点的梯度&#xff0c;自动附加在每个tensor的成员变量上&#xff0c;之后通过变量.grad&#xff0c;比如w.grad,b.grad 来调用。 另外补…

浅谈React中的ref和useRef

目录 什么是useRef&#xff1f; 使用 ref 访问 DOM 元素 Ref和useRef之间的区别 Ref和useRef的使用案例 善用工具 结论 在各种 JavaScript 库和框架中&#xff0c;React 因其开发人员友好性和支持性而得到认可。 大多数开发人员发现 React 非常舒适且可扩展&#xff0c;…

从0到1开发go-tcp框架【3-读写协程分离、引入消息队列、进入连接管理器、引入连接属性】【基础篇完结】

从0到1开发go-tcp框架【3-读写协程分离、引入消息队列、进入连接管理器、引入连接属性】 1 读写协程分离[v0.7] 添加一个Reader和Writer之间通信的channel添加一个Writer goroutineReader由之前直接发送给客户端改为发送给通信channel启动Reader和Writer一起工作 zinx/znet/co…

TPlink DDNS 内网穿透?外网访问设置方法

有很多小伙伴都想知道&#xff1a;TPlink路由器怎么设置DDNS内网穿透&#xff1f;今天&#xff0c;小编就给大家分享一下TPlink DDNS 外网访问设置方法&#xff0c;下面是图文教程&#xff0c;帮助新手快速入门DDNS设置。 本文介绍的是云路由器TP-LINK DDNS的设置方法。TP-LIN…

【算法提高:动态规划】1.6 区间DP

文章目录 前言例题列表1068. 环形石子合并&#xff08;前缀和 区间DP 环形转换成线性⭐&#xff09;如何把环转换成区间&#xff1f;⭐实现代码补充&#xff1a;相关题目——282. 石子合并 320. 能量项链&#xff08;另一种计算价值的石子合并&#xff09;479. 加分二叉树&am…

企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图 tbms

&#xfeff; 项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&am…

VBA技术资料MF38:VBA_在Excel中隐藏公式

【分享成果&#xff0c;随喜正能量】佛祖也无能为力的四件事&#xff1a;第一&#xff0c;因果不可改&#xff0c;自因自果&#xff0c;别人是代替不了的&#xff1b;第二&#xff0c;智慧不可赐&#xff0c;任何人要开智慧&#xff0c;离不开自身的磨练&#xff1b;第三&#…

Stable Diffusion - SDXL 1.0 全部样式设计与艺术家风格的配置与提示词

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132072482 来源于 Anna Dittmann 安娜迪特曼&#xff0c;艺术家风格的图像&#xff0c;融合幻想、数字艺术、纹理等样式。 SDXL 是 Stable Diffus…

星戈瑞 | DSPE-PEG-CY3在生物医学研究中的作用

DSPE-PEG-CY3纳米颗粒在生物医学研究中具有多种重要作用&#xff0c;主要包括以下方面&#xff1a; 1. 荧光成像&#xff1a; DSPE-PEG-CY3纳米颗粒具有花菁染料CY3的荧光特性&#xff0c;可以被用作生物标记物&#xff0c;在细胞和生物体内进行荧光成像。这种荧光成像技术可以…

基于fpga_EP4CE6F17C8_秒表计数器

文章目录 前言实验手册一、实验目的二、实验原理1&#xff0e;理论原理2&#xff0e;硬件原理 三、系统架构设计四、模块说明1&#xff0e;模块端口信号列表dig_driver(数码管驱动模块)key(按键消抖模块)top(顶层模块) 2&#xff0e;状态转移图3&#xff0e;时序图五、仿真波形…

iOS数字转为图片

根据数字&#xff0c;转成对应的图片 - (void)viewDidLoad {[super viewDidLoad];[self testNum2String:10086]; }/// 根据数字&#xff0c;显示对应的图片 数字用特定的图片显示 - (void)testNum2String:(NSInteger)num {UIView *numContentView [[UIView alloc] initWithFr…