标签:
一、条件运算符(?:)
条件运算符是javascript中唯一的一个三元运算符,有时直接称做“三元符”。通常这个运算符写成“?:”,当然在代码中往往不会如此简写,因为这个运算符拥有三个操作数,第一个操作数在"?"之前,第二个操作数在"?"和":"之间,第三个操作数在":"之后,例如:
x > o ? x : -x //求x的绝对值
条件运算符的操作数可以是任意类型。第一个操作数当成布尔值,如果它是真值,那么将计算第二个操作数,并返回其计算结果。否则,如果第一个操作数是假值,那么将计算第三个操作数,并返回其计算结果。第二个和第三个操作数总是会计算其中之一,不可能两者同时执行。
使用if语句也会带来同样的效果,"?:"运算符只是提供了一种简写形式。这里是一个"?:"的典型应用场景,判断一个变量是否有定义(并拥有一个有意义的真值),如果有定义则使用它,如果无定义则使用一个默认值:
greeting = "hello" + (username ? username : "there");
这和下面使用if语句的代码是等价的:
greeting = "hello"; if(username) greeting +=username; else greeting +="there";
二、typeof运算符
typeof是一元运算符,放在其单个操作数的前面,操作数可以是任意类型。返回值为表示操作数类型的一个字符串。
typeof最常用的用法是写在表达式中,比如:
三、delete运算符
delete是一元操作符,它用来删除对象属性或者数组元素。就像赋值、递增、递增运算符一样,delete也是具有副作用的,它是用来做删除操作的,不是用来返回一个值的。
var o = {x:1,y:2}; //定义一个对象 delete o.x; //删除一个属性 "x"in o //结果会返回一个false,因为这个属性在对象中不存在 var a = [1,2,3]; //定义一个数组 delete a[2]; //删除数组中的第三个元素 2 in a //结果仍然返回false,因为这个元素不存在了 然而,如果输入a.length,数组的长度依然是3,不会改变,尽管此时已经删除了这个元素,但删除操作留下了一个“黑洞”,而这个“黑洞”依然占据着一个长度,故此数组的长度不会改变。
四、void运算符
void是一元运算符,它出现在操作数之前,操作数可以是任意类型。这个运算符并不是经常使用:操作数会照常计算,但忽略计算结果并返回undefined。由于void会忽略操作数的值,因此在操作数具有副作用的时候使用void来让程序更具语义。
ps:这个运算符最常用在客户端的URL----Javascript:URL中,在URL中可以写带有副作用的表达式,而void则让浏览器不必显示这个表达式的计算结果。例如,经常在HTML代码中的<a>标签里使用void运算符:
<a href="javascript:void window.open();">打开一个新窗口</a>
当然,通过给<a>的onclick绑定一个事件处理程序要比在href中写"javascript:URL"要更加清晰,如此一来的话,操作符void就变得可有可无了。
五、逗号运算符(,)
逗号运算符是二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算右操作数,最后返回右操作数的值。
基本语法是这样的:
i=0,j=1,k=2;
计算结果是2,它和下面的代码基本上是等价的:
i = 0;j = 1; k =2;
它总是会计算左侧的表达式,但计算结果忽略掉,也就是说,只有左侧表达式具有副作用,才会使用逗号运算符让代码变得更通顺。逗号运算符最常用的场景是在for循环中,这个for循环通常具有多个循环变量。
//for循环中的第一个逗号是var语句的一部分 //第二个逗号是逗号运算符 //它将两个表达式(i++和j--)放在一条(for循环中的)语句中 for(var i =0,j =10;i<j;i++,j--) console.log(i+j);
标签:
原文地址:http://my.oschina.net/u/2352178/blog/475296