十、javaScript对象
一、对象的定义
object / obj
存储数据方式:属性: 属性值
定义方式:
1、字面量:通过{}来定义一个空对象
1 var obj = {};
2、构造函数
1 var obj = new Object();
与数组的区别:
- 数组只能使用索引下标,不能使用字符串下标
- 对象可以使用字符串作为属性(键名),通过操作属性调用属性值
二、对象的基本操作
与数组的操作基本类似,通过属性来操作属性值
对象.属性
-
-
点语法不支持数值属性的调用
-
1 var obj = { name: '张三', age: 18, 100: 100 }; 2 console.log(obj.name); // 张三
对象[属性]
-
-
数值作为属性时,调用数据加不加引号都行
-
支持变量解析,可以解析变量中存储的数据,作为属性在对象中调用属性值
-
1 var obj = { name: '张三', age: 18, 100: 100 }; 2 console.log(obj['name']); // 张三 3 console.log(obj[name]); // undefined
对象的操作:
-
-
与数组的操作类似,是对已有的属性进行赋值
-
后赋值的数据,会覆盖之前存储的数据
-
-
新增:
-
对不存在的属性进行赋值,操作效果就是给对象新增单元
-
-
删除:
-
delete(对象.属性):删除对象中的指定属性
-
-
三、对象的循环
for...in语法支持对象的循环
1 var obj = { name: '张三', age: 18, sex: '男', addr: '北京', hobby: '吃鸡' }; 2 for (var key in obj) { 3 // 点语法不解析变量,执行结果是找key这个属性,结果是undefined 4 // []语法解析变量,key是对象的属性,obj[key]获得属性值 5 console.log(obj.key, obj[key]); 6 }
四、对象的应用
1、记录字符出现的次数
-
-
for...in循环遍历str
-
通过obj[]方法查找对象中是否有该属性(键名)
-
没有该属性(即为undefined),就新增属性,属性值为1
-
-
1 var str = 'aaaabbbbbcccccdddeeefffgggggg'; 2 var obj = {}; 3 4 // i存储的是字符串的索引,str[i]是对应的字符 5 for (var i in str) { 6 if (obj[str[i]] === undefined) { 7 // 如果调用结果是undefined,证明对象中没有这个键名 8 // 新增对象的单元,键名是这个字符,键值是 1 9 obj[str[i]] = 1; 10 } else { 11 // 调用结果不是undefined,证明对象中已经存在这个键名 12 // 存储数值数据 +=1 或者 ++ 13 obj[str[i]]++; 14 } 15 }
2、记录数组中数据出现的次数
1 var arr = [1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7,1,2]; 2 3 var obj = {}; 4 5 arr.forEach(function(v){ 6 if(obj[v] === undefined){ 7 obj[v] = 1; 8 }else{ 9 obj[v]++; 10 } 11 })
五、内置对象
JavaScript定义好的,可以直接使用的对象
1、Math对象
内置数学/算术对象
math.random():随机数值
1 var num = parseInt(Math.random()*(b+1-a) +a);
Math.round():四舍五入取整
1 var float1 = 123.56789; 2 float1 = Math.round(float1); 3 console.log(float1); // 124
1 var float2 = 123.999999999; 2 float2 = Math.floor(float2); 3 console.log(float2); // 123
1 var float3 = 123.00000000001; 2 float3 = Math.ceil(float3); 3 console.log(float3); // 124
Math.pow():乘方运算/幂运算
1 // 2的3次方,结果是8 2 console.log(Math.pow(2, 3))
Math.abs():绝对值
1 console.log(Math.abs(-10)); // 10
1 console.log(Math.sqrt(9)); // 3
Math.PI:圆周率数值
1 console.log(Math.PI);
2、Date对象
内置时间对象
1 var d = new Date(); 2 // 获取的时间是本地时间,也就是你当前所在时区的时间 3 // 中国时间是东八区,世界标准时间 +8小时
1 var year = d.getFullYear();
- 获取月份,范围是0-11,实际月份是执行结果+1
1 var month = d.getMonth() + 1;
- 获取日期
1 var date = d.getDate();
- 获取星期,范围是 0 - 6
1 // 0表示星期日,1表示星期一 2 var week = d.getDay(); 3 // 定义一个数组,来存储执行结果 0-6 对应的星期 4 var weekArr = ['日', '一', '二', '三', '四', '五', '六']; 5 week = `星期${weekArr[week]}`;
- 获取小时,24小时格式
1 var hours = d.getHours();
- 获取分钟
1 var minutes = d.getMinutes();
- 获取秒
1 var seconds = d.getSeconds();
设定date
- 字符串方法
1 // 设定完整的时间, 年份日,时分秒,会自定计算星期 2 var d = new Date('1982-10-12 8:8:0'); 3 var d = new Date('1982/10/12 8:8:0'); 4 var d = new Date('1982 10 12 8:8:0'); 5 var d = new Date('1982,10,12 8:8:0');
1 // 只设定年,默认执行 月日,时分秒 2 var d = new Date('2020');
1 // 只设定年月,默认执行 日,时分秒 2 var d = new Date('2020/5');
1 // 只设定年月日,默认执行 时分秒 2 var d = new Date('2020/5/6');
1 // 只设定年月日,小时分钟 默认执行 秒 2 // 不允许独立设定小时,至少要设定小时分钟 3 var d = new Date('2020/5/6 8:10');
- 设定多个字符串参数,表示日期时间
1 // 至少要设定年月 2 // 设定月份的数值是 0 - 11 对应 1月 - 12月 3 var d = new Date(2020,7); // 对应的是2020年8月
1 // 设定年月日 2 var d = new Date(2020,6,2);
1 // 设定年月日,时 2 var d = new Date(2020,6,2,10);
1 // 设定年月日,时分 2 var d = new Date(2020,6,2,10,10);
1 // 设定年月日 时,分,秒 2 // 完整时间 3 var d = new Date(2020,6,2,10,10,10);
-
当前时间到1970年1月1日0时0分0秒的时间差
-
1 // 设定时间对象 2 var d = new Date(); 3 // 默认获取的时间单位是毫秒,需要转化成秒 4 var times = Math.floor( d.getTime() / 1000 );
3、定时器
按照指定的时间间隔循环往复执行程序
-
按照指定时间间隔来执行匿名函数中定义的程序
-
时间间隔单位是毫秒
-
1 var interval = setInterval(function(){ 2 console.log('按设定时间间隔打印') 3 }, 1000);
- 默认定时器会一直执行,除非终止定时器
- 定义定时器时,使用一个变量来存储定时器,存储的内容是一个数值,这个数值表示当前定时器是整个程序中第几个定时器
- 使用程序来终止定时器
- clearInterval(存储定时器的变量)
1 clearInterval(interval);
- 注意:定时器不是一上来就执行,要在设定的时间间隔之后执行,需要立即执行,执行程序设定在定时器外面
-
在JavaScript中,普通程序都是同步执行的,遵循顺序流程、分支流程、循环流程三种流程控制
-
特殊程序是异步执行的(包括定时器、延时器、ajax请求)
-
所有的异步程序,都会在同步程序执行完之后才会执行
-
4、延时器
根据时间间隔,延迟执行程序,只会执行一次
1 setTimeout( function(){执行的程序}, 延迟时间 )
延时器的清除
1 clearTimeout()
六、保留指定位小数
1 // 数值.toFixed(保留小数位数) 2 var float = 123.456789; 3 console.log(float2.toFixed(2));