js object 常用方法总结

转载自  js object 常用方法总结

Object.assign(target,source1,source2,...)

该方法主要用于对象的合并,将源对象source的所有可枚举属性合并到目标对象target上,此方法只拷贝源对象的自身属性,不拷贝继承的属性。

Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。同名属性会替换。

Object.assign只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。

Object.assign可以用来处理数组,但是会把数组视为对象。

const target = {x : 0,y : 1
};const source = {x : 1,z : 2 ,fn : {number : 1}
};Object.assign(target, source);  
// target  {x : 1, y : 1, z : 2, fn : {number : 1}}    // 同名属性会被覆盖
// source  {x : 1, z : 2, fn : {number : 1}}
target.fn.number = 2;                                  // 拷贝为对象引用
// source  {x : 1, z : 2, fn : {number : 2}}function Person(){this.name = 1
};
Person.prototype.country = 'china';
let student = new Person();
student.age = 29 ;
const young = {insterst : 'sport'};
Object.assign(young,student);
// young {instest : 'sport' , age : 29}               // 只能拷贝自身的属性,不能拷贝prototypeObject.assign([1, 2, 3], [4, 5])                      // 把数组当作对象来处理
// [4, 5, 3]

 

Object.create(prototype[,propertiesObject])

使用指定的原型对象及其属性去创建一个新的对象

var parent = {x : 1,y : 1
}var child = Object.create(parent,{z : {                           // z会成为创建对象的属性writable:true,configurable:true,value: "newAdd"}
});
console.log(child)

 

 

Object.defineProperties(obj,props)

直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

var obj = {};
Object.defineProperties(obj, 
{  'property1': {    value: true,  writable: true },  'property2': {   value: 'Hello',writable: false  }  // etc. etc.
});
console.log(obj)   // {property1: true, property2: "Hello"}

 

Object.defineProperty(obj,prop,descriptor) 

在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

Object.defineProperty(Object, 'is', 
{  value: function(x, y) {    if (x === y) {      // 针对+0 不等于 -0的情况       return x !== 0 || 1 / x === 1 / y;   }   // 针对NaN的情况    return x !== x && y !== y;  },  configurable: true,  enumerable: false,  writable: true 
}); // 注意不能同时设置(writable,value) 和 get,set方法,否则浏览器会报错  
//Invalid property descriptor.  Cannot both specify accessors and a value or writable attribute

 

Object.keys(obj)

 返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。

let arr = ["a", "b", "c"];
console.log(Object.keys(arr));// ['0', '1', '2']/* Object 对象 */
let obj = { foo: "bar", baz: 42 }, keys = Object.keys(obj);
console.log(keys);// ["foo","baz"] 


Object.values()

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

Object.values会过滤属性名为 Symbol 值的属性。

var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(obj)); // ['a', 'b', 'c']

 

Object.entries()

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

const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]const simuArray = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(simuArray)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]


hasOwnProperty()   

判断对象自身属性中是否具有指定的属性。

obj.hasOwnProperty('name')

 

Object.getOwnPropertyDescriptor(obj,prop)

返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性).

如果指定的属性存在于对象上,则返回其属性描述符对象(property descriptor),否则返回 undefined。

var arr = ['name','age'] ;
arr.forEach(val => console.log(Object.getOwnPropertyDescriptor(obj,val)))
// {value: "js", writable: true, enumerable: true, configurable: true}
// undefined


 Object.getOwnPropertyDescriptors(obj)

获取一个对象的所有自身属性的描述符。

var obj = {name : 'js',age : 20
}
console.log(Object.getOwnPropertyDescriptors(obj))

const source = {set foo(value) {console.log(value);}
};const target2 = {};
Object.defineProperties(target2, Object.getOwnPropertyDescriptors(source));
Object.getOwnPropertyDescriptor(target2, 'foo')const obj = Object.create(some_obj,Object.getOwnPropertyDescriptors({foo: 123,})
);

 

Object.getOwnPropertyNames()

返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。

