JavaScript高级程序设计(第3版)学习笔记11 内建js对象


Posted in Javascript onOctober 11, 2012

内建对象就好比是JDK中的类库,开发者可以直接拿来使用,这极大的方便了常见的编程任务。这篇文章就来浏览一下主要的内建对象,当然,我们并不是第一次接触内建对象,前面已经接触到的就有Object、Function、Boolean、Number、String,对于已经介绍过的,这里再总结复习一下,没有介绍过的,根据相关性来对比的总结,RegExp对象及正则表达式在下一篇中再单独介绍。

1、内建全局单例对象

(1)内建全局单例对象:在整个执行环境中只有一个对象实例,这些对象没有内部属性[[Construct]]和[[Call]],因此不能使用new来创建,也不能作为函数来调用,而是直接使用对象名称来引用其属性和方法(对于全局对象,则可以直接使用属性和方法名)。内建全局单例对象有Global、Math、JSON。

(2)内建常量:主要是指内建全局单例对象的属性,这些属性的[[Writable]]、[[Configurable]]、[[Enumerable]]特性全部为false,因此不能修改属性值,不能删除属性,也不能在for-in循环中枚举。这些内建常量有:

对象 名称 常量值 说明 对象 名称 常量值 说明
Global NaN NaN 表示不是数值 Math E ≈2.718 自然对数的底数 e
Infinity +∞ 正无穷 LN10 ≈2.303 2 的自然对数
undefined undefined 未定义 LN2 ≈0.693 10的自然对数
LOG2E ≈1.443 e 的以2 为底的对数
LOG10E ≈0.434 e 的以10为底的对数
PI ≈3.142 圆周率,即圆周长与直径的比
SQRT1_2 ≈0.707 2的平方根的倒数
SQRT2 ≈1.414 2的平方根

注:Global对象中的常量可以使用名称直接访问,Math对象中的常量需使用类似Math.PI的形式来访问。

(3)内建静态方法:

所属对象 类别 方法 说明
Global 全局解析方法 eval(x) 解析Javascript字符串,eval中定义的变量不会提升,在严格模式下,外部不能访问eval内定义的变量
字符串解析为Number parseInt(string,radix) 将字符串解析为整数,可以传入一个进制,会忽略前导空格
parseFloat(string) 将字符串解析为浮点数,会忽略前导的空格和前导0
Number判断方法 isNaN(number) 判断是否为数字
isFinite(number) 判断是否为有限数
URI处理方法 encodeURI(uri) 对URI编码,用于整个URI,用特殊的UTF-8编码替换所有无效字符,不会对本身属于URI的特殊字符编码,如冒号,正斜杠,问号,井号等。
decodeURI(ecodedURI) 对使用ecnodeURI()编码的字符串解码
encodeURIComponent(uriComponent) 对URI编码,用于URI中的某一段,会对发现的任何非标准字符进行解码
decodeURIComponent(encodedURIComponent) 对使用ecnodeURIComponent()编码的字符串解码
内建对象构造器方法 Object、Function、Array、String、Number、Boolean、Date、RegExp Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError 这里每一个构造函数都构成了一个内建的对象类型
Math 三角函数 sin(x)、cos(x)、tan(x) x的正弦、余弦、正切
反三角函数 asin(x)、acos(x)、atan(x)、atan2(y,x) x的烦正弦、反余弦、反正切、y/x的反正切
舍入函数 ceil(x)、floor(x)、round(x) 向上舍入(大于该数的最小整数)、向下舍入(小于该数的最大整数)、四舍五入
最值函数 max([value1[value2[,...]]])、min([value1[,value2[,...]]]) 最大值、最小值
随机函数 random() 返回介于0和1之间的随机数,不包括0和1.随机公式:随机值=Math.floor(Math.random() * 可能值的个数 + 初始值)
其它常见数学函数 abs(x)、exp(x)、log(x)、pow(x,y)、sqrt(x) 绝对值、Math.E的x次幂、x的自然对数、x的y次幂、x的平方根
JSON  解析 parse(text[,reviver]) 把JSON字符串解析外为Javascript值
序列化 stringify(value[,replacer[,space]]) 把Javascript对象序列号为JSON字符串,默认情况下不包括空格和缩进,所有函数、原型成员以及值为undefined的属性会被忽略

