JavaScript __ 对象小记
前言
在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。本文简单介绍对象的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、对象的组成
对象由属性和方法组成
- 属性:事物的特征,在对象中用属性来表示(常用名词)
- 方法:事物的行为,在对象中用方法来表示(常用动词)
保存一个值时,可以使用变量, 保存多个值(一组值)时,可以使用数组。 对象表达结构更清晰,更强大
二、JavaScript中的三种对象
JavaScript 中的对象分为3种:
前面两种对象是JS 基础 内容,属于 ECMAScript;第三个浏览器对象属于 JS 独有的
1.自定义对象
三种创建对象的方法
下面通过一个案例让大家感知一下三种对象创建方法 案例描述: 创建一个电脑对象,该对象要有颜色、重量、品牌、型号,可以看电影、听音乐、打游戏和敲代码。 颜色、重量、品牌、型号是属性; 看电影、听音乐、打游戏、敲代码是方法.
1)字面量创建对象
var computer = {};
var computer = {
color: 'gray',
weight: '2.4kg',
pinpai: 'lenovo',
xinghao: 'XiaoXin Air 15|WL',
watchMovie: function () {
console.log('我在看电影');
},
listenToTheMusic: function () {
console.log('我在听音乐');
},
playGames: function () {
console.log('我在打游戏');
},
knockCode: function () {
console.log('我在敲代码');
}
}
2)利用new Object创建对象
var computer = new Object();
computer.color = 'gray';
computer.weight = '2.4kg';
computer.pinpai = 'lenovo';
computer.xinghao = 'XiaoXin Air 15|WL';
computer.watchMovie = function () {
console.log('我在看电影');
};
computer.listenToTheMusic = function () {
console.log('我在听音乐');
};
computer.playGames = function () {
console.log('我在打游戏');
};
computer.knockCode = function () {
console.log('我在敲代码');
}
3)利用构造函数创建对象
利用构造函数创建对象的过程也称为对象的实例化
function Computer(color,weight,pinpai,xinghao,knockCode,playGames){
this.color = color;
this.weight = weight;
this.pinpai = pinpai;
this.xinghao = xinghao;
this.knockCode = function () {
console.log();
}
this.playGames = function () {
console.log();
};
}
var mycomputer = new Computer('gray','2.4kg','lenovo','XiaoXin Air 15|WL');
var ourcomputer = new Computer('blue','3kg','lenovo','XiaoXin Air 15|WL');
关键字new的作用
- 在构造函数代码开始执行之前,创建一个空对象;
- 修改this的指向,把this指向创建出来的空对象;
- 执行函数的代码
- 在函数完成之后,返回this—即创建出来的对象
对象的使用方法
console.log(computer.color);
console.log(computer['color']);
computer.knockCode()
遍历对象
如果想知道对象有哪些属性值或方法,我们可以通过 for in 遍历对象
for(var k in ourcomputer) {
console.log(k);
console.log(ourcomputer[k]);
}
2、内置对象
JS API 讲解内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法),内置对象最大的优点就是帮助我们快速开发
下面简单列举几个内置对象的使用
Math数学对象
Math数学对象不是一个构造函数,我们使用时直接调用属性或者方法即可
Math中的一些简单属性方法
Math.PI
Math.floor()
Math.ceil()
Math.round()
Math.abs()
Math.max()
Math.min()
Math.random()
下面来看一下这些方法的使用
console.log(Math.PI);
console.log(Math.max(1, 99, 3));
console.log(Math.max(-1, -10));
console.log(Math.max(1, 66, 'blue'));
console.log(Math.max());
console.log(Math.abs(1));
console.log(Math.abs(-1));
console.log(Math.abs('-1'));
console.log(Math.abs('blue'));
console.log(Math.floor(1.1));
console.log(Math.floor(1.9));
console.log(Math.ceil(1.1));
console.log(Math.ceil(1.9));
console.log(Math.round(1.1));
console.log(Math.round(1.5));
console.log(Math.round(1.9));
console.log(Math.round(-1.1));
console.log(Math.round(-1.5));
console.log(Math.random());
function getRandom(min,max) {
return Math.floor(Math.random()* (max - min + 1)) + min
}
console.log(getRandom(1,10));
var arr = ['张三','李四','王五','赵六'];
console.log(arr[getRandom(0,arr.length -1)]);
学习了Math对象后,我们可以用他的方法+公式写一个生成随机数的函数,利用这个函数完成猜数字游戏案例的实现
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var random = getRandom(1, 50);
for (var i = 1; i <= 10; i++) {
var num = prompt('请输入1~50之间的一个数字,只能猜10次哦');
if (num > random) {
alert('你猜大了');
} else if (num < random) {
alert('你猜小了');
} else {
alert('你好帅哦,猜对了');
break;
}
alert('你还有' + (10 - i) + '次机会');
}
Date日期对象
与Math对象不同 Date()日期对象是一个构造函数 必须用new来调用创建我们的日期对象 下面是Math对象的部分方法 我们来看一下这些方法具体的使用
var date = new Date();
console.log(date);
var date1 = new Date(2021,11,23);
console.log(date1);
var date2 = new Date('2021-12-23 11:9:8');
console.log(date2);
console.log(date.getFullYear());
console.log(date.getMonth() + 1);
console.log(date.getDate());
console.log(date.getDay());
var date = new Date();
console.log(date.getHours());
console.log(date.getMinutes());
console.log(date.getSeconds());
按照我们的习惯,通常日期的显示格式是 xxxx年 x月 x日 星期 x 我们可以作如下调整 格式化日期
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var day = date.getDay();
var arr = ['日','一','二','三','四','五','六']
console.log('今天是' + year + '年' + month + '月' + dates + '日' + ' 星期' + arr[day]);
格式化时间
function getTimer() {
var time = new Date();
var h = time.getHours();
h = h < 10 ? '0' + h : h;
var m = time.getMinutes();
m = m < 10 ? '0' + m : m;
var s = time.getSeconds();
s = s < 10 ? '0' + s : s;
return h + ':' + m + ':' + s ;
}
console.log(getTimer());
案例:倒计时 倒计时案例核心算法 利用时间戳计算两个时间差值,再将时间差值毫秒数格式化成时分秒
function countDown(time) {
var nowTime = +new Date();
var inputTime = +new Date(time);
var times = (inputTime - nowTime) / 1000;
var d = parseInt(times / 60 / 60 / 24);
var h = parseInt(times / 60 / 60 % 24);
var m = parseInt(times / 60 % 60);
var s = parseInt(times % 60);
return d + '天' + h + '时' + m + '分' + s + '秒';
}
function today() {
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var day = date.getDay();
var arr = ['日', '一', '二', '三', '四', '五', '六']
return'今天是' + year + '年' + month + '月' + dates + '日' + ' 星期' + arr[day];
}
var date = new Date();
console.log(today());
var down = countDown('2022-1-1 00:00:00');
console.log('距离2022年元旦还有 ' + down);
数组对象
——创建数组对象的两种方式
1 利用字面量创建
var arr = [1,2,3];
console.log(arr[0]);
2 利用 new Array()
var arr1 = new Array(2,3);
console.log(arr1);
—— 检测是否为数组的两种方法
1 instanceof 运算符
var arra = [];
var obj = {};
console.log(arr instanceof Array);
console.log(obj instanceof Array);
2、Array.isArray(参数);
H5新增的方法 ie9以上版本支持
console.log(Array.isArray(arr));
console.log(Array.isArray(obj));
—— 添加删除数组元素的方法
数组末尾添加新元素 push()
var arr = [1, 2, 3];
console.log(arr.push(4, 'blue'));
数组开头添加新元素 unshift()
var arr = [1, 2, 3];
console.log(arr.unshift(4, 'blue'));
删除数组最后一个元素 pop()
console.log(arr.pop());
删除数组第一个元素 shift()
console.log(arr.shift());
注意:
- 删除和添加操作都会改变原数组
- 删除方法不添加参数,一次只能删除一个
—— 数组排序
之前学习数组时写过数组排序的案例,但实际上JavaScript中就有内置的数组排序的方法,我们可以直接使用
反转数组
var arr = ['I', 'LOVE', 'YOU'];
arr.reverse();
console.log(arr);
冒泡排序
var arr = [23, 1, 344, 5, 66];
arr.sort(function (a, b) {
return b - a;
})
—— 数组索引
var arr = ['red','blue','pink','blue'];
console.log(arr.indexOf('blue'));
console.log(arr.indexOf('black'));
console.log(arr.lastIndexOf('blue'));
注意:
- 返回值是要查找的元素在数组中的索引号
- 只返回第一个满足条件的索引号
- 若该数组中找不到此元素则返回值为 -1;
案例:数组去重 将arr数组中的重复元素去掉,只保留一个
var arr = ['a','p','a','i','i','g','p','p','g'];
function unique(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
var demo = unique(arr);
console.log(demo);
—— 数组转换为字符串
toString ()方法
var arr = [1,2,3];
console.log(arr.toString());
join(分隔符)
var arr = [1,2,3]
console.log(arr.join());
console.log(arr.join('-'));
console.log((arr.join('')));
字符串对象
——— 基本包装类型
为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String、Number和 Boolean。 基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。
// 下面代码有什么问题?
var str = 'andy';
console.log(str.length);
按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,但上面代码却可以执行,这是因为
js 会把基本数据类型包装为复杂数据类型,其执行过程如下 :
var temp = new String('andy');
str = temp;
temp = null;
——— 字符串的不可变
指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。 当重新给字符串变量赋值的时候,变量之前保存的字符串不会被修改,依然在内存中重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变。 由于字符串的不可变,在大量拼接字符串的时候会有效率问题
——— 根据字符返回位置
var str = '如虎添亿,虎虎生威';
console.log(str.indexOf('虎'));
console.log(str.indexOf('虎',2));
案例:求某个字符在数组中出现的位置及次数
var str = 'odfhbofjboojrops';
var index = str.indexOf('o');
var num = 0;
while (index !== -1) {
console.log(index);
num++;
index = str.indexOf('o',index + 1);
}
console.log('o出现的次数是:' + num);
——— 根据位置返回字符
charAt(index)
var str = 'boy';
console.log(str.charAt(3));
for (var i = 0; i < str.length; i++) {
console.log(str.charAt(i));
}
charCodeAt(index)
返回相应索引号的字符ASCII值 目的: 判断用户按下了那个键
console.log(str.charCodeAt(0));
str[index]
console.log(str[0]);
——— 字符串的操作方法
concat(‘str1’,‘str2’…)拼接字符串
等效于之前学习的用 + 拼接,+ 更方便更常用
var str = 'boy';
console.log(str.concat('blue'));
substr(index,num)截取字符串
ubstr('截止的起始位置','截取几个字符');
var str1 = '虎虎生威,吉祥止止';
console.log(str1.substr(5,4));
replace(str1,str2)替换字符串
var str1 = 'bigbig';
console.log(str.replace('b','p'));
案例:把字符串里的所有o替换为*
var str1 = 'abfuwoonsonodro';
while (str1.indexOf('o') !== -1) {
str1 = str1.replace('o','*');
}
console.log(str1);
split(‘分隔符’) 字符转换为数组
var str2 = '我,爱,中,国';
console.log(str2.split(','));
查阅文档
上文介绍的内置对象和其属性方法只是冰山一角,还有很多很多的内置对象供我们使用,当然我们不用每个都记住。 授之以鱼🐟不如授之以渔🎣 其实学习一个内置对象的使用,只要学会其常用成员的使用即可,我们可以通过查文档学习,可以通过MDN/W3C来查询。 Mozilla 开发者网络(MDN)提供了有关开放网络技术(Open Web)的信息,包括 HTML、CSS 和万维网及 HTML5 应用的 API。 MDN: https://developer.mozilla.org/zh-CN/
3、浏览器对象
第三个浏览器对象属于 JS 独有的 本文就不过多赘述了。
对象小结
- 对象可以使代码结构更加清晰
- 对象是复杂数据类型object
- 本质:对象就是一组无序的相关属性和方法的集合
- 构造函数泛指某一大类,比如明星,不管是迪丽热巴还是易烊千玺,都统称为明星
- 对象实例特指一个事物,比如一个苹果、易烊千玺等。
- for…in 语句用于对对象的属性进行循环操作
|