区分大小写
标识符
即变量、函数、属性的名字,或者函数的参数。
规则
- 第一个字符必须是字母、下划线,或者美元符号
- 替他可以包含数字
标识符中的字母可以包含扩展的ASCII或Unicode字母字符。
注释
// 单行注释
/*多行注释*/
严格模式
ECMAScript 5 引入了严格模式的概念。在严格模式下,ECMAScript3中的一些不确定行为将得到处理,而且对于某些不安全的操作也会抛出错误,执行严格模式,可以在顶部添加代码
"use strict"
在函数上方使用这行代码可以让指定函数在严格模式下执行
function doSomething() {
"use strict"
// to do ...
}
语句
ECMAScript 中的语句以一个分号结尾,但分号可省略
变量
ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。定义变量用 var 操作符,后跟变量名(未经过出事话的变量会保存一个特殊值--undefined)
可以在修改变量值得时候修改变量的类型.
如:
var message = "hi";
var message = 100;
如果变量前不用 var 修饰,则默认变量是全局变量
数据类型
ECMAScript中有5种简单数据类型(也成为基本数据类型):undefined、Null、Bollean、Number和String。还有一种复杂数据类型-object,object是由一组无序的名值对组成(蛮像字典(OC))。ECMAScript不支持任何创建自定义类型的机制,而所有值最终都将是上述6中数据类型之一。
typeof操作符
用于检测给定变量的数据类型
Undefined类型
Undefinded类型只有一个值,即特殊的undefined。
Null类型
Null类型是第二个只有一个值
只要意在保存对象的变量还没有真正保存对象,就应该明确的让改变量保存null值
Boolean类型
该类型有两个字面值:true和false。这两个值与数字值不是一回事,因此true一定不等一1,而false也一定不等于0,区分大小写。
Number类型
这种类型用IEEE754格式来表现整数和浮点值。为支持各种数值类型,ECMA-262定义了不同数值字面量格式。
进制
- 十进制:var intNum = 55;
- 八进制第一位必须是(零),然后是八进制数字序列(0-7),如果字面值超出了范围,那么前导零将被忽略,后面的数值将被当做十进制解析。八进制在严格模式下是无效的,会报错。
- 十六进制的前两位必须是0X,后面跟十六进制数字(0-9和A-F,字母不分大小写)
- 在进行算术计算时,所有八进制和十六进制的数值最终都将被转换成十进制数值。
浮点数值
- 保存浮点数空间是整数的两倍,所以如果浮点数本身是一个整数,那么该值也会被转换为整数
- 浮点数的最高精度是17位小数
- 在进行算术计算时候,浮点数的精度,远远小于整数。
数值范围
- 大多数浏览器范围是Number.MIN_VALUE(5e-324)至Number.MAX_VALUE(1.79769311348623157e+308)
- 超出范围会被转换成(-)Infinity
NaN
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值表示本来要返回操作数未返回操作数的情况(这样就不会出现错误了),任何数除以零会返回NaN
NaN本身有两个特点。首先,任何涉及NaN的操作都会返回NaN。其次,NaN与任何值都不相等,包括NaN本身。
isNaN()函数,返回值是boolean类型,帮助我们确定是不是“不是数值(NaN)”
数值转换
有3个函数可以把非数值转换为数值:Number(),parseInt()和parseFloat().第一个函数即转型函数Number()可以用于任何类型的数据,而另两个函数专门用于把字符串转换成数值。
String 类型
String类型用于表示由零或多个16位Unicode字符组成的字符序列。字符串可以由双引号或单引号表示。
- 字符字面量:String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。
- ECMAScript中的字符串是不可变得,也就是说,字符串一旦创建,他们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
- 转换为字符串:要把一个值转换为字符串有两种方法,一,toString()。但是null和undefined值没有这个方法,在不知道要转换的值是不是null或undefined的情况下,可以使用转型函数String()。
Object类型
ECMAScript中的对象其实就是一组数据和功能的集合。
操作符
类似Java
相等和不等
操作符都会先转换操作数(通常称为“强制转型”),然后再比较他们的相等性。(null和undefined是相等的)
全等操作符(===),用于表示未经转换就相等的情况,如:
var result1 = ("55"==55); // true 因为转换后相等
var result2 = ("55"===55) // false 因为不同的数据类型不相等。
语句
if语句
if的condition(条件)可以是任意表达式;而且对这个表达式求值的结果不一定是布尔值。ECMAXcript会自动调用Boolean()转换函数将这个表达式的结果转换为一个布尔值。
for - in 语句
可以用来枚举对象的属性,语法:
for (property in expression) statement
label语句
使用label语句可以在代码中添加标签,以便将来使用,语法:
label:statement
实例:
start:for(var i = 0; i < count; i++) {
alert(i);
}
一般与for和break、continue一起使用,如:
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
with语句
with语句的作用是将代码的作用域设置到一个特定的对象中。语法:
with (expression) statement;
定义with语句的目的主要是为了简化多次编写同一个对象的工作,如:
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
转为with 代码
with(location) {
var qs = search.substring(1);
var hostname = hostname;
val url = href;
}
在严格模式下不允许使用with,否则将视为语法错误。
swtich语句
switch 语句可以使用任何数据类型。case的值可以是常量、变量,表达式。
函数
用function声明
函数在定义是不指定是否返回值,函数任何时候都可以通过return语句后跟要返回的值来实现返回值。
理解参数
ECMAScript函数的参数和大多数语言的函数参数有所不同。他不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便你定义的函数只接收两个参数。在调用这个函数时也未必一定要传递两个参数。可以是一个、三个,甚至不传递参数。这样的原因是ECMAScript中的参数在内部是一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数。
没有重载
如果定义了两个名字相同的函数,则名字属于后定义的函数。