其他运算符

来源:互联网 发布:布汶战役 知乎 编辑:程序博客网 时间:2024/06/15 00:44

表达式计算

eval():解释运行由JavaScript源代码组成的字符串,并产生一个值。

eval("3+2");    // => 5

书中讲动态判断源代码中的字符串是一种强大的语言特性,几乎没有必要在实际中应用。我同意这种看法。
eval()只有一个参数,使用调用它的变量作用域环境。
全局eval
当通过别名调用eval()时,eval()会将其字符串当成顶层的全局代码来执行。
真正使用eval()的场景并不多,必要的话,更可能使用全局的而不是局部的eval()。
严格eval()
严格模式下的eval,可以查询或更改局部变量,但不能在局部作用域中宣言新的变量或函数。
关于eval,又是一个我之前从没见过的东西,通过对它的了解,我觉得eval只需要了解一下,知道它的作用,如果真遇到了能看明白就够了。

其他运算符

条件运算符(?:)

唯一一个三元操作符(需要三个操作数),也可以称作三元运算符。
操作数可以是任意类型,与C++中的条件运算符类似,第一个操作数当成布尔值,如果是真值,计算第二操作数,并返回结果;否则,计算第三个操作数,并返回结果。
使用if语句也能达到同样的效果,“?:”只是提供了一种科室形式。

greeting = "hello " + (username ? username : "there");greeting = "hello ";if (username) {    greeting += username;} else {    greeting += "there";}

typeof运算符

typeof是一元运算符,放在操作数前面,操作数可以是任意类型,返回值是表示操作数类型的字符串。
当操作数是null时,typeof返回”object”。
函数是对象的一种,但typeof运算符将函数特殊对待,返回”function”。ECMAScript 5规范中,所有可执行对象进行typeof运算,都将返回”function”。
typeof

delete运算符

delete是一元操作符,用来删除对象属性或者数组元素。
delete用来做删除操作,不是用来返回一个值:

var o = {x: 1, y: 2};delete o.x;"x" in o;   // false,属性x已经不存在了var a = [1, 2, 3];delete a[2];2 in a;     // false,索引为2的元素已经不存在了

删除属性或者删除元素不仅仅是设置了一个undefined值。当删除一个属性时,这个属性将不再存在。读取一个不存在的属性将得到undefined,但是可以通过in运算符来检测这个属性是否在对象中存在。
delete希望它的操作数是一个左值,如果不是左值,则不进行任何操作,并返回true;否则将试图删除这个指定的左值。如果删除成功,返回true。
然而并非所有的属性都可删除:

  • 一些内置核心和客户端属性是不能删除的
  • 用户通过var语句声明的变量不能删除
  • 通过function语句定义的函数和函数参数也不能删除

在ECMAScript 5严格模式中,如果delete的操作数是非法的,则抛出一个语法错误(SyntaxError)异常。删除不可配置的属性时会抛出一个类型错误异常。而在非严格栻上,这些操作都不报错,只是简单地返回false,以表明操作数不能执行删除操作。
在C++中,delete操作符用来删除对象,释放内存。

var o = {x: 1, y: 2};delete o.x;     // 返回truetypeof o.x;     // 属性不存在,返回"undefined"delete o.x;     // 删除不存在的属性返回truedelete o;       // 删除通过var声明的变量,返回false// 在严格模式下,将抛出一个异常delete 1;       // 操作数不是左值,返回truethis.x = 1;     // 给全局对象定义一个属性,没有使用vardelete x;       // 试图删除x,在非严格模式下返回true// 在严格栻上会抛出异常,使用"delete this.x"来代替x;              // 运行时错误,没有定义x

void运算符

void是一元运算符,出现在操作数之前,操作数可以是任意类型。操作数会照常计算,但忽略计算结果并返回undefined。
JavaScript的void是个运算符,而在C++的void是一个关键字,用于特殊目的的没有操作也没有值的类型。最经常用作不返回结果的函数的返回类型。

逗号运算符(,)

逗号去运算符是二元运算符,它的操作数是任意类型的。首先计算左操作数,再计算右操作数,最后返回右操数的结果。

i = 0, j = 1, k = 2;// 等价于i = 0;j = 1;k = 2;

逗号运算符最常用的场景是在for循环中:

for (var i = 0, j = 10; i < j; i++, j--) {    console.log(i + j);}
0 0