《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型


Posted in Javascript onFebruary 27, 2012

2.8 引用类型

1、Object类

ECMAScript中的所有类都是由Object类继承而来。

Object类具有下列属性:

Constructor:对创建对象的函数的引用(指针),对于Object类,该指针指向原始的Object()函数

Prototype:对该对象的对象原型的引用。

Object类还有几个方法:

HasOwnProperty(property):判断对象是否有某个特定的属性。必须用字符串指定该属性值

IsPrototypeOf(object):判断该对象是否为另一个对象的原型。

PropertyIsEnumerable(property):判断给定的属性是否可以用for...in语句进行枚举

ToString():返回对象的原始字符串表示。

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

上面列出的每种属性和方法都会被其他类覆盖。

2、Boolean类

在ECMAScript中很少使用Boolean对象,因为不易理解,如:

var oFalseObject = new Boolean(false); 
var bResult= oFalseObject && true; //outpus true

在这段代码中,用false值创建Boolean对象,然后用这个值与原始值true进行 AND 操作。在Boolean运算中,false和true进行AND 操作的结果是 false。不过,在这行代码中,计算的是oFalseObject,而不是它的值false。在Boolean表达式中,所有对象都会被自动转换为true,所以结果为true。参考下面的代码:

var oFalseObject = new Boolean(false); 
var bResult= oFalseObject && true; //outpus true 
var bResult2= oFalseObject.valueOf() && true; //outpus false

3、Number类

Number的toString()方法在上篇文章中有详细的介绍。

Number有几个处理数值的专用方法:

toFixed(参数):返回的是具有指定位数小数的数字的字符串表示。参数范围为0—20

toExponential(参数):返回的是用科学计数法表示的数字的字符串形式。与toFixed()方法相似,toExponential()也有一个参数要输出的小数的位数。参数范围为0—20

toPrecision(参数):根据最有意义的形式来返回数字的预定形式或指数形式。它有一个参数,即用于表示数字总数(不包括指数)。参数最小为1

以上三个方法都会进行舍入操作。示例代码:

var oNumber=new Number(99); 
console.log(oNumber.toFixed(0)); //outpus 99 
console.log(oNumber.toFixed(2)); //outpus 99.00 var oNumber1=new Number(99); 
console.log(oNumber1.toExponential(0)); //outpus 1e+2 进行了舍入操作 
console.log(oNumber1.toExponential(1)); //outpus 9.9e+1 
console.log(oNumber1.toExponential(2)); //outpus 9.90e+1 
var oNumber3=new Number(99); 
console.log(oNumber3.toPrecision(0)); //outpus error precision 0 out of range 
console.log(oNumber3.toPrecision(1)); //outpus 1e+2 进行了舍入操作 
console.log(oNumber3.toPrecision(2)); //outpus 99 
console.log(oNumber3.toPrecision(3)); //outpus 99.0

4、String类

String对象的valueOf()方法和toString()方法都会返回String型的原始值:

var oStringObject=new String("Hello world"); 
console.log(oStringObject.valueOf() == oStringObject.toString());//outpus true

String类具有length属性,它是字符串中的字符个数,双字节字符也算一个字符。

String类有大量的方法,主要介绍如下:

charAt(整型参数):返回字符串中单个字符。示例:

var oStringObject=new String("Hello world"); 
console.log(oStringObject.charAt(0));//outpus "H" 
console.log(oStringObject.charAt(1));//outpus "e" 
console.log(oStringObject.charAt(11));//outpus (an empty string)

charCodeAt(整型参数):返回字符串中单个字符代码。示例:

var oStringObject=new String("Hello world"); 
console.log(oStringObject.charCodeAt(0));//outpus "72" 
console.log(oStringObject.charCodeAt(1));//outpus "101" 
console.log(oStringObject.charCodeAt(11));//outpus NaN

concat(字符串):把一个或多个字符串连接到String对象的原始值上。示例:

var oStringObject=new String("Hello world"); 
var sResult=oStringObject.concat(" Concat"); 
console.log(oStringObject);//outpus "String { 0="H", 1="e", 2="l", ...}" 
console.log(sResult);//outpus "Hello world Concat" 
alert(oStringObject);//outpus "Hello world"

indexOf(字符串):返回指定的字符串在另一个字符串中的位置(从字符串的开头进行检索)。

lastIndexOf(字符串):返回指定的字符串在另一个字符串中的位置(从字符串的结尾进行检索)。示例:

var oStringObject=new String("Hello Hello"); 
console.log(oStringObject.indexOf("lo"));//outpus 3 
console.log(oStringObject.lastIndexOf("lo"));//outpus 9

