一、语法
1.ECMAScript中一切(变量名、函数名、操作符都区分大小写)
2.标识符:
- 第一个字符必须是 字母 或 _ 或 $
- 其他字符可以是字母、下划线、美元符号、数字
3.注释:
// 单行注释
/* 多行注释 */
4.语句后最好加上分号
5.语句块用 { } ,单条语句最好也用 { }
二、关键字和保留字
1.关键字和保留字最好不要作为标识符和属性名。
三、变量
1.ECMAscript的变量类型是松散类型,它可以保存任意类型的数据;它保存的数据也可以进行二次更变即使保存的数据类型发生了改变(但我们并不推荐改变保存数据的数据类型)
2.定义变量用 var 变量名 = 数据;
注:
- 如果不对变量名进行初始化,变量会保存undefined;
- 如果使用var定义变量,定义的是局部变量;如果省略var,则定义了一个全局变量。(不推荐定义全局变量,严格模式会有错误)。如果在函数中定义了一个全局变量,需要在调用了一次该函数后,该全局变量才会有定义。
- 同时定义多个变量:
var messsage = "hi",
found = false, /*逗号分离*/
age = 29; /*分号结束*/
- 严格模式下不能将变量名命名为eval、arguments.
四、数据类型
1.typeof操作符(查看变量的数据类型)
(1)书写格式: typeof 变量名/要检测的数据;
- typeof是操作符不是函数,因此变量名左右不需要带圆括号。
- 当变量名未进行定义或初始化时使用typeof操作符都显示undefined;
2.undefined类型
(1) 值:undefined
注: - 可以在定义变量时将其初始化为undefined。
- 对于未声明的变量只能使用typeof操作符,其他操作都会有错。
3.Null类型
(1)值:null (表示一个空对象指针)
在使用typeof操作符会返回object。
注: - 如果定义的变量想在将来用来保存对象,最好在定义该变量的时候初始化为null,这样有利于后续操作。
if(car!=null){
...
}
- 由于undefined派生于null,因此在测试undefined与null是否相等时,要返回true
alert(null == undefined); /*true*/
4.Boolean类型
(1)值:true、false
true和false与数值不同,因此true不一定等于1,false不一定等于0,。
(2)转型函数: Boolean(变量名);
使用该函数任何数据都会转化为true、false。
(3)对于理解控制流语句(如if语句)会自动执行Boolean转换
var message = "hi";
if(message){
alert("value is true");
}
/*value is true*/
5.Number类型
(1)表示整数数值和浮点数值
- 整数数值:
十进制: var num = 23;
八进制: var num = 070; //第一位必须为0,如果数字超过范围会当做十进制处理
十六进制: var num = 0xAf; //前两位必须是0x,后面的字母大小写都可以 - 浮点数值:
数值中必须有小数点,小数点后必须有一位数字,小数点前可以没有数字(但不推荐);
对于极大或极小的值,可以用e表示法表示数值
(2)数值范围
正无穷:Infinity
负无穷:-Infinity
最大值:Number.MAX_VALUE
最小值:Number.MIN_VALUE - 判断一个数值是不是位于最大值和最小值之间:
isFinite(变量名),如果在最大值最小值之间,返回true。
(3)NAN (非数值Not a Number)
任何数值除以非数值会返回NAN - 任何涉及NAN的操作都会返回NAN
- NAN与任何数值都不相等,包括NAN本身
- 判断一个数据是不是数值:isNAN(数据);
如果该数据可以转化为数值,返回false
如果不能转化为数值,返回true
(4)数值转换(把非数值转化为数值)
Number()、parseInt()、parseFloat()
6.String类型
(1)字符串可用双引号(")或单引号(’)表示。
字符串的长度可通过length属性获得:变量名.length;
(2)特点 - 字符串不可变,只能先销毁原来的字符串、再用另一个新的字符串填充该变量。
var lang = "JAVA";
lang = lang + "Script";
(3)其他数据转化为字符串
toString()、String()
7.Object类型
var o = new Object();/*可以省略圆括号,但不推荐*/
五、操作符
1.一元操作符
(1)递增递减操作符
a++ 、 a-- 、 ++a 、 --a
这四个操作符对字符串、布尔值、浮点数值和对象都有作用。
(2)一元加和减操作符
- 一元加操作符:s1= +s2; //会将s2转换为数值、赋值给s1
- 一元检测操作符:s1= -s2; //会将s2转换为数值、再添一个负号.
2.位操作符
(1)非(NOT)
用 ~ 表示
(2)与(AND)
用 & 表示
(3)或(OR)
用 | 表示
(4)异或(XOR)
用 ^ 表示,只在真值表为1 0、0 1时返回 1
(5)左移
用 << 表示
(6)有符号右移
用 >> 表示
(7)无符号右移
用 >>> 表示
3.布尔操作符
(1)逻辑非 ( ! )
(2)逻辑与 (&&)
(3)逻辑或 ( || )
4.乘性操作符
操作符在非数值的情况下会自动执行类型转换
(1)乘法(*)
(2)除法 (/)
(3)求模(%)
5.加性操作符
(1)加法(2)减法
6.关系操作符
(1)小于< (2)大于> (3)大于等于>= (4)小于等于<=
7.相等操作符
(1)相等(= =)和不相等(!=)
先进行转化,转化后再看等不等于
(2)全等和不全等
全等 (= = =)
两个操作数未经转换直接比较,相等返回true,否则返回false.
8.条件操作符
s1 = (num1>num2)?num1:num2;
9.赋值操作符
var s1 = 22;
10.逗号操作符
逗号操作符总返回表达式的最后一项。
var num = (5,1,4,8,0); //num值为0.
六、语句
1.if语句
2.do-whie语句
3.while语句
4.for语句
5.break、continue语句
6.switch语句
switch比较时用的是全等操作符,不会自动进行类型转换。
(上面六个和c语言一样)
7.for-in语句
for-in语句是一种精准的迭代语句,可以用来枚举对象。
当迭代的对象变量是null或undefined时,会停止循环循环体。因此为保证兼容性,在使用for-in语句之前要保证该对象的值不是null或undefined.
for (var propName in window) { /*var保证使用了局部变量*/
document.write(propName);
document.write("<br />");
}
8.label语句
标签名:statement
label语句通常与for语句配合使用。
var num = 0;
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost; //直接退出最外层循环
}
num++;
}
}
alert(num); //55
var num = 0;
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
continue outermost;
}
num++;
}
}
alert(num); //95
9、with语句
将代码的作用于设置到一个特定的对象中。严格模式下不允许使用with语句。
七、函数
函数使用function来声明。
注:
- return可以不带返回值,即 return;这种情况函数会在停止循环后返回undefined。一般用于需要提前停止函数又不需要有返回值的情况。(推荐让函数始终都有返回值)
1.即便定义函数是只让接受两个参数,但你也可以接受一个、三个甚至更多。
<script type="text/javascript">
function aa(a,b){
alert(a); //输出1
alert(arguments[2]); //输出3
}
aa(1,2,3);
</script>
- 可以用length属性获得有多少个参数传递给了函数
function howManyArgs() {
alert(arguments.length);
}
howManyArgs("string", 45); //2
howManyArgs(); //0
howManyArgs(12); //1
- 没有传地址的命名参数自动被赋予undefined.
- arguments的值与命名参数保持一致,不论改变哪个,另一个都随之改变,但在严格模式下,对arguments赋值,命名参数不改变
2.没有重载
如果定义了两个同名的函数、那么这个名字只属于后定义的函数