JavaScript学习(4.10):条件运算符(?:)、typeof运算符、delete运算符、void运算符、逗号运算符(,)

来源:互联网 发布:淘宝刷销量处罚 编辑:程序博客网 时间:2024/04/30 00:13
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)

  • 当操作数是null的时候,typeof将返回“object”,如果想将null和对象区分开,必须正对特殊值显式检测。对于宿主对象来说,typeof有可能并不返回“object”,而返回字符串。实际上客户端JavaScript中的大多数宿主对象都是“object”类型。
  • 所有对象和数组的typeof运算结果是“object”而不是“function”,因此对于区分对象和其他原始值很有帮助。如果想区分对象的类,可以使用instanceof运算符。
  • JavaScript中的函数是对象的一种,但是typeof运算符还是将函数特殊对待,对函数返回特殊值“function”。在JavaScript中,函数和可执行对象有微妙的区别。所有的函数都是可执行的,但是对象也有可能是可执行的,可以像调用函数一样调用它,但它并不是一个真正的函数。在ECMAScript 3中,对于所有内置可执行对象,typeof运算符一律返回“function”。ECMASript 5则扩充至所有可执行对象,包括内置对象和宿主对象。

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循环通常具有多个循环变量。
0 0
原创粉丝点击