`

第三章 JavaScript运算符

    博客分类:
  • js
阅读更多
ECMAScript 语法
ECMAScript 变量
ECMAScript 关键字
ECMAScript 保留字
ECMAScript 值
ECMAScript 原始类型
ECMAScript 类型转换
ECMAScript 引用类型

目标
一元运算符
位运算符
逻辑运算符
乘性运算符
加性运算符
关系运算符
等性运算符
条件运算符
赋值运算符



运算符
因为ECMAScript的运算符规则和JAVA有很多相似的地方,相同的我们就不过多的进行解析,我们研究一下ECMAScript几个特有的运算符,以及ECMAScript运算符的特殊地方。

注意:在构造ECMAScript的表达式时,一定要注意传递给运算符的数据类型和返回的数据类型,各种运算符用来计算的运算数表达式要符合某种数据类型,例如,对字符串不能进行乘法运算,所以在ECMAScript中表达式“a”*“b”是不合法的,但是要注意,在可能的情况下, ECMAScript会把表达式转换为适当的类型,因此表达式“3”*“5”是合法的,它的值是数字15,而不是字符串“15”。但是“3”+“5”的结果是35,它会执行字符串连接的操作。

一元加法和一元减法

一元加法本质上对数字无任何影响:
var iNum = 20;
iNum = +iNum;
alert(iNum); //输出 "20"

尽管一元加法对数字无作用,但对字符串却有有趣的效果,会把字符串转换成数字。
var sNum = "20";
alert(typeof sNum); //输出 "string"
var iNum = +sNum;
alert(typeof iNum); //输出 "number"

这段代码把字符串 “20” 转换成真正的数字。当一元加法运算符对字符串进行操作时,它计算字符串的方式与 parseInt() 相似 ,为了不产生二议性,请不要使用这种方式转换字符串,请使用parseInt() 方法来转换。一元减法就是对数值求负 ,与一元加法运算符相似,一元减法运算符也会把字符串转换成近似的数字,此外还会对该值求负。

关系运算符

每个关系运算符都返回一个布尔值:
var bResult1 = 2 > 1 //true
var bResult2 = 2 < 1 //false
不过,对两个字符串应用关系运算符,它们的行为则不同。许多人认为小于表示“在字母顺序上靠前”,大于表示“在字母顺序上靠后”,但事实并非如此。对于字符串,第一个字符串中每个字符的代码都与会第二个字符串中对应位置的字符的代码进行数值比较。完成这种比较操作后,返回一个 Boolean 值。问题在于大写字母的代码都小于小写字母的代码,这意味这着可能会遇到下列情况:
var bResult = "Blue" < "alpha";
alert(bResult); //输出 true
要强制性得到按照真正的字母顺序比较的结果,必须把两个数转换成相同的大小写形式(全大写或全小写的),然后再进行比较:
var bResult = "Blue".toLowerCase() < "alpha".toLowerCase();
alert(bResult); //输出 false

比较数字和字符串

另一种棘手的状况发生在比较两个字符串形式的数字时,比如:
var bResult = "25" < "3";
alert(bResult); //输出 "true“
上面这段代码比较的是字符串 "25" 和 "3"。两个运算数都是字符串,所以比较的是它们的字符代码("2" 的字符代码是 50,"3" 的字符代码是 51)。
不过,如果把某个运算数该为数字,那么结果就有趣了:
var bResult = “25” < 3; alert(bResult); //输出 “false”  
不过,如果字符串不能转换成数字又该如何呢?考虑下面的例子:
var bResult = "a" < 3; alert(bResult); 你能预料到这段代码输出什么吗?字母 "a" 不能转换成有意义的数字。不过,如果对它调用 parseInt() 方法,返回的是 NaN。根据规则,任何包含 NaN 的关系运算符都要返回 false,因此这段代码也输出 false:

等号和非等号

在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。

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

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



全等号和非全等号

等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。
全等号由三个等号表示(===),只有在无需类型转换运算数就相等的情况下,才返回 true。
例如:
var sNum = "66";
var iNum = 66;
alert(sNum == iNum); //输出 "true"
alert(sNum === iNum); //输出 "false"
在这段代码中,第一个 alert 使用等号来比较字符串 "66" 和数字 66,输出 "true"。如前所述,这是因为字符串 "66" 将被转换成数字 66,然后才与另一个数字 66 进行比较。第二个 alert 使用全等号在没有类型转换的情况下比较字符串和数字,当然,字符串不等于数字,所以输出 "false"。
非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数不相等的情况下,才返回 true。
例如:
var sNum = "66";
var iNum = 66;
alert(sNum != iNum); //输出 "false"
alert(sNum !== iNum); //输出 "true"
这里,第一个 alert 使用非等号,把字符串 "66" 转换成数字 66,使得它与第二个运算数 66 相等。因此,计算结果为 "false",因为两个运算数是相等的。第二个 alert 使用的非全等号。该运算是在问:"sNum" 与 "iNum" 不同吗?这个问题的答案是:是的(true),因为 sNum 是字符串,而 iNum 是数字,它们当然不同。

  • 大小: 23.2 KB
  • 大小: 172.4 KB
分享到:
评论

相关推荐

    浅谈javascript运算符——条件,逗号,赋值,()和void运算符

    前面的话 javascript中运算符总共有46个,除了前面已经介绍过的算术运算符、关系运算符、位运算符、逻辑运算符之外...’和’:’之间,第三个操作数在’:’之后 variable = boolean_expression ? true_value : false_v

    JavaScript权威指南(第五版)

     第3章 数据类型和值  第4章 变量  第5章 表达式和运算符  第6章 语句  第7章 对象和数组  第8章 函数  第9章 类、构造函数和原型  第10章 模块和名字空间  第11章 使用正则表达式的模式匹配  第...

    JavaScript权威指南

    第三章 数据类型和值 第四章 变量 第五章 表达式和运算符 第六章 语句 第七章 函数 第八章 对象 第九章 数组 第十章 使用正则表达式的模式匹配 第十一章 JavaScript的更多主题 第二部分 客户JavaScript 第...

    JavaScript权威指南(第6版)(中文版)

    第3章数据类型和值 第4章变量 第5章表达式和运算符 第6章语句 第7章对象和数组 第8章函数 第9章类、构造函数和原型 第10章模块和名字空间 第11章使用正则表达式的模式匹配 第12章脚本化Java 第二部分客户端...

    javascript高级教程.pdf

    第3 章 JavaScript 基本语法 3.9 JavaScript 基本数据结构 3.10 JavaScript 运算符和表达式 3.11 JavaScript 控制结构和循环 第4 章 Window 窗口对象 4.12 Window 窗口对象的属性 4.13 Window 窗口对象的方法 4.14 ...

    JavaScript核心概念及实践 高清PDF扫描版 (邱俊涛).pdf

    第3章 对象 第4章 函数 第5章 数组 第6章 正则表达式 第7章 闭包 第8章 面向对象的JavaScript 第9章 函数式的JavaScript 第10章 核心概念深入 第11章 客户端的JavaScript 第12章 客户端的MVC框架:...

    javascript_高级编程

    第3 章 JavaScript 基本语法. 3.9 JavaScript 基本数据结构. 3.10 JavaScript 运算符和表达式. 3.11 JavaScript 控制结构和循环. 第4 章 Window 对象 4.12 Window 对象的属性 4.13 Window 对象的方法 4.14 创建和...

    JavaScript权威指南(第6版) 英文版

    第3章 类型、值和变量 32 3.1 数字 34 3.2 文本 38 3.3 布尔值 43 3.4 null和undefined 44 3.5 全局对象 45 3.6 包装对象 46 3.7 不可变的原始值和可变的对象引用 47 3.8 类型转换 48 3.9 变量...

    JavaScript权威指南-第六版

     第3章 类型、值和变量32  3.1 数字34  3.2 文本38  3.3 布尔值43  3.4 null和undefined44  3.5 全局对象45  3.6 包装对象46  3.7 不可变的原始值和可变的对象引用47  3.8 类型转换48  3.9 变量声明55  ...

    JavaScript核心技术 PDF扫描版

    第3章运算符和语句 3.1JavaScript语句的格式 3.2简单语句 3.3条件语句和程序流 3.4条件运算符 3.5逻辑运算符 3.6高级语句:循环语句 3.7习题 第4章JavaScript对象 4.1对象构造函数 4.2Number对象 4.3String对象 4.4...

    JavaScript 权威指南(第四版).pdf

     第3章 类型、值和变量32  3.1 数字34  3.2 文本38  3.3 布尔值43  3.4 null和undefined44  3.5 全局对象45  3.6 包装对象46  3.7 不可变的原始值和可变的对象引用47  3.8 类型转换48  3.9 变量声明55  ...

    JavaScript权威指南(第6版)

    第3章 类型、值和变量 3.1 数字 3.2 文本 3.3 布尔值 3.4 null和undefined 3.5 全局对象 3.6 包装对象 3.7 不可变的原始值和可变的对象引用 3.8 类型转换 3.9 变量声明 3.10 变量作用域 第4章 表达式和运算符 4.1 ...

    JavaScript权威指南(第6版)中文版pdf+源代码

     第3章 类型、值和变量32  3.1 数字34  3.2 文本38  3.3 布尔值43  3.4 null和undefined44  3.5 全局对象45  3.6 包装对象46  3.7 不可变的原始值和可变的对象引用47  3.8 类型转换48  3.9 变量声明55  ...

    JavaScript权威指南(第6版)(附源码)

    第3章 类型、值和变量 3.1 数字 3.2 文本 3.3 布尔值 3.4 null和undefined 3.5 全局对象 3.6 包装对象 3.7 不可变的原始值和可变的对象引用 3.8 类型转换 3.9 变量声明 3.10 变量作用域 第4章 表达式和运算符 4.1 ...

    JavaScript权威指南(第6版)中文

    第3章 类型、值和变量 32 3.1 数字 34 3.2 文本 38 3.3 布尔值 43 3.4 null和undefined 44 3.5 全局对象 45 3.6 包装对象 46 3.7 不可变的原始值和可变的对象引用 47 3.8 类型转换 48 3.9 变量...

    javascript完全学习手册1 源码

    第3章 JavaScript内置对象 43 3.1 JavaScript对象概述 43 3.1.1 对象的概念 43 3.1.2 使用JavaScript对象 基础知识 44 3.2 Array对象 46 3.2.1 创建Array对象 46 3.2.2 Array对象属性 47 3.2.3 Array对象方法 48 3.3...

    JavaScript权威指南(第6版)中文文字版

    第3章 类型、值和变量 32 3.1 数字 34 3.2 文本 38 3.3 布尔值 43 3.4 null和undefined 44 3.5 全局对象 45 3.6 包装对象 46 3.7 不可变的原始值和可变的对象引用 47 .3.8 类型转换 48 3.9 变量声明 55 3.10 变量...

    疯狂HTML 5+CSS 3+JavaScript讲义(第2版)+源代码

    第3章 HTML 5表单相关的元素和属性 72 3.1 HTML原有的表单及表单控件 73 3.2 HTML 5新增的表单属性 83 3.3 HTML 5新增的表单元素 90 3.4 HTML 5新增的客户端校验 96 3.5 本章小结 100 第4章 HTML 5的绘图支持...

Global site tag (gtag.js) - Google Analytics