调用对象的属性,(1)我们采取 对象名.属性名
(2)对象名['属性名']
调用对象的方法: 对象名.方法名() 千万别忘记添加小括号
创建对象的三种方式:
1.利用对象字面量创建:
//(1)1里面的属性或者方法或者属性我们菜去键值对的形式 键 属性名 :值 属性值;
//(2)多个属性或者方法中间用逗号隔开的
//(3)方法冒号后面跟的是一个匿名函数
2.利用 New Object创建对象
var dog = new Object(); //创建了一个空的对象
dog.uname = 'keke';
dog.color = 'red';
dog.age = 5; //属性
dog.type = '阿斯拉加犬';
dog.sayHi = () {
console.log('hi~');
}
- 我们是利用等号=赋值的方法,添加对象的属性和方法
- 每个属性和方法之间用分号结束。
3.利用创建函数创建对象
我们为什么需要使用构造函数:因为前面两次创建对象的方式,一次只能创建一个对象
我们可以利用函数的方法重复这些相同的代码,我们就把这个函数称为构造函数 函数里面封装的是对象
构造函数:把我们对象里面一些相同的属性和方法抽象出来封装到函数里面。
//四大天王相同的属性:名字,年龄,性别,相同的方法,唱歌
//构造函数的语法格式
// function 构造函数名(){
// this.属性 = 值;
// this.方法 = function(){}
// }
// new 构造函数名();//调用函数的方法
function Star(uname, age, sex) {
this.uname = uname;
this.age = age;
this.sex = sex;
this.sing = function(){
console.log(sang);
}
var ldh = new Star('刘德华', 18, '男');
console.log(typeof ldh);
//我们构造函数不需要return就可以返回结果
//构造函数名字首字母要大写
//我们调用构造函数 必须使用new
//我们只要 new Star(), 调用函数就创建一个对象ldh{}
//我们的属性和方法前面必须添加this
- //我们构造函数不需要return就可以返回结果
- //构造函数名字首字母要大写
- //我们调用构造函数 必须使用new
- //我们只要 new Star(), 调用函数就创建一个对象ldh{}
- //我们的属性和方法前面必须添加this
构造函数和对象的区别:
- 对象是具体的事物
- 构造函数是泛指的某一大类
- 我们利用构造函数创建对象的过程也称为对象的实例化
new(调用函数的时候)关键字:
- new构造函数可以在内存中创建了一个空的对象
- this就会指向刚才创建的空对象
- 然后执行构造函数里面的代码,给这个空对象添加属性和方法
- 返回这个对象
遍历对象属性:
var obj = {
name: 'pink',
age: 18,
sex: 'nv',
}
//for ...in用于对数组或者对象的属性进行循环操作
for (var k in obj) {
console.log(k);
console.log(obj[k]);
}
对象:
- 对象可以让代码结构更清晰
- 对象复杂数据类型object
- 本质:对象就是一组无序的相关属性和方法的集合
- 构造函数泛指某一大类
内置对象:
- 能够说出什么是内置对象
- 能够根据文档查询指定API的使用方法
- 能够使用math对象的常用方法
- 能够使用Date对象的常用方法
- 能够使用Array对象的常用方法
- 能够使用String对象的常用方法
学习内容:
- 1.内置对象
- 2.查阅文档
- 3.Math对象
- 4.日期对象
- 5.数组对象
- 6.字符串对象
什么是内置对象:对象分为三种 自定义对象,内置对象,浏览器对象
查阅文档:MDN /W3C
http://developer.mozilla.org/zh-CN/
- 查阅该方法的功能,查阅里面参数的意义和类型,返回什么值,利用代码验证
Math数学对象:不是一个函数对象,直接使用 在WDN中查找
封装对象:例子:
var myMath = {
PI: 3.4159,
max: function() {
var max = arguments[0];
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
},
min: function() {
var min = arguments[0];
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] < min) {
min = arguments[i];
}
}
return min;
},
}
console.log(myMath.PI);
注意:arguments是传递过来的实参
绝对值具有隐式转换的方法
math随机数的方法 random()
返回一个随机的小数,在【0~1)之间 ,这个方法里面不跟参数,代码验证:
console.log(Math.random());
例子:得到两个数之间的随机整数
//想要得到两个数之间的随机整数,并且包含这两个整数
//Math.floor(Math.random()*(max-min+1))+min;
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(getRandom(1, 10));
例子:随机点名
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// console.log(getRandom(1, 10));
var arr = ['zhangsan', 'zahngsanfeng', 'lizi', 'lisisii'];
console.log(arr[getRandom(0, 3)]);
例子:猜数字游戏:程序随机生成数字,然后用户输入一个数字,如果大于该数字,就提示 继续猜,如果小于该数字,就提示小了,继续猜,如果等于该数组,就提示答对了结束程序
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var random = getRandom(1, 10);
while (true) {
var num = prompt('你来猜一个1~10之前的数字');
if (num == random) {
alert("您已经猜对,结束游戏");
break;
} else if (num > random) {
alert("数字较大,请继续猜");
} else {
alert("数组较小,请继续猜");
}
}
重点:while循环
日期对象:date
date是个构造函数
var date = new Date();
console.log(date);//返回现在的时间
- 没有跟参数,则返回当前系统的时间。
- date对象和math对象不一样,也是一个构造函数,所以我们需要实例化后才能使用
- date实例用来处理日期和时间
- 参数格式:参数常用的方法是 数字型 2019,10,01 或者是字符串型 '2019-10-1 8:8:8',但是如果是数字型的就是比你输入的月份大1
日期格式化:想要2019-8-8 8:8:8格式的日期:
需要获取日期指定的部分,所以我们要手动的得到这种格式
getMonth返回的月份小一个月,记得月份加一
getDay 周一返回的是1,周六返回的是6,但是周日返回的是0
想得到周几的话 可以将星期几存到数组里,然后利用索引求
日期格式话:想要得到2019-8-8 8:8:8格式的日期:
function getTime() {
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(getTime());
获取日期总的毫秒数:
Date对象是基于1970年1月1日(世界标准时间)起的毫秒数
我们经常利用总的毫秒数来计算时间,因为它更精确
//毫秒数通过 valueof()或者 getTime()得到
var date = new Date();
console.log(date.valueOf());
var date1 = +new Date(); //+new Date()返回的就是总的毫秒数
console.log(date1);
console.log(Date.now());
案例:倒计时效果
核心算法:
- 输入的时间减去现在的时间就是剩余的时间,即倒计时,但是不能拿着时分秒相减
- 用时间戳来做,用户输入时间总的毫秒数减去现在时间的毫秒数,得到的就是剩余时间的毫秒数
- 把剩余时间的总的毫秒数转换为天,时,分,秒(时间戳转换为时分秒)
转换公式: d=parseInt(总秒数/60/60/24);
h=parseInt(总秒数/60/60%24);
m=parseInt(总秒数/60%60);
s=parseInt(总秒数%60);计算当前秒数
function countDown(time) {
var nowTime = +new Date; //返回的是当前时间总的毫秒数
var inputTime = +new Date(time); //返回的 是用户输入事件总的
var times = (inputTime - nowTime) / 1000; //time是剩余时间总的秒数
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 + '秒';
}
console.log(countDown('2020-11-11 24:00:00')); //调用记得按字符串形式写
数组对象:
var arr1=new Array();//创建了一个空的数组
var arr1=new Array(2);//这里的 2表示Array的长度为2
var arr1=new Array(2,3);//这里的2,3表示数组里面存入了2,3,这样写表示里面有两个数组元素
检测是否为数组的两种方式:
1.instanceof方法
var arr = [];
var obj = {};
console.log(arr instanceof Array);
console.log(obj instanceof Array);//instanceof方法 用来检测是不是数组
2.Array.isArray(参数);H5新增的方法,ie9以上才支持
var arr = [];
var obj = {};
console.log(Array.isArray(arr)); //true
console.log(Array.isArray(obj)); //false
添加数组元素:
数组前面增加新的数组:
var arr = [1, 2, 3, 4, 5];
arr.unshift(4); //把4添加到数组的 开头,并且返回新的长度
console.log(arr);
删除数组的元素:
var arr = [1, 2, 3, 4, 5];
arr.shift(); //删除数组第一个一个元素
console.log(arr); //返回它删除的元素的值
var arr = [1, 2, 3, 4, 5];
arr.pop();//删除数组最后一个元素
console.log(arr);//返回它删除的元素的值
数组排序:
var arr = [1500, 1200, 2000, 2100, 1800];
arr.sort();
console.log(arr);
/*0: 1200
1: 1500
2: 1800
3: 2000
4: 2100*/
sort重点:
var arr = [1, 4, 71, 43, 54];
arr.sort(function(a, b) {
return a - b; //按照升序 如果是b-a则是降序
});
console.log(arr);
/*0: 1
1: 4
2: 43
3: 54
4: 71*/
数组索引方法:
var arr = ['blue', 'green', 'red', 'pink'];
console.log(arr.indexOf('red'));
- indexOf只返回第一个满足条件的所以好 lastindexOf返回最后一个满足条件的
- 如果在该数组里面找不到元素,则返回的是-1
案例:数组去重(重点案例)
核心:
- 把旧数组里面不重复的元素选出来放到新数组中,重复的元素只保留一个,放到新数组中去重
- 遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素存在,则不添加,如果不存在则添加
- 我们怎么知道元素有没有存在?利用新数组indexOf(数组元素),如果返回时为-1,则说明新宿组里面没有该元素
var arr = ['a', 'c', 'h', 'j', 'c', 't', 'b', 'a'];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i]);
}
}
console.log(newArr);
数组转换为字符串:
var arr = [1, 2, 3];
console.log(arr.toString());
var arr = ['green', 'blue', 'pink'];
console.log(arr.join('|'));
//green|blue|pink
课下查询: splice() 数组删除splice从第几个开始,要删除个数,返回被删除项目的新数组,注意这个会影响原数组
基本包装类型:
- 把简单数据类型包装成复杂数据类型
- 把临时变量的值给str
- 销毁这个临时变量 可以特殊引用的数据类型:String 和Number和 Boolean
这样基本数据类型就有了属性和方法
字符串的不可变性:
- 因为字符串的不可变所以不要大量的拼接字符串
- 字符串的不可变性指的是里面的值不可变,虽然看上去可以改变内容,但是其实是地址变了,内存中开辟了一个新的空间
根据字符串返回位置:
字符串所有的方法,都不会修改字符串本身,操作完成会返回一个新的字符串