常用的对象方法帮助快速理解

Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);// { a: 1, b: 4, c: 5 }
console.log(returnedTarget); // { a: 1, b: 4, c: 5 }
console.log(target === returnedTarget) //true

Object.create()方法创建一个新对象,使用现有的对象来提供新创建对象的proto。

const person={isHuman:false,printIntroduction:function(){console.log(this.isHuman)}
}
const me = Object.create(person);
me.name = "Mattew" // name被设置到me上person没有变
me.isHuman = true // 属性可以被重写me.printIntroduction() //true
person.perintIntroduction() //false

Object.defineProperties()方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
语法 Object.defineProperties(obj, props) obj在其上定义或修改属性的对象。props要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:数据描述符和访问器描述符(可参照Object.defineProperty())。描述符具有以下键:configurabletrue 当且仅当该属性描述符的类型可以被改变并且该属性可以从对应独享中删除。默认为false;emumerabletrue当且仅当在枚举对象上的属性时该属性显现。默认为false;value与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。默认为undefained;writeabletrue当且仅当与该属性相关联的值可以用assignment operator改变时。默认为false。get作为该属性的getter函数,如果没有getter则为undefined。函数返回值被用作属性的值。默认为undefined;set作为属性的setter函数,如果没有setter则为undefined。函数将仅接受参数赋值给该属性的新值。默认为undefined;返回值节 传递给函数的对象。

var obj={}
ObjectdefineProperties(obj,{'property1':{value:true,writeable:true,set:function(value){console.log(1)this.value=value}},'property2':{value:'Hello',writeable:false}
})

Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。
语法Object.defineProperty(obj,prop,descriptor) obj要再其上定义属性的对象。prop要定义或修改的属性的名称。descriptor将定义或修改的属性描述符。返回值节 被传递给函数的对象。在ES6中,由于Symbol类型的特殊性,用Symbol类型的值来做对象的key与常规的定义或修改不同,而Object.defineProperty是定义key为Symbol的值来做对象的key与常规的定义或修改不同,而Object.defineProperty是定义key为Symbol的属性的方法之一。

Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用for…in 循环遍历该对象时返回的顺序一致(区别在于for-in循环也枚举原型链中的属性)

const object = { name: 'zhangsan', age: 12 }
console.log(Object.entries(object))// [['name', 'zhangsan'], ['age', 12]]

Object.freeze()方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举型、可配置性、可写行,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze()返回和传入的参数相同的对象。

const person = {name: '张三', age: 12 }
const person2 = Object.freeze(person)
person.name = '李四' // {name: '张三', age: 12 }
person === person2 // true

Object.fromEntries()把键值对列表转换为一个对象。

Map 转化为 Object
通过 Object.fromEntries,可以将Map转化为Objectconst map = new Map([ ['name', '张三'], ['age', 12]])
const obj = Object.fromEntries(map)
console.log(obj) // {name: "张三", age: 12}Array 转化为 Object
const arr = [ ['0', 'a'], ['1', 'b'], ['2', 'c']]
const obj1 = Object.fromEntries(arr) // {0: "a", 1: "b", 2: "c"}对象转换为 Object
Object.fromEntries 是 Object.entries()的反转函数,借用 array  manipulation methods 可以转化对象const object1 = { a: 1, b: 2, c: 3 };const object2 = Object.fromEntries(Object.entries(object1).map(([ key, val ]) => [ key, val * 2 ])
); // {a: 2, b: 4, c: 6}

Onject.is()方法判断两个值是否是相同的值

Object.is(‘foo’, ‘foo’); // true
Object.is(window, window); // true
Object.is(‘foo’, ‘bar’); // false
Object.is([], []) // falsevar foo = { a: 1};
var bar = { a: 1};
Object.is(foo, foo) // true
Object.is(foo, bar) // true
Object.is(null, null) // trueObject.is(0, -0); // false
Object.is(-0, -0); // true
Object.is(NaN, 0/0); // true

Onject.isForzen() 方法判断一个对象是否被冻结

