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

简介:

2.9.5、加性运算符

  加性运算符(即加号和减号)通常是最简单的运算符,不过在ECMAScript中,每个加性运算符都有大量的特殊行为。

  1、加法运算符:

1 var iResult=1+2;
2 console.log(iResult);//outputs 3

  特殊性:

  • 某个运算数是NaN,结果为NaN
  • Infinity加Infinity,结果为Infinity
  • -Infinity加-Infinity,结果为-Infinity
  • Infinity加-Infinity,结果为NaN
  • 如果两个运算数都是字符串,把第二个字符串连接到第一个字符串上
  • 如果只有一个运算数是字符串,把另一个运算数转换为字符串,结果是两个字符串连接成的字符串

  示例:

 1 var iResult2=NaN+1;
2 console.log(iResult2);//NaN
3
4 var iResult3=Infinity+Infinity;
5 console.log(iResult3);//Infinity
6
7 var iResult4=-Infinity-Infinity;
8 console.log(iResult4);//-Infinity
9
10 var iResult5="abc"+"bcd";
11 console.log(iResult5);//abcbcd
12
13 var iResult6=5+"5";
14 console.log(iResult6);//55

  2、减法运算符:

1 var iResult=2-1;
2 console.log(iResult);//1

  特殊性:

  • 某个运算数是NaN,结果为NaN
  • Infinity减Infinity,结果为NaN
  • -Infinity减-Infinity,结果为NaN
  • Infinity减-Infinity,结果为Infinity
  • -Infinity减-Infinity,结果为-Infinity
  • 如果两个运算数都是字符串,结果为NaN
  • 如果只有一个运算数是字符串,把字符串转换为数字再进行运算

  示例:

 1 var iResult2=NaN-1;
2 console.log(iResult2);//NaN
3
4 var iResult3=Infinity-Infinity;
5 console.log(iResult3);//NaN
6
7 var iResult4=-Infinity-(-Infinity);
8 console.log(iResult4);//NaN
9
10 var iResult5=-Infinity-Infinity;
11 console.log(iResult5);//-Infinity
12
13 var iResult6=Infinity-(-Infinity);
14 console.log(iResult6);//Infinity
15
16 var iResult7="abc"-"a";
17 console.log(iResult7);//NaN
18
19 var iResult8="5"-5;
20 console.log(iResult8);//0
21
22 var iResult9="a"-5;
23 console.log(iResult9);//NaN

2.9.6、关系运算符

  关系运算符<、>、<=、>=执行的是两个数字的比较运算,返回的是一个Boolean值。如果两个操作数都是字符串,则逐一比较两个字符串的ASC码,如果只有一方是字符串,则把字符串转换为数字后比较,示例如下:

 1 var bResult=2<1;
2 console.log(bResult);//false
3
4 var bResult="B"<"a";
5 console.log(bResult);//true
6
7 var bResult="b"<"a";
8 console.log(bResult);//false
9
10 var bResult="13"<"2";
11 console.log(bResult);//true
12
13 var bResult=13<"2";
14 console.log(bResult);//false
15
16 var bResult=-1<"a";
17 console.log(bResult);//false

  第17行的代码中,"a"被转换为数字时返回的是NaN,任何包含NaN的关系运算都要返回false。

2.9.7、等性运算符

  1、等号和非等号

  在ECMAScript中,等号(==)及非等号(!=)都返回Boolean值。为确定两个运算数是否相等,这两个运算数都会进行类型转换,转换规则如下:

  • 如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true转换成1。
  • 如果一个运算数是字符串,另一个运算数是数字,在检查相等性之前,要尝试把字符串转换成数字。
  • 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
  • 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

  在进行比较时,运算符还遵循还列规则:

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

  示例:

 1 console.log(null==undefined);//true
2 console.log("NaN"==NaN);//false
3 console.log(5==NaN);//false
4 console.log(NaN==NaN);//false
5 console.log(NaN!=NaN);//true
6 console.log(false==0);//true
7 console.log(true==1);//true
8 console.log(true==2);//false
9 console.log(undefined==0);//false
10 console.log(null==0);//false
11 console.log("5"==5);//true

  2、全等号和非全等号

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

1 console.log("55"==55);//true
2 console.log("55"===55);//false
3 console.log("55"!=55);//false
4 console.log("55"!==55);//true

2.9.8、条件运算符

  条件运算符跟其他语言中的相同:varialbe=boolean_expression?true_value:false_value;

  示例:

1 function Max(iNum1,iNum2){
2 return iNum1>=iNum2?iNum1:iNum2;
3 }
4 console.log(Max(1,3));//3
5 console.log(Max(3,1));//3

