# ECMAScript 一元运算符
**一元运算符只有一个参数,即要操作的对象或值。它们是 ECMAScript 中最简单的运算符。**
## delete
delete 运算符删除对以前定义的对象属性或方法的引用。例如:
```
var o = new Object;
o.name = "David";
alert(o.name); //输出 "David"
`delete o.name;`
alert(o.name); //输出 "undefined"
```
在这个例子中,删除了 name 属性,意味着强制解除对它的引用,将其设置为 undefined(即创建的未初始化的变量的值)。
delete 运算符不能删除开发者未定义的属性和方法。例如,下面的代码将引发错误:
```
delete o.toString;
```
即使 toString 是有效的方法名,这行代码也会引发错误,因为 toString() 方法是原始的 ECMAScript 方法,不是开发者定义的。
## void
void 运算符对任何值返回 undefined。该运算符通常用于避免输出不应该输出的值,例如,从 HTML 的 <a> 元素调用 JavaScript 函数时。要正确做到这一点,函数不能返回有效值,否则浏览器将清空页面,只显示函数的结果。例如:
```
<a href="javascript:window.open('about:blank')">Click me</a>
```
如果把这行代码放入 HTML 页面,点击其中的链接,即可看到屏幕上显示 "[object]"。[TIY](/tiy/t.asp?f=jseg_operators_unary_void)
这是因为 window.open() 方法返回了新打开的窗口的引用。然后该对象将被转换成要显示的字符串。
要避免这种效果,可以用 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(一元减法运算符对十六进制和十进制的处理方式与一元加法运算符相似,只是它还会对该值求负)。
- JavaScript 基础
- JavaScript 简介
- JavaScript 使用
- JavaScript 输出
- JavaScript 语句
- JavaScript 注释
- JavaScript 变量
- JavaScript 数据类型
- JavaScript 对象
- JavaScript 函数
- JavaScript 运算符
- JavaScript 比较和逻辑运算符
- JavaScript If...Else 语句
- JavaScript Switch 语句
- JavaScript For 循环
- JavaScript While 循环
- JavaScript Break 和 Continue 语句
- JavaScript 错误 - Throw、Try 和 Catch
- JavaScript 表单验证
- JavaScript 保留关键字
- JavaScript JSON
- javascript:void(0) 含义
- JavaScript 高级
- JavaScript 对象
- JavaScript Number 对象
- JavaScript 字符串(String)对象
- JavaScript Date(日期)对象
- JavaScript Array(数组)对象
- JavaScript Boolean(逻辑)对象
- JavaScript Math(算数)对象
- JavaScript RegExp 对象
- JavaScript BOM
- JavaScript Window - 浏览器对象模型
- JavaScript Window Screen
- JavaScript Window Location
- JavaScript Window History
- JavaScript Window Navigator
- JavaScript 消息框
- JavaScript 计时
- JavaScript Cookies
- HTML DOM
- HTML DOM 简介
- HTML DOM 节点
- HTML DOM 方法
- HTML DOM 属性
- HTML DOM 访问
- HTML DOM - 修改
- HTML DOM - 修改 HTML 内容
- HTML DOM - 元素
- HTML DOM - 事件
- HTML DOM - 导航
- JavaScript HTML DOM EventListener
- AJAX 教程
- AJAX 简介
- AJAX 实例
- AJAX - 创建 XMLHttpRequest 对象
- AJAX - 向服务器发送请求
- AJAX - 服务器响应
- AJAX - onreadystatechange 事件
- AJAX ASP/PHP 请求实例
- AJAX 数据库实例
- AJAX XML 实例
- jQuery 基础
- jQuery 简介
- jQuery 安装
- jQuery 语法
- jQuery 选择器
- jQuery 事件
- jQuery 效果
- jQuery 效果 - 隐藏和显示
- jQuery 效果 - 淡入淡出
- jQuery 效果 - 滑动
- jQuery 效果 - 动画
- jQuery 停止动画
- jQuery Callback 函数
- jQuery - Chaining
- jQuery HTML
- jQuery - 获得内容和属性
- jQuery - 设置内容和属性
- jQuery - 添加元素
- jQuery - 删除元素
- jQuery - 获取并设置 CSS 类
- jQuery - css() 方法
- jQuery - 尺寸
- jQuery 遍历
- jQuery 遍历
- jQuery 遍历 - 祖先
- jQuery 遍历 - 后代
- jQuery 遍历 - 同胞
- jQuery 遍历 - 过滤
- jQuery - AJAX
- jQuery - AJAX 简介
- jQuery - AJAX load() 方法
- jQuery - AJAX get() 和 post() 方法
- jQuery 杂项
- jQuery - noConflict() 方法
- JavaScript 高级教程
- JavaScript 的历史
- JavaScript 实现
- ECMAScript 基础
- ECMAScript 语法
- ECMAScript 变量
- ECMAScript 关键字
- ECMAScript 保留字
- ECMAScript 原始值和引用值
- ECMAScript 原始类型
- ECMAScript 类型转换
- ECMAScript 引用类型
- ECMAScript 运算符
- ECMAScript 一元运算符
- ECMAScript 位运算符
- ECMAScript Boolean 运算符
- ECMAScript 乘性运算符
- ECMAScript 加性运算符
- ECMAScript 关系运算符
- ECMAScript 等性运算符
- ECMAScript 条件运算符
- ECMAScript 赋值运算符
- ECMAScript 逗号运算符
- ECMAScript 语句
- ECMAScript if 语句
- ECMAScript 迭代语句
- ECMAScript 标签语句
- ECMAScript break 和 continue 语句
- ECMAScript with 语句
- ECMAScript switch 语句
- ECMAScript 函数
- ECMAScript 函数概述
- ECMAScript arguments 对象
- ECMAScript Function 对象(类)
- ECMAScript 闭包(closure)
- ECMAScript 对象
- ECMAScript 面向对象技术
- ECMAScript 对象应用
- ECMAScript 对象类型
- ECMAScript 对象作用域
- ECMAScript 定义类或对象
- ECMAScript 修改对象
- ECMAScript 继承
- ECMAScript 继承机制实例
- ECMAScript 继承机制实现
- Google 地图API
- Google 地图API Key
- Google Maps 基础
- Google 地图叠加层
- Google 地图事件
- Google 地图控件集
- Google 地图类型
- Google 地图 API 参考手册
- 地图 API Map() 构造器
- 免责声明