`

3.ECMAScript 运算符

 
阅读更多

1.ECMAScript 一元运算符
(1)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 方法,不是开发者定义的。

(2)void
void 运算符对任何值返回 undefined。该运算符通常用于避免输出不应该输出的值,例如,从 HTML 的 <a> 元素调用 JavaScript 函数时。
要正确做到这一点,函数不能返回有效值,否则浏览器将清空页面,只显示函数的结果。
例如:
<a href="javascript:window.open('about:blank')">Click me</a>
如果把这行代码放入 HTML 页面,点击其中的链接,即可看到屏幕上显示 "[object]"。
要避免这种效果,可以用 void 运算符调用 window.open() 函数:
<a href="javascript:void(window.open('about:blank'))">Click me</a>
这使 window.open() 调用返回 undefined,它不是有效值,不会显示在浏览器窗口中。
提示:请记住,没有返回值的函数真正返回的都是 undefined。
拓展:a中调用js函数最适当的方法推荐使用
a href="javascript:void(0);" onclick="js_method()"
a href="javascript:;" onclick="js_method()"
a href="#" onclick="js_method();return false;"
注意:#是标签内置的一个方法,代表top的作用。所以用这种方法点击后网页后返回到页面的最顶端。

(3)前增量/前减量运算符
++i;--i;

(4)后增量/后减量运算符
i++;i--;

(5)一元加法和一元减法



2.ECMAScript 位运算符
位运算符是在数字底层(即表示数字的 32 个数位)进行操作的。从左到右,从位31到位0。
注意:所有整数字面量都默认存储为有符号整数。只有 ECMAScript 的位运算符才能创建无符号整数。
(1)位运算 NOT
位运算 NOT 由否定号(~)表示,它是 ECMAScript 中为数不多的与二进制算术有关的运算符之一。

(2)位运算 AND
位运算 AND 由和号(&)表示,直接对数字的二进制形式进行运算。它把每个数字中的数位对齐,然后用下面的规则对同一位置上的两个数位进行 AND 运算:

(3)位运算 OR
位运算 OR 由符号(|)表示,也是直接对数字的二进制形式进行运算。在计算每位时,OR 运算符采用下列规则:

(4)位运算 XOR
位运算 XOR 由符号(^)表示,当然,也是直接对二进制形式进行运算。XOR 不同于 OR,当只有一个数位存放的是 1 时,它才返回 1。

(5)左移运算
左移运算由两个小于号表示(<<)。它把数字中的所有数位向左移动指定的数量。例如,把数字 2(等于二进制中的 10)左移 5 位,结果为 64(等于二进制中的 1000000):

(6)有符号右移运算
有符号右移运算符由两个大于号表示(>>)。它把 32 位数字中的所有数位整体右移,同时保留该数的符号(正号或负号)。

(7)无符号右移运算
无符号右移运算符由三个大于号(>>>)表示,它将无符号 32 位数的所有数位整体右移。对于正数,无符号右移运算的结果与有符号右移运算一样。


3.ECMAScript Boolean 运算符
ToBoolean 操作
在学习各种逻辑运算符之前,让我们先了解一下 ECMAScript-262 v5 规范中描述的 ToBoolean 操作。
抽象操作 ToBoolean 将其参数按照下表中的规则转换为逻辑值:
参数类型            结果
Undefined   false
Null        false
Boolean     结果等于输入的参数(不转换)
Number      如果参数为 +0, -0 或 NaN,则结果为 false;否则为 true。
String      如果参数为空字符串,则结果为 false;否则为 true。
Object      true

(1)逻辑 NOT 运算符
在 ECMAScript 中,逻辑 NOT 运算符与 C 和 Java 中的逻辑 NOT 运算符相同,都由感叹号(!)表示。
与逻辑 OR 和逻辑 AND 运算符不同的是,逻辑 NOT 运算符返回的一定是 Boolean 值。
逻辑 NOT 运算符的行为如下:
    如果运算数是对象,返回 false
    如果运算数是数字 0,返回 true
    如果运算数是 0 以外的任何数字,返回 false
    如果运算数是 null,返回 true
    如果运算数是 NaN,返回 true
    如果运算数是 undefined,发生错误

(2)逻辑 AND 运算符
在 ECMAScript 中,逻辑 AND 运算符用双和号(&&)表示
逻辑 AND 运算的运算数可以是任何类型的,不止是 Boolean 值。

(3)逻辑 OR 运算符
ECMAScript 中的逻辑 OR 运算符与 Java 中的相同,都由双竖线(||)表示:



4.ECMAScript 乘性运算符
ECMAScript 的乘性运算符与 Java、C、Perl 等于语言中的同类运算符的运算方式相似。
需要注意的是,乘性运算符还具有一些自动转换功能。
(1)乘法运算符
乘法运算符由星号(*)表示,用于两数相乘。
处理特殊值时,ECMAScript 中的乘法还有一些特殊行为:
如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。
如果某个运算数是 NaN,结果为 NaN。
Infinity 乘以 0,结果为 NaN。
Infinity 乘以 0 以外的任何数字,结果为 Infinity 或 -Infinity。
Infinity 乘以 Infinity,结果为 Infinity。
注释:如果运算数是数字,那么执行常规的乘法运算,即两个正数或两个负数为正数,两个运算数符号不同,结果为负数。

(2)除法运算符
除法运算符由斜杠(/)表示,用第二个运算数除第一个运算数。
处理特殊值时,除法运算符也有一些特殊行为:
    如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。
    如果某个运算数是 NaN,结果为 NaN。
    Infinity 被 Infinity 除,结果为 NaN。
    Infinity 被任何数字除,结果为 Infinity。
    0 除一个任何非无穷大的数字,结果为 NaN。
    Infinity 被 0 以外的任何数字除,结果为 Infinity 或 -Infinity。
注释:如果运算数是数字,那么执行常规的除法运算,即两个正数或两个负数为正数,两个运算数符号不同,结果为负数。

(3)取模运算符
除法(余数)运算符由百分号(%)表示,使用方法如下:
var iResult = 26%5; //等于 1
特殊值,取模运算符也有特殊的行为:
如果被除数是 Infinity,或除数是 0,结果为 NaN。
Infinity 被 Infinity 除,结果为 NaN。
如果除数是无穷大的数,结果为被除数。
如果被除数为 0,结果为 0。
注释:如果运算数是数字,那么执行常规的算术除法运算,返回除法运算得到的余数。



5.ECMAScript 加性运算符
在多数程序设计语言中,加性运算符(即加号或减号)通常是最简单的数学运算符。
在 ECMAScript 中,加性运算符有大量的特殊行为。

(1)加法运算符:法运算符由加号(+)表示
处理特殊值时,ECMAScript 中的加法也有一些特殊行为:
某个运算数是 NaN,那么结果为 NaN。
-Infinity 加 -Infinity,结果为 -Infinity。
Infinity 加 -Infinity,结果为 NaN。
+0 加 +0,结果为 +0。
-0 加 +0,结果为 +0。
-0 加 -0,结果为 -0。
不过,如果某个运算数是字符串,那么采用下列规则:
如果两个运算数都是字符串,把第二个字符串连接到第一个上。
如果只有一个运算数是字符串,把另一个运算数转换成字符串,结果是两个字符串连接成的字符串。
注意:为了避免 JavaScript 中的一种常见错误,在使用加法运算符时,一定要仔细检查运算数的数据类型。

(2)减法运算符
减法运算符(-),也是一个常用的运算符
与加法运算符一样,在处理特殊值时,减法运算符也有一些特殊行为:
某个运算数是 NaN,那么结果为 NaN。
Infinity 减 Infinity,结果为 NaN。
-Infinity 减 -Infinity,结果为 NaN。
Infinity 减 -Infinity,结果为 Infinity。
-Infinity 减 Infinity,结果为 -Infinity。
+0 减 +0,结果为 +0。
-0 减 -0,结果为 -0。
+0 减 -0,结果为 +0。
某个运算符不是数字,那么结果为 NaN。
注释:如果运算数都是数字,那么执行常规的减法运算,并返回结果。



6.ECMAScript 关系运算符
(1)常规比较方式
关系运算符小于、大于、小于等于和大于等于执行的是两个数的比较运算,比较方式与算术比较运算相同。每个关系运算符都返回一个布尔值

(2)比较数字和字符串
1)另一种棘手的状况发生在比较两个字符串形式的数字时,比如:
var bResult = "25" < "3";
alert(bResult); //输出 "true"
上面这段代码比较的是字符串 "25" 和 "3"。两个运算数都是字符串,所以比较的是它们的字符代码("2" 的字符代码是 50,"3" 的字符代码是 51)。
无论何时比较一个数字和一个字符串,ECMAScript 都会把字符串转换成数字,然后按照数字顺序比较它们。

2)如果字符串不能转换成数字
var bResult = "a" < 3;
alert(bResult);
字母 "a" 不能转换成有意义的数字。不过,如果对它调用 parseInt() 方法,返回的是 NaN。
根据规则,任何包含 NaN 的关系运算符都要返回 false,因此这段代码也输出 false



7.ECMAScript 等性运算符
判断两个变量是否相等是程序设计中非常重要的运算。在处理原始值时,这种运算相当简单,但涉及对象,任务就稍有点复杂。
ECMAScript 提供了两套等性运算符:等号和非等号用于处理原始值,全等号和非全等号用于处理对象。
等号和非等号
在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。
非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。

执行类型转换的规则如下:
如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

在比较时,该运算符还遵守下列规则:
值 null 和 undefined 相等。
在检查相等性时,不能把 null 和 undefined 转换成其他值。
如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。
重要提示:即使两个数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN。

全等号和非全等号
等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。
全等号由三个等号表示(===),只有在无需类型转换运算数就相等的情况下,才返回 true。
非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数不相等的情况下,才返回 true。


8.ECMAScript 条件运算符
条件运算符
条件运算符是 ECMAScript 中功能最多的运算符,它的形式与 Java 中的相同。
variable = boolean_expression ? true_value : false_value;
该表达式主要是根据 boolean_expression 的计算结果有条件地为变量赋值。如果 Boolean_expression 为 true,就把 true_value 赋给变量;如果它是 false,就把 false_value 赋给变量。
例如:
var iMax = (iNum1 > iNum2) ? iNum1 : iNum2;
在这里例子中,iMax 将被赋予数字中的最大值。表达式声明如果 iNum1 大于 iNum2,则把 iNum1 赋予 iMax。但如果表达式为 false(即 iNum2 大于或等于 iNum1),则把 iNum2 赋予 iMax。


9.ECMAScript 赋值运算符
赋值运算符
简单的赋值运算符由等号(=)实现,只是把等号右边的值赋予等号左边的变量。
每种主要的算术运算以及其他几个运算都有复合赋值运算符:
    乘法/赋值(*=)
    除法/赋值(/=)
    取模/赋值(%=)
    加法/赋值(+=)
    减法/赋值(-=)
    左移/赋值(<<=)
    有符号右移/赋值(>>=)
    无符号右移/赋值(>>>=)


ECMAScript 逗号运算符
用逗号运算符可以在一条语句中执行多个运算。
例如:
var iNum1 = 1, iNum = 2, iNum3 = 3;
逗号运算符常用变量声明中。

分享到:
评论

相关推荐

    ES6中...三个点的用法.pdf

    在ES6(ECMAScript 2015)中,`...`运算符被称为扩展运算符,它在JavaScript中有着多种用途,特别是在数组和对象处理中。以下是对这个知识点的详细解释: ### 1. 扩展运算符的含义与语法 扩展运算符 (`...`) 可以...

    ECMAScript解读.doc

    ECMAScript 解读 ECMAScript 是一种脚本语言标准,由 Ecma 国际组织(European Computer Manufacturers Association)制定,旨在为创建具有可移植性、平台独立性的脚本语言提供一个通用的标准。 ECMAScript 解读是...

    JavaScript权威指南-ECMAScript5.pdf

    3. **操作符**:包括算术、比较、逻辑、位、赋值和三元运算符。例如,`==`和`===`分别代表宽松相等和严格相等,`+`可以用于数字相加和字符串拼接。 4. **函数**:JavaScript中的函数不仅是代码块,也是第一类对象,...

    ECMAScript6.zip_javascript

    **3. 解构赋值** - **数组和对象解构**:允许从数组或对象中提取值,分别赋值给不同的变量,使得代码更加简洁易读。 **4. 箭头函数** - **箭头函数(=&gt;)**:提供了一种更简洁的函数定义方式,其this指向取决于上...

    ecmascript1017.zip

    3. **箭头函数**: - 箭头函数(=&gt;)简化了函数的定义,减少了语法糖,其this指向取决于上下文,而不是函数本身。 4. **Promise**: - Promise 是处理异步操作的一种方式,解决了回调地狱问题,提供了链式调用和...

    ECMAScript 6 入门(第三版)

    7. **剩余与扩展运算符**:剩余运算符(...)用于收集剩余的参数或元素,而扩展运算符(...)用于将数组或可迭代对象展开成各自的元素。 8. **模块系统**:通过`import`和`export`关键字,实现了模块化,方便代码...

    sonar-Web_JavaScript检查规则指南.docx

    Symbol 是 ECMAScript2015 中引入的原始类型。它的实例主要用作唯一的属性键。只能通过将 Symbol 用作函数来创建实例。与 new 运算符一起使用 Symbol 会引发 TypeError。 7. with 语句的使用 with 语句会在 ...

    Web前端模块化开发教程全套ppt课件最全电子讲义完整版教学教程整套全书课件ppt.pptx

    3. 解构赋值 * 解构赋值是ES6中的一种新的语法特性 * 解构赋值可以实现数组或对象的解构赋值 4. 箭头函数 * 箭头函数是ES6中的一种新的语法特性 * 箭头函数可以实现函数的简洁定义 5. 剩余参数 * 剩余参数是ES6...

    ECMAScript全套(5,6,2018).zip

    ECMAScript,通常简称为ES,是JavaScript语言的标准化规范,由欧洲计算机制造商协会(ECMA International)制定并发布。这个规范定义了编程语言的语法、类型、对象、函数等特性,是现代Web开发中不可或缺的一部分。...

    ECMAScript+6入门

    #### 3. ECMAScript 的历史沿革 - **早期版本**:ECMAScript 1.0版于1997年发布,随后的几年内分别推出了2.0版(1998年)和3.0版(1999年),3.0版奠定了JavaScript的基础语法。 - **ES4的失败**:2007年,ES4草案...

    ECMAScript 2020 语言规范(ECMA-262)

    3. **动态导入(Dynamic Import)**:这允许在运行时按需导入模块,有助于优化代码加载速度,减少不必要的资源消耗。 4. **模板字面量的标签函数(Tagged Templates)**:现在可以为模板字符串定义标签函数,提供更...

    Javascript数组操作整理.rar

    3. 遍历数组: 使用for循环、forEach()、map()、for...of循环等方式遍历数组。例如: ```javascript for (var i = 0; i &lt; arr.length; i++) { console.log(arr[i]); } ``` 4. 数组长度: `arr.length`属性...

    《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型

    3. Boolean类的实例在布尔运算中会自动转换为true,除非使用valueOf()方法获取其原始值。 4. Number类的特殊方法允许进行数字格式的转换和输出。 5. String类则用于处理字符串,它包括了方法和属性,可进行字符串的...

    es6数组之扩展运算符操作实例分析

    扩展运算符是ES6(即ECMAScript 2015)中引入的一个新特性,它允许一个数组表达式或者字符串在需要多个参数(用于函数调用)或多个元素(用于数组字面量)的地方被展开。扩展运算符的语法很简单,就是在需要展开的地方前面...

    《ECMAScript2016标准入门(第三版)》_阮一峰最新版

    根据提供的文件信息,我们可以推断出这是一本关于ECMAScript 2016标准的书籍,作者为阮一峰。接下来将从标题、描述、标签以及部分内容几个方面出发,来详细阐述ECMAScript 2016的相关知识点。 ### 一、ECMAScript ...

    JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)

    ### JavaScript高级程序设计阅读笔记(六):ECMAScript中的运算符(二) #### 加性运算符 在ECMAScript中,加性运算符主要包括加号`+`和减号`-`。虽然这些运算符的基本功能看似简单,但在实际应用中却有着较为...

    ECMAScript 6 入门教程

    - `...` 运算符用于复制或展开数组和对象,如 `let arr1 = [1, 2, 3]; let arr2 = [...arr1, 4, 5];` - 在函数调用中,可以用于传入多个参数。 12. **默认参数、剩余参数** - 函数参数可以设置默认值,如 `...

    ECMAScript从零开始学-课件

    ECMAScript中有多种运算符,包括算术运算符、比较运算符、逻辑运算符、赋值运算符等,以及三元运算符、逗号运算符等。此外,还会涉及表达式的计算规则和优先级。 7. **流程控制语句**: 学习如何使用流程控制语句...

    ECMAscript

    ECMAscript的核心包括语法、类型、语句、关键字、保留字、运算符和对象。它与宿主环境(如Web浏览器)无关,这意味着相同的ECMAscript代码可以在不同的环境中运行,只要这些环境支持ECMAscript规范。 - **语法**:...

    javascript运算符——位运算符全面介绍.docx

    ECMAScript中的数值都以IEEE-754 64位格式存储,但位操作符是以32位带符号的整数形式进行运算的,并且返回的结果也是一个32位带符号的整数。这种位数转换意味着在对特殊的`NaN`和`Infinity`值应用位操作时,这些值...

Global site tag (gtag.js) - Google Analytics