var obj = { 0: "a", 1: "b", 2: "c"};Object.getOwnPropertyNames(obj).forEach(function(val) {console.log(val);
});var obj = {x : 1,y : 2
}Object.defineProperty(obj,'z',{enumerable : false
})
console.log(Object.getOwnPropertyNames(obj))  // ["x", "y", "z"] 包含不可枚举属性 。
console.log(Object.keys(obj))                 // ["x", "y"]      只包含可枚举属性 。

Object.getOwnPropertySymbols()

返回一个给定对象自身的所有 Symbol 属性的数组。

 

Object.getPrototypeOf()

返回指定对象的原型(内部[[Prototype]]属性的值,即__proto__,而非对象的prototype)。

 

isPrototypeOf()

判断一个对象是否存在于另一个对象的原型链上。

 

Object.setPrototypeOf(obj,prototype)

设置对象的原型对象

 

Object.is()

判断两个值是否相同。

如果下列任何一项成立,则两个值相同:

  • 两个值都是 undefined
  • 两个值都是 null
  • 两个值都是 true 或者都是 false
  • 两个值是由相同个数的字符按照相同的顺序组成的字符串
  • 两个值指向同一个对象
  • 两个值都是数字并且
    • 都是正零 +0
    • 都是负零 -0
    • 都是 NaN
    • 都是除零和 NaN 外的其它同一个数字

 

Object.is('foo', 'foo');     // true
Object.is(window, window);   // trueObject.is('foo', 'bar');     // false
Object.is([], []);           // falsevar test = { a: 1 };
Object.is(test, test);       // trueObject.is(null, null);       // true// 特例
Object.is(0, -0);            // false
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true

 

Object.freeze()

冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。

var obj = {prop: function() {},foo: 'bar'
};// 新的属性会被添加, 已存在的属性可能
// 会被修改或移除
obj.foo = 'baz';
obj.lumpy = 'woof';
delete obj.prop;// 作为参数传递的对象与返回的对象都被冻结
// 所以不必保存返回的对象(因为两个对象全等)
var o = Object.freeze(obj);o === obj; // true
Object.isFrozen(obj); // === true// 现在任何改变都会失效
obj.foo = 'quux'; // 静默地不做任何事
// 静默地不添加此属性
obj.quaxxor = 'the friendly duck';
console.log(obj)

 

Object.isFrozen()

判断一个对象是否被冻结 .

 

Object.preventExtensions()

对象不能再添加新的属性。可修改,删除现有属性,不能添加新属性。

var obj = {name :'lilei',age : 30 ,sex : 'male'
}obj = Object.preventExtensions(obj);
console.log(obj);    // {name: "lilei", age: 30, sex: "male"}
obj.name = 'haha';
console.log(obj)     // {name: "haha", age: 30, sex: "male"}
delete obj.sex ;
console.log(obj);    // {name: "haha", age: 30}
obj.address  = 'china';
console.log(obj)     // {name: "haha", age: 30}

 

Object.isExtensible()

 

 判断对象是否是可扩展的,Object.preventExtensionsObject.seal 或 Object.freeze 方法都可以标记一个对象为不可扩展(non-extensible)

 

Object.seal()

Object.seal() 方法可以让一个对象密封,并返回被密封后的对象。密封一个对象会让这个对象变的不能添加新属性,且所有已有属性会变的不可配置。属性不可配置的效果就是属性变的不可删除,以及一个数据属性不能被重新定义成为访问器属性,或者反之。但属性的值仍然可以修改。尝试删除一个密封对象的属性或者将某个密封对象的属性从数据属性转换成访问器属性,结果会静默失败或抛出TypeError 异常. 不会影响从原型链上继承的属性。但 __proto__ (  ) 属性的值也会不能修改。

