JavaScript中对象属性和对象属性有什么区别?

6
我看到JavaScript中涉及对象的两个术语,一个是它的“属性”(property),另一个是它的“属性值”(attribute)。这些术语有什么区别?
每个数据属性(存储数据的对象属性)不仅具有名称-值对,还具有3个属性(默认情况下,这三个属性设置为true):
- Configurable Attribute:指定属性是否可以被删除或更改。 - Enumerable:指定属性是否可以在for/in循环中返回。 - Writable:指定属性是否可以更改。

3
你能否给我们展示一下你看到的上下文?我猜在这个情况下它们是同义词。 - Thomas Murphy
3
这取决于具体的上下文。HTML元素有属性(例如document.getElementById("foo").attributes),但如果作者指的是普通的JavaScript对象(例如{foo:bar}),则它们可以互换使用。 - p.s.w.g
这篇文章更多地涉及HTML/DOM,但它会让你感受到它们之间的区别。 - Eugen Konkov
3个回答

8

什么是 JavaScript 中的属性和属性(Property)?

通常来说,属性和属性在技术上指的是键值对,所以键是属性/属性的名称,值则是其值。两者都表示质量。

它们之间的区别是什么?

区别在于它们的上下文而非含义。

为什么要使用这两个术语?

因为对象的属性可能有属性,这被称为属性。

JavaScript 中对象的属性有哪些?

除了对象的属性外,对象还有三个属性,它们是prototype, classextensible.

例如:

var SampleObject  = { Name : "ObjName", id : "0"} // user created

实际对象的结构:

         var SampleObject = {class :someValue, // Attribute
                    prototype : someValue, // Attribute
                    extensible : someValue, // Attribute
                    Name : "ObjName", // Property 
                    id : "0"   // Property 
                     }

什么是Javascript中的对象属性?

对象中的所有键值对都是对象属性。

Javascript对象属性的特性有哪些?

每个对象属性都有以下3个特性:可配置(Configurable)可枚举(Enumerable)可写(Writable),其值均为布尔类型。

//Ex : 
var SampleObject = { key1 :{ p1 : "v1"}} // user created

//Actual Structure :

var SampleObject = { class :someValue, // Attribute
                     prototype : someValue, // Attribute
                     extensible : someValue, // Attribute
                     key1  : { Configurable : true, // attribute
                              Enumerable   : true, // attribute
                              Writable     : true  // attribute
                              p1           : "v1"  //property
                              }     // proeperty            
                   }


3

属性是所观察对象的附加元素。

属性是观察对象的特征,是其组成部分。

在javascript中,这些是可以互换的。


2
在这种情况下,作者所指的不是对象本身的属性,而是一个 属性 的属性(请注意,正如作者所述,“每个数据属性...[具有]3个属性”)。通过这样做,他指的是属性本身的行为,通常涉及内置对象。
作者正确地指出,当您通过简单分配方式创建属性时,默认情况下所有三个属性都是true
var obj = {};
obj.foo = "bar";

或者在一个对象字面表达式中,就像这样:

var obj = {foo:"bar"};

然而,作者没有提到您可以使用Object.defineProperty方法修改这些属性。MDN有一些示例,说明了实际情况下这些属性的含义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接