说明:

(1)全局对象中还有escape()/unescape()方法,由于这两个方法只能正确编码ASCII字符已经被废弃,而使用上表中的encodeURI()等方法来替换。

(2)JSON.parse()可以接受一个可选的参数,这个参数是一个函数,被称为还原函数,还原函数返回一个值,接受两个参数:一个键和一个值。如果还原函数返回undefined,表示要从结果中删除相应的键,返回其他值,则将该值插入到结果中。

(3)JSON.stringify()可以接受二个可选参数:

A、第一个可选参数是个过滤器,可以是一个数组,也可以是一个函数。如果是一个数组,那么结果中只保留这个数组中列出的属性;如果是一个函数,这个函数被称为替换函数,接受两个参数:一个键和一个值。替换函数返回undefined时会忽略这个键,否则就将返回值作为这个键的值插入到相应位置。

B、第二个可选参数是个选项,表示是否在JSON字符串中保留缩进。如果这个参数是数字,表示每个级别缩进的空格数(最大不能超过10,超过10时自动设置为10),如果这个参数是字符串,则将作为缩进字符处理。

在调用JSON.stringify(obj)时,如果obj中有toJSON()方法并返回一个有效值时,会首先调用这个方法。

2、Object与Function

这两个内建对象在前面已经重点讨论过,这里总结一下:

对象/构造函数/[[Class]] 构造器属性(静态属性) 原型属性 实例属性 内部属性
Object prototype constructor               [[Prototype]] 
defineProperty() toString() [[Class]]
defineProperties() toLocaleString() [[Extensible]]
getOwnPropertyDescriptor() valueOf() [[Get]]
preventExtensions() hasOwnProperty() [[GetOwnProperty]]
seal() propertyIsEnumerable() [[GetProperty]]
isSeal() isPrototypeOf()       [[Put]]
frozen() [[CanPut]]
isFreeze() [[HasProperty]]
create() [[Delete]]
getOwnPropertyNames() [[DefaultValue]]
getPrototypeOf() [[DefineOwnProperty]]
keys()  
Function prototype call() prototype [[HasInstance]]
length apply() length     [[Scope]]
bind()    [[FormalParameters]]
[ ]
[[Construct]]
[[Call]]

说明:

(1)构造器属性(静态属性)是直接定义在构造函数这个对象本身上的属性,只能通过构造函数名来直接访问,原型属性是定义在构造函数原型对象上的属性,可以通过原型去访问,但更重要的是可以通过构造函数的实例去访问。比如上表Object对象的defineProperty()就只能以Object.defineProperty()的形式来调用,而hasOwnProperty()这可以在任意一个Object实例对象上调用。

(2)Object本身是一个(构造)函数,也就是Function类的一个实例,因此也就有了Function实例所具有的属性prototype和length(===1,上表未列出),同时,由于Object还是一个构造函数,也就构成了一种(内建)类型Object,通过原型继承,这个类型是ES中所有其它类型的基类,也就是说所有的对象都可以访问上表中Object的原型属性。这里原型继承是基于下面原理来实现的:Object原型的原型是null(即有Object.getPrototypeOf(Object.prototype)===null),其它对象的原型是Object的实例。

(3)Function是一个构造函数,因此构成了一种内建类型Function,同时,因为是函数,也就是一个对象,这个对象的原型对象是Object的一个实例,因而可以访问Object的原型属性(Function类中有些方法覆盖了Object中的原型方法,上表未列出)。

(4)注意区分Function类中的构造器属性和实例属性,可以这样来理解:首先Function类的所有实例都有属性prototype(函数原型对象)和length(形式参数的个数),然后因为Function本身也是一个函数,是Function类的一个实例,因此有prototype和length属性(属性值已经确定了),而这属性是直接定义在Function构造函数上的,也就是构造器属性了。