localeCompare(字符串):对字符串进行排序,返回值是下列三个之一:

A、如果String对象按照字母顺序排在参数中的字符串之前,返回负数(通常是-1,但真正返回值由具体实现决定)

B、如果String对象等于参数中的字符串,返回0

C、如果String对象按照字母顺序排在参数中的字符串之后,返回正数(通常是1,但真正返回值由具体实现决定)

示例:

var oStringObject=new String("Hello"); 
console.log(oStringObject.localeCompare("aello")); //outpus 1 
console.log(oStringObject.localeCompare("Hello")); //outpus 0 
console.log(oStringObject.localeCompare("zello")); //outpus -1

slice(整型参数[,整型参数])、substring(整型参数[,整型参数]):从子串创建字符串值。第一个参数是要获取的子串的起始位置,第二个参数是要获取的子串终止前的位置,如果省略第二参数,终止位就默认为字符串长度。这两个方法都不改变String对象自身值。当参数为正时两个方法用法及返回值均相同,只有参数有负值时才不同。对于负参数,slice()方法会用字符串的长度加上参数,substring()将其做为0处理。另外如果有两个参数,第二个比第一个小时,slice()返回的值为空,substring()会把较小的作为第一个参数。为示例:

var oStringObject=new String("Hello World"); 
console.log(oStringObject.slice(3)); //outpus "lo World" 
console.log(oStringObject.substring(3)); //outpus "lo World" 
console.log(oStringObject.slice(3,7)); //outpus "lo W" 
console.log(oStringObject.substring(3,7)); //outpus "lo W" 
console.log(oStringObject.slice(3,0)); //outpus (an empty string) 
console.log(oStringObject.substring(3,0)); //outpus "Hel" console.log(oStringObject.slice(-3)); //outpus "rld" 
console.log(oStringObject.substring(-3)); //outpus "Hello World" 
console.log(oStringObject.slice(3,-4)); //outpus "lo W" 
console.log(oStringObject.substring(3,-4)); //outpus "Hel"

toLowerCase()、toLocaleLowerCase()、toUpperCase()、toLocaleUpperCase():前两个用于把字符串转换为全小写,后两个用于把字符串转换为全大写。toLowerCase()跟toUpperCase()是原始方法,toLocaleLowerCase()跟toLocaleUpperCase()是基于特定区域实现的。示例:

var oStringObject=new String("Hello World"); 
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("hello world"); 
alert(oStringObject instanceof String); //outpus "true"
Javascript 相关文章推荐
用Javascript数组处理多个字符串的连接问题
Aug 20 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
Oct 31 Javascript
node.js中的console用法总结
Dec 15 Javascript
jquery滚动特效集锦
Jun 03 Javascript
jquery+css实现动感的图片切换效果
Nov 25 Javascript
vue2.0 常用的 UI 库实例讲解
Dec 12 Javascript
JavaScript实现计算多边形质心的方法示例
Jan 31 Javascript
JavaScript设计模式之代理模式简单实例教程
Jul 03 Javascript
vue权限问题的完美解决方案
May 08 Javascript
vue登录注册实例详解
Sep 14 Javascript
vue实现前端分页完整代码
Jun 17 Javascript
关于JavaScript数组去重的一些理解汇总
Sep 10 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
Feb 27 #Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 #Javascript
JavaScript 代码压缩工具小结
Feb 27 #Javascript
根据邮箱的域名跳转到相应的登录页面的代码
Feb 27 #Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
Feb 27 #Javascript
jQuery学习笔记之控制页面实现代码
Feb 27 #Javascript
JQuery获取浏览器窗口内容部分高度的代码
Feb 24 #Javascript
You might like
PHP 实现判断用户是否手机访问
2015/01/21 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
基于jquery & json的省市区联动代码
2012/06/26 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
python字符串的方法与操作大全
2018/01/30 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
python实现四人制扑克牌游戏
2020/04/22 Python
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
百思买美国官网:Best Buy
2016/07/28 全球购物
英国行业制服供应商:Alexandra
2019/09/14 全球购物
超市业务员岗位职责
2013/12/05 职场文书
银行个人求职自荐信范文
2013/12/16 职场文书
运动会表扬稿大全
2014/01/16 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
庆元旦演讲稿
2014/09/15 职场文书
个人委托书怎么写
2014/09/17 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
Redis入门教程详解
2021/08/30 Redis
MySQL多表查询机制
2022/03/17 MySQL
SQL Server中锁的用法
2022/05/20 SQL Server