JavaScript中常用对象方法总结

news2025/8/8 0:48:58

Object.create()创建对象

该方法用于创建一个新对象,新建对象具有指定原型和若干个指定属性;

Object.create(proto)
Object.create(proto, propertiesObject)

 该方法接收两个参数,第一个参数是新建对象的指定原型对象,第二个参数可选,表示新建对象的某些属性;第二个参数要传入一个对象,对象内容是键值对,配置有四个参数,分别表示如下:

  • value:属性值
  • enumerable: 是否可被枚举(可遍历)
  • writable: 是否可被重写(改变)
  • configrable:是否可被更改和删除,以及除value和writable特性外的其它特性是否可以被修改。
var obj1 = {
  name: '小明',
  age: 13,
  intro: function() {
    console.log(`my name is ${this.name}`);
  }
}
obj1.intro(); // my name is 小明

var obj2 = Object.create(obj1, {
  'EnglishName': {value: 'xiaoMing', writable: false, configurable: false, enumerable: true },
  'hobby': {value: 'playing', writable: true, configurable: false, enumerable: false }
})
obj2.intro() // my name is 小明

console.log(obj2.EnglishName); // xiaoMing

obj2.EnglishName = 'xiaoHong'

console.log(obj2.EnglishName); // xiaoMing,未被重写

for(var item in obj2) {
console.log(item); // EnglishName name age intro    hooby并未被遍历出来
}

console.log(delete obj2.age); // true

console.log(delete obj2.hobby); // false 删不掉hobby属性

补充:

  1. 使用对象直接创建的属性,上述四种参数默认为true
  2. 使用Object.create() / Object.defineProperty() / Object.defineProperties()创建出来的属性,上述四种参数默认为false

Object.defineproperty()修改对象旧属性或定义对象新属性

该方法可以对对象已有的属性进行修改,或增加新的属性

Object.defineProperty(obj, prop, descriptor)

该方法接收三个参数,分别是要定义属性的对象 / 要定义的属性名称 / 属性描述对象(该对象依然是传入上述四种配置

        var obj1 = {
            name: '小明',
            age: 13,
            intro: function() {
                console.log(`my name is ${this.name}`);
            }
        }
        Object.defineProperty(obj1, 'name', {
            value: '小红',
            configurable: false
        })
        console.log(obj1); // {name: '小红', age: 13, intro: ƒ}
        console.log(delete obj1.name); // false

Object.defineproperties()修改对象多个旧属性或定义对象多个新属性

该方法与上面那个方法使用方式相似,只不过可以对多个属性进行修改或新增;

Object.defineProperties(obj, props)

该方法传入两个参数,其中第一个参数依然是要定义或修改属性的对象;第二个参数定义属性描述符对象(上述四个参数),分别以对象的形式传入,属性做键名~

        var obj1 = {
            name: '小明',
            age: 13,
            intro: function() {
                console.log(`my name is ${this.name}`);
            }
        }
        Object.defineProperties(obj1, {
            'name': {
                value: '小红',
                writable: false
            },
            'englishName': {
                value: 'Red',
                enumerable: false
            }
        })
        console.log(obj1); // {name: '小红', age: 13, englishName: 'Red', intro: ƒ}

Object.getOwnPropertyDescriptor()获取某自有属性的属性描述对象

该方法用于获取对象中某个自有属性(非继承得来)的属性描述对象;

Object.getOwnPropertyDescriptor(obj, prop)

该方法传入两个参数,第一个参数是要查找的目标对象,第二个参数是目标对象内自有属性名称;

var obj1 = {
  name: '小明',
  age: 13,
  intro: function() {
    console.log(`my name is ${this.name}`);
  }
}
var namepro = Object.getOwnPropertyDescriptor(obj1, 'name');
console.log(namepro); // { configurable: true enumerable: true value: "小明" writable: true }

Object.getOwnPropertyDescriptors()获取对象所有自身属性的属性描述对象

该方法用于获取某对象上所有自身属性(非继承)的属性描述对象,

Object.getOwnPropertyDescriptors(obj)

只有一个参数,表示要查找的目标对象,如果没有任何自身属性,则返回一个空对象;

var obj1 = {
  name: '小明',
  age: 13,
  intro: function() {
    console.log(`my name is ${this.name}`);
  }
}
var pro = Object.getOwnPropertyDescriptors(obj1);
console.log(pro); 

Object.getOwnPropertyNames()获取对象所有自有属性

该方法获取对象上所有的自由属性(不包含继承得来的属性和Symbol属性);

Object.getOwnPropertyNames(obj)

 传入一个目标对象作为参数;返回一个字符串数组

var obj1 = {
  name: '小明',
  age: 13,
  intro: function() {
    console.log(`my name is ${this.name}`);
  }
}
var obj2 = Object.create(obj1, {
  'EnglishName':  {
    value: 'xiaoMing',
    enumerable: false
  },
  'class': {
    value: '四年级',
    configurable: false
  }
});
console.log(Object.getOwnPropertyNames(obj2)); //  ['EnglishName', 'class'] 继承属性name,age,intro并未获取到

Object.getOwnPropertySymbols()获取对象的所有 Symbol 属性

该方法用于获取某对象中所有 Symbol 属性,返回一个数组;

Object.getOwnPropertySymbols(obj)
var obj = {};
var a = Symbol("a");
obj[a] = "localSymbol";
obj.name = '小明'
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(a)]

