2.5 操作符

  操作符包括算术操作符、位操作符、关系操作符合相等操作符。ECMAScript操作符与众不同的是,它们能够适用很多值,例如字符串、数字值、布尔值甚至对象。在应用于对象时,相应的操作符通常都会调用对象的valueOf()或toString(),以便取得可以操作的值。

2.5.1 一元操作符

  只能操作一个值的操作符叫做一元操作符。

  1.递增和递减操作符

  递增和递减操作符,各有两个版本:前置型和后置型。例如:

  var num= 4;

num++;//后置型

++num;//前置型

前置型和后置型区别是前置型是先进行递增或递减运算,然后再参加运算;后置型是先参加运算,再进行递增或递减运算。例如:

  var num = 4;

  //alert(++num+1);//输出6 写成alert((++num)+1)结果也是一样

  //alert(num+++1);//输出5 写成alert((num++)+1)结果也是一样

递增递减操作符不仅仅用在整数,还可以用在字符串、布尔值、浮点数和对象。它们遵循的规则以下:

1.在应用与一个包含有效数字字符的字符串时,先转换为数字值,再执行加减1的操作

2.在应用与一个不包含有效数字字符的字符串时,将变量的值设为NaN

3.在应用于布尔值false时,先将其转换为0再执行加减1的操作

4.在应用于布尔值true时,先将其转换为1再执行加减1的操作

5.在应用于浮点数值时,执行加减1操作。

6.在应用于对象,先调用对象的valueOf()方法以取得一个可供操作的值。然后对该值应用前述的规则。如果结果是NaN,则调用toString()方法后再应用前述规则。

例子:

var s1 = "2";var s2 = "z";var b = false;var f = 1.1;var o = {valueOf: function(){return -1;}};s1++; //值变成3

s2++;//值变成NaN

b++;//值变成1

f--; //值变成0.10000000000000009(由于浮点舍入错误所致)

o--;//值变成-2;

2.一元加和减操作符

2.5.2 位操作符

  位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值。

  对于有符号的整数,32位中的前31位用于表示整数的值,第32位用于表示数值的符号:0表示整数,1表示负数。这个表示符号的位叫符号位。

计算机是以二进制码来存储数据,而且是使用的是补码

  1.正数的补码就是它的原码。

  例如:+9(32位)

原码为: 0000 0000 0000 0000 0000 0000 0000 1001

   补码为: 0000 0000 0000 0000 0000 0000 0000 1001

  2.负数的补码等于其绝对值的原码各位取反,然后整个数加1的数值

例如:-7(32位)

原码为: 1000 0000 0000 0000 0000 0000 0000 0111

   绝对值:0000 0000 0000 0000 0000 0000 0000 0111

    取反后: 1111 1111 1111 1111 1111 1111 1111 1000

    加1:    1111 1111 1111 1111 1111 1111 1111 1001

   所以补码是 1111 1111 1111 1111 1111 1111 1111 1001

按位非(NOT)(波浪线~)

var num1 = 25; // 0000 0000 0000 0000 0000 0000 0001 1001

var num2 = ~num1; // 1111 1111 1111 1111 1111 1111 1110 0110

alert(num2); //-26

按位与(AND)(&)

var result = 25 & 3; //0000 0000 0000 0000 0000 0000 0001 1001

           //0000 0000 0000 0000 0000 0000 0000 0011

alert(result);//1      // 0000 0000 0000 0000 0000 0000 0000 0001

按位或(or)(|)

var result = 25 & 3; //0000 0000 0000 0000 0000 0000 0001 1001

           //0000 0000 0000 0000 0000 0000 0000 0011

alert(result);//27     // 0000 0000 0000 0000 0000 0000 0001 1011

按位异或(XOR)(^)

var result = 25 & 3; //0000 0000 0000 0000 0000 0000 0001 1001

           //0000 0000 0000 0000 0000 0000 0000 0011

alert(result);//26    // 0000 0000 0000 0000 0000 0000 0001 1010

左移

左移操作符(<<),这个操作符将数值的所有位向左移动指定的位数。

