语法:ECMAScript一切(变量、函数名和操作符)均区分大小写。
标识符:指变量、函数、属性的名字,或者是函数的参数。命名规则:第一个字符必须是字母、下划线或美元符号($);其他字符则可以是字母、下划线、美元符号和数字。
注:标识符的命名惯例:驼峰大小写格式。
注释://单行注释 /*多行注释*/
严格模式:“use strict”,在严格模式下,js的执行结果会有很大的不同。
语句:ECMAScript语句以一个分号结尾(最好养成这个习惯)。
变量:ECMAScript的变量是松散类型的,所谓的松散类型就是可以用来保存任何类型的数据。故:对于每个变量仅仅是用于保存值的占位符而已。变量命名以var开头,在ECMAScript中如果省略了var操作符,则命名的变量为全局变量,无论在函数内外(在严格模式下也会抛出错误)。在严格模式下,不能定义名为eval或arguments的变量,否则会报错。
数据类型:ECMAScript有5种简单的数据类型(即基本数据类型):undefined、null、boolean、number和string,以及一种复杂数据类型object(object本质为一组无需的键值对组成)。可以用typeof操作符来返回数据的类型。注:返回object是有可能是对象以及null,以及typeof能区分function和object并返回。null类型表示一个空对象指针,这也是为什么typeof检测null返回了object的原因。注:没有必要给变量值显示设置为undefined,但是如果决定某个变量保存对象,那么就应该明确在定义时让这个变量保存为null。对于浮点数值,在计算的时候会产生舍入误差,这是由于使用基于IEEE754的通病,例如0.1+0.3=0.30000000000000004。ECMAScript的数据最小Number.MIN_VALUE只能保存5e-324、最大Number.MAX_VALUE为1.7976931348623157e+308。如果超过这个范围这转换成Infinity(-Infinity)。如果要检测是否有穷,则使用isFinite函数。NaN是一个特殊的数值,该数值用来表示一个本来要返回数值的操作数未返回数值的情况(避免了报错)。任何涉及NaN的操作均返回NaN,甚至包括NaN==NaN //false。因此要判断NaN则使用isNaN函数。
数值转换:Number()[可用于任何数据类型转换]、parseInt()[第二个参数:转换使用的基数]和parseFloat()[这两个仅限于字符串转换成数值]。注:一元加操作符的操作与Number()函数相同。
String的特点:ECMAScript中的字符串是不可变的,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。补充:js中的原始值是不可更改的,任何方法都无法改变(或者“突变”)一个原始值。有些时候,我们可能希望通过改变字符串的指定索引的字符,实际上,js是禁止这样子做的,改变后返回的是一个新的字符串。而对象是可变的,我们通常称对象为引用类型。对象的比较也并非值的比较,即使两个对象包含相同的属性及值,他们也是不相等的,各个索引相等的两个对象也是不相等的。当且仅当它们引用同一个基对象时,他们才相等。除了null和undefined没有toString()这个方法。对于不知道是否有null和undefined可以使用String()进行转换。
object类型:object是一组数据和功能的集合。(object类型是所有它的实例的基础,即object类型所具有的任何属性和方法也同样存在与更具体的对象中)。Constructor:保存着用于创建当前的对象的函数。
语句:语句通常使用一或多个关键字来完成给定任务。常见的语句:if、do-while、while、for、for-in、switch等。注:for-in是一种精准的迭代语句,可用来枚举对象的属性。但尽可能不要用for-in来遍历数组。因:for-in中的key表示为string类型,而数组中的下标为number类型。
break和continue的区别:continue语句是结束本次循环,而非终止整个循环。break语句则结束整个循环过程。
函数:在js中,函数作为一等公民的存在,不仅拥有一切传统函数的使用方式(声明和调用),而且可以做到像简单值一样赋值、传参、返回,同时还充当了类的构造函数的作用,同时又是一个Function类的实例(instance)。ECMAScript函数的参数传递时可以与定义时不同。在函数体内,可以通过arguments来访问传递进来的参数数组。函数有一个重要特点:命名的参数只提供便利,但并非必需。ECMAScript函数中没有函数签名,故因此也没有重载,但可以通过arguments来模拟重载。
注:修改arguments所对应的值会自动反应到对应的命名参数中去,但是不说明读取这两个值访问了相同的内存控件。他们的内存控件是独立的,但值会同步。只不过这种影响是单向的,对命名参数进行修改不会影响到arguments。另外,如果只传入了一个参数,那么arguments[1]设置的值不会反应到命名参数中,因为arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。