var obj = {prop: function () {},foo: "bar"};// 可以添加新的属性,已有属性的值可以修改,可以删除
obj.foo = "baz";
obj.lumpy = "woof";
delete obj.prop;var o = Object.seal(obj);assert(o === obj);
assert(Object.isSealed(obj) === true);// 仍然可以修改密封对象上的属性的值.
obj.foo = "quux";// 但你不能把一个数据属性重定义成访问器属性.
Object.defineProperty(obj, "foo", { get: function() { return "g"; } }); // 抛出TypeError异常// 现在,任何属性值以外的修改操作都会失败.
obj.quaxxor = "the friendly duck"; // 静默失败,新属性没有成功添加
delete obj.foo; // 静默失败,属性没有删除成功// ...在严格模式中,会抛出TypeError异常
function fail() {"use strict";delete obj.foo; // 抛出TypeError异常obj.sparky = "arf"; // 抛出TypeError异常
}
fail();// 使用Object.defineProperty方法同样会抛出异常
Object.defineProperty(obj, "ohai", { value: 17 }); // 抛出TypeError异常
Object.defineProperty(obj, "foo", { value: "eit" }); // 成功将原有值改变

 

Object.isSealed()

判断一个对象是否被密封

 

参考链接 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create

                http://es6.ruanyifeng.com/#docs/object

 

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

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

相关文章

发布 ASP.NET Core 应用

第一步:运行 dotnet restore 命令,以还原项目中指定的依赖项 1 dotnet restore 第二步:使用 dotnet build 命令为目标平台上的应用创建调试版本。 如果不指定想要生成的运行时标识符,则 dotnet build 命令将会创建仅适用于当前系统…

继承类对方法的影响java_4-Java面向对象-继承(上)

什么是继承?继承有哪些特点?我们在Java中如何实现继承?程序中的继承(面向对象编程思想来源于生活):解决重复代码的出现问题。抽取共性生成父类。此时猫和狗直接继承父类将可以直接使用父类的这些成员属性和方法。此时子类当中的方法就可以只写子类所特有的东西。特点: 1. 利…

javaSE基础代码案例

