一元运算符只有一个参数,即要操做的对象或值。它们是 ECMAScript 中最简单的运算符。javascript
delete 运算符删除对之前定义的对象属性或方法的引用。例如:java
var o = new Object; o.name = "David"; alert(o.name); //输出 "David" alert(o.name); //输出 "undefined" delete o.name;
在这个例子中,删除了 name 属性,意味着强制解除对它的引用,将其设置为 undefined(即建立的未初始化的变量的值)。浏览器
delete 运算符不能删除开发者未定义的属性和方法。例如,下面的代码将引起错误:函数
delete o.toString;
即便 toString 是有效的方法名,这行代码也会引起错误,由于 toString() 方法是原始的 ECMAScript 方法,不是开发者定义的。code
void 运算符对任何值返回 undefined。该运算符一般用于避免输出不该该输出的值,例如,从 HTML 的 <a> 元素调用 JavaScript 函数时。要正确作到这一点,函数不能返回有效值,不然浏览器将清空页面,只显示函数的结果。例如:对象
<a href="javascript:window.open('about:blank')">Click me</a>
若是把这行代码放入 HTML 页面,点击其中的连接,便可看到屏幕上显示 "[object]"。TIYblog
这是由于 window.open() 方法返回了新打开的窗口的引用。而后该对象将被转换成要显示的字符串。ip
要避免这种效果,能够用 void 运算符调用 window.open() 函数:开发
<a href="javascript:void(window.open('about:blank'))">Click me</a>
这使 window.open() 调用返回 undefined,它不是有效值,不会显示在浏览器窗口中。字符串
提示:请记住,没有返回值的函数真正返回的都是 undefined。
直接从 C(和 Java)借用的两个运算符是前增量运算符和前减量运算符。
所谓前增量运算符,就是数值上加 1,形式是在变量前放两个加号(++):
var iNum = 10; ++iNum;
第二行代码把 iNum 增长到了 11,它实质上等价于:
var iNum = 10; iNum = iNum + 1;
一样,前减量运算符是从数值上减 1,形式是在变量前放两个减号(--):
var iNum = 10; --iNum;
在这个例子中,第二行代码把 iNum 的值减到 9。
在使用前缀式运算符时,注意增量和减量运算符都发生在计算表达式以前。考虑下面的例子:
var iNum = 10; --iNum; alert(iNum); //输出 "9" alert(--iNum); //输出 "8" alert(iNum); //输出 "8"
第二行代码对 iNum 进行减量运算,第三行代码显示的结果是("9")。第四行代码又对 iNum 进行减量运算,不过此次前减量运算和输出操做出如今同一个语句中,显示的结果是 "8"。为了证实已实现了全部的减量操做,第五行代码又输出一次"8"。
在算术表达式中,前增量和前减量运算符的优先级是相同的,所以要按照从左到右的顺序计算之。例如:
var iNum1 = 2; var iNum2 = 20; var iNum3 = --iNum1 + ++iNum2; //等于 "22" var iNum4 = iNum1 + iNum2; //等于 "22"
在前面的代码中,iNum3 等于 22,由于表达式要计算的是 1 + 21。变量 iNum4 也等于 22,也是 1 + 21。
还有两个直接从 C(和 Java)借用的运算符,即后增量运算符和后减量运算符。
后增量运算符也是给数值上加 1,形式是在变量后放两个加号(++):
var iNum = 10; iNum++;
不出所料,后减量运算符也是从数值上减 1,形式为在变量后加两个减号(--):
var iNum = 10; iNum--;
第二行代码把 iNum 的 值减到 9。
与前缀式运算符不一样的是,后缀式运算符是在计算过包含它们的表达式后才进行增量或减量运算的。考虑如下的例子:
var iNum = 10; iNum--; alert(iNum); //输出 "9" alert(iNum--); //输出 "9" alert(iNum); //输出 "8"
与前缀式运算符的例子类似,第二行代码对 iNum 进行减量运算,第三行代码显示结果("9")。第四行代码继续显示 iNum 的值,不过此次是在同一语句中应用减量运算符。因为减量运算发生在计算过表达式以后,因此这条语句显示的数是 "9"。执行了第五行代码后,alert 函数显示的是 "8",由于在执行第四行代码以后和执行第五行代码以前,执行了后减量运算。
在算术表达式中,后增量和后减量运算符的优先级是相同的,所以要按照从左到右的顺序计算之。例如:
var iNum1 = 2; var iNum2 = 20; var iNum3 = iNum1-- + iNum2++; //等于 "22" var iNum4 = iNum1 + iNum2; //等于 "22"
在前面的代码中,iNum3 等于 22,由于表达式要计算的是 2 + 20。变量 iNum4 也等于 22,不过它计算的是 1 + 21,由于增量和减量运算都在给 iNum3 赋值后才发生。
大多数人都熟悉一元加法和一元减法,它们在 ECMAScript 中的用法与您高中数学中学到的用法相同。
一元加法本质上对数字无任何影响:
var iNum = 20; iNum = +iNum; alert(iNum); //输出 "20"
这段代码对数字 20 应用了一元加法,返回的仍是 20。
尽管一元加法对数字无做用,但对字符串却有有趣的效果,会把字符串转换成数字。
var sNum = "20"; alert(typeof sNum); //输出 "string" var iNum = +sNum; alert(typeof iNum); //输出 "number"
这段代码把字符串 "20" 转换成真正的数字。当一元加法运算符对字符串进行操做时,它计算字符串的方式与 parseInt() 类似,主要的不一样是只有对以 "0x" 开头的字符串(表示十六进制数字),一元运算符才能把它转换成十进制的值。所以,用一元加法转换 "010",获得的老是 10,而 "0xB" 将被转换成 11。
另外一方面,一元减法就是对数值求负(例如把 20 转换成 -20):
var iNum = 20; iNum = -iNum; alert(iNum); //输出 "-20"
与一元加法运算符类似,一元减法运算符也会把字符串转换成近似的数字,此外还会对该值求负。例如:
var sNum = "20"; alert(typeof sNum); //输出 "string" var iNum = -sNum; alert(iNum); //输出 "-20" alert(typeof iNum); //输出 "number"
在上面的代码中,一元减法运算符将把字符串 "-20" 转换成 -20(一元减法运算符对十六进制和十进制的处理方式与一元加法运算符类似,只是它还会对该值求负)。