表达式(expression)和运算符
基础知识点略过
4.9 关系表达式
4.9.3 in
运算符
in运算符希望左操作数是一个字符串或可以转换为字符串,右操作数是一个对象。
如果右侧对象拥有一个名为左操作数值的属性名,则返回true。注意,数组是判断索引,不是数组元素。
//对象
var obj = {x:1, y:2}
"x" in obj //=> true: 对象中有"x"属性,注意如果写成x会报错(x is not defined)
"z" in obj //=> false
"toString" in obj //=> true: 对象继承了toString()方法
//数组
var array=[4,5,6];
"1" in array //=>true
1 in array //=>true: 数字转换为字符串
4 in array //=>false: 没有索引为4的元素
4.9.4 instanceof
运算符
instanceof运算符希望左操作数是一个对象,右操作数标识对象的类(函数)。
如果左侧的对象是右侧类的实例,则表达式返回true。
var d= new Date();
d instanceof Date; //=> true: d由Date()创建
d instanceof Object //=> true: 所有的对象都是Object的实例
d instanceof Number //=> false: d不是一个Number对象
var a=[1,2,3];
a instanceof Array //=> true
a instanceof Object //=> true
注意:所有的对象都是Object的实例。通过instanceof判断一个对象是否是一个类的实例的时候,这个判断也会包含对“父类”(superclass)的检测。
4.10 逻辑表达式
4.10.1 逻辑与&&
&&
的行为有时称作“短路”(short circuiting),即左表达式为true时才会计算右表达式。
常看到代码利用了这一特性来有条件执行代码,例如下面两行代码等价:
if(a == b) stop(); //只有在a==b时才调用stop()
(a == b) && stop(); //同上
4.10.2 逻辑或||
首先计算左侧表达式,如果为真值,则返回这个真值。否则,计算右侧表达式,病返回这个表达式的计算结果。和“&&”一样,有可能不会计算右侧的表达式。
这个运算符最常用的方式是用来从一组备选表达式中选出第一个真值表达式。
//如果max_width已经定义,直接使用;否则在preferences对象中查找max_width;如果还是没有定义,则使用一个写死的常量
var max= max_width || preferences.max_width || 500;
也常用在函数体内,给参数提供默认值:
function fn(a,b){
b=b || {}; //如果没有传入b,则创建一个空对象
//函数体内的逻辑部分
}
语句(statement)
5.2 复合语句和空语句
空语句(empty statement)不会执行任何动作。
当创建一个具有空循环体的循环时,空语句有时很有用。
//初始化一个数组a
for(var i=0;i<a.length;a[i++]=0) /*empty*/;
在这个循环中,不需要任何循环体,而Javascript需要循环体中至少包含一条语句。因此,这里值使用一个单独的分号来表示一条空语句。
使用空语句时,最好加上注释,避免出现bug。
5.5 循环
语句 | 语法 | 含义 |
---|---|---|
while | white(expression) statement | 基本的循环结构 |
do/while | do statement while(expression); | 先执行再判断循环条件 |
for | for(init;test;incr) statement | 简写循环 |
for/in | for(var in object) statement | 遍历一个对象的属性 |
5.6 跳转
语句 | 语法 | 含义 | 备注 |
---|---|---|---|
label | label: statement | 给statement指定一个名字:label | |
break | break [label] | 立即退出最内层的循环或swith语句,或label指定的语句 | - |
continue | continue [label] | 转而执行下一次最内层循环,或label指定的循环 | - |
return | return [expression] | 函数调用后的返回值 | 不带expression返回undefined |
throw | throw expression; | 抛出异常 | - |
try/catch/finally | try{statements} [catch(e){hadler statements}] [finally{cleanup statements}] | 捕获异常 | catch中可通过局部变量e来获得对Error对象的引用;不管try语句是否抛出异常,finally中的内容始终会执行 |
5.7 其他
语句 | 语法 | 含义 | 备注 |
---|---|---|---|
with | with(object) statement | 扩展作用域链 | 不赞成使用 |
debugger | debugger; | 断点器调试 | |
use strict | “use strict” | 对脚本和函数应用严格模式 |