Object.setPrototypeOf()设置一个指定的原型对象

该方法用于为某对象设置一个指定的原型对象,即Prototype

Object.setPrototypeOf(obj, prototype)

传入两个参数,第一个参数是要设置的对象,第二个参数表示要指定的新原型(Prototype)

如果第一个参数不是一个对象,则该方法啥也不做;

var obj1 = {
  name: '小明',
  age: 13,
  intro: function() {
    console.log(`my name is ${this.name}`);
  }
}
var obj2 = {}
Object.setPrototypeOf(obj2, obj1)
console.log(obj2.name); //  小明
obj2.intro() // my name is 小明

Object.getPrototypeOf()获取某对象的原型对象prototype

该方法返回指定对象的对象原型prototype

Object.getPrototypeOf(obj)

只传入一个参数,即目标对象,若该目标对象没有继承属性,则返回null

function Obj() {
 
}
let obj = new Obj()
console.log(Object.getPrototypeOf(obj) === Obj.prototype) // true
const prototype1 = {};
const object1 = Object.create(prototype1);

console.log(Object.getPrototypeOf(object1) === prototype1); // true

Object.assign()合并对象

该方法用于将源对象(sources)的所有可枚举的自有属性(不是通过继承得来的属性)复制到目标对象(target)上;

返回合并后的对象target;

Object.assign(target, ...sources)

若源对象与目标对象具有相同的key,则目标对象中的属性将会被源对象中的属性覆盖;

该方法属于浅拷贝;

 <script>
    var obj1 = {
      name: '小明',
      age: 13,
      sing: function() {
         console.log('he can sing ~');
      }
    }
    var obj2 = {
      home: 'here'
    }
    console.log(Object.assign(obj2, obj1)) // home: 'here', name: '小明', age: 13, sing: ƒ
    obj2.sing(); // he can sing ~
</script>

Object.is()

该方法用于比较两个值是否严格相等,与严格相等运算符===的行为基本一致,返回布尔值;但是在处理NaN和-0/+0o有差异

Object.is(value1, value2); // value1和value2是要比较的两个值
console.log(Object.is(1, 1)) // true
console.log(Object.is(NaN, NaN)) // true
console.log(Object.is(+0, -0)) // false
console.log(1 === 1) // true
console.log(NaN === NaN) // false
console.log(+0 === -0) // true
console.log(Object.is([], [])); // false
console.log([] === []); // false

Object.keys()返回自身可枚举键名

该方法返回自身(不含继承)的所有可枚举(enumerable)属性的键名

Object.keys(obj) // obj要遍历的对象

该方法返回一个由键名组成的数组 

var obj1 = {
  name: '小明',
  age: 13,
  sing: function() {
     console.log('he can sing ~');
  }
}
console.log(Object.keys(obj1)); // ['name', 'age', 'sing']

Object.values()返回自身可枚举键值

该方法返回自身(不含继承)的所有可枚举(enumerable)属性的键值;

Object.values(obj) // obj为要遍历的对象

该方法返回由键值组成的数组

var obj1 = {
  name: '小明',
  age: 13,
  sing: function() {
    console.log('he can sing ~');
  }
}
console.log(Object.values(obj1)); // ['小明', 13, ƒ]

Object.entries()返回自身可枚举键值对

该方法返回自身(不含继承)的所有可枚举(enumerable)属性的键值对;

Object.entries(obj) // obj

该方法返回由键值对组成的数组;

var obj1 = {
  name: '小明',
  age: 13,
  sing: function() {
    console.log('he can sing ~');
  }
}
console.log(Object.entries(obj1)); // [ ['name', '小明'], ['age', 13], ['sing', ƒ] ]

 obj.hasOwnProperty()判断对象上是否存在某自有属性

该方法用于判断对象obj自身属性中是否具有指定的属性,返回布尔值

obj.hasOwnProperty(prop)

所传参数为某属性

