Object那些方法

Object.assign()

  • 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象, 并返回目标对象
	var a = {
		name: 'zhangsan',
		age: 123
	};
	var b = {
		name: 'lisi',
		age: 456,
		value: 'pengsn'
	};
	var newObj = Object.assign({}, a, b);
	console.info(newObj);
	
	//  newObj : {
	//     name: 'lisi',
	//     age: 456,
	//     value: 'pengsn'
	// }

Object.create()

  • 对象创建,通过现有对象创建一个新的对象
	var person = {
		name: 'lisi', 
		age: 24,
		value: 'no-value'
	};
	var person2 = Object.create(person);
	console.info( person2 );
	
	//  __proto__ : {
	//      age: 24, 
	//      name:'',
	//      value:''
	// }

Object.defineProperty(), Object.defineProperties()

  • 直接在一个对象上定义新的属性或修改现有属性,并返回改对象
	Object.defineProperties(obj, props);
	
	Object.definePropertie(obj, prop, {
		configurable: true,
		writable: true,
		enumerable: true,
		value:null
	});
	

Object.entries()

  • Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组
  • 其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性)
var obj = {
	name : 'name',
	age : 12
};

for(let [key, value] of Object.entries(obj)) {
	console.info(key + ':' + value);
}

Object.freeze() / Object.isFrozen()

  • Object.freeze() 方法可以冻结一个对象。

  • 一个被冻结的对象再也不能被修改;

  • 冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。

  • 此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

  • Object.isFrozen()方法判断一个对象是否被冻结。

Object.fromEntries()

  • 方法把键值对列表转换为一个对象。

Object.getOwnPropertyDescriptor(), Object.getOwnPropertyDescriptors()

  • 获取一个对象的属性描述
console.info( Object.getOwnPropertyDescriptor(a, 'name'))  ;
      VM833:1 
      {value: "agood", writable: true, enumerable: true, configurable: true}

Object.getOwnPropertyNames(),Object.getOwnPropertySymbols()

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

Object.getPrototypeOf()

  • 方法返回指定对象的原型(内部[[Prototype]]属性的值)

Object.isExtensible(), Object.preventExtensions()

  • isExtensible 判断一个对象是否是可扩展的
  • preventExtensions() 使对象变的不可扩展
  • Object.preventExtensions()仅阻止添加自身的属性。但其对象类型的原型依然可以添加新的属性。
	// 新对象默认是可扩展的.
	var empty = {};
	Object.isExtensible(empty); // === true

	// ...可以变的不可扩展.
	Object.preventExtensions(empty);
	Object.isExtensible(empty); // === false

Object.is()

  • 方法判断两个值是否是相同的值。

Object.keys() / Object.values()

  • Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致
  • Object.values() 返回一个数组,其元素是在对象上找到的可枚举属性值。属性的顺序与通过手动循环对象的属性值所给出的顺序相同

Object.isSealed()/Object.seal()

  • 判断一个对象是否是密封
  • 所谓密封:不可扩展且自身所有属性不可配置
  • Object.seal() 密封一个对象

Object.prototype.hasOwnProperty()

  • 检测一个对象是否含有特定的自身属性
var obj = {
	name : 'showname'
};
console.info( obj.hasOwnProperty( 'name' ) ); // true
console.info( obj.hasOwnProperty( 'hasOwnProperty' ) ); //false

Object.prototype.isPrototypeOf()

  • 方法允许你检查一个对象是否存在于另一个对象的原型链上。
function Fn1() {
}
Fn1.prototype = {
	name: '123'
}

function Fn2() {
}

Fn2.prototype=Fn1.prototype;

var fn2obj = new Fn2();

Fn1.prototype.isPrototypeOf(fn2obj);//true
//以上展示的是Fn1.prototype是否在fn2obj这个对象上?结果true

Object.prototype.propertyIsEnumerable()

  • 检测对象上的某个属性是否可枚举
	//列举不可枚举的属性
	var a = {
		name : 'wanghou'
	};
	console.info(a.constructor);  // function Object()
	console.info(a.propertyIsEnumerable("constructor")); // false不可枚举

Object.prototype.toLocaleString()

  • 对象的字符串表示法
  • 可被重载 如:
  • Array:Array.prototype.toLocaleString()
  • Number:Number.prototype.toLocaleString()
  • Date:Date.prototype.toLocaleString()

Object.prototype.valueOf()

  • 返回原始值
var d = new Date(2020, 05, 02, 09, 00, 00); // notice 月份是0开始的 
console.info(d.valueOf());
posted @ 2020-06-02 09:07  pengsn  阅读(227)  评论(0编辑  收藏  举报