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

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

  1. Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。同名属性会替换。
  2. Object.assign只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。
  3. Object.assign可以用来处理数组,但是会把数组视为对象
            const target = {x:0,y:1};const source = {x:1,z:2,fn:{number:1}};Object.assign(target,source);console.log('target:',target) //同名属性会被覆盖console.log('source:',source)

若此时,将拷贝为对象引用,结果如下

target.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);console.log('young:',young) // 只能拷贝自身的属性,不能拷贝prototype

console.log(Object.assign([4,5,6],[3,2])) //结果为3,2,6

2.Object.create(prototype[,propertiesObject])

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

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

3.Object.defineProperties(obj,props)

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

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

4.Object.defineProperty(obj,prop,descriptor)

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

            var Obj={}Object.defineProperty(Obj, 'test', {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 }); console.log(Obj)

5.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"] 

6.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']var obj2 = { 4:1,5:12,1:6};console.log(Object.values(obj2));//错误用法示范var obj3 = {a:1,b:12,c:6};console.log(Object.values(obj3));

7.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'] ]

8.Object.getOwnPropertyDescriptor(obj,prop)

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

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

9.Object.getOwnPropertyDescriptors(obj)

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

            var obj = {name : 'js',age : 20}var arr = ['name','age'] ;arr.forEach(val => console.log(Object.getOwnPropertyDescriptor(obj,val)))var obj2 = {name : 'css',age : 2}console.log(Object.getOwnPropertyDescriptors(obj2))

10.Object.is()

判断两个值是否相同。

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

  • 两个值都是 undefined
  • 两个值都是 null
  • 两个值都是 true 或者都是 false
  • 两个值是由相同个数的字符按照相同的顺序组成的字符串
  • 两个值指向同一个对象
  • 两个值都是数字并且
    • 都是正零 +0
    • 都是负零 -0
    • 都是 NaN
    • 都是除零和 NaN 外的其它同一个数字
            Object.is('foo', 'foo');     // trueObject.is(window, window);   // trueObject.is('foo', 'bar');     // falseObject.is([], []);           // falsevar test = { a: 1 };Object.is(test, test);       // trueObject.is(null, null);       // true// 特例Object.is(0, -0);            // falseObject.is(-0, -0);           // trueObject.is(NaN, 0/0);         // true

11.Object.freeze()

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

Object.isFrozen() //判断一个对象是否被冻结 .

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

12.Object.preventExtensions()

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

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

13.Object.seal()  (这个需要多研究)

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

Object.isSealed()

判断一个对象是否被密封

注意:访问器属性---这个属性不包含数据值,包含的是一对get和set方法,在读写访问器属性时,就是通过这两个方法来进行操作处理的。访问器属性包含的四个特性

  • configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为false
  • enumerable:表示能否通过for-in循环返回属性,默认为false
  • Get:在读取属性时调用的函数,默认值为undefined
  • Set:在写入属性时调用的函数,默认值为undefined
            var obj = {prop: function () {},foo: "bar"};// 可以添加新的属性,已有属性的值可以修改,可以删除obj.foo = "baz";obj.lumpy = "woof";delete obj.prop;var o = Object.seal(obj);console.log(o === obj);console.log(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" }); // 成功将原有值改变console.log(obj)

今天分享就到此为止啦,有问题的希望各位大佬留言!

Object常用的方法总结相关推荐

  1. Object常用的几种方法

    Object常用的几种方法 描述 JavaScript原生提供Object对象.JavaScript的所有其他对象都继承自Object对象,即那些对象都是Object的实例.Object对象的原生方法 ...

  2. android屏幕密度高度,Android获取常用辅助方法(获取屏幕高度、宽度、密度、通知栏高度、截图)...

    我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现.下面就分享一下Android中常用的一些辅助方法: 获取屏幕高度: /** * 获得屏幕高度 * @para ...

  3. java 中常用方法_java_中常用的方法总结

    8月1日 练习: 合理覆盖Cat数据类型的,equals()方法 Cat.java 1 覆盖hashCode() 返回的整型值是唯一的 int    hashCode() 用法: 一般使用String ...

  4. java map常用类及其方法_Day50.Map类常用的方法 -Java常用类、集合#、IO

    Day50.Map类常用的方法 -Java常用类.集合#.IO Day50.Map类常用的方法 -Java常用类.集合#.IO Map类常用的方法 . 总结: 常用方法 添加: put(Object ...

  5. Hibernate框架--学习笔记(上):hibernate项目的搭建和常用接口方法、对象的使用

    一.什么是Hibernate框架: 1.Hibernate是一个操作数据库的框架,实现了对JDBC的封装: 2.Hibernate是一个ORM(对象关系映射)框架,我们在写程序时 ,用的是面向对象的方 ...

  6. JS常用属性方法大全

    JS常用属性方法大全 1.输出语句:document.write(""); 2.JS中的注释为: 3.传统的HTML文档顺序是:document->html->(hea ...

  7. python 魔法方法常用_Python 常用魔法方法(下)

    Python 常用魔法方法(下) 回顾 魔法方法是 Python 内置方法, 不需要我们手动调用, 它存在的目的是给 解释器 调用的. 比如我们在写 "1 + 1 " 的时候, 这 ...

  8. java String类常用的方法

    package Day0310.Demo02;public class StringTest02 {public static void main(String[] args) {System.out ...

  9. java api 第一个类是_JAVA之Object常用API

    [Object类.常用API] 主要内容Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 第一章 Object类 1.1 概 ...

最新文章

  1. BestCoder Round #80 1002
  2. 计算机网络及应用 pdf,计算机网络及应用卷.pdf
  3. spark-stream 访问 Redis
  4. redmine测试使用小结
  5. SQLServer优化资料整理(二)
  6. Java虚拟机(一)——内存管理
  7. 2019年7月30日星期二(数据结构)例题代码
  8. mysql创建工作经历表_国内首款 Serverless MySQL 数据库重磅发布!
  9. 第三方支付业务流程介绍
  10. Class 2 搭建简历网站
  11. windows下常见的知识
  12. Javascript基础语法总结
  13. js 用 querySelectorAll 提取文本格再式化输出
  14. 使用树莓派实现动作捕捉、抓拍并存储照片
  15. SpringBoot使用Logbook记录HTTP请求响应日志
  16. 什么软件可以测试色卡颜色,Munsell24色卡-色彩测试标板
  17. FlexRay网络唤醒、启动和错误管理
  18. python之freshman00
  19. 冷门扫描工具——Xprobe2详细用法
  20. SPSS 协方差分析

热门文章

  1. 基于jQueryUI控件、oracle应用双机架构企业PMS系统实战课程-张勇-专题视频课程
  2. 1024灯控台初学,1024灯控台操作说明
  3. 电脑玩和平精英灵敏度这样设置更流畅,还能匹配手机
  4. AIGC功能在线制作思维导图?
  5. 51单片机_11-2 蜂鸣器播放音乐
  6. 明略数据:用大数据分析找出数据间隐藏的关联性
  7. 不同传输速率的高速数据采集卡的使用方法
  8. Qml 图像缩放,坐标灰度显示,鸟瞰图
  9. 2018-12 文献阅读:Boosting for Transfer Learning(2007)--迁移学习
  10. jquery选项卡效果