对象概述
对象是一组无序的相关属性和函数的集合。它的表现形式是一组无需的键值对,其中键包括属性名和函数名,值可以是JavaScript任意数据类型。对象中的函数也被称为方法。
var cc={
name:'菜菜',
sayHi:function(){
alert('大家好,我是菜菜');
}
}
上述代码,创建了一个名为bdd的对象,包含一个name属性和一个sayHai()方法。
创建对象
JavaScript创建对象的常用方式有两种,一种是使用对象直接量创建对象,一种是使用new Object()方法创建对象。
1. 使用对象直接量创建对象 对象直接量创建对象是一种简洁、易阅读的方式。对象直接量是由若干键/值对组成的映射表,每对键/值对中的键和值之间使用冒号分隔,不同键/值对用逗号分隔。整个映射表用花括号“{}”括起来
var obj={};//创建一个名为obj的空对象
var cc={//创建一个名为xrr的对象
name:'菜菜';
sayHai:function(){
alert('大家好,我是菜菜');
}
}
2.使用new Object()方法创建对象 Object是JavaScript的一种数据类型,用于存储各种键值集合和更复杂的实体。 new运算符用于创建对象。语法格式如下。 new constructor[([arguments])] constructor是一个指定类型的类或函数。arguments是一个用于被 constructor 调用的参数列表。 对象可以通过new Object ()方法创建,
var object=new object;//创建一个名为object的空对象
object.name='大采购';
object.sayHai(){//增加方法
alert('大家好,好好学习天天向上');}}
var date=new Date();//创建日期对象
对象里面的变量称为属性,不需要声明,用来描述该对象的特征。 对象里面的函数称为方法,不需要声明,用来描述该对象的行为。
访问对象
访问对象中的属性和方法可以使用以下三种方式。
1.点号访问方式 对象实例名.属性名或对象实例名.方法名(实参列表)
2.方括号访问方式 对象实例名['属性名']或对象实例名['方法名'](实参列表)
3.使用for-in遍历对象 遍历对象是对对象的每一个属性进行访问。JavaScript使用for-in语句进行遍历。语法格式如下。 for (var key in object) { 循环代码块; } 每次迭代时,key代表不同的属性名。object代表被迭代的对象。
eg: 定义了对象,它包含两个属性position和BombNum,两个方法shot()和move()。其中position属性的值是一个对象。因此可以使用tank.position.XPosition、 tank['BombNum']访问XPosition和BombNum的值;使用tank.move()、tank['shot']()执行移动和发射炮弹的动作。
var tank={
position:{
xposition:0;
yposition:0;
}
bombnum:2,
shot:function(){
console.log("坦克发射");}
move:function(){
console.log("坦克移动")}
}
console.log(tank.position.xposition,tank['bombnum']);
let person={
name:'坏东西',
gender:'女',
age:'20'}
//向对象中添加新的属性
person.height=158
//删除属性
delete person.age
console.log("person",person)
//检查对象是否包含指定属性
let has="age"in person
console.log("has",has)
常用内置对象
JavaScript对象分为3种:自定义对象、内置对象和浏览器对象。自定义对象由开发者自定义,内置对象由ECMAScript提供,浏览器对象包括DOM和BOM。本节将介绍常用的内置对象,浏览器对象在后续章节介绍。
JavaScript提供了丰富且功能强大的内置对象,常用内置对象包括Math 对象、Array对象、Date对象和String对象等。本节主要介绍Math 对象、Date对象和String对象。
Math是一个内置对象,它拥有一些数学常数属性和数学函数方法。Math 的所有属性与方法都是静态的,使用时不需要创建Math对象,直接使用Math对象名来访问属性或方法,如Math.PI、Math.max()。
abs()//返回绝对值
ceil()//返回大于变量的最小整数
floor()//返回小于变量的最大整数
max()//返回最大值
min()//返回最小值
pow()//计算次方
sqrt()//返回平方根
round()//对浮点数进行四舍五入
random()//返回一个浮点数,伪随机数范围从到一
基本数据类型和复杂数据类型
JavaScript数据类型分为基本数据类型和复杂数据类型(复杂数据类型也称为引用数据类型)两类。基本数据类型包含了number(数字)类型、string(字符串)类型、boolean(布尔)类型、undefined(未定义)类型、null(空)类型;复杂数据类型就是对象类型,包含了对象、数组、函数。下面介绍他们在内存分配、赋值和比较时的区别。
1. 内存分配 基本数据类型变量分配在栈内存中,其中存放了变量的值,对其是按值来访问。复杂数据类型变量同时分配栈内存和堆内存,其中堆内存存放值,栈内存存放堆内存地址,对其是按引用访问。
2 赋值 基本类型在从一个变量向另一个变量赋值时,会在该变量上创建一个新值,然后再把该值复制到新变量内存中。基本类型在赋值操作后,两个变量是相互不受影响的。示例如下。 var a = 9; var b = a; b++; console.log(a);// 输出:9 上述代码中,变量a在给b赋值后,相互不受影响,a的值是9,b的值是10。 复杂类型保存在变量中的是对象在堆内存中的地址,赋值操作后,两个变量都保存了同一个对象地址,这两个变量指向了同一个对象。因此,改变其中任何一个变量,都会相互影响。示例如下。 var a = [1, 2, 3]; var b = a; b[0] = 66; console.log(a); // 输出:[66,2,3] 上述代码中,数组是复杂数据类型,变量a在给b赋值后,a和b指向同一个数组,任何的操作都会相互影响。
3.比较 基本类型的比较是值的比较,只有在它们的值相等的时候它们才相等。引用类型的比较是比较两个对象的堆内存中的地址是否相同。示例如下。 var obj1 = '{}'; var obj2 = '{}'; console.log(obj1 == obj2); // 输出:true var obj3 = {}; var obj4 = {}; console.log(obj3 == obj4); // 输出:false 上述代码中,obj1和 obj2是基本类型,值相等。obj3和obj4是对象类型,是两个不同的对象,在堆内存中的地址不相同,因此比较时不相等。