JavaScript高级程序设计,_javascript技巧_脚本之家
分类:pc28.am

2.8 引用类型 1、Object类 ECMAScript中的所有类都是由Object类继承而来。 Object类具有下列属性: Constructor:对创建对象的函数的引用,对于Object类,该指针指向原始的Object()函数 Prototype:对该对象的对象原型的引用。 Object类还有几个方法: HasOwnProperty:判断对象是否有某个特定的属性。必须用字符串指定该属性值 IsPrototypeOf:判断该对象是否为另一个对象的原型。 PropertyIsEnumerable:判断给定的属性是否可以用for...in语句进行枚举 ToString():返回对象的原始字符串表示。 ValueOf():返回最适合该对象的原始值。对于许多类,该方法返回的值都与toString()的返回值相同。 上面列出的每种属性和方法都会被其他类覆盖。 2、Boolean类 在ECMAScript中很少使用Boolean对象,因为不易理解,如: 复制代码 代码如下: var oFalseObject = new Boolean; var bResult= oFalseObject && true; //outpus true 在这段代码中,用false值创建Boolean对象,然后用这个值与原始值true进行 AND 操作。在Boolean运算中,false和true进行AND 操作的结果是 false。不过,在这行代码中,计算的是oFalseObject,而不是它的值false。在Boolean表达式中,所有对象都会被自动转换为true,所以结果为true。参考下面的代码: 复制代码 代码如下: var oFalseObject = new Boolean; var bResult= oFalseObject && true; //outpus true var bResult2= oFalseObject.valueOf() && true; //outpus false 3、Number类 Number的toString()方法在上篇文章中有详细的介绍。 Number有几个处理数值的专用方法: toFixed:返回的是具有指定位数小数的数字的字符串表示。参数范围为0—20 toExponential:返回的是用科学计数法表示的数字的字符串形式。与toFixed也有一个参数要输出的小数的位数。参数范围为0—20 toPrecision:根据最有意义的形式来返回数字的预定形式或指数形式。它有一个参数,即用于表示数字总数。参数最小为1 以上三个方法都会进行舍入操作。示例代码: 复制代码 代码如下: var oNumber=new Number; console.log; //outpus 99 console.log; //outpus 99.00 var oNumber1=new Number; console.log(oNumber1.toExponential; //outpus 1e 2 进行了舍入操作 console.log(oNumber1.toExponential; //outpus 9.9e 1 console.log(oNumber1.toExponential; //outpus 9.90e 1 var oNumber3=new Number; console.log(oNumber3.toPrecision; //outpus error precision 0 out of range console.log(oNumber3.toPrecision; //outpus 1e 2 进行了舍入操作 console.log(oNumber3.toPrecision; //outpus 99 console.log(oNumber3.toPrecision; //outpus 99.0 pc28.am,4、String类 String对象的valueOf方法都会返回String型的原始值: 复制代码 代码如下: var oStringObject=new String; console.log(oStringObject.valueOf() == oStringObject.toString;//outpus true String类具有length属性,它是字符串中的字符个数,双字节字符也算一个字符。 String类有大量的方法,主要介绍如下: charAt:返回字符串中单个字符。示例: 复制代码 代码如下: var oStringObject=new String; console.log(oStringObject.charAt;//outpus "H" console.log(oStringObject.charAt;//outpus "e" console.log(oStringObject.charAt;//outpus charCodeAt:返回字符串中单个字符代码。示例: 复制代码 代码如下: var oStringObject=new String; console.log(oStringObject.charCodeAt;//outpus "72" console.log(oStringObject.charCodeAt;//outpus "101" console.log(oStringObject.charCodeAt;//outpus NaN concat:把一个或多个字符串连接到String对象的原始值上。示例: 复制代码 代码如下: var oStringObject=new String; var sResult=oStringObject.concat; console.log;//outpus "String { 0="H", 1="e", 2="l", ...}" console.log;//outpus "Hello world Concat" alert;//outpus "Hello world" indexOf:返回指定的字符串在另一个字符串中的位置。 lastIndexOf:返回指定的字符串在另一个字符串中的位置。示例: 复制代码 代码如下: var oStringObject=new String; console.log(oStringObject.indexOf;//outpus 3 console.log(oStringObject.lastIndexOf;//outpus 9 localeCompare:对字符串进行排序,返回值是下列三个之一: A、如果String对象按照字母顺序排在参数中的字符串之前,返回负数 B、如果String对象等于参数中的字符串,返回0 C、如果String对象按照字母顺序排在参数中的字符串之后,返回正数 示例: 复制代码 代码如下: var oStringObject=new String; console.log(oStringObject.localeCompare; //outpus 1 console.log(oStringObject.localeCompare; //outpus 0 console.log(oStringObject.localeCompare; //outpus -1 slice、substring:从子串创建字符串值。第一个参数是要获取的子串的起始位置,第二个参数是要获取的子串终止前的位置,如果省略第二参数,终止位就默认为字符串长度。这两个方法都不改变String对象自身值。当参数为正时两个方法用法及返回值均相同,只有参数有负值时才不同。对于负参数,slice()方法会用字符串的长度加上参数,substring()将其做为0处理。另外如果有两个参数,第二个比第一个小时,slice会把较小的作为第一个参数。为示例: 复制代码 代码如下: var oStringObject=new String; console.log(oStringObject.slice; //outpus "lo World" console.log(oStringObject.substring; //outpus "lo World" console.log(oStringObject.slice; //outpus "lo W" console.log(oStringObject.substring; //outpus "lo W" console.log(oStringObject.slice; //outpus console.log(oStringObject.substring; //outpus "Hel" console.log(oStringObject.slice; //outpus "rld" console.log(oStringObject.substring; //outpus "Hello World" console.log(oStringObject.slice; //outpus "lo W" console.log(oStringObject.substring; //outpus "Hel" toLowerCase、toUpperCase:前两个用于把字符串转换为全小写,后两个用于把字符串转换为全大写。toLowerCase是原始方法,toLocaleLowerCase是基于特定区域实现的。示例: 复制代码 代码如下: var oStringObject=new String; console.log(oStringObject.toLowerCase; //outpus "hello world" console.log(oStringObject.toLocaleLowerCase; //outpus "hello world" console.log(oStringObject.toUpperCase; //outpus "HELLO WORLD" console.log(oStringObject.toLocaleUpperCase; //outpus "HELLO WORLD" 5、instanceof运算符 在使用typeof运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回"object"。ECMAScript引入了另一个运算符 instanceof 来解决这个问题。 instanceof运算符与typeof运算符相似,用于识别正在处理的对象的类型。与typeof方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型。示例: 复制代码 代码如下: var oStringObject=new String; alert(oStringObject instanceof String); //outpus "true"

