js-对象的方法详解
Object.prototype 上的方法:
constructor
返回创建该对象的构造函数
var arr = [];
arr.constructor == function Array() { [native code] }
var str = "";
str .constructor == function String() { [native code] }
hasOwnProperty
能判断一个对象是否包含自定义属性而不是原型链上的属性,hasOwnProperty 是 JavaScript 中唯一一个处理属性但是不查找原型链的函数
Object.prototype.bar = 1 ;
var foo = {goo: undefined};
'bar' in foo; // true
foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true
isPrototypeOf
isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的原型链中,是则返回true,否则返回false。
// 这里定义一个正则表达式对象
var re = /^\s*/;
// 这里检查RegExp是不是re的原形链对象,返回true
var bIsptt = RegExp.prototype.isPrototypeOf(re);
propertyIsEnumerable
如果 proName 存在于 object 中,且可以使用 For 循环对其进行枚举,则 propertyIsEnumerable 方法返回 true。
如果 object 不具有所指定名称的属性或者所指定的属性是不可枚举的,则 propertyIsEnumerable 方法将返回 false。
通常,预定义的属性是不可枚举的,而用户定义的属性始终是可枚举的。
propertyIsEnumerable 方法不考虑原型链中的对象。
Object上的方法:
Object.is() (es6)
比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致 ,不同之处只有两个:一是+0不等于-0,二是NaN等于自身。
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
Object.assign() (es6)
a:用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)
b:目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性
c:只拷贝源对象的自身属性(不拷贝继承属性),也不拷贝不可枚举的属性(enumerable: false)
d:实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用
e:对于这种嵌套的对象,一旦遇到同名属性,Object.assign的处理方法是替换,而不是添加
Object.getOwnPropertyDescriptor
描述:可以获取该属性的描述对象
let obj = { foo: 123 };
Object.getOwnPropertyDescriptor(obj, 'foo')返回:
{
value: 123,
writable: true,
enumerable: true,
configurable: true
}
- ES5有三个操作会忽略enumerable为false的属性。
- for...in循环:只遍历对象自身的和继承的可枚举的属性
- Object.keys():返回对象自身的所有可枚举的属性的键名
- JSON.stringify():只串行化对象自身的可枚举的属性
- for...in会返回继承的属性
- ES6新增了一个操作Object.assign(),会忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性。
- ES6规定,所有Class的原型的方法都是不可枚举的。
Object.keys(obj) (es6)
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。
Object.values()
Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
Object.entries()
Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)。
Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有Symbol属性。
Reflect.ownKeys(obj)
Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管是属性名是Symbol或字符串,也不管是否可枚举。
以上的5种方法遍历对象的属性,都遵守同样的属性遍历的次序规则。
首先遍历所有属性名为数值的属性,按照数字排序。
其次遍历所有属性名为字符串的属性,按照生成时间排序。
最后遍历所有属性名为Symbol值的属性,按照生成时间排序。
Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 })
// ['2', '10', 'b', 'a', Symbol()]
Object.setPrototypeOf()
Object.setPrototypeOf方法的作用与__proto__相同,用来设置一个对象的prototype对象,返回参数对象本身。它是 ES6 正式推荐的设置原型对象的方法。
let proto = {};
let obj = { x: 10 };
Object.setPrototypeOf(obj, proto);
proto.y = 20;
proto.z = 40;
obj.x // 10
obj.y // 20
obj.z // 40
Object.getPrototypeOf()
该方法与Object.setPrototypeOf方法配套,用于读取一个对象的原型对象。
defineProperty :
es5可以通过Object.defineProperty()来设置对象自身某个property的属性
Object.defineProperty(object, propertyname, descriptor)
#object,待修改的对象
#propertyname,属性名
#descriptor,修饰符
#descriptor要求传入一个对象
{
configurable: false, //是否可以删除属性,是否可以修改属性的 writable 、 enumerable 、 configurable 属性。
enumerable: false, //是否可以枚举,是否可以通过for...in 遍历到,是否可以通过 Object.keys() 方法获取属性名称
writable: false, //是否可以对属性进行重新赋值
value: null, //属性的默认值
set: undefined, //属性被赋值时,此方法被自动调用
get: undefined //属性被读取时,此方法被自动调用
}
备注;
Object.defineProperty() 方法设置属性时,属性不能同时声明访问器属性set 和 get和 writable 或者 value 属性。
意思就是,某个属性设置了writable或者 value 属性,那么这个属性就不能声明 get 和 set 了,反之亦然。
js-对象的方法详解的更多相关文章
- Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解
Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解 一.Jquery遍历筛选数组 1.jquery grep()筛选遍历数组 $().ready( function(){ v ...
- 用Newtonsoft将json串转为对象的方法(详解)
首先,将json串转为一个JObject对象: JObject jo = (JObject)JsonConvert.DeserializeObject(CurrentSelectedItemReq) ...
- Js apply call方法详解
Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...
- CorelDRAW中六种复制对象的方法详解
复制可保证对象的大小一致,复制也是所有操作中最基本的操作.CorelDRAW软件中支持多种复制对象的操作,本教程将详解CorelDRAW中六种复制对象的方法. 方法一 选择复制对象,点击编辑→复制,再 ...
- window对象open方法详解
window.open详解 window.open("sUrl","sName","sFeature","bReplace&quo ...
- JSP数据交互——九大内置对象及其方法详解(一)
①既然说到JSP内置对象,那么什么是JSP内置对象呢? 解析:JSP内置对象,就是在编写JSP页面时,不需要做任何声明就可以直接使用的对象. 如下代码片段: <% int[] value ...
- JS进阶篇--JS数组reduce()方法详解及高级技巧
基本概念 reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被 ...
- Js apply call方法详解【转】
我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家 ...
- js cookie使用方法详解
代码如下 复制代码 <script>function getCookie(c_name){ if (document.cookie.length>0){ //先查询cookie是否为 ...
- JS数组reduce()方法详解及高级技巧
1.语法 arr.reduce(callback,[initialValue]) reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上 ...
随机推荐
- srs录制视频时间戳有点问题
srs2或者srs3目前最新的版本和之前的版本,使用dvr功能录制flv文件.使用本地播放器,如ffplay.potplayer.vlc.KMP和MPV等,都是正常的播放完整视频.但是使用web fl ...
- 数据结构java学习(三)循环队列
@TOC 和栈一样,队列也是表,但是使用队列的特点是先进先出. 队列模型 \(\color{black}{队列的基本操作是入队,它是在表的末端插入一个元素,和出队,它是删除在表开头的一个元素}\) g ...
- Es6中Map对象和Set对象的介绍及应用
map和set的方法,工作中有使用到,所以学习一下: Map 对象 Map 对象保存键值对.任何值(对象或者原始值) 都可以作为一个键或一个值. var myMap = new Map(); myMa ...
- #333 Div2 Problem B Approximating a Constant Range(尺取法)
题目:http://codeforces.com/contest/602/problem/B 题意 :给出一个含有 n 个数的区间,要求找出一个最大的连续子区间使得这个子区间的最大值和最小值的差值不超 ...
- day_08 文件操作
常用模式解释 open表示打开一个文件 f 变量, 操控XXX.txt文件的句柄 r:只读 w:只写 a:追加写入 b:byte,这种模式下,encoding不能用utf-8字符集 1. 文件的基本操 ...
- 安装openstack时遇到的错误
学习opensatck的第一步是安装DevStack来进行本机操作 1. 下面命令没有权限,解决办法:切换到root用户下执行sudo -s echo "stack ALL=(ALL) NO ...
- Linux网络编程基础
1. Linux网络模型 ① OSI七层模型和Linux四层模型 ② 各种协议之间的关系及在Linux模型中的位置 ③ 协议封装:各种协议处于一种层层封装的关系 (1)Ethernet (2)IP * ...
- SQL server 2008 r2 安装图文详解
文末有官网下载地址.百度网盘下载地址和产品序列号以及密钥,中间需要用到密钥和序列号的可以到文末找选择网盘下载的下载解压后是镜像文件,还需要解压一次直接右键点击解如图所示选项,官网下载安装包的可以跳过前 ...
- hive 取两次记录的时间差 lead lag first_value last_value
-- LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值 -- 第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如 ...
- 安装eclipse for ee
去官网下载最新版本版本的linux版本的eclipse for ee,下载到Downloads文件夹. 解压文件夹 sudo tar -zxvf eclipse-jee-2018-09-linux-g ...