JavaScript中对象(Object)的方法
JavaScript中对象方法总结:
资料来源:网道-互联网开发文档 【https://wangdoc.com/】
1、Object.getPrototypeOf(Object)
Object.getPrototypeOf方法返回参数对象的原型。这是获取原型对象的标准方法。
代码示例:
var F = function () {};var f = new F();Object.getPrototypeOf(f) === F.prototype // true几种特殊对象的方法:// 空对象的原型是 Object.prototypeObject.getPrototypeOf({}) === Object.prototype // true// Object.prototype 的原型是 nullObject.getPrototypeOf(Object.prototype) === null // true// 函数的原型是 Function.prototypefunction fun() {}Object.getPrototypeOf(fun) === Function.prototype // true
2、Object.setPrototypeOf(nowObject,originalObject)
Object.setPrototypeOf 方法为参数对象设置原型,返回该参数对象。它接受两个参数,第一个是现有对象,第二个是原型对象。
方法和new出来的对象类似
代码示例:
var a = {};var b = {x: 1};Object.setPrototypeOf(a, b);Object.getPrototypeOf(a) === b // truea.x // 1
3、Object.create(Object)
Object.create()方法接受一个对象为参数,然后以它为原型,返回一个实例对象。该实例完全继承原型对象的属性、方法
代码示例:
// 原型对象var A = {print: function () {console.log('hello');}};// 实例对象var B = Object.create(A); //通过对象上的create方法,B继承拥有了A的属性以及方法Object.getPrototypeOf(B) === A // trueB.print() // helloB.print === A.print // true
注意:
1、create方法必须提供对象原型,参数为空或者参数不是对象,代码会报错
2、create()方法生成的新对象,动态继承了原型。在原型上添加或修改任何方法,会立刻反映在新 对象之上。相当于浅拷贝
实例对象的方法:
1、Object.prototype.isPrototypeOf()
实例对象的isPrototypeOf方法,用来判断该对象是否为参数对象的原型。
示例代码:
console.log(Object.prototype.isPrototypeOf({})) // true
console.log(Object.prototype.isPrototypeOf([])) // true
console.log(Object.prototype.isPrototypeOf(/xyz/)) // true
console.log(Object.prototype.isPrototypeOf(Object.create(null))) // false
上面代码中,由于Object.prototype处于原型链的最顶端,所以对各种实例都返回true,只有直接继承自null的对象除外。
2、Object.getOwnPropertyNames()
Object.getOwnPropertyNames方法返回一个数组,成员是参数对象本身的所有属性的键名,不包含继承的属性键名。
示例代码:
console.log(Object.getOwnPropertyNames(Date))// [ 'length', 'name', 'prototype', 'now', 'parse', 'UTC' ]
3、Object.prototype.hasOwnProperty()
对象实例的hasOwnProperty方法返回一个布尔值,用于判断某个属性定义在对象自身,还是定义在原型链上。
示例代码:
Date.hasOwnProperty('length') // trueDate.hasOwnProperty('toString') // false
4、in 运算符和 for…in 循环
in运算符返回一个布尔值,表示一个对象是否具有某个属性。它不区分该属性是对象自身的属性,还是继承的属性。
示例代码:
'length' in Date // true'toString' in Date // true//in运算符常用于检查一个属性是否存在。//获得对象的所有可遍历属性(不管是自身的还是继承的),可以使用for...in循环。var o1 = { p1: 123 };var o2 = Object.create(o1, {p2: { value: "abc", enumerable: true }});for (p in o2) {console.info(p); //p1 p2}
ES6新增:
1、 Object.is()
Object.is用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。
let a = {major:'英语',class:'五年一班'};
let aClone = { ...a };//使用扩展运算符将对象a的数据复制到aClone1中
console.log(aClone === a); //false
console.log(Object.is(aClone,a)) //false,使用对象上的is进行判断是否相同
2、Object.assign()
Object.assign()方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
Object.assign()方法的第一个参数是目标对象,后面的参数都是源对象。
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3,d:4 };
Object.assign(target, source1, source2);
console.log(target);// { a: 1, b: 2, c: 3, d: 4 }
const source = { a: { b: 'hello' } }
let obj = Object.assign(target, source)
console.log(obj) // { a: { b: 'hello' }} key相同时,后出现的value将会覆盖前边的value值
注意:1、如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。2、Object.assign()方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
3、Object.getOwnPropertyDescriptors()
ES2017 引入了Object.getOwnPropertyDescriptors()方法,返回指定对象所有自身属性(非继承属性)的描述对象
const obj = {id:123,get bar(){return 'abc'}
};
let obj1 = Object.getOwnPropertyDescriptors(obj)
console.log(obj1)
输出结果:
{id: { value: 123, writable: true, enumerable: true, configurable: true },bar: {get: [Function: get bar],set: undefined,enumerable: true,configurable: true}
}
4、Object.setPrototypeOf()
Object.setPrototypeOf方法的作用与__proto__相同,用来设置一个对象的原型对象(prototype) 返回参数对象本身。它是 ES6 正式推荐的设置原型对象的方法。
语法格式:
Object.setPrototypeOf(object, prototype)
语法示例:
const o = Object.setPrototypeOf({}, null);
举例:
let proto = {};
let obj = {x:10};
Object.setPrototypeOf(obj,proto)
proto.y = 20;
proto.z = 30;
console.log(obj.x) //10
console.log(obj.y) //20
console.log(obj.z) //30
console.log(proto) //{ y: 20, z: 30 }
5、Object.getPrototypeOf()
Object.getPrototypeOf,该方法与Object.setPrototypeOf配套,用于查询读取一个对象的原型对象
语法格式:
Object.getPrototypeOf(obj);
function Rectangle() {// ...
}const rec = new Rectangle();console.log(Object.getPrototypeOf(rec) === Rectangle.prototype);
//输出true 表明rec对象的原型对象和Rectangle的原型对象是一致的
Object.setPrototypeOf(rec, Object.prototype); //将rec的原型对象设置到Object的原型对象上面
console.log(Object.getPrototypeOf(rec) === Rectangle.prototype)
//输出false,表明rec的原型对象重新设置后与Rectangle的原型对象不一样了
6、Object.keys(),Object.values(),Object.entries()
这三个方法都是将对象中的键或者值转换成数组可供遍历。ES2017 引入了跟Object.keys配套的Object.values和Object.entries,作为遍历一个对象的补充手段,供for…of循环使用。
6.1 Object.keys()
ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。
var obj = { foo: 'bar', baz: 42 };
Object.keys(obj)
// ["foo", "baz"]
6.2 Object.values()
Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
const obj = { foo: 'bar', baz: 42 };
Object.values(obj)
// ["bar", 42]
6.3 Object.entries()
Object.entries()方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组(二维数组)。
const obj = { foo: 'bar', baz: 42 };
Object.entries(obj)
// [ ["foo", "bar"], ["baz", 42] ]
7、Object.fromEntries()
Object.fromEntries()和Object.entries()配套,是将特定的数组对象转换成对象格式
const arr = [ [ 'foo', 'bar' ], [ 'baz', 42 ] ]/*数组对象中的数组只能有两个值,是类似键值对格式的数组,如果有多的将会被忽略不纳入转换
的对象数据中,以前两个数据为准进行数据格式的转换*/
const arr1 = [ [ 'foo', 'bar','obj' ], [ 'baz', 42,'name','jerry' ] ]
console.log(Object.fromEntries(arr)) //{ foo: 'bar', baz: 42 }
console.log(Object.fromEntries(arr1))//{ foo: 'bar', baz: 42 } 两个数组得到的是一样的
JavaScript中对象(Object)的方法相关推荐
- javascript中对象的assign()方法
javascript中对象的assign()方法 Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 语法: Object.assign( ...
- JavaScript中的Object.assign()方法
目录 介绍 什么是Object.assign()? JavaScript可枚举属性 语法和参数 您可以使用Object.assign()方法做什么? 合并对象 克隆对象 关于Object.assign ...
- 详解Javascript中的Object对象
本文地址:http://luopq.com/2016/02/28/Object-in-Javascript/,转载请注明 Object是在javascript中一个被我们经常使用的类型,而且JS中的所 ...
- JavaScript 访问对象属性和方法及区别
这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...
- php中this的使用技巧,JavaScript中this关键字使用方法详解
JavaScript中this关键字使用方法详解 在面向对象编程语言中,对于this关键字我们是非常熟悉的.比如C++.C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了 ...
- javascript中对象_了解JavaScript中的承诺
javascript中对象 我向您承诺,到本文结束时,您将更好地了解JavaScript. 我与JavaScript有一种"爱与恨"的关系. 但是尽管如此,JavaScript一直 ...
- JavaScript中遍历数组的方法
目录 JavaScript中遍历数组的方法 1.for 循环遍历 2.forEach 遍历 3.map 遍历 4.for...of 遍历 5.filter 遍历 6.some 遍历 7.keys,va ...
- 区分JavaScript中slice与splice方法
区分JavaScript中slice与splice方法 slice()方法是从已有的数组中返回通过索引选定的元素. 语法:array.slice(startIndex,endIndex) 参数star ...
- 5种JavaScript中常用的排序方法
5种JavaScript中常用的排序方法 01.冒泡排序 通过相邻数据元素的交换,逐步将待排序序列变为有序序列,如果前面的数据大于后面的数据,就将两值进行交换,将数据进行从小到大的排序,这样对数组的第 ...
最新文章
- 网站SEO优化值得收藏的技巧介绍
- python字符串截取split-python实现字符串完美拆分split()的方法
- 归档—监控ORACLE数据库告警日志
- 20165231 2017-2018-2 《Java程序设计》第5周学习总结
- Arithmetic Sequence 三分,货仓选址,nth_element,__int128(济南)
- Python----面向对象---自定义元类控制类的实例化行为的应用
- 广成 USBCAN-II Pro V502 linux下升级经验
- ARMLinux 下驱动开发第三节
- mysql 事件状态enable_mysql事件 - wayhk的个人页面 - OSCHINA - 中文开源技术交流社区...
- 关于Dijkstra三种堆速度的研究
- Windows 文件一直被占用,无法删除(对应解决方法)
- jQuery ajax post put 请求
- CentOS7入门:使用Vi文本编辑器
- 解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上,运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本,激活win10步骤流程。
- 电子邮箱免费注册,个人邮箱申请哪个好?微信邮箱客户端这个好用
- 【转载】在Firefox国际版使用中国版账户
- 《神经网络与深度学习》—学习笔记
- linux系统漏洞补丁包,RedHat 5.X、6.X Bash漏洞RPM补丁包下载
- The Data Science of Gaming and Fantasy Sports 游戏与幻想体育的数据科学 Lynda课程中文字幕
- 欢迎使用CSDN-markdown编辑器2