一、类型转换

1.转换成字串 ECMAScript的Boolean值、数字和字串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。 如: 复制代码 代码如下:var sColor = "blue";alert;//outputs "4"总而言之,3种主要的原始值Boolean值、数字和字串都有toString()方法。ECMAScript定义的所有对象都有toString()方法,无论它是伪对象,还是真的对象。

Boolean型的toString()方法只是输出"true"或"false",结果由变量的值决定: 复制代码 代码如下:var bFound = false;alert;//outputs "false"Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式,采用默认模式,toString()方法只是用相应的字符串输出数字值。 复制代码 代码如下:var iNum1 = 10;var fNum2 = 10.0;alert; //outputs "10"alert; //outputs "10"采用Number类型的toString输出数字。 复制代码 代码如下:var iNum = 10;alert; //outputs "1010"alert; //outputs "12"alert; //outputs "A"2.转换成数字 ECMAScript提供了两种把非数字的原始值转换成数字的方法,即parseInt。 注意:只有对String类型调用这些方法,才能正确运行对其他类型返回的都是NaN。

例如: 复制代码 代码如下:var iNum1 = parseInt;//returns 1234var iNum2 = parseInt; //returns 10var iNum3 = parseInt; //returns 22var iNum4 = parseInt; //returns NaNparseInt()方法还有基模式,可以把二进制、八进制、十六进制或者其他任何进制的字符串转换成十进制整数。第二个参数指定按哪一种进制来解析。 复制代码 代码如下:var iNum1 = parseInt;// returns 175var iNum2 = parseInt; // returns 2var iNum3 = parseInt; //returns 8var iNum4 = parseInt; //returns 10说明:如果十进制数包含前导0,那么最好采用基数10,否则得到的是八进制的值。 复制代码 代码如下:var iNum1 = parseInt; // returns 8var iNum2 = parseInt; //returns 8var iNum3 = parseInt;//returns 10parseFloat方法的处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字符之前的字串转换成数字。对于这个方法来说,第一个出现的小数点是有效字符。如果用两个小数点,第二个小数点将被看作无效的。使用该方法的另一个不同之处在于,字串必须以十进制形式表示浮点数。 复制代码 代码如下:var fNum1 = parseFloat; //returns 1234.0var fNum2 = parseFloat; //returns NaNvar fNum3 = parseFloat; //returns 22.5var fNum4 = parseFloat;//returns 22.34var fNum5 = parseFloat;//returns NaNvar fNum6 = parseFloat;//returns NaN3.强制类型转换 ECMAScript中可用的3种强制类型转换如下:

