JavaScript 运算子

运算子是函数

运算子事实上就是一种函数,有赋值运算子,比较运算子,算术运算子,位元运算子, 逻辑运算子, 字串运算子, 条件运算子等种类。像是 +(加), -(减), * (乘), /(除) , =(赋值) , !=(不等於) 还有好多好多运算子,它们都是函数。
就拿 +(加) 这个运算子当例子好了,你可以想像成这样的函数:

function + (a,b){
//返回a与b的和
}

如果我们想要3加上5的结果就要呼叫 + 这个函数,但是如果像下面每次执行加法都如此实在太麻烦了!

+(3,5)

而是用中缀表示法:
3 + 5
中缀表示法的意思是, 将你的函数名称写在两个参数中间。
前缀後缀也如此类推,
前缀表示法:
+3 5

後缀表示法:
3 5+


运算子的优先性与相依性

  • 优先性:决定运算子的优先权,在不同种运算子间判断哪个运算子先做。
    EX: *(乘) 的优先性高於 +(加), 所以``3 + 6 * 4``` 就是3 + 24 ,得到27。

  • 相依性:决定运算方向是由左而右,还是由右向左。
    (你可以这样想:如果有多个优先权相同的运算子就可以判断从哪里先做)
    EX:

var a = 8 ;
var b= 5;
a = b = 7; // a 会是7

因为 = (赋值) 这个运算子的相依性是由右往左,b先被赋值为7,因为b是7,由右往左,a再被b赋值为7。

下面这个网站可以查看运算子的优先权,数字愈大愈优先。

MDN Operator precedence

如图:最上面的运算子优先分数为21分,执行时优先权比它下面的20分的运算子们先做
https://ithelp.ithome.com.tw/upload/images/20210919/20135414kWOuz0X35p.png


注意运算子做运算有时也会强制型转(Coercion)

这是JavaScript动态型别的一个特徵,不过有时候会有bug
EX:

var a= 1 + '2'
//12 
// 隐含的强制转型成string 型别 ,想了解更多强制型转可以参考下面文章列

因为1被强制型转为 '1'

还有

7 < 4 < 1 
//true

为甚麽是true呢?
因为 < (小於)这个运算是由左至右执行,7 < 4 会返回false,而这个false会被强制型转成0,
继续往右运算, 0 < 1,就会返回true,这是JavaScript的世界啊!懂了规则就觉得好像没那麽奇怪了。

但是强制型转还是有bug
EX:

Number(true);      // 1
Number(false);     // 0
Number(null);      // 0
Number(undefined); // NaN

虽然null与false被转成数值都是0,但是如果用===(完全相等)
EX:

null === false //false

所以还是有点难懂www

你为什麽不问问神奇 JavaScript 呢?系列 第 8 篇
你懂 JavaScript 吗?#8 强制转型(Coercion)
运算式与运算子


<<:  【D5】取得厨房钥匙:下载凭证

>>:  第十四天:初探 Build Scan

Hello World: 编译环境建立

前两天猴子先偷偷把之前编完的执行档拿来验证, 今天来把 Cross Compiler 的部分补完。 ...

30天轻松学会unity自制游戏-制作敌人

暂定为手机游戏,那就让基本子弹自动射击(手机操控不意,让玩家只做简易核心的操作就好) ,先把上一篇制...

System Design: 读书心得4

Elasticsearch/Solr/ELK Stash Caveat of using Elast...

[iT铁人赛Day15]JAVA更多的回圈

今天要来介绍的也是回圈 一个更好用的多重选择-switch叙述 当程序有较多的叙述,有较多的选择时,...

Day11 - Gem-rqrcode 或 barby 产 QR Code

前言 本篇会示范如何在 Ruby on Rails 中产 QR Code,可透过 rqrcode 或...