Object+Array+String

103 阅读4分钟

Object

  1. Object.prototype.constructorconstructor 属性返回 [Object]的构造函数(用于创建实例对象)。注意,此属性的返回值是对函数本身的引用,而不是一个包含函数名称的字符串。点击查看
  • 所有对象(使用 Object.create(null) 创建的对象除外)都将具有 constructor 属性。在没有显式使用构造函数的情况下,创建的对象(例如对象和数组文本)将具有 constructor 属性,这个属性指向该对象的基本对象构造函数类型。
  1. Object.create():该方法用于创建一个新对象,使用现有的对象来作为新创建对象的原型(prototype)点击查看
  2. Object.defineProperty():该方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。备注: 应当直接在 [Object]构造器对象上调用此方法,而不是在任意一个 Object 类型的实例上调用。语法Object.defineProperty(obj, prop, descriptor)点击查看
const object1 = {};

Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});

object1.property1 = 77;
// throws an error in strict mode,//在严格模式下降抛出错误

console.log(object1.property1);
// expected output: 42
  1. Object.defineProperties():该方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。语法Object.defineProperties(obj, props)点击查看
var obj = {};
Object.defineProperties(obj, {
  'property1': {
    value: true,
    writable: true
  },
  'property2': {
    value: 'Hello',
    writable: false
  }
  // etc. etc.
});
  1. Object.getOwnPropertyDescriptor():方法返回指定对象上一个自有属性对应的属性描述符(不包括原型链)。语法Object.getOwnPropertyDescriptor(obj, prop)点击查看
const object1 = {
  property1: 42
};

const descriptor1 = Object.getOwnPropertyDescriptor(object1, 'property1');

console.log(descriptor1.configurable);
// expected output: true

console.log(descriptor1.value);
// expected output: 42
  1. Object.getOwnPropertyDescriptors():该方法用来获取一个对象的所有自身属性的描述符。语法:Object.getOwnPropertyDescriptors(obj)。点击查看
  2. Object.getPrototypeOf():该方法返回指定对象的原型(内部[[Prototype]]属性的值)。语法Object.getPrototypeOf(object)点击查看
const prototype1 = {};
const object1 = Object.create(prototype1);

console.log(Object.getPrototypeOf(object1) === prototype1);
// expected output: true
  1. Object.setPrototypeOf()  方法设置一个指定的对象的原型 ( 即,内部 [[Prototype]] 属性)到另一个对象或 [null]。点击查看
  • 警告:  由于现代 JavaScript 引擎优化属性访问所带来的特性的关系,更改对象的 [[Prototype]] 在各个 浏览器和 JavaScript 引擎上都是一个很慢的操作。其在更改继承的性能上的影响是微妙而又广泛的,这不仅仅限于 obj.__proto__ = ... 语句上的时间花费,而且可能会延伸到 任何 代码,那些可以访问 任何 [[Prototype]] 已被更改的对象的代码。如果你关心性能,你应该避免设置一个对象的 [[Prototype]]。相反,你应该使用 [Object.create()]来创建带有你想要的 [[Prototype]] 的新对象。
  1. Object.prototype.toString():该方法返回一个表示该对象的字符串。点击查看
  • [使用 toString() 检测对象类型]:可以通过 toString() 来获取每个对象的类型。为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用,传递要检查的对象作为第一个参数,称为 thisArg
var toString = Object.prototype.toString;

toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]

//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
  1. Object.prototype.isPrototypeOf():该方法用于测试一个对象是否存在于另一个对象的原型链上。备注:  isPrototypeOf() 与 [instanceof]运算符不同。在表达式 "object instanceof AFunction"中,object 的原型链是针对 AFunction.prototype 进行检查的,而不是针对 AFunction 本身。点击查看
  2. Object.prototype.hasOwnProperty():该方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。点击查看
const object1 = {};
object1.property1 = 42;

console.log(object1.hasOwnProperty('property1'));
// expected output: true

console.log(object1.hasOwnProperty('toString'));
// expected output: false
  1. Object.prototype.propertyIsEnumerable():该方法返回一个布尔值,表示指定的自身属性是否可枚举(不包括原型链)。点击查看
  2. Object.keys():该方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致点击查看
// simple array
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

// array like object
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']
  1. Object.getOwnPropertyNames():该方法返回一个由指定对象的所有自身属性的属性名包括不可枚举属性但不包括 Symbol 值作为名称的属性)组成的数组语法Object.getOwnPropertyNames(obj)点击查看
var arr = ["a", "b", "c"];
console.log(Object.getOwnPropertyNames(arr).sort()); // ["0", "1", "2", "length"]

// 类数组对象
var obj = { 0: "a", 1: "b", 2: "c"};
console.log(Object.getOwnPropertyNames(obj).sort()); // ["0", "1", "2"]
  1. Object.getOwnPropertySymbols():该方法返回一个给定对象自身的所有 Symbol 点击查看
  2. Object.values():该方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用[for...in]循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。点击查看
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]

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

// array like object with random key ordering
// when we use numeric keys, the value returned in a numerical order according to the keys
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']