把给定的值转换成Boolean型。 当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。 如: 复制代码 代码如下:var b1 = Boolean; // false;var b2 = Boolean;//truevar b3 = Boolean;//truevar b4 = Boolean;//falsevar b5 = Boolean;//falsevar b6 = Boolean;//true 把给定的值转换成数字。 还记得parseInt方法只转换第一个无效字符之前的字符串,因此"4.5.6"将被转换为"4.5"。用Number()进行强制类型转换,"4.5.6"将返回NaN,因为整个字符串值不能转换成数字。如果字符串能被完整地转换,Number方法还是调用parseFloat()方法。 如: 复制代码 代码如下:Number;//0Number;//1Number;//NaNNumber;//0Number;//5.5Number;//56Number;//NaNNumber;//NaNNumber.String 把给定的值转换成字串。 与调用toString()方法的唯一不同之处在于,对null或undefined值强制类型转换可以生成字符串而不引发错误: 复制代码 代码如下:var s1 = String;//"null"var oNull = null;var s2 = oNull.toString();//causes an error二、引用类型 引用类型通常叫作类,也就是说,遇到引用值时,所处理的就是对象。ECMAScript定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。

1.Object类 ECMAScript中的所有类都由这个类继承而来,Object类中的所有属性和方法都会出现在其他类中。

Object类的属性:

.Constructor----对创建对象的函数的引用。对于Object类,该指针指向原始的object.Prototype----对该对象的对象原型的引用。对于所有的类,它默认返回Object对象的一个实例。

Object类的方法:

