JavaScript的数据对象有哪些属性值
在 JavaScript 中,数据对象(如普通对象、数组、函数等)具有多种属性值,这些属性值可以分为以下几类:
1. 自有属性(Own Properties)
自有属性是直接定义在对象上的属性,而非通过原型链继承的属性。
(1) 数据属性
- 值:属性的实际值。
- 特性(Attributes):
value:属性的值。writable:是否可修改。enumerable:是否可枚举(如for...in或Object.keys())。configurable:是否可删除或修改特性。
(2) 访问器属性
- 特性:
get:获取属性值的函数。set:设置属性值的函数。enumerable和configurable:同上。
(3) 示例
const obj = {
name: '张三', // 数据属性
get age() { return 30; }, // 访问器属性
set age(value) { console.log('设置年龄:', value); }
};
console.log(obj.name); // 输出:张三
console.log(obj.age); // 输出:30
obj.age = 40; // 输出:设置年龄:40
2. 继承属性(Inherited Properties)
继承属性是通过原型链从原型对象继承的属性。
(1) 示例
const parent = {
greet() {
console.log('你好!');
}
};
const child = Object.create(parent);
child.greet(); // 输出:你好!(继承自 parent)
3. 内置属性(Internal Properties)
内置属性是 JavaScript 引擎内部使用的属性,通常不可直接访问。
(1) 示例
[[Prototype]]:对象的原型(通过__proto__或Object.getPrototypeOf()访问)。[[Class]]:对象的内部分类(如[object Object])。
4. 特殊属性
(1) length
- 数组:表示数组的长度。
const arr = [1, 2, 3]; console.log(arr.length); // 输出:3 - 函数:表示函数的参数个数。
function fn(a, b) {} console.log(fn.length); // 输出:2
(2) prototype
- 函数:指向函数的原型对象,用于实现基于原型的继承。
function Person() {} console.log(Person.prototype); // 输出:Person {}
(3) __proto__
- 对象:指向对象的原型(非标准,推荐使用
Object.getPrototypeOf())。const obj = {}; console.log(obj.__proto__ === Object.prototype); // 输出:true
5. 属性的描述符(Property Descriptor)
通过 Object.getOwnPropertyDescriptor() 获取属性的描述符。
(1) 示例
const obj = { name: '张三' };
const descriptor = Object.getOwnPropertyDescriptor(obj, 'name');
console.log(descriptor);
// 输出:
// {
// value: '张三',
// writable: true,
// enumerable: true,
// configurable: true
// }
(2) 修改属性描述符
使用 Object.defineProperty() 或 Object.defineProperties()。
Object.defineProperty(obj, 'name', {
writable: false
});
obj.name = '李四'; // 静默失败(严格模式下报错)
console.log(obj.name); // 输出:张三
6. 属性的枚举与遍历
(1) for...in
- 遍历对象及其原型链上的可枚举属性。
const obj = { a: 1, b: 2 }; for (const key in obj) { console.log(key); // 输出:a, b }
(2) Object.keys()
- 返回对象自身的可枚举属性数组。
console.log(Object.keys(obj)); // 输出:['a', 'b']
(3) Object.getOwnPropertyNames()
- 返回对象自身的所有属性(包括不可枚举属性)。
console.log(Object.getOwnPropertyNames(obj)); // 输出:['a', 'b']
(4) Object.values() 和 Object.entries()
- 返回对象自身的值或键值对数组。
console.log(Object.values(obj)); // 输出:[1, 2] console.log(Object.entries(obj)); // 输出:[['a', 1], ['b', 2]]
7. 属性的存在性检查
(1) in 操作符
- 检查属性是否在对象或其原型链上。
console.log('a' in obj); // 输出:true
(2) hasOwnProperty()
- 检查属性是否为对象自身的属性。
console.log(obj.hasOwnProperty('a')); // 输出:true
总结
| 属性类型 | 描述 | 示例方法 |
|---|---|---|
| 自有属性 | 直接定义在对象上的属性 | Object.getOwnPropertyDescriptor |
| 继承属性 | 通过原型链继承的属性 | for...in |
| 内置属性 | 引擎内部使用的属性 | [[Prototype]] |
| 特殊属性 | 如length、prototype 等 | arr.length |
| 属性描述符 | 描述属性的特性(如可写性、可枚举性) | Object.defineProperty |
理解这些属性值及其特性,有助于更好地操作和管理 JavaScript 对象。
更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github