运算子算是比较繁杂的部分,需要多些耐心来理解与记忆,没办法用一个简明的观念来一以贯之。
四则运算也就是加减乘除,一边数字的加减乘除就像小学可本上教的一样,由左而右,先乘除後加减。
在这个部分要注意的是:
正常情况下,当+加号两边都是数字,或者都是字串的情况下:
var x = 1 + 2;
console.log(x); //3
var y = '欧阳锋是' + '一只癞哈蟆';
console.log(y); //欧阳锋是一只癞哈蟆
在不同型别的状况下:
//数字与字串相加
77 + '49' //'7749'
77 + '四十九' //'77四十九'
//字串与字串相加
'七七' + '四十九' //'七七四十九'
77 + {} //'77[object object]'
//当数字要跟undefined相加的时候,udefined会被尝试转为数字,也就是NaN,还记得NaN的型别是number吗?
77 + unfined //NaN
'七七' + unfined //'七七undefined'
//当数字要与null相加时,null会被转成数字 0 ;
77 + null //77
'七七' + null //77null
还要注意一些特别的数字:Infinity、-Infinity以及NaN。
Infinity + Infinity //Infinity
-Infinity + -Infinity //-Infinity
Infinity + -Infinity //NaN
NaN与任何数字相加都是NaN
77 + NaN //NaN
Infinity + NaN //NaN
-Infinity + NaN //NaN
'七七' + NaN //'七七NaN'
如果是一般数字的四则运算,就是我们熟悉的算法。
如果遇到数字与基本型别相减,则基本型别的值会被转为数字
49 - '36' //13
//字串会被转为数字,也就是NaN
49 - 'abc' //NaN
//布林值的true,会被转行为数字 1
49 - true //48
//布林值的false,会被转行为数字 0
49 - false //49
49 - undefined //NaN
//unll会转为数字0
49 - null //49
如果减号的一侧是物件型别的话,则会透过物件的valueOf()转为对应的数字,如果得到NaN,那相减的结果就是NaN。
49 - {} //NaN
如果是一般数字的相乘,那就按照四则运算规则,有左而右计算。
如果其中一侧不是数字,那就按照Number()转为数字再进行计算,如果无法转为数字,则为NaN。
如果其中一个数字为NaN,那计算出来的结果也是NaN。
49 * '10' //490
49 * '四十九' //NaN
49 * true // 49
49 * false //0
49 * {} //NaN
JS的除法规则与乘法一样,但是有以下特殊情形:
四则运算 | 数字 | 基本型别非数字 | 物件 |
---|---|---|---|
减法 | 正常运算 | Number()方法转为数字 | 透过valueOf()转为数字 |
乘法 | 正常运算 | Number()方法转为数字 | Number()方法转为数字 |
除法 | 正常运算 | Number()方法转为数字 | Number()方法转为数字 |
加法 | 正常运算 | 如果是number、boolean透过toString()方法转为字串,null或undefined透过String()转为字串 | toString()转为字串 |
正号(+)与负号(-)用来表示一个数值是正数或是负数。
如果正号(+)与负号(-)後面跟的不是一个数字,则会透过Number()方法将之转型为数字,再由前面的正号(+)与负号(-)判断其数值。
var a = +49;
var b = -49;
var c = '+72';
var d = '-72';
var e = '天下无狗';
console.log(a); //49
console.log(b); //-49
console.log(+c); //72
console.log(-c); //-72
console.log(+d); //-72
console.log(-d); //72
console.log(-e) //NaN
如果是物件型别则使用valueOf()方法求得对应的值,再用正号(+)与负号(-)来判断其数值,如果求得的值是NaN,那结果就是NaN。
当变数遇上++,表示该变数加1;如果变数遇上 - -,则代表该变数减1。
++在前面表示「运算前+1」;++在数字後面表示「运算後+1」。
—在前面代表「运算前-1」;- -在数字後方表示「运算後-1」。
var x = 49;
var y = 49;
console.log(x++); //49
console.log(++y); //50
console.log(x); //50
console.log(y); //50
将+ +放在变数x後面,console.log(x++)会传回「原始的数值」。将++放在变数x前方,console.log(++x)会回传「+1」的结果。
「+1」是在开团购吗?那我「++」。
比较运算子用来比较两侧的数值,比较之後得到布林值 true 或 false。
一个等号 =,我们知道是「指定、赋值」的意思。
var x = 49;
在JavaScript中,「= =」是相等的意思,而「===」是全等的意思。
var x = 49; //数字
var y = '49'; //字串
console.log(x == y);
//true,因为 == 在比较两侧的变数是否相等的时候,会自动帮变数转型。
true == '1'; //true
false == '0'; //true
true === '1'; //false
false === '0'; //false
使用「==」相等的时候,会自动替两侧的变数转型。
当使用「===」全等的时候,不会替变数自动转型,是比较严谨的模式,也是比较推荐使用的方法。
比较特别的是,NaN不等於NaN,不管是 == 还是===,都是一样 NaN不等於NaN。
==的自动转型规则:
不等於! = 与 ! ==
「! =」与「! ==」两者都是不等於,但是「! =」会替变数做自动转型,而「! ==」不会替变数自动转型,推荐使用「! ==」。
使用 room 来建立Database abstract class AppDatabase: Ro...
资料扩增 我们组的资料扩增这部分,因为第一次比赛,这个方法效果没有到非常好,采取的是用mask的方式...
在写网页样式时,最重要的就是选择器的使用,写得好容易理解,修改没烦恼,也可以让网页快速呈现效果。以下...
.一个政策是管理层意图正式表示要纠正或影响实体的行为。安全政策是执行CIA的政策;它们是安全要求的来...
前言 今天是铁人赛的第二十四天,24、25、26这三篇都是ON档,後面的 27、28、29 已经写完...