1 语法
1.1 区分大小写
一切(变量名,函数名,操作符)区分大小写
1.2 标识符
第一个字符必须是字母,下划线或者$
其他字符可以是上述或数字
1.3 注释
// 单行注释 /**/多行注释
1.4 严格模式
不确定的行为将得到处理,不安全的操作会抛出错误
整个脚本采用严格模式,可以在顶部添加代码“use strict”;
1.5 语句
即使只有一行语句,也推荐使用代码块,可以减少出错几率
if(test){
alert(test);
}
2 关键字和保留字
见P21
3 变量
可以使用一条语句定义多个变量
var name="Harry Potter",
age=11,
address="Hogwarts";
4 数据类型
五种简单数据类型 Undefined, Null, Boolean, Number, String
一种复杂数据类型 Object
一种特殊情况: typedef null 会返回Object
4.1 undefined
未初始化的和未声明的变量 typeof 都返回undefined
4.2 Null
空对象指针,检查一个对象是否为空使用if(car != null)
alert(underfined == null) 输出的是true 因为undefined的值派生自null
4.3 Boolean类型
只有2个值:true or false(注意都是小写)
可以使用Boolean(message)转化为布尔值
注意自动转化的情况
if(message){
alert("Value is true");
}
//一定要注意message会自动转化为对应的Boolean值,错误的使用一个对象可能影响应用程序
4.4 Number
浮点数计算精度问题
parseFloat(), parseInt()函数
4.5 String
string可以y用’或’'表示,但前后必须匹配(比如前面是单引号后面必须是单引号)
4.5.1 ecmascript字符串特点
var a = 'java';
a= a + "script";
这段代码后台执行过程 1 先创建一个能容纳10字符的字符串 2 在字符串中填充’java’和‘script’ 3 销毁原来的‘java’和’script’
4.5.2 转化为字符串
toString()方法:
javascript6种数据类型中,数值、布尔值、对象、字符串值都有toString()方法,null和undefined没有这个方法
String()方法:
有toString()方法,调用,没有则返回字面量(例如String(null)返回“null”)
4.6 Object
var o = new Object();
Object类型是所有它的实例的基础
5 操作符
会把非数值类型的转化为数值类型再计算
5.1 位操作符
有符号右移:使用符号位来填充所有的空位
无符号右移:用0填充所有空位,导致负数无符号右移后的数值非常大
5.2 乘性操作符
*(乘法)
结果为NaN的情况:
一个操作数是NaN
Infinity * 0
/(除法)
结果为NaN的情况:
一个操作数是NaN
Infinity/Infinity
0/0
5.3 关系操作符
"23"<"3" //true 字符串依次比较比较字符编码 "2"的字符编码小于"3"
"a"<3 //false
"a">=3 //false 比较时"a"被转化为NaN 任何操作数与NaN比较,结果都是false
5.4 相等操作符
为了保持代码中数据类型的完整性,推荐使用 全等(===) 和 不全等(!==)
NaN == NaN //false
"5" == 5 //true,因为转换后相等
"5" === 5 //false,因为数据类型不同
6 语句
for-in 语句
for(var propName in window){
document.write(propName);
}
label和break,continue来控制跳出循环
可以使用label跳出到外层循环外
var times=0;
outer:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if (i==2&&j==3){
break outer;
}
times++;
}
}
//运行后:times 23
switch
ecmascript中的switch可以使用任何数据类型,每个case的值可以是常量,变量,表达式
function mNum(num){
switch(num){
case 1+3:
console.log("4");
break;
case 5:
console.log("5");
break;
default:
console.log("unqualified");
}
}
//mNum("5") result: unqualified
//mNum(4) result: 4
//mNum(5) result: 5
case的值可以是表达式;
switch比较值的时候用的是全等操作符,所以"5"不能匹配5
7 函数
无须指定函数的返回值,任何ecmascript函数都可以在任何时候返回任何值
实际上,未指定返回值的函数返回是一个特殊的undefined值
函数的参数在内部是用一个数组来表示的,函数接收到的始终是这个数组,而不关心数组中包含哪些参数(不管定义了几个参数,都可以传送0,1,2,3……个参数)
在严格模式下,重写arguments的值会发生语法错误。
javascript函数没有重载(因为没有函数签名 PS:签名指接受参数的类型和数量)
而通过检查传入函数中参数的类型和数量并作出不同反应,可以模仿方法的重载。