js学习day3
对象
创建对象
-
利用对象字面量创建对象:
-var obj={
uname: “didi”,
age: 18,
say: function(){
console.log(“di”);
}
}
调用属性方法:
1、对象名.属性名
2、对象名[‘属性名’]
调用对象的方法:
对象名.方法名() -
利用new Object创建对象
var obj = new Object();
obj.uname=“大奎”;
obj.age=22;
obj.say = function(){
函数体;
} -
利用构造函数创建对象(构造函数首字母要大写!)
function Star(uname,age,sex){
this.name = uname;
this.age = age;
this.sex = sex;
this.方法 = function(){}
}
new Star(“猪咪”,3,‘女’); 返回一个对象
遍历对象:
for(变量 in 对象){}
for(var k in obj){
k//变量,即属性名
obj[k]//属性值
}
内置对象
js中的对象分为3钟:自定义对象、内置对象、浏览器对象(js独有)
内置对象:js语言自带的一些对象,这些对象供开发者使用,并提供了一些自带的或是最基本而必要的功能(属性和方法)
常用的内置对象:Math、Date、Array、String
Math
不是构造函数,直接使用它的属性和构造方法
如Math.PI
Math.max(1,22,34);
Marh.abs(): 取绝对值
Math.floor():向下取整
Math.ceil():向上取整
Math.round():四舍五入 复数,.5往大了取
Math.random():得到一个[0,1)的浮点数
得到两个范围之间的随机数:
function getRandom(min,max){
return Math.floor(.random() * (max - min + 1)) + min;
}
Date
是一个构造函数,必须使用new来调用日期对象
var date = new Date();
1、如果没有参数,返回系统的当前时间
2、参数常用写法:
数字型 2019,10,01 或者是“2019-10-1 8:8:8”
第一种打印出来比实际月份大一
3、日期格式化
获得总的毫秒数(距离1970年1月1号过了多少毫秒数)也称作时间戳
var date = new Date();
//目前的时间距离1970.1.1总的毫秒数
var x = date.valueOf();
var y = date.getTime();
var date1 = +new Date();
var date2 = Date.now();
倒计时案例
function conuDown(time){
var nowTime = +new Date();//当前时间毫秒数
var userTime = +new Date(time);//用户输入时间毫秒数
var times = (userTime - nowTime)/1000;//差距秒数
var d = parseInt(times/60/60/24)//得到剩余天数
d = d < 10? '0'+d : d;
var h = parseInt(times/60/60%24)//得到时
h = h < 10? '0'+h : h;
var m = parseInt(times/60%60)//得到分
m = m < 10? '0'+m : m;
var s = parseInt(times%60)//得到秒
s = s < 10? '0'+s : s;
}
console.log(conuDown('2020-4-17 18:00:00'));
数组对象
var arr = [1,2,3]
var arr = new Array(m); // m为长度
var arr = new Array(1,2,3); // 等价于[1,2,3]
1、检测是否是数组:
var arr = [];
console.log(arr instanceof Array);//true
Array.isArray(arr)//true
2、添加数组元素
arr.push(4,'kk');//末尾追加新的元素,返回值为新数组的长度
arr.unshift(0,'sss')//在数组最前面添加数组元素,返回新数组的元素
3、删除数组元素
arr.pop();//弹出数组最后一个元素,返回删除的那个元素
arr.shift();//弹出数组的第一个元素,返回删除的那个元素
4、数组排序
//翻转数组
arr.reverse();
//数组排序
arr.sort(function(a,b){
return a-b;//升序的顺序排序||b-a为降序
});
5、查找索引
//只返回第一个索引,若找不到返回-1
var x = arr.indexOf(4);
//从后面开始查找,只返回第一个索引
var y = arr.lastIndexOf(4);
数组去重案例:
目标:把旧数组里不重复的元素选取出来放到新数组中。
核心算法:遍历旧数组,用新数组的元素去查询新数组,若该数组在新数组里没有出现过,则添加否则不添加
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;
}
6、数组转化为字符串
arr.toString();//用,连接
arr.join('-');//用()中填写的符号连接
基本包装类型
把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。
String Number和Boolean
字符串的不可变性:
一个字符串占有自己的空间,给字符串改变值后就重新开辟空间存储。即内容变了但地址不变。
1、字符串查找特定字的位置:
var str='别怕孤单家一直在';
console.log(str.indexOf('家')); console.log(str.indexOf('家',3));//从索引号3的位置开始查找
console.log(str.lastIndexOf('一'));//从后开始查找
2、根据位置返回字符
//1、charAt(index)
var str = 'allmygirl'
console.log(str.charAt(3));//m
//2、charCodeAt(index)返回相应索引号的字符ASCII值,可用来判断用户按下了哪个键
console.log(str.charCodeAt(0));
//3、str[index] h5新增
console.log(str[0]);//a
案例,统计一个字符串中每个字符出现的次数并输出出现次数最多的字符
解决方法:
1、用charAt()遍历字符串
2、把每个字符都存储给对象,如果对象没有该属性,就为1,如果存在就+1
3、遍历对象,得到最大值和该字符
var str='abhcdiagfyreoqncdjafrbyuv';
var o={};
for(var i=0;i<str.length;i++){
var chars = str.charAt(i);//chars 是字符串的每一个字符
if(o[chars]){//o[chars]得到的是属性值
o[chars]++;
}else{
o[chars] = 1;
}
}
var max = 0;
var ch = '';
//遍历对象
for(var k in o){
if(o[k] > max){
max = o[k];
ch = k;
}
}
console.log(max);
console.log(ch);
3、字符串操作方法
//1、concat('字符串1','字符串2'...)
var str = 'KUN';
console.log(str.concat('IKUN'));//KUNIKUN
//2、substr('截取的起始位置','截取几个字符')
console.log(str.substr(1,2));
//3、slice(start,end)包括start不包括end
//4、subString(start,end)不接受负值,与slice相似
//5、替换字符 replace('被替换字符','替换的字符') 只会替换第一个字符 str.replace('u','n');
//全替换
while(str.indexOf('k') !== -1){
str1 = str1.replace('k','*');
}
//6、字符转换为数组 split('分隔符') join:把数组转换为字符串
var str2 = "k,e,r";
var arr = str2.split(',');
简单数据类型与复杂数据类型
简单数据类型又叫做基本数据类型或值类型,复杂类型又叫做引用类型
- 值类型:在存储变量中存储的是值本身。如:string,number,Boolean,undefined,null(返回的是空的对象object)
- 引用类型:存储变量时存储的仅仅是地址。通过new关键字创建的对象(系统对象、自定义对象)如:Object,Array,Date
简单数据类型存在栈中,复杂类型在栈中存放地址,内容存在堆中,地址指向堆中的内容。