常用内置对象.docx
《常用内置对象.docx》由会员分享,可在线阅读,更多相关《常用内置对象.docx(14页珍藏版)》请在冰豆网上搜索。
![常用内置对象.docx](https://file1.bdocx.com/fileroot1/2023-1/10/94d68a86-ad27-48a6-bef1-cf2a072ef44d/94d68a86-ad27-48a6-bef1-cf2a072ef44d1.gif)
常用内置对象
4.常用内置对象
4.1.JavaScript对象概述
4.1.1.什么是JavaScript对象
JavaScript中的所有事物都是对象,比如字符串、数字、数组、日期等。
对象是拥有属性和方法的数据。
比如,我们声明如下变量:
vartxt="Hello";
上述代码运行时,实际上已经创建了一个JavaScript字符串对象,字符串对象拥有属性和方法。
比如,可以使用属性length获取字符串的长度(对于上面的字符串来说,length的值是5),也可以使用方法来操作字符串。
4.1.2.使用对象
1、访问属性
访问对象属性的语法是:
objectName.propertyName
比如,对于String对象,可以使用length属性来查找字符串的长度,代码如下所示:
varmessage="HelloWorld!
";
varx=message.length;
在以上代码执行后,x的值是12。
2、调用方法
还可以通过下面的语法调用方法:
objectName.methodName()
比如,可以使用String对象的toUpperCase()方法来把文本转换为大写:
varmessage="Helloworld!
";
varx=message.toUpperCase();
在以上代码执行后,x的值是:
HELLOWORLD!
4.1.3.常用内置对象
因为JavaScript中的所有事物都是对象,我们可以把JavaScript中的对象分为三类:
简单对象:
String、Number、Boolean
组合对象:
Array、Math、Date
复杂对象:
Function、Regex、Object等
4.2.String对象
4.2.1.String对象
创建String对象时,可以直接定义字符串类型的变量,或者创建一个String对象。
代码如下所示:
varstr1="helloworld";
varstr2=newString("helloword");
上述代码中,变量str1和str2都是String对象。
可以使用length属性来获取字符串的长度,代码如下所示:
alert(str1.length);
4.2.2.String对象的常用方法
String类定义了大量操作字符串的方法,例如从字符串中提取字符或子串,或者检索字符或子串。
需要注意的是,JavaScript的字符串是不可变的,String类定义的方法都不能改变字符串的内容。
像String.toUpperCase()这样的方法,返回的是全新的字符串,而不是修改原始字符串。
String对象的常用方法有:
∙x.toLowerCase()、x.toUpperCase():
大小写转换方法;
∙x.charAt(index):
返回指定位置的字符;
∙x.charCodeAt(index):
返回指定位置字符的Unicode编码;
∙x.indexOf(findstr,index)、x.lastIndexOf(findstr,index):
获取指定字符;
∙lastIndexOf(str),最后一次出现的位置,没有就返回-1
∙x.substr(start[,length])截去字符串
∙x.substring(start,end):
获取子字符串;不包含结束位
∙x.replace(findstr,tostr):
替换子字符串;只更换第一个,建议使用正则表达式进行更换
∙x.replace(/xxx/g,’p’);正则表达式g:
全局:
设置为全部更换
∙x.split(bystr):
拆分子字符串。
∙x.replace(regExp,replacement),字符替换
4.2.3.String对象与正则表达式
String对象的replace、split、search和match方法经常结合正则表达式使用,以实现更为复杂的功能。
比如,查看如下代码:
varstr1="abc123def";
varstr2=str1.replace(/\d/gi,"*");
alert(str2);//abc***def
vararray=str1.match(/\d/g);
alert(array.toString());//1,2,3
varindex=str1.search(/\d/);
alert(index);//3
上述代码中,“/\d/g“是一个正则表达式,结合string对象的replace方法使用,将替换所有的数字;而match方法将返回所有的数字所组成的数组;search方法将返回复合条件的第一个子字符串的位置。
4.3.Array对象
4.3.1.Array对象
Array对象用于在单个的变量中存储多个值。
创建Array对象的语法如下所示:
newArray();
var数组名称=[值,……];
如果调用构造函数Array()时没有使用参数,那么返回的数组为空,length字段为0。
也可以在创建数组时,指明数组的长度,语法如下所示:
newArray(size);
其中,参数size是期望的数组元素个数,所返回数组的length字段将被设为size的值。
此时,将返回具有指定个数、元素为undefined的数组。
还可以在创建数组时,直接初始化数组元素,语法如下所示:
newArray(element0,element1,...,elementn);
其中,参数element...,elementn是参数列表,用于在创建数组时直接初始化数组元素,数组的length字段也会被设置为参数的个数。
也可以直接使用简写的方式创建并初始化数组,代码如下所示:
vararr=[12,true,”aaa”];
需要注意的是,JavaScript本身是一种弱类型的语言,因此,在数组中,也可以存入不同数据类型的数值。
join([连接符1]),将数组成员拼接成字符串
4.3.2.创建二维数组
通过指定数组中的元素为数组的方式可以创建二维甚至多维数组。
查看如下代码:
varcnweek=newArray(7);
for(vari=0;i<=6;i++){
cnweek[i]=newArray
(2);
}
cnweek[0][0]="星期日";
cnweek[0][1]="Sunday";
cnweek[1][0]="星期一";
cnweek[1][1]="Monday";
...
cnweek[6][0]="星期六";
cnweek[6][1]="Saturday";
上述代码将创建一个二维数组,如图-2所示:
图-2
4.3.3.Array对象的常用方法
Array对象定义了大量方法,用于操作数组及数组中的元素。
1、join()方法
join()方法用于把数组中的所有元素放入一个字符串,元素是通过指定的分隔符进行分隔的。
语法如下:
arrayObject.join(separator)
其中,参数separator可选,表示要使用的分隔符。
如果省略该参数,则使用逗号作为分隔符。
该方法返回一个字符串。
该字符串是通过把arrayObject的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入separator字符串而生成的。
2、toString()方法
toString()方法可把数组转换为字符串,并返回结果。
此方法与没有参数的join()方法返回相同的字符串。
需要注意的是,当数组用于字符串环境时,JavaScript会调用这一方法将数组自动转换成字符串。
但是在某些情况下,需要显式地调用该方法。
3、concat()方法
concat()方法用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
语法如下:
arrayObject.concat(arrayX,arrayX,......,arrayX)
其中,参数arrayX必需,该参数可以是具体的值,也可以是数组对象。
可以是任意多个。
该方法返回一个新的数组,新数组是通过把所有arrayX参数添加到arrayObject中生成的。
如果要进行concat()操作的参数是数组,那么添加的是数组中的元素,而不是数组。
4、slice()方法
slice()方法可从已有的数组中返回选定的元素。
语法为:
arrayObject.slice(start,end)
其中,参数start必须,规定从何处开始选取。
如果是负数,那么它规定从数组尾部开始算起的位置。
也就是说,-1指最后一个元素,-2指倒数第二个元素,以此类推。
参数end可选,规定从何处结束选取。
该参数是数组片断结束处的数组下标。
如果没有指定该参数,那么切分的数组包含从start到数组结束的所有元素。
如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
slice()方法返回一个新的数组,包含从start到end(不包括该元素)的arrayObject中的元素。
请注意,该方法并不会修改数组,而是返回一个子数组。
如果想删除数组中的一段元素,应该使用方法Array.splice()。
4.3.4.数组倒转与排序
1、reverse()方法
reverse()方法用于颠倒数组中元素的顺序。
语法为:
arrayObject.reverse()
注意:
该方法会改变原来的数组,而不会创建新的数组。
2、sort()方法
sort()方法用于对数组的元素进行排序。
语法为:
arrayObject.sort(sortby)
其中,参数sortby可选,用于规定排序的顺序,必须是函数。
该方法返回对数组的引用,即,数组在原数组上进行排序,不生成副本。
需要注意的是,如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。
比较函数应该具有两个参数a和b,其返回值如下:
若a小于b,在排序后的数组中a应该出现在b之前,则返回一个小于0的值。
若a等于b,则返回0。
若a大于b,则返回一个大于0的值。
4.4.Math对象
4.4.1.Math对象
Math对象用于执行数学任务,使用Math对象的属性和方法的语法如下所示:
varpi_value=Math.PI;
varsqrt_value=Math.sqrt(15);
由上述代码可以看出,Math对象并不像String那样是对象的类,因此没有构造函数Math(),像Math.sin()这样的函数只是函数,不是某个对象的方法。
因此,在使用Math对象时,无需创建它,通过把Math作为对象使用就可以调用其所有属性和方法。
4.4.2.Math对象的常用属性和方法
Math对象的常用属性都是数学常数,如Math.E(自然数)、Math.PI(圆周率)、Math.LN2(ln2)、Math.LN10(ln10)等。
Math对象的方法也都是和数学相关的方法,比如:
Math.ceil(number),进一取整,Math.floor(number),舍一取整
Math.pow()幂运算,Math.sqrt()开放:
开平方,Math.round()四舍五入,只保留到整数位,Math.random()
∙三角函数:
Math.sin(x)、Math.cos(x)、Math.tan(x)等;
∙反三角函数:
Math.asin(x)、Math.acos(x)等;
∙计算函数:
Math.sqrt(x)、Math.log(x)、Math.exp(x)等;
∙数值比较函数:
Math.abs(x)、Math.max(x,y,...)、Math.random()、Math.round(x)等。
4.5.Number对象
4.5.1.Number对象
Number对象是原始数值的包装对象。
创建Number对象的语法如下:
varmyNum=newNumber(value);
varmyNum=Number(value);
其中,参数value是要创建的Number对象的数值,或是要转换成数字的值。
当Number()和运算符new一起作为构造函数使用时,它返回一个新创建的Number对象。
如果不用new运算符,把Number()作为一个函数来调用,它将把自己的参数转换成一个原始的数值,并且返回这个值(如果转换失败,则返回NaN)。
4.5.2.Number对象的常用方法
1、toString()方法
用于把一个Number对象转换为一个字符串,并返回结果。
语法为:
NumberObject.toString(radix)
其中,参数radix可选,规定表示数字的基数,使2~36之间的整数。
若省略该参数,则使用基数10。
但是要注意,如果该参数是10以外的其他值,则ECMAScript标准允许实现返回任意值。
例如,当radix为2时,NumberObject会被转换为二进制值表示的字符串。
当调用该方法的对象不是Number时抛出TypeError异常。
2、toFixed()方法
toFixed()方法可把Number四舍五入为指定小数位数的数字。
语法为:
NumberObject.toFixed(num)
其中,参数num必须,表示规定小数的位数,是0~20之间的值,包括0和20,有些实现可以支持更大的数值范围。
如果省略了该参数,将用0代替。
该方法返回NumberObject的字符串表示,不采用指数计数法,小数点后有固定的num位数字。
如果必要,该数字会被舍入,也可以用0补足,以便它达到指定的长度。
如果num大于le+21,则该方法只调用NumberObject.toString(),返回采用指数计数法表示的字符串。
当num太小或太大时抛出异常RangeError。
0~20之间的值不会引发该异常。
有些实现支持更大范围或更小范围内的值。
当调用该方法的对象不是Number时抛出TypeError异常。
1.常用内置对象
1.1.正则表达式对象
1.1.1.RegExp对象概述
RegExp对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
创建正则表达式对象有两种方式:
直接量语法:
1./pattern/attributes
创建RegExp对象的语法:
1.newRegExp(pattern,attributes);
其中,参数pattern是一个字符串,指定了正则表达式的模式或其他正则表达式;参数attributes是一个可选的字符串,包含属性"g"、"i"和"m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。
如果pattern不是合法的正则表达式,或attributes含有"g"、"i"和"m"之外的字符,则会抛出异常。
1.1.2.RegExp对象的常用方法
正则表达式对象在JavaScript中,除了可以配合String对象的split/replace/search/match方法使用之外,还可以使用正则表达式对象自身的方法,实现对文本字符串的匹配测试。
正则表达式对象最常用的方法就是test()。
该方法用于检测一个字符串是否匹配某个模式,语法如下:
1.RegExpObject.test(string)
其中,参数string必须,表示要检测的字符串。
该方法返回bool类型的数据,表示所检测的字符串是否匹配正则表达式。
如果字符串string中含有与RegExpObject匹配的文本,则返回true,否则返回false。
比如,查看如下代码:
1.varstr="VisitW3School";
2.varpatt1=newRegExp("W3School");
3.varresult=patt1.test(str);
4.alert(result);
result的值为true。
1.2.Date对象
1.2.1.Date对象
Date对象用于处理日期和时间。
创建Date对象的语法如下:
1.varmyDate=newDate()
使用上述代码创建Date对象时,会自动把当前日期和时间保存为其初始值。
也可以在创建Date对象时,指定其日期和时间,代码如下所示:
1.varnowd2=newDate("2014/3/2011:
12");
1.2.2.Date对象的常用方法
Date对象的常用方法分为三种:
getMonth();获取月0-11月(美国人习惯)所以要加1
getHours()
getMinutes();
1、获取日期数据
getDate()获取日期、getDay()获取的是星期的第几天0为星期天、getFullYear()获取年等。
setMilliseconds()
2、修改日期数据
setDate()、setDay()、setFullYear()等。
3、获取日期格式的字符串
toString()、toLocaleTimeString()、toLocaleDateString()等。
1.3.Function对象
1.3.1.函数与Function对象
函数是定义一次却可以调用或执行任意多次的一段JavaScript代码。
在JavaScript中,函数实际上是功能完整的对象,Function类可以表示开发者定义的任何函数。
1.3.2.函数的定义
函数就是包裹在花括号中的代码块,前面使用了关键词function,语法如下:
1.functionfunctionname()
2.{
3.这里是要执行的代码
4.}
当调用该函数时,会执行函数内的代码。
可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由JavaScript在任何位置进行调用。
需要注意的是,JavaScript对大小写敏感。
关键词function必须是小写的,并且必须以与函数名称相同的大小写来调用函数。
也可以声明带有参数的函数,语法如下:
1.functionmyFunction(var1,var2)
2.{
3.这里是要执行的代码
4.}
如果希望定义有返回值的函数,则使用return语句。
在使用return语句时,函数会停止执行,并返回指定的值。
1.3.3.函数的调用
在调用函数时,可以向其传递值,这些值被称为参数。
可以发送任意多的参数,由逗号(,)分隔,语法如下:
1.myFunction(argument1,argument2);
调用方法时,变量和参数必须以一致的顺序出现。
第一个变量就是第一个被传递的参数的给定的值,以此类推。
比如,查看如下代码:
1.functionmyFunction(x)
2.{
3.vary=x*x;
4.returny;
5.}
上述代码声明的函数,有参数,且有返回值。
可以使用如下代码调用该函数:
1.varmyVar=myFunction(5);
myVar变量的值是25,也就是函数"myFunction()"所返回的值。
1.3.4.arguments对象
在函数代码中,使用特殊对象arguments可以访问函数的参数。
即,开发者在定义函数时,无需明确的为方法声明参数,也可以在方法体中使用arguments来访问参数。
这是因为,arguments是一种特殊对象,在函数代码中,表示函数的参数数组。
正因为arguments表示参数组成的数组,因此,首先可以使用arguments.length检测函数的参数个数,其次,可以通过下标(arguments[index])来访问某个参数。
这样,可以用arguments对象判断传递给函数的参数个数并获取参数,从而模拟函数重载。
例如,在函数sayHi()中,第一个参数是message。
用arguments[0]也可以访问这个值,即第一个参数的值(第一个参数位于位置0,第二个参数位于位置1,依此类推)。
因此,无需明确命名参数,就可以重写函数:
1.functionsayHi(){
2.if(arguments[0]=="bye"){
3.return;
4.}
5.
6.alert(arguments[0]);
7.}
1.3.5.使用Function对象创建函数
用Function类直接创建函数的语法如下:
1.varfunction_name=newFunction(arg1,arg2,...,argN,function_body);
在上面的形式中,每个arg都是一个参数,最后一个参数是函数主体(要执行的代码)。
这些参数必须是字符串。
假如有函数如下所示:
1.functionsayHi(sName,sMessage){
2.alert("Hello"+sName+sMessage);
3.}
还可以这样定义它:
1.varsayHi=
2.newFunction("sName","sMessage","alert(\"Hello\"+sName+sMessage);");
虽然由于字符串的关系,这种形式写起来有些困难,但有助于理解函数只不过是一种引用类型,它们的行为与使用function关键字明确创建的函数行为是相同的。
请看下面这个例子:
1.functiondoAdd(iNum){
2.alert(iNum+20);
3.}
4.
5.functiondoAdd(iNum){
6.alert(iNum+10);
7.}
8.
9.doAdd(10); //输出"20"
因为在JavaScript中,同名的方法会被覆盖,因此,调用doAdd(10)输出了"20",而不是"30"。
如果以下面的形式重写该代码块,这个概念就清楚了:
1.vardoAdd=newFunction("iNum","alert(iNum+20)");
2.vardoAdd=newFunction("iNum","alert(iNum+10)");
3.doAdd(10);
请观察这段代码,很显然,doAdd的值被改成了指向不同对象的指针。
函数名只是指向函数对象的引用值,行为就像其他对象一样。
甚至可以使两个变量指向同一个函数:
1.var