var oldValue = 2;    // 二进制10

var newValue = oldValue << 5;//左移5位 1000000,就是十进制的64

其实这个操作结果等于2*Math.pow(2,5);

在左移后,原数值的右侧多出了5个空位,左移操作会以0来填充这些空位。左移操作不会影响符号位。

有符号右移

有符号右移操作符(>>),这个操作与左移操作相反,数值向右移动,但保留符号位。

var oldValue= 64;// 0000 0000 0000 0000 0000 0000 0100 0000 红色为符号位

var newValue = oldValue>>5;//0000 0000 0000 0000 0000 0000 0000 0010 红色为符号位,蓝色为自动填充的0

向右移动空出的位置自动填充符号位的值

无符号向右移动操作符号(>>>)

2.5.3布尔操作符

1.逻辑非

    逻辑非操作符由一个叹号(!)表示。逻辑非操作符首先将它的操作数转换为一个布尔值,然后求反。

2.逻辑与

  逻辑与操作符号(&&),有两个操作数。逻辑与操作可以应用任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作不一定返回布尔值。它遵循以下规则:

$ 如果第一个操作数是对象,则返回第二个操作数。

$ 如果第二个操作数是对象,则只有第一个操作数的求值结果为true的情况下才会返回该对象

$ 如果两个操作数都是对象,则返回第二个操作数

$ 如果有一个操作数是null,则返回null;(除了第一个操作数是false的情况)

$ 如果有一个操作数是NaN,则返回NaN;(除了第一个操作数是false的情况)

$ 如果有一个操作数是undefined,则返回undefined。(除了第一个操作数是false的情况)

如果两个操作数都是布尔值,会根据以下

----------------------------------------------

第一个操作数        第二个操作数          结果

----------------------------------------------

true                    true                       true

true                    false                      false

false                   true                       false

false                   false                      false

-----------------------------------------------

逻辑与也叫短路与,即如果第一个操作数能绝对结果,那么就不会再对第二操作数求值。当第一个操作数为false,就不管第二个操作数,直接返回false。

例子:

var found = true;
var result = (found && someUndefinedVariable); //这里会发生错误
alert(result);//不执行

在浏览器报了Uncaught ReferenceError: someUndefinedVariable is not defined的错误。这说明不能在逻辑与操作中使用未定义的值。如果把found改为false,这个错误就不会发生了,因为发生短路,后面不求值。

3.逻辑或

逻辑或操作符(||)表示,有两个操作数。

在有一个操作数不是布尔值的情况下,逻辑与操作不一定返回布尔值。它遵循以下规则:

$ 如果第一个操作数是对象,则返回第一个操作数。

$ 如果第二个操作数求值结果为false,则返回第二个操作数

$ 如果两个操作数都是对象,则返回第一个操作数

$ 如果有一个操作数是null,则返回null;(除了第一个操作数是true的情况)

$ 如果有一个操作数是NaN,则返回NaN;(除了第一个操作数是true的情况)

$ 如果有一个操作数是undefined,则返回undefined。(除了第一个操作数是true的情况)

如果两个操作数都是布尔值,会根据以下

----------------------------------------------

第一个操作数        第二个操作数          结果

----------------------------------------------

true                    true                       true

true                    false                      true

false                   true                       true

false                   false                      false

-----------------------------------------------

逻辑或也叫短路或,当第一个操作数是true,就不会执行第二个操作数,直接返回true。

转载于:https://www.cnblogs.com/night2013/p/3500750.html

