javascript对象
//es2018
命名捕获:
let {year,month,day} = "2018-10-28".match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/).groups
"2018-10-28".replace(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/,"$<year>/$<month>/$<day>") = "2018/10/28"
反向引用命名捕获:(/^(?<a>1234)-\k<a>$/).test("1234-1234") = true
s修饰符:/\d.\d/s.test("2\n2")=true
标签函数:
function a(b){console.log(b)}
a`1` //["1", raw: ["1"]]
- Object
//es6 Object.is(a,b):判断a,b是否一样 Object.assign(o1,o2,...):合并/复制对象/数组 //es2017 for...of: let key of Object.keys(obj),let [key,value] of Object.entries(obj)
- 枚举遍历
obj.propertyIsEnumerable(属性名):检查自身可枚举属性 obj.hasOwnPreperty(属性名):检查自身所有属性 for/in:遍历自身和继承可枚举属性 属性名 in obj:自身和继承所有属性
- 属性特性
数据属性:值(value)、可写性(writable)、可枚举性(enumerable)、可配置性(configurable) 存取器属性:读取(get)、写入(set)、可枚举性(enumerable)、可配置性(configurable) Object.getOwnPropertyDescriptor(obj,属性名):获取对象某个属性的描述符 Object.definePeoperty(obj,属性名,描述符):设置属性的特征 Object.definePeoperties(obj,{属性名:描述符,...}):同时设置多个属性的特征
- 可扩展性(冻结)
Object.preventExtensions(obj):将对象转换为不可扩展的(不能添加新属性) Object.seal(obj):+,对象的自有属性都设置为不可配置(不能删除或配置) Object.freeze(obj):+,+,自有的数据属性设为只读(不能删除或配置或修改,对象本身冻结,对象的属性没有冻结)
- 对象属性
- constructor:返回对创建此对象的对象函数的引用
- prototype:使您有能力向对象添加属性和方法
- 对象方法
- toSource():返回该对象的源代码
- valueOf():返回对象的原始值
Number
- 基本 ``` //es5 Number(): //es6 二进制(Binary):0b11->3 八进制(Octal):0o11->8 Number.parseInt():转换成整数 Number.parseFloat():转换成浮点数 Number.isNaN():等于isNaN() Number.isFinite():判断是不是数字 Number.isInteger():判断是不是整数 Number.Number.isSafeInteger():安全整数,-(2^53-1)到(2^53-1),Number.MIN_SAFE_INTEGER到Number.MAX_SAFE_INTEGER 指数运算符:2**3=8 取整:Math.trunc(4.5) = 4 判断正数、负数、0:Math.sign(number) = 1、-1、0、-0 立方根:Math.cbrt(8) = 2
* 整数(不使用小数点或指数计数法)最多为 15 位
* 小数的最大位数是 17,但是浮点运算并不总是 100% 准确
```js
var x=9999999999999999; //10000000000000000
var x=0.2+0.1; //0.30000000000000004
x=(0.2*10+0.1*10)/10; //解决方法:0.3
- 如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果前缀为 0 和 "x",则解释为十六进制数
var y=017; //15 var z=0x1F; //31
对象属性
- MAX_VALUE:可表示的最大的数(1.7976931348623157e+308)
- MIN_VALUE:可表示的最小的数(5e-324)
- NaN:非数字值(使用 isNaN() 来判断一个值是否是数字,NaN 与所有值都不相等,包括它自己)
- NEGATIVE_INFINITY:负无穷大,溢出时返回该值(-Infinity)
POSITIVE_INFINITY:正无穷大,溢出时返回该值(Infinity)
es6=========================================================================
- EPSILON:表示 1 和比最接近 1 且大于 1 的最小 Number 之间的差别
- MIN_SAFE_INTEGER:表示在 JavaScript中最小的安全的 integer 型数字 (-(253 - 1))
- MAX_SAFE_INTEGER:表示在 JavaScript 中最大的安全整数(253 - 1)
对象方法
- toFixed(num?):把数字转换为字符串,结果的小数点后有指定位数的数字(四舍五入)
//num:0~20之间的整数,默认:0 new Number(13).toFixed(2) //13.00
- toString(radix?):把数字转换为字符串,使用指定的基数
//radix基数:2~36之间的整数,默认基数:10 13.toString(2) //当调用该方法的对象不是 Number 时抛出 TypeError 异常 new Number(13).toString(2) //1101
- toLocaleString():把数字转换为字符串,使用本地数字格式顺序
- toExponential(num):把对象的值转换为指数计数法
//num:规定指数计数法中的小数位数,0~20之间的整数,默认:使用尽可能多的数字 new Number(1000).toExponential(1) //1.0e+4
toPrecision(num):把数字格式化为指定的长度 ```js //num:规定必须被转换为指数计数法的最小位数,1~21之间的整数,默认:调用方法 toString() new Nu
es6=========================================================================
- isInteger():用来判断给定的参数是否为整数
Number.isInteger(10); // 返回 true Number.isInteger(10.5); // 返回 false
isSafeInteger():判断传入的参数值是否是一个"安全整数"
Number.isSafeInteger(10); // 返回 true Number.isSafeInteger(12345678901234567890); // 返回 false ```mber(1000).toPrecision(4) //1.000e+4
技巧=========================================================================
- 数字补0
const addZero1 = (num, len = 2) => (`0${num}`).slice(-len) const addZero2 = (num, len = 2) => (`${num}`).padStart( len , '0') //es2017:str.padStart(targetLength, padString?) addZero1(3) // 03 addZero2(32,4) // 0032
- toFixed(num?):把数字转换为字符串,结果的小数点后有指定位数的数字(四舍五入)
String(类似于只读的数组)
- String 类定义的方法都不能改变字符串的内容
"Volvo XC60"[2]; //l new String("abc") // String {0: "a", 1: "b", 2: "c", length: 3} "John" === new String("John"); //false typeof "John" // "string" typeof new String("John") // "object" String(true) // "true" String(5) // "5"
- 对象属性
- length:返回字符串的长度
对象方法
charAt(index):返回指定索引位置的字符或空字符串
'abc'.charAt(1); // "b" 'abc'[1]; // "b" 'abc'.charAt(-1|3); // "",参数为负数或大于等于字符串的长度,返回空字符串
- concat(stringX,...,stringX):连接两个或多个字符串,返回连接后的字符串
'a'.concat('b') // "ab" ''.concat(1, 2, 3) // "123",如果参数不是字符串,concat方法会将其先转为字符串,然后再连接
- indexOf(searchvalue,fromindex?):返回字符串中检索指定字符第一次出现的位置或-1
'hello world'.indexOf('o') // 4 'JavaScript'.indexOf('script') // -1 'hello world'.indexOf('o', 6) // 7,第二个参数表示从该位置开始向后匹配
- lastIndexOf(searchvalue,fromindex?):返回字符串中检索指定字符最后一次出现的位置或-1
'hello world'.lastIndexOf('o') // 7 'hello world'.lastIndexOf('o', 6) // 4,第二个参数表示从该位置起向前匹配
- match(searchvalue/regexp):找到一个或多个正则表达式的匹配,返回结果数组或null
var str = "bbbabbabb"; str.match(/a/g) // [ 'a', 'a' ] str.match('a') // [ 'a', index: 3, input: 'bbbabbabb' ] str.match('c') // null
- search(searchvalue/regexp):检索与正则表达式相匹配的值,返回匹配的第一个位置或-1
var str = "bbbabbabb"; str.search('a') // 3 str.search('c') // -1 str.search(/a/g) // 3 //忽略标志 g和regexp的lastindex属性,总是从第一个位置开始匹配
replace(regexp/substr,replacement):替换与正则表达式匹配的子串,返回替换后的字符串
'aaa'.replace('a', 'b') // "baa" 'aaa'.replace(/a/g, 'b') // "bbb" /*replace() 方法的第二个参数可以是函数而不是字符串。 在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。 该函数的第一个参数是匹配模式的字符串。 接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。 接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。 最后一个参数是 stringObject 本身。*/ "Doe, John".replace(/(\w+)\s*, \s*(\w+)/, "$2 $1"); //"John Doe" '"a", "b"'.replace(/"([^"]*)"/g, "'$1'"); //"'a', 'b'" 'aaa bbb ccc'.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1); }); //"Aaa Bbb Ccc"
split(regexp/substr,maxLength?):把字符串分割为子字符串数组,返回分割的数组
'a|b|c'.split('|') // ["a", "b", "c"] 'a|b|c'.split('') // ["a", "|", "b", "|", "c"] 'a|b|c'.split() // ["a|b|c"] 'a||c'.split('|') // ['a', '', 'c'] '|b|c'.split('|') // ["", "b", "c"] 'a|b|'.split('|') // ["a", "b", ""] 'a b c'.split(/\s+/) // ["a", "b", "c"] 'a|b|c'.split('|', 0) // [] 'a|b|c'.split('|', 1) // ["a"] 'a|b|c'.split('|', 2) // ["a", "b"] 'a|b|c'.split('|', 3) // ["a", "b", "c"] 'a|b|c'.split('|', 4) // ["a", "b", "c"] //maxLength只截取不延长
- slice(start,end?):提取字符串的片断,并在新的字符串中返回被提取的部分
//第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置) 'JavaScript'.slice(0, 4) // "Java" //如果省略第二个参数,则表示子字符串一直到原字符串结束 'JavaScript'.slice(4) // "Script" //如果参数是负值,表示从结尾开始倒数计算的位置,即该负值加上字符串长度 'JavaScript'.slice(-6) // "Script" 'JavaScript'.slice(0, -6) // "Java" 'JavaScript'.slice(-2, -1) // "p" //如果第二个参数位置小于第一个参数位置,返回空字符串 'JavaScript'.slice(2, 1) // ""
- substring(start,end?):提取字符串中两个指定的索引号之间的字符
//第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置) 'JavaScript'.substring(0, 4) // "Java" //如果省略第二个参数,则表示子字符串一直到原字符串结束 'JavaScript'.substring(4) // "Script" //如果第二个参数大于第一个参数,substring方法会自动更换两个参数的位置 'JavaScript'.substring(10, 4) // "Script" //如果参数是负数,substring方法会自动将负数转为0 'Javascript'.substring(-3) // "JavaScript" 'JavaScript'.substring(4, -3) // "Java"
- substr(start,length?):从起始索引号提取字符串中指定数目的字符
//第一个参数是子字符串的开始位置,第二个参数是子字符串的长度 'JavaScript'.substr(4, 6) // "Script" //如果省略第二个参数,则表示子字符串一直到原字符串结束 'JavaScript'.substr(4) // "Script" //如果第一个参数是负数,表示倒数计算的字符位置。如果第二个参数是负数,将被自动转为0,返回空字符串 'JavaScript'.substr(-6) // "Script" 'JavaScript'.substr(4, -1) // ""
- trim():移除字符串首尾空白
' hello world '.trim() // "hello world" //该方法去除的不仅是空格,还包括制表符(\t、\v)、换行符(\n)和回车符(\r) '\r\nabc \t'.trim() // 'abc'
- toString():返回字符串对象值
- toLowerCase():把字符串转换为小写
'Hello World'.toLowerCase() // "hello world"
- toUpperCase():把字符串转换为大写
'Hello World'.toUpperCase() // "HELLO WORLD" //toUpperCase或toLowerCase也可以将布尔值或数组转为大或小写字符串,但是需要通过call方法使用 String.prototype.toUpperCase.call(true) // 'TRUE' String.prototype.toUpperCase.call(['a', 'b', 'c']) // 'A,B,C'
- toLocaleLowerCase():根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射
- toLocaleUpperCase():根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射
- localeCompare():用本地特定的顺序来比较两个字符串
/*返回一个整数,如果小于0,表示第一个字符串小于第二个字符串; 如果等于0,表示两者相等;如果大于0,表示第一个字符串大于第二个字符串*/ 'apple'.localeCompare('banana') // -1 //该方法的最大特点,就是会考虑自然语言的顺序。举例来说,正常情况下,大写的英文字母小于小写字母 'B' > 'a' // false JavaScript采用的是Unicode码点比较 'B'.localeCompare('a') // 1 localeCompare方法会考虑自然语言的排序情况
charCodeAt():返回指定索引位置字符的 Unicode 值
'abc'.charCodeAt(1) // 98 //如果没有任何参数,charCodeAt返回首字符的Unicode码点 'abc'.charCodeAt() // 97 //如果参数为负数,或大于等于字符串的长度,charCodeAt返回NaN 'abc'.charCodeAt(-1) // NaN /*charCodeAt方法返回的Unicode码点不大于65536(0xFFFF),也就是说,只返回两个字节的字符的码点。 如果遇到Unicode码点大于65536的字符,必需连续使用两次charCodeAt, 不仅读入charCodeAt(i),还要读入charCodeAt(i+1),将两个16字节放在一起,才能得到准确的字符。*/
fromCharCode():将指定的 Unicode 值转换为字符串
String.fromCharCode(104, 101, 108, 108, 111) // "hello" //该方法不支持Unicode码点大于0xFFFF的字符,即传入的参数不能大于0xFFFF String.fromCharCode(0x20BB7) // "ஷ" /*上面代码返回字符的编号是0x0BB7,而不是0x20BB7。 它的根本原因在于,码点大于0xFFFF的字符占用四个字节,而JavaScript只支持两个字节的字符。 这种情况下,必须把0x20BB7拆成两个字符表示*/ String.fromCharCode(0xD842, 0xDFB7)// "????" /*上面代码中,0x20BB7拆成两个字符0xD842和0xDFB7(即两个两字节字符,合成一个四字节字符),就能得到正确的结果。 码点大于0xFFFF的字符的四字节表示法,由UTF-16编码方法决定*/
- 显示字体:
document.write("abc".anchor("myanchor")) //创建 HTML 锚,<a name="myanchor">abc</a> document.write("abc".big()) //大号字体 document.write("abc".blink()) //闪动,此方法无法工作于 Internet Explorer 中 document.write("abc".bold()) //粗体 document.write("abc".fixed()) //打字机字体 document.write("abc".fontcolor("Red")) //指定颜色字体 document.write("abc".fontsize(7)) //指定字体尺寸,参数必须是从 1 至 7 的数字 document.write("abc".italics()) //斜体 document.write("abc".link("http://www.w3school.com.cn")) //超链接 document.write("abc".small()) //小号字体 document.write("abc".strike()) //添加删除线 document.write("abc".sub()) //下标 document.write("abc".sup()) //上标
Array
- 基本
//es5 forEach(fun,this):item,index,arr map(fun,this):与return配合使用,返回新数组 some(fun):return boolean,至少一个true every(fun):return boolean,都是true reduce(fun): pre,item,index,arr,可以return reduceRight(fun): 从右往左 //es6 for...of: let value of arr,let key of arr.keys(),let [key,value] of arr.entries() Array.from(arr)相当于[].slice.call(arr):类数组arr必须有length属性 find(fun):返回查找到的符合条件的第一个成员 findIndex(fun):返回查找到的符合条件的第一个成员的位置 fill(fun,startIndex,endIndex):填充,不包含endIndex includes(str): //创建非空定长数组 Array.apply(null,{length:5})
- 类数组
数组:新增元素时自动更新length,设置length较小时自动截断数组中index不小于length的元素 Object.prototype.toString.call(obj) === "[object Object]" obj是对象 obj.length===Math.floor(Math.abs(obj.length))&&o.length<2**32 length是非负整数且小于2^32
- 对象属性
- length:设置或返回数组中元素的数目
对象方法
- concat(arrayX,......,arrayX):连接两个或更多的数组,并返回数组
[1,2,3].concat(4,5); //[1,2,3,4,5] [1,2,3].concat([4,5]); //[1,2,3,4,5]
- join(separator?):把数组的所有元素通过指定的分隔符进行分隔放入一个字符串,返回字符串
[1,2,3].join(); //"1,2,3" [1,2,3].join("."); //"1.2.3"
- shift():删除并返回数组的第一个元素,空数组不操作并返回undefined
const arr = [1,2,3]; arr.shift(); //1 arr; //[2,3]
- pop():删除并返回数组的最后一个元素,空数组不操作并返回undefined
const arr = [1,2,3]; arr.pop(); //3 arr; //[1,2]
- unshift(newelement1,....,newelementX):向数组的开头添加一个或更多元素,并返回新的长度
const arr = [1,2,3]; arr.unshift(8,9); //5 //IE7 undefined arr; //[8,9,1,2,3]
- push(newelement1,....,newelementX):向数组的末尾添加一个或更多元素,并返回新的长度
const arr = [1,2,3]; arr.push(4,5); //5 arr; //[1,2,3,4,5]
splice(index,howmany,item1?,.....,itemX?):删除元素,并向数组添加新元素
let arr = [1,2,3]; arr.splice(1); //[2,3] arr; //[1] arr = [1,2,3]; arr.slice(1,1); //[2] arr; //[1,3] arr = [1,2,3]; arr.slice(-3); //[1,2,3] arr; //[] arr = [1,2,3]; arr.slice(-3,2); //[1,2] arr; //[3] arr = [1,2,3]; arr.slice(-3,2,"a"); //[1,2] arr; //["a",3]
- slice(start,end?):从某个已有的数组返回选定的元素
const arr = [1,2,3]; arr.slice(1); //[2,3] arr.slice(1,2); //[2] arr.slice(-3); //[1,2,3] arr.slice(-3,2); //[1,2] arr; //[1,2,3]
- reverse():颠倒数组中元素的顺序
const arr = [1,2,3]; arr.reverse(); //[3,2,1] arr; //[3,2,1]
sort(sortfun?):对数组的元素进行排序
const arr = [2,1,3]; arr.sort(); //[1,2,3] arr; //[1,2,3] function sortNumber(a,b){ return a - b } const arr1 = ["100","5", "25"]; arr1.sort(); //["100","25", "5"] arr1.sort(sortNumber); //["5","25", "100"]
- toString():把数组转换为字符串,并返回结果
[1,2,3].toString(); //1,2,3 {a:1}.toString(); //[object Object]
toLocaleString():把数组转换为本地字符串,并返回结果
const arr = [1,2,3]; arr.toLocaleString(); //1,2,3 arr; //[1,2,3]
技巧============================================================================
- 类数组转换成数组
Array.prototype.slice.call(arr); Array.from(arr); [...arr];
- 过滤数组中的所有假值
const compact = arr => arr.filter(Boolean) compact([0, 1, false, 2, '', 3, 'a', 'e' * 23, NaN, 's', 34]) //[ 1, 2, 3, 'a', 's', 34 ]
- concat(arrayX,......,arrayX):连接两个或更多的数组,并返回数组
Boolean
- false:0、-0、null、""、false、undefined、NaN
- 对象方法
- toString():把逻辑值转换为字符串,并返回"true" 或 "false"
new Boolean(NaN).toString(); //"false"
- toString():把逻辑值转换为字符串,并返回"true" 或 "false"
Date
- 日期对象也可用于比较两个日期
- 对象方法
- Date():返回当日的日期和时间
- getDate():从 Date 对象返回一个月中的某一天 (1 ~ 31)
- getDay():从 Date 对象返回一周中的某一天 (0 ~ 6)
- getMonth():从 Date 对象返回月份 (0 ~ 11)
- getFullYear():从 Date 对象以四位数字返回年份
- getHours():返回 Date 对象的小时 (0 ~ 23)
- getMinutes():返回 Date 对象的分钟 (0 ~ 59)
- getSeconds():返回 Date 对象的秒数 (0 ~ 59)
- getMilliseconds():返回 Date 对象的毫秒(0 ~ 999)
- getTime():返回 1970 年 1 月 1 日至今的毫秒数
- parse():返回1970年1月1日午夜到指定日期(字符串)的毫秒数
- setDate():设置 Date 对象中月的某一天 (1 ~ 31)
- setMonth():设置 Date 对象中月份 (0 ~ 11)
- setFullYear():设置 Date 对象中的年份(四位数字)
- setHours():设置 Date 对象中的小时 (0 ~ 23)
- setMinutes():设置 Date 对象中的分钟 (0 ~ 59)
- setSeconds():设置 Date 对象中的秒钟 (0 ~ 59)
- setMilliseconds():设置 Date 对象中的毫秒 (0 ~ 999)
- setTime():以毫秒设置 Date 对象
- toDateString():把 Date 对象的日期部分转换为字符串
- toTimeString():把 Date 对象的时间部分转换为字符串
- toString():把 Date 对象转换为字符串
Math:执行常见的算数任务
- 对象属性
- E:返回算术常量 e,即自然对数的底数(约等于2.718)
- LN2:返回 2 的自然对数(约等于0.693)
- LN10:返回 10 的自然对数(约等于2.302)
- LOG2E:返回以 2 为底的 e 的对数(约等于 1.414)
- LOG10E:返回以 10 为底的 e 的对数(约等于0.434)
- PI:返回圆周率(约等于3.14159)
- SQRT1_2:返回返回 2 的平方根的倒数(约等于 0.707)
- SQRT2:返回 2 的平方根(约等于 1.414)
对象方法
- ceil(x):对数进行上舍入(返回大于等于 x最接近的整数)
- floor(x):对数进行下舍入(返回小于等于 x最接近的整数)
- round(x):把数四舍五入为最接近的整数
- abs(x):返回数的绝对值
- max(x,y):返回 x 和 y 中的最高值
- min(x,y):返回 x 和 y 中的最低值
- random():返回 0 ~ 1 之间的随机数
- sqrt(x):返回数的平方根
- acos(x):返回数的反余弦值
- asin(x):返回数的反正弦值
- atan(x):以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值
- atan2(y,x):返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)
- cos(x):返回数的余弦
- exp(x):返回 e 的指数
- log(x):返回数的自然对数(底为e)
- pow(x,y):返回 x 的 y 次幂
- sin(x):返回数的正弦
tan(x):返回角的正切
技巧============================================================================
- 精确到指定位数的小数
const round = (n, decimals = 0) => Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`) round(1.345, 2) // 1.35 round(1.345, 1) // 1.3
RegExp:正则表达式
//pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式
//attributes 是一个可选的字符串,包含属性修饰符 "g"(全局匹配)、"i"(不区分大小写匹配) 和 "m"(多行匹配)
//如果 pattern 是正则表达式,而不是字符串,则必须省略 attributes 参数
new RegExp(pattern, attributes);
方括号:用于查找某个范围内的字符
[abc]:查找方括号之间的任何字符
^abc :查找任何不在方括号之间的字符
[0-9]:查找任何从 0 至 9 的数字
[a-z]:查找任何从小写 a 到小写 z 的字符
[A-Z]:查找任何从大写 A 到大写 Z 的字符
[A-z]:查找任何从大写 A 到小写 z 的字符
(red|blue|green):查找任何指定的选项
[\u4E00-\uFA29]|[\uE7C7-\uE7F3]:中文
[-]:特殊字符 - 需要转义
元字符:有特殊含义的字符
.:查找单个字符,除了换行和行结束符
\w:查找单词字符(A-z0-9_)
\W:查找非单词字符
\d:查找数字(0-9)
\D:查找非数字字符
\s:查找空白字符
\S:查找非空白字符
\b:匹配单词边界
\B:匹配非单词边界
\0:查找 NUL 字符
\n:查找换行符
\f:查找换页符
\r:查找回车符
\t:查找制表符
\v:查找垂直制表符
\xxx:查找以八进制数 xxx 规定的字符
\xdd:查找以十六进制数 dd 规定的字符
\uxxxx:查找以十六进制数 xxxx 规定的 Unicode 字符
(\w)\1(\w)\2:匹配xxyy
量词
n+:匹配任何包含至少一个 n 的字符串
n*:匹配任何包含零个或多个 n 的字符串
n?:匹配任何包含零个或一个 n 的字符串
n{X}:匹配包含 X 个 n 的序列的字符串
n{X,Y}:匹配包含 X 至 Y 个 n 的序列的字符串
n{X,}:匹配包含至少 X 个 n 的序列的字符串
n$:匹配任何结尾为 n 的字符串
^n:匹配任何开头为 n 的字符串
?=n:匹配任何其后紧接指定字符串 n 的字符串
?!n:匹配任何其后没有紧接指定字符串 n 的字符串
- 对象属性:
- lastIndex:一个整数,标示开始下一次匹配的字符位置
//不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性 //如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为 0
- global:RegExp 对象是否具有标志 g
- ignoreCase:RegExp 对象是否具有标志 i
- multiline:RegExp 对象是否具有标志 m
- source:正则表达式的源文本
- lastIndex:一个整数,标示开始下一次匹配的字符位置
对象方法:
compile(regexp,modifier):编译正则表达式
//regexp:正则表达式,modifier:g|i|gi var str="Every man in the world! Every woman1 on earth!"; const patt=/man/g; str.replace(patt,"person"); //Every person in the world! Every woperson on earth! patt.compile(/(wo)?man/g); str.replace(patt,"person"); //Every person in the world! Every person on earth!
exec(string):检索字符串中指定的值。返回结果数组或null
var str = "bbbabbabb"; var patt = new RegExp("a","g"); //全局匹配 patt.exec(str) //[ 'a', index: 3, input: 'bbbabbabb' ] patt.lastIndex //4 patt.exec(str) //[ 'a', index: 6, input: 'bbbabbabb' ] patt.lastIndex //7 patt.exec(str) //null patt.lastIndex //0 patt = new RegExp("a"); //非全局匹配 patt.exec(str) //[ 'a', index: 3, input: 'bbbabbabb' ] patt.lastIndex //0
test(string):检索字符串中指定的值。返回 true 或 false
var str = "bbbabbabb"; var patt = new RegExp("a","g"); //全局匹配 patt.test(str) //true patt.lastIndex //4 patt.exec(str) //true patt.lastIndex //7 patt.exec(str) //false patt.lastIndex //0 patt = new RegExp("a"); //非全局匹配 patt.exec(str) //true patt.lastIndex //0
全局对象
全局函数:
- isNaN(x):检查某个数字是否是NaN
isNaN(5-2) //false isNaN("Hello") //true
parseInt(string, radix?):指定基数解析一个字符串并返回一个整数
parseInt("19",10) //19 (10+9) parseInt("11",2) //3 (2+1) parseInt("17",8) //15 (8+7) parseInt("1f",16) //31 (16+15) parseInt(" 19 ") //19,开头和结尾的空格是允许的 parseInt("19a11") //19,只有字符串中的第一个数字会被返回 parseInt("a19") //NaN,字符串的第一个字符不能被转换为数字 //radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数 parseInt("10") //10,1 ~ 9 的数字开头解析为十进制的整数 parseInt("0x10") //16,"0x" 开头解析为十六进制的整数 parseInt("010") //未定:10 或 8,"0" 开头解析为八进制或十六进制的数字
- parseFloat(string):解析一个字符串并返回一个浮点数
parseFloat(" 19 ") //19,开头和结尾的空格是允许的 parseFloat("19a11") //19,只有字符串中的第一个数字会被返回 parseFloat("a19") //NaN,字符串的第一个字符不能被转换为数字 parseFloat("10.00") //10 parseFloat("-10.13") //-10.13 parseFloat("314e-2") //3.14
- Number(object):把对象的值转换为数字
Number(new Date()) //1539846443589,返回从 1970 年 1 月 1 日至今的毫秒数 Number("8 9") //NaN,对象的值无法转换为数字 Number(true|false) //1|0 Number([]) //0 Number([20]) //20 Number(null|"") //0
- String(object):把对象的值转换为字符串
String(new Date()) //"Thu Oct 18 2018 15:23:09 GMT+0800 (中国标准时间)" String(true|false) //"true"|"false" String("8 9") //"8 9" String(123) //"123"
- eval(string):计算 JavaScript 字符串,并把它作为脚本代码来执行
eval("x=10;y=20;document.write(x*y)") //200 eval("2+3") //5
- isFinite(number):检查某个值是否为有穷大的数
isFinite(5-2) //true isFinite(-Infinity) //false isFinite(NaN) //false isFinite("abc") //false
- encodeURI(URIstring):把字符串编码为 URI
encodeURI("http://www.w3school.com.cn/My first/") //"http://www.w3school.com.cn/My%20first/"
- decodeURI(URIstring):解码某个编码的 URI
decodeURI("http://www.w3school.com.cn/My%20first/") //"http://www.w3school.com.cn/My first/"
- encodeURIComponent(URIstring):把字符串编码为 URI 组件
encodeURIComponent("http://www.w3school.com.cn/p 1/") //"http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F" encodeURIComponent(",/?:@&=+$#") //"%2C%2F%3F%3A%40%26%3D%2B%24%23"
- decodeURIComponent(): 解码一个编码的 URI 组件
- escape():对字符串进行编码
- unescape():对由 escape() 编码的字符串进行解码
- getClass():返回一个 JavaObject 的 JavaClass
- isNaN(x):检查某个数字是否是NaN
- 全局属性:
- NaN:指示某个值是不是数字值
- undefined:指示未定义的值
- Infinity:代表正的无穷大的数值
- java:代表 java.* 包层级的一个 JavaPackage
- Packages:根 JavaPackage 对象