基础

语法

区分大小写

标识符

  • 第一个标识符必须是一个字母、下划线或者美元符号;

  • 其他字可以是字母、下划线、美元符号或数字。

注释

//单行注释

/**/多行注释

变量

var关键字

在应用程序中,使用变量来作为值的符号名。变量的名字又叫做标识符。标识符可以是按照下列格式规则组合起来的一或多个字符:

  • 第一个标识符必须是一个字母、下划线(_)或者美元符号($);

  • 其他字可以是字母、下划线、美元符号或数字。

  • 不能是关键字和保留字。

按照惯例,JavaScript标识符采用驼峰大小写格式。

JavaScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用var操作符。

var声明作用域

var在函数内定义的变量为局部变量,如果省略var则是全局变量。

var声明提升

JavaScript变量的另一特别之处是,你可以引用稍后声明的变量而不会引发异常。这一概念称为变量声明提升hoisting;JavaScript变量感觉上是被“提升”或移到了所有函数和语句之前。然而提升后的变量将返回 undefined值。所以在使用或引用某个变量之后进行声明和初始化操作,这个被提升的引用仍将得到 undefined值。

数据类型

JavaScript语言定义了下面7种不同类型的值:

  • 六种简单数据类型

    • Undefined

    • Null

    • Boolean

    • Number

    • String

    • Symbol(在 ECMAScript 6 中新添加的类型)

  • 一种复杂数据类型

    • Object

3.4.1 typeof操作符

typeof操作符用来获取变量的数据类型。typeof操作符的操作数可以是变量,也可以是数值字面量。注意,typeof是一个操作符而不是函数,因此圆括号尽管可以使用,但不是必须 的。

3.4.2 Undefined类型

Undefined类型只是一个值,即特殊的undefined。在使用var声明变量但未对其赋初值或者赋值为undefined,这个变量的值就是undefined。

3.4.3 Null类型

Null类型也只有一个值,即null。null表示一个空对象指针。所以使用typeof操作符检测null会返回object。

3.4.4 Boolean类型

Boolean只有两个字面值:true和false;虽然Boolean类型的字面值只有两个,但是所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用类型转换函数Boolean()。

3.4.5 Number类型

Javascript定义了不同的数值字面量格式。

  • 十进制 var intNum=55;

  • 八进制 第一位必须是0 例如:var octalNum=075;

  • 十六进制 前两位必须是0x,后跟任何十六禁止数字(0~9,A~F),字母A~F可以大写也可以小写。 例如:var hexNum=0xA;

ES6提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。

从ES5开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6进一步明确,要使用前缀0o表示。

1.浮点值

所谓浮点数值,就是该数值中必须包含一个小数点。并且小数点后面必须至少有一位数字。虽然小数点前面可以没有整数,但是我们不推荐这种写法。

由于保存浮点数值需要内存空间是保存整数值的两倍,因此,如果小数点后面没有任何数字,那么这个数值就可以作为整数值来保存。同样地,如果浮点数值本身表示的就是一个整数(如1.0),那么该值会被转换为整数,如下:

可以使用科学计数法来表示浮点数值:前面是一个数值,中间是一个大写或小写字母E,后面是10的幂中的指数。

默认情况下,Javascript会将那些小数点后面带有6个0以上的浮点值转换为科学计数法。

浮点数值的最高精度是17位小数。

2.数值范围

Javascript能够表示的最小数值是Number.MIN_VALUE,最大数值是Number.MAX_VALUE;如果计算的结果得到一个超出Javascript数值范围的值,那么这个数值自动转换成特殊的Infinity值。如果是负数,则会被转换成-Infinity。

3.NaN

NaN即非数值(Not a Number)是一个特殊数值,这个数值用于表示一个本来要返回数值操作数未返回数值的情况。

NaN本身有两个非同寻常的特点:

  • 任何涉及NaN的操作(例如NaN/10)都会返回NaN。

  • NaN与任何值都不相等,包括NaN本身。

针对NaN的这两个特点,JavaScript定义了一个isNaN()函数。这个函数接受一个参数,该参数可以是任何类型,而函数会帮我确定这个参数是否不是数值。isNaN()在接收一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值。

4.数值转换

