JavaScript 对象
JavaScript 中一切皆对象:字符串、数值、数组、函数...
此外,JavaScript 也允许自定义对象。
所有事物都是对象
JavaScript 提供多个内建对象,比如 String、Date、Array 等等。 对象只是带有属性和方法的特殊数据类型。
布尔型可以是一个对象。
数字型可以是一个对象。
字符串也可以是一个对象
日期是一个对象
数学和正则表达式也是对象
数组是一个对象
甚至函数也可以是对象
对象定义
你可以使用字符来定义和创建 JavaScript 对象:
var person = {
name: "John", age: 31,
favColor: "green", height: 183
};
**定义 JavaScript 对象可以跨越多行,空格跟换行不是必须的。
JavaScript 对象属性
可以说 "JavaScript 对象是变量的容器"。
但是,我们通常认为 "JavaScript 对象是键值对的容器"。
键值对通常写法为 name : value (键与值以冒号分割)。
键值对在 JavaScript 对象通常称为 对象属性。
JavaScript 对象是属性变量的容器。
访问对象属性
您可以通过两种方式访问对象属性。
objectName.propertyName
//或者
objectName['propertyName']
这个例子使用了两种方式访问 person 的年龄
var person = {
name: "John", age: 31,
favColor: "green", height: 183
};
var x = person.age;
var y = person['age'];
JavaScript的内置长度属性用于计算属性或字符串中的字符数。
var course = {name: "JS", lessons: 54};
document.write(course.name.length);
// -> 2
两种方式访问对象属性的区别:
1.点方法后面跟的必须是一个指定的属性名称,而中括号方法里面可以是变量。例如
var haha = "name";
console.log(obj.haha); // undefined
console.log(obj[haha]); // cedric
2.中括号方法里面的属性名可以是数字,而点方法后面的属性名不可以是数字
3.当动态为对象添加属性时,必须使用中括号[],不可用点方法
更新对象属性
当你创建了一个对象后,你可以用.或[]来更新对象的属性。
举个例子,让我们看看ourDog:
var ourDog = {"name": "Camper","legs": 4,"tails": 1,"friends": ["everything!"]};
让我们更改它的名称为“ Happy Camper”,这有两种方式来更新对象的名称属性:
ourDog.name = "Happy Camper";
ourDog["name"] = "Happy Camper";
添加对象属性
你也可以像更改属性一样给对象添加属性。
var ourDog = {
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"]
};
ourDog.bark = "bow-wow";
// 等价于 ourDog['bark'] = "bow-wow";
删除对象属性
我们同样可以删除对象的属性,例如:
var ourDog = {
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"]
};
var c1 = ourDog['tails']; // c1 等于 1
// 删除 tails 属性
delete ourDog['tails']; // 等价于 delete ourDog.tails
var c2 = ourDog['tails']; // c2 等于 undefined
对象方法
对象方法是一个包含函数定义的属性。
您可以通过以下语法来调用方法:
对象名.方法名()
这个例子使用了 String 对象的 toUpperCase() 方法来将文本转换为大写:
var message = "Hello world!";
var x = message.toUpperCase();
在以上代码执行后,x 的值将是:
HELLO WORLD!
提示: 方法是作为对象属性存储的函数。
使用 [] 读取对象属性
var myObj = {
"name": "Loen",
"age": "28",
"eat": function(){
return "I'm eating";
}
};
myObj["name"]; // Loen
var a = 'age';
myObj[a]; // 还可以用变量访问对象属性, 这里返回 28
myObj['eat'](); // 返回 I'm eating
对象构造器
对象构造器
本例使用函数来构造对象:
function person(firstname, lastname, age, eyecolor)
{
this.firstname = firstname;
this.lastname = lastname;
this.age = age;
this.eyecolor = eyecolor;
}
在JavaScript中,this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象(运行时)
创建 JavaScript 对象实例
一旦您有了对象构造器,就可以创建新的对象实例,就像这样:
var myFather = new person("John","Doe",50,"blue");
var myMother = new person("Sally","Rally",48,"green");
document.write(myFather.age); // -> 50
document.write(myMother.name); // -> Sally
提示: myFather 和 myMother 是 person 对象的实例,它们的属性分配给相应的值。
对象初始化
使用英文大括号{}创建单个对象
var John = {name: "John", age: 25};
var Loen = {name: "Loen", age: 28};
使用对象初始化器
空格和换行符并不重要。对象定义可以跨多行。
var John = {
name: "John",
age: 25
};
var Loen = {
name: "Loen",
age: 28
};
无论如何创建对象,访问属性和方法的语法不会更改。
document.write(Loen.age);
添加方法
添加方法
方法是存储在对象属性中的函数。
使用以下方式创建对象函数:
methodName : function() { code lines }
使用以下方式访问对象函数:
objectName.methodName()
this 关键词是当前对象的引用,这意味着您可以使用 this 来访问对象属性和方法。
在构造函数中定义方法:
function person(name, age) {
this.name = name;
this.age = age;
this.changeName = function (name) {
this.name = name;
}
}
var p = new person("Loen", 28);
p.changeName("John");
在上面的示例中,我们定义了一个名为 changeName 的方法,该方法是一个函数,它接受参数名称并将其分配给对象的 name 属性。
你也可以在构造函数外部定义一个函数,通过函数名关联到对象的属性上:
function person(name, age) {
this.name= name;
this.age = age;
this.yearOfBirth = bornYear; // 关联 bornYear 函数
}
function bornYear() {
return new Date().getFullYear() - this.age;
}
以上代码中 new Date().getFullYear() 是获取今年完整的年份时间 如:2017 , 如您所见,我们已将对象的 yearOfBirth 属性赋予 bornYear 函数。当通过对象调用 bornYear 函数时, bornYear 函数中 this 指向这个对象。
提示: 请注意,将函数关联到对象属性时不需要写括号。
<script type="text/javascript">
function person(name, age) {
this.name= name;
this.age = age;
this.yearOfBirth = bornYear; // 关联 bornYear 函数
}
function bornYear() {
return new Date().getFullYear() - this.age;
}
sister = new person("zhongchen",19)
document.write(sister.yearOfBirth()) //若要输出值,需要在调用的时候加括号
</script>
Array(数组) 对象
数组对象是使用单独的变量名来存储一系列的值。
如果你有一组数据(例如:车名字),存在单独变量如下所示:
var car1="Saab";
var car2="Volvo";
var car3="BMW";
然而,如果你想从中找出某一辆车?并且不是3辆,而是300辆呢?这将不是一件容易的事!
最好的方法就是用数组。
数组可以用一个变量名存储所有的值,并且可以用变量名访问任何一个值。
数组中的每个元素都有自己的的ID,以便它可以很容易地被访问到。
创建数组
创建数组,并赋值给 mycars 变量:
var mycars = new Array("Saab","Volvo","BMW");
以上通过 new Array() 生成 mycars 数组对象,并赋予初始值。
创建数组
JavaScript数组是动态的,所以你可以声明一个数组,不给 Array() 构造函数传递任何参数。然后可以动态添加元素。
var mycars = new Array();
mycars[0] = "Saab";
mycars[1] = "Volvo";
mycars[2] = "BMW";
mycars[3] = "Lincoln";
提示: 您可以添加任意数量的元素。
字面量语法创建数组
为了更大的简单性,可读性和执行速度,您还可以使用数组字面量语法来声明数组。
var mycars = ["Saab", "Volvo", "BMW"];
这种声明方式和使用 new Array() 方式创建的数组相同.
提示: 你可以通过数字索引访问和修改数组的值,推荐使用字面量语法创建数组
访问与修改数组
访问数组
通过指定数组名以及索引号码,你可以访问某个特定的元素。
以下实例可以访问 myCars 数组的第一个值:
var mycars = new Array("Saab","Volvo","BMW");
var name = myCars[0];
以下实例修改了数组 myCars 的第一个元素:
myCars[0] = "Opel";
提示: [0] 是数组的第一个元素。[1] 是数组的第二个元素。
length属性
JavaScript数组具有非常有用的内置属性和方法。
数组的 length 属性返回它的元素的数量。
var courses = ["HTML", "CSS", "JS"];
document.write(courses.length);
// -> 3
因为数组索引是从0开始的,所以 length 属性总是比最高的数组索引大1。如果数组为空则length属性的值为0
关联数组
虽然许多编程语言支持具有命名索引的数组(文本而不是数字),称为关联数组,但JavaScript不支持。
但是,您仍然可以使用命名数组语法,这将产生一个对象。 例如:
var person = []; // 空数组
person["name"] = "Loen";
person["age"] = 28;
document.write(person["age"]);
// -> "28"
现在,person 被视为一个对象,而不是一个数组。
命名索引“name”和“age”成为person对象的属性。
提示: 当 person 数组被视为对象时,标准数组方法和属性将产生不正确的结果。例如,现在person.length将返回0。
关联数组
请记住,JavaScript不支持使用名称索引数组。
在JavaScript中,数组总是使用数字编号的索引。
当您希望索引为字符串(文本)时,最好使用对象。
当您希望索引为数字时使用数组。
提示: 如果使用名称索引,JavaScript将会将数组重新定义为标准对象。
String 对象方法
txt = '第三方非官方个行业'
以下罗列的是 String 对象方法以及描述:
示例:
var str = "Hello, Nier";
var a = str.toLowerCase(); // 把字符串转为小写
var b = str.toUpperCase(); // 吧字符串转为大写
var c = " Hello world ".trim() //去掉字符串两边的空白
Window 对象
Window 对象
Window 对象表示浏览器中打开的窗口。
如果文档包含框架( 或
<
iframe> 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。
注意: 没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。
window作为全局变量,代表了脚本正在运行的窗口,暴露给Javascript代码。
Window 对象属性
例子:
var winInnerHeight = window.innerHeight; //返回窗口的文档显示区的高度。
var winInnerWidth = window.innerWidth; //返回窗口的文档显示区的宽度。
var winOuterWidth = window.outerWidth; // 返回窗口的外部宽度,包含工具条与滚动条。
var winOuterHeight = window.outerHeight; // 返回窗口的外部高度,包含工具条与滚动条。
var winScreenLeft = window.screenLeft; // 返回相对于屏幕窗口的x坐标
var winScreenTop = window.screenTop; // 返回相对于屏幕窗口的y坐标
关于window对象的方法你可以在本博客的JavaScript 方法一文中查阅
Date 对象
Date 对象
日期对象用于处理日期和时间。
日期由 年,月,日,时,分,秒和毫秒组成。
使用 new Date() , 将创建一个存储当前日期和时间的日期对象。
var d = new Date();
//d 存储了当前的日期和时间
初始化日期的其他方法允许从指定的日期和时间创建新的日期对象。
new Date(milliseconds) // 毫秒
new Date(dateString) // 日期字符串
new Date(year, month, day, hours, minutes, seconds, milliseconds) //年,月,日,时,分,秒和毫秒
提示: JavaScript日期以1970年01月01日00:00:00世界时(UTC)计算。一天包含 86400000 毫秒。
//Fri Jan 02 1970 08:00:00 GMT+0800 (中国标准时间)
var d1 = new Date(86400000);
//Thu Oct 19 2017 15:56:00 GMT+0800 (中国标准时间)
var d2 = new Date("October 19, 2017 15:56:00");
//Sat Jun 11 1988 11:42:00 GMT+0800 (中国标准时间)
var d3 = new Date(88,5,11,11,42,0,0);
提示: JavaScript计数从0到11的月份。1月是0,12月是11。
日期对象是静态的,而不是动态的。计算机时间正在往前走,但是日期对象一旦创建,日期就不会改变。
Date 方法
当创建一个Date 对象时,有很多方法可以对它进行操作。
例如:
var d = new Date();
var hours = d.getHours();
//hours 等于当前的小时数值
让我们来写一个程序,每秒打印一次当前浏览器的时间:
<html>
<head>
</head>
<body>
<script>
function printTime() {
var d = new Date();
var hours = d.getHours();
var mins = d.getMinutes();
var secs = d.getSeconds();
document.body.innerHTML = hours+":"+mins+":"+secs;
}
setInterval(printTime, 1000); // setInterval 第二个参数单位是 毫秒
</script>
</body>
</html>
我们定义了一个 printTime 函数,通过 new Date() 生成当前时间的对象,然后通过 getHours(),getMinutes(),getSeconds() 获取到当前的时,分,秒,并打印出来.
通过 setInterval 每隔 1秒执行一次 printTime 函数
提示: innerHTML 属性设置或返回元素的HTML内容。在我们的例子中,我们正在改变我们文档体的HTML内容。这将每秒覆盖内容,而不是重复打印到屏幕。