package org.test; import java.util.Arrays; import java.util.Scanner;/*** * 项目名称:Test * 类名称:TestMain * 类描述: * 创建人:Mu Xiongxiong * 创建时间:2018-3-29 下午3:49:00 * 修改人&…

迪杰斯特拉算法(最短路径)

描述 算法过程 代码实现 package com.atguigu.dijkstra;import com.sun.xml.internal.fastinfoset.algorithm.BooleanEncodingAlgorithm;import javax.sound.midi.Soundbank; import java.util.Arrays; import java.util.TimerTask;public class DijkstraAlgorithm {public st…

MySQL instr()函数

转载自 MySQL instr()函数 MySQL INSTR函数简介 有时,您想要在字符串中查找子字符串或检查字符串中是否存在子字符串。在这种情况下,您可以使用字符串内置INSTR()函数。 INSTR()函数返回字符串中子字符串第一次出现的位置。如果在str中找不到子字符串…

如何给视频中插入视频,字幕,以及去掉前后广告

昨天白天接到了一个这样的需求,就是剪辑一段视频,给视频中加入插入一个剪短的介绍,然后把没有用的截取掉。 看起来很简单,确实,利用常用的视频剪辑软件就可以直接实现,但是事实并不是这样的,接…

ZKEACMS for .Net Core 深度解析

ZKEACMS 简介 ZKEACMS.Core 是基于 .Net Core MVC 开发的开源CMS。ZKEACMS可以让用户自由规划页面布局,使用可视化编辑设计“所见即所得”,直接在页面上进行拖放添加内容。 ZKEACMS使用插件式设计,模块分离,通过横向扩展来丰富CMS…

java design按钮_DesignJava 设计模式,讲述 的各种 方便在项目中进行 框架结构 Develop 238万源代码下载- www.pudn.com...

文件名称: DesignJava下载收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 1675 KB上传时间: 2013-11-21下载次数: 2提 供 者: 102426详细说明:JAVA设计模式,讲述java的各种设计模式,方便在项目中进行设计框架结构-JAVA design patterns, j…

MySQL count()函数

转载自 MySQL count()函数 MySQL COUNT()函数介绍 COUNT()函数返回表中的行数。 COUNT()函数允许您对表中符合特定条件的所有行进行计数。 COUNT()函数的语法如下 - COUNT(expression)SQL COUNT()函数的返回类型为BIGINT。 如果没有找到匹配的行,则COUNT()函…

剪辑视频、去掉爱剪辑前后广告、视频中添加黑幕简要教程

昨天白天接到了一个这样的需求,就是剪辑一段视频,给视频中加入插入一个剪短的介绍,然后把没有用的截取掉。看起来很简单,确实,利用常用的视频剪辑软件就可以直接实现,但是事实并不是这样的,接下…

弗洛伊德算法

思路分析 代码实现 package com.atguigu.floyd;import java.util.Arrays;public class FloydAlgorithm {public static void main(String[] args) {//测试看看图是否创建成功char[] vertex{A,B,C,D,E,F,G};//创建邻接矩阵int[][] matrixnew int[vertex.length][vertex.length]…

Productivity Power Tools,对于Visual Studio 2017的15个扩展

在Visual Studio 2017正式发布期间,微软公司更新并发布了Productivity Power Tools的扩展版本。Productivity Power Tools的这个版本包括了针对VS 2017的15处扩展。 新版本Productivity Power Tools的优点之一是它允许微软监测哪些组件是开发者最频繁使用的&#xf…

java 读取svg元素_svg动态添加元素

动态添加元素x坐标值y坐标值文本内容动态添加元素var svgDoc null;var time null;// 动态添加元素var addElement function(x, y, nodeText) {// 添加圆形var c svgDoc.createElementNS(http://www.w3.org/2000/svg, circle);c.setAttribute(cx, x);c.setAttribute(cy, y);…

常用数据库复习资料

mast:数据库控制SQL Server的所有方面。这个数据库中包括所有的配置信息、用户登录信息、当前正在服务器中运行的过程的信息。model:数据库是建立所有用户数据库时的模板。当你建立一个新数据库时,SQL Server会把model数据库中的所有对象建立一份拷贝并移…

Java:comp/env/讲解与JNDI

转载自 "Java:comp/env/"讲解与JNDI 我们在使用JNDI调用某个对象时,会有下述两种方式 context.lookup(“java:comp/env/XXX”) context.lookup(“XXX”) context.lookup(“java:comp/env/XXX”)只能用在J2EE环境,如果你自己写一个main函数…

利用 Azure Functions 实现无服务器体系结构

从工具到机器再到计算机,我们一直在寻找能够自动执行重复工作并让我们所处理的上下文规范化的方法,以便我们可以将重心放在做出高价值的专业化贡献上,从而完成任务并解决问题。 与此同时,很显然,随着 IT 产业的不断发展…

2020蓝桥杯省赛---java---C---3( 跑步训练)

题目描述 代码实现 方式一 方式二 package com.atguigu.lanqiao;public class Main {public static void main(String[] args) {int target10000;int count0;boolean flagtrue;//判断此次是否需要跑步while (true){//如果小于600体力并且需要跑步,证明这一分钟跑…

python 找色点击_Python实现按键精灵(二)-找图找色

一、实现功能判断在指定坐标范围内,是否存在相似度大于n的图片,并返回坐标。二、基本思路A你需要寻找的图片B截取当前页面中指定范围的图片利用opencv 判断A在B中的位置,在该位置截取与A图同大小的图片C对比图片C与图片A的相似度三、实现的代…

Numeral.js数字格式化

翻译自 Numeral.js 用它 在浏览器中 <script src"numeral.min.js"></script> 或者引用从cdnjs.com <script src"http://cdnjs.cloudflare.com/ajax/libs/numeral.js/2.0.6/numeral.min.js"></script> 在Node.js中 npm inst…

sqlserver中常用的几个存储过程

sqlserver中的存储过程&#xff0c;何为存储过程呢&#xff1f; 存储过程&#xff08;Stored Procedure&#xff09;是在大型数据库系统中&#xff0c;一组为了完成特定功能的SQL 语句集&#xff0c;存储在数据库中&#xff0c;经过第一次编译后再次调用不需要再次编译&#x…