Egenskaber er den vigtigste del af ethvert JavaScript-objekt.
Egenskaber er de værdier, der er knyttet til et JavaScript-objekt.
Et JavaScript-objekt er en samling af uordnede egenskaber.
Egenskaber kan normalt ændres, tilføjes og slettes, men nogle er skrivebeskyttede.
Syntaksen for at få adgang til et objekts egenskab er:
objectName.property // person.age
eller
objectName["property"] // person["age"]
eller
objectName[expression] // x = "age"; person[x]
Udtrykket skal evalueres til et egenskabsnavn.
person.firstname + " is " + person.age + " years old.";
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Access a property with .property:</p>
<p id="demo"></p>
<script>
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
document.getElementById("demo").innerHTML = person.firstname + " is " + person.age + " years old.";
</script>
</body>
</html>
person["firstname"] + " is " + person["age"] + " years old.";
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Access a property with ["property"]:</p>
<p id="demo"></p>
<script>
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
document.getElementById("demo").innerHTML = person["firstname"] + " is " + person["age"] + " years old.";
</script>
</body>
</html>
JavaScript-sætningen for...in
går gennem et objekts egenskaber.
for (let variable in object) {
// code to be executed
}
Kodeblokken inde i for...in
-løkken vil blive udført én gang for hver egenskab.
Gennemgang af et objekts egenskaber:
const person = {
fname:" John",
lname:" Doe",
age: 25
};
for (let x in person) {
txt += person[x];
}
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Looping object property values:</p>
<p id="demo"></p>
<script>
const person = {
fname:"John",
lname:"Doe",
age:25
};
let txt = "";
for (let x in person) {
txt += person[x] + " ";
}
document.getElementById("demo").innerHTML = txt;
</script>
</body>
</html>
Du kan tilføje nye egenskaber til et eksisterende objekt ved blot at give det en værdi.
Antag, at personobjektet allerede eksisterer - du kan så give den nye egenskaber:
person.nationality = "English";
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Add a new property to an existing object:</p>
<p id="demo"></p>
<script>
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
person.nationality = "English";
document.getElementById("demo").innerHTML =
person.firstname + " is " + person.nationality + ".";
</script>
</body>
</html>
Søgeordet delete
sletter en egenskab fra et objekt:
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
delete person.age;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Deleting object properties.</p>
<p id="demo"></p>
<script>
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
delete person.age;
document.getElementById("demo").innerHTML =
person.firstname + " is " + person.age + " years old.";
</script>
</body>
</html>
eller slet person["alder"];
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
delete person["age"];
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Deleting object properties.</p>
<p id="demo"></p>
<script>
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
delete person["age"];
document.getElementById("demo").innerHTML =
person.firstname + " is " + person.age + " years old.";
</script>
</body>
</html>
Søgeordet delete
sletter både værdien af ejendommen og selve ejendommen.
Efter sletning kan ejendommen ikke bruges, før den tilføjes igen.
Det Operatoren delete
er designet til at blive brugt på objektegenskaber. Det har ingen effekt på variabler eller funktioner.
Operatoren delete
bør ikke bruges på et foruddefineret JavaScript-objekt ejendomme. Det kan crashe din applikation.
Værdier i et objekt kan være et andet objekt:
myObj = {
name:"John",
age:30,
cars: {
car1:"Ford",
car2:"BMW",
car3:"Fiat"
}
}
Du kan få adgang til indlejrede objekter ved hjælp af punktnotationen eller parentesnotationen:
myObj.cars.car2;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Objects</h2>
<p>Access nested objects:</p>
<p id="demo"></p>
<script>
const myObj = {
name: "John",
age: 30,
cars: {
car1: "Ford",
car2: "BMW",
car3: "Fiat"
}
}
document.getElementById("demo").innerHTML = myObj.cars.car2;
</script>
</body>
</html>
eller:
myObj.cars["car2"];
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Objects</h2>
<p>Access nested objects:</p>
<p id="demo"></p>
<script>
const myObj = {
name: "John",
age: 30,
cars: {
car1: "Ford",
car2: "BMW",
car3: "Fiat"
}
}
document.getElementById("demo").innerHTML = myObj.cars["car2"];
</script>
</body>
</html>
eller:
myObj["cars"]["car2"];
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Objects</h2>
<p>Access nested objects:</p>
<p id="demo"></p>
<script>
const myObj = {
name: "John",
age: 30,
cars: {
car1: "Ford",
car2: "BMW",
car3: "Fiat"
}
}
document.getElementById("demo").innerHTML = myObj["cars"]["car2"];
</script>
</body>
</html>
eller:
let p1 = "cars";
let p2 = "car2";
myObj[p1][p2];
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Objects</h2>
<p>Access nested objects:</p>
<p id="demo"></p>
<script>
const myObj = {
name: "John",
age: 30,
cars: {
car1: "Ford",
car2: "BMW",
car3: "Fiat"
}
}
let p1 = "cars";
let p2 = "car2";
document.getElementById("demo").innerHTML = myObj[p1][p2];
</script>
</body>
</html>
Værdier i objekter kan være arrays, og værdier i arrays kan være objekter:
const myObj =
{
name: "John",
age: 30,
cars: [
{name:"Ford",
models:["Fiesta", "Focus", "Mustang"]},
{name:"BMW", models:["320", "X3", "X5"]},
{name:"Fiat", models:["500", "Panda"]}
]
}
For at få adgang til arrays inde i arrays skal du bruge en for-in-løkke for hvert array:
for (let i in myObj.cars) {
x += "<h1>" + myObj.cars[i].name
+ "</h1>";
for (let j in myObj.cars[i].models) {
x += myObj.cars[i].models[j];
}
}
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>Nested JavaScript Objects and Arrays.</h2>
<p id="demo"></p>
<script>
let x = "";
const myObj = {
name: "John",
age: 30,
cars: [
{name:"Ford", models:["Fiesta", "Focus", "Mustang"]},
{name:"BMW", models:["320", "X3", "X5"]},
{name:"Fiat", models:["500", "Panda"]}
]
}
for (let i in myObj.cars) {
x += "<h2>" + myObj.cars[i].name + "</h2>";
for (let j in myObj.cars[i].models) {
x += myObj.cars[i].models[j] + "<br>";
}
}
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
Alle ejendomme har et navn. Derudover har de også en værdi.
Værdien er en af ejendommens attributter.
Andre attributter er: enumerable, konfigurerbar og skrivbar.
Disse attributter definerer, hvordan egenskaben kan tilgås (er den læsbar?, er det kan skrives?)
I JavaScript kan alle attributter læses, men kun værdiattributten kan ændres (og kun hvis ejendommen er skrivbar).
(ECMAScript 5 har metoder til både at hente og indstille alle egenskaber egenskaber)
JavaScript-objekter arver egenskaberne af deres prototype.
Søgeordet delete
sletter ikke nedarvede egenskaber, men hvis du sletter en prototype egenskab, vil det påvirke alle objekter arvet fra prototypen.