位置: 编程技术 - 正文

JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符(javascript高级程序设计电子书)

编辑:rootadmin
在ECMAScript中,有非常丰富的运算符和操作符,在这篇文章中将按通常的分类来稍微整理一下,不过在整理之前,先说明一下:

1、虽然标题是运算符和操作符,然而在我看来并没有多少严格区分的必要,在英文中,貌似也是用一个Operator来表示,所以在下文中我可能会混用。甚至,一些不属于运算符和操作符范畴的,我也整理在这里,只要我觉得必要。

2、对于运算符的优先级,你无需一一牢记——我相信你知道最简单的”先乘除,后加减”,至于其它的,如果你不确定,加上括号好了。在ECMAScript中,优先级相同的从左向右运算。

3、对于一些编程语言通用的运算符,比如常用算术运算符(+-*/),我只会简单的列举一下,不会展开,但是请注意,并不是说这些不重要,相反,这些通用运算符甚至处于一个非常基础的地位,只是我觉得你应该早已经熟悉,没必要在这里花时间强调。

4、那么,这里重点关注什么呢?就是一些在ECMAScript中比较特殊的操作符,或者我认为值得花时间强调的一些地方。

运算符与操作符

类别操作符 描述说明一元操作符++ 自增1

1、自增(减)有前置和后置两种类型,前置先自增(减)再参与其它运算,后置先参与其它运算再自增(减)。

2、在ES中,自增(减)不仅适用于整数,它们可以作用于任意值,对于不是Number类型的值,会先按前一篇文章中的规则隐式转换为Number,然后再自增(减),此时变量类型也会变成Number类型。

-- 自减1+ 一元加一元加最主要的应用就是将操作数转变为Number类型,相当于调用Number()转换。 - 一元减一元减则是在一元加的基础之上再取其相反数。算术操作符+ 加

1、除了加(+)之外,如果操作数不是Number类型,会自动调用Number()转换为Number类型再进行计算。

2、对于加减(+-),除了作为算术运算符。还可以作为一元操作符(见上)。当然,由于字符串操作中对加号(+)的重载,还可以用于将任意数值(的字符串)相连,这也是第1点中为什么要除了加(+),它在含有非Number类型值时,会将所有操作数转换为字符串相连接。

3、与一般类C语言不同,在ES中,除(/)和取模(%)并不会区分整数和浮点数,比如 5 / 2 = 2.5 而不是2,5.3 % 3 = 2.3 而不是2。

4、任意运算,只要操作数含NaN,结果就是NaN。但并不是结果为NaN就一定有一个操作数为NaN,比如0/0也返回NaN。

5、对于含无穷Infinity的运算,规定比较多,这里就不列举了,可以参考原书,或者自行测试。

- 减* 乘/ 除% 取模逻辑操作符

(布尔操作符)

! 逻辑非

首先将操作数转换为Boolean类型值,然后再取反。可以使用双重非!!将一个数值转换为相应的Boolean值。

&& 逻辑与

1、当两个操作数相应的Boolean值均为true时,返回true

2、短路:当第一个操作数相应的Boolean值为false时,会直接返回false,不会再计算第二个操作数。这常常被应用在判断一个变量(属性)是否有定义,如:if(object && object.name && object.name = 'linjisong'){ } 这里会首先判断object存在,不存在的话就不会解析object.name从而阻止错误的发生,同样,也只有object.name存在,才会去比较这个值。

|| 逻辑或

1、当两个操作数相应的Boolean值至少有一个为true时,返回true

2、短路:当第一个操作数相应的Boolean值为true时,会直接返回true,不会再计算第二个操作数。

3、逻辑或,除了用于一般的判断之外,还常常被应用在提供默认值的情况,如:

function Fn(obj){   obj = obj || {};}

这里如果调用Fn未传入obj,则会自动给obj赋值为undefined,然后因为undefined的相应Boolean值为false,所以会将一个空对象{}赋值给obj,如果调用传入了obj,则因为任意对象的Boolean值为true,所以就不会取后面的{},从而达到给obj一个默认值{}的效果。

这种方式还被应用在大型JS库的多个相对独立的文件中://jsLibvar jsLib;//file1(function (jsLib){   jsLib = jsLib || {};})(jsLib);

//file2(function (jsLib){   jsLib = jsLib || {}; })(jsLib);

使用这种方式,无论先加载哪个文件,都会判断jsLib是否已经定义,如果未定义就提供一个默认值,这样做可以使得相对独立模块可以不用考虑加载顺序。

关系操作符

(比较操作符)

< 小于

1、只要有一个操作数是Number类型或Boolean类型值,就将两个操作数转换成Number类型值(如果需要转换)执行数值比较。

2、字符串比较,会逐个比较字符编码值。

3、操作符是对象时,调用valueOf()(如果没有,就调用toString()),再将结果按上面规则比较。

4、任意数和NaN比较返回false。

<= 小于或等于> 大于>= 大于或等于== 相等

