JavaScript 对象定义

在 JavaScript 中,对象是核心。如果您理解了对象,就理解了 JavaScript。

在 JavaScript 中,几乎“所有事物”都是对象。

  • 布尔是对象(如果用 new 关键词定义)
  • 数字是对象(如果用 new 关键词定义)
  • 字符串是对象(如果用 new 关键词定义)
  • 日期永远都是对象
  • 算术永远都是对象
  • 正则表达式永远都是对象
  • 数组永远都是对象
  • 函数永远都是对象
  • 对象永远都是对象

所有 JavaScript 值,除了原始值,都是对象。


JavaScript 原始值

原始值指的是没有属性或方法的值。

原始数据类型指的是拥有原始值的数据。

JavaScript 定义了 5 种原始数据类型:

  • string
  • number
  • boolean
  • null
  • undefined

原始值是一成不变的。比如 x = 3.14,您能够改变 x 的值。但是您无法改变 3.14 的值。

类型注释
"Hello"string"Hello" 始终是 "Hello"
3.14number3.14 始终是 3.14
truebooleantrue 始终是 true
falsebooleanfalse 始终是 false
nullnull(object) null 始终是 null
undefinedundefinedundefined 始终是 undefined

对象是包含变量的变量

JavaScript 变量能够包含单个的值:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 变量</h1>
  5. <p id="demo">
  6. <script>
  7. // 创建并显示变量:
  8. var person = "埃隆马斯克";
  9. document.getElementById("demo").innerHTML = person;
  10. </script>
  11. </body>
  12. </html>

对象也是变量。但是对象能够包含很多值。

值按照名称 : 值对的形式编写(名称和值以冒号分隔)。

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>创建 JavaScript 对象</h1>
  5. <p id="demo">
  6. <script>
  7. var person = {
  8. firstName : "Bill",
  9. lastName : "Gates",
  10. age : 62,
  11. eyeColor : "blue"
  12. };
  13. document.getElementById("demo").innerHTML = person.firstName + " " + person.lastName;
  14. </script>
  15. </body>
  16. </html>

JavaScript 对象是命名值的集合。


对象属性

JavaScript 对象中的命名值,被称为属性

属性
firstName埃隆
lastName马斯克
age50
eyeColor蓝色

以名称值对书写的对象类似于:

  • PHP 中的关联数组
  • Python 中的字典
  • C 中的哈希表
  • Java 中的哈希映射
  • Ruby 和 Perl 中的散列

对象方法

方法是可以在对象上执行的动作。对象属性可以是原始值、其他对象以及函数。对象方法是包含函数定义的对象属性。

属性
firstName埃隆
lastName马斯克
age50
eyeColor蓝色
fullNamefunction() {return this.firstName + " " + this.lastName;}

JavaScript 对象是被称为属性和方法的命名值的容器。


创建 JavaScript 对象

通过 JavaScript,您能够定义和创建自己的对象。

有不同的方法来创建对象:

  • 定义和创建单个对象,使用对象文字。
  • 定义和创建单个对象,通过关键词 new。
  • 定义对象构造器,然后创建构造类型的对象。

在 ECMAScript 5 中,也可以通过函数 Object.create() 来创建对象。


使用对象字面量

这是创建对象最简答的方法。

使用对象文字,您可以在一条语句中定义和创建对象。

对象文字指的是花括号 {} 中的名称:值对(比如 age:62)。

下面的例子创建带有四个属性的新的 JavaScript 对象:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 对象创建</h1>
  5. <p id="demo">
  6. <script>
  7. // 创建对象:
  8. var person = {firstName:"埃隆", lastName:"马斯克", age:50, eyeColor:"蓝色"};
  9. // 显示对象中的数据:
  10. document.getElementById("demo").innerHTML =
  11. person.firstName + " 已经 " + person.age + " 岁了。";
  12. </script>
  13. </body>
  14. </html>

空格和换行不重要。对象定义可横跨多行:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 对象创建</h1>
  5. <p id="demo">
  6. <script>
  7. // 创建对象:
  8. var person = {
  9. firstName : "埃隆",
  10. lastName : "马斯克",
  11. age : 50,
  12. eyeColor : "蓝色"
  13. };
  14. // 显示对象中的数据:
  15. document.getElementById("demo").innerHTML =
  16. person.firstName + " 已经 " + person.age + " 岁了。";
  17. </script>
  18. </body>
  19. </html>

使用 JavaScript 关键词 new

下面的例子也创建了带有四个属性的新的 JavaScript 对象:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <p id="demo">
  5. <script>
  6. var person = new Object();
  7. person.firstName = "埃隆";
  8. person.lastName = "马斯克";
  9. person.age = 50;
  10. person.eyeColor = "蓝色";
  11. document.getElementById("demo").innerHTML =
  12. person.firstName + " 已经 " + person.age + " 岁了。";
  13. </script>
  14. </body>
  15. </html>

上面的两个例子结果是一样的。无需使用 new Object()

出于简易性、可读性和执行速度的考虑,请使用第一种创建方法(对象文字方法)。


JavaScript 对象是易变的

对象是易变的:它们通过引用来寻址,而非值。

如果 person 是一个对象,下面的语句不会创建 person 的副本:

  1. var x = person; // 这不会创建 person 的副本。

对象 x 并非 person 的副本。它就是 person。x 和 person 是同一个对象。

对 x 的任何改变都将改变 person,因为 x 和 person 是相同的对象。

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 对象是易变的</h1>
  5. <p>对对象副本的任何更改也将更改原始对象。</p>
  6. <p id="demo">
  7. <script>
  8. var person = {firstName:"埃隆", lastName:"马斯克", age:50, eyeColor:"蓝色"}
  9. var x = person;
  10. x.age = 10;
  11. document.getElementById("demo").innerHTML =
  12. person.firstName + " 已经 " + person.age + " 岁了。";
  13. </script>
  14. </body>
  15. </html>

注释:JavaScript 变量不是易变的。只有 JavaScript 对象如此。

分类导航