[Day05] 运算式与运算子

运算式(Expression):最大的特性是产生一个「值」。像是在呼叫 function 时的参数(arguments),或透过 = 赋值时,在 =「右侧」都属於运算式的部分。
在运算式中如加减乘除都属於运算子的一种。 -- 008 天

接着谈谈在这章所理解的部分,因运算式有很多,所以举例较常见的 + - * / 四则运算。

加号+

当数字遇到数字是很一般的状况,但如果是数字遇到字串会发生自动转型,当加号 + 两侧其中一方为字串,加号 + 会将两者是为字串连接在一起。

100 + 123 // 这是数字加数字等於 223 
100 + "123" // "100123" 数字遇到字串转型成字串

来看看其他的型别会怎麽转

100 + undefined // NaN,undefined 被尝试转成数字变成 NaN
"100" + undefined // "100undefined"
100 + true // 101,true 转成数字值是 1
100 + false // 100,false 转成数字值是 0
"100" + false // "100false",false 被转成字串
100 + null // 100,null 被转成数字是 0

举例数字及字串混用的算式:

var num1 = 2;
var num2 = 3;

var str1 = "2 + 3 等於多少? 答:" + num1 + num2;
console.log(str1);
2 + 3 等於多少? 答:23

因为运算式的计算是由左而右先乘除後加减,所以要加上括号才会是我们想要的结果

var str1 = "2 + 3 等於多少? 答:" + (num1 + num2);
console.log(str1);
2 + 3 等於多少? 答:5

减号 -

减号跟加号转型的方式不同
当减号-两侧其中一方是基本型别但不是数字的状况会先透过Number()转成数字再做运算。来看看把加号改成减号的结果:

100 - 123 // -23 
100 - "123" // -23,"123"字串转成数字

100 - undefined // NaN,undefined 被尝试转成数字变成 NaN
"100" - undefined // NaN,都被转成数字
100 - true // 99,true 转成数字,值是 1
100 - false // 100,false 转成数字,值为 0
"100" - false // 100,"100" 跟 false 都被转成数字
100 - null // 100,null 被转成数字是 0

如果是物件型别,会透过 valueOf() 求得对应的值,如果物件没有 valueOf() 方法的话,则会透过 toString() 先转成字串,再以 Number() 尝试转成数字再运算。这边有点深,未来再补。

乘号 *、除号 / 及取余数%

这三个比较单纯,会先转为数值去计算,如果转数值变 NaN,那计算结果自然也是 NaN。

一元运算子

正号 + 与负号 -
只要透过单个数值就可以完成运算,如果在正号 + 与负号 -後面不是数字型态的值,那会透过 Number() 自动转成数字,再看正负号决定数值。来看举例:

var a = "-20"; // -20,这时候是字串 
console.log(-a); // 20,字串被转成数值 -20 与负号计算

var b = "Hello"; 
console.log(+b); // NaN,"Hello"转数字是 NaN,计算结果为 NaN

所以如果要做 Number() 数字转型的话,可以直接在变数前面加一个+号。

递增 ++ 与递减 --

a = a + 1,可写作 a++ 同理,
a = a - 1,可写作 a--。

var a = 5;
a++;
console.log(a); // 6

参考资料:
MDN 运算式与运算子
0 陷阱!0 误解!8 天重新认识 JavaScript!


<<:  Day8 阿里云架设网站-对象储存

>>:  【Day 5】Google Apps Script - 变数与函式呼叫与GS档的顺序影响

AutoCAD ActiveX #1 安装环境

VBA IDE Command:VBAIDE 需下载对应年份 VBAIDE汇入参考 执行程序 环境设...

D7. 学习基础C、C++语言

D7: if判断式 if的基本样子是: if(判断式){ 如果条件成立时要做甚麽 } else { ...

WordPress Google Search Console 安装教学 让新文章马上列入搜寻名单

新建置的 WordPress 辛苦写了几篇文章,可是这时候跟本就不会被 Google 搜寻看到我的文...

网站地图SITEMAP | 它们对於SEO有多重要?

为什麽网站地图对於SEO这麽重要呢? 什麽是网站地图XML呢? (英语:Sitemap)描述了一个网...

【Day 5】Git Submodule x Run Docker x 启用第一个萝卜服务

tags: 铁人赛 DevOps Submodule DevOps 概述 碎念时间 前面几篇大多都在...