1、相等和不等(==、!=)在比较时,只要有必要,就会隐式类型转换。

2、全等和不全等(===、!==)在比较时,不会转换类型,如果类型不一致,直接为!==。

3、结合1、2,可以知道,a===b则一定有a==b,而a!=b则一定有a!==b。

!= 不等=== 全等!== 不全等赋值操作符= 赋值 复合算术赋值操作符 算术运算符加=对应算术运算符,有+=、-=、*=、/=、%= 复合按位赋值操作符 按位运算符加=对应按位运算符,有~=、&=、|=、^=、<<=、>>=、>>>=按位操作符~ 按位非按位取反,也即返回反码& 按位与按位对齐,逐位操作,只有两个操作位均为1才返回1,否则该位返回0,最后将所有位操作结果组合返回| 按位或按位对齐,逐位操作,只有两个操作位均为0才返回0,否则该位返回1,最后将所有位操作结果组合返回 ^ 按位异或按位对齐,逐位操作,两个操作位不相同时返回1,否则该位返回0,最后将所有位操作结果组合返回<< 左移二进制数向左移位,左移不会改变符号位 >> 有符号右移二进制数向右移位,高位以符合位填充 >>> 无符号右移二进制数向右移位,直接右移,对于正数,结果和>>相同,对于负数,会把负数的二进制补码当成正数的二进制码处理字符串操作符+ 字符串连接相当于concat()函数,会先将所有操作数转换为字符串,然后再连接。注意,字符串一旦创建就不会变更,执行字符串连接时,在后台会有一个中间的连接和销毁过程,这也是老旧浏览器在大量字符串连接操作时运行缓慢的原因。+= 字符串连接复合a+=b,相当于a=a+b。 对象操作符. 属性访问符简单的对象属性访问符。[] 属性或(类)数组访问通过[],可以访问名称是一个变量或含有特殊字符的属性。new 调用构造函数创建对象返回一个新创建的对象,在构造函数内部的this被指向这个新创建的对象。delete 变量、属性删除删除属性(变量可以看成是全局对象或执行环境的一个属性)。void 返回undefined。in 判断属性对象属性或原型链上的属性。instanceof 原型判断比较同一个上下文中的对象是否为另一个对象的原型。其它操作符?: 条件操作符语法;var value = exp ? trueExp : falseExp。 相当于var value; if(exp){ value = trueExp;}else{value = falseExp;}, 逗号操作符主要用于声明多个变量,这也是很多JS库的流行做法。例如:var num1=1,num2=2,num3=3;() 分组操作符

主要用途:

1、结合逗号操作符用于赋值。例如:var num = (5,1,4,8,0);这里num最后的值为0。

2、转换为表达式。比如eval('('+jsStr+')');又比如:function fn(){}//函数声明,不能直接调用(function fn(){})();//使用()将函数括起来,便可以直接调用3、用于调用函数。比如fn();。

typeof 类型操作符

返回一个字符串值:Undefined类型—>'undefined'、Null类型—>'object'、Boolean类型—>'boolean'、Number类型—>‘number'、String—>'string'、内置Function对象的实例—>'function'、其它Object类型—>'object'。(有些浏览器实现略有不同)

说明几点:

1、这里的分类并不十分严格,比如按位非(~)、逻辑非(!)、delete、void、typeof,都可以算是一元操作符,而自增(++)在很多资料中也被归为算术操作符之中。我在整理时则主要参考原书分类,也兼顾自然性。

2、加号(+)的用法比较灵活,需注意,特别是用于计算时,忽略了其中的字符串,会很容易犯错误。

3、typeof一般用来判断简单数据类型,如果是对象类型,因为大部分返回的都是object,没有多大实际用处,而instanceof的判断也需要满足同一个上下文的条件,否则也会出错,对于对象类别的判断会在后面讲述对象时再详细说明另外一种更为稳妥的方法。

4、先看下面的代码: 第一个输出的竟然是true,是不是出乎你的意料?在这里,由于==比较符发生了隐式类型转换,会将Number类型转换为String类型,然后Number类型的.因为小数点后没有不是0的数值,会被解析成整数,从而比较的时候会相等。第二个输出是string,这其实还是比较容易理解的,strVal是字符串,strObj是字符串对象,两者相加,会把对象转换成字符串,所以最终结果也是字符串类型。 5、关于符号,重复一下几个流行的用法(这里不涉及正则表达式中的用法): (1)使用一元加号(+)转换为Number类型。 (2)使用双重逻辑非(!!)转换为Boolean类型。 (3)使用逻辑与(&&)来检测对象是否存在并进行后续操作。 (4)使用逻辑或(||)来给函数参数提供默认值。 (5)使用分组(())来明确指定为表达式。 (6)使用花括号({})来定义对象字面量,JSON数据格式,代码块。 (7)使用中括号([])来定义数组字面量,JSON数据格式,访问数组,访问名称是变量或特殊字符的属性。 6、关于按位运算,虽然结果不是很直观,但是运行效率高,也有很多有趣的应用,比如不使用中间变量直接交换两个数值、判断奇数和偶数、MD5加密等等,有兴趣的朋友可以找相关资料自行研究。

