基本概念
注释
ECMAScript使用C风格的注释,包括单行注释和块级注释。
//单行注释
/*这是
*一个
*块级
注释*/
(上述第二行和第三行都以一个星号开头,但这并不是必需的。添加这两个星号是为了提高可读性。
语句
在控制语句中使用代码块可以让编程意图更清晰,并且能够降低修改代码时出错的几率。
例如:
1. if(test)
alert(test); //有效但容易出错
2. if(test){ //推荐使用
alert(test);
}
变量
定义变量时使用var操作符,后跟变量名。
如:
var message;
该变量可以用来保存任何值。
ECMAScript也支持直接初始化变量。
如:var message="Hello World!";
用var操作符定义的变量将成为定义该变量的作用域中的局部变量。若在函数中使用var定义变量,那么这个变量在函数退出后就会被销毁。也可以省略var操作符,从而创建一个全局变量:
function test(){
message="Hello World!"; //全局变量
}
这个例子中省略了var操作符,因而message成了全局变量。但这并不是推荐的做法。
数据类型
ECMA Script中有5种简单数据类型(或基本数据类型):Undefined、Null、Boolean、Number和String。还有一种复杂数据类型--object。
typeof操作符--检测给定变量的数据类型
var message="some string";
alert(typeof message); //"String"
alert(typeof 95); //"Number"
调用typeof null会返回"object",因为特殊值null被认为是一个空的对象引用。
Undefined类型
未经初始化的值默认取得undefined值。
对于尚未声明过的变量,只能执行一项操作,即使用typeof操作符检测其数据类型。
即便未经初始化的变量会被赋予undefined值,但显式的初始化变量依然是明智的选择。如果能够做到这一点,那么当typeof返回"undefined"值时,我们能够知道被检测的变量是尚未被声明而非尚未初始化。
Null类型
从逻辑角度来看,null值表示一个空对象指针,这也是typeof操作符检测null值时会返回"object"的原因。
另外,undefined是派生自null值的,因此
alert(null==undefined); //true
尽管它们有着这样的关系,但它们的用途完全不同。只要意在保存对象的变量还没有真正保存对象,就应该明确的让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且有助于进一步区分null和undefined。
Boolean类型
Boolean类型的字面值true和false是区分大小写的。
要将一个值转换为其对应的Boolean值可以调用转型函数Boolean()。
各种数据类型及其对应的转换规则:
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | 空字符串 |
Number | 任何非0数字值(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | not application | undefined |
这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要,如:
var message="Hello World";
if(message){
alert("Value is true");
}
运行这个示例就会显示一个警示框,因为字符串被自动转化成了对应的Boolean值(true)。
Number类型
十进制可以直接输入;八进制字面值的第一位必须是0,然后是八进制序列;十六进制字面值的前两位必须是0x,后跟十六进制数字。
1.浮点数值
所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须包含至少一位数字。
对于那些极大或极小的数值,可以用e表示法(科学计数法)表示的浮点数值表示。
var floatNum=3.125e7; //等于31250000
2.数值范围
[5e-324,1.797693134e+308]
要确定一个数值是不是有穷的,可以使用isFinite()函数。
3.NaN
任何数值除以非数值会返回NaN,因此不会影响其他代码的执行。
NaN与任何值都不相等,包括NaN。
4.数值转换
有3个函数可以把非数值转换为数值:Number(),parseInt() 和parseFloat()。
Number()函数的转换规则
若为Boolean值,true转换成1,false转换成0;
若为数字,简单的传入传出;
若为null值,返回0;
若为字符串,则:
若只包含数字,则忽略前导0将其转换成十进制数字;
若包含有效的浮点格式,则忽略前导0将其转换成相应的浮点数值;
若包含有效的十六进制格式,则转换成对应的十进制数字;
若字符串是空的,则转换成0;
若字符串包含上述格式外的字符,则转换成NaN;
若为对象,则调用对象的valueOf()方法,按照上述规则转换成返回的值。若结果为NaN,则调用对象的toString()方法,在按照前面的方法转换。
parseInt() 函数的转换规则(处理整数时更常用)
该函数会忽略字符串前面的空格,直至找到第一个非空格字符,如果第一个字符不是数字字符或负号,则返回NaN。若解析的第一个字符是数字字符则继续解析,直至解析完所有后续字符或遇到一个非数字字符。(小数点不是有效字符)
该函数能识别出各种整数格式,但为了消除该函数可能导致的困惑,建议为该函数提供第二个参数:转换时使用的基数(即多少进制)
如:
var num=parseInt("0xAF",16); //175
var num1=parseInt("AF",16); //175
var num2=parseInt("AF"); //NaN
建议无论在什么情况下都指定基数。
parseFloat() 函数的转换规则(处理小数时更常用)
该函数与parseInt()函数类似,从第一个字符开始解析。字符串中的第一个小数点是有效的,而第二个就是无效的了,因此它后面的字符串将被忽略。但该函数只解析十进制值,因此不需要指定基数。
String类型
字符串可以由双引号或单引号表示。
1.字符字面量
String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。
字面量 | 含义 |
---|---|
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\' | 单引号,在用单引号表示的字符串中使用 |
\" | 双引号,在用双引号表示的字符串中使用 |
\xnn | 以十六进制代码nn表示的一个字符(其中n为0~F) |
\unnnn | 以十六进制代码nnnn表示的一个Unicode字符,n同上 |
2.字符串的特点
字符串创建之后,它们的值不再能改变
3.转换成字符串
第一种方式:使用几乎每个值都有的toString()方法(null和undefined没有这个方法)
第二种方式:使用转型函数String()。
String()函数遵循下列规则:
若值有toString()方法,则调用该方法并返回相应结果;
若值为null,则返回"null";
若值为undefined,则返回"undefined"。
Object类型
var o=new Object(); //不推荐省略圆括号
Object的每个实例都有下列属性和方法:
1.constructor:保存着用于创建当前对象的函数
2.hasOwnProperty:用于检查给定的属性在当前对象实例中是否存在
3.isPropertypeOf:用于检查传入的对象是否是当前对象的原型
4.propertyIsEnumerable:用于检查给定的属性是否能够使用for-in语句
5.toLocaleString():返回对象的字符串表示
6.toString():返回对象的字符串表示
7.valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()的返回值相同