对象,JSON对象,Date对象,Math,Number,随机数
对象
概念
无序的数据集合,由若干个“键值对”(属性: 值)构成
let obj = {
name: 'Benson', //也可以这样写 "name": 'Benson'
age: 5,
sayHello: function () {
console.log(`Hello ${this.name}`)
}
}
基本使用
let obj = {
name: 'RickeyGong',
age: 5,
sayHello: function () {
console.log(`Hello ${this.name}`)
}
}
console.log("Test: "+ obj.name);
console.log(obj["name"]);//这些写是不行的:obj[name]
obj.sayHello();
let key = 'age';
console.log(obj[key]);//5
console.log(obj.key);//undefined
console.log(obj[key] === obj["age"]);//true
obj.weight = "1Kg";//随时新增属性、修改属性
for(let key in obj){
//console.log(key);
console.log(obj[key]);
}
更多使用
let obj = {
name: 'RickeyGong',
age: 22,
weight: '65Kg'
}
//属性转数组
let test = Object.keys(obj);
test.forEach(key=>console.log(`${key}: ${obj[key]}`))
delete obj.age;//删除属性
JSON格式
是什么
一种用于数据交换的文本格式,在很多配置文件里能看到xxx.json
格式
- 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象
- 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity,-Infinity和undefined)
- 字符串必须使用双引号表示,不能使用单引号
- 对象的键名必须放在双引号里面
- 数组或对象最后一个成员的后面,不能加逗号
范例
// 合法的 JSON格式
["one", "two", "three"];
{ "one": 1, "two": 2, "three": 3 };
{"names": ["张三", "李四"] };
[ { "name": "张三"}, {"name": "李四"} ];
// 非法的 JSON格式
{ name: "张三", 'age': 32 } // 属性名必须使用双引号
[32, 64, 128, 0xFFF] // 不能使用十六进制值
{ "name": "张三", "age": undefined } // 不能使用undefined
JSON.stringify
用于把一个值变成符合JSON格式的字符串
let obj = {a:1,b:2,c:3}
let str = JSON.stringify(obj);//'{"a":1,"b":2}'
let obj2 = JSON.parse(str);//{ a: 1, b: 2, c: 3 }
JSON.parse
用于把一个符合JSON格式的字符串还原对象
let obj = {a:1,b:2,c:3}
let str = JSON.stringify(obj);//'{"a":1,"b":2}'
let obj2 = JSON.parse(str);//{ a: 1, b: 2, c: 3 }
JS对象 VS JSON
JavaScript 对象的字面量写法只是长的像 JSON 格式数据,二者属于不同的范畴,JavaScript 对象中很多类型(函数、正则、Date) ,JSON 格式的规范并不支持,JavaScript对象的字面量写法更宽松
Date对象
几种时间表示方式
GMT
规定格林尼治标准时间的正午是在格林尼治上空最高点时间。由于地球每天的自转是不规则的,被原子钟报时的协调世界时(UTC)所取代
UTC
以原子时秒长为基础,接近GMT时间,但更精确
CST
北京时间,比世界协调时快八小时(即UTC+8)
常见用法
let d = new Date();
d.getTime();//返回实例对象距离1970年1月1日00:00:00对应的毫秒数
d.getDate;//返回实例对象对应每个月的几号(从1开始)
d.getDay();//返回星期,星期日为0,星期一为1,以此类推
d.getFullYear();//返回四位的年份
d.getMonth();//返回月份(0表示1月,11表示12月)
d.getHours();//返回小时(0~23)
d.getMilliseconds();//返回毫秒(0-999)
d.getMinutes();//返回分钟(0-59)
d.getSeconds();//返回秒(0-59)
let d2 = new Date();
d2.setDate(1);
d2.setFullYear(2020);
new Date();
let now = Date.now();
let date = new Date('2020-01-01 00:00:00');
let lastYear = new Date(Date.now());
案例1 获取一段代码的运行时间
let start = Date.now();
fib(34);
let end = Date.now();
console.log(`耗时${end - start}ms`);
function getRuntime(handler) {
let start = Date.now()
handler()
return Date.now() - start
}
getRuntime(() => { fib(40) });
function fib(n) {
if (n === 1 || n === 2) return 1
return fib(n - 1) + fib(n - 2)
}
案例2 距离国庆节还剩X天X时X分X秒
function getLeftTime() {
let targetDateTime = new Date('2020-10-01 00:00:00').getTime();
let nowDateTime = Date.now();//当前时间
let timeBetween = Math.abs(nowDateTime - targetDateTime);// 当前时间 - 国庆时间 绝对值
//天
let day = Math.floor(timeBetween / (24 * 60 * 60 * 1000));//取整,算毫秒。1秒 = 1000毫秒
//小时
let left = timeBetween%(24*60*60*1000);//1小时对应的毫秒数
let hours = Math.floor(left/(60*60*1000));
//分
left = left%(3600*1000);
let minute = Math.floor(left/(60*1000));
//秒
left = left%(60*1000);
let second = Math.floor(left/1000);
return {day , hours , minute , second};
}
let obj = getLeftTime();
console.log(`距离国庆还有${obj.day}天${obj.hours}时${obj.minute}分
${obj.second}秒`)
案例3 格式化旧日期
刚刚,3分钟前,2小时前,10天前
function formatTime(dateStr){
let between = parseInt(((Date.now())-new Date(dateStr).getTime())/1000);
if(between < 60){
return `刚刚`;
}else if(between < 3600){
return `${parseInt(between / 60)}分钟前`
}else if(between < 3600 * 24){
return `${parseInt(between / 3600)}小时前`
}else{
return `${parseInt(between / (3600 * 24))}天前`
}
}
console.log(formatTime('2020-8-27 00:00:00'));
Math
常见用法
//向下取整
console.log(Math.floor(3.15));//3
console.log(Math.floor(3.75));//3
console.log(Math.floor(-3.15));//-4
//向上取整
console.log(Math.ceil(3.15));//4
console.log(Math.ceil(3.75));//4
console.log(Math.ceil(-3.15));//-3
//四舍五入
console.log(Math.round(3.15));//3
console.log(Math.round(3.75));//4
//绝对值
console.log(Math.abs(6-9));//3
//最大最小值
console.log(Math.max(1,2,3,4,5,100,120,133));//133
console.log(Math.min(-8,5,9,30,6,0));//-8
//写一个函数算出数据中的最大最小值
const max = arr=>Math.max(...arr);
const min = arr=>Math.min(...arr);
let a = max([100,200,300,250]);
let b = min([1,-3,4,5]);
console.log(a);//300
console.log(b);//-3
//写一个函数算出数据中的最大最小值
const max = arr=>Math.max(...arr);
const min = arr=>Math.min(...arr);
let a = max([100,200,300,250]);
let b = min([1,-3,4,5]);
console.log(a);//300
console.log(b);//-3
//随机数
// Math.random() Return:[0,1)之间的一个伪随机数
console.log(Math.random());
//返回[0,100)的随机数
const randNumber = ()=>Math.floor(Math.random()*100);
console.log(randNumber());
//返回长度为n的随机数字符,包含a-z,0-9
function randStr(len){
const dict = `qwertyuioplkjhgfdsazxcvbnm0123456789`;
let res = ``;
for(let i=0;i