有3个函数可以把非数值转换为数值:

  • Number():可以用于任何数据类型,转换的规则如下

    • 如果是Boolean值,true和false将分别被转换为1和0.

    • 如果是数字值,只是简单的传入和返回

    • 如果是null,返回0

    • 如果是undefined,返回NaN

    • 如果是字符串,遵循下列规则

      • 如果字符串中包含数字(包含前面带正好或负号的情况),则将其转换为十进制

      • 如果字符串中包含有效的十六进制格式,则将其转换为相同大小的数值。

      • 如果字符串是空的,将其转换为0

      • 如果字符串中包含除上述格式以外的字符,则将其转换为NaN。

    • 如果是对象,则调用对象的valueof()方法,然后按照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次按照前面的规则转换成字符串。

  • parseInt():parseInt()可以将字符串转换为数值,转换规则如下:

    • 它会忽略字符串前面的空格,直至找到第一个非空格字符串。如果第一个字符串不是数字字符或者正负号,parseInt()就会返回NaN。

    • 如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续自付或者遇到了一个非数字字符。

    • parseInt()能够识别出各种整数格式,parseInt()可以为函数提供第二个参数:转换时使用的基数。

  • parseFloat():

    • 与parseInt()函数类似,也是从第一个字符开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。也就是说字符串的第一个小数点是有效的,而第二个小数点是无效的。

    • 和parseInt()一样都会忽略前导的0。parseFloat()可以识别前面讨论过的所有浮点数值格式,也包括十进制整数格式。但十六进制格式的字符串则始终被转换为0。

    • parseFloat()只解析十进制,因此它没有用第二个参数指定基数的用法。最后还需要注意一点:如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后都是0),parseFloat()会返回整数。

3.4.6 String类型

字符串可以由双引号或单引号表示,这两种语法形式没有什么区别。不过,以双引号开头的字符串也必须是以双引号结尾,而单引号开头的字符串必须以单引号结尾。

1.多行字符串

由于多行字符串用写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ... 表示:

2.字符串连接

要把多个字符串连接起来,可以用+号连接:

如果有很多变量需要连接,用+号就比较麻烦。ES6新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量。

3.转换字符串

要把一个值转换为一个字符串有两种方式

  • 使用toString()方法

    • 几乎每个值都有的toString()方法,但null和undefined值没有这个方法。

    • 在调用toString()方法时,可以传递一个参数:输入数值的基数,通过传递基数,toString()可以输入以二进制、八进制、十六进制,乃至其他任意有效进制格式表示。

  • 使用转型函数String(),这个函数能够将任何类型的值转换为字符串。

    • 如果值有toString()方法,则叼哦那个该方法(没有参数)并返回相应的结果。

    • 如果值是null,则返回"null"

    • 如果值是undefined,则返回 “undefined”。

4.操作字符串

3.4.7 Object类型

对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。在不传递参数的情况下,完全可以省略圆括号,不过不推荐这么做。

Object类型是所有实例的基础。Object每个实例都具有一下属性和方法。

  • Constructor:构造函数

  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例子中是否存在。

  • isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。

  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。

  • toLocaleString():

  • toString():

  • valueOf():

3.5 操作符

3.5.1 一元操作符

1.加、减、乘、除和取余

2.递增和递减

3.幂(**)

3.5.2 位运算符

1.按位非

按位非操作符用一个波浪线(~)表示。

2.与

按位与操作符由一个和号字符(&)表示。按位与操作只在两个数值对应位都是1时才返回1,任何一位是0,结果都是0。

3.或

按位或操作符由一个竖线符号(|)表示。按位或操作再有一个位是1的情况下就返回1,而只有在两个位都是0的情况下才返回0。

4.异或

按位异或操作符由一个插入符号(^)表示。相同为0,不同为1。

5.左移

左移操作符由两个小于号(<<)表示。左移不会影响操作数的符号位。

左移不会影响操作数的符号位。

6.有符号右移动

有符号右移动操作符由两个大于号(>>)表示。

7.无符号右移动

无符号右移动操作符由三个大于号(>>>)表示。对于正数来说,无符号右移的结果与有符号右移相同。对于负数来说,情况就不一样了。首先,无符号右移是以0来填充空位,而不是像有符号右移那样以符号位的值来填充空位。

3.5.3 逻辑运算符

1.逻辑非

逻辑非操作符由一个叹号(!)表示。

2.逻辑与

逻辑与操作符由两个和号(&&)表示。

3.逻辑或

逻辑或操作符由两个竖线符号(||)表示。

3.5.4 关系运算符

3.5.6 赋值运算符

3.5.7 条件运算符

3.6 语句

3.6.1 条件语句

if语句

switch语句

可以在switch语句中使用任何数据类型,每个case的值不一定是常量,可以是变量,甚至是表达式。

3.6.2 循环语句

for语句

do-while语句

while语句

for-in语句

for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性。

语法

3.6.3 label语句

使用label语句可以在代码中添加标签,方便使用。

3.6.4 控制转移语句

break和continue语句用于在循环中精确地控制代码执行。break语退出整个循环,continue会退出当前循环。

3.6.5 对象操作语句

with语句

with语句的作用是将作用于设置到一个特定的对象中,with语句语法 with(expression)statement;二、八、十、十六进制转换(图解篇)

Last updated