JavaScript内置对象
定义 :不依赖于宿主环境的对象,这些对象在程序执行之前就已经存在,开发人员不必显式地实例化内置对象,因为它们已将实例化了;
类别:JavaScript中有这些内置对象–
Object–基础对象
Array–数组对象
Date–日期对象
RegExp–正则表达式对象
Function–函数构造器
Boolean–布尔对象
Number–数值对象
String–字符串对象
Global–全局对象
Math–数学对象
Object
到目前为止,大多数引用类型值都是Object类型的实例,对于在应用程序中存储和传输数据而言,Object是比较理想的选择;
创建Object实例:
(1)使用new操作符后跟Object构造函数
var obj = new Object();
obj.name = "susan";
(2)使用对象字面量表示法
var obj = {
name:"susan",
age:100
}
花括号内可以不填内容,则可以定义值包含默认属性和方法的对象
var obj = {};//等价于var obj = new Object();
Array
JavaScript中数组的每一项都可以保存任何数据类型的数据,且数组的大小是可以动态调整的;
创建数组:
(1)使用Array构造函数
var arr = new Array();
如果事先知道数组的长度,则可以在括号内传递数量
var arr = new Array(5);//创建一个有5个元素的数组
(2) 使用数组字面量表示法
var arr = [];//擦混关键一个空数组
var arr1 = ["abc","123"];//数组之间使用逗号分隔
关于数组的一些属性和方法:
length–保存数组的长度,总是大于等于0,可读可写;
Array.isArray(value)–判断某个值到底是不是数组,返回布尔值;
toString()–返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串,会调用每一项的toString()方法;
valueOf()–返回的还是数组;
join(用作分隔符的字符串)–将数组用括号里的参数分隔,返回分割后的字符串,如果不给join传入参数,或者 传入的是undefined,则使用逗号分隔,IE7及以下会报错;
push()–接受任意参数,把他们添加到数组末尾,返回修改后的数组长度;
pop()–从数组末尾移除最后一项,减少数组的length,返回移除的项;
shift()–移除数组中的第一个项并返回删除的项,同时将数组的长度减一;
Unshift()在数组前端添加人一个项并返回新数组的长度;
sort()–按升序对数组排序;sort()方法会调用每个数组项的toString()方法,即使数组中全是数字,比较的也是字符串;
reserve()–逆序,对数组的引用操作,原数组会改变;
concat()–基于当前数组的所有项创建一个新数组;原数组不会改变,因为是对原数组的一个副本进行操作的;
slice()–基于当前数组中的一个或多个项创建一个新数组;当有两个参数的时候,表示的是要返回项的起始位置和结束位置,但是返回项不包括结束位置;如果只有一个参数,则返回从当前参数一直到结束时的项;,这个方法也不会影响原始项;
splice()–用途很多
删除–指定2个参数,要删除的第一项的位置和要删除的项数,返回的是要删除的项;
插入–提供三个参数,起始位置、0(要删除的项数)、要插入的项;插入的项可以是任意多个;
替换–提供三个参数,起始位置、要删除的项数、要插入的任意数量的项;
改变的是原数组;
indexOf()、lastIndexOf()–接受两个参数,要查找的项和表示查找起点位置的索引(可选),indexOf()从数组开头向后查找,lastIndexOf()从数组末尾向前查找
返回的是位置,没找到就返回-1;
Date
创建日期对象:
var myDate = new Date();
在调用Date()构造函数没有传递参数的时候,新创建的对象懂获得当前日期和时间;
RegExp
javascript通过RegExp类型来支持正则表达式,通俗一点讲正则表达式就是一种规则;
创建正则表达式:
var pattern = /pattern/flag;
或者
var pattern = new RegExp();
正则表达式的匹配模式支持三个标识:g–全局模式;i–不区分大小写;m–多行匹配;
关于更多正则表达式的匹配规则和方法;
Function
函数实际上是对象,每个函数都是Function类型的实例,与其他引用类型一样具有属性和方法;因此函数名实际上是一个指向函数对象的指针,不会与某个函数绑定;
定义函数
(1)使用函数声明语法
function fun(value1,value2) {
return value1 + value2;
}
(2)使用函数表达式声明
var fun = funciton(value1,value2) {
return value1 + value2;
}
==注意==:使用函数表达式声明的时候不用写函数名,因为通过变量可以引用函数,并且函数结束要有一个分号,就像普通变量一样;
==区别==:解析器在向执行环境中加载数据时,对函数声明和函数表达式并不一样;解析器会率先读取函数声明,让他在执行任何代码之前可用,而函数表达式必须等到解析器执行到他所在的代码行才会被真正解释执行;
alert(fun(3));//这个代码是可以执行的
function fun(value) {
return value;
}
alert(fun(3));//会导致错误
var fun = function(value) {
return value;
}
第一段代码使用了函数声明,虽然在函数声明之前就调用了函数,但是在代码开始执行之前,解析器就用过函数提升读取并将函数声明添加到执行环境中,并在对代码求值时,将他们放到源代码树的顶部;所以不会报错;而使用函数表达式的话,函数位于一个初始化语句中,在执行到函数所在的语句之前,fun中不会保存有对函数的引用,所以会报错。
(3)使用Function构造函数
var fun = new Function("value1","value2,"return value1 + value2");
这种方法看起来和函数表达式差不多,但是他会解析两次代码,第一次是解析常规JavaScript代码,第二次是解析传入构造函数中的字符串,会影响性能;所以尽量不要使用这种方法;
==注意==:使用不带圆括号的函数名是访问函数的指针,而不是调用函数
==重要==:JavaScript中没有函数重载的概念,如果同时声明两个相同函数名的函数,那么后面一个会覆盖前一个;至于原因,可以将函数名想象为指针,第二个同名函数修改的是指针指向的值,所以第一个函数就会被第二个覆盖。
Boolean
Boolean是一个代表true或false值的对象,它重写了valueOf()方法,返回基本类型值true和false,重写了toString()方法,返回字符串“true”和“false”;
创建Boolean对象:
var boolean = new Boolean(true);
但是通常这样做:
var boolean = true;
Boolean常常用在if判断语句中;
Number
Number是与数字值对应的引用类型,它也重写了ValueOf()和toString()方法;
创建Number对象
var number = new Number(2);
var num = 3;
num.toString(2);//这样可以输出转换为二进制的字符串形式
Number对象提供了一些用于将数值格式化为字符串的方法:
toFixed(n)–显示n位小数,如果小数位大于要设定的位数,会对舍弃的小数位四舍五入;
toExponential(n)–返回一指数表示法标识号的数值的字符串形式;n表示输出结果中的小数位;
toPrecision(n)–可能会返回固定大小格式,也可能是指数形式,这是根据传入的参数来确定哪种最合适;n表示数值的所有数字的位数;
var num = 4;
alert(num.toPrecision(1));//”5e+1“
alert(num.toPrecision(2));//“45”
alert(num.toPrecision(3));//“45.0”
String
Stirng 类型是字符串的对象包装类型;
创建字符串:
var str = new String("hello world");
String 类型的方法:
charAt()\charCodeAt()–用于访问字符串中特定字符的方法;charAt()返回的是单字符串,charCodeAt()返回的是字符编码;
用方括号表示法也可以访问字符串中的个别字符;
concat()–用于将多个字符串连接起来;参数任意多个,返回拼接得到的新字符串,不改变原字符串;但是在平常一般凭借字符串用的是加号操作符;
slice()、subString()、subStr()–三个方法都是基于自字符串创建新字符串的方法,都返回被操作字符串的一个子字符串;前两个方法的第一个参数表示指定字符串的开始位置,第二个字符串表示结束位置,返回的字符串不包括结束位置;第三个方法的第一个参数表示指定字符串的开始位置,第二个参数表示返回的字符个数;
indexOf()、lastIndexOf()–查找字符串吗,没找到返回-1;
trim()–创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果;
toUpperCase()\toLowerCase()–转换大小写,toLocalUpperCase()和toLocalLowerCase()针对特定地区实现;
match()–返回匹配的字符串,接受一个参数–正则表达式;
search()–返回字符串中第一个匹配项的索引,接受一个参数–正则表达式,没有找到匹配项就返回-1;
replace()–替换字符串,接受两个参数,第一个是一个正则表达式或者是一个字符串,第二个是一个字符串或者一个函数;
split()–基于指定的分隔符讲一个字符串分割成多个子字符串,并将结果放在一个数组中;第一个参数是分隔符,第二个参数指定数组的大小(可选);
localeCompare()–比较两个字符串;并返回下列值中的一个:如果字符串在字母表中应该排在参数字符串之前就返回-1;如果相等就返回0;如果在参数字符串后面就返回1;
formCharCode()–接受一或多个字符编码;然后将他们转换成字符串;,与charCodeAt()执行的是相反的操作;
Global
全局对象,不适于其他任何对象的属性和方法,最终都是他的对象和方法;所有在全局作用域中定义的属性和函数,都是global对象的属性;
Global的方法:
(1)URI编码方法
encodeURI()–用于整个URI,不会对本身属于URI的特殊字符进行编码;
encodeURIComponent()–用于对URI中的某一段进行编码,会对他发现的所有非标准字符进行编码;
var uri = "http://baidu.co m";
alert(encodeURI(uri));//http://baidu.co%20m
alert(encodeURIComponent(uri));//http%3A%2F%2Fbaidu.co%20m
decodeURI()、decodeURIComponent()–与上面两种方法相反
(2)eval()方法
可以把字符串解析成可执行的JavaScript语句;
只接受一个参数–要执行的JavaScript字符串;如果参数不是字符串,则直接原样返回;
当解析到eval()方法的时候,他会将传入的参数当做实际的JavaScript代码解析,然后把执行结果插入到原位置;并且被执行的代码具有与该执行环境相同的作用域链;所以通过eval()执行的代码可以引用在包含环境中定义的变量;
var str = "hello world";
eval("alert(str)");//hello world
在eval()中创建任何函数或变量都不会被提升,他们只在eval()执行的时候创建;
在严格模式下,在外部访问不到eval()中创建的任何变量或函数;
对于Firefox,直接调用eval()则在调用者空执行;调用window.eval()则在全局执行;
==取得global对象的方法==
(1)由于global不能直接访问,web浏览器将这个全局对象作为window队形的一部分加以实现,因此,在全局作用域中声明的所有变量和函数,都是window对象的属性,可以通过window对象来实现;
(2)以下代码也可以取得global对象
var global = function() {
return this;
}();
以上代码没有给函数致命this值,那么this就是window(global);
Math
为数学公式和信息提供的对象
Math对象的一些常用方法:
Math.min()、Math.max()–确定一组数据中的最小值和最大值;可以接受任意多个参数;
Math.ceil()–向上取整;
Math.floor()–向下取整;
Math.round()–标准舍入;
Matn.random()–返回大于等于0小于1的一个随机数,像这样可以在某个整数范围内随机选择一个值:
var value = Matn.floor(Math.random()*n + firstValue);
n表示这个整数范围有多少个数,firstValue是第一个可能的值;例如:
随机取得一个2-10之间的整数:
var value = Matn.floor(Matn.random()*(10-2+1)+2);
一点总结:
在以上的几种内置对象中,Boolean类型、Number类型、String类型是基本包装类型;
Global对象、Math对象是单体内置对象,在所有代码执行之前,作用域就已经存在这两个内置对象;