对象
- 在 JavaScript 中,几乎“所有事物”都是对象。所有 JavaScript 值,除了原始值,都是对象。
- 布尔是对象(如果用 new 关键词定义)
- 数字是对象(如果用 new 关键词定义)
- 字符串是对象(如果用 new 关键词定义)
- 日期永远都是对象
- 算术永远都是对象
- 正则表达式永远都是对象
- 数组永远都是对象
- 函数永远都是对象
- 对象永远都是对象
原始值
- 原始值指的是没有属性或方法的值。
- 原始数据类型指的是拥有原始值的数据。
- JavaScript 定义了 5 种原始数据类型:
- string
- number
- boolean
- null
- undefined
- 原始值是一成不变的(它们是硬编码的,因此不能改变)。
- 假设 x = 3.14,您能够改变 x 的值。但是您无法改变 3.14 的值。
对象定义
- 对象是包含变量的变量
- JavaScript 对象是命名值的集合。
- 对象也是变量。但是对象能够包含很多值。
- 值按照
名称 : 值对
的形式编写(名称和值以冒号分隔)。1
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
对象属性
- 属性指的是与 JavaScript 对象相关的值。
- JavaScript 对象是无序属性的集合。
- 属性通常可以被修改、添加和删除,但是某些属性是只读的。
- firstName、lastName、age、eyeColor就是属性。
访问对象属性的两种方法
JavaScript for…in 循环
JavaScript for…in 语句遍历对象的属性。
1 | for (variable in object) { |
for…in 循环中的代码块会为每个属性执行一次。
1 | <body> |
- 在这里,x依次是fname、lname、age。
- 例子运行效果
添加新属性
- 可以通过简单的赋值,向已存在的对象添加新属性。
- 不能使用预留词作为属性名(或方法名)。请使用 JavaScript 命名规则。完整例子
1
person.nationality = "English";
删除属性
- delete 关键词会同时删除属性的值和属性本身。
- 删除完成后,属性在被添加回来之前是无法使用的。
- delete 操作符被设计用于对象属性。它对变量或函数没有影响。
- delete 操作符不应被用于预定义的 JavaScript 对象属性。这样做会使应用程序崩溃。完整例子
1
2var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
delete person.age; // 或 delete person["age"]; - JavaScript 对象继承了它们的原型的属性。
- delete 关键词不会删除被继承的属性,但是如果您删除了某个原型属性,则将影响到所有从原型继承的对象。
对象方法
- 方法是可以在对象上执行的动作。
- 对象属性可以是原始值、其他对象以及函数。
- 对象方法是包含函数定义的对象属性。
属性 | 值 |
---|---|
firstName | Bill |
fullName | function() {return this.firstName + “ “ + this.lastName;} |
this 关键词
- 在 JavaScript 中,被称为 this 的事物,指的是拥有该 JavaScript 代码的对象。
- this 的值,在函数中使用时,是“拥有”该函数的对象。
- 请注意 this 并非变量。它是关键词。您无法改变 this 的值。
创建与访问对象方法
- 创建对象方法:
1
methodName : function() { 代码行 }
- 访问对象方法:
1
objectName.methodName()
- 此例访问 person 对象的 fullName() 方法:例子
- 如果访问 fullName 属性时没有使用 (),则将返回函数定义:例子
使用内建方法
- 此例使用 String 对象的 toUpperCase() 方法,把文本转换为大写:x 的值,在以上代码执行后将是:
1
2var message = "Hello world!";
var x = message.toUpperCase();1
HELLO WORLD!
添加新的方法
向对象添加方法是在构造器函数内部完成的:(更多相关知识在js对象 学习笔记(2)中的“JavaScript 对象构造器”内)
1 | function person(firstName, lastName, age, eyeColor) { |
changeName() 函数 name 的值赋给了 person 的 lastName 属性。
1 | myMother.changeName("Jobs"); |
- 完整例子
- 通过用 myMother “替代” this。
- this 的值,在对象中使用时,就是对象本身。
- 在构造器函数中,this 是没有值的。它是新对象的替代物。 当一个新对象被创建时,this 的值会成为这个新对象。