4.13 其他运算符
4.13.1 条件运算符 (?:)
条件运算符是JavaScript中唯一的一个三元运算符。它的操作数可以是任意类型。第一个操作数当做布尔值 ,如果它是真值,那么将计算第二个操作数,并返回计算结果;否则,如果第一个操作数是假值,那么将计算第三个操作数,并返回计算结果。
|
4.13.2 typeof运算符
typeof是一元运算符,放在其单个操作符的前面,操作数可以是任意类型。返回值为表示操作数类型的一个字符串。
x typeof x
undefined undefined
null object
true/false boolean
任意数字或NaN number
任意字符串 string
任意函数 function
任意内置对象(非函数) object
任意宿主对象 右编译器各自实现的字符串,但不是undefined,boolean,number和string
typeof常用的写法: typeof xxx 或者 typeof(xxx)
|
4.13.3 delete运算符
delete是一元运算符,它用来删除兑现属性或者数组元素。就像赋值、递增、递减运算符一样,delete也是具有副作用的,它是用来做删除操作的,不是用来返回一个值的:
var o = {x:1 , y:2};
delete o.x; //true
"x" in o; //false
var a =[1 , 2 ,3];
delete a[2]; //true
"2" in a; //false 元素2在数组中已经不存在了
a.length; //3 但数组长度没有变
a[2]; //undefined 并且设置一个undefined
delete希望它的操作数是一个左值,如果它不是一个左值,那么delete将不进行任何操作同时返回true,否则delete将试图删除这个指定的左值。如果删除成功,delete将返回true。但是一些内置核心和客户端属性是不能删除的,用户通过var语句声明的变量不能删除,同样,通过function语句定义的函数和函数参数也不能删除。
在ECMASript 5严格模式中,如果delete的操作数是非法的,比如变量、函数或函数参数,delete操作将抛出一个语法错误(SyntaxError)异常,只有操作数是一个属性表达式的时候才会正常工作。在严格模式下,delete删除不可配置的属性时会抛出一个类型错误异常。在非严格模式下,这些delete操作都不会报错,只是简单的返回false,以表明操作数不能执行delete操作。
var o = {x:1 , y:2};
delete o.x; //true:删除一个对象属性
typeof o.x; //undefined 属性不存在
delete o.x; //true:删除不存在的属性
delete o; //这个时候应该是不能删除的,返回false,严格模式下,抛出一个异常 但是浏览器有不同的定义,chrome是true可以删除
o.x;
|
4.13.4 void运算符
void是一元运算符,它出现在操作数之前,操作数可以是任意类型。作用:操作数会照常计算,但忽略计算结果并返回undefined,由于void会忽略操作数的值,因此在操作数具有副作用的时候使用void来让程序更具语义。
这个运算符最常用在客户端的URL-javascript:URL中,在URL中可以写带有副作用的表达式,而void则让浏览器不必显示这个表达式的计算结果: <a href="javascript:void window.open();"> 打开一个新窗口</a>
|
4.13.5 逗号运算符(,)
逗号运算符是二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算右操作数,最后返回右操作数的值:
i=0, j=1 ,z=2; //2
等价 i = 0; j = 1; z = 2;
总是会计算左侧的表达式,但计算结果忽略掉,也就是说,只有左侧表达式具有副作用,才会使用逗号运算符让代码更通畅。逗号运算符最常用的场景是在for循环中,这个for循环通常具有多个循环变量。
|