摘要:方法可以获取该属性的描述对象。直接在一个对象上定义新的属性或修改现有属性,并返回该对象。运算符和运算符将数字值和视为相等,并认为不等于。如果没有继承属性,则返回介绍一个常用操作符如果指定的属性在指定的对象或其原型链中,则运算符返回语法
Object.assign()
对象的合并 将源对象(source)的所有可枚举属性复制到目标对象
Object.assign(target, source1, source2)
如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的。Object.assign()拷贝的属性是有限制的,只拷贝源对象的自身属性(不拷贝继承属性),也不拷贝不可枚举属性。
插播一段知识点:
对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。
let obj = { foo: 123 }; Object.getOwnPropertyDescriptor(obj, "foo") // { // value: 123, // writable: true, // enumerable: true, // configurable: true // }
value:属性值
wirtable: 可写性(是否可以修改(赋值))
enumerable:可枚举属性(是否可以被遍历到)
configurable:可配置属性(是否可以被删除)
Object.create()创建一个新对象,使用现有的对象来提供新创建的对象的__proto__
Object.create(proto, [propertiesObject])
proto
新创建对象的原型对象。
propertiesObject
可选。如果没有指定为 undefined,则是要添加到新创建对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defindProperties()的第二个参数。
该方法直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
Object.defineProperty(obj, prop, descriptor)
obj
要在其上定义属性的对象。
prop
要定义或修改的属性的名称。
descriptor
将被定义或修改的属性描述符。
Object.defineProperty(obj, "key", { enumerable: false, configurable: false, writable: false, value: "static" });Object.defineProperties()
直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
Object.defineProperties(obj, props)
var obj = {}; Object.defineProperties(obj, { "property1": { value: true, writable: true }, "property2": { value: "Hello", writable: false } // etc. etc. });Object.is()
Object.is() 判断两个值是否相同。如果下列任何一项成立,则两个值相同:
两个值都是 undefined
两个值都是 null
两个值都是 true 或者都是 false
两个值是由相同个数的字符按照相同的顺序组成的字符串
两个值指向同一个对象
两个值都是数字并且
- 都是正零 +0 - 都是负零 -0 - 都是 NaN - 都是除零和 NaN 外的其它同一个数字
这种相等性判断逻辑和传统的 == 运算符所用的不同,== 运算符会对它两边的操作数做隐式类型转换(如果它们类型不同),然后才进行相等性比较,(所以才会有类似 "" == false 为 true 的现象),但 Object.is 不会做这种类型转换。
这与===运算符也不一样。===运算符(和==运算符)将数字值-0和+0视为相等,并认为Number.NaN不等于NaN。
Object.keys(),Object.values(),Object.entries()Object.keys():返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名
Object.values:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值
Object.entries:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组
let {keys, values, entries} = Object; let obj = { a: 1, b: 2, c: 3 }; for (let key of keys(obj)) { console.log(key); // "a", "b", "c" } for (let value of values(obj)) { console.log(value); // 1, 2, 3 } for (let [key, value] of entries(obj)) { console.log([key, value]); // ["a", 1], ["b", 2], ["c", 3] }Object.getPrototypeOf()
返回指定对象的原型(内部[[Prototype]]属性的值)。
语法:
Object.getPrototypeOf(object)
object:要返回其原型的对象。
返回值:给定对象的原型。如果没有继承属性,则返回 null
const prototype1 = {}; const object1 = Object.create(prototype1); console.log(Object.getPrototypeOf(object1) === prototype1); // expected output: true
介绍一个常用操作符 in
如果指定的属性在指定的对象或其原型链中,则in 运算符返回true
语法:
prop in object
var obj ={ a: 1 } console.log("a" in obj); // true console.log("b" in obj); // false
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/108517.html
摘要:浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。两个对象引用都引用了同一个对象。对于字符串数字及布尔值来说不是或者对象,会拷贝这些值到新的数组里。 1、对象的理解 对象是一个包含相关数据和方法的集合(通常由一些变量和函数组成,我们称之为对象里面的属性和方法) 1.1 对象可以看成是Object对象构造出来的 showImg(https://user...
摘要:常用继承方式主要分为种原型链继承构造函数继承组合继承原型式继承寄生式继承寄生组合继承以及继承多个对象。所以说,构造函数基础只能继承父类的实例属性和方法,不能继承原型链上的属性和方法。 JavaScript常用继承方式主要分为(7种):原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合继承以及继承多个对象。 1:原型链继承(核心:将父类的实例作为子类的原型) 基本概念:...
摘要:原型式继承利用一个空对象作为中介,将某个对象直接赋值给空对象构造函数的原型。其中表示构造函数,一个类中只能有一个构造函数,有多个会报出错误如果没有显式指定构造方法,则会添加默认的方法,使用例子如下。 (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue、React、Node源码和实战、面试指导)showImg(https://segmentfault.com/img/rem...
摘要:常用的属性和方法创建空创建给对象添加属性给对象添加多个属性给对象添加给对象添加返回属性配置对象返回所有属性名数组返回对象原型对象阻止对象扩展冻结对象密封对象检测是否可扩展布尔值检测是否冻结布尔值检测是否密封布尔值对象原型对象对象实例的属性和 常用Object的属性和方法 创建空Object var o1 = {}; var o2 = Object.create(Object.prot...
阅读 2006·2021-11-24 09:39
阅读 1876·2019-08-30 15:55
阅读 2167·2019-08-30 15:53
阅读 563·2019-08-29 13:16
阅读 982·2019-08-26 12:20
阅读 2377·2019-08-26 11:58
阅读 3127·2019-08-26 10:19
阅读 3295·2019-08-23 18:31