一、语法:
- 区分大小写;
2.标识符:就是指变量、函数、属性的名字,或者函数的参数
a、标志符的规则:①第一个字符必须是一个字母、下划线(_)或一个美元符号($)。
②其他字符可以是字母,下划线,美元符号或者数字。
b、标志符采用驼峰大小写格式。
c、严格模式:在顶部添加以下代码:"use strict";
d、语句:结尾加入分号、在控制语句中使用代码块为最佳实践。
二、关键字与保留字
三、变量:ECMAScript的变量是松散类型,可以保存任何类型的数据。且在初始化变量时,不会为它标记类型。
1、不建议修改变量所保存值得类型,但这种操作是有效的
2、使用var操作符定义的变量为局部变量。函数退出后会被销毁。
3、不推荐省略var操作符来定义全局变量。如果有意的忽略var操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式下会报错。
四、数据类型:ECMAScript有5种简单数据类型(基本数据类型)——Undefined、Null、Boolean、Number、和String。一种复杂数据类型——Object。
1.typeof操作符——检测给定变量的数据类型
undefined——如果这个值未定义;
boolean——如果这个值是布尔值;
string——如果这个值是字符串;
number——如果这个值是数值;
object——如果这个值是对象或者null;
function——如果这个值是函数;
2.undefined类型:
a、在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。(默认取得)。
b、对于尚未声明的变量,只能执行一项操作,使用typeof操作符检测其数据类型。返回undefined。
c、尽可能显式的初始化变量,这样当ytpeof返回undefined时,我们就知道 被检测的变量还没有被声明,而不是尚未初始化。
3、null类型:
a、如果定义的变量准备在将来用于保存对象,那么最好将变量初始化为null而不是其他值。
b、undefined的值是派生自null的,所以他们的相等性测试返回true。(双等返回true,三等返回false)。
4、boolen类型:
a、Boolean类型的字面量true和false是区分大小写的。其他写法都不是Boolean值,只是标志符。
b、ECMAScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换成对应的Boolean值,可以调用转型函数Boolean()。
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
string | 任何非空字符串 | 空字符串 |
number | 任何非零数值(包括无穷大) | 0和无穷大 |
object | 任何对象 | null |
undefined | 不适用 | undefined |
5、number类型:
a、八进制字面量的第一位必须是零(0),然后是八进制数字序列。如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值被当做十进制数值解析。八进制字面量在严格模式下无效。
b、十六进制字面量的前两位必须是0x,后跟任何十六进制数字0~9和a~z,字母可大写可小写。
c、在进行算术计算时,所有八进制与16进制表示的数最终都被转换成十进制
d、浮点数值:
①数值中必须包含一位小数点,小数点后必须至少有一位数字。小数点前可以没有整数,但是不推荐。浮点数值若能转换为整数值,那么会被转换。
②极大极小值用e表示法。
③浮点数的精度有bug,所以不要测试某个浮点数的值
e、数值范围:超出js数值范围的值会被自动转换成Infinity。Infinity无法参与计算。isFinite()函数在参数位于最大最小值之间时会返回true。
f、NaN:用来表示一个本来要返回数值的操作数未返回数值的情况。
①任何涉及NaN的操作,都返回NaN。NaN与任何值都不相等,包括他本身。
②isNaN()函数接收一个参数,该参数可以是任何类型,函数会尝试将参数转换为数值,任何不能被转换为数值的值都会导致函数返回true。该函数适用于对象,先调用对象的valueOf()方法,然后确定该方法返回的值能否转换为数值。若不能,则基于这个返回值再调用toString()方法,再测试返回值。
g、数值转换:
①Number():用于任何数据类型
如果是Boolean值,true和false分别返回1和0。
如果是数值,简单地传入返回。
如果是null,返回0。
如果是undefined,返回NaN。
如果是字符串:
如果字符串只包含数字(无论正负),将其转换为十进制,忽略前导零。
如果字符串包含有效浮点格式,转换成对应浮点格式,忽略前导零。
如果字符串包含有效16进制,将其转换为相同大小的十进制整数值。
如果字符串为空,将其转换为0。
如果字符串包含除上述格式之外的字符,则将其转换为NaN。
如果是对象:调用valueOf()方法,然后依照前面的规则转换返回值。如果转换结果是NaN,则调用toString()方法,然后再次依照前面规则转换。
②parseInt():忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,即返回NaN。用parseInt()解析空字符串会返回NaN。如果第一个字符是数字字符,则继续解析第二个字符直到所有的字符被解析完或者遇到了一 个非数字字符。
parseInt()可以解析八进制与十六进制数,在ECMAScript5 JS引擎,parseInt()不具备解析八进制的能力。
可以为parseInt()函数提供第二个参数来指定转换时使用的基数(即多少进制)。如果指定了十六进制,字符串前可以不带0x。
③parseFloat():与parseInt()类似,解析到遇到一个无效的浮点数字符为止,即第二个小数点无效。
始终忽略前导零,十六进制字符串始终被转换成0。只解析十进制。若解析为整数则返回整数。
6、String类型
a、字符字面量:
①包含一些特殊的字符字面量,也叫转义序列,表示非打印字符,或具有其他用途。这些字符字面量可以出现在字符串中的任意位置,而且也被当做一个字符来解析。
②任何字符串的长度都可以通过访问其length属性获得。(若含有双字节字符,则无法返回精确的字符数目)。
b、字符串的特点
①字符串是不可变的,只能销毁与重新填充变量。
c、转换为字符串:
①toString():
数值、布尔值、字符串和对象都有该方法。但是null与undefined没有。
在调用数值的toString()方法时,可以传递一个参数来确定输出数值的基数。
②String():
可以转换任何类型,包括undefined(返回undefined)与null(返回null)。
7、Object类型:
Object的每个实例都有以下属性与方法:
constructor:他的构造函数
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在。而非原型中。
isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。
propertyIsEnumerable(propertyName):用于检查给定属性是否能够使用for-in语句来枚举。
toLocaleString
toString
valueOf
BOM和DOM中的对象都属于宿主对象,可能会也可能不会继承Object。
五、操作符:
1、++ -- 又分别有前置后置,共四个操作符。可用于number、boolean、string、object。
2、+ -操作符。对非数值应用一元加或减操作符时,操作符会像Number()转型函数一样对这个值执行转换
3、布尔操作符:
逻辑非:!
如果操作数是一个对象,返回false。
如果操作数是一个空字符串。返回true。
如果操作数是一个非空字符串。返回false。
如果操作数是一个0,返回true。
如果操作数是任意非零数值(包括Infinity),返回false。
如果操作数是null,返回true。
如果操作数是NaN,返回true。
如果操作数是undefined,返回true。
同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数。
逻辑与:&&,可以应用于任何类型的操作数,在第一个操作数不是布尔值得情况下,就不一定返回布尔值。逻辑与操作属于短路操作。
如果第一个操作数是对象,就返回第二个操作数。
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象。
如果两个操作数都是对象,则返回第二个操作数。
如果有一个操作数是null,则返回null。
如果有一个操作数是NaN,则返回NaN。
如果第一个操作数是undefined,则返回undefined。
逻辑或:||,可以应用于任何类型的操作数,在有一个操作数不是布尔值得情况下,就不一定返回布尔值。逻辑或操作属于短路操作。
如果第一个操作数是对象,就返回第一个操作数。
如果第一个操作数的求值结果为false,则返回第二个操作数。
如果两个操作数都是对象,则返回第一个操作数。
如果两个操作数都是null,则返回null。
如果两个操作数都是是NaN,则返回NaN。
如果两个操作数都是undefined,则返回undefined。
4、乘性操作符:
①乘法:若某个操作数不是数值,后台会先使用Number()转型函数将其转换。
在处理特殊情况时,遵循下列原则;
如果有一个操作数为NaN,则结果为NaN。
如果Infinity与0相乘,结果为NaN。
如果Infinity与非0相乘,结果为Infinity或-Infinity。
如果Infinity与Infinity相乘,结果是Infinity。
②除法:与乘法类似
在处理特殊情况时,遵循下列原则;
如果有一个操作数为NaN,则结果为NaN。
如果Infinity被Infinity除,结果为NaN。
如果0被0除,结果为NaN。
如果非0有限数被0除,结果为Infinity或-Infinity。
如果Infinity被任何非零数除,结果是Infinity或-Infinity。
③求模:
在处理特殊情况时,遵循以下原则:
如果被除数是无穷大值,除数是有限大数值,则结果是NaN。
如果被除数是有限大数值,而除数是零,则结果是NaN。
如果是Infinity被Infinity除,则结果是NaN。
如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数。
5、加性操作符:
①加法:
如果是Infinity加-Infinity,结果是NaN。
如果有一个操作数是对象、数值或布尔值,则调用他们的toString()方法取得相应的字符串值,然后拼接。对于undefined与null,调用String()取得相应字符串,然后拼接。
②减法:
如果是Infinity减去Infinity,结果是NaN。
如果是-Infinity减去-Infinity,结果是NaN。
如果是Infinity减去-Infinity,结果是Infinity。
如果是-Infinity减去Infinity,结果是-Infinity。
6、关系操作符:< > <= >=
如果两个操作数都是数值,则执行数值比较。
如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
如果一个操作数是对象,调用valueOf()方法,然后依照前面的规则。如果没有valueOf()方法,则调用toString()方法,然后再次依照前面规则比较。
任何操作数和NaN比较,结果都是false。
7、相等操作符:
== :双等号,先转换,在判断。
null与undefined是相等的。
要比较相等性之前,不能将null与undefined转换为其他任何值。
如果有一个操作数是NaN,则相等操作符返回false。不等操作符返回true。两个操作数均为NaN,相等操作符返回false。
如果两个操作数都是对象,若都指向同一个对像,则相等操作符返回true,否则,false。
=== :三等号,仅比较不转换。
8、条件操作符: a ? b : c
六、语句
1、if
2、do-while:后测试循环
3、while:前测试循环
4、for-in:精准的迭代,用来枚举对像属性。(在循环之前,先检测确认该对象的值不是null或undefined)。
5、label语句。配合break与continue使用。高程58页。
6、break continue。
7、with:简化多次编写同一对象的工作。严格模式下不允许使用。
/*第一种写法*/ var qs = location.search.substring(1); var hostName = location.hostName; var url = location.url; /*whith写法,与第一种功能相同*/ with(location){ var qs = search.substring(1); var hostName = hostName; var url = url; }
8、switch:每执行完一个case需要break,否则将继续执行下一个case。
七、参数:
ECMAScript中的参数在内部使用一个数组表示,函数接收到的始终是这个数组,而不关心数组中有哪些参数。在函数体内通过arguments对象来访问这个参数数组。arguments对象与数组类似但是不是数组,使用length属性可以确定长度。
arguments的值永远与对应的命名参数保持同步。但是内存空间独立。arguments的长度仅由传入参数的个数决定。没有传递值的命名参数将自动被赋予undefined。
ECMAScript中所有参数的传递都是值。
八、没有重载:两个命名相同的函数,只有后一个有效。