3. JavaScript 基本概念
基本概念
标识符、关键字、操作符、语句、函数;
ECMAScript的一切(变量、函数名和操作符)都区分大小写;
语句末尾建议加
;
,某些情况增进代码性能;var未初始化的变量会保存一个特殊的值;
一条语句定义多个变量,用
,
分隔开;
数据类型
基本数据类型
Undefined
Null
Number
Boolean
String
复杂数据类型
Object
ES6新增
数据类型见详解
typeof
操作符
typeof
操作符 typeof null
返回值;从技术角度讲,函数在 ES 中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过
typeof
操作符来区分函数和其他对象是有必要的;
操作符
一元操作符:
a++
和++a
的重要区别,联想记忆看顺序变量在前就先用再计算++
;布尔操作符:
逻辑非
!
:!!变量
等同于Boolean(变量)
用于将一个值转换为与其对应的布尔值;逻辑与
&&
:逻辑与属于短路操作,即如果第一个操作数能够决定结果false
,那么就不会再对第二个操作数求值;逻辑或
||
:逻辑或也是短路操作符。也就是说,如果第一个操作数的求值结果为true
,就不会对第二个操作数求值了,可以利用逻辑或的这一行为来避免为变量赋null
或undefined
值;逻辑与和逻辑或运算的返回值不是true和false.而是和true或false等价的原值;
乘性操作符:
*
,/
,%
;加性操作符:
+
,-
;关系操作符:
>
,<
,>=
,<=
;相等操作符:
==
,!=
,===
,!==
;条件操作符:
variable = boolean_expression ? true_value : false_value
;赋值操作符:
=
,复合赋值操作符;逗号操作符:
var num1=1, num2=2, num3=3;
,可执行多条语句;var num = (5, 1, 4, 8, 0); // num的值为0
,赋值时用最后一项,这种写法不常用;
位操作符:
~
,&
,|
,^
,<<
,>>
,>>>
;操作符特殊规则见附录;
语句
if语句;
do-while语句,后测试循环语句,在对条件表达式求值之前,循环体内的代码至少会被执行一次;
while语句,前测试循环语句,在循环体内的代码被执行之前,就会对出口条件求值,循环体内的代码有可能永远不会被执行;
for语句,
i++
其实相当于while循环结束之前的最后一句执行,使用while
循环做不到的,使用for
循环同样也做不到;for-in语句,是一种精准的迭代语句,可以用来枚举对象的属性;
label语句,
label: statement
,可以在代码中添加标签,以便将来使用,常搭配嵌套循环语句;break语句,立即退出循环, 强制继续执行循环后面的语句;
continue语句,退出循环,但退出循环后会从循环的顶 部继续执行;
with语句,目的主要是为了简化多次编写同一个对象的工作,大量使用
with
语句会导致性能下降,在开发大型应用程序时,不建议使用with
语句,严格模式不允许使用with
语句;switch语句,每一种情形
case
的含义是:“如果表达式等于这个值value
,则执行后面的 语句(statement)”。而break
关键字会导致代码执行流跳出switch
语句。如果省略break
关键字, 就会导致执行完当前case
后,继续执行下一个case
。最后的default
关键字则用于在表达式不匹配前 面任何一种情形的时候,执行机动代码(因此,也相当于一个else
语句);各语句详解见示例;
函数
理解参数,可传递任意数量、类型参数,原因是 ECMAScript 中的参数在内部是用一个数组来表示的,在函数体内可以通过类数组
arguments
对象来 访问这个参数数组,获取传递给函数的每一参数。arguments
对象的length
属性可以获知有多少个参数传递给了函数;非严格模式下,
arguments
和命名参数的值保持同步,但内存空间独立,没有传递值的参数自动赋予undefined
,如果只传入了一个参数,那么为arguments[1]
设置的值不会反应到命名参数中。这是因为arguments
对象的长度是由传入的参数个数决定的,即多余的arguments
会被忽略;严格模式下,
arguments[1]
设置值,命名参数的值仍然还是undefined
。其次,重写arguments
的值会导致语法错误(代码将不会执行);ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数;
实际上,未指定返回值的函数返回的是一个特殊的
undefined
值;由于不存在函数签名的特性,ECMAScript函数不能被重载,命名相同只会被后来的覆盖;
函数详解见Function专题;
Last updated