『Week NO.1』
3.1语法
ECMAScript大量借鉴了C及其他类C语言(如:java和perl)。
3.1.1区分大小写
ECMAScript里一切都是区别大小写的
3.1.2标识符
标示符必须以字母,下划线或美元符号($)为开头;(不能将关键字作为标识符)
3.1.3注释
a.单行注释 //
b.多行注释 /**/
3.1.4语句
ECMAScript里语句以一个分号结尾,虽然不是必须的,但建议不要省略。
3.2关键字和保留字
break | case | catch | continue | default |
delete | do | else | finally | for |
function | if | in | instanceof | new |
return | switch | this | throw | try |
typeof | var | void | while | with |
abstract | boolean | byte | char | class |
const | debugger | double | enum | export |
extends | final | float | goto | implements |
import | int | interface | long | native |
package | private | protected | public | short |
static | super | synchronized | throws | transient |
volatile |
3.3变量
ECMAScript里变量属于松散类型,即可以保存任何类型的数据。
定义变量用var操作符
var meiyzeng
var meiyzeng=2014
第一行中未经初始化的变量系统会自动为其赋值一个undefined,初始化便是给变量赋值。
另外可以使用一条语句定义多个变量,只用中间用逗号隔开即可
3.4数据类型
typeof操作符,对于每一个值用typeof可能返回下列某个字符串:"undefined" "boolean" "string" "number" "object" "function";
typeof的操作数可以是变量,也可以是数值字面量;
3.4.1undefined类型
用var声明变量但未对其加以初始化,这个变量的值就是:undefined;(如上面定义)
可以显式地把一个变量的值设置为undefined,一般没有必要;引入这个值是为了区别空对象指针与未初始化的变量;
3.4.2Null类型
Null类型也只有一个值就是null;从逻辑的角度来看,null值标识一个空对象指针,而这也正是使用typeof操作符检测null会返回"object"的原因;
若定义的变量准备在将来用于保存对象,那么最好将变量初始化为null而不是其他值;这样一来,一检查null值就可知道变量是否已经保存了一个对象的引用;
实际上undefined值是派生自null值的,ECMA-262规定对应他们的相等性测试返回true;
3.4.3Boolean类型
该类型只有两个字面量:true和false;Boolean类型的字面值区分大小写的;
数据类型的转换规则如下表:
数据类型 | 转换成true的取值 | 转换成false的取值 |
---|---|---|
Undefined | 无 | undefined |
Boolean | true | false |
Object | 非null时都为true | null |
Number | 非0和NaN时都为true | 0和NaN |
String | 非空字符串 | ""(空字符串) |
3.4.4Number类型
八进制字面值的第一位必须是0(零);如果字面值中的数值有超过范围的,那么前导的0将被忽略,后面的数当作十进制来解析;
十六进制字面值的前两位必须是0x;后面是(0~9及A~F),其中字母可大写也可小写;
ECMAScript能够标识的最小数:5e-324;
ECMAScript能够标识的最大数:1.796931348623157e+308;
( 用isFinite()函数来确定一个数是不是又穷的;)
var result=Number.MAX_VALUE+Number.MAX_VALUE;
alert(isFinite(result)); //fase;
NaN (not a number)
涉及到NaN的操作都会返回NaN;
NaN与任何值都不相等,包括NaN本身;
isNaN()函数会在收到一个值后,会将某些不是数值的值转化成数值,例如:字符串"10"或Boolean值;而任何不能被转换成数值的会使这个函数返回true;
有3个函数可以把非数值转换成数值:Number();ParseInt();ParseFloat();
其中Number();可以用于任何数据类型,另外两个函数专门用于把字符串转换成数值。
在ECMAScript5 JavaScript引擎中,ParseInt()不具备有解析八进制数的能力;
3.4.5 Stringr类型
用于表示0个或多个16位Unicode字符组成的字符序列,即字符串;
转义序列,用于表示非打印字符:如"\n"
toString()方法能将其他类型转换成字符串
3.4.6 Object类型
ECMAScript中的对象就是一组数据和功能的集合,通过var o=new Object();创建新的对象;
3.6. 操作符
3.6.1 一元操作符:++ --
3.6.2 位操作符:按位非(~),按位与(&),安位或(|),按位异或(^),左移(<<), 有符号位的右移(>>),无符号位的右移(>>>)
3.6.3 布尔操作符:逻辑非(!),逻辑与(&&),逻辑或(||)
3.6.4 乘性操作符:乘法,除法,求模(求余%)
-
操作数为非数值的情况下会执行制动的类型转换;空字符串当做0,布尔值true将被当做1;
-
对于乘法:有一个数是NaN,则结果就是NaN;
如果是Infinity和0相乘,结果是NaN;
如果有Infinity和非0数相乘,结果是Infinity或则是-Infinity;(符号取决于 有符号的操作数的符号;)
-
对于除法:Infinity / Infinity 结果是NaN;
0/0 结果是NaN;
非0有限数被0除,结果是Infinity或是-Infinity;
-
对于求模:
无穷大%有限大 结果是NaN;
有限大%0 结果是NaN;
Infinity%Infinity结果是NaN;
有限大%无穷大 结果是被除数(那个有限大的数);
3.6.5 加性操作符:加法,减法;
-
对于加法:Infinity+(-Infinity)=NaN;
-
对于减法:Infinity-Infinity=NaN;
-Infinity-(-Infinity)=NaN;
Infinity-(-Infinity)=Infinity;
-Infinity-Infinity=--Infinity;
3.6.6 关系操作符:小于(<),大于(>),小于等于(<=),大于等于(>=),
相等(==),不相等(!=),全等(===),不全等(!==);
-
这几个操作符都返回一个布尔值;
-
相等和不相等——先转换再比较;
-
全等和不全等——仅比较不装换;
3.6.7 条件操作符:
例如:var max=(num1>num2)? num1 : num2 ;
num1>num2(关系是返回true),则max=num1;否则max=num2;
3.6.8 赋值操作符:
3.6.9 逗号表达式:var num1=1, num2=2, num3=3;
var num=(1,4,8,4,0); //num的值为0;
3.7基本语句:
3.7.1 if语句 用于条件判断
3.7.2 do-while语句
3.7.3 while语句
3.7.4 for语句 用于循环
3.7.5 for-in语句
for-in语句是一种精准的迭代语句,可以用来枚举对象属性;
【语法】:for(property in expression) statement ;
【示例】:使用for-in语句循环来显示BOM中window对象的所有属性:
for (var propName in window){
document.write(propName);
}
3.7.6 label语句
3.7.7 break和continue语句;
-
break语句会立刻退出循环,执行循环体后面的语句;
-
continue语句也会退出循环,但是执行下一次循环;
3.7.8 with语句;
3.7.9 switch语句;
3.8 函数
-
可以向ECMAScript函数传递任意数量的参数,并可以通过arguments对象访问这些函数;
-
由于不存在函数签名的特征,ECMAScript函数不能重载;