2.9.9、赋值运算符

  简单的赋值运算符由等号(=)实现,只是把等号右边的值赋予等号左边的变量,例如:

1 var iNum=10;

  复合赋值运算是由乘性运算符、加性运算符或位移运算符加等号(=)实现的。这些赋值运算符是下列这些常见情况的缩写形式:

1 var iNum=10;
2 iNum=iNum+10;
3
4 //等同于
5 var iNum=10;
6 iNum+=10;

  每种主要的算术运算及其他几个运算都有复合赋值运算符:

  • 乘法/赋值(*=)
  • 除法/赋值(/=)
  • 取模/赋值(%=)
  • 加法/赋值(+=)
  • 减法/赋值(-=)
  • 左移/赋值(<<=)
  • 有符号右移/赋值(>>=)
  • 无符号右移/赋值(>>>=)

2.9.10、逗号运算符

  用逗号运算符可以在一条语句中执行多个运算。例如:

1 var iNum=1,iNum2=2,iNum3=3;

  逗号运算符最常用于变量声明中。



本文转自Artwl博客园博客,原文链接:http://www.cnblogs.com/artwl/,如需转载请自行联系原作者

相关文章
|
2月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
45 0
|
24天前
|
JavaScript 前端开发 安全
ECMAScript 6(以下简称 ES6)的出现为 JavaScript 带来了许多新的特性和改进,其中 let 和 const 是两个非常重要的关键字。
ES6 引入了 `let` 和 `const` 关键字,为 JavaScript 的变量管理带来了革新。`let` 提供了块级作用域和暂存死区特性,避免变量污染,增强代码可读性和安全性;`const` 用于声明不可重新赋值的常量,但允许对象和数组的内部修改。两者在循环、函数内部及复杂项目中广泛应用,有助于实现不可变数据结构,提升代码质量。
23 5
|
23天前
|
自然语言处理 JavaScript 前端开发
ECMAScript 6 的出现为 JavaScript 带来了许多新的特性和改进
这些只是ES6的一些主要特性,它们极大地增强了JavaScript的功能和表现力,使得JavaScript在大型应用开发、前端框架等领域能够更加高效地编写复杂的应用程序。
|
1月前
|
自然语言处理 JavaScript 前端开发
[JS]同事看了我做的this笔记,直摇头,坦言:我还是参考启发博文吧
本文介绍了JavaScript中`this`关键字的重要性和使用规则。作者回顾了早期笔记,总结了`this`指向的各种情况,并分享了最新的理解。文章强调了`this`在不同上下文中的指向,包括对象方法、全局函数、箭头函数等,并提供了改变`this`指向的方法。适合JavaScript开发者参考。
48 2
|
2月前
|
JavaScript 前端开发 编译器
掌握现代化JavaScript:ECMAScript提案与特性
【10月更文挑战第13天】本文介绍了ECMAScript(ES)的最新提案与特性,包括可选链、空值合并运算符、类字段和顶层Await等。通过跟踪TC39提案、使用Babel或TypeScript、测试兼容性以及逐步迁移,开发者可以高效地采用这些新特性,简化代码、提高开发效率并增强应用功能。文章还提供了实战技巧,帮助开发者在现代Web开发中充分利用这些现代化的特性。
|
3月前
|
JavaScript 前端开发 Java
JavaScript笔记(回顾一,基础知识篇)
JavaScript基础知识点回顾,包括语言定义、ECMAScript规范、字面量、变量声明、操作符、关键字、注释、流程控制语句、数据类型、类型转换和引用数据类型等。
JavaScript笔记(回顾一,基础知识篇)
|
2月前
|
JavaScript
js运算符
js运算符
22 5
|
3月前
|
Web App开发 JavaScript 前端开发
探索现代JavaScript开发:ECMAScript提案的未来
JavaScript是最受欢迎的编程语言之一,其发展迅速。ECMAScript(JS的标准化版本)的提案和更新为其带来了诸多新特性和改进。本文将介绍值得关注的ECMAScript提案,如可选链、空值合并运算符、逻辑赋值运算符、类字段和顶级Await,并展示如何利用这些新特性提升开发效率和代码质量。通过关注TC39提案流程、使用Babel和TypeScript等工具,开发者可以提前体验并利用这些新特性。随着JavaScript的不断进步,未来将有更多令人期待的功能加入。
|
2月前
|
JavaScript 前端开发
JavaScript 运算符全知道
JavaScript 运算符全知道
54 0
|
3月前
|
JavaScript 前端开发
JavaScript 运算符
JavaScript 运算符
21 3