(5)其它关于Object和Function中不理解的地方可以参考前面的文章,也可以自己查阅相关资料。

3、Array与String

将Array和String这两种内置对象放在一起,主要是因为他们有一些方法比较类似,我自己就常常有搞不拎清的时候,于是借这个机会比较一下。

功能类似方法 Array对象独有方法 String对象独有方法
类别 Array方法 String方法 类别 方法 说明 类别 方法 说明
方法 说明 方法 说明
共有属性  length 数组项的个数,可以修改长度来实现添加或移除数组项的功能 length 字符串中字符的个数 栈和队列    pop() 移除数组最后一项,修改数组长度,返回被移除的项 去空格 trim() 去掉字符串前后的空格
对象创建 构造函数 1、new Array([item0[,item1[,...]]]) 2、new Array(len) 上面两种方式的new可以省略 构造函数 new String([value]) 注意:上面的new省略时,则作为类型转换函数调用 push()  接受任意个参数,把它们逐个添加到数组末尾,并返回修改后数组的长度 比较 localeCompare() 对象在参数前返回负数 相等返回0 后面返回正数
数组字面量 使用方括号[] 字符串字面量 使用成对的单引号或成对的双引号 shift() 移除数组第一项并返回,修改数组长度 HTML方法 见附表 用于简化常见HTML格式化任务的方法,已经不建议使用
转换方法   toLocaleString() 调用数组每一项的toLocaleString(),然后用逗号连接起来 toLocaleString()  返回对象表示的字符串 unshift() 接受任意个参数,并添加到数组前面,返回新数组的长度 大小写转换   toLowerCase() 转小写 
toString() 调用数组每一项的toString(),然后用逗号连接起来 toString()  返回对象表示的字符串 排序 reverse() 反转数组项的顺序 toLocaleLowerCase()   
valueOf() 返回数组本身,即有array === array.valueOf() valueOf()  返回对象表示的字符串 sort()  默认按升序排序,可以接受一个比较函数  toUpperCase()  转大写 
连接方法 join() 传入一个参数作为分隔符,将数组每一项连接起来,默认为逗号 + 字符串相加 迭代方法 两个参数: 1、执行函数(数组项的值,该项在数组中的位置,数组) 2、作用域 every() 对数组中每一项运行执行函数,每一项都返回true时返回true toLocaleUpperCase()  
concat() 创建一个原数组的副本,将传入的参数压入新数组并返回新数组 concat() 拼接字符串,更多情况是直接使用“+”拼接 some() 对数组中每一项运行执行函数,如果有其中一项执行函数返回true就返回true 字符方法 charAt() 1个参数:基于0的字符位置 charAt()返回单字符字符串,charCodeAt()返回字符编码 
截取方法 slice() 接受1至2个参数,即要返回项的起始和结束位置 1、只有一个参数时,返回该参数位置开始到末尾的所有项 2、参数为负数时,加上数组长度使其变为正数 slice() 参数:开始位置,最后一个字符后面的位置 forEach() 对数组中每一项运行执行函数,没有返回值 charCodeAt()
splice 第1个参数:要删除的起始项位置;第2个参数:要删除的项数;第3个及之后的参数:要插入的项 1、删除:指定2个参数,要删除的第一项的位置和要删除的项数 2、插入:提供3个参数,起始位置,0,要插入的项 3、替换:提供3个参数,起始位置,删除的项数,要插入的项   substr() 参数:开始位置,字符个数 map() 对数组中每一项运行执行函数,返回每次调用的结果组成的数组 fromCharCode() 这是String对象的静态函数,将接受到的一或多个字符编码转变为字符串
substring() 参数:开始位置,最后一个字符后面的位置 filter() 对数组中的每一项运行执行函数,返回执行函数返回true的项组成的数组 模式匹配方法 match() 与RegExp的exec()方法相同,接受一个参数,要么是一个正则表达式,要么是一个RegExp对象
位置方法 indexOf() 接受两个参数:要查找的项和(可选)表示查找起点位置的索引,indexOf()从数组的开头向后查找,lastIndexOf()则从数组末尾向前查找在比较项是否相等时,会使用全等比较,没有找到返回-1 indexOf() 从字符串中查找子字符串,返回子字符串的位置,没有找到返回-1,indexOf()从前往后查找,lastIndexOf()从后往前找 第二个可选参数表示从哪个位置开始搜索  缩小方法  reduce() 接受两个参数: 1、执行函数(前一个值,当前值,项的索引,数组),这个函数的返回值会作为第一个参数自动传入下一项,第一次迭代发生在数组的第二项上 2、(可选)初始值 reduce()从数组第一项开始,遍历至最后,reduceRight()从数组最后一项开始,遍历至第一项 search() 接受一个参数,和match()相同,返回字符串中第一个匹配项的索引,没有找到匹配项时返回-1,search()始终从字符串开头向后查找
lastIndexOf() lastIndexOf() reduceRight() replace() 接受两个参数:一个RegExp对象或字符串和一个字符串或函数,若第一个参数为字符串,则只会替换第一个字符串,若想替换所有子字符串,第一个参数必须为指定了全局标志(g)的正则表达式
          判断方法 isArray() 静态方法,接受一个参数,返回这个参数是否为Array split() 基于指定的分隔符将一个字符串分割成多个字符串,并将结果放在一个数组中返回,分隔符可以是字符串,也可以是正则表达式。可选的第二个参数用于指定数组的最大长度

