# js内置对象
# 1. Math
随机数
Math.random() //获取随机数字 [0,1)
取整Math.floor() Math.ceil()
Math.ceil(2.234342) ==> //3 向上取整
Math.floor(2.234342) ==> //2 向下取整
最大值 最小值
Math.min(实参1,实参2...)
//获取实参集合中最小的数字
Math.max(实参1,实参2...)
//获取实参集合中最大的数字
四舍五入
Math.round(2.234342) ==> //2
绝对值
Math.abs(数字)
其他方法
Math.PI //圆周率/π --> 180°
数学中 sin(π/6) ==> 1/2
JS中
Math.sin(x) //计算x的正弦值
Math.cos(x) //计算x的余弦值
Math.tan(x) //计算x的正切值
Math.pow(x,y) //求x的y次方
Math.sqrt(x) //求x的平方根
# 2. Date日期对象
Date
对象则基于Unix Time Stamp
,即自1970年1月1日(UTC)起经过的毫秒数。
在调用Date构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。如果需要根据特定日期和时间创建日期对象,必须传入该日期的毫秒数。
如果直接将表示日期的字符串传递给Date构造函数,会隐式调用Date.parse();
var date1 = new Date(Date.parse('May 25,2004'));
var date2 = new Date('May 25,2004');
//以上两步操作是等价的;
# 2.1 Date.parse()
Date.parse()
接受一个表示日期的字符串参数,尝试根据这个字符串返回相应日期的毫秒数。
通常能接受下列日期格式:
- ‘月/日/年’,如6/13/2006;
- '英文月 日,年',如January 12,2004;
- '英文星期几 英文月 日 年 时:分:秒 时区',如 Tue May 25 2004 00:00:00 GMT-0700;
例如要为2004年5月25日创建一个日期对象:
var date = new Date(Date.parse('May 25,2004'));
# 2.2 Date.UTC()
Date.UTC()
方法也是返回表示日期的毫秒数,Date.UTC()的参数:
- 年份
- 基于0的月份,0~11
- 月中哪一天,1~31
- 小时数,0~23
- 分钟
- 秒
- 毫秒数
示例:
//GMT时间 2000年1月1日 午夜零时 //GMT格林尼治时间
var y2k = new Date(Date.UTC(2000,0));//Sat Jan 01 2000 08:00:00 GMT+0800 (中国标准时间)
//GMT时间2005年5月5日下午5:55:55
var time = new Date(Date.UTC(2005,4,5,17,55,55));
同样,使用Date构造函数,会隐式调用Date.UTC(),有一点不同:返回的日期和时间都基于本地时区,而非GMT来创建。
var time = new Date(2005,4,5,17,55,55);//Thu May 05 2005 17:55:55 GMT+0800 (中国标准时间)
# 2.3 Date.now()
Date.now(),返回表示调用这个方法时的日期和时间的毫秒数。
var start = Date.now();
dosomething();
var end = Date.now();
var result = end - start;
IE8等低版本浏览器中不支持Date.now(),可以使用+操作符获取时间戳。
var start = + new Date();
# 2.4 Date其他方法
var date1 = new Date();
var date2 = Date.now();//1581316206693
date1.toLocaleString('chinese', { hour12: false })//传入配置参数,获取24小时制
date.toLocaleString()//获取本地日期字符串
date.toLocaleDateString()//获取本地(年/月/日)形式的字符串
date.toLocaleTimeString()//获取本地(时/分/秒)形式的字符串
date.getFullYear() //获取年份
date.getMonth() //获取月份 0-11
date.getDate() //获取日期
date.getHours() //获取小时
date.getMinutes() //获取分钟
date.getSeconds() //获取秒钟
date.getMilliseconds //获取毫秒
date.getDay() //获取星期几 (0-6)星期天是0
date.getTime() //获取当前时间到1970年1月1日午夜的毫秒数
date.getTimezoneOffset()//获取当前时区的偏移时间 东8区是-480 单位是分钟
date.setFullYear() //设置年份
date.setMonth() //设置月份
date.setDate() //设置日期
date.setHours() //设置小时
date.setMinutes() //设置分钟
date.setSeconds() //设置秒钟
moment.js
日期处理类库很方便地处理时间格式问题。
# 3. JSON对象
JSON 是一种语法,用来序列化对象、数组、数值、字符串、布尔值和 null
。它基于 JavaScript 语法,但与之不同:JavaScript不是JSON,JSON也不是JavaScript。
JSON对象包含两个方法: 用于解析 JavaScript Object Notation (JSON) 的 parse()
方法,以及将对象/值转换为 JSON字符串的 stringify()
方法。除了这两个方法, JSON这个对象本身并没有其他作用,也不能被调用或者作为构造函数调用。
# 3.1 JSON.parse
JSON.parse(text[, reviver]);
JSON.parse()
方法用来解析JSON字符串,构造由字符串描述的JavaScript值或对象。提供可选的 reviver 函数用以在返回之前对所得到的对象执行变换(操作)。
JSON.parse('{"p": 5}', function (k, v) {
if(k === '') return v; // 如果到了最顶层,则直接返回属性值,
return v * 2; // 否则将属性值变为原来的 2 倍。
}); // { p: 10 }
JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的,
// 最后一个属性名会是个空字符串。
return v; // 返回原始属性值,相当于没有传递 reviver 参数。
});
# 3.2 JSON.stringify
JSON.stringify(value[, replacer [, space]])
JSON.stringify()
方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串,如果指定了 replacer 是一个函数,则可以选择性地替换值,或者如果指定了 replacer 是一个数组,则可选择性地仅包含数组指定的属性。
const person = {
name:'shiyue',
age:19,
hobby:'beautiful girl'
}
const data = JSON.stringify(person,['age','hobby']);//replacer是数组,数组的值代表被序列化成JSON字符串的属性名,起到过滤保留作用
console.log(data);//"{"age":19,"hobby":"beautiful girl"}"
function replacer(key, value) {
if (typeof value === "string") {
return undefined;//返回undefined,则该属性不会再JSON字符串中输出
}
return value;
}
const foo = {
foundation: "Mozilla",
model: "box",
week: 45,
transport: "car",
month: 7};
const jsonString = JSON.stringify(foo, replacer);
console.log(jsonString);//"{"week":45,"month":7}"
这样一来可以借助JSON序列化,反序列化,过滤对象属性。
第三个参数 space 控制结果字符串中的间距。如果是一个数字, 则在字符串化时每一级别会比上一级别缩进多这个数字值的空格(最多10个空格);如果是一个字符串,则每一级别会比上一级别多缩进该字符串(或该字符串的前10个字符)。
JSON.stringify({ uno: 1, dos : 2 }, null, '\t')
// '{
// "uno": 1,
// "dos": 2
// }'
特殊:如果一个被序列化的对象拥有 toJSON
方法,那么该 toJSON
方法就会覆盖该对象默认的序列化行为:不是该对象被序列化,而是调用 toJSON
方法后的返回值会被序列化,例如:
var obj = {
foo: 'foo',
age:18
toJSON: function () {
return 'bar';
}
};
JSON.stringify(obj); // '"bar"'
JSON.stringify({x: obj}); // '{"x":"bar"}'
# 3.3 使用 JSON.stringify 结合 localStorage 的例子
一些时候,你想存储用户创建的一个对象,并且,即使在浏览器被关闭后仍能恢复该对象。下面的例子是 JSON.stringify
适用于这种情形的一个样板:
// 创建一个示例数据
var session = {
'screens' : [],
'state' : true
};
session.screens.push({"name":"screenA", "width":450, "height":250});
session.screens.push({"name":"screenB", "width":650, "height":350});
session.screens.push({"name":"screenC", "width":750, "height":120});
session.screens.push({"name":"screenD", "width":250, "height":60});
session.screens.push({"name":"screenE", "width":390, "height":120});
session.screens.push({"name":"screenF", "width":1240, "height":650});
// 使用 JSON.stringify 转换为 JSON 字符串
// 然后使用 localStorage 保存在 session 名称里
localStorage.setItem('session', JSON.stringify(session));
// 然后是如何转换通过 JSON.stringify 生成的字符串,该字符串以 JSON 格式保存在 localStorage 里
var restoredSession = JSON.parse(localStorage.getItem('session'));
// 现在 restoredSession 包含了保存在 localStorage 里的对象
console.log(restoredSession);
← ES5之后统称ES6 正则表达式 →