《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 相关文章推荐
解决jquery1.9不支持browser对象的问题
Nov 13 Javascript
javascript 兼容各个浏览器的事件
Feb 04 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
Knockoutjs 学习系列(二)花式捆绑
Jun 07 Javascript
json对象与数组以及转换成js对象的简单实现方法
Jun 24 Javascript
JS交互点击WKWebView中的图片实现预览效果
Jan 05 Javascript
JS实现的DOM插入节点操作示例
Apr 04 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
Jul 18 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
Oct 09 Javascript
Jquery使用each函数实现遍历及数组处理
Jul 14 jQuery
微信小程序实现首页弹出广告
Dec 03 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 Rename 更改文件、文件夹名称
2011/05/24 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
php输出形式实例整理
2020/05/05 PHP
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
js TextArea的选中区域处理
2010/12/28 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
python 实现字符串下标的输出功能
2020/02/13 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
药物学专业学生的自我评价
2013/10/27 职场文书
校园报刊亭创业计划书
2014/01/02 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
女儿十岁生日答谢词
2014/01/27 职场文书
会务接待方案
2014/02/27 职场文书
个人银行贷款担保书
2014/04/01 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书