JavaScript 对象
本文最后更新于:2024年3月18日 凌晨
JavaScript 对象
- 对象只是一种特殊的数据,对象拥有属性和方法
- 用于保存复杂的数据,数据特点为键值对。
注意
- JavaScript 是面向对象的语言,但 JavaScript 不使用类。
- JavaScript 基于 prototype,而不是基于类的。
- 在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样)
访问对象
访问对象的属性
1 2
| objectName.propertyName objectName.['propertyName']
|
实例
- 使用了 String 对象的 length 属性来获得字符串的长度:
1 2
| var message="Hello World!"; var x=message.length;
|
访问对象的方法
1 2
| objectName.methodName() objectName.['methodName']()
|
实例
- 使用了 String 对象的
toUpperCase()
方法来将文本转换为大写:
1 2
| var message="Hello world!"; var x=message.toUpperCase();
|
对象解构
1
| let {var1, var2, method1} = object
|
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| person={ firstname:"John", lastname:"Doe", age:50, say : function(){ console.log("Hello World!"); } };
let {firstname, lastname, say} = person;
let firstname = person.firstname; let lastname = person.lastname; let say() = person.say();
|
对象传播操作符
- 对象解构时,在某个变量前加上
...
即可将未被解构的对象属性和方法全部解构对应的变量上,此时该变量为一个对象。
1 2 3 4 5 6 7 8 9 10
| person={ firstname:"John", lastname:"Doe", age:50, say : function(){ console.log("Hello World!"); } };
let {firstname, say, ...person2} = person;
|
- 此时
person2
将包含lastname
,age
两个未被解构的属性。
创建对象
- 通过 JavaScript,您能够定义并创建自己的对象。
- 创建新对象有两种不同的方法:
- 使用 Object 定义并创建对象的实例。
- 使用函数来定义对象,然后创建新的对象实例。
使用 Object
- 在 JavaScript 中,几乎所有的对象都是 Object 类型的实例,它们都会从 Object.prototype 继承属性和方法。
- Object 构造函数创建一个对象包装器。
- Object 构造函数,会根据给定的参数创建对象,具体有以下情况:
- 如果给定值是 null 或 undefined,将会创建并返回一个空对象。
- 如果传进去的是一个基本类型的值,则会构造其包装类型的对象。
- 如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址。
- 当以非构造函数形式被调用时,Object 的行为等同于
new Object()
- vaule 可以是任何值。
- 以下实例使用 Object 生成布尔对象:
1 2
| var o = new Object(true);
|
- 这个例子创建了对象的一个新实例,并向其添加了四个属性:
1 2 3 4 5
| person=new Object(); person.firstname="John"; person.lastname="Doe"; person.age=50; person.eyecolor="blue";
|
使用对象字面量
- JavaScript 对象就是一个
name:value
集合。
1 2 3 4 5 6 7 8 9
| { name1 : value1, name2 : value2 ..., nameN : valueN, fName : function(){ ... } }
|
- 其实就是大括号里面创建
name:value
对,然后 name:value
对之间以逗号 ,
隔开。
1 2 3 4 5 6 7 8 9
| person={ firstname:"John", lastname:"Doe", age:50, eyecolor:"blue", say : function(){ console.log("Hello World!"); } };
|
- 在ES6中可执行如下简写:
- 如果key和变量的名字一致,可以定义一次即可。
- 如果value是一个函数可以将
:function
省略。
1 2 3 4 5 6 7 8 9 10 11
| var firstname = "John"; person={ firstname, lastname:"Doe", age:50, eyecolor:"blue", say(){ console.log("Hello World!"); } };
|
使用对象构造器
1 2 3 4 5 6 7
| function person(firstname,lastname,age,eyecolor) { this.firstname=firstname; this.lastname=lastname; this.age=age; this.eyecolor=eyecolor; }
|
- 在JavaScript中,this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象(运行时)
- 一旦有了对象构造器,就可以创建新的对象实例,就像这样:
1 2
| var myFather=new person("John","Doe",50,"blue"); var myMother=new person("Sally","Rally",48,"green");
|
编辑对象
把属性添加到对象
- 您可以通过为对象赋值,向已有对象添加新属性:
- 假设 person 对象已存在 - 您可以为其添加这些新属性:firstname,lastname,age 以及 eyecolor:
1 2 3 4 5 6
| person.firstname="John"; person.lastname="Doe"; person.age=30; person.eyecolor="blue";
x=person.firstname;
|
把方法添加到对象
- 方法只不过是附加在对象上的函数。
- 构造器函数内部定义对象的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13
| function person(firstname,lastname,age,eyecolor) { this.firstname=firstname; this.lastname=lastname; this.age=age; this.eyecolor=eyecolor;
this.changeName=changeName; function changeName(name) { this.lastname=name; } }
|
changeName()
函数 name
的值赋给 person
的 lastname
属性。
1
| myMother.changeName("Doe");
|
遍历对象
- JavaScript
for...in
语句循环遍历对象的属性。
1 2 3 4
| for (variable in object) { 执行的代码...... }
|
- 注意:for…in 循环中的代码块将针对每个属性执行一次。
- 循环遍历对象的属性:
1 2 3 4 5 6
| var person={fname:"John",lname:"Doe",age:25};
for (x in person) { txt=txt + person[x]; }
|
对象的赋值
- 可将对象赋值给变量,它们是通过引用来传递的。
- 以下实例的 person 对象不会创建副本:
1 2 3 4 5 6 7 8 9
| var person = { firstName:"John", lastName:"Doe", age:50, eyeColor:"blue" }
var x = person; x.age = 10;
|