一、JavaScript基本语法
•标识符
指JavaScript中定义的符号,如变量、函数、数组等。
☞ ECMAScript的标识符由字母、数字、下划线、美元符号组成。但不能以数字开头。不能是ECMAScript规定的保留字和关键字。
☞ ECMAScript的标识符建议采用驼峰大小写格式。如myCar,testString,doSomethingImportant。
☞ ECMAScript中的一切(变量、函数、操作符等)严格区分大小写。 而函数名不能使用typeof,因为它是一个关键字。
•注释
JavaScript使用C语言风格的注释,包括单行注释和块级注释。
☞ 单行注释: //这是单行注释
☞ 块级注释:
/*
这里是多行
块级注释
*/
严格模式:
ECMAScript5引入严格模式(strict mode)
“use strict”在整个脚本中启用严格模式
function (){
“use strict”
//在函数体中启用严格模式
}
•语句
☞ JavaScript中的语句以一个分号(;)结尾,如果省略分号,则把换行看成是语句的结尾。强烈建议在每行语句的末尾加上一个分号,以增强程序的可读性。
☞ 代码块的使用:代码块以左花括号({)开头,以右花括号(})结尾。
•正在使用的关键字
•未来保留的关键字
第5版把在非严格模式下运行的保留字缩减为下列这些:
class enum extends super const export import
在严格模式下,第5版 还对以下保留字施加了限制
implements package public interface private
static let protected yield
let 和 yield 是第5版新增的保留字;其他的保留字都是第三版定义的。
三、变量
•ECMAScript的变量是松散类型的,它可以用来保存任何类型的数据。
•变量声明
在JavaScript中,可以使用var关键字来声明变量,由于JavaScript是一种弱类型的脚本语言,变量还可以在不声明的情况下直接使用。但是,使用var关键字显示地声明变量,可以提高程序的可读性。因此,在JavaScript中做变量声明时,最好使用var显示地声明。
•变量声明方式:
☞ 一次声明一个变量,只声明不给变量赋初始值。如:var str;
☞ 一次声明一个变量,同时给变量赋值。如:var size=0;
☞ 一次声明多个变量,只声明不赋初始值。如 var str,size,height;
☞ 一次声明多个变量,同时给变量赋值。如var size=0,str=“hello”,height=80;
•变量的作用域:
☞ 在JavaScript中,用var操作符定义的变量将成为定义该变量的作用域中的局部变量。
☞ 要创建一个全局变量,可以省略var操作符。
•JavaScript中的数据类型分为两种:基本数据类型和引用数据类型(对象)。
☞基本数据类型:基本数据类型变量的值存储在栈中,即直接存储在变量访问的位置。
☞ 引用数据类型:引用类型类型的变量存储在栈中,但它的值是存储在堆中的对象。即存储在变量处的值是一个指针,指向存储对象的堆内存处。
•ECMAScript中的基本数据类型有5种:Undefined、Null、Boolean、Number和String。
☞ Undefined类型:Undefined类型只有一个值,那就是undefined。在使用var声明变量但未对其初始化是,变量的值就是undefined。它从null派生而来,ECMA-262规定对它们的相等性测试要返回true。
例题2-3.html
四、数据类型
☞ Null类型:Null类型也只有一个值,这个值是null。从逻辑角度看,null值表示一个空对象指针(或者说,它表示一个还不存在的对象,可以看成是对象的占位符)。
☞ Boolean类型:该类型有两个值,true和false。0表示false,非0表示true。要将一个值转换成对应的Boolean值,可以调用转型函数Boolean()。在实际使用中,JavaScript也会按以下规则自动转换:
例题2-4.html
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | “”(空字符串) |
Number | 任何非零数值 | 0和NaN |
Object | 任何对象 | null |
Undefined |
| undefined
|
☞ Number类型:数值类型有整数和浮点数。
☃ 整数的形式有:
十进制整数:如 55,86
八进制整数:如 072,056 (第一位必须是0,符合为0~7)
十六进制整数:如 0xA,0x1f (前两位必须是0x,符号为0~9及A~F)
☃ 浮点数的形式有:
带小数的数:如1.25,85.6
科学计数法表示的数:如3.125e7,3e-7
☃ 数值范围:ECMAScript能够表示的最大值和最小值如下:
最大数值:1.7976931348623157e+308,保存在Number.MAX_VALUE中。
最小数值:5e-324,保存在Number.MIN_VALUE中。
*超出这个范围的数值将被自动转换成正无穷Infinity(保存在Number.NEGATIVE_INFINITY中)和负无穷-Infinity(保存在Number.POSITIVE_INFINITY中)。
*isFinite()函数可以用来测定一个数是否介于正无穷和负无穷之间。
☃ NaN:它是一个特殊的数值,是非数值(Not a Number)的缩写。它用来表示一个本来要返回数值得操作数未返回数值得情况,减少错误的抛出。isNaN()函数可以帮我们测定某个表达式的结果是否“不是数值”。
☃ 数值转换:有三个函数可以把非数值转换成数值
Number():可用于任何数据类型。转换规则:
1、Boolean值:true->1 false->0
2、数字值:作简单的传入和返回。
3、null值:返回0。
4、undefined:返回NaN。
5、字符串:
a、只包含数字:转换成10进制整数(忽略前面的0)
b、包含有效的浮点格式:转换成对应的浮点值
c、包含有效的十六进制格式:转换成十进制整数
d、空字符串:转换成0
e、其余的转换成NaN
NaN,即非数值(Not a number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。
☃ 数值转换:有三个函数可以把非数值转换成数值
parseInt():专门用于把字符串转换成数值,主要用于处理整数型字符串。它会忽略字符串前面的空格,直至找到第一个非空格字符,如果第一个字符不数字或负号,parseInt()就会返回NaN;如果第一个字符是数字,parseInt()会继续解析第二个字符直到解析完所有后续字符或遇到了一个非数字字符。
parseFloat():专门用于把字符串转换成数值,主要用于处理浮点数字符串。它从第一个字符开始解析每个字符,而且一直解析到字符串末尾,或者遇到一个无效的浮点数字字符为止。从第二个小数点开始,它后面的字符串将被忽略;parseInt()忽略前导的0,并且这解析十进制值,十六进制格式的字符串始终会被转换成0。
☞ String类型:用单引号(‘’)或双引号(“”)引起来的若干个字符。在JavaScritp中,单引号和双引号引起来的字符串没有任何区别。
☃ 转义字符:
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 空格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\’ | 单引号 |
\” | 双引号 |
☃ 任何字符串的长度都可以通过访问其length属性获得。如var str=“hello world!”; alert(str.length);
☃ 字符串转换:要将一个值转换为字符串,有两种方式
1、使用toString()方法:数值类型、布尔类型、对象类型和字符串类型都有toString()方法,但null和undefined值没有这个方法。另外,在调用数值的toString()方法时,还可以传递一个参数:输出数值的基数。
2、在不知道要转换的值是不是null或undefined的情况下,可以使用转型函数String(),这个函数能将任何类型的值转换为字符串。其转换规则是:如果值有toString()方法,则调用该方法;如果只是null,则返回“null”;如果只是undefined,则返回“undefined”。
字符串的特点:
ECMAScript中的字符串是不可变的。字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串。
•typeof 操作符:检测变量的数据类型。对一个值使用typeof操作符可能返回下列字符串:
☞ “undefined”—如果这个值未定义
☞ “boolean”—如果这个值是布尔值
☞ “string”—如果这个值是字符串
☞ “number”—如果这个值是数值
☞ “object”—如果这个值是对象或null
☞ “function”—如果这个值是函数
五、操作符
•算术操作符
操作符 | 功能 |
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 求余数 |
++ | 递增运算(加1) |
-- | 递减运算(减1) |
•字符串操作符
JavaScript的字符串操作符只有一个,那就是“+”。用于把文本值或字符串变量连接起来。
如:text=“Hello”+“World”;
或 text1=“Hello”;
text2=“World”;
text=text1+text2;
•关系操作符
操作符 | 功 能 | 说 明 |
> | 大于 | 左边表达式值大于右边时,返回TRUE |
< | 小于 | 左边表达式值小于右边时,返回TRUE |
>= | 大于等于 | 左边表达式值大于等于右边时,返回TRUE |
<= | 小于等于 | 左边表达式值小于等于右边时,返回TRUE |
•等性操作符
操作符 | 功 能 | 说 明 |
== | 相等 | 两边表达式的值相等时,返回TRUE |
!= | 不相等 | 两边表达式的值不相等时,返回TRUE |
=== | 全等 | 两边表达式的值相等且类型一样时,返回TRUE |
!== | 非全等 | 两边表达式的值不相等或类型不同时,返回TRUE |
•逻辑操作符
操作符 | 功 能 | 说 明 |
&& | 逻辑与 | 所有表达式的值都为TRUE时,返回TRUE,否则返回FALSE |
|| | 逻辑或 | 所有表达式的值都为FALSE时,返回FALSE,否则返回TRUE |
! | 逻辑非 | 表达式为TRUE时返回FALSE,反之,返回FALSE |
•赋值操作符
操作符 | 功 能 | 说 明 |
= | 赋值 | 右边表达式的值赋值给左边变量 |
+= | 赋值加 | 左侧原变量加上右侧表达式的值后,赋给原变量 |
-= | 赋值减 | 左侧原变量减去右侧表达式的值后,赋给原变量 |
*= | 赋值乘 | 左侧原变量乘以右侧表达式的值后,赋给原变量 |
/= | 赋值除 | 左侧原变量除以右侧表达式的值后,赋给原变量 |
%= | 赋值求余 | 左侧原变量对右侧表达式的值求余后,赋给原变量 |
•位操作符
操作符 | 功 能 | 说 明 |
& | 位与 | 两个位相同时,结果为1,否则为0 |
| | 位或 | 两个位都是0,结果为0,否则为1 |
~ | 位非 | 按位取反操作 |
^ | 位异或 | 两个位不同时,结果为1,否则为0 |
<< | 位左移 | 操作符左边表达式的值左移右边指定的位数 |
>> | 位右移 | 操作符左边表达式的值右移右边指定的位数 |
•其他操作符
☞ 条件操作符(?:):是JavaScript中唯一的三元操作符,用法如下
max=(num1>num2)?num1:num2;
等价于:
if(num1>num2){
max=num1;
}else{
max=num2;
}
•其他操作符
☞ typeof操作符:检测变量数据类型。(详见第19张幻灯片)
☞ new操作符:用于创建一个新对象。
如:var d=new Date();
var o=new Object();
☞ delete操作符:用于删除变量或对象的属性。(JavaScript的核心对象和属性以及用var关键字声明的变量是不能删除的)
如: y=6; delete y;
var x=3; delete x; //不能删除
•其他操作符
☞ void操作符:在JavaScript中,void是一个特殊的操作符,它可以用在任何表达式之前,是表达式的返回值为undefined。
如:var str=“Hello”;
alert(void str); //输出undefined
•其他操作符
☞ 逗号操作符:使用逗号操作符可以在一条语句中执行多个操作。逗号操作符多用于声明多个变量,但也可以用于赋值。
如: var num1=1,num2=2,num3=3;
var num=(5,1,4,8,0); //num的值为0
•选择结构
☞ if语句: 2-11.html
•循环结构
☞ while语句:
•循环结构
☞ do...while语句:
•循环结构
☞ for语句:
•循环结构
☞ for...in语句:JavaScript提供了一种for...in的循环机制来遍历对象的所有属性。结构如下:
for(prop in object){
代码块
}
//性能比较低尽量不用。
with语句
with语句的作用是将代码的作用域设置到一个特定的对象中。
with语句的语法如下:
with(expression) statement;
定义with语句的目的主要是为了简化多次编写同一个对象的工作,
var qs = location.protocol
var hostName = location.pathname;
var url = location.href;
console.log(qs);
console.log(hostName);
console.log(url);
with(location) {
var qs = protocol;
var pathName = pathname;
var url = href;
console.log(qs);
console.log(hostName);
console.log(url);
}
使用with语句关联了location对象在with语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部变量环境中找不到该变量的定义,就会查询location对象中是否有同名的属性,如果发现了同名属性,则以location对象属性的值作为变量的值。
严格模式下不允许使用with语句,否则视为语法错误。
七、函数
•理解参数:
ECMAScript函数的参数与其他语言中的参数有所不同,ECMAScript函数不介意传递进来多少个参数,也不在乎传递进来的参数是什么类型。也就是说,即使你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数。之所以这样,原因是ECMAScript中的参数在内部是用一个数组来表示的,函数接收到的始终都是这个数组,而不关心数组中有哪些参数。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递个函数的每一个参数。
•理解参数:
•理解参数:
通过arguments对象的length属性可以获知有多少个参数传递给了函数。
•没有重载:
EMCAScript中,函数不能像其他语言那样进行重载,后定义的函数会覆盖前面定义的同名函数。
ECMAScript函数没有签名,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的函数重载是不可能做到。