JavaScript对象定义 JavaScript验证 api JavaScript属性 在JavaScript中,对象就是王。如果你了解的对象,你了解JavaScript。 在JavaScript中,几乎一切都是对象. Booleans 可以是对象 (如果定义使用new关键字) Numbers 可以是对象 (如果定义使用new关键字) Strings 可以是对象 (如果定义使用new关键字) 日期总是对象 数学(Math)总是对象 正则表达式总是对象 数组总是对象 函数总是对象 对象总是对象 除了原始值,所有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变量可以包含单个值: var person = "John Doe"; 让我试试 对象也是变量。但对象可以包含许多值. 值被写成 name : value 键值对 (name 和 value 使用冒号分隔). var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}; 让我试试 JavaScript 对象是 named values 的集合 Object 属性 在JavaScript对象中的names和values, 被称为 属性. 属性 值 firstName John lastName Doe age 50 eyeColor blue 对象写成name value键值对就像: PHP 里面的关联数组 Python 里面的字典 C 里面的哈希表 Java 里面的哈希Map Ruby 和 Perl 里面的哈希 对象方法 方法是可以在对象上执行的*操作. 对象属性既可以是原始值,也可以是其他对象和函数. 对象方法 是一个包含 函数定义 的对象属性. 属性 值 firstName John lastName Doe age 50 eyeColor blue fullName function() {return this.firstName + " " + this.lastName;} JavaScript对象name和value的容器,称为属性和方法。 你将在下一章学到更多关于方法的知识。 创建一个JavaScript对象 JavaScript,你可以定义和创建你自己的对象. 有不同的方法来创建新的对象: 使用对象字面量定义和创建单个对象 定义并创建一个对象,使用new关键字。 定义对象构造函数,然后创建构造类型的对象。 在ECMAScript 5里面, 也可以用Object.create()函数创建对象. 使用对象字面量 这是创建一个JavaScript对象的最简单的方法. 使用对象字面量,您可以在一个语句中定义和创建对象. 对象字面是一个包含在{}中的,name:value列表(如age:50)。 下面的示例创建一个新的JavaScript对象有四个属性: var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}; 让我试试 空格和换行不重要。对象定义可以跨越多行: var person = { firstName:"John", lastName:"Doe", age:50, eyeColor:"blue" }; 让我试试 使用JavaScript关键字new 下面的示例创建了一个新的四个属性的JavaScript对象: var person = new Object(); person.firstName = "John"; person.lastName = "Doe"; person.age = 50; person.eyeColor = "blue"; 让我试试 上面的两个例子完全一样。. 这里需要使用 new Object(). 出于对简单性、可读性和执行速度考虑,请使用第一个(对象字面量方法). 使用对象构造函数 上面的例子在很多情况下都是有限的。它们只创建一个对象. 有时我们喜欢有一个“对象类型”,可以用来创建这个类型的许多对象. 创建“对象类型”的标准方法是使用对象构造函数: function person(first, last, age, eye) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eye; } var myFather = new person("John", "Doe", 50, "blue"); var myMother = new person("Sally", "Rally", 48, "green"); 让我试试 上述function (person)是对象构造函数 一旦拥有对象构造函数,就可以创建相同类型的新对象: var myFather = new person("John", "Doe", 50, "blue"); var myMother = new person("Sally", "Rally", 48, "green"); this 关键字 在JavaScript中,所谓 this ,是对象,“自己的”的JavaScript代码。 this , 在函数中使用时,是“拥有”函数的对象。 this, 在对象中使用时,对象本身。 this 对象构造函数中的关键字不具有值。它只是新对象的替代品。 this 将成为新对象,当构造函数用于创建对象时。 注意 this 不是变量。这是一个关键词。你不能改变 this 的值. 内置的JavaScript构造函数 JavaScript有内置的本地对象的构造函数: var x1 = new Object(); // A new Object object var x2 = new String(); // A new String object var x3 = new Number(); // A new Number object var x4 = new Boolean(); // A new Boolean object var x5 = new Array(); // A new Array object var x6 = new RegExp(); // A new RegExp object var x7 = new Function(); // A new Function object var x8 = new Date(); // A new Date object 让我试试 Math() 对象不在列表中. Math是全局对象. new 关键字不能用于 Math. 你知道吗? 你可以看到,JavaScript具有原始数据类型对象的版本 String, Number, and Boolean. 没有理由创建复杂对象。原始值执行速度更快. 没有理由去使用 new Array(). 使用数组字面量代替: [] 没有理由去使用 new RegExp(). 使用模式字面量代替: /()/ 没有理由去使用 new Function(). 使用函数表达式代替: function () {}. 没有理由去使用 new Object(). 使用对象字面量代替: {} var x1 = {}; // new object var x2 = ""; // new primitive string var x3 = 0; // new primitive number var x4 = false; // new primitive boolean var x5 = []; // new array object var x6 = /()/ // new regexp object var x7 = function(){}; // new function object 让我试试 字符串对象 通常,字符串是作为基本类型创建的: var firstName = "John" 但字符串也可以创建为对象使用 new 关键字: var firstName = new String("John") 了解为什么字符串不应该被创建为对象请参考 JS 字符串. 布尔对象 通常情况下,布尔使用基本类型创建: var x = false 但布尔值也可以作为对象使用 new 关键字: var x = new Boolean(false) 了解为什么布尔值不应作为对象创建,请参考: JS 布尔. JavaScript的对象是可变的 对象是可变的:他们的地址是一个引用类型,而不是值. 如果person是一个对象,下面的语句将不会创建person的副本: var x = person; // This will not create a copy of 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变量是不可变的。只有JavaScript对象是可变的。 JavaScript验证 api JavaScript属性