● Object 类型
● Array类型
● Date类型
● RegExp类型
● Function类型
● 基本包装类型
● 单体内置对象
Object类型
创建对象: 使用new Object
或者直接使用字面量var obj={}
字面量定义对象不会调用Object构造函数
访问对象属性: 使用点 .
或者方括号内字符串 obj["key"]
使用 value instenceof
Object 可以引来判断对象
var s="hello";
var arr=[1,2,3,4,5];
console.log(s instanceof Array); //false 对于基本类型,instanceof 总是返回 false
console.log(ob instanceof Array); //true
Array类型
使用Array构造函数时可以省略 new
操作符.
修改length
属性可以直接改变数组的长度.
如果数组的索引超过了当前数组, 也会直接改变数组的长度.
*可以使用arr[arr.length]
在数组末尾添加新项
var arr = [1,2,3,4,5]; //字面量创建
var arr = Array(5) //创建数组长度为5的空数组
var arr = Array(1,2,3,4,5) //使用构造函数创建
Array方法 | 说明 |
---|---|
Array.isArray(arr) | 判断某个值是不是数组 返回 true/false |
arr.toString() | 返回数组中每个值的字符串形式 |
arr.toLocaleString() | 根据所在区域的字符串形式返回字符串 |
arr.valueOf() | 返回当前数组 |
arr.join(separator) | separator参数可选, 按指定的连接方式返回字符串,元素的连接符号为传入的参数, 默认为逗号。 null 和 undefined 用空格表示, 不会改变原有的数组。 |
arr.push(value)栈方法 压 | 接收任意数量的参数, 把他们逐个添加到数组末尾, 返回修改后的数组长度 |
arr.pop()栈方法 弹出 | 从数组末尾移除一项, length 的值-1,返回移除的项 |
arr.unshift(value)队列方法 | 接收任意数量的参数, 把他们逐个添加到数组前端, 返回修改后的数组长度 |
arr.shift()队列方法 | 从数组前端移除一项, length 的值-1,返回移除的项 |
arr.reverse()反转数组 | 反转当前数组元素的顺序,会直接改变当前的数组顺序 |
arr.sort(fucntion)重排序 | 接收一个函数,该函数接收2个参数,根据该函数的返回值重新排序数组,会改变当前的数组顺序 如果返回正数,则第一个参数在第二个参数之前;如果返回0,则位置相等; 如果返回负数,则第一个参数在第二个参数之后。 *可以使用 return value2-value1 比较数字大小 |
arr.concat(value)连接数组 | 将接收的参数放到数组末尾,返回一个新的数组, 不会改变原有的数组。 |
arr.slice(star,end)截取数组 | 只有一个参数的情况下, 会截取从该参数指定的位置开始到数组结束 有两个参数的情况下,会截取从star指定的位置开始到end指定的位置的前一个元素, 不包括end。 *如果值为负数, 则实际的值为 length 加上该负值。不会改变原有的数组。 |
arr.splice(index,num,add1*…) 删除/插入数组 |
第1个参数为要操作(删除/插入)的起始位置, 第2个参数为要删除的个数, 从第3开始的参数为要插入的元素,使用前插法,即插入的项目会在操作位置之前 *会改变原有的数组, 返回值为被删除的元素。 |
arr.indexOf(item,index)查找数组 | 参数分别为: 要查找的元素, 从哪里开始查找(下标)。从数组开头往后方向查找。 返回该元素第一次出现的位置(下标), 如果未找到,则返回-1。*使用===全等操作。 |
arr.lastIndexOf(item,index) | 同indexOf,不过是从数组末尾往前方向查找。 |
迭代方法 | 都接收2个参数,对每一项运行的 函数 和 this 的值(可选) |
---|---|
arr.every(fun,this) | 如果函数对每一项都返回true,则 every() 返回 true,否则返回false |
arr.some(fun,this) | 如果函数对任一项返回true,则 some() 返回 true,否则返回false |
arr.filter(fun,this) | 对每一项运行函数,filter()会返回函数运行结果为true的元素组成的数组 |
arr.map(fun,this) | 对每一项运行函数,map()会返回每次函数调用结果组成的数组 |
arr.forEach(fun,this) | 单纯对每一项运行函数,forEach() 没有返回值 |
归并方法 | 迭代数组所有项, 然后构建一个最终返回值 |
---|---|
arr.reduce(fun,initvalue) | 接收2个参数,分别为每一项上调用的函数, 归并的初始值(可选) 传入的函数接收4个参数分别为: 前一个值, 当前值, 当前项的索引, 数组对象本身 从第一项遍历到最后一项, 函数返回的任何值都会传递给下一项。 |
arr.reduceRight(fun,initvalue) | 同reduce,不过遍历方向是从最后一项到第一项。 |
Date类型
创建一个日期对象:
var date = new Date() //创建当前日期的Date对象
如果要创建指定日期和事件的Date对象, 则必须传入毫秒数(Number类型), 该毫秒数为1970年1月1日 0:00:00起至该日期经过的毫秒数。
var date = new Date(Date.parse("2018/8/8 12:00:00")); // 2018年8月8日 12:00:00
var date2= new Date(Date.UTC(2018,7,8,12,00,00)); // 2018年8月8日 12:00:00
var date2= new Date(1533700800000) // 2018年8月8日 12:00:00
创建特定日期时间的Date方法 | 返回1970年1月1日 0:00:00起至该日期经过的毫秒数(Number) |
---|---|
Date.parse(string) | 接收一个用字符串表示的日期, 返回毫秒数。 如果字符串不能表示日期, 则返回 NaN |
Date.UTC(年,月-1,天,时,分,秒,毫秒) | 传入参数表示日期, 月份是从0开始算的(一月是0,十二月是11) 前2个参数是必须的, 后面的参数如果省略, 则设为0。返回毫秒数 |
Date.now() | 返回调用这个方法时的日期时间的毫秒数 *如果浏览器不支持, 也可以使用 +new Date 把当前日期的Data对象转为Number类型 |
Date继承的方法 | 说明 |
---|---|
date.toString() | 返回字符串形式的日期Wed Aug 08 2018 12:00:00 GMT+0800 (中国标准时间) |
date.toLocaleString() | 根据所在区域的返回字符串形式的日期2018/8/8 下午12:00:00 |
date.valueOf() | 返回当前日期的毫秒数形式1533700800000 |
RegExp类型
创建正则表达式:var exp=/express/flags;
每个正则表达式都可带有标志(flags):
g
表示全局模式, 会应用于所有字符串, 每次调用后, index不会归0。
i
表示不区分大小写。
m
表示多行模式, 在到达文本末尾时还会继续查找下一行。
javascript 正则表达式不支持后发断言。
RegExp对象的 toString()
和 toLocaleString()
方法都会返回正则表达式的字面量形式, 与创建方式无关。
var exp = /\.at/gim //匹配.at
var exp2= new RegExp("\\.at","gi") //使用RegExp构造函数要对元字符进行双重转义
exp.toString(); //返回 /\.at/gim
exp2.toString(); //返回 /\.at/gim
RegExp实例属性 | 作用于单个正则表达式实例 |
---|---|
global |
布尔值,表示是否设置了g 标志 |
ignoreCase |
布尔值,表示是否设置了i 标志 |
multiline |
布尔值,表示是否设置了m 标志 |
lastIndex |
整数,表示开始搜索下一个匹配项的字符位置 (匹配项的下一个元素) |
source |
正则表达式的字符串表示 |
RegExp实例方法 | 作用于单个正则表达式实例 |
---|---|
exp.exec(string) | 接收一个字符串参数, 返回包含第一个匹配项的数组 |
exp.test(string) | 接收一个字符串参数, 如果有匹配项, 返回true , 否则返回false |
RegExp构造函数的属性 | 适用于作用域中的所有 正则表达式 |
---|---|
RegExp.input 或RegExp[$_] |
最近一次要匹配的字符串 |
RegExp.lastMatch 或RegExp["$&"] |
最近一次的匹配项 |
RegExp.lastparen 或RegExp["$+"] |
最近一次匹配的捕获组(一对括号就是一个捕获组) |
RegExp.leftContext 或RegExp["$`"] |
inpu 字符串中lastparen 之前的位置 |
RegExp.rightContext 或RegExp["$'"] |
inpu 字符串中lastparen 之后边的位置 |
RegExp.multiline 或RegExp["$*"] |
布尔值,是否所有的表达式都使用多行模式 |
*非有效的ECMAScript标识符要用方括号语法访问
Function类型
- 函数名实际上是一个指向函数对象的指针。
- 使用不带括号的函数名是访问函数指针, 而非调用函数。
- 重复定义函数, 后面的函数会覆盖前面的函数。
- 函数声明会得到变量提升, 未执行之前可以使用。函数表达式则不会, 必须执行到它所在的代码, 才能使用。
- 函数可以作为参数传递给另一个函数, 也可以将函数作为另一个函数的结果返回。
callee
属性
callee
属性是一个指针,指向拥有argument对象的函数(当前函数),常用于递归函数, 分离函数的执行与函数名。
不能用于严格模式!
function fun(x,y){
argument.callee() //指向fun函数(函数本身)
}
caller
属性
caller
属性保存调用当前函数的函数的引用 (谁调用了它) , 在全局作用域中调用, 会返回 null
。
不能用于严格模式!
function fun(){
return fun.caller;
}
function otherfunction(){
console.log(fun());
}
console.log(fun()); //null
otherfunction(); //otherfunction
this
属性
this
指向函数执行的环境对象( 函数本身所在的作用域 )。
在全局作用域中调用, this
指向window
。严格模式下, 全局环境中的this
指向undefined
。
window.color="red";
var o={color."blue"};
function sayColor(){
alert(this.color); //this指向函数本身所在的作用域
}
sayColor(); //此时函数本身的作用域是window, 所以返回"red"
o.sayColor=sayColor;
o.sayColor(); //o.sayColor()的作用域是o对象, 所以返回"blue"
length
属性和prototype
属性
length
属性表示函数希望接收的命名参数的个数。
prototype
属性保存着所有实例的方法, 无法枚举。
apply方法
apply方法接收2个参数, 一个是运行函数的作用域 (让this指向哪里) , 另一个是参数数组。
apply需要把参数打包成数组传入。
call方法
同apply, 不同的地方是call的参数是逐个传给函数。这2个方法都可用来扩大作用域。
bind方法
bind方法会创建一个函数实例, 然后其this
的值会被绑定传给bind()函数的值。
var o={color."blue"};
function sayColor(){
alert(this.color);
}
var objectSayColor=sayColor.bind(o); //将对象o作为objectSayColor函数的this
基本包装类型
基本包装类型有:Boolean
、Number
、String
。
每当读取一个基本类型的值时, 后台就会创建一个对应的基本包装类型。
自动创建的基本包装类型只存在于代码执行瞬间, 然后立即被摧毁, 所以不能在运行时添加属性和方法。
Boolean类型
var bo1 = new Boolean(false); //创建一个Boolean类型的基本包装对象, 初始值为false
var bo2 = new Boolean(2); //2会被自动转为true
var bo3 = true; //字面量创建的Boolean基本类型
alert(bo1 && true) //返回true, 因为布尔表达式中 对象 会被转为true, 不论其初始值
//尽量不要使用Boolean构造函数, 容易造成误解。
typeof bo1; //object (对象)
typeof bo3; //boolean (基本类型)
typeof bo2.valueOf() //boolean
Boolean对象的 valueOf()
方法会返回基本类型的true
或者 false
。
Number类型
var value = 25;
var number = Number(value); //转换为数字的函数 Number()
alert(typeof number); //number (基本类型)
var obj = new Number(value); //使用构造函数 new Number()
alert(typeof obj); //object (基本包装类型的对象)
Number基本包装对象实例的方法 | 作用于 |
---|---|
num.valueOf() | 返回Number对象的基本类型Number的数值 |
num.toString(radix) | 返回数值的字符串形式, 可以接收一个参数, 指定返回几进制的字符串形式。 |
num.toLocaleString() | 根据浏览器设置的区域, 返回对应的字符串形式,没有参数。 中国地区会把数字每三位用逗号隔开。如:1,256,345 |
num.toFixed(number) | 接收一个数值, 按指定数值保留小数点后的位数, 返回字符串的形式 (标准为0~20位) |
num.toExponential(number) | 同toFixed(),不过是返回以指数表示法(e表示法)表示的字符串形式。如 1.26e+6 |
num.toPrecision(numnber) | 接收一个数值参数, 表示返回的数值的所有数字位数(不包括指数部分)。 位数不够的话, 返回结果可能会向上或向下舍入 返回的形式可能是fixed的形式或者e表示法, 超出指定位数时将其转换为e表示法。 |
String类型
string对象的length
属性表示字符串的长度。
string对象的valueOf()
, toString()
,toLocaleString()
都返回String对象的基本类型值。
字符方法 | 操作单个字符 |
---|---|
str.charAt(index) | 返回指定位置的字符, 跟方括号加索引一样。str.charAt(1) 等同于srt[1] |
str.charCodeAt(index) | 返回指定字符的编码。如:字母’e’会返回101(Number类型) |
字符串方法 | 操作整个字符串(不会改变原有的字符串) |
---|---|
str.concat(string1+,string2,…)连接字符串 | 接收一或多个字符串, 并依次把他们放到与原字符串连接起来, 返回连接后的字符串 |
str.slice(star,end?)按位置截取字符串 | 返回截取后的字符串,参数为开始的位置,结束位置的下一个位置(不会包含end的位置) 对于所有的负值参数, 会与length相加。如果省略第二个参数, 则截取到末尾。 |
str.substring(star,end?)按位置截取字符串 | 同slice(), 不同的是,substring()会把所有的负值参数转换为0 |
str.substr(star,howmany?)按个数截取字符串 | 返回按个数截取后的字符串,参数为:开的位置,截取的个数。 如果第一个参数为负值,则与length相加,如果第二个参数为负值, 则转换为0。 如果省略第二个参数, 则截取到末尾。 |
str.indexOf(item,index?)和 str.lastIndexOf(item,index?)位置查找 |
跟Array的indexOf()和lastIndexOf()一样 |
str.trim() | 将字符串两边的空白去掉,并返回去掉空白后的字符串。 |
str.toUpperCase() | 把字符串全部变为大写并返回, 可以对单个字符操作。 |
str.toLowerCase() | 把字符串全部变为小写并返回, 可以对单个字符操作。 |
str.match(reg)正则匹配 | 接收一个参数, 可以是正则表达式或者RegExp对象, 返回匹配项数组。跟reg.exec()一样 |
str.search(reg) | 与match()一样, 不同的是返回的是第一个匹配项的索引, 未找到则返回-1。 |
str.replace(reg|str,str|fun)替换字符串[1] | 接收2个参数, 第1个参数可以是正则表达式(RegExp)或者字符串, 第2个参数可以是字符串或者函数。然后进行替换操作,返回替换后的新字符串。 |
str.split(string|reg,number)分割字符串 | 按指定方式将字符串分割成多个字符串,返回分割后字符串组成的数组。 第1个参数可以是字符串或者正则表达式, 不会包含在结果里。 第2个参数指定返回的数组的长度。 |
str.localeCompare(string) | 与参数所给的字符串比较, 如果该字符串在参数所给的字符串在之前,则返回负值, 如果该字符串在参数所给的字符串在之后,则返回正值,位置相等返回0 |
String.fromCharCode(charcode+) | 接收一或多个字符编码, 然后把他们转为一个字符串 |
replace()方法
接收2个参数, 第1个参数可以是正则表达式(或RegExp对象)或者字符串, 第2个参数可以是字符串或者函数。
如果第一个参数是字符串, 那么只会替换第一个匹配项, 如果要替换所有的匹配项, 则要用正则表达式, 并且要指定g
标志。
var text = "cat, bat, sat, fat";
//第一个参数为字符串, 所以只会替换第一个匹配项
var result = text.replace("at","ond"); //"cond,bat,sat,fat"
//第一个参数是正则表达式, 并且指定g标志, 所以会替换所有的匹配项
result=text.replace(/at/g,"ond") //"cond,bond,sond,fond"
如果第二个参数是函数:会向该函数传递参数分别为:
模式匹配项(匹配到的字符), (捕获组1),(捕获组2)…,模式匹配项在字符中的位置(索引),原始字符串
如果没有捕获组, 则为3个参数。模式匹配项在字符中的位置(索引)和原始字符串始终在参数的最后
该函数必须返回一个字符串。
var s="cat,bat,hat,rat"
var r=s.replace(/.at/g,function(){
console.log(arguments[0]); //模式匹配项(此时是"cat")
console.log(arguments[1]);
console.log(arguments[2]);
console.log(arguments[3]);
console.log("倒数第二个参数"+arguments[arguments.length-2]); //模式匹配项在字符中的位置
console.log("最后一个参数"+arguments[arguments.length-1]); //原始字符串
return "ing"
})
console.log(r) // "cing,bing,hing,ring"
单体内置对象
由ECMAScript提供的,不依赖宿主环境对象,如Object
, Array
, String
,Global
, Math
URI编码方法 | 对URI进行编码/解码 |
---|---|
encodeURI(string) | 主要用于对整个URI编码, 不会对特殊字符进行编码。 |
encodeURIComponent(string) | 主要用于对URI中的某一段进行编码, 会对任何非标准字符进行编码。 |
decodeURI(string) | 只能对encodeURI()替换的字符进行解码 |
decodeURIComponent(string) | 用于对encodeURIComponent()编码过的字符进行解码, 可以解码任何特殊字符的编码 |
eval()方法
eval(“code”)接收一个参数, 即要执行的JavaScript字符串。通过eval()执行的代码, 与eval()自身所在的环境作用域是相同的。
在eval()中创建的任何变量和函数都不会得到变量提升。
严格模式下对eval赋值会导致错误, 在外部也访问不了eval()中创建的任何变量和函数。
Math对象
Math对象用于数学计算
Math对象的属性 | 一些数学计算中可能用到的特殊值 |
---|---|
Math.E |
常量e |
Math.PI |
即π, 圆周率 |
Math.LN10 |
10的自然对数 |
Math.SQRT1_2 |
的平方根 |
Math.SQRT2 |
2的平方根 |
Math对象的方法 | 数学计算的方法 |
---|---|
Math.max(Number+) | 接收多个数值参数, 返回其中的最大值 |
Math.min(Number+) | 接收多个数值参数, 返回其中的最小值 |
Math.ceil(Number) | 对参数进行向上舍入, 并返回。 |
Math.floor(Number) | 对参数进行向下舍入, 并返回。 |
Math.round(Number) | 对参数进行四舍五入, 并返回。 |
Math.random() | 返回大于等于0小于1的一个随机数(0≤x<1) 可以用 Math.random()*可能值的总数+初始值 来从某个范围内随机选择一个数如: Math.floor(Math.random()*9+2) 从2-10中选一个数 |
Math.abs(Number) | 返回绝对值 |
Math.exp(Number) | 返回e的number次幂 |
Math.pow(Number,power) | 返回number的power次幂 |
Math.sqrt(Number) | 返回number的平方根 |
Math.log(Number) | 返回number的自然对数 |
Math.sin(x) | 返回x的正弦值 |
Math.asin(x) | 返回x的反正弦值 |