JS中Object对象

本文主要介绍了JavaScript中Object对象,它是所有对象的父级对象。阐述了其定义、语法和描述,还详细讲解了Object的属性和多种方法,如创建对象、添加或修改属性、获取属性名和原型等方法,以及判断对象状态的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 定义:Object是JavaScript中所有对象的父级对象,我们创建的所有对象都继承于此,包括内建对象
  2. 语法
  • 使用new操作符后跟Object构造函数

var person = new Object();

  • 使用对象字面量表达式,对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。

var person = { name : “F”, age : 23 };

3.描述

  • Object 构造函数为给定的值创建一个对象包装。如果给定值是 null or undefined,将会创建并返回一个空对象,否则,将返回一个与给定值对应类型的对象。
  • 当以非构造函数形式被调用时,Object 等同于 new Object()。

3.属性

  • Object.prototype:可以为所有Object类型的对象添加属性

4.方法

Object.create()
指定原型对象和属性创建一个对象

Object.create(proto [, propertiesObject ])

是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。除此外,proto身为一个对象,作为新创建对象的原型。而propertiesObject作为一个对象值,可以包含若干个属性,属性名为新创建对象的属性名,属性值为那个属性的属性描述对象。

var car = Object.create(Car.prototype);
car.color = “blue”;
console.log(car.color);

Object.defineProperty()
给对象添加/修改一个属性并指定该属性的配置

Object.defineProperty(obj,prop,descriptor)

obj : 需要定义的对象
prop:需要定义或修改的属性名
descriptor : 属性定义或修改的属性的描述

  • 该方法允许精确添加或修改对象的属性。正常的属性添加通过赋值来创建并显示在属性枚举中(for…in 循环 或 Object.keys 方法), 这种方式添加的属性值可能被改变,也可能会被 删除。该方法允许改变这些额外细节的默认设置。

  • 对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个拥有可写或不可写值的属性。存取描述符是由一对 getter-setter 函数功能来描述的属性。描述符必须是两种形式之一;

  • 数据描述符和存取描述符均具有以下可选键值
    configureable:当且仅当这个属性描述符值为 true 时,该属性可能会改变,也可能会被从相应的对象删除。默认为 false
    enumerable:true 当且仅当该属性出现在相应的对象枚举属性中。默认为 false
    writable:true当且仅当可能用赋值运算符改变与属性相关的值。默认为false
    value:与属性有关的值。可以是任何有效的Javascript值。默认为undefined

var obj = new Object();
Object.defineProperty(obj, ‘name’, {
configurable: false,
enumerable: true,
writable: true,
value: ‘F’
});
console.log(obj.name); // F

  • 存取描述同时具有以下可选键值
    get:给属性提供getter的方法,如果没有getter则为undefined。方法将返回作用属性的值,默认为undefined
    set:给属性提供setter的方法,如果没有setter则为undefined。该方法将受到作为唯一参数的新值分配给属性。默认为undefined

注意 : 这些选项不一定是自身属性,如果是继承来的也要考虑。为了确认保留这些默认值,你可能要在这之前冻结 Object.prototype,明确指定所有的选项,或者将 proto 属性指向空。

在这里插入图片描述

Object.defineProperties()
在一个对象上添加或修改一个或者多个自有属性,并返回该对象。

Object.defineProperities(obj,props)

obj : 将要被添加属性或修改属性的对象
props : 该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置

var obj = new Object();
Object.defineProperties(obj, {
name: {
configurable: false,
writable: true,
enumerable: true,
value: ‘F’
},
age: {
value: 18,
configurable: true
}
});
console.log(obj.name, obj.age); // F, 18

Object.keys()

方法会返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in循环遍历该对象时返回的顺序一致。(两者的主要区别是for-in还会遍历除一个对象从其原型链上继承到得可枚举的属性)

Object.keys(obj)

返回该对象的所有可枚举自身属性的属性名

  • Object.keys 返回一个所有元素为字符串的数组,其元素来自于从给定的对象上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致
  • 如果你想获取一个对象的所有属性,,甚至包括不可枚举的,可以通过 Object.getOwnPropertyNames() 实现
