JavaScript中的十种操作符
- ① 一元操作符(参与的只有一个变量)
- 前置递增递减(语句解析到递增/递减时值就被改变了)
- 后置递增递减(整个语句执行后值再改变)
- 递增递减也可用于字符串,布尔值,对象等,结果都将是数值;
var num3= -- num1+num2; //20 语句执行前已经递减
var num4= num1+num2; //20 递减后
var num5= num1-- +num2; //20 语句执行后再递减
var num6= num1+num2; //19 上一句语句执行后已递减
- 一元加减操作
- 一元加减操作符应用于其他类型数据时,该操作符会像Number()一样先将其转换为数值再执行加减
- ② 加性操作符
- 加性和减性操作符主要是转换过程比较复杂,分很多情况;
- 加性操作符中:
- 如果两个操作数都是数值,则按照正常的数值计算(跟NaN有关的结果依然是NaN ,正负Infinity相加结果也是NaN)
- 如果操作数中都是布尔或数值是转换成数值再进行计算
- 如果两个操作符中有一个是字符串,则转换成字符串再进行连接;
- 对象会调用toString()得到字符串;再进行连接
var str= '10';
console.log (num01+ num02+str);//1010 运算优先级,加性操作原则
- 减性操作符中:
- 跟加性差不多,只不过当操作数不都是数值时,会调用Number()函数将其转换为数值,而对象优先调用valueOf()得到数值,不行再toString();
- ③ 布尔操作符
- ! 非:该操作符会首先将值转换为布尔类型,再求反。因此常用的转布尔值就是用两个!!;
- && 与
- 短路操作,已有结果就不会再执行后面的了
- 只有两个操作数同时为true时结果才为true;只要有false结果就为false
- 若第一个操作数是对象,则返回第二个操作数;
- 若第二个操作数是对象,只有当第一个操作数求值结果为true时才会返回该对象;
- 若有一个操作数为null,undefined,NaN,则返回null,undefined,NaN;
- || 或
- 短路操作,已有结果就不会再执行后面的了
- 只要有一个true结果就为true;
- 如果两个操作数都是对象,则返回第一个(第一个操作数求值为true则返回第一个)
- 如果第一个操作数求值为false,则返回第二个;
- 若有一个操作数为null,undefined,NaN,则返回null,undefined,NaN;
- var obj=preferObj || backUpObj,当preferObj不为null时,将被赋值给obj,为空则赋backUpObj
- ④ 相等操作符
- 相等操作符会转换操作数类型然后在进行比较,而全等不会,全等保持操作数原来的数类型;复杂对象比较的是引用地址;
- NaN与任何数不等,null==undefined 返回true;
- 布尔值会被转换成数值再进行判断;
- 如果是一个字符串和数值进行比较,字符串会被转换成数值;
- 如果有一个对象,那么这个对象会调用valueOf()转换成基本类型再进行比较;
- ⑤ 关系操作符
- <、 <=、 >、 >=均返回布尔值;
- 两个字符串是比较字符编码值(大写字母编码值小于小写字母),
- 对象是先调用valueOf()或者toString()得到基本类型再进行比较,
- 其他的都会被转换成数值再执行比较;数值优先,任何数跟NaN比较,结果都是false;
- ⑥ 条件操作符
- var variable=boolean_expression ? num1 : num2; true则返回前面的num1,false则返回后面的true;
- ⑦ 乘性操作符
- * , / ,%三种运算,其中模运算是取余数;
- 首先转换成数值在进行操作, 如果一个操作数是 NaN那么结果也为NaN,0/0也是NaN
- ⑧ 位操作符
- 位操作符用于最基本层次的计算,二进制;32位左边第一位是符号位,用于表示正负的;
- 操作数会转换为数字再进行操作,转换的数字会自动舍去小数部分;NaN和Infinity会被当做0 来操作;
- 按位非 ~:
var num02=~ num01; //11111111111111111111111111100110
console. log(num02); //-26
- 作为了解吧:按位与 & :操作数的二进制中,32的每一位上对应如果都是1则返回1,其他返回0,这样返回的一个32位二进制结果;按位或 | : 则是都是0则返回0,其他返回0;按位异或 ^ :相同则返回0,不同则1;
- 左移 << 二进制32位中,向左移动,移动后右边空出的以0填充;左移不影响正负符号;
- 有符号右移 >> 向右移动,移动数值左边、符号位右边空出的以符号位的数字来填充;
- 无符号右移 >>> 正数有无符号结果相同;对负数来说,其表示方法是用的补码,这样左边空出来的依然用0填充后就会非常大
- ⑨ 逗号操作符
- 声明多个变量之间用逗号连接
- ⑨ 赋值操作符
JavaScript中的十种操作符的更多相关文章
- 为什么不要在 JavaScript 中使用位操作符?
如果你的第一门编程语言不是 JavaScript,而是 C++ 或 Java,那么一开始你大概会看不惯 JavaScript 的数字类型.在 JavaScript 中的数字类型是不区分什么 Int,F ...
- javascript 中的new操作符的理解
new 操作符 在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在Javascript中,我们将这类方式成为Pseudoclassic ...
- JavaScript 中的相等操作符 ( 详解 [] == []、[] == ![]、{} == !{} )
ECMAScript 中的相等操作符由两个等于号 ( == ) 表示,如果两个操作数相等,则返回 true. 相等操作符会先转换操作数(通常称为强制转型),然后比较它们的相等性. 在转换不同的数据类型 ...
- 浅谈Javascript中的void操作符
由于JS表达式偏啰嗦,于是最近便开始采用Coffeescript来减轻负担.举个栗子,当我想取屋子里的第一条dog时,首先要判断house对象是否存在,然后再判断house.dogs是否存在,最后取h ...
- 通过例子深入理解javascript中的new操作符
1.首先看一道题目 function Cat(name,age){ this.name=name; this.age=age; } console.log(new Cat('miaomiao',18) ...
- JavaScript中的typeof操作符用法实例
在Web前端开发中,我们经常需要判断变量的数据类型.鉴于ECMAScript是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof就是负责提供这方便信息的操作符. 对一个值使用t ...
- javascript中的一元操作符
题目如下: var s1 = "01"; var s2 = "1.1"; var s3 = "z"; var b = false; var ...
- javascript中神奇的(+)加操作符
javascript是一门神奇的语言,这没神奇的语言中有一个神奇的加操作符. 常用的加操作符我们可以用来做: 加法运算,例如:alert(1+2); ==>3 字符串连接,例如:alert(“a ...
- 【转】JavaScript中的原型和继承
请在此暂时忘记之前学到的面向对象的一切知识.这里只需要考虑赛车的情况.是的,就是赛车. 最近我正在观看 24 Hours of Le Mans ,这是法国流行的一项赛事.最快的车被称为 Le Mans ...
随机推荐
- oracle--groupby分组学习
使用group by分组 在多行函数中不能直接使用普通字段,除非group by 在多行函数中不能直接使用单行函数,除非group by group by学习: ---1.使用group by进行数据 ...
- Python之字符串和正则表达式
使用正则表达式 Python对正则表达式的支持 例子:替换字符串中的不良内容 import re def main(): sentence = '你丫是傻叉吗? 我操你大爷的. Fuck you.' ...
- 什么是python??
python 是一门非常简单易学好用,同时功能强大的编程语言,具有丰富和强大的库,开发效率特别高.它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起. pyth ...
- A.Gennady and a Card Game
http://m3.codeforces.com/contest/1097/problem/A Gennady and a Card Game time limit per test 1 second ...
- [51Nod2558] 选址
link 考虑二分答案 $F$ ,那么现在的问题变成是否对于覆盖并有交集. 考虑边 $(u,v)$ ,若覆盖并在 $(u,v,w)$ 线段中,设点 $i$ 走到 $u$ 号后还能走 $F1$ , 走到 ...
- installsheild2011打包程序internal build error 6213
今天打包一个安装程序,总是出现报错,internal build error -6213,然后搜遍都没有找到什么解决方案.看到一个帖子,说是因为installsheild里面的build的时候自动扫描 ...
- postman断言
较旧的写作邮差测试风格 较旧的Postman测试编写风格依赖于特殊tests对象的设置值.您可以为对象中的元素设置描述性键,然后说明它是真还是假.例如,tests["Body contain ...
- Anaconda 安装及Python 多版本间切换
安装 Anaconda 安装anaconda 安装较为简单,这里参考官方文档:https://docs.continuum.io/anaconda/install/linux.html 在文件目录下执 ...
- CSP-S2019 赛前补题
前言 该打的比赛也打完了,每一场打得并不是很理想,所以就没写赛后总结了.最后再把每一场的比赛补一下,也算给自己一个交代吧. 牛客CSP-S提高组赛前集训营6 考试 100 + 30 + 0 = 130 ...
- home home clock
博客园添加home home clock 将下面代码复制进博客侧边栏广告即可 <div id="myTime"> <object classid="cl ...