- High Level: It provides abstractions that allow you to ignore the details of the machine where it’s running.
- Dynamic: As opposed to static programming languages, a dynamic language executes at runtime many of the things that a static language does at compile time.
- Dynamically Typed: A variable does not enforce a type.
- Weakly Typed: As opposed to strong typing, weakly (or loosely) typed languages do not enforce the type of an object.
- Interpreted: It’s commonly known as an interpreted language, which means that it does not need a compilation stage before a program can run.
- Multi-Paradigm: The language does not enforce any particular programming paradigm.
A descriptor is a set of attributes of a property, and it’s composed by a subset of the following:
- Value: the value of the property.
- Writable: true the property can be changed.
- Get: a getter function for the property, called when the property is read.
- Set: a setter function for the property, called when the property is set to a value.
- Configurable: if false, the property cannot be removed nor any attribute can be changed, except its value.
- Enumerable: true if the property is enumerable.