阅读javascript高级程序设计随笔(五)相关推荐

  1. 《JavaScript高级程序设计》五、引用类型(基本包装类型)

    <JavaScript高级程序设计>五.引用类型(基本包装类型) 目录: Boolean类型 Number类型 String类型 字符方法 字符位置方法 字符操作方法 字符大小转换方法 字 ...

  2. 精简《JavaScript高级程序设计》五、引用类型(上)

    第五章概况 5.1 Object类型 引用类型是一种数据结构,用于将数据和功能组织在一起.对象是某个特定引用类型的实例 创建Object实例的方式有两种: new+Object构造函数 var per ...

  3. JavaScript高级程序设计---第五章 基本引用类型

    第五章 基本引用类型 本章内容 理解对象 基本JavaScript 数据类型 原始值与原始值包装类型 引用值(或者对象)是某个特定引用类型的实例. 对象被认为是某个特定引用类型的实例.新对象通过使用n ...

  4. 阅读JavaScript高级程序设计(第二版)笔记

    第一章js简介 JavaScript诞生在1995年,当时负责进行输入型验证. JavaScript是一种专为与网页交互而设计的脚本语言,分为 : 1. ECMAScript核心语言功能. 2.文档对 ...

  5. 回顾《JavaScript高级程序设计》目录篇

    <JavaScript高级程序设计>看这一份够了,前提是等我更完... 回顾<JavaScript高级程序设计>目录篇 精简<JavaScript高级程序设计>四 ...

  6. 《JavaScript高级程序设计》红宝书第二遍阅读(动手实践)

    <JavaScript高级程序设计>红宝书第二遍阅读(动手实践) 第1章--什么是JavaScript 第2章--HTML中的JavaScript 第3章--语言基础 第4章--变量.作用 ...

  7. 《JavaScript高级程序设计》红宝书第一遍阅读(了解概念)

    <JavaScript高级程序设计>红宝书第一遍阅读(了解概念) 第1章--什么是JavaScript 第2章--HTML中的JavaScript 第3章--语言基础 第4章--变量.作用 ...

  8. 一行python代码画粑粑_如何阅读《JavaScript高级程序设计》(一)

    题外话 最近在看<JavaScript高级程序设计>这本书,面对着700多页的厚书籍,心里有点压力,所以我决定梳理一下..探究一下到底怎么读这本书.本书的内容好像只有到ES5...所以只能 ...

  9. 《JavaScript高级程序设计(第3版)》教程大纲

    词条 <JavaScript高级程序设计>是2006年人民邮电出版社出版的图书,作者是(美)(Nicholas C.Zakas)扎卡斯.本书适合有一定编程经验的开发人员阅读,也可作为高校相 ...

最新文章

  1. Spring4-JdbcDaoSupport-查询单列
  2. 主成分分析 PCA算法
  3. Python 日期和时间戳的转换
  4. 如何处理db2中文不显示
  5. Ngui之UI框架的层级处理
  6. oracle的集函数,Oracle统计分析函数集之一(转载)
  7. FFmpeg 在ubuntu 中编译出so
  8. 又一个PS2汉化入门
  9. 酷派N900刷机教程
  10. 马哥 python培训
  11. 各纬度气候分布图_【地理干货】气压带和风带知识点总结,附世界各种气候类型分布图(高清版)汇总!...
  12. 考研英语 - advanced
  13. the system clock has been set more than 24 hours
  14. 如何改变hr标签的颜色
  15. 计算机等级考试准考证打河南,2019年河南牧院计算机等级考试准考证打印时间...
  16. Qt的对话框与窗口--标准的对话框
  17. 学习大数据需要什么语言基础
  18. Unity实用小工具或脚本——XML工具
  19. 川普撞脸希拉里(基于 OpenCV 的面部特征交换)-2
  20. 数据库故障容错之系统时钟故障

热门文章

  1. kali下载速度慢_kali Linux 2020.1最新安装教程,绝对能帮你安装好!不是root、没有桌面、中文乱码、下载太慢、ssh链接等问题!...
  2. 张艺谋眼中的2020:科技的人间烟火味
  3. 游戏设计模式阅读笔记19——优化模式(空间分区)
  4. --zigbee物联网工程项目(一)
  5. web-log-parser 安装记录
  6. 基于Android的火灾报警
  7. 读源码学算法之Monte Carlo Tree Search
  8. 高斯PDF的性质及其推论
  9. 苹果企业号-通过网页下载应用,部署应用分发服务器
  10. 视觉数据集是基于物体和风景标记的巨大的图像库