var obj1 = {
  name: '小明',
  age: 13,
  intro: function() {
    console.log(`my name is ${this.name}`);
  }
}
var obj2 = {}
Object.setPrototypeOf(obj2, obj1)
console.log(obj1.hasOwnProperty('name')); // true
console.log(obj2.hasOwnProperty('name')); // false

prototypeObj.isPrototypeOf()判断某对象是否在另一个对象的原型链上

该方法用于测试一个对象是否存在于另一个对象的原型链上,返回布尔值

prototypeObj.isPrototypeOf(object)

其中object是要测试的目标对象,prototypeObj是另一个对象的原型链;

var o = {};
function Person(){

};
var p1 = new Person(); //继承自Person原来的原型Person.prototype
Person.prototype = o;
var p2 = new Person(); //继承自o
console.log(o.isPrototypeOf(p1)); // false o是不是p1的原型
console.log(o.isPrototypeof(p2)); // true  o是不是p2的原型
 
console.log(Object.prototype.isPrototypeOf(p1)); // true
console.log(Object.prototype.isPrototypeOf(p2)); // true

// p1的原型链结构是p1 => 原来的Person.prototype => Object.prototype => `null``
// p2的原型链结构是p2 => o => Object.prototype => null
// p1和p2都拥有Object.prototype, 他们都在Object.Prototype的原型链上

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

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

相关文章

校企合作共建体系:亚马逊云科技的云计算人才培养之道

1984年的一天&#xff0c;有一位老人在参观两名青少年展示计算机操作时&#xff0c;说出了一句被人们传颂至今的名言&#xff1a;“计算机的普及要从娃娃抓起。”数十年后的今天&#xff0c;伴随着云计算在全球的风起云涌&#xff0c;中国对云计算人才的需求也在与日俱增。面对…

RabbitMQ系列【15】AmqpAdmin使用详解

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录前言1、查询队列信息2、声明、删除交换机3、声明、删除队列4、声明、删除交换机/队列绑定关系5、初始化前言 在之前&#xff0c;我们都是通过注入Bean的方式去声明交换机、队列&#xff0c;应用…

前后端分离架构好用吗?

在数据化发展趋势越来越分明的当下&#xff0c;前后端分离架构可以让前、后端的工程师们做好各自分内的事&#xff0c;专注于各自领域&#xff0c;从而提升整体办公效率和推进数字化进程。说到这&#xff0c;有不少朋友会问我们&#xff0c;前后端分离架构好用吗&#xff1f;要…

WPF的数据绑定

文章目录前言一、WPF数据绑定的概要1. 数据绑定涉及到两个方面&#xff1a;2.对于绑定源&#xff0c;在WPF可以是以下四种&#xff1a;二、 绑定的模式1.根据数据流的方向&#xff0c;WPF中的数据绑定分为以下四种&#xff1a;三.绑定目标值影响绑定源值条件1. UpdateSourceTri…

小程序开发---01小程序初识

本教程主要讲如何开发一个微信小程序&#xff0c;从小程序的注册&#xff0c;开发环境的搭建&#xff0c;基础语法&#xff0c;路由导航&#xff0c;数据请求&#xff0c;分包&#xff0c;组件化等方面详情的接受了小程序开发的一些必备基础知识。 本系列文章使用是的B站黑马教…

OpenGL原理与实践——核心模式(四):摄像机变换理论与应用

目录 变换是什么&#xff1f;对于OpenGL的摄像机又意味着什么&#xff1f; MVP变换 投影变换 正交投影变换 透视投影变换 摄像机/投影矩阵的应用 绘制单个立方体——源码及渲染结果 绘制多个立方体——源码及渲染结果 构建摄像机类——实现控制摄像机移动 摄像机坐标…

全屋智能--智慧家庭新风向

全屋智能是指综合物联网、云计算和人工智能等技术&#xff0c;对该空间场所内的家居设备进行系统化集中管理&#xff0c;并赋予其人与场景交互能力&#xff0c;成为用户看不见的生活管家。全屋智能的核心价值在于自主感知、自主决策、自主控制、自主反馈的生命力。 全屋智能目前…

图床云存储项目课程随堂笔记

这个项目属实重量级&#xff0c;第一遍学习的过程比较懵&#xff0c;只是记录一下随堂笔记。后面理解了项目后端代码流程&#xff0c;再细写几篇博客归纳。 基本单机环境配置 大的项目你可能连配置都配不清楚。 新手必须要心细&#xff0c;因为你错了一步&#xff0c;想要纠…

网站被大量cc攻击导致打不开怎么解决

家好&#xff0c;今天小蚁君给大家分享一个昨天接入我们防护的客户&#xff0c;说下这个客户特点&#xff0c; 网站业务&#xff0c;由于源服务器是在阿里云&#xff0c;防护阈值很低&#xff0c;基本上是无防御的&#xff0c;随便压测一下就死&#xff0c;通过朋友介绍过来&am…

