Skip to main content

Object方法速记表

** 对象方法(Object) **

方法名注解返回值js 版本
Object.create(proto, [ propertiesObject ])该方法使用指定的原型对象和其属性创建了一个新的对象。可理解为该方法会创建一个对象并把这个对象的 [[Prototype]]关联到指定对象。需要注意的是, Object.create(null)会创建一个拥有空(或者 null)[[Prototype]] 链的对象,这个对象无法进行委托。由于这个对象没有原型链,所以 instanceof 操作符无法进行判断,因此总是返回 false。Object5
Object.setPrototypeOf(obj, prototype)用于设置一个指定的对象的原型 ( 例如,内置的 [[Prototype]] 属性)到另一个对象或 null, 返回被设置新原型的对象。可以代替 ES5 的 Object.createObject6
Object.getPrototypeOf(obj)该方法返回指定对象的原型(即内部 [[Prototype]] 属性的值)。如果没有继承属性,则返回 null 。*5
Object.getOwnPropertyDescriptor(obj, prop)返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)Object(Descriptor)5
Object.defineProperty(obj, prop, descriptor)该方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。Object5
Object.defineProperties(obj, props)该方法可以在一个对象上同时添加(定义)多个属性的属性描述符。并返回这个对象。Object5
Object.preventExtensions(obj)该方法让一个对象变的不可扩展,也就是永远不能再添加新的属性,并返回这个对象。Object5
Object.seal(obj)该方法可以让一个对象密封,并返回被密封后的对象。密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可能可以修改已有属性的值的对象。 即密封之后不仅不能添加新属性, 也不能重新配置或者删除任何现有属性( 虽然可以修改属性的值)。Object5
Object.freeze(obj)该方法可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。Object5
Object.isExtensible(obj)方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)Boolean5
Object.isSealed()方法判断一个对象是否被密封(sealed)。Boolean5
Object.isFrozen()方法判断一个对象是否被冻结(frozen)。Boolean5
Object.keys(obj)方法会返回一个数组,包含所有可枚举属性。不查找原型链。Array5
Object.values()方法会返回一个数组,包含所有可枚举属性值。不查找原型链。Array7
Object.entries()方法会返回一个数组,包含所有可枚举 [key,value] 对。不查找原型链。Array7
Object.getOwnPropertyNames(obj)该方法会返回一个数组,包含所有属性,无论它们是否可枚举。不查找原型链。Array5
Object.getOwnPropertySymbols()返回一个数组,包含对象自身的所有 Symbol 属性(符号属性)。Object 的方法中只有此方法能遍历自身 Symbol 属性。另外一个能遍历对象 Symbol 属性的方法是 Reflect.ownKeys(obj),Reflect.ownKeys 返回一个数组,包含对象自身的所有属性,不管是属性名是 Symbol 或字符串,也不管是否可枚举。Array6
Object.assign(target, …source)该方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)注意: Object.assign 方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。 Object.assign 会跳过那些值为 null 或 undefined 的源对象Object6
Object.is(value1, value2)该方法用来确定两个值是否是相同的值。Object.is()会在下面这些情况下认为两个值是相同的: 两个值都是 undefined、 两个值都是 null、 两个值都是 true 或者都是 false、 两个值是由相同个数的字符按照相同的顺序组成的字符串 、两个值指向同一个对象、 两个值都是数字并且都是正零 +0 或者都是负零 -0 、都是 NaN、 都是除零和 NaN 外的其它同一个数字。 == 运算符会对它两边的操作数做隐式的类型转换,Object.is 不会做类型转换,严格相等运算符 === 也不会对操作数进行类型转换,但是它会把 -0 和 +0 这两个数值视为相同的,还会把两个 NaN 看成是不相等的。Boolean6

** 对象实例方法(object) **

方法名注解返回值js 版本
in 操作符in 操作符会检查属性是否在对象及其 [[Prototype]] 原型链中。Boolean3
hasOwnProperty(prop)该方法检查属性是否在 obj 中存在,不会检查 [[Prototype]] 原型链。 需要注意的是有的对象可能没有连接到 Object.prototype,也就没有 hasOwnProperty 方法,例如通过 Object.create(null)创建的空对象,在这种情况下,形如 obj.hasOwnProperty(prop)就会失败。这时可以使用一种更加强硬的方法来进行判断:Object.prototype.hasOwnProperty.call(obj, "prop"),它借助基础的 hasOwnProperty(..)方法并把它显示绑定到 obj 上。Boolean3
propertyIsEnumerable(prop)该方法检查给定的属性名是否直接存在于对象中(而不是原型链上),并满足 enumerable: true (可枚举)。Boolean3
instanceof 运算符instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。intanceof 运算符的左操作数是一个普通的对象,右操作数是一个函数。instanceof 回答的问题是: 在 a 的整条 [[Prototype]] 链中是否有指向 Foo.prototype 的对象。可惜这个方法只能处理对象和函数之间的关系。如果你想判断两个对象之间是否通过 [[Prototype]] 链关联,只用 instanceof 无法实现。更好的办法是使用下面的 prototypeObj.isPrototypeOf(obj) 方法。Boolean3
isPrototypeOf(obj)该方法用于测试一个对象(prototypeObj)的是否存在于另外一个对象(obj)的原型([[Prototype]])链上Boolean3
valueOf()该方法返回值为该对象的原始值。JavaScript 调用 valueOf()方法用来把对象转换成原始类型的值(数值、字符串和布尔值)。 你很少需要自己调用此函数;当遇到一种需要转换成一个原始值情况时候, JavaScript 会自动调用此函数。例如运算 obj + 123。如果 valueOf()返回的不是个原始类型的值原始类型值,系统会再尝试 toString()方法,默认情况下, valueOf()会被每个对象 Object 继承。每一个内置对象都会覆盖这个方法为了返回一个合理的值,如果对象没有原始值,valueOf()就会返回对象自身。*3
toString()该方法返回一个表示该对象的字符串。每个对象都有一个 toString()方法,当对象被表示为文本值时或者当以期望字符串的方式引用对象时,该方法被自动调用。比如在 alert 一个对象或其他某个操作或者运算需要字符串的时候的时候,就会自动调用该对象的 toString()方法。如果 toString()不可用,系统会再尝试 valueOf()方法, 默认情况下,toString()方法被每个继承自 Object 的对象继承。如果此方法在自定义对象中未被覆盖,toString()返回 “[object type]”,其中 type 是对象类型。所以我们可以利用 toString 方法来检测对象类型,为了避免使用到被覆盖的 toString 方法被覆盖(默认情况下一般都会被覆盖的,如 Arrary.prototype.toString()的行为是把数组转换成字符串),我们直接调用 Object.prototype.toString()String3
toLocaleString()该方法主要用于被本地化相关对象覆盖。一般返回调用 toString()方法的结果。覆盖了 toLocaleString()方法的对象包括以下这些: Array: Array.prototype.toLocaleString() 、Number: Number.prototype.toLocaleString() 、Date: Date.prototype.toLocaleString() 由于在不同地区该方法返回的结果可能不同,因此 toLocaleString 只是用来显示结果给用户,最好不要在脚本中用来做基本计算。例如,同样是 3 月 21 日,在美国,toLocaleString 可能会返回 “03/21/08 01:02:03”,而在欧洲,返回值则可能是 “21/03/08 01:02:03”,因为欧洲的惯例是将日期放在月份前面。String3

对象方法图 原文链接: http://www.ferecord.com/lujs-object.html