JS运算符2019-08-18(2)

算数运算符

JavaScript 共提供10个算术运算符
  • 加法运算符:x + y
  • 减法运算符:x - y
  • 乘法运算符: x * y
  • 除法运算符:x / y
  • 指数运算符:x ** y
  • 余数运算符:x % y
  • 自增运算符:++x 或者x++
  • 自减运算符:--x或者x--
  • 数值运算符:+x
  • 负数值运算符:-x
加法运算符

1、求两个数值的和

1 + 1 // 2

2、非数值的相加

true + true // 2
//两个布尔值相加,布尔值会自动转化为数值然后再相加
1 + true // 2

3、两个字符串相加

'a' + 'bc' // "abc"

这时加法运算符会变成连接运算符,返回一个新的字符串,将两个原字符串连接在一起。

4、字符串和非字符串相加

1 + 'a' // "1a"
false + 'a' // "falsea"

这时非字符串会转成字符串,再连接在一起。

  • 加法运算符是在运行时决定,到底是执行相加,还是执行连接。运算子的不同,导致了不同的语法行为,这种现象称为“重载”(overload)

  • 由于从左到右的运算次序,字符串的位置不同会导致不同的结果。

'3' + 4 + 5 // "345"
3 + 4 + '5' // "75"

-减法、除法和乘法运算符,都是将字符串自动转为数值,然后再运算。

5、对象的相加

  • 如果运算子是对象,必须先转成原始类型的值,然后再相加。
var obj = { p: 1 };
obj + 2 // "[object Object]2"
//对象obj转成原始类型的值是[object Object],再加2就得到了上面的结果。


余数运算符
  • 余数运算符(%)返回前一个运算子被后一个运算子除,所得的余数。
12 % 5 // 2
  • 需要注意的是,运算结果的正负号由第一个运算子的正负号决定。
-1 % 2 // -1
1 % -2 // 1
  • 自增和自减运算符有一个需要注意的地方,就是放在变量之后,会先返回变量操作前的值,再进行自增/自减操作;放在变量之前,会先进行自增/自减操作,再返回变量操作后的值。
var x = 1;
var y = 1;

x++ // 1
++y // 2


数值运算符,负数值运算符
  • 数值运算符(+),只需要一个操作数,可以将任何值转为数值(与Number函数的作用相同)。
+true // 1
+[] // 0
+{} // NaN
  • 负数值运算符(-),得到的值正负相反,连用两个负数值运算符,等同于数值运算符。
var x = 1;
-x // -1
-(-x) // 1
  • 数值运算符号和负数值运算符,都会返回一个新的值,而不会改变原始变量的值


指数运算符
  • 指数运算符(**)完成指数运算,前一个运算子是底数,后一个运算子是指数。
2 ** 4 // 16
  • 多个指数运算符连用时,先进行最右边的计算。


比较运算符

JavaScript 一共提供了8个比较运算符。

  • >大于运算符
  • <小于运算符
  • <=小于或等于运算符
  • >= 大于或等于运算符
  • == 相等运算符
  • ===严格相等运算符
  • != 不相等运算符
  • !== 严格不相等运算符
  • 比较运算符可以比较各种类型的值,不仅仅是数值。
  • 八个比较运算符分成两类:
    1、相等比较
    2、非相等比较:
    非相等比较算法是先看两个运算子是否都是字符串,如果是的,就按照字典顺序比较(实际上是比较 Unicode 码点);否则,将两个运算子都转成数值,再比较数值的大小。


布尔运算符

  • 布尔运算符用于将表达式转为布尔值,一共包含四个运算符:

1、取反运算符:!

  • 用于将布尔值变为相反值,即true变成falsefalse变成true
  • 对于非布尔值,取反运算符会将其转为布尔值
  • 以下六个值取反后为true,其他值都为false:
    undefined
    null
    false
    0
    NaN
    空字符串('')
  • 不管什么类型的值,经过取反运算后,都变成了布尔值。

2、且运算符:&&

  • 且运算符(&&)往往用于多个表达式的求值
  • 运算规则是:如果第一个运算子的布尔值为true,则返回第二个运算子的(注意是值,不是布尔值);如果第一个运算子的布尔值为false,则直接返回第一个运算子的值,且不再对第二个运算子求值。
't' && '' // ""
't' && 'f' // "f"
't' && (1 + 2) // 3
'' && 'f' // ""
'' && '' // ""
  • 且运算符可以多个连用,这时返回第一个布尔值为false的表达式的值。如果所有表达式的布尔值都为true,则返回最后一个表达式的值。
true && 'foo' && '' && 4 && 'foo' && true
// ''
//第一个为布尔值为false的表达式是第三个表达式,所以返回''
1 && 2 && 3
// 3
//所有表达式都为true,所以返回最后一个表达式 3

3、或运算符:||

  • 或运算符(||)用于多个表达式的求值
  • 运算规则是:如果第一个运算子的布尔值为true,则返回第一个运算子的值,且不再对第二个运算子求值;如果第一个运算子的布尔值为false,则返回第二个运算子的值。
't' || '' // "t"
't' || 'f' // "t"
'' || 'f' // "f"
'' || '' // ""
  • 或运算符可以多个连用,这时返回第一个布尔值为true的表达式的值。如果所有表达式都为false,则返回最后一个表达式的值
false || 0 || '' || 4 || 'foo' || true
// 4

false || 0 || ''
// ''

4、三元运算符:?:

  • 三元条件运算符由问号(?)和冒号(:)组成,分隔三个表达式
  • 是 JavaScript 语言唯一一个需要三个运算子的运算符
  • 如果第一个表达式的布尔值为true,则返回第二个表达式的值,否则返回第三个表达式的值。
't' ? 'hello' : 'world' // "hello"
//t的布尔值为true,返回第二个表达式的值
0 ? 'hello' : 'world' // "world"
//0 的布尔值为false,返回第三个表达式的值
  • 三元条件表达式与if...else语句具有同样表达效果。但if...else是语句,没有返回值,而三元条件表达式是一个表达式,具有返回值

  • 在需要返回值的场合,只能使用三元条件表达式,而不能使用if..else。例如:

console.log(true ? 'T' : 'F');

上面代码中,console.log方法的参数必须是一个表达式,这时就只能使用三元条件表达式。如果要用if...else语句,就必须改变整个代码写法了。


二进制位运算符
  • 二进制位运算符用于直接对二进制位进行计算,一共有7个
    1.png

    此图来自
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    徵羽kid阅读 667评论 0 0
  • 算术运算符 JavaScript 共提供10个算术运算符,用来完成基本的算术运算。 加法运算符:x + y 减法运...
    guyigg阅读 1,165评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,219评论 0 4
  • 标签: 我的笔记 ---学习资料:http://javascript.ruanyifeng.com/ 1. 导论 ...
    暗夜的怒吼阅读 803评论 0 1
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,739评论 2 9