Any Wolfram Language symbol can have both a variety of types of values, and a variety of independently settable attributes that define overall aspects of its behavior.
Attributes — find the attributes of a symbol
SetAttributes, ClearAttributes — set, clear attributes
Listable — automatically thread over lists appearing in arguments
Flat — make f[f[a],b] equivalent to f[a,b], etc. (associativity)
Orderless — make f[b,a] equivalent to f[a,b], etc. (commutativity)
OneIdentity — treat f[a] as equivalent to a, etc. (idempotence)
Function Argument Evaluation
HoldFirst ▪ HoldRest ▪ HoldAll ▪ HoldAllComplete ▪ SequenceHold
NumericFunction — treat as a numeric function
NHoldFirst ▪ NHoldRest ▪ NHoldAll
Constant — treat as a constant in differentiation, etc.
Stub — stub created by DeclarePackage, etc.
Temporary — temporary local variable from Module, etc.
Protected — keep protected against redefinition
ReadProtected ▪ Protect ▪ Unprotect
Locked — keep all attributes locked (settable but not clearable)
Function — a pure function, potentially with attributes