【ECMAScript】Object对象的属性和方法梳理和总结(第八篇)

1. 前言

        本篇梳理Object静态方法和Object的原型对象方法。

2. Object的静态属性
Object静态属性说明示例
prototype构造函数对象Object的原型属性Object.prototype
length构造函数对象Object的length属性

Object.length

得到1

name构造函数对象Object的name属性

Object.name

得到‘Object’

3. Object的静态方法
Object静态方法说明示例
Object.assign(target, src1, src2, ...)

功能:将一个或多个源对象的可枚举自有属性复制目标对象(浅拷贝,仅复制属性值),并返回目标对象的引用

输入:Object, Object, ....

输出:Object-目标对象的引用

const obj = {a:1};

Object.assign(obj, {b:3,c:2}, {c:3})

obj变成{a:1,b:3,c:3}

Object.create(prototype, descriptors?)

功能:以现有对象为原型,创建一个新对象

输入:Object, 多个属性描述符对象

输出:Object

const obj = {a:1};

const obj2 = Object.create(obj)

obj2.a

得到1

Object.defineProperty(target, property, descriptor)

功能:在目标对象target定义新属性或修改现有属性,并返回目标对象的引用

输入:Object, any, 属性描述符对象

输出:Object-目标对象的引用

const obj = {a:1};

Object.defineProperty(

obj, 'a', {

 value: 2,

 writable: false,

})

Object.defineProperties(target, descriptors)

功能:在目标对象target定义多个新属性或修改现有多个属性,并返回目标对象的引用

输入:Object, any, 多个属性描述符对象

输出:Object-目标对象的引用

const obj = {a:1};

Object.defineProperties(

obj, {

a: {

 value: 2,

 writable: false,

},

b: {

value:3

}

})

Object.getOwnPropertyDescriptor(target, property)

功能:返回目标对象的指定自有属性的属性描述符

输入:Object, any

输出:descriptor-属性描述符对象 | undefined

const obj = {a:1};

Object.getOwnPropertyDescriptor(

obj, 'a');

得到

{value:1,writable:true,

enumerable:true,configurable:true}

Object.getOwnPropertyDescriptors(target)

功能:返回目标对象所有自有属性的属性描述符

输t入:Object

输出:descriptors-多个属性描述符对象 | { }

const obj = {a:1,b:2};

Object.getOwnPropertyDescriptors(

obj);

得到

{

a: {

value:1,writable:true,

enumerable:true,configurable:true

},

b:  {

value: 2.writable:true,

enumerable:true,configurable:true

}

}

Object.getOwnPropertyNames(target)