// 使用 Object.freeze 是冻结一个对象最方便的方法。
var frozen = { a:1 };
Object.isForzen(forzen); // === false
Object.freeze(forzen);
Object.isForzen(frozen); // === true// 一个冻结对象也是一个密封对象。
Object.isSealed(forzen) // === true// 当然更是一个不可拓展对象
Object.isExtensible(forzen) // === false
在ES5中,如果参数不是一个对象类型,将跑出一个TypeError异常。在ES2015中, 非对象参数将被视为一个冻结的普通对象,因此会返回true。Object.isFrozen(1);
// TypeError: 1 is not an object (ES5 code)Object.isFrozen(1);
// true (ES2015 code)

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和试用for…in 循环遍历该对象时返回的顺序一致。

// simple array
var arr = [‘a’, ‘b’, ‘c’];
console.log(Object.keys(arr)); // [‘0’, ‘1’, ‘2’]// array like object
var obj = {0: ‘a’, 1: ‘b’, 2: ‘c’};
console.log(Object.keys(obj)); // [‘0’, ‘1’, ‘2’]// array like object with random key ordering
var anObj = {100: ‘a’, 2: ‘b’, 7: ‘c’};
console.log(Object.keys(anObj)); // [‘2’, ‘7’, ‘100’]// getFoo is a property which isn’t enumerable
var myObj = Object.create({}, {
getFoo: {
value: function (){ return this.foo};
}
});
myObj.foo = 1;
console.log(Object.keys(myObj)); // [‘foo’]

Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for…in循环的顺序相同(区别在于for…in循环枚举原型链中的属性)

var onj = {foo :’bar’, baz: 42};
console.log(Object.Values(obj)); // [‘bar’, 42]// array like object
var obj = { 0: ‘a’, 1: ‘b’, 2: ‘c’};
console.log(Object.values(obj)); // [‘a’, ‘b’, ‘c’]// array like object with random key ordering// when we use numeric keys, the value returned in a numerical order according to the keysvar an_obj = {100: ‘a’, 2: ‘b’, 7: ‘c’};
console.log(Object.values(an_obj)); // [‘b’, ‘c’, ‘a’]// getFoo is property which isn’t enumerablevar my_obj = Object.create({}, {getFoo:{value:function(){ return this.foo; }}});my_obj.foo = ‘bar’;
console.log(Object.values(my_obj)); // [‘bar’]// non-object argument will be coerced to an object
console.log(Object.values(‘foo’)); // [‘f’, ‘o’, ‘o’]

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

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

相关文章

125. 验证回文串

思路 首先枚举出字母和数字(orz…看了其他人的题解, 才想起来Character.isLetterOrDigit可以直接判断字符串是否字母或数字);声明左指针指向入参第0位, 右指针指向入参最后一位, 用于判断左指针指向的元素(简称左元素)是否等于右指针指向的元素(简称右元素), 每遍历一次都会让…

【力扣一刷】代码随想录day27(39. 组合总和、40.组合总和II、131.分割回文串)

目录 【39. 组合总和】中等题 【40.组合总和II】中等题 【131. 分割回文串】中等题 【39. 组合总和】中等题 思路: 确定终止条件:sum target时记录路径并返回。剪枝:当前节点的路径之和已经大于sum就不可能再等于sum了,结束该分支…

16进制的字符串转byte[]数组 以及将字节数组转换成十六进制的字符串

