3. JavaScript 基本概念
Last updated
Was this helpful?
Last updated
Was this helpful?
标识符、关键字、操作符、语句、函数;
ECMAScript的一切(变量、函数名和操作符)都区分大小写;
语句末尾建议加 ;
,某些情况增进代码性能;
var未初始化的变量会保存一个特殊的值;
一条语句定义多个变量,用 ,
分隔开;
基本数据类型
Undefined
Null
Number
Boolean
String
复杂数据类型
Object
ES6新增
数据类型见
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函数不能被重载,命名相同只会被后来的覆盖;
操作符特殊规则见;
各语句详解见;
函数详解见;