.HasOwnProperty----判断对象是否有某个特定的属性。必须用字符串指定该属性(例如:o.hasOwnProperty.IsPrototypeOf----判断该对象是否为另一个对象的原型。

.PropertyIsEnumerable----判断给定的属性是否可以用for..in语句进行枚举。

----返回对象的原始字符串表示。不同的ECMAScript实现具有不同的值。

----返回最适合该对象的原始值。对于许多类,该方法返回的值都与toString()的返回值相同。

2.Boolean类 在ECMAScript中很少使用Boolean对象,即使使用,也不易理解。 例如: 复制代码 代码如下:var oFalseObject = new Boolean;var bResult = oFalseObject && true;//outputs true;原因:在Boolean表达式中,所有对象都会被自动转换为true。

3.Number类 Number.MAX_VALUE等等特殊值都Number类的静态属性。要得到数字对象的Number原始值,只需要使用valueOf()方法: var iNumber = oNumberObject.valueOf(); 除从Object类继承的标准方法外,Number类还有几个处理数值的专用方法。

toFixed()方法: 返回的是具有指定位数小数的数字的字符串表示。方法能表示具有0到20位小数的数字,超出这个范围的值会引发错误。 如: 复制代码 代码如下:var oNumberObject = new Number;aler(oNumberObject.toFixed;//outputs "99.00"toExponential()方法: 返回的是用科学记数法表示的数字的字符串形式。该方法也有一个参数,指定要输出的小数的位数。例如:复制代码 代码如下:var oNumberObj = new Number;alert(oNumberObj.toExponential;//outputs "9.9e 1"toPrecision()方法: 根据最有意义的形式来返回数字的预定形式或指数形式。它有一个参数,即用于表示数的数字总数。 复制代码 代码如下:var oNumberObj = new Number;alert(oNumberObj.toPrecision;//outputs "1e 2" ==100可以看出,toPrecision()方法会对数进行舍入,从而得到尽可能接近真实值的数。 如:复制代码 代码如下:var oNumberObj = new Number;alert(oNumberObj.toPrecision;// outputs "99"alert(oNumberObj.toPrecision;// outputs "99.0"toFixed和toPrecision()方法都会进行舍入操作,以便用正确的小数位数正确地表示一个数。

toLocaleString()方法: 可以在页面上格式显示,如5210.50显示为5,210.50,但是如果在使用其值时,应该用parseFloat.value.replace;的形式替换掉逗号,后得到其值。

注意:与Boolean对象相似,Number对象也很重要,不过应该少用这种对象,以避免发生潜在的问题。只要可能,都使用数字的原始表示法。

4.String类 String对象的valueOf方法都会返回String型的原始值: 复制代码 代码如下:alert == oStringObj.toString;//outputs "true"String类具有属性length,它是字符串的字符个数: 复制代码 代码如下:var oStringObj = new String;alert;outputs "11"注意:即使字符串包含双字节的字符,每个字符也只算一个字符。

charAt()方法: 返回的是包含指定位置处的字符的字符串: 复制代码 代码如下:var oStringObj = new String;alert;outputs "e"charCodeAt()方法: 返回的是包含指定位置处的字符代码的字符串: 复制代码 代码如下:var oStringObj = new String;alert(oStringObj.charCodeAt;outputs "101"concat()方法: 用于把一个或多个字符串连接到String对象的原始值上。原String对象不变。复制代码 代码如下:var oStringObj = new String;var sResult = oStringObj.concat;//oStringObj "world";更常见alert;//outputs "hello world"alert;//outputs "hello"indexOf方法返回的都是指定的子串在另一个字符串中的位置。这两个方法的不同之处大于,indexOf开始检索子串,而lastIndexOf()则是从字串的结尾开始检索子串的。

localeCompare(),对字符串进行比较。该方法有一个参数--要进行比较的字符串,返回的是下列3个值之一: 1.如果String对象按照字母顺序排在参数中的字符串之前,返回负数(最常见的是-1,不过真正的返回由实现决定的)。 2.如果String对象等于参数中的字符串,返回0。 3.如果String对象按照字母顺序排在参数中的字符串之后,返回正数

slice方法: 这两个方法返回的都是要处理的字符串的子串,都接受一个或两个参数。第一个参数是要获取的子串的起始位置,第二个参数是要获取子串终止前的位置。如果省略第二个参数,终止位就默认为字符串的长度。这两个方法都不改变String对象自身的值。 复制代码 代码如下:var oStringObj = new String;alert;//outputs "lo world"alert);//outputs "lo w"注意:对于负数参数,slice()方法会用字符串的长度加上参数,substring。 复制代码 代码如下:var oStringObj = new String;alert;//outputs "rld"相当于反向取alert(oStringObj.substring;//outputs "hello world"alert(oStringObj.slice;//outputs "lo w"alert(oStringObj.substring;//outputs "hel" substring()总是把较小的数字作为起始位,较大的数字作为终止位。toLowerCase、toUpperCase: 前两种方法把字符串转换成全小写的,后两种方法用于把字符串转换成全大写的。toLocalLowerCase方法是基于特定区域实现的。

记住:String类的所有属性和方法都可应用于String原始值上,因为它们是伪对象。

5.instanceof运算符 在使用typeof运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回"object"。instanceof方法要示开发者明确地确认对象为某特定类型。如: 复制代码 代码如下:var oStrObj = new String; alert(oStrObj instanceof String);//outputs "true"

本文由pc28.am发布于pc28.am,转载请注明出处:JavaScript高级程序设计,_javascript技巧_脚本之家

上一篇:JavaScript高档程序设计,类型调换何奇之有方法小 下一篇:没有了
猜你喜欢
热门排行
精彩图文