As propriedades são a parte mais importante de qualquer objeto JavaScript.
Propriedades são os valores associados a um objeto JavaScript.
Um objeto JavaScript é uma coleção de propriedades não ordenadas.
Geralmente, as propriedades podem ser alteradas, adicionadas e excluídas, mas algumas são somente leitura.
A sintaxe para acessar a propriedade de um objeto é:
objectName.property // person.age
ou
objectName["property"] // person["age"]
ou
objectName[expression] // x = "age"; person[x]
A expressão deve ser avaliada como um nome de propriedade.
person.firstname + " is " + person.age + " years old.";
Experimente você mesmo →
<!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.";
Experimente você mesmo →
<!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>
A instrução JavaScript for...in
percorre as propriedades de um objeto.
for (let variable in object) {
// code to be executed
}
O bloco de código dentro do loop for...in
será executado uma vez para cada propriedade.
Percorrendo as propriedades de um objeto:
const person = {
fname:" John",
lname:" Doe",
age: 25
};
for (let x in person) {
txt += person[x];
}
Experimente você mesmo →
<!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>
Você pode adicionar novas propriedades a um objeto existente simplesmente atribuindo um valor a ele.
Suponha que o objeto pessoa já exista - você pode então atribuir novas propriedades:
person.nationality = "English";
Experimente você mesmo →
<!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>
A palavra-chave delete
exclui uma propriedade de um objeto:
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
delete person.age;
Experimente você mesmo →
<!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>
ou exclua pessoa["idade"];
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
delete person["age"];
Experimente você mesmo →
<!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>
A palavra-chave delete
exclui o valor da propriedade e a própria propriedade.
Após a exclusão, a propriedade não poderá ser usada antes de ser adicionada novamente.
O O operador delete
foi projetado para ser usado nas propriedades do objeto. Não tem efeito sobre variáveis ou funções.
O operador delete
não deve ser usado em objetos JavaScript predefinidos propriedades. Isso pode travar seu aplicativo.
Os valores em um objeto podem ser outro objeto:
myObj = {
name:"John",
age:30,
cars: {
car1:"Ford",
car2:"BMW",
car3:"Fiat"
}
}
Você pode acessar objetos aninhados usando a notação de ponto ou colchete:
myObj.cars.car2;
Experimente você mesmo →
<!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>
ou :
myObj.cars["car2"];
Experimente você mesmo →
<!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>
ou :
myObj["cars"]["car2"];
Experimente você mesmo →
<!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>
ou :
let p1 = "cars";
let p2 = "car2";
myObj[p1][p2];
Experimente você mesmo →
<!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>
Os valores nos objetos podem ser matrizes e os valores nas matrizes podem ser objetos:
const myObj =
{
name: "John",
age: 30,
cars: [
{name:"Ford",
models:["Fiesta", "Focus", "Mustang"]},
{name:"BMW", models:["320", "X3", "X5"]},
{name:"Fiat", models:["500", "Panda"]}
]
}
Para acessar arrays dentro de arrays, use um loop for-in para cada 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];
}
}
Experimente você mesmo →
<!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>
Todas as propriedades têm um nome. Além disso, eles também têm um valor.
O valor é um dos atributos da propriedade.
Outros atributos são: enumerável, configurável e gravável.
Esses atributos definem como a propriedade pode ser acessada (é legível?, é é gravável?)
Em JavaScript, todos os atributos podem ser lidos, mas apenas o atributo value pode ser alterado (e somente se a propriedade for gravável).
( ECMAScript 5 possui métodos para obter e definir todas as propriedades atributos)
Objetos JavaScript herdam as propriedades de seu protótipo.
A palavra-chave delete
não exclui propriedades herdadas, mas se você excluir uma propriedade protótipo, afetará todos os objetos herdado do protótipo.