日期:2014-05-16  浏览次数:20466 次

javascript基础知识(一)
1、Boolean类型
var flaseObject = new Boolean(false);
var result = falseObject && true;
alert(result); //true

var flaseValue = false;
result = falseValue && true;
alert(result);  //false

在这个例子中,我们使用false值创建了一个Boolean对象。然后,将这个对象与基本类型值true构成了逻辑与表达式。在布尔运算中,false && true等于false。可是,示例中的这行代码是对falseObject而不是对他的值(false)进行求值。而布尔表达式中的虽有对象都会被转换为true,因此falseObject对象在布尔表达式中代表的是true。结果,true && true当然就等于true了。

基本类型与引用类型的布尔值还有两个区别。首先,typeof操作符对基本类型返回"boolean",而对引用类型返回“object”。其次,由于Boolean对象是Boolean类型的实例,所以使用instanceof操作符测试Boolean对象会返回true,而测试基本类型的布尔值则返回false。如:

alert(typeof falseObject);   //object
alert(typeof falseValue);  //boolean
alert(falseObject instanceof Boolean);  //true
alert(falseValue instance Boolean);   //false

建议永远不要使用Boolean对象。

2、String类型
String类型的每个实例都有一个length属性,表示字符串中包含多个字符。

String类型提供了很多方法,用于辅助完成对ECMAScript中字符串的解析和操作。
1)字符方法
两个用于访问字符串中特定字符的方法是:charAt()和charCodeAt()。这两个方法都接受一个参数,即基于0的字符位置。其中charAt()方法以单字符串的形式返回给定位置的那个字符,而charCodeAt()返回的是给定位置的那个字符的编码。如:

var stringValue = "hello world";
alert(stringValue.charAt(1));   //"e"
alert(stringValue.charCodeAt(1));   //输出“101”

ECMAScript5还定义了另一个访问个别字符的方法。在支持浏览器中,可以使用方括号加数字索引来访问字符串中的特定字符,如:
alert(stringValue[1]);   //"e"
使用方括号表示法访问个别字符的语法得到了IE8及Firefox、Safari、Chrome和Opera所有版本支持。如果是在IE7及更早版本中使用这种语法,会返回undefined值。

2)字符串操作方法
第一个就是concat(),用于将一或多个字符串拼接起来,返回拼接得到的新字符串。如:
var stringValue = "hello";
var result = stringValue.concat("world");
alert(result);  //"hello world"
alert(stringValue);  //"hello"

concat()方法可以接受任意多个参数,也就是说可以通过它拼接任意多个字符串。如:
result = stringValue.concat("world","!");
alert(result);   //"hello world!"

虽然concat()是准们用来拼接字符串的方法,单实践中使用更多的还是加号操作符(+)。

ECMAScript还提供了三个基于子字符串创建新字符串的方法:slice()、substr()和substring()。这三个方法都会返回被操作字符串的一个子字符串,而且也都接受一或两个蚕食。第一个参数指定子字符串的开始位置,第二个参数(在指定的情况下)表示子字符串到哪里结束。具体来说,slice()和substring()的第二个参数指定的是子字符串最后一个字符后面的位置。而substr()的第二个参数指定的则是返回字符串的个数如果没有给这些方法传递第二个参数,则将字符串的长度作为结束位置。与concat()方法一样,slice()、substr()和substring()也不会修改字符串本身的值---它们只是返回一个基本类型的字符串值,对原始字符串没有任何影响。如:

var stringValue = "hello world";
alert(stirngValue.slice(3)); //"lo world"
alert(stirngValue.substring(3)); //"lo world"
alert(stirngValue.substr(3)); //"lo world"
alert(stirngValue.slice(3,7)); //"lo w"
alert(stirngValue.substring(3,7)); //"lo w"
alert(stirngValue.substr(3,7)); //"lo worl"

在传递给这些方法的参数是负值的情况下,它们的行为就不尽相同。其中,slice()方法会将传入的负值与字符串的长度相加,substr()方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0。最后,substring()方法会把所有负值参数都转换为0。如:
var stringValue = "hello world";
alert(stirngValue.slice(-3)); //"rld"
alert(stirngValue.substring(-3)); //"hello world"
alert(stirngValue.substr(-3)); //"rld"
alert(stirngValue.slice(3,-4)); //"lo w"
alert(stirngValue.substring(3,-4)); //"hel"
alert(stirngValue.substr(3,-4)); //""(空字符串)

在给slice()和substr()传递一个复制参数时,它们的行为相同。这是应为-3会被转换为8(11+(-3)=8),实际上相当于调用了slice(8)和substr(8)。但substring()方法则返回了全部字符串,因为它将-3转换成了0.

当第二个参数是负值时,这三个方法的行为各不相同。slice()方法会把第二个参数转换为7,这就相当于调用了slice(3,7),因此返回"lo w"。substring()方法会把第二个参数转换为0,使调用边成了substring(3,0),而用于这个方法会将较小的数最为开始位置,将较大的数作为结束位置,因此最终相当于调用了substring(0,3)。substr()也会将第二个参数转换为0,这也就意味着返回包含零个字符的字符串,也就是一个空字符串。

3)字符串位置方法
indexOf()和lastIndexOf()。这两个方法都是从一个字符串中搜索给定的子字符串,然后返回子字符串的位置(如果没有找到该子字符串,则返回-1)。这两个方法的区别在于:indexOf()方法从字符串的开头向后搜索字符串,而lastIndexOf()方法是从字符串的末尾向前搜索字符串。如:
var stringValue = "hello world";
alert(stringValue.indexOf("o"));   //4
alert(stringValue.lastIndexOf("o"));    //7

这两个方法都可以接收可选的第二个参数,表示从字符串中的哪个位置开始搜索,即indexOf()会从该参数指定的位置向后搜索,忽略该位置之前的所有字符;而lastIndexOf()则会从指定的位置向前搜索,忽略该位置之后的所有字符。如: