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
Was this helpful?