Object.getOwnPropertyNames()

返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组

Object.getOwnPropertyNames(obj)
obj : 要查看的对象

  • Object.getOwnPropertyNames 返回一个数组,该数组对元素是 obj 自身拥有的枚举或不可枚举属性名称字符串
  • 数组中枚举属性的顺序与通过for…in loop(或 Object.keys)迭代该对象属性时一致。 数组中不可枚举属性的顺序未定义
Object.getOwnPropertyDescriptor()

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

Object.getOwnPropertyDescriptor(obj,prop)
obj : 在该对象上查看属性
prop : 一个属性名称,该属性的属性描述被返回

  • 如果指定的属性存在于对象上,则返回其属性描述符(property descriptor),否则返回 undefined
  • 该方法允许对一个属性的描述进行检索。在 Javascript 中, 属性 由一个字符串类型的“名字”(name)和一个“属性描述符”(property descriptor)对象构成
  • 一个属性描述符是一个记录
Object.getPrototypeOf() **
返回指定对象的原型(也就是该对象内部属性[[Prototype]]的值)**

Object.getPrototypeOf(obj)

  • 如果参数不是一个对象类型,将跑出TypeError异常
Object.freeze()

判断对象是否已经被冻结

Object.isFrozen(obj)

obj : 被检测的对象

  • 一个对象是冻结的(frozen)是指它不可扩展,所有属性都是不可配置的(non-configurable),且所有数据属性(data properties)都是不可写的(non-writable)
  • 数据属性是值那些没有取值器(getter)或赋值器(setter)的属性。
var obj = {
	name:'FFluoxetine',
   	age:18
 }
var obj1 = Object.freeze(obj);
	obj1.age = 20;
	console.log(obj); //{name: "FFluoxetine", age: 18}
Object.preventExtensions()

阻止对象扩展

Object.preventExtensions(obj)

obj : 将要变得不可扩展的对象

  • 如果一个对象可以添加新的属性,则这个对象是可扩展的。preventExtensions 可以让这个对象变的不可扩展,也就是不能再有新的属性
  • 需要注意的是不可扩展的对象的属性通常仍然可以被删除
  • 尝试给一个不可扩展对象添加新属性的操作将会失败,不过可能是静默失败,也可能会抛出 TypeError 异常(严格模式)
Object.isExtensible()

检测一个对象是否可扩展(是否可以在它上面添加新的属性)

Object.isExtensible(obj)

obj : 需要检测的对象

  • 默认情况下,对象是可扩展的:即可以为他们添加新的属性。以及它们的 proto 属性可以被更改。
  • Object.preventExtensions,Object.sealObject.freeze 方法都可以标记一个对象为不可扩展(non-extensible)
Object.isExtensible()

可以让一个对象密封,并返回被密封之后的对象。密封对象是指那些不能添加新的属性、不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可能可以修改已有属性的值的对象

Object.isSealed()

检测一个对象是否被密封sealed

Object.isSealed(obj)

obj:要被检测的对象

  • 如果这个对象是密封的,则返回 true,否则返回 false
  • 密封对象是指那些不可 扩展 的,且所有自身属性都不可配置的(non-configurable)对象
在JavaScript中,可以通过以下方法将Object对象转换为Map对象。 首先,创建一个新的Map对象: ```javascript var myMap = new Map(); ``` 然后,使用for...in循环遍历Object对象的属性,并使用Map.prototype.set方法将每个属性的键值对添加到Map对象中: ```javascript for (var key in myObject) { myMap.set(key, myObject[key]); } ``` 最后,你可以使用myMap来访问转换后的Map对象。例如,可以使用Map.prototype.values()方法来获取Map对象中每个元素的值: ```javascript var mapValues = myMap.values(); console.log(Array.from(mapValues)); // 输出Map对象中的值的数组 ``` 综上所述,这是将JavaScript中的Object对象转换为Map对象的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [js中遍历Map对象的方法](https://download.youkuaiyun.com/download/weixin_38665804/13669364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [JavaScript中Object对象 和 Map对象 的比较](https://blog.youkuaiyun.com/qq_42249552/article/details/103526279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值