属性和属性值之间有什么区别?

202

这些看起来意思相同。但在什么情境下使用哪个术语更合适?


4
可以更具体地说明上下文吗?比如在C#的上下文中,这些术语的含义完全不同。 - David Arno
4
我认为这是一个糟糕的问题。查看同义词词典会显示在实际语言方面它们是同义词,但不同的计算机和元语言可能会赋予它们完全不同的角色,因此对于特定的计算机语言它们可能并不相同。因此,上下文至关重要。 - David Arno
14
我更具同情心。我记得第一次听到“method”这个术语时的情景。什么是“method”?哦,它是指属于类的函数。为什么要给旧事物起新名词?梭罗说过:“小心那些需要换新衣服的企业。”(或者类似的话……) - Corey Trager
1
是的,完全取决于上下文,但这是一个非常好的问题!在数学术语中,函数返回一个值(“对于给定的X,只能有一个Y”,等等)。方法只是“做某事”。在XML(例如)中,属性具有name属性和value属性。属性通常是抽象的,而属性通常是具体的(想想类/对象)。人类有属性:hasHairhairColor。“约翰”有属性:hasHair =“true”hairColor =“purple”(约翰是Twisted Sister的粉丝)。 - nothingisnecessary
1
这个问题如果没有提供一些上下文,就太宽泛了(按照目前的写法,只能用所有可能的上下文列表来回答)。 - Quentin
显示剩余6条评论
11个回答

232

一般来说(并且在正常的英语用法中),这些术语意思相同。

在HTML / Javascript的特定上下文中,这些术语变得混淆了,因为DOM元素的HTML表示具有属性(这是XML中包含在标签内部的键/值对的术语),但是当表示为JavaScript对象时,这些属性会显示为对象属性。

更让人困惑的是,对属性的更改通常会更新属性。

例如,更改element.href属性将更新元素上的href属性,并且这将反映在调用element.getAttribute('href')中。

但是,如果随后读取该属性,则它将被规范化为绝对URL,即使属性可能是相对URL!


18
这应该是被认可的答案! - Rubens Mariuzzo
5
@RubensMariuzzo所提供的内容可能很准确,但这里并没有答案...它只是在给人们解释一个可能存在的困惑点,并提供了相关背景。 - Brett Caswell
1
@Alnitak 很明确的答案。我为你做了一个世纪之作。 - mkHun
我来自 Python。我可以使用术语 类属性实例属性 吗? - joe
1
DOM将所有HTML标签和属性以对象形式存储在DOM模型中,每个属性都有自己的值。当DOM将这些HTML元素和属性转换为对象时,每个对象都会创建自己的属性。因此,在DOM中更新任何对象的属性将更新HTML中的属性值。请在此处检查属性和属性如何不同 https://codepen.io/VijayDhanvai/pen/jzOpJB?editors=1011 - Vijay Dhanvai
显示剩余3条评论

104

在计算机科学出现之前,这些词语已经存在。

  1. 属性是我们赋予某人或某物的质量或对象。例如,权杖是权力和国家身份的属性之一。

  2. 性质是一个不需要归属的质量。例如,黏土具有粘附性;即黏土的一个属性是其粘着性。另一个例子:金属的一个性质是导电性。性质通过物理现象表现自己,不需要将它们归属于某人或某物。同样地,说某人拥有男性特征是显而易见的。实际上,您可以说某个性质是由某人或某物拥有。

然而,在计算机科学中,这两个词通常可以互换使用 - 但程序员通常没有英语文学学位,也不写作或关心语法书:)。


