《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 相关文章推荐
使用Jquery来实现可以输入值的下拉选单 雏型
Dec 06 Javascript
再谈javascript面向对象编程
Mar 18 Javascript
Javascript Throttle & Debounce应用介绍
Mar 19 Javascript
JS 去除Array中的null值示例代码
Nov 20 Javascript
asm.js使用示例代码
Nov 28 Javascript
js控制容器隐藏出现防止样式变化的两种方法
Apr 25 Javascript
JS数组的遍历方式for循环与for...in
Jul 31 Javascript
JavaScript严格模式禁用With语句的原因
Oct 20 Javascript
微信小程序 教程之事件
Oct 18 Javascript
详解vue嵌套路由-query传递参数
May 23 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
Aug 31 Javascript
使用react+redux实现计数器功能及遇到问题
Jun 02 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 auth_http类库进行身份效验
2009/03/19 PHP
彻底杜绝PHP的session cookie错误
2009/08/09 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
JS中Location使用详解
2015/05/12 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
python3.5仿微软计算器程序
2020/03/30 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python 中迭代器与生成器实例详解
2017/03/29 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
Python API len函数操作过程解析
2020/03/05 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
linux面试题参考答案(7)
2012/10/29 面试题
海上钢琴师观后感
2015/06/03 职场文书
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
python内置进制转换函数的操作
2021/06/02 Python
微信小程序实现轮播图指示器
2022/06/25 Javascript
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle