在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起。也常被成为类,但和传统面向对象语言中的类不一样。对象(引用类型的值)是某个特定引用类型的一个实例。新对象是使用new操作符后跟一个构造函数来创建的。
如 var person=new Object();
创建了Object引用类型的一个实例,并把该实例保存在变量person中。使用的构造函数是Object,它只为新对象定义了默认的属性和方法。
5.1 Object类型
创建Object实例的方式有两种,第一种是使用new操作符后跟一个构造函数来创建的。
如 var person=new Object();
person.name=”Nicholas”;
person.age=29;
另一种方法是使用对象字面量表示法。
var person={ name: “Nicholas”, 5: true, age: 29 } |
//使用花括号 //属性后加冒号”:”,属性间用逗号隔开 //数值属性会自动转换为字符串 //最后一个属性后不加逗号 |
使用对象字面量语法时,如果留空其花括号,则可定义只包含默认属性和方法的对象:
var person={ }; person.name=”Nicholas”; …… |
//与new Object()相同 |
访问对象属性:使用点表示法. 和方括号”[]”表示法。方括号表示法的优点是可以通过变量访问属性,如果属性名字包含空格等会导致语法错误的字符,或者属性名使用的是关键字和保留字,也可以使用方括号表示法。
如 var propertypeName=”name”;
alert(person[protertypeName])// “Nicholas”
person[“first name”]=”Nicholas”;
除非必须使用变量访问属性名,建议使用点表示法。
5.2 Array类型
与其他编程语言的数组不同,ECMAScript数组的每一项可以保存任何类型的数据。并且ECMAScript的数组的大小是可以动态调整的。创建数组的基本方式有两种,
1.第一种是使用Array构造函数
var colors=new Array();
可以给Array构造函数传递一个参数表示数组的长度length,如果传入的是其他类的数值则会创建一个只有那个值的一项的数组。
var colors=new Array(20);//colors.length=20
var colors=new Array(“red”);//创建了数组[red]
在使用Array构造函数是可以省略new操作符。
2.第二种方式是使用数组字面量表示法,使用该方法时不会调用Array构造函数。
var colors=[“red”,”green”,”blue”,”yellow”];
读取和设置数组时使用方括号”[]”并提供相应的基于0的数字索引。
length属性不是只读的,通过设置这个属性可以从数组末尾添加或删除项。
var colors=[“red”,”green”,”blue”]
colors[99]=”black”;//colors.length变成了100,但位置3到位置98实际上都未定义,会返回undefined。
5.2.1 检测数组
使用Array.isArray(value)方法来检测value是不是数组,是则返回true
5.2.2 转换方法
调用数组的toString()方法会返回数组中的每个值的字符串形式拼接而成的一个以逗号拼接而成的字符串。调用valueOf()方法返回的还是数组。toLocationString()方法返回结果经常与toString()和valueOf()方法相同的值。
使用join()方法则可以使用指定的分隔符开构建字符串。join()只接受一个参数。
如 :
var colors=[“red”,”green”,”blue”,”yellow”];
colors.join(“||”); // red||green||blue||yellow
colors.join(“.”); // red.green.blue.yellow
5.2.3栈方法
栈是一种LIFO(Last-In-First-Out)的数据结构,ECMAScript为数组提供了push()和pop()方法,以便实现类似栈的行为。
push()接受任意数量的参数,把它们逐个添加到数组末尾,并返回修改后的数组长度。而pop()方法则从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。
5.2.4 队列方法
队列是FIFO的数据结构。使用push()和shift()或pop()与unshift()方法结婚的方式实现数组的类似队列的行为。shift()移除数组的第一项并返回该项,同时将数组长度减1。unshift()在数组前端添加任意个项,并返回新数组长度。
5.2.5重排序方法
reverse()方法会反转数组的顺序。
sort()方法按升序排列数组项,该方法会调用每个数组项的toString()转型方法,然后比较得到的字符串以确定如何排序。
var nums=[1,20,13,14,5];
nums.sort();// nums变为[1,13,14,20,5]
sort()方法可以接收一个比较函数作为参数:
function compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
}else{
return 0;
}
}
nums.sort(compare);
可以通过比较函数产生降序结果
function compare(value1,value2){
if(value1<value2){
return 1;
}else if(value1>value2){
return -1;
}else{
return 0;
}
}
nums.sort(compare);
5.2.6 操作方法
concat()可以基于当前数组所有项创建一个新数组
var numbers=[1,2,3,4,5,6];var numbers2=numbers.concat(7,[8,9]);// number2[1,2,3,4,5,6,7,8,9]
slice()方法基于当前数组的一项或多项创建一个新的数组
var numbers3=numbers.slice(1);//取位置1到最后组成数组
var numbers4=numbers.slice(1,4);//取位置1到位置3[2,3,4]
var numbers5=numbers.slice(-4,-1);//即取位置length-4到length-2的项
splice()方法改变数组,返回删除的的项组成的数组。
删除:指定2个参数:要删除的第一项位置和要删除的个数
插入:向指定位置插入任意数量的项,提供3个参数:起始位置,0(删除的项数),和要插入的项
替换:提供3个参数,起始位置,要删除的项数和要插入的项数
var removed=numbers.splice(0,1);//删除数组的第一项,并返回删除的项
var removed=numbers.splice(1,0,7,8);//从位置1插入7和8,返回空数组
var removed=numbers.splice(1,1,9); //插入一项删除一项,返回删除的项
5.2.7位置方法
indexOf()和lastIndexOf() 接收两个参数,要查找的项和表示查找起点的位置(可选),indexOf()方法查找方向为从数组开头指向结尾,lastIndexOf()方法则相反。没找到返回-1。
numbers.indexOf(4);//从位置0开始查找4所在的位置,并返回该位置
numbers.indexOf(4,2);//从位置2开始向后查找4所在的位置,并返回该位置
5.2.8迭代方法
每个迭代方法都接收两个参数:要在每一项上运行的函数和运行该函数的作用域对象(可选)-影响this值。
var numbers=[1,2,3,4,5,6]
every(): 对数组的每一项运行给定的函数,都返回true则返回false
var everyResult=numbers.every(function(item,index,array){
return (item>5);
}); //返回false
some();对数组中的每一项运行给定的函数,有true则返回true
var someResult=numbers.some(function(item,index,array){
return (item>5);
});// someResult=true
forEach():对数组中的每一项运行给定的函数,该方法没有返回值
map():对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的函数
var mapResult=numbers.map(function(item,index,array){
return item+2;
}); mapResult=[3,4,5,6,7,8]
filter():对数组中的每一项运行给定的函数,返回运行函数为true的项组成的函数
var filterResult=numbers.filter(function(item,index,array){
return (item>5);
});// filterResult=[6,7,8]
以上方法都不会修改数组中包含的值。
5.2.9归并方法
reduce()和reduceRight(),这两个方法都会迭代数组所有的项,然后构建一个最终的返回值。reduce()方法从数组的第一项开始,遍历到最后。reduceRight()相反。接收两个参数,在每一项上运行的函数和归并基础的初始值(可选)。传入的函数接收4个参数:前一个值,当前值,项的索引和数组对象。第一次迭代发生在数组第二项上。
var numbers=[1,2,3,4];
var sum=numbers.reduce(function(prev,cur,index,array){
return prev+cur;
},20);// sum=10+20=30
5.3 Date类型
创建日期对象:
var now=new Date();// 不传递参数时会自动获得当前的日期和时间。
Date.parse();方法接收一个表示日期的字符串参数,然后根据这个字符串返回相应的日期。
var someTime=new Date(Date.parse("May 25,2004,00:00:00"));//显示当地时间
Date.UTC();方法的参数分别是年,月份(一月为0),日(1-31),时(0-24),分,秒,毫秒,只有年和月是必须的。
var time=new Date(Date.UTC(2005,4,5,0,55,55)); //由GMT时间转换到当地时间显示
Date.now(); 返回表示调用这个方法时的日期和时间毫秒数。
5.3.1 继承的方法
toLocaleString(); 会返回时间带有上午和下午,不带时区信息
toString();会返回时间,带时区信息,通常返回24小时制的日期时间
valueOf();不会返回字符串,返回日期的毫秒表示
5.3.2 日期格式化方法
toDateString();
toTimeString();
toLocaleDateString();
toLocaleTimeString();
toUTCString();
5.4正则表达式
5.4.1创建:
var box=new RegExp(‘box’); //第一个参数为字符串
var box=new RegExp(‘box’,’ig’);//第二个参数为可选模式修饰符
var box=/box/; //使用字面量方式的正则
var box=/box/ig;//字面量,带修饰符
i: 忽略大小写
g: 全局匹配
m: 多行匹配
RegExp的方法:
test();// 测试匹配,返回true或false
exect();//测试匹配,返回包含第一个匹配项信息的数组,如果没有匹配到则返回null
String对象的4个使用正则表达式的方法:
var pattern=/box/ig;
match(pattern);//返回pattern中的子串或null
replace(pattern,replacement);//用replacement替换过pattern
search(pattern);//返回字符串中pattern开始的位置
split(pattern);//返回字符串按指定pattern拆分的数组
RegExp静态属性
input; $_ 当前匹配的字符串;
lastMatch; $& 最后一个匹配的字符串
lastParen; $+ 最后一对圆括号内的字符串
leftContext; $` 最后一次匹配的前子串
multiline; $* 用于指定是否所有的表达式都用于多行的布尔值
rightContext; $’在上次匹配后的子串;
例如:
var pattern=/(.)oogle/;//正则表达式
var str=”This is google!”; //带检测的字符串
pattern.test(str);//执行以下方法前必须运行一次正则表达式
alert(RegExp.input);//输出This is google!
alert(RegExp.leftContext);//This is
alert(RegExp.rightContext);// !
alert(RegExp.lastMatch);//google
alert(RegExp. lastParen);//g
alert(RegExp.multiline;// false
RegExp.input可以写成RegExp[‘$_’]
RegExp实例属性
global:Boolean值 表示g是否已设置
ignoreCase:Boolean值表示i是否设置
lastIndex:整数,表示下次匹配将从哪里字符位置开始
multiline:Boolean值,表示m是否已设置
Source:正则表达式的源字符串形式
5.4.2字符类
将直接量字符单独放进方括号内[]就组成了字符类,一个字符类可以匹配他所包含的任意字符。可以通过^符号来否定字符类,它匹配不包含在方括号内的字符。可以用/[a-z]/匹配小写字母,/[A-Z]/匹配大写字母/[0-9]/匹配数字,/[a-z A-Z0-9]/匹配任何字母和数组
正则表达式的字符类
字符 |
匹配 |
[……] |
方括号内的任意字符 |
[^……] |
不在方括号内的任意字符 |
. |
除换行符和其他Unicode行终止符之外的字符 |
\w |
任何ASCⅡ组成的单词等价于[a-z A-Z0-9] |
\W |
等价于[^a-z A-Z0-9] |
\s |
任何Unicode空白字符(空格) |
\S |
任何Unicode非空白字符(与\W有区别) |
\d |
任何ASCⅡ数字等价于[0-9] |
\D |
等价于[^0-9] |
[\b] |
退格直接量 |
选择、分组和引用
字符 |
含义 |
| |
选择 |
(……) |
组合,将几项组合为一个单元,可以通过*,+,?和 |等符号加以修饰 |
(?:……) |
只组合,把项组合到一个单元,但不记忆与该组相匹配的字符 |
\n |
和第n个分组第一次匹配的字符相匹配,组是圆括号内的表达式,组索引是从左到右的左括号数 “(?:”形式的分组不编码 |
锚字符
^ |
从字符串的开头开始匹配,在多行检测中,匹配一行的开头 |
$ |
匹配字符串的结尾,在多行检索中,匹配一行的结尾 |
\b |
匹配一个单词的边界,就是位于字符\w和\W之间的位置,或位于字符\w和字符串的开头或者结尾之间的位置 |
\B |
匹配非单词边界的位置 |
(?=p) |
要求接下来的字符都与p匹配, |
(?!p) |
要求接下来的字符不与p匹配 |
5.4.3 重复
字符 |
含义 |
x{n,m} |
匹配前一项x n到m次 |
x{n, } |
匹配前一项x ≥n次 |
x{n} |
匹配前一项x n次 |
x? |
匹配前一项x 0或1次等价于{0,1} |
x+ |
匹配前一项x ≥1次,{1,} |
x* |
匹配前一项x ≥0次 {0,} |
var pattern=/.{3}oogle/;
var str1=”google”;
var str2=”gggoogle”;
var str3=”abcoogle”;
alert(pattern.test(str1));//false
alert(pattern.text(str2));//true
alert(pattern.text(str3));//true
var pattern=/.+oogle/;
var str0=” oogle”;
var str1=” g oogle”;
var str2=”gggoogle”;
var str3=”abcoogle”;
alert(pattern.test(str0));//false
alert(pattern.test(str1));//true
alert(pattern.text(str2));//true
alert(pattern.text(str3));//true
贪婪模式的重复和非贪婪模式的重复
/a+/ 贪婪模式,当使用aaa作为匹配的字符串时,正则表达式会匹配它的三个字符
/a+?/ 惰性模式,回尽可能少的匹配。当使用aaa作为匹配的字符串时,正则表达式只会会匹配它的一个字符。
var pattern=/8(.*)8/;
var str='This is a 8goolge8';
docunment.write(str.replace(pattern,'<strong>$1<strong>'));// $1表示分组获取字符串匹配到的内容
var pattern=/(.*)\s(.*)/;
var str='google baidu';
alert(str.replace(pattern, ‘$2 $1’));// 位置交换,会输出baidu google
贪婪 惰性
var pattern=/[a-z]+/; // 这里使用了贪婪模式
var str='avcd';
alert(str.replace(pattern,'1'));//输出1, 所有的字符都变成1
var pattern=/[a-z]+?/; // 这里使用了惰性模式
var str='avcd';
alert(str.replace(pattern,'1'));//输出1bcd,只有第一个字符变成了1
var pattern=/[a-z]+?/g; // 这里使用了惰性模式,并且开启了全局模式
var str='avcd';
alert(str.replace(pattern,'1'));//输出1111, 每个字符都变成了1
5.5 Function 类型
声明方式:
函数声明语法:
function functionName(arg0, arg1, arg2, arg3……){
statements;
}
函数表达式:
var functionName=function(arg0, arg1, arg2, arg3……){
statements;
}
Function构造函数:
var functionName=new Function( “num1”,”num2”,”return num1=NUM2”);//不推荐使用。
函数中有return语句时,会在执行完return语句后立即退出,return后的语句永远不会执行。函数可以不指定返回值,这种函数是一种特殊的undefined值。
严格模式下:不能把函数和参数命名为 eval或argument;
不能出现两个命名参数相同的情况。
5.5.1 参数
ECMAScritp可以传入任意类型和任意数量的参数。函数的参数在内部是用一个数组来表示的。函数可以通过arguments对象来访问这个数组。即可以通过arguments对象访问传入函数的参数。
例如
function sum() {
alert(arguments[0]+arguments[1]);
}
和
function anyHi(num1,num2){
alert(num1+num2);
} 是一样的。
还可以定义为
function anyHi(num1,num2){
alert(arguments[0]+arguments[1]);
}
argument[0]和num1 的内存空间是独立的但它们的值会同步。
function anyHi(num1,num2){
argument[1]=10; //会重写第二个参数,将第二个参数修改为10
alert(arguments[0]+arguments[1]);
}
可以在函数中调用arguments.length获知有多少个参数传给了函数。
严格模式下重写arguments的值会导致语法错误。
没有重载
重载即相同的函数名可以通过传入不同的参数类型和不同的参数个数来表示不同的函数
ECMAScript不能实现这一点,即不能重载。如果定义了同名的函数,则后面的函数会覆盖前面的。
函数实际上是对象,函数名相当于与指向函数的指针,对函数名定义了多个函数时,函数名最终只会指向最后一个函数。
5.5.2函数声明与函数表达式
解析器加载数据时,会先读取数据中的函数声明,并使其在执行任何代码之前可用,但此时不会读取函数的表达式。解析器会在执行到调用函数的代码时才会运行函数。
如以下函数会正常执行:
alert(sun(10,10));//20,
function sum(num1,num2){
return num1+num2;}
但是,使用函数表达式定义的函数不同
如下函数会报错:
alert(sum(3,4));//报错
var sum=function(num1,num2){
return num1+num2;}
函数可以作为值使用,可以作为另一个函数的参数,也可以作为函数的返回值。
function callSomeFunction(someFunction, someArgument){
return someFunction(someArgument);
}
5.5.4 函数内部属性
argument主要用途是保存参数。但arguments对象有一个名为callee的属性,改属性是一个指针,指向拥有这个arguments对象的函数。
如:以下两个函数相等
function factorial(num){ if(num<=1){return 1; } else{ return num*factorial(num-1); }/*于函数名有紧密耦合,一旦函数名修改,语句中的函数名也要修改,否则不能完成递归*/ } |
function factorial(num){ if(num<=1){return 1; } else{ return num*arguments.callee(num-1); }//消除了于函数名的紧密耦合 } |
this对象:this引用的是函数执行的环境对象。
window.color=”red”;
var o={color: “blue”};
function sayColor(){
alert(this.color);
}
sayColor(); //”red” 此时this对象引用的是window对象
o.saycolor=sayColor;
o.sayColor();//”blue”此时this对象引用的是对象o。
函数的caller属性,指向调用当前函数的函数,如果在全局作用域中调用当前函数则其值为null。
function outer(){
inner();
}
function inner(){
alert(inner.caller);//指向outer(),该句可以改为alert(arguments.callee.caller)
}outer();//在运行该函数时函数会执行inner()函数内的的inner.caller 此时caller指outer.
function outer(){
inner();
}
function inner(){
return 3;
}
outer();
alert(inner.caller); // null 此时该语句时在全局环境中执行的
5.5.5 函数的属性和方法
length属性:值为函数接收的参数的个数。
prototype属性:该属性不可枚举
apply()方法和call()方法。可以指定运行该函数时的作用域。
apply()接收两个参数,第一个就是要该函数运行的作用域,即this对象,第二个参数时参数数组可以是数组实例也可以是arguments。
call()方法与apply()方法不同的是第二个参数必须逐个列出来。
window.color=”red”;
var o={color:”blue”};
function sayColor(){
alert(this.color);
}
sayColor.call(this);//red
sayColor.call(window);//red
sayColor.call(o);//blue
函数的toString()和toLocaleString()方法始终都返回函数的代码。
5.6基本包装类型
ECMAScript提供了3种特殊的应用类型:Boolean,Number和String。每当读取一个基本类型值的时候,后台都会创建一个对应的基本包装类型的对象。自动创建的基本包装类型的对象,只会存在于一行代码的瞬间,然后立即被销毁。
对基本包装类型的实例调用typeOf会返回”Object”,而且所有基本包装类型的对象在转换为布尔类型值都是true。
5.6.1 Boolean类型
valueOf()方法返回基本类型值true或false。
var booleanObject=new Boolean(true);
booleanObject .valueOf();// true
var booleanObject1=new Boolean(false);
booleanObject1.valueOf();//false
booleanObject1 instanceof Boolean;//true
5.6.2 Number 类型
var numberObject=new Number(10);
该类型的valueOf()方法返回对象表示的基本类型数值,toLocaleString()和toString()方法则返回字符串形式的数组。
toFixed()方法,会按照指定的小数位返回数值的字符串表达式,传入的参数为指定小数的位数。
var num=10.005;
alert(num.toFixed(2));// “10.01”
toExponential()方法返回指数表达式,参数为小数的位数。
var num=10;
alert(num.toExponential(1));// “1.0e+1”
toPrecision()方法返回合适的小数形式,参数为有效数字的位数。
var num=98;
alert(num.toPrecision(1));//”1e+2”
alert(num.toPrecision(2));//”98”
alert(num.toPrecision(3));//”98.0”
5.6.3 String类型
String类型是字符串的对象包装类型
var stringObject=new String(”hello word”);
String继承的valueOf(), toLocaleString()和String()方法,都返回对象所表示的基本字符串值。
length属性,表示字符串包含多少个字符。
String的方法
1、字符方法
var stringValue=”hello world”;
alert(stringValue.charAt(1));//”e”,返回给定位置的字符
alert(stringValue.charCodeAt(1));// 101, 输出给的位置字符的字符编码。
2、字符串操作方法
concat(),将一个或多个字符串拼接起来,原字符串不变
var stringValue=”hello”; var result=stringValue.concat(“world”,”!”); alert (result);// hello world! |
|
slice(), substr(), substring(),都接收一到两个参数
var stringValue=”Hello world”; alert(stringValue.slice(3));//”lo world” alert(stringValue.substr(3));// ”lo world” alert(stringValue.substring(3));// ”lo world” alert(stringValue.slice(3,7));//”lo w”,参数表示位置3到位置6的字符 alert(stringValue.substring(3,7));//”lo w” ,参数表示位置3到位置6的字符 alert(stringValue.substr(3,7));//”lo worl”,参数表示位置3开始和字符的个数 如果传入的参数是负数: alert(stringValue.slice(-3));//” rld” 参数时负数会与字符串长度相加 alert(stringValue.substr(-3));// ”rld”,第一个参数是负数会与字符串长度相加 alert(stringValue.substring(-3));// ”hello world”, 会把所有的负值换成0 alert(stringValue.slice(3,-4));//”lo w”,参数表示位置3到位置6的字符 alert(stringValue.substring(3,-4));//”hel” ,会把所有的负值换成0 alert(stringValue.substr(3,-4));//” ”,第二个参数时负数是转换成0 |
3、字符串位置方法
indexOf(), lastIndexOf().
var stringValue=”hello world”; alert(stringValue.indexOf(‘’o”)); //4, 从左起查找字符”o”的位置并返回 alert(stringValue.lastIndexOf(“o”));//7, 从右起查找字符”o”的位置并返回 alert(stringValue.indexOf(‘’o”,6)); //7, 从位置6开始向左查找字符”o”的位置并返回。 alert(stringValue.lastIndexOf(“o”,6));//4, 从位置6开始向右查找字符”o”的位置并返回。 |
4.trim()方法
会创建一个字符串的副本,删除前置及后置的所有空格,然后返回结果,不改变原字符串。
5.字符串大小写转换方法
toLowerCase()、toLocaleLowerCase()转为小写
toUpperCase()、toLocaleUpperCase()转为大写
6.字符串的模式匹配方法
match(),方法
var text=”cat, bat, sat, fat”; var pattern=/.at/g; var maches=text.match(pattern);// [“cat”,”bat”,”sat”,”fat”] |
search() 方法, 返回字符串中第一个匹配项的索引
var text=”cat, bat, sat, fat”; var pos=text.search(/.at/); alert(pos);//1 |
replace()方法,可接受两个参数,第一个参数可以是一个RegExp对象或一个字符串,第二个参数可以是一个字符串或一个函数。
var text=”cat, bat, sat, fat”; var result=text.replace(“at”,”ont”)//第一个参数是字符串,只会替换第一个字符串 alert(result);//”cont,bat,sat,fat” var result1=text.replace(/at/g, “ont”);//第一个参数是打开全局的的正则表达式,会替换所有匹配项 alert(result1);//”cont,bont,sont,font” result2=text.replace(/.at/g,”word($1)”);// $1 alert(result2);//”word(cat),word(bat),word(sat),word(fat)” |
第二个参数是函数,这个函数有三个参数:模式的匹配项,模式匹配项在字符串中的位置和原始字符串 function htmlEscape(text){ return text.replace(/[<>"&]/g, function(match,pos,originalText){ switch(match){ case"<":return "<"; case">":return ">"; case"&":return "&"; case"\"":return """; } }); alert(htmlEscape("<p class=\"greeting\">Hello world!</p>"));// |
split()方法,第一个参数是指定的分隔符,可以接受第二个参数用于指定数组的大小
var colorText="red,blue,green,yellow"; var colors=colorText.split(“,”);//colors=["red”,”blue”,”green”,”yellow"”] var colors1=colorText.split(",",2);//colors1=[“red”,”blue”] |
7. localeCompare()方法
用于比较两个字符串:
如果字符串在字母表中应该排在字符串参数之前,返回负数(大多数情况下是-1);
如果字符串等于字符串参数,则返回0;
如果字符串在字母表中应该排在字符串参数之后,返回正数(大多数情况下是1);
var stringValue="yellow"; alert(stringValue.localeCompare("break"));//1 alert(stringValue.localeCompare("yellow"));//0 alert(stringValue.localeCompare("zero"));//-1 |
8. fromCharCode()方法
接收一个或多个字符编码,将他们转换成一个字符串然后返回。
alert(String.fromCharCode(104,101,108,108,111));//”hello”
9.HTML方法
5.7 单体内置对象
ECMAScript实现提供的、不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了。
5.7.1 Global对象
不属于任何其他对象的属性和方法,最终都是Global对象的属性和方法。
1、URI编码方法
encodeURI()和encodeURIComponent() 方法可以对URI(Uniform Resource Identifiers, 通用资源标识符)进行编码。
encoderURI()不会对本身属于URI的特殊字符进行编码,例如冒号: 正斜杠/ 问好 ? 和井字号# .
encodeURIComponent()则会对它发现的任何非标准字符进行编码
例如
var uri=”http://www.w r#ox .com “ alert(encodeURI(uri)//http://www.w%20r#ox.com alert(encodeURIComponent(uri));//http%3A%2F%2Fwww.w%20r%23.com” |
与encodeURI()和encodeURIComponent()方法对应的两个方法是decodeURI() 和decodeURIComponent()。decodeURI()方法只能对使用encodeURI()方法替换的字符进行解码,decodeURIComponent()能够对使用encodeURIComponent()替换的字符进行解码。例如
var uri= “http%3A%2F%2Fwww.w%20r%23.com” alert(dencodeURI(uri)//” http%3A%2F%2Fwww.w r%23.com” alert(dencodeURIComponent(uri));// ”http://www.w r#ox .com “
|
2. eval()方法
eval(“alert(‘Hi’)”);
相当于
alert(“Hi”);
3.Global对象的属性
所有原生引用类型的构造函数都是Global对象的属性。
属性 |
说明 |
属性 |
说明 |
undefined |
特殊值 undefined |
Date |
构造函数Date |
NaN |
特殊值 NaN |
RegExp |
构造函数RegExp |
Infinity |
特殊值I nfinity |
Error |
构造函数Error |
Object |
构造函数 Object |
EvalError |
构造函数 EvalError |
Array |
构造函数 Array |
RangeError |
构造函数 RangeError |
Function |
构造函数 Function |
ReferenceError |
构造函数 ReferenceError |
Boolean |
构造函数 Boolean |
SyntaxError |
构造函数 SyntaxError |
String |
构造函数 String |
TypeError |
构造函数 TypeError |
Number |
构造函数 Number |
URIError |
构造函数 URIError |
4. window对象
Web都是将全局对象作为window对象的一部分加以实现的,在全局作用域中声明的所有变量和函数都成为了window对象的属性
var color=”red”;
function sayColor(){
alert(window.color);
}
window.sayColor();//”red”
5.7.2 Math对象
1、Math对象的属性
属性 |
说明 |
Math.E |
自然对数的底数,即e的值 |
Math.LN10 |
10的自然对数 |
Math.LN2 |
2上午自然对数 |
Math.LOG2E |
以2为底e的对数 |
Math.LOG10E |
以10为底e的对数 |
Math.PI |
π的值. |
Math.SQRT1_2 |
1/2的平方根 |
Math.SQRT2 |
2的平方根 |
2、min()和max()方法
var max=Math.max(3,54,36,47,20);// max=54
var min=Math.min(3,54,36,47,20);//min=3
要找到数组中的最大值和最小值可以使用如下方法:
var values=[1,2,3,4,5,6,7,8];
var max=Match.max.apply(Math,values);
3. 舍入方法
Math.ceil()执行向上舍入
Math.floor()执行向下舍入
Math.round()执行标准舍入
4. random()方法
Math.random()方法返回大于等于0小于1的一个随机数。
var num=Math.floor(Math.random()*10+1);//得到一个1到10之间的随机数(包含1和10)
var num=Math.floor(Math.random()*9+2);//得到一个2到10之间的随机数
function selectFrom(lowerValue, UpperValue){ var range=upperValue-lowerValue+1; return Match.floor(Math.random*range+lowerValue); }//返回[lowerValue, upperValue]间的随机数 |
function selectFrom(lowerValue, UpperValue){ var range=upperValue-lowerValue; return Match.ceil(Math.random*range+lowerValue); }//这样不包括lowerValue |
5、其他方法
方法 |
说明 |
Math.abs(num) |
返回num的绝对值 |
Math.exp(num) |
返回Math.E 的num次幂· |
Math.pow(num,power) |
返回num的power次幂 |
Math.log(num) |
返回num的自然对数 |
Math.sqrt(num) |
返回num的平方根 |
Math.acos(x) |
返回x的反余弦值 |
Math.asin(x) |
返回x的反正弦值 |
Math.atan(x) |
返回x的反正切值 |
Math.atan2(y,x) |
返回y/x的反正切值 |
Math.cos(x) |
返回x的余弦值 |
Math.sin(x) |
返回x的正弦值 |
Math.tan(x) |
放回x的正切值 |