功能:返回目标对象所有自有属性的属性键数组(含不可枚举,不含symbol值作为属性键

输入:Object

输出:Array<any>

const obj = {a:1,b:2};

Object.getOwnPropertyNames(

obj)

得到['a','b']

Object.getOwnPropertySymbols(target)

功能:返回目标对象所有自有且symbol作为属性键的属性键数组

输入:Object

输出:Array<symbol>

const obj = {a:1,[Symbol.for('b')]:2};

Object.getOwnPropertySymbols(

obj)

得到[ Symbol(b) ]

Object.hasOwn(target, property)

功能:判断指定属性property是否为目标对象target自有属性,旨在取代Object.prototype.hasOwnProperty

输入:Object, any

输出:boolean(即true | false)

const obj = {a: 1}

Object.hasOwn(obj, a)

得到true

Object.keys(target)

功能:返回目标对象可枚举自有属性的属性键数组(字符串属性键)

输入:Object

输出:Array<string>

const obj = {a:1,b:2};

Object.keys(obj)

得到['a','b']

Object.values(target)

功能:返回目标对象可枚举自有属性的属性值数组(字符串属性键)

输入:Object

输出:Array<string>

const obj = {a:1,b:2};

Object.values(obj)

得到[1,2]

Object.entries(target)

功能:返回目标对象可枚举自有属性的键值对数组(字符串属性键)

输入:Object

输出:Array<any>

const obj = {a:1,b:2};

Object.entries(obj)

得到[['a', 1],['b', 2]]

Object.fromEntries

功能:将键值对列表转换成一个对象

输入:可迭代对象

输出:Object

Object.fromEntries([

['a', 1],

['b', 2]

])

得到{a:1,b:2}

Object.getPrototypeOf(target)

功能:返回指定对象的原型

输入:Object

输出:Object-原型对象

Object.getPrototypeOf({})

=== Object.prototype

得到true

Object.setPrototypeOf(target, prototype)

功能:更改目标对象的原型对象__proto__指向

输入:Object, Object-原型对象

输出:Object-目标对象引用

<略>
Object.freeze(target)

功能:冻结一个对象,被冻结对象就不能更改,返回目标对象的引用

输入:Object

输出:Object-输入对象的引用

const obj = { a: 1 }

Object.freeze(obj)

delete obj.a

无法删除obj中的a

Object.isFrozen(target)

功能:判断目标对象是否已经被冻结

输入:Object

输出:boolean(即true | false)

const obj = { a: 1 }

Object.freeze(obj)

Object.isFrozen(obj)

得到true

Object.seal(target)

功能:密封一个对象,功能比freeze弱,可更改现有属性的值

输入:Object

输出:Object-输入对象的引用

const obj = { a: 1 }

Object.seal(obj)

obj.a=2

// 可以更改obj中a的值

delete obj.a

// 无法删除obj中的a

Object.isSealed(target)

功能:判断目标对象是否已经被密封

输入:Object

输出:boolean(即true | false)

const obj = { a: 1 }

Object.seal(obj)

Object.isSealed(obj)

得到true

Object.preventExtensions(target)

功能:阻止一个对象被扩展(添加新属性),以及防止对象的原型被重新指定,功能比seal和freeze还弱,

输入:Object

输出:Object-输入对象的引用

const obj = { a: 1 }

Object.preventExtensions(

obj)

obj.b = 1;

// 添加的b属性不生效

Object.isExtensible(target)

功能:判断目标对象是否可扩展(是否可添加新属性)

输入:Object

输出:boolean(即true | false)

const obj = { a: 1 }

Object.preventExtensions(

obj)

Object.isExtensible(obj)

得到false

Object.is(val1, val2)

功能:确认两个值是否为相同值

输入:any, any

输出:boolean(即true | false)

都是undefined

都是null

都是true或都是false

长度顺序字符相同的字符串

引用内存中同一个对象

相同数值的BigInt类型数值

引用相同Symbol值

都是数字

        都是+0

        都是-0

        都NaN

        相同值(非0,非NaN)

注:Object.is与===差异已标红

Object.groupBy(items, callbackFn)

<略>

<略>
4. 属性描述符

        JavaScript中,一个属性是由字符串值的名称或一个Symbol 和一个属性描述符组成,一个属性描述符合有以下一些特性。

  • value - 与属性关联的值(限定为数据描述符)
  • writable - 仅当与属性关联的值可更改时,设置为true(限定为数据描述符)
  • get - 作为属性getter的函数,如果没有getter,则为undefined(限定为访问器描述符)
  • set - 作为属性为setter的函数,如果没有setter,则为决defined(限定为访问器描述符)
  • configurable - 仅当此属性描述符的类型可以更改且可以删除时,设置为true
  • enumerable - 仅当此属性在相应对象的属性枚举中出,设置为true
5. Object原型对象的方法
Object原型对象的方法说明

示例

Object.prototype.hasOwnProperty(property)

功能:判断指定属性property是否是自有属性

输入:any

输出:boolean(即true | false)

const obj = { a: 1 };

obj.hasOwnProperty('a')

得到true

Object.prototype.isPrototypeOf(target)

功能:检测一个对象是否是目标对象target的原型或存在于目标对象的原型链某个节点

输入:Object

输出:boolean(即true | false)

const obj = { a: 1 };

const obj1 = Object.create(obj);

obj.isPrototypeOf(obj1)

得到true

Object.prototype.propertyIsEnumerable(

property)

功能:指定属性property是否是对象的可枚举自有属性

输入:any

输出:boolean(即true | false)

const obj = { a: 1 };

obj.propertyIsEnumerable(a)

得到true

Object.prototype.toLocaleString()

功能:返回一个表示对象的字符串,派生对象会重写此方法

输入:无

输出:string

<略>
Object.prototype.toString()

功能:返回一个表示对象的字符串,派生对象会重写此方法

输入:无

输出:string

const obj = { a: 1 };

obj.toString();

返回'[object Object]'

Object.prototype.valueOf()

功能:将this值转换成对象,将对象转换成基本类型值,派生对象会重写此方法

输入:无

输出:any

const obj = { a: 1 };

obj.valueOf() === obj

得到true

 6. Object原型对象的属性
Object原型对象的属性说明示例
Object.prototype.constructorObject原型对象Object.prototype,它的construcotr属性指向ObjectObject.prototype.constructor

下一篇:【ECMAScript】Function对象的属性和方法梳理和总结(第九篇)-CSDN博客

注:以上,如有不合理之处,还请帮忙指出,大家一起交流学习~

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

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

相关文章

机场信息集成系统系列介绍(6):机场协同决策支持系统ACDM

目录 一、背景介绍 1、机场协同决策支持系统是什么&#xff1f; 2、发展历程 3、机场协同决策参与方 4、相关定义 二、机场协同决策ACDM的建设目标 &#xff08;一&#xff09;机场协同决策支持系统的宏观目标 1、实现运行数据共享和前序航班信息透明化 2、实现地面资源…

H5小游戏加固方案

今年的中国游戏产业年会上&#xff0c;小游戏成了万众瞩目的行业新风口。据伽马数据统计&#xff1a;2023年小游戏市场规模可达200亿元&#xff0c;同比增长300% 。 小游戏有着分发更精准、用户转化率更高、研发成本更低、场景适用性更强等优势&#xff0c;具备巨大的市场潜力…

抖店只能用官方电子面单?2024抖店玩法解读,附面单使用教程

我是王路飞。 正在做抖店的商家&#xff0c;应该都发现一件事情了&#xff0c;那就是现在的抖店好像不让拍单了&#xff0c;只能使用抖音的电子面单&#xff0c;打单发货。 说实话&#xff0c;这种情况已经出现过太多次了&#xff0c;导致很多商家不以为然。 我曾经也说过&a…

MATLAB - 读取双摆杆上的 IMU 数据

系列文章目录 前言 本示例展示了如何从安装在双摆杆上的两个 IMU 传感器生成惯性测量单元 (IMU) 读数。双摆使用 Simscape Multibody™ 进行建模。有关使用 Simscape Multibody™ 构建简易摆的分步示例&#xff0c;请参阅简易摆建模&#xff08;Simscape Multibody&#xff09…

部署LNMP动态网站

部署LNMP动态网站 安装LNMP平台相关软件1. 安装软件包2. 启动服务&#xff08;nginx、mariadb、php-fpm&#xff09;3. 修改Nginx配置文件&#xff0c;实现动静分离4. 配置数据库 上线wordpress代码 &#xff08;测试搭建的LNMP环境是否可以使用&#xff09;1. 上线php动态网站…

手写MapReduce实现WordCount

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 需求分析编写MapReduce实现上述功能Mapper类Reducer类Driver类 查看输出结果 需求 假设有一个文本文件word.txt&#xff0c;我们想要统计这个文本文件中每个单词出现的次数。 文件内容如下…

贪心算法高频问题-区间问题

判断区间是否重叠&#xff08;Leetcode 252&#xff09; public static boolean canAttendMeetings(int[][] intervals) {//按照会议开始时间排序Arrays.sort(intervals, (a, b) -> a[0] - b[0]);for (int i 0; i < intervals.length - 1; i) {if (intervals[i 1][0]…

「Verilog学习笔记」自动售卖机

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule sale(input clk ,input rst_n ,input sel ,//sel0,5$dranks,sel1,10&$drinksinput …

JavaScript原型,原型链 ? 有什么特点?

一、原型 JavaScript 常被描述为一种基于原型的语言——每个对象拥有一个原型对象 当试图访问一个对象的属性时&#xff0c;它不仅仅在该对象上搜寻&#xff0c;还会搜寻该对象的原型&#xff0c;以及该对象的原型的原型&#xff0c;依次层层向上搜索&#xff0c;直到找到一个…

【Linux笔记】文件和目录操作

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux学习 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 命令 ls (List): pwd (Print Working Directory): cp (Copy): mv (Move): rm (Remove): 结语 我的其他博客 前言 学习Linux命令…

前端基础vue路由懒加载

为什么用路由懒加载 首屏组件加载速度更快一些&#xff0c;解决白屏问题&#xff0c;常言道需要就加载&#xff0c;不需要就先放一边 懒加载定义 懒加载简单来说就是延迟加载或按需加载&#xff0c;即在需要的时候的时候进行加载。 使用 常用的懒加载方式有两种&#xff1a;即…

Vue项目里rem的使用

先在src下的libs文件夹下新建一个js文件,取名为rem.js,封装一个换算方法: // 此处的16跟上面的16对应,同样是倍数 const baseSize = 16 // 设置根节点的font-size大小函数 function setRem () {// 375为设计稿页面宽度,如为750,把375改为750const scale = document.docu…

案例096:基于微信小程序的社区团购系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;Spring Boot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder…

python dash 的学习笔记1

dash 用python开发web界面 https://dash.plotly.com/ 官方上支持jula F# python一类。当然我只会python只学习python中使用dash. 要做一个APP&#xff0c;用php,java以及.net都可以写&#xff0c;只所有选择python是因为最近在用这一个。同时也发现python除了慢全是优点。 资料…

MES系统怎么实现车间管理中的生产计划和排产计划

MES中的生产计划和排产计划都是制造企业中非常重要的概念&#xff0c;它们的目的是为了确保企业能够按时交付高质量的产品&#xff0c;同时还要保持生产效率和成本效益。 一、生产计划 生产计划是指制造企业为了满足客户需求而制定的计划&#xff0c;它包括了制造的数量、时间…

基于SSM的面向TCP_IP的网络互联实验平台

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的面向TCP和IP的网络互联实验平台…

计算机网络——计算机网络的概述(一)

前言&#xff1a; 面对马上的期末考试&#xff0c;也为了以后找工作&#xff0c;需要掌握更多的知识&#xff0c;而且我们现实生活中也已经离不开计算机&#xff0c;更离不开计算机网络&#xff0c;今天开始我们就对计算机网络的知识进行一个简单的学习与记录。 目录 一、什么…

java easyexcel上传和下载数据

安装依赖 easyexcel官方文档 <!--通过注解的方式导出excel--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.1</version></dependency>注意踩坑&#xff1a;easyexcel会…

【单调栈】LeetCode:2818操作使得分最大

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 涉及知识点 单调栈 题目 给你一个长度为 n 的正整数数组 nums 和一个整数 k 。 一开始&#xff0c;你的分数为 1 。你可以进行以下操作至多 k 次&#xff0c;目标是使你的分数最大&#xff1a; 选择一个之前没有选过的 非…

【已解决】Python Bresenham 3D算法

放一段使用Python实现Bresenham 3D 算法的代码&#xff0c;并通过Matplot可视化 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from numba import njitnjit def bresenham_safe(grid, x0, y0, z0, x1, y1, z1, value_to_fill…