本篇为后续内容的简介,不展开详述。

本篇内容
  • 语法
  • 变量
  • 操作符
  • 语句
  • 函数

语法

1.1 区分大小写

ECMAScript中的一切(变量、函数名和操作符)都区分大小写。

1.2 标识符

标识符指变量、函数、属性的名字,或者函数的参数。
命名规则:

  • 第一个字符必须是一个字母、下划线(_)或者一个美元符号($);
  • 其他字符可以是字母、下划线、美元符号或者数字;
  • 除关键字、保留字、true、false和null。
    (标识符中的字符也可以包含拓展的ASCII或Unicode字符字符)
    标识符推荐用第一个字母小写,剩下的每个单词的首字母大写的驼峰大小写格式。

1.3 注释

单行注释(//),如:

1
// 这是单行注释

多行注释(/开头,/结尾),如

1
2
3
4
/*
* 看
* 这是多行注释,前面的*只是为了提高可读性
*/

1.4 严格模式

ECMAScript5引入了严格模式(strict mode)的概念。严格模式是为了JavaScript定义了一种不同的解析和执行模型。在严格模式下,ECMAScript3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。
使用:在脚本顶部加上如下代码

1
'use strict';

它是一个编译指示(pragma),用于告诉支持的JavaScript引擎切换到严格模式。

在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行:

1
2
3
function demo() {
'use strict';
}

兼容:IE10+、Firefox4+、Safari5.1+、Opera12+、Chrome
参考文章:

1.5 语句

ECMAScript中的语句以一个分号结尾(;);如果省略分号,则由解析器确定语句的结尾,如:

1
2
var a = 10
// 这里没有分号结尾也是有效的,但不推荐,比方压缩代码的时候会造成错误

代码块以{开头,}结尾,如

1
2
3
if (true) {
// 代码块
}

关键字和保留字

1 关键字

关键字用于表示控制语句的开始或结束,或者用于执行特定操作等,不能用作标识符

  • 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

2 保留字

暂无用途,但将来可能有用,也不能用作标识符

  • 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的变量是松散类型的,可以用来保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符而已。(不会标记类型,因此可以修改变量值的同时修改值的类型)
未经过初始化的变量,会保存一个特殊值——undefined。如:

1
var test;	// undefined

var 操作符定义的变量将成为该变量的作用域中的局部变量。

数据类型

ECMAScript(5)中有5种简单数据类型(基本数据类型):Undefined, Null, Boolean, Number, String。还有一种复杂类型Object,Object本质上是由一组无序的名值对组成的。
ECMAScript不支持任何创建自定义类型的机制,而所有值最终都将是以上6中数据类型之一。

ES6中基本数据类型新增了Symbol,ES7新增了BigInt

1. typeof操作符

typeof操作符用于检测给定变量的数据类型
值:

  • “boolean”:值是布尔值,
  • “undefined”:值未定义,
  • “string”:值是字符串,
  • “number”:值是数值,
  • “object”:值是对象或null,
  • “function”:值是函数

如:

1
typeof "abc"  // "string"

2.Undefined类型

1
2
3
4
5
6
var test1;

console.log(typeof test1); // "undefined"
console.log(typeof test2); // "undefined"
console.log(test1); // "undefined"
console.log(test2); // ReferrenceError

对于尚未声明过的变量,只能执行一项操作:typeof操作符检测其数据类型。

3.Null类型

Null类型只有一个值,是null,null值表示一个空对象指针,所以typeof null会返回”object”
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null,这样做不仅可以体现null作为空指针的惯例,而且也有助于进一步区分null和undefined。
(undefined值是派生自null值的,所以null == undefined返回true)

4.Boolean值

用得最多的类型。值为true和false。可以调用转型函数Boolean()把ES中所有类型的值转化为Boolean值,转化规则:

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 “”(空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefinded 不适用 undefined
Null 不适用 null

5.Number类型

ES中Number类型使用IEEE754格式来表示整数和浮点数值。

  • 十进制,直接输;
  • 八进制,第一位必须是零(0),然后是八进制数字序列(0~7),如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值将被当作十进制数值解析。(070 -> 56(十进制), 079 -> 79(十进制))。八进制字面量在严格模式下是无效的,会报错;
  • 十六进制,前两位必须是(0x),后跟任何十六进制数字(0~9及A~F),A~F不限大小写

浮点数:数值中必须包括一个小数点,小数点后必须要有一个数字。
因为保存浮点数需要的内存空间是保存整数的两倍,因此ES会不失时机地将浮点数转换为整数值。
对于极大或极小的数值,可以用科学计数法e表示。在默认情况下,ES会将那些小数点后面带有6个零以上的浮点数转为e表示法表示的数值(如0.0000003 -> 3e-7)。
浮点数值的最高精度是17位小数,但在算数计算时其精度远不如整数,这是使用基于IEEE754数值的浮点计算的通病。

数值限制:

  • ES能够表示的最小数值保存在Number.MIN_VALUE中,大多浏览器是5e-324;
  • 能够表示的最大数值保存在Number.MAX_VALUE中,大多浏览器是1.7976931348623157e+308;

无穷:
如果某次计算的结果得到了超过JavaScript数值范围的值,这个值将被自动转换成特殊的Infinity值,负数为-Infinity(负无穷),正数为Infinity(正无穷)。
Infinity是不能参数计算的数值,验证用isFinite()函数,在范围内的数值返回true,如

1
2
isFinite(3);	// true
isFinite(Number.MAX_VALUE * 2) // false

访问Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY也可以得到负和正的Infinity值。

NaN:
not a number,这个数值表示一个本来要返回数值的操作数未返回数值的情况,验证用isNaN()函数,能转为数值的返回false,不能的返回true。在ES中,任何数值除以0会返回NaN(实际上只有0/0才返回NaN,其他返回Infinity或-Infinity)。
NaN的特点:任何涉及到NaN的操作都会返回NaN(NaN / 10);NaN与任何值都不相等,包括NaN本身。

数值转换:
三个函数可以把非数值转换为数值:Number(), parseInt(), parseFloat()。
Number()可用于任何数据类型,parseInt()和parseFloat()用于把字符串转换为数值。
parseInt函数的第二个参数是转换时使用的基数(即多少进制)

6.String类型

String类型用于表示用零或多个16位Unicode字符组成的字符序列,即字符串。
String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者有其他用途

ES中字符串是不可变的,字符串一旦创建,它们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充改变量。如:

1
2
var long = "java";
long = long + 'script';

数值、布尔值、对象额字符串都有toSting()方法,返回一个字符串,其参数为进制,如:

1
2
3
4
5
var num = 10;
console.log(num.toSting(2)); // '1010'
console.log(num.toSting(8)); // '12'
console.log(num.toSting(10)); // '10'
console.log(num.toSting(16)); // 'a'

String()可以将任何数据类型转为字符串,(null -> ‘null’, undefined -> ‘undefined’)

7.Object类型

ES中的对象就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。
Object类型是所有它的实例的基础,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。
Object的每个实例都具有下列属性和方法:

  • constructor:保存着用于创建当前对象的函数;
  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(非实例原型)是否存在;
  • isPrototypeOf(object):用于检查传入的对象是否传入对象的原型;
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举;
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应;
  • toString():返回对象的字符串表示;
  • valueOf():返回对象的字符串、数值或布尔值表示

操作符

1.一元操作符

只能操作一个值的操作符。

1.1 递增递减
++--

1.2 一元加和一元减操作符
对非数值应用一元操作符时,该操作符会像Number()转型函数一元对这个值执行转换

2.位操作符

按位非,按位与,按位或,按位异或,左移<<,右移>>,无符号右移>>>

3.布尔操作符

逻辑与,逻辑或,逻辑非

4.乘性操作符

乘法*,除法/,求模%

  • 求模运算时,a / b的结果向无穷小方向舍入,求余运算时a / b的结果向0方向舍入。

5.加性操作符

加法+,减法-

6.关系操作符

小于,大于,小于等于,大于等于

7.相等操作符

相等==,不相等!=。这两操作符都会先转换操作数(强制转型),然后再比较它们的相等性。
全等===,不全等!==。比较前不转换操作数。

8.条件操作符

?:
variable = boolean_expression ? true_value : false_value;

9.赋值操作符

=,*=,/=,%=,+=,-=,<<=,>>=,>>>=

10.逗号操作符

逗号操作符可以在一条语句中执行多个操作,还可以用来赋值

1
2
var num = (1,2,3,4,5);
console.log(num); //5

语句

1.if语句

2.do-while语句

3.while语句

4.for语句

5.for-in语句

6.label语句

label语句可以在代码中添加标签,以便将来使用,如
1
2
3
start: for (var i = 0; i < 10; i++) {
//...
}

其中定义的start标签可以在将来由break或者continue语句引用。

7.break和continue语句

8.with语句

with语句的作用是将代码的作用域设置到一个特定的对象中,如:

1
2
3
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;

可以写为:

1
2
3
4
5
with (location) {
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}

9.switch语句

函数

ES中的函数使用function关键字来声明,后跟一组函数和函数体。
return语句在不带有返回值的时候返回undefined。
ES函数不介意传递的参数数量和类型,原因在于ES中参数在内部是用一个数组来表示的,可以通过arguments对象来访问这个数组。

温习:

  • 标示符的命名规则
  • ES的数据类型
  • typeof操作符的返回值
  • null与object
  • 数据类型间的转换
  • 进制数表示、Infinity、NaN
  • 操作符与语句

(完)