1
你理解的意思已经很接近了。属性是一种类型描述器,它将对象描述为某些超出上下文的东西(比如一个解释器)...也就是说,有一个上下文,但这个上下文可能是可互换的。例如,使用HTML,如果您解析文档而没有任何显示/呈现到页面的意图,则width的整个目的都没有任何作用。 - Brett Caswell
谢谢!我来这里是为了寻求关于命名时何时使用哪个术语的指导。我并不太在意这是否在技术上正确,但这是一个非常有用的区分。 - user1433150
1
这正是我想要的答案类型。为什么上下文或任何特定语言实现者的决定很重要呢?他们可能做出了任意或不明智的决定。我想做一个明智的决定,这给了我具体的理由来选择其中之一。它也可能阐明为什么特定的实现者做出了他们的选择。 - bielawski
2
对我而言,我认为属性是相对/主观的,而特性则是客观的。例如颜色、形状、分数、风速、温度(98'F)等可以被量化或证实的特征适合作为属性。而质地(“柔软”)、条件(“有风”)、温度(“炎热”)等不太能被明确证实的描述则更适合作为属性。 - Ivan
你从哪里得到这个定义的? - 8c6b5df0d16ade6c

37

属性是您在HTML标签中使用的实际内容,例如

<input type="checkbox" checked="checked" />
在这个例子中,type和checked是属性。但是属性的值——即浏览器保存在DOM元素内部的值——才是最关键的。通常情况下,属性和属性值是相等的,所以很容易混淆。
在这个例子中,DOM元素具有属性type,其值为"checkbox",还具有属性checked,其值为true(请注意,此值与HTML属性内的值不同)。
使用Firebug,您可以在单击元素并选择"DOM视图"时观察属性的行为。

这可能是被接受的答案。它在理论上很清晰,在实践中也很有用。 - Jaune

21

通常,一个属性用来描述机制或现实世界的事物。

属性用于描述模型。

例如,一个文档(放在您桌子上的)可能具有其为草稿的属性。

用于建模文档的类具有一个属性,以指示它是否是草稿。在这种情况下,属性捕获状态。


1
这是否意味着实例的属性是属性? - Abdurrahim
有趣,但我不相信。给定一个文档,属性的实例可能是一张纸;模型所代表的属性的实例可能是一个足够大以容纳该纸张内容的缓冲区。 - Walt Stoneburner

14
这些术语的确切含义会在很大程度上取决于您所讨论的语言/系统/宇宙。
在HTML/XML中,属性(attribute)是标签的一部分,带有等号和值,而属性(property)则没有任何意义。
因此,我们需要更多关于您所讨论的领域的信息。

7
这不正确。请参考Alnitak的回答。 - kba

7

In Python...

class X( object ):
    def __init__( self ):
        self.attribute
    def getAttr( self ):
        return self.attribute
    def setAttr( self, value ):
        self.attribute= value
    property_name= property( getAttr, setAttr )

属性是一个类似于名称的单个属性,它包装了一组setter、getter(和deleter)函数。

而属性通常是另一个对象中的单个对象。

然而,Python提供了像__getattr__这样的方法,允许您扩展“属性”的定义。

归根结底 - 它们几乎是同义词。Python在实现方式上做了技术上的区分。


5
什么是属性和属性?什么是特征和功能的区别?特性和字符之间有什么区别?行为和行为之间有什么区别?
这只是上下文的变化。
对象、产品、个性、人
一个人通过行为来表现自己。 一个个性具有给定角色的特征。 一个产品具有导出功能的特征。 一个对象具有赋予它属性的属性。

那其实是一个很好的答案。 - anonym
仍然对最后一句话感到困惑。 - aztack

3
<property attribute="attributeValue">proopertyValue</property>

"would be one way to look at it." 可以这样理解。
在C#中,
[Attribute]
public class Entity
{
    private int Property{get; set;};

9
很抱歉要投反对票,但在XML中,你所标注的"property"其实是一个"element"。 - Harald Scheirich
@HaraldScheirich 回复有点慢 ;) 但是这个元素确实被称为“property”,以明确与Entity.Property的连接。通常情况下,XML元素实际上不被称为“element”。 - dove

2

在Java(或其他语言)中,使用Property / Attribute取决于用途:

  • 当值很少改变时(通常在启动时或用于环境变量),使用Property

  • Attribute是元素(对象)的值(对象子级),其可以非常频繁地更改/始终更改,并且可以是持久性的或非持久性的


2
在HTML中,属性似乎是特定于DOM树的,而属性用于描述DOM元素的特性。

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