44个微服务架构设计模式你还不学吗,大佬都汇总好了,只能说太详细了!

前言 微服务架构已成为现代应用程序开发的事实上的选择。虽然它解决了某些问题&#xff0c;但它不是灵丹妙药。它有几个缺点&#xff0c;在使用这种架构时&#xff0c;必须解决许多问题。这就需要学习这些问题中的常见模式并用可重用的解决方案来解决它们。因此&#xff0c;需…

若依框架的使用

目录 1.为什么使用若依框架 2.环境搭建 2.1下载代码 2.2 系统配置 1.为什么使用若依框架 若依是一个快速开发框架&#xff0c;基于springboot&#xff0c;集成了mybatis&#xff0c;spring security&#xff0c;redis等常用的框架&#xff0c;支持多语言&#xff0c;已经实…

“闭关修炼”这么久,吃透这些“微服务”笔记,足够面试涨10K

01 SpringBoot 1.1 面试相关 &#xff08;1&#xff09;SpringBoot高频&#xff1a;35个知识点&#xff08;附解析&#xff09; Spring Boot、Spring MVC 和 Spring 有什么区别&#xff1f; 什么是自动配置&#xff1f; 什么是 Spring Boot Stater &#xff1f; 你能否举一…

Java代码审计——URL 跳转漏洞

目录 &#xff08;一&#xff09;URL 跳转漏洞简介 &#xff08;二&#xff09;URL 重定向 1&#xff0e;通过 ModelAndView 方式 2&#xff0e;通过返回 String 方式 3&#xff0e;使用 sendRedirect 方式 4&#xff0e;使用 RedirectAttributes 方式 5&#xff0e;通过…

elastic 概述

引言 1.1 海量数据 在海量数据中执行搜索功能时&#xff0c;如果使用MySQL&#xff0c;效率太低。 1.2 全文检索 在海量数据中执行搜索功能时&#xff0c;如果使用MySQL&#xff0c;效率太低。 1.3 高亮显示 将搜索关键字&#xff0c;以红色的字体展示。 ES概述 ES 也是一个n…

加锁和解锁-ReentrantLock详解-AQS-并发编程(Java)

文章目录1 AQS1.1 概念1.2 两种锁机制1.3 公平锁和非公平锁1.3 锁竞争1.4 条件变量2 ReentrantLock2.1 简介2 加锁2.1 加锁成功2.2 加锁失败2.2.1 tryAcquire()2.2.2 addWaiter()2.2.3 acquireQueued()2.2.3.1 主方法2.2.3.2 shouldParkAfterFailedAcquire()2.2.3.3 parkAndChe…

LeetCode 84.柱状图中最大的矩形

今天还是分享一道才刷过的题目&#xff0c; 柱状图中最大的矩形&#xff0c;这道题根上一篇我分享的接雨水类似&#xff0c;都是可以用双指针&#xff0c;动态规划(双指针加备忘录)&#xff0c;单调栈来算 这道题的话三种方法都写了&#xff0c;双指针会超时&#xff0c;优化一…

pdf生成:puppeteer

一、Puppeteer Puppeteer是Google Chrome团队出品的一款无界面Chrome工具&#xff0c;它提供了丰富的API&#xff0c;让开发者像鼠标一样控制浏览器的各种行为。Puppeteer是一个Node库&#xff0c;提供发了一个高级API来通过DevTools协议控制Chromium或Chrome。Puppeteer默认以…

SDN实战团技术分享(三十八):DPDK助力NFV与云计算

DPDK最初动机很简单&#xff0c;网络处理器的软件解决方案&#xff0c;证明IA多核处理器能够支撑高性能数据包处理。 什么是DPDK&#xff1f;对于用户来说&#xff0c;它可能是一个出色的包数据处理性能加速软件库&#xff1b;对于开发者来说&#xff0c;它可能是一个实践包处…

配置鼠标右键edit with notepad

注&#xff1a;notepad为一个轻量级的代码文本编辑器&#xff0c;还可以安装代码对比工具等&#xff0c;大大提供办公效率&#xff0c;十分方便。安装后&#xff0c;可能右键无法直接用notepad打开&#xff0c;需要在软件中&#xff0c;选择文件打开&#xff0c;本文介绍如果设…

内网Windows Git Server部署

疫情下&#xff0c;公司与家用电脑切换&#xff0c;导致代码更新接不上&#xff0c;最最最重要公司代码不能上传外网&#xff0c;因此内网 Git Server部署这稿子。 Server部署主要安装【Java、Git、TortoiseGit、Gitblit】前三为傻瓜安装&#xff0c;重点为Gitblit配置修改及部…