说明:

(1)上表中红色部分表示在ES5版本中新增的方法,蓝色部分为个人认为比较常用的属性和方法。

(2)ECMAScript中数组的每一项可以保存任意类型的数据,并且数组的大小可以随着数据的添加而自动的动态调整。

(3)使用Array构造函数创建数组时,如果传入一个数值类型的参数,则作为数组长度处理,如果这个数值小于0或者不是一个整数,会抛出RangeError异常(如果确实需要将这个数值作为数组第1项,可以使用数组字面量),其它数值类型的参数,则作为数组的第一项值处理,并且数值的长度值为1。

[code]
try{
var a = new Array(-2);
}catch(e)
{
console.info(e);//RangeError
}
//var g = new Array(1.1);异常
var b = new Array(0);
var c = new Array(2);
var d = new Array('data');
var e = [-2];
var f = new Array(-1,-2);

console.info(b.length);//0
console.info(c.length);//2
console.info(d.length);//1
console.info(e.length);//1
console.info(f.length);//2

Javascript 相关文章推荐
extjs fckeditor集成代码
May 10 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
Nov 17 Javascript
jQuery当鼠标悬停时放大图片的效果实例
Jul 03 Javascript
jquery实现的简单二级菜单效果代码
Sep 22 Javascript
Javascript获取随机数的实现方法
Jun 22 Javascript
基于JS+Canves实现点击按钮水波纹效果
Sep 15 Javascript
移动端利用H5实现压缩图片上传功能
Mar 29 Javascript
微信小程序下拉刷新界面的实现
Sep 28 Javascript
解决微信小程序防止无法回到主页的问题
Sep 28 Javascript
angular6的table组件开发的实现示例
Dec 26 Javascript
vue项目前端埋点的实现
Mar 06 Javascript
微信小程序实现左滑删除效果
Nov 18 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
Oct 11 #Javascript
You might like
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
bootstrap中的 form表单属性role="form"的作用详解
2017/01/20 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
jQuery中each方法的使用详解
2018/03/18 jQuery
vue-cli3.0 特性解读
2018/04/22 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
django基础学习之send_mail功能
2019/08/07 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
python Matplotlib模块的使用
2020/09/16 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
学校志愿者活动总结
2014/06/27 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
新郎答谢词
2015/01/04 职场文书
兴趣班停课通知
2015/04/24 职场文书
法律服务所工作总结
2015/08/10 职场文书
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
SQL Server内存机制浅探
2022/04/06 SQL Server