16进制的字符串转byte[]数组 public class ClientString16 {@Testpublic void get16Str(){String str="48 47 12 00 14 12 16 08 15 0d 30 0f 02 30 30 30 30 30 30 30 30 30 30 00 c2";byte[] bytes = hexStringToByteArray(str);getBytetoString(bytes);//String …

【御控物联】JavaScript JSON结构转换(12):对象To数组——键值互换属性重组

文章目录 一、JSON结构转换是什么?二、核心构件之转换映射三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…

LeetCode 每日一题 2024/3/25-2024/3/31

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 3/25 518. 零钱兑换 II3/26 2642. 设计可以求最短路径的图类3/27 2580. 统计将重叠区间合并成组的方案数3/28 1997. 访问完所有房间的第一天3/29 2908. 元素和最小的山形三…

【御控物联】JavaScript JSON结构转换(8):数组To数组——多层属性重组

文章目录 一、JSON结构转换是什么?二、案例之《JSON数组 To JSON数组》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换,生成新的JS…

Java

1.学生和老师都会有work方法,学生的工作是学习,老师的工作是教书,我利用了一个接口来实现; 2.同时,老师和学生都是人,并且都有姓名,姓名,年龄和身高等特征,我用了一个继承…

http协议补充

7.7实现http请求 class httprequest { public:void Deserialize(std::string content){while (true){auto pos content.find(sep);if (pos std::string::npos){break;}std::string temp content.substr(0, pos);if (temp.empty()){break;}req_header_.push_back(temp);cont…

Redis 服务

任务描述:请采用 redis 服务,实现高并发数据和海量数据的读写。 (1)利用 linux2 搭建 redis cluster 集群,使用端口 7001-7003模拟主节点,7004-7006 模拟从节点,让其他主机可以访问 redis 集群。 [root@linux4 ~]# yum install -y redis policycoreutils-python-utils…

轮播卡片切换实现

背景 如上图&#xff0c;实现一个轮播卡片能力&#xff0c;支持手动滑动&#xff0c;手动拖动&#xff0c;已经点击两端切换按钮。 实现 <template><div class"top-menu"><!-- Swiper --><div v-if"headerMenuList.length > 9" c…

并查集----格子游戏

并查集中最重要的是要搞懂&#xff1a; 不明白的可以拿纸自己先演示一番&#xff0c;find函数不仅能找到他们的祖先数&#xff0c;而且同时也能更新路径的子结点都等于祖先&#xff0c;然后以后寻找时会更加的方便&#xff01;

如何优雅地用latex写算法作业

中文支持 建议直接看这篇dalao的文章&#xff0c;三种方法写的很清楚 LaTex支持中文的三种方式_latex 编译中文-CSDN博客 代码插入 C 文章前面加 \definecolor{mygreen}{rgb}{0,0.6,0} \definecolor{mygray}{rgb}{0.5,0.5,0.5} \definecolor{mymauve}{rgb}{0.58,0,0.82} …

C++学习建议

C是一门强大且广泛应用的编程语言&#xff0c;特别适合系统级开发、高性能应用和游戏引擎等场景。如果你准备深入学习C&#xff0c;以下是一些关键点和学习路径建议&#xff1a; 1. **基础语法**&#xff1a;首先掌握C的基础语法&#xff0c;如变量声明与赋值、数据类型、运算…

蓝桥杯单片机速成4-温度传感器DS18B20

目录 一、电路图 二、底层驱动代码 三、温度读取实现 四、实际使用 一、电路图 二、底层驱动代码 时序是单总线 我们需要修改的地方是单总线内部延时函数&#xff0c;改成 void Delay_OneWire(unsigned int t) { t*12; while(t--); } #ifndef __ONEWIRE_H #defi…

Unity TrailRenderer的基本了解

在Unity中&#xff0c;TrailRenderer组件用于在对象移动时创建轨迹效果。通常用于增强游戏中的动态物体&#xff0c;比如子弹、飞行道具或者角色移动时的拖尾效果。 下面来了解下它的基本信息。 1、创建 法1&#xff1a;通过代码创建 using UnityEngine;public class Trail…

动态规划刷题(算法竞赛、蓝桥杯)--合唱队形(线性DP)

1、题目链接&#xff1a;[NOIP2004 提高组] 合唱队形 - 洛谷 #include <bits/stdc.h> using namespace std; int n,ans; int a[105],f[105][2];//f[i][2]中2表示正反两个方向int main(){cin>>n;for(int i1;i<n;i){cin>>a[i];}//正方向求最长上升子序列 a[…

[flink 实时流基础] 输出算子(Sink)

学习笔记 Flink作为数据处理框架&#xff0c;最终还是要把计算处理的结果写入外部存储&#xff0c;为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…

HTTP,Servlet

HTTP 概念&#xff1a;HyperTextTransferProtocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 HTTP协议特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全 2.基于请求-响应模型的&#xff1a;一次请求对应一次响应 …

【学习笔记】java项目—苍穹外卖day06

文章目录 苍穹外卖-day06课程内容1. HttpClient1.1 介绍1.2 入门案例1.2.1 GET方式请求1.2.2 POST方式请求 2. 微信小程序开发2.1 介绍2.2 准备工作2.3 入门案例2.3.1 小程序目录结构2.3.2 编写和编译小程序2.3.3 发布小程序 3. 微信登录3.1 导入小程序代码3.2 微信登录流程3.3…