作者:汪娇娇
时间:2017年11月4日
一、语法
1、区分大小写
2、标识符
指变量、函数、属性的名字,采用驼峰大小写格式。
3、注释
单行://
多行:/* */
4、严格模式
"use strict"
5、语句
以一个分号结尾,代码块用{}包起来。
二、关键字和保留字
关键字有指定用途;
break | do | instanceof | typeof |
---|---|---|---|
case | else | new | var |
catch | finally | return | void |
continue | for | switch | while |
debugger* | function | this | with |
default | if | throw | |
delete | in | try |
保留字无特定用途,是关键字的备选。
abstract | enum | int | short |
---|---|---|---|
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
三、变量
变量是松散类型,也就是可以用来保存任何类型的数据。
四、数据类型
ECMAScript中有5种简单数据类型(Undefined、Null、Boolean、Number和String)和一种复杂数据类型(Object)。
1、typeof操作符
2、Undefined
未对变量初始化。
3、Null
空对象指针。
用typeof检测null值时会返回“object”。
代码语言:javascript复制alert(null == undefiend); //true
虽然null和undefined有这样的关系,但无论什么情况下,都没必要把一个变量的值显示的设为undefined,但只要意在保存对象的变量还没有真正保存对象时,就应该明确的让变量保存null值。
4、Boolean
虽然Boolean的字面量只有true和false这两个,但ECMAScript中所有类型的值都有与这两个值等价的值。
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零数字值(包含无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | 不适用 | undefined |
5、Number
(1)浮点数值
该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。
代码语言:javascript复制var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; //有效,但不推荐
对于极大极小的值,可以用e表示法(即科学计数法)。
代码语言:javascript复制var floatNum1 = 3.125e7; //31250000
var floatNum2 = 0.0000003; //3e-7
浮点数值的最高精度是17位小数,但在进行算数计算时其精确度远远不如整数。例如0.1加0.2的结果不是0.3,而是0.30000000000004 。
原因:这是使用基于IEEE754数值的浮点计算的通病。
(2)数值范围
最小值:Number.MIN_VALUE,这个值是 5e-324;
最大值:Number.MAX_VALUE,这个值是1.7976931348623157e 308;
如果超出数值范围:-Infinity和Infinity。
(3)NaN
NaN与任何数都不相等,包括NaN本身。
代码语言:javascript复制alert(NaN == NaN); //false
isNaN()函数:接受一个参数,用来帮我们确定这个参数是否“不是数值”。
(4)数值转换
Number()、parseInt()、parseFloat()。
注:
Number():如果字符串是空的,则将其转换为0;
parseInt():如果字符串是空的,则将其转换为NaN;能够识别出各种整数格式(十进制、八进制和十六进制),还可以接受第二个参数(转换时使用的基数,即多少进制);
parseFloat():只解析十进制,无第二个参数,十六进制的字符串始终被转换成0 。
(5)String
- 字符字面量
字面量 | 含义 |
---|---|
n | 换行 |
t | 制表 |
b | 退格 |
r | 回车 |
f | 进纸 |
\ | 斜杠 |
' | 单引号 |
" | 双引号 |
xnn | 以十六进制代码nn表示的一个字符 |
unnn | 以十六进制代码nnnn表示的一个Unicode字符 |
- 字符串的特点
不可变
- 转换为字符串
toString()、String()、与一个字符串("")加在一起
(7)Object
Object的实例都有下列属性和方法。
- constructor:保存着用于创建当前对象的函数。
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在。
- isPrototypeof(object):用于检查传入的对象是否是传入对象的原型。
- propertyIsEnumberable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。
- toLocalString():返回对象的字符型表示,该字符串与执行环境的地区对应。
- toString():返回对象的字符串表示。
- valueOf():返回对象的字符串、数值或布尔值表示。
6、操作符
(1)一元操作符
只能操作一个值的操作符叫一元操作符。
- 后置递增和递减(如num ,先用后加减)与前置递增和递减(如 num,先加减后用)的重要区别:递增和递减操作是在包含它们的语句被要求之后才执行。
- 一元加和减操作符
var num = 25;
num = num; //25
num = -num; //-25
在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。
(2)位操作符
32位:前31位表示整数的值,第32位表示数值的符号,0表示正数,1表示负数。这个表示符号的位叫符号位。
负数同样以二进制码存储,但使用的格式是二进制补码。
求补码步骤:求绝对值、反码、反码加1。
- 按位非(~):反码(操作数负值减1)
- 按位与(&)
- 按位或(|)
- 按位异或(^):只有一个1时才返回1
- 左移(<<):所有位向左移动指定的位数
- 有符号右移(>>)
- 无符号右移(>>>)将数值的所有32位都向右移动
(3)布尔操作符
- 逻辑非(!)
- 逻辑与(&&)
- 逻辑或(||)
我们可以利用逻辑或的这一行为(如果第一个操作数的求值结果为true,就不会对第二个操作数求值了)避免为变量赋值null或undefined值。
代码语言:javascript复制var myObject = preferredObject || backupObject;
(4)乘性操作符
- 乘法
Infinity与0相乘,结果是NaN;
Infinity与非0数值相乘,结果是Infinity。
- 除法
Infinity被Infinity除,结果是NaN;
0被0除,结果是NaN。
- 求模
(5)加性操作符
- 加法
Infinity与-Infinity相加,结果是NaN;
0与-0相加,结果是 0。
- 减法
(6)关系操作符
小于(<)、大于(>)、小于等于(<=)、大于等于(>=)。
大写字母的字符编码全部小于小写字母的字符编码。
(7)相等操作符
- 相等和不想等:先转换再比较
- 全等和不全等:仅比较而不转换
null和undefined相等,但不全等。
(8)条目操作符
代码语言:javascript复制var max = (num1 > num2) ? num1 : num2;
(9)赋值操作符
(10)逗号操作符
- 声明多个变量;
- 赋值。
var num1 = 1, num2 = 2, num3 = 3; //声明多个变量
var num = (5, 1, 4, 8, 0); //num的值为0
7、语句
(1)if语句:最佳实践是使用代码块
(2)do-while语句:后测试循环语句,循环体中的代码至少要被执行一次
(3)while语句:前测试循环语句
(4)for语句:前测试循环语句
(5)for-in语句:用来枚举对象的属性,属性没有顺序
(6)label语句
label: statement
代码语言:javascript复制start: for(var i=0, i < count, i ){
alert(i);
if( i == 5){
break start;
}
}
这个例子中定义的start标签可以在将来由break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用。
(7)break和continue语句
break:会立即退出循环,强制继续执行循环后面的语句。
continue:立即退出循环,但退出循环后会立即从循环顶部继续执行。
(8)with语句:将代码的作用域设置到一个特定的对象中。
代码语言:javascript复制with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}
(9)switch语句:流控制语句。
switch语句在比较值时使用的是全等操作符。
8、函数
(1)理解参数
ECMAScript中的参数在内部是用一个数组来表示的。在函数体内可以通过arguments对象来访问这个参数数组。
(2)没有重载
原因:没有函数签名
五、小结
Javascript的核心语言特性在ECMA-262中是以名为EC ECMAScript中包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但没有对取得输入和产生输出的机制作出规定。理解 ECMAScript及其纷繁复杂的各种细节,是理解其在Web浏览器中的实现 — Javascript的关键。目前大多数实现所遵循的都是ECMA-262第3版,但很多3也已经着手开始实现第5版了。以下简要总结了 ECMAScript中基本的要素。
1、ECMAScript中的基本数据类型包括 Undefined、Null、Boolean、Number和 String。
2、与其他语言不同, ECMAScript没有为整数和浮点数值分别定义不同的数据类型,,Number类型可 用于表示所有数值。
3、ECMAScript中也有一种复杂的数据类型,即 Object类型,该类型是这门语言中所有对象的基础类型。
4、严格模式为这门语言中容易出错的地方施加了限制。
5、ECMAScript提供了很多与C及其他类C语言中相同的基本操作符,包括算术操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等。
6、ECMAScript从其他语言中借鉴了很多流控制语句,例如if语句、for语句和 switch语句等。
ECMAScript中的函数与其他语言中的函数有诸多不同之处。
1、无须指定函数的返回值,因为任何 ECMAScript函数都可以在任何时候返回任何值。
2、实际上,未指定返回值的函数返回的是一个特殊的 undefined值。
3、ECMAScript中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式。
4、可以向 ECMAScript函数传递任意数量的参数,并且可以通过 arguments对象来访问这些参数。
5、由于不存在函数签名的特性,,ECMAScript函数不能重载。