首页>前端教程>JavaScript教程

JavaScript基础13:Object对象初了解

我们常说“面向对象的编程”,在JavaScript中,对象就是最重要的内容。

在老家常把谈恋爱说成“找对象”,那么这里的对象是一个人,在JavaScript中,几乎“所有事物”都是对象。

  • 布尔是对象(如果用 new 关键词定义)

  • 数字是对象(如果用 new 关键词定义)

  • 字符串是对象(如果用 new 关键词定义)

  • Date永远都是对象

  • Math永远都是对象

  • 正则表达式RegExp永远都是对象

  • 数组Array永远都是对象

  • 函数Function永远都是对象

  • 对象Object永远都是对象

所有 JavaScript 值,除了原始值(number、string、boolean、undefined,null),都是对象。

原始数据类型指的是拥有原始值的数据。原始值没有属性或方法。

原始值是一成不变的,比如“school”这个字符串,3.14这个数字,它们的值是不变的。

一、对象是变量

常规的变量包含一个值,但是对象可以包含很多值。对象是有值的变量的集合。

这些值以名称:值键值对(名称和值以冒号分隔)的形式写入。

var person = {
firstName:"John", 
lastName:"Doe", 
age:50, 
eyeColor:"blue"};

object对象中的变量名称被叫做“属性”。

对象属性可以是原始值、其他对象以及函数。

这里的函数就是对象的方法。是一个可以执行的动作。

对象的方法就是包含了函数声明的对象属性。

var person = {
firstName:"John", 
lastName:"Doe", 
age:50, 
eyeColor:"blue",
fullName:function(){
    return this.firstName+" "+this.lastName;
}};

二、创建一个对象

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

  • 定义和创建单个对象,使用对象字面量。

  • 定义和创建单个对象,通过关键词 new。

  • 定义对象构造函数,然后创建构造类型的对象。

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

1、使用对象字面量

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

var person = {
    firstName:"Bill",
    lastName:"Gates",
    age:62,
    eyeColor:"blue"
};

2、使用new的方式创建

var person = new Object();
person.firstName = "Bill";
person.lastName = "Gates";
person.age = 50;
person.eyeColor = "blue";

出于简易性、可读性和执行速度的考虑,使用对象字面量的方式更好。

三、对象是易变的

因为对象它们是通过引用来寻址,而非值。

不像原始数据类型,是值的传递。

所以,把对象赋值给另一个变量, 并不是创建了对象的副本,产生了新的对象,而是只是把对象的地址给了新的变量,它们都共同指向同一个对象。

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

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

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

var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}

var x = person;
x.age = 10;           // This will change both x.age and person.age

具体内容可以查看一下这篇文章关于堆内存和栈内存的分析。

JavaScript基础12:函数传参

四、访问属性和方法

1、访问属性的两种方法

objectName.property   
objectName["property"]

在点语法中,property属性名称是一个有效的 JavaScript 标识符,例如,一串字母数字字符,也包括下划线及美元符号,但不能以数字作为开头。比如,object.$1是合法的,而 object.1是无效不合法的。这就是为什么数组不能用点语法访问值的原因了。

在[ ]语法中,property是一个字符串。该字符串不一定是一个合法的标识符;它可以是任意值,例如,"1foo","!bar!",甚至是 " "(一个空格),也可以是一个传递过来的变量。

属性名称必须是字符串或符号 Symbol。这意味着非字符串对象不能用来作为一个对象属性的键。任何非字符串对象,包括 Number,都会通过 toString 方法,被转换成一个字符串。

var object = {};
object['1'] = 'value';
console.log(object[1]); //value

上述代码的输出为"value",因为 1 被类型转换为'1'。

var foo = {unique_prop: 1}, 
bar = {unique_prop: 2}, 
object = {};
object[foo] = 'value'; //被toString()转成了object["[object Object]"]="value"
console.log(object[bar]); //value

上述的代码的输出也是 "value",由于对象 foo 和 bar 都会被转成相同的字符串。在SpiderMonkey JavaScript 引擎中,这个字符串是 "[object Object]"。

2、访问方法

只能通过点语法访问对象的方法。

objectName.methodName()


点赞


0
保存到:

相关文章

Top