推荐整理分享JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符(javascript高级程序设计电子书),希望有所帮助,仅作参考,欢迎阅读内容。

JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符(javascript高级程序设计电子书)

文章相关热门搜索词:javascript高级程序设计pdf下载,javascript高级程序设计电子版,javascript高级程序设计第三版,javascript高级程序设计pdf百度云,javascript高级程序设计电子版,javascript高级程序设计电子版,javascript高级程序设计电子版,javascript高级程序设计电子版,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript高级程序设计(第3版)学习笔记5 js语句 砖瓦和水泥都有了,接下来该是砌墙了,在ECMAScript中,语句就是我们需要砌的墙了。语句也和操作符一样,对于有C背景的人来说再自然不过了,下面采

JavaScript高级程序设计(第3版)学习笔记6 初识js对象 在房子里面可以放你想放的任意事物——如果你有足够的美学造诣,你甚至可以弄一个房中房试试——当然,为了方便管理,我们会给房子里存放的所

JavaScript高级程序设计(第3版)学习笔记7 js函数(上) 变量类型在说函数之前,先来说说变量类型。1、变量:变量在本质上就是命名的内存空间。2、变量的数据类型:就是指变量可以存储的值的数据类型

标签: javascript高级程序设计电子书

本文链接地址:https://www.jiuchutong.com/biancheng/380508.html 转载请保留说明!

上一篇:JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型(javascript高级程序设计第五版 pdf下载)

下一篇:JavaScript高级程序设计(第3版)学习笔记5 js语句(javascript高级程序设计电子书)

  • 企业重组的特殊性税务处理比例
  • 捐赠支出纳税调减
  • 递延所得税资产账务处理
  • 境外培训费计入关税完税价格
  • 企业购买理财都需先交税再提现吗
  • 记账人和复核人是一个人吗
  • 公司土地转让另外公司
  • 增值税只有销项没有进项怎么做账
  • 单位给职工租房属于福利政策文件
  • 增值税专用发票验证真伪
  • 异地业务操作
  • 生活垃圾处理项目基础金融产品包括
  • 增值税发票确认时间
  • 速冻食品增值税税率
  • 坏账准备确认后可以转回吗
  • 补交以前年度个税怎么做账
  • 发现以前年度未做领料生产的分录怎么处理
  • 公司内部收据能做凭证吗
  • cpu性能排行榜天梯图快科技
  • 出租的厂房房产税谁交
  • PSof1.exe - PSof1是什么进程 有什么作用
  • PHP:ftp_delete()的用法_FTP函数
  • 本期应计提坏账损失700元调整前坏账准备贷方余额500元
  • 记账凭证不见了怎么办
  • 艾灸的好处与功效女人
  • 企业间合作建房且建成后自用
  • uniapp 打开小程序
  • vue实现返回顶部
  • 日用品可以开专票吗
  • 搜索人工制造
  • php读取php文件内容
  • admit允许
  • 金蝶软件账套备份在哪里
  • 债务重组开场白
  • 印花税如何缴纳 计税依据是什么
  • 交强险必须要买驾乘险才能投保
  • 去银行打对账单和回执单需要拿什么
  • 资产处置损益影响损益吗
  • 小规模纳税人附加税怎么算
  • 普惠性幼儿园是什么意思
  • 计提折旧是哪个月的
  • 预付账款的账务处理视频教程
  • 事业单位劳务派遣工能长期干下去吗
  • 抵账房买卖流程
  • 生产过程中的不良品怎么处理
  • 发票已到货未到会计分录
  • 产品质量的保证需要哪几方面的支持
  • 现金退回没原始凭证咋办
  • 个体工商户个税怎么申报
  • 清卡流程图
  • 本年利润的计算顺序为
  • 往来是啥意思
  • 期间费用是啥
  • 房产预售什么时候开始
  • 填写记账凭证内容摘要的三个要素
  • mysql存储引擎的作用
  • sql server字段
  • 无光驱是不是放不了光盘
  • xp系统禁用网络连接
  • 重装win7系统后桌面没东西
  • 升级安装windows并保留文件
  • 苹果电脑装win7键盘无法使用
  • 笔记本w8系统怎么取消开机密码
  • xp如何更新
  • youphone.exe是什么
  • win8鼠标指针不见了
  • win8如何安装
  • android.system.suspend@1.0-service耗电
  • js 列表
  • android遇到的难题,怎么解决的
  • unity3d从入门到精通
  • css checked
  • android颜色代码表
  • Git && GitHub 之远程协作
  • js设计原则
  • python中redis的用法
  • javascript高级教程pdf
  • js拖动效果
  • 小规模纳税人的开票
  • 铁路检察院和普检哪个好
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设