Math对象
1、静态属性
Math对象的静态属性,提供以下一些数学常数。
Math.E:常数e。Math.LN2:2 的自然对数。Math.LN10:10 的自然对数。Math.LOG2E:以 2 为底的e的对数。Math.LOG10E:以 10 为底的e的对数。Math.PI:常数π。Math.SQRT1_2:0.5 的平方根。Math.SQRT2:2 的平方根- 这些属性都是只读的不能修改
2、静态方法
2.1 Math.abs()
Math.abs方法返回参数值的绝对值。
Math.abs(1) // 1
Math.abs(-1) // 1
2.2 Math.min() / Math.max()
返回参数中的最小值 、最大值
Math.max(2, -1, 5) // 5
Math.min(2, -1, 5) // -1
Math.min() // Infinity
Math.max() // -Infinity
2.3 Math.floor() / Math.ceil()
向下取整 、 向上取整
Math.floor(3.2) // 3
Math.floor(-3.2) // -4
Math.ceil(3.2) // 4
Math.ceil(-3.2) // -3
2.4 Math.pow()
Math.pow方法返回以第一个参数为底数、第二个参数为指数的幂运算值。
// 等同于 2 ** 2
Math.pow(2, 2) // 4
// 等同于 2 ** 3
Math.pow(2, 3) // 8
2.5 Math.round()
四舍五入
Math.round(0.1) // 0
Math.round(0.5) // 1
Math.round(0.6) // 1
// 等同于
Math.floor(x + 0.5)
2.6 Math.sqrt()
Math.sqrt方法返回参数值的平方根。如果参数是一个负值,则返回NaN。
Math.sqrt(4) // 2
Math.sqrt(-4) // NaN
2.7 Math.random()
Math.random()返回0到1之间的一个伪随机数,可能等于0,但是一定小于1。
Math.random() // 0.7151307314634323
任意范围的随机数生成函数如下。
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
getRandomArbitrary(1.5, 6.5)
// 2.4942810038223864
任意范围的随机整数生成函数如下。
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
getRandomInt(1, 6) // 5
2.8 Math.log()
以e为底的自然对数值
2.9 Math.exp()
返回常数e的参数次方
2.10 三角函数方法
Math.sin():返回参数的正弦(参数为弧度值)Math.cos():返回参数的余弦(参数为弧度值)Math.tan():返回参数的正切(参数为弧度值)Math.asin():返回参数的反正弦(返回值为弧度值)Math.acos():返回参数的反余弦(返回值为弧度值)Math.atan():返回参数的反正切(返回值为弧度值)
Date对象
Date对象提供了一系列get*方法,用来获取实例对象某个方面的值。
getTime():返回实例距离1970年1月1日00:00:00的毫秒数,等同于valueOf方法。getDate():返回实例对象对应每个月的几号(从1开始)。getDay():返回星期几,星期日为0,星期一为1,以此类推。getFullYear():返回四位的年份。getMonth():返回月份(0表示1月,11表示12月)。getHours():返回小时(0-23)。getMilliseconds():返回毫秒(0-999)。getMinutes():返回分钟(0-59)。getSeconds():返回秒(0-59)。getTimezoneOffset():返回当前时间与 UTC 的时区差异,以分钟表示,返回结果考虑到了夏令时因素。
所有这些get*方法返回的都是整数,不同方法返回值的范围不一样。
Date对象提供了一系列set*方法,用来设置实例对象的各个方面。
setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳。setFullYear(year [, month, date]):设置四位年份。setHours(hour [, min, sec, ms]):设置小时(0-23)。setMilliseconds(ms):设置毫秒(0-999)。setMinutes(min [, sec, ms]):设置分钟(0-59)。setMonth(month [, date]):设置月份(0-11)。setSeconds(sec [, ms]):设置秒(0-59)。setTime(milliseconds):设置毫秒时间戳。
这些方法基本是跟get*方法一一对应的,但是没有setDay方法,因为星期几是计算出来的,而不是设置的。另外,需要注意的是,凡是涉及到设置月份,都是从0开始算的,即0是1月,11是12月。
下面是一个例子,计算本年度还剩下多少天。
function leftDays() {
var today = new Date();
var endYear = new Date(today.getFullYear(), 11, 31, 23, 59, 59, 999);
var msPerDay = 24 * 60 * 60 * 1000;
return Math.round((endYear.getTime() - today.getTime()) / msPerDay);
}
RegExp对象
正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用来按照“给定模式”匹配文本。比如,正则表达式给出一个 Email 地址的模式,然后用它来确定一个字符串是否为 Email 地址。JavaScript 的正则表达式体系是参照 Perl 5 建立的。
用来处理字符串的规则 专门用于规范字符串的表达式 (规则 、提取 、替换)
新建正则表达式有两种方法。一种是使用字面量,以斜杠表示开始和结束。
var regex = /具体的规则/;
另一种是使用RegExp构造函数。
var regex = new RegExp('具体的规则');
它们的主要区别是,第一种方法在引擎编译代码时,就会新建正则表达式,第二种方法在运行时新建正则表达式,所以前者的效率较高。而且,前者比较便利和直观,所以实际应用中,基本上都采用字面量定义正则表达式。
具体规则的书写
字符 代表规则是什么字符
普通字符 元字符
- 。 :匹配换行符\n以外的任意字符
- \ :转义符 有转无 无转有
- \s :匹配空白字符
- \S :匹配非空白字符
- \d :0-9数字
- \D :非0-9数字
- \w :数字 字母 下划线
- \W :非数字字母下划线
修饰符 修饰字符有几位
- ※号 出现0~多次
- ? 0~1次
- {n} 连续出现n次
- {n ,} 连续出现n到多次
- {n,m} 连续出现n到m次
- g 全局匹配
- i 不区分大小写
- m 多行匹配
特殊符号
- ()
- 【】
- 【^ 】 ^非【】内容
- 一 范围
- | 或 和()一起使用
let reg = /a{2}/ //要有两个a的字符串
规则.text(字符串)
检查当前字符串是否合规 返回bool值
let res = /a{2}/
let str = 'abcdefg'
res.test(str) // false
字符串.search(正则表达式)
检查当前字符串是否合规 合规返回下标 不合规返回-1
规则.exec(字符串)
返回数组 数组第一个元素就是提取字符串的内容 没有符合返回null
字符串.match(正则表达式)
提取字符串
字符串.replace(正则表达式,新的部分)
替换字符串 返回替换后的字符串
JSON对象
1、JSON格式
JSON 格式(JavaScript Object Notation 的缩写)是一种用于数据交换的文本格式,2001年由 Douglas Crockford 提出,目的是取代繁琐笨重的 XML 格式。
相比 XML 格式,JSON 格式有两个显著的优点:书写简单,一目了然;符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。所以,JSON 迅速被接受,已经成为各大网站交换数据的标准格式,并被写入标准。
每个 JSON 对象就是一个值,可能是一个数组或对象,也可能是一个原始类型的值。总之,只能是一个值,不能是两个或更多的值。
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
{ "name": "张三",
"birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
"getName": function () {
return this.name;
}
} // 属性值不能使用函数和日期对象
注意,null、空数组和空对象都是合法的 JSON 值。
2、JSON方法
JSON对象是 JavaScript 的原生对象,用来处理 JSON 格式数据。它有两个静态方法:JSON.stringify()和JSON.parse()
2.1 JSON.stringify()
JSON.stringify()方法用于将一个值转为 JSON 字符串。该字符串符合 JSON 格式,并且可以被JSON.parse()方法还原。
JSON.stringify('abc') // ""abc""
JSON.stringify(1) // "1"
JSON.stringify(false) // "false"
JSON.stringify([]) // "[]"
JSON.stringify({}) // "{}"
JSON.stringify([1, "false", false])
// '[1,"false",false]'
JSON.stringify({ name: "张三" })
// '{"name":"张三"}'
上面代码将各种类型的值,转成 JSON 字符串。
注意,对于原始类型的字符串,转换结果会带双引号。
JSON.stringify('foo') === "foo" // false
JSON.stringify('foo') === ""foo"" // true
JSON.stringify()方法还可以接受一个数组,作为第二个参数,指定参数对象的哪些属性需要转成字符串。
var obj = {
'prop1': 'value1',
'prop2': 'value2',
'prop3': 'value3'
};
var selectedProperties = ['prop1', 'prop2'];
JSON.stringify(obj, selectedProperties)
// "{"prop1":"value1","prop2":"value2"}"
第二个参数还可以是一个函数,用来更改JSON.stringify()的返回值。
function f(key, value) {
if (typeof value === "number") {
value = 2 * value;
}
return value;
}
JSON.stringify({ a: 1, b: 2 }, f)
// '{"a": 2,"b": 4}'
JSON.stringify()还可以接受第三个参数,用于增加返回的 JSON 字符串的可读性。
默认返回的是单行字符串,对于大型的 JSON 对象,可读性非常差。第三个参数使得每个属性单独占据一行,并且将每个属性前面添加指定的前缀(不超过10个字符)。
var user = {
firstName: '三',
lastName: '张',
get fullName(){
return this.lastName + this.firstName;
},
toJSON: function () {
return {
name: this.lastName + this.firstName
};
}
};
JSON.stringify(user)
// "{"name":"张三"}"
上面代码中,JSON.stringify()发现参数对象有toJSON()方法,就直接使用这个方法的返回值作为参数,而忽略原对象的其他参数
2.2 JSON.parse()
JSON.parse()方法用于将 JSON 字符串转换成对应的值。