JavaScript中的所有事物都是对象。
JavaScript中的对象(引用类型):
1、Object类型(自定义对象)
2、基本包装类型(Number类型、Boolean类型、String类型)
3、RegExp类型(正则表达式)
4、Date类型(日期)
5、Array类型(数组)
————————————————————————————————————————————
Object类型
Object是目前使用最多的一个类型
创建Object对象的方式有两种:
1、使用new操作符后跟Object构造函数,例如
var person=new Object();
person.name="llllll";
person.age=20;
2、使用对象字面量表示法,例如:
var person={name:"llllll",age:20};
注:
在使用对象字面量时,属性名也可以使用字符串。例如:
var person={"name":"llllll","age":20,5:"haha"};
注意:此处的5会自动转换为字符串。
在使用对象字面量时,下面这种定义方法与上面的定义方法也是等价的。
var person={};
person.name:"llllll";
person.age=20;
访问对象属性的两种方法:
1、var x=person.name;
2、var x=person["name"];
上述两种方法的x的值都为llllll。
注:
当属性名中包含会导致语法错误的字符,或者属性名字使用的是关键字或保留字,可以使用方括号来表示。
例如:person["first name"]="lll";
由于属性名中包含了一个空格,所以不能使用点来表示。然而,在属性名中是可以包括非字母非数字的,这时就可以用方括号来表示。
————————————————————————————————————————————
基本包装类型(Number、Boolean、String类型)
为了便于操作基本类型值,每当读取一个基本类型值时,后台就会创建一个对应的基本包装类型的对象。
例:
var s1="hello world";
var s2=s1.substring(2);
这个例子中变量s1包含了一个字符串,字符串是基本类型值。而下一行调用了substring()方法,并将返回结果保存在s2中。但是基本类型不是对象,因此在逻辑上s1不应该有方法。但是在第二行访问s1时,访问过程处于一种读取模式,在读取模式中访问字符串时,后台会自动完成下列处理:
(1)创建String类型的一个实例
(2)在实例上调用指定的方法
(3)销毁这个实例
经过此番处理,基本的字符串就变得跟对象一样了。上面的这三个步骤也使用于Boolean和Number类型。
Number类型:
创建Number对象:
(1)var num=new Number(10);
(2)var num=Number(10);
第一种方法是利用构造函数给对象赋值,第二种方法是把Number()作为一个转换函数使用,它把自己的参数转换成一个原始的数值,并且返回这个值(如果转换失败,则会返回NaN)。
属性:
MAX_VALUE
MIN_VALUE
NEGATIVE_INFINITIVE
POSITIVE_INFINITIVE
NaN
prototype
constructor
数字的属性是构造函数Number()自身的属性,而不是单独某个Number对象的属性。
例如:
var num=Number.MAX_VALUE;//这样使用是正确的
var num=new Number(2);
var number=num.MAX_VALUE;//这样使用则是错误的
Boolean类型:
Boolean对象用于将非逻辑值转换为逻辑值
创建Boolean对象:
var myB=new Boolean();
var b1=new boolean(false);
var result=b1&&true;
alert(result);//true
在例子中,结果为true。这是因为布尔表达式中所有对象都会被转换成true,因此b1对象在布尔表达式代表的是true。但是b1值仍然是false。
String类型:
用于处理已有的字符串
String对象的创建方法
var str=new String("Hello world!");
(1)字符方法:
document.write(str.charAt(1));//e
document.write(str.charCodeAt(1));//101
document.write(str[1]);//e
(2)字符串操作方法
1、concat(),用于将一个或多个字符串拼接起来。
例:var str1="hello ";
var str2="world";
var result=str1.concat(str2);
document.write(result+"<br>");//hello world
注:用"+"操作符也可完成字符串的拼接,并且在大多数情况下都比concat()更简单易行。
2、slice()、substr()、substring(),这三个方法都接受一个或两个参数,并且返回一个子字符串,不影响原字符串的值。第一个参数表示的是字符串的起始位置,若没有第二个参数,则默认从第一个参数开始到结尾。
document.write(str.slice(3));//lo world
document.write(str.substr(3));//lo world
document.write(str.substring(3));//lo world
document.write(str.slice(3,6));//lo w
document.write(str.substr(3,6));//lo wor第二个参数指明的是要返回的字符个数
document.write(str.substring(3,6));//lo w
document.write(str.slice(-3));//rld
document.write(str.substr(-3));//rld
//在给上面这两个方法传递负值时,它们的行为相同。是因为-3会被转换成8(字符串长度加参数11+(-3)=8), 实际上相当于调用了slice(8)和substr(8)。
document.write(str.substring(-3));//hello world
//substring()方法返回为了全部字符串,因为它将-3转换成了0
document.write(str.slice(3,-7));//l
//这个方法会将第二个参数额负值转换为-7+11=4,实际上相当于是执行str.slice(3,4);
document.write(str.substr(3,-6));//
//这个方法将第二个参数转换为0,这也就意味着返回0个字符的字符串,也就是空串。
document.write(str.substring(3,-6));//hell
//substring会把第二个参数转换为0,即变为了str.substring(3,0),但是由于这个方法都是从较小的的数作为开始的,因此最终相当于调用了str.substring(0,3)。
(3)字符串大小写转换方法
toLowerCase(),toLocaleLowerCase(),toUpperCase(),toLocaleUpperCase()四种方法,第一种和第三种是两个经典的方法,而第二个和第四个是针对特定地区的实现。对大多数地区来说,针对地区的方法和普通方法得到的结果相同,但少数语言(如土耳其语)会为Unicode大小写转换应用特殊规则,这时候就必须应用针对地区的的方法更稳妥一些。一般来说,在不知道自己的代码在哪种语言环境中运行时,还是使用针对地区的方法更稳妥一些。
(4)字符串的模式匹配方法
1、match()、match()方法只接受一个参数,要么是一个正则表达式,要么是一个RegExp对象。
2、search()、此方法只接受一个参数,由字符串或一个正则表达式。这个方法返回的是指字符串中第一个匹配项的索引;若没有找到匹配项则返回-1。
3、replace(),此方法接受两个参数。第一个参数可以是一个RegExp对象也可以是一个字符串,第二个参数可以是一个字符串或者是一个函数。
第二个参数是字符串时,还可以使用一些特殊的字符序列,将正则表达式操作得到的值插入到结果的字符串。
例:var str="cat,fat";
var result=str.replace(/(.at)/g,"word($1)");
alert(result);//word(bat),word(fat)
字符序列 替换文本
1. $$ $
2. $& 匹配整个模式的子字符串。
3. $' 匹配子字符串之前的子字符串
4. $` 匹配子字符串之后的子字符串
5. $n 匹配第n个捕获组的子字符串,其中n等于0-9。
6. $nn 匹配第nn个捕获组的子字符串,其中nn等于01-99。