JavaScript運(yùn)算

1. 算術(shù)運(yùn)算符

+

-

*

/

%

算術(shù)優(yōu)先級(jí) * / % 優(yōu)先級(jí)要高于 + - 無(wú)論是 + - * / % 都是左結(jié)合性(從左至右計(jì)算)

var num1 = 10;
var num2 = 20;
var res1 = num1 + num2;
console.log(res1); // 30
var res2 = num1 - num2;
console.log(res2); // -10
var res3 = num1 * num2;
console.log(res3); // 200
var res4 = num2 / num1;
console.log(res4); // 2
var res5 = num2 % num1;
console.log(res5); // 0
1.1 加法運(yùn)算的注意點(diǎn)
  • 任何非數(shù)值類(lèi)型的數(shù)據(jù)在參與加法運(yùn)算之前,都會(huì)被轉(zhuǎn)成數(shù)值類(lèi)型,再參與運(yùn)算

    var num1 = 1;
    // 先把true轉(zhuǎn)換成數(shù)值類(lèi)型,轉(zhuǎn)成1
    var num2 = true;
    // 計(jì)算 1 + 1  
    var res1 = num1 + num2
    console.log(res1); // 2 
    
    // null 轉(zhuǎn)換成數(shù)值類(lèi)型0
    var res2 = 1 + null;
    console.log(res2); // 1 
    
  • 任何數(shù)據(jù)和NaN進(jìn)行運(yùn)算,結(jié)果都是NaN

    // undefined 轉(zhuǎn)換成數(shù)值類(lèi)型 NaN
    var res3 = 1 + undefined;
    console.log(res3); // NaN
    
    // 字符串轉(zhuǎn)換成數(shù)值類(lèi)型 NaN
    var res4 = 1 + Number("abc");
    console.log(res4); // NaN
    
  • 任何數(shù)據(jù)和字符串類(lèi)型相加,都會(huì)被先轉(zhuǎn)換成字符串之后再運(yùn)算

    // 加法運(yùn)算只要有字符串類(lèi)型都是字符串的拼接
    var res5 = 1 + "abc";
    console.log(res5); // 1abc
    
1.2 減法運(yùn)算注意點(diǎn)
  • 任何非數(shù)值類(lèi)型的數(shù)據(jù)在參與減法運(yùn)算之前,都會(huì)被自動(dòng)轉(zhuǎn)換成數(shù)值類(lèi)型之后再參與運(yùn)算

    var res1 = 1 - true;
    console.log(res1); // 0
    
    var res2 = 1 - null;
    console.log(res2); //1
    
  • 任何數(shù)據(jù)和NaN進(jìn)行運(yùn)算,結(jié)果都是NaN

    var res3 = 1 - undefined;
    console.log(res3); // NaN
    
    var res5 = 1 - 'abc';
    console.log(res5); // NaN
    
  • 任何數(shù)據(jù)和字符串相減,都會(huì)把字符串轉(zhuǎn)換成數(shù)值類(lèi)型之后再運(yùn)算

    var res4 = 1 - '12';
    console.log(res4); // -11
    
1.3 乘法注意點(diǎn)
  • 和減法運(yùn)算的注意點(diǎn)一模一樣
var res1 = 1 * true;
console.log(res1); // 1

var res2 = 1 * null;
console.log(res2); // 0

var res3 = 1 * undefined;
console.log(res3); // NaN

var res4 = 1 * '12';
console.log(res4); // 12

var res5 = 1 * 'abc';
console.log(res5); // NaN
1.4 取模(取余)運(yùn)算注意點(diǎn)

格式: m % n = 余數(shù)

  • 如果m>n的, 那么就正常取余

    var res1 = 10 % 3;
    console.log(res1); // 1
    
  • 如果m<n的, 那么結(jié)果就是m

    var res2 = 3 % 4;
    console.log(res2); // 3
    
  • 如果n是0, 那么結(jié)果就是NaN

    var res3 = 10 % 0;
    console.log(res3); // NaN
    
  • 取余運(yùn)算結(jié)果的正負(fù)性, 取決于m而不是n

    var res4 = 10 % -2;
    console.log(res4); // 0
    
    var res5 = -10 % 2;
    console.log(res5); // -0
    
    var res6 = -10 % -2;
    console.log(res6); // -0
    

2. 賦值運(yùn)算符

賦值運(yùn)算符就是將等號(hào)右邊的值存儲(chǔ)到等號(hào)左邊的變量中

2.1 賦值運(yùn)算符

=+=加等于贬墩、-=減等于媳危、*=乘等于惠勒、/=除等于止状、%=模等于

// = 
// 把5賦值給res這個(gè)變量
var res = 5;

// 加等于
var number = 3;
// 會(huì)將等號(hào)左邊存儲(chǔ)的值取出來(lái)和右邊進(jìn)行指定的運(yùn)算, 運(yùn)算完畢之后再將運(yùn)算的結(jié)果存儲(chǔ)到左邊
// number += 2 相當(dāng)于 number = number + 2 那么就是 number = 3 + 2
// -=币励、*=、/=、%=恳守、也是一樣的步驟
number += 2;
console.log(number); // 5
2.2 賦值運(yùn)算的優(yōu)先級(jí)和結(jié)合性
  • 賦值運(yùn)算優(yōu)先級(jí)低于算術(shù)運(yùn)算

    // 由于算術(shù)運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符,所以先計(jì)算1+1然后把結(jié)果賦值給res1這個(gè)變量
    var res1 = 1 + 1
    console.log(res1); // 2
    
  • 賦值運(yùn)算符的結(jié)合性是右結(jié)合性(從右至左的計(jì)算)

// 由于賦值運(yùn)算符的結(jié)合性是右結(jié)合性,所以將會(huì)把5賦值給num2然后再將num2中的值賦給num1
var num1, num2;
num1 = num2 = 5;
console.log(num1); // 5
console.log(num2); // 5
  • 賦值運(yùn)算符的左邊只能放變量贩虾,不能放常量

3. 自增自減運(yùn)算符

3.1 自增運(yùn)算符 ++

可以快速的對(duì)一個(gè)變量中保存的數(shù)據(jù)進(jìn)行+1的操作

var num1 = 2;
//num1 = num1 + 1
// num1 += 1; ===>  num1 = num1 + 1;
// num++; ===> num1 = num1 + 1;
++num1
console.log(num1); // 3
3.2 自減運(yùn)算符 --

可以快速的對(duì)一個(gè)變量中保存的數(shù)據(jù)進(jìn)行-1的操作

let num2 = 2;
// num2 = num2 - 1;
// num2 -= 1; ===> num2 = num2 - 1
// num2--; ===> num2 = num2 - 1
--num2;
console.log(num2); // 1
3.3 自增自減寫(xiě)在變量前面和后面的區(qū)別
  • 自增自減寫(xiě)在變量的前面催烘,表示變量先自增或自減,然后再參與其他運(yùn)算
  • 自增自減寫(xiě)在變量的后面缎罢,表示變量先進(jìn)行運(yùn)算伊群,然后再自增或自減
// 寫(xiě)在變量的后面
var num = 1;
// 這里拆解成這樣 var res = 1 + 1; num++; 
var res = num++ + 1;
console.log(res); // 2
console.log(num); // 2

// 寫(xiě)在變量的前面
var num = 1;
// 這里拆解成這樣  ++num; var res = 2 + 1;
var res = ++num + 1;
console.log(res); // 3
console.log(num); // 2

// 在企業(yè)開(kāi)發(fā)中不推薦這樣寫(xiě)法 var res = a++ + b; // var res = a + b; a++;
var a = 5;
var b = 10;
var res = a + b;
a++;
console.log(res); // 15
console.log(a); // 6

4. 關(guān)系運(yùn)算符

> 大于

< 小于

>= 大于等于

<= 小于等于

== 等于

!== 不等于

=== 全等于

!== 不全等于

關(guān)系運(yùn)算符只有兩個(gè)返回值,truefasle

關(guān)系成立策精,返回 true

關(guān)系不成立舰始,返回 false

console.log(1 > 2); // false
console.log(5 > 2); // true
console.log(1 == 1); // true

關(guān)系運(yùn)算符的注意點(diǎn)

  • 如果是非數(shù)值類(lèi)型比較,那么會(huì)先轉(zhuǎn)換成數(shù)值類(lèi)型再比較

    console.log(1 > false); // true
    console.log(1 > true); // false
    console.log(1 > undefined); // false
    console.log(1 > null); // true
    console.log(1 > ''); // true
    console.log(1 > ' '); // true
    console.log(1 > 'a'); //flase
    
  • 對(duì)于關(guān)系運(yùn)算符來(lái)說(shuō)咽袜,任何數(shù)據(jù)和 NaN 比較都是 false

    console.log(1 > NaN); // false
    console.log(undefined == NaN); // false
    console.log(null == NaN); // false
    console.log('a' > NaN); // false
    console.log(true == NaN); // false
    //如果想判斷某一個(gè)數(shù)據(jù)是否是NaN那么可以通過(guò)isNaN來(lái)進(jìn)行判斷
    let num = NaN;
    let res = isNaN(num)
    console.log(res); // true
    
  • 如果是兩邊都是字符串類(lèi)型丸卷,那么不會(huì)轉(zhuǎn)換成數(shù)值類(lèi)型,而是比較字符串相對(duì)應(yīng)的Unicode編碼

    console.log('a' > 'b'); // false
    console.log('a' < 'b'); // true
    // 如果字符串中有多個(gè)字符, 會(huì)從左至右的依次比較, 直到條件不滿(mǎn)足為止
    console.log( "ab" > "ac"); // false
    
  • ===!== 會(huì)比較值和數(shù)據(jù)類(lèi)型是否相等 ==!= 只會(huì)比較值

    console.log("123" == 123); // true
    console.log("123" != 123); // false
    console.log("123" === 123); // false
    console.log("123" !== 123); // true
    
  • 關(guān)系運(yùn)算符都是左結(jié)合性(從左往右運(yùn)算)

    // 因?yàn)殛P(guān)系運(yùn)算符是左結(jié)合性 所以會(huì)先運(yùn)算 10 > 3 返回 true  再計(jì)算 1 > 2  最后的結(jié)果為false
    console.log(10 > 3 >2);
    // STEP1  10 < 25 返回true  STEP2 運(yùn)算 1 < 20  結(jié)果為true
    console.log(10 < 25 < 20);
    
  • 關(guān)系運(yùn)算符中 > 大于询刹、< 小于谜嫉、>= 大于等于、<= 小于等于的優(yōu)先級(jí)大于 ==凹联、!=沐兰、===!==

    // 先會(huì)計(jì)算 10 > 3  返回 true  再計(jì)算 1 == 5  最后結(jié)果返回false
    console.log(10 > 3 == 5);
    // 先會(huì)計(jì)算 10 > 0  返回 true 再計(jì)算 10 == 1  最后結(jié)果false
    console.log(10 == 10 > 0);
    

5. 邏輯運(yùn)算符

邏輯運(yùn)算符往往用于多個(gè)表達(dá)式的求值蔽挠。

5.1 邏輯與(&&

格式: 條件表達(dá)式A && 條件表達(dá)式B

返回值: true/false

特點(diǎn):如果有一個(gè)條件表達(dá)式為假則為假

// true && false 結(jié)果為false
console.log((10 > 5) && (1 > 2)); // false
console.log(true && true); // true
console.log(true && false); // false
console.log(false && false); // false
5.2 邏輯或(||

格式: 條件表達(dá)式A && 條件表達(dá)式B

返回值: true/false

特點(diǎn):如果有一個(gè)條件表達(dá)式為真則為真

// true || false 結(jié)果為true
console.log((10 > 5) || (1 > 2)); // true
console.log(true || true); // true
console.log(true || false); // true
console.log(false || false); // false
5.3 邏輯非(!

格式: 住闯!條件表達(dá)式

返回值: true/false

特點(diǎn):真變假,假變真

// 非true 就是 false
console.log( !true ); // false
// 先計(jì)算括號(hào)里的 1 > 2 返回 false 取反 變?yōu)?true
console.log( !(1 > 2) ); // true
5.4 邏輯運(yùn)算符的優(yōu)先級(jí)和結(jié)合性

邏輯運(yùn)算符的結(jié)合性是左結(jié)合性

邏輯與的優(yōu)先級(jí)大于邏輯或

// 左結(jié)合性就是從左往右運(yùn)算 就計(jì)算 true && false 結(jié)果為 false
var res = true  && false;
console.log(res); // false
// 賦值運(yùn)算就是右結(jié)合性 先運(yùn)算 1 + 1 返回把結(jié)果賦值給 res 這個(gè)變量
var total = 1 + 1
console.log(total); // 2
5.5 邏輯運(yùn)算符的注意點(diǎn)
  • 在邏輯與運(yùn)算中, 如果參與運(yùn)算的不是布爾類(lèi)型, 返回值有一個(gè)特點(diǎn)

    如果條件A不成立, 那么就返回條件A

    如果條件A成立, 無(wú)論條件B是否成立, 都會(huì)返回條件B

    // 條件A為flase 那么就會(huì)返回條件A 值為0
    console.log(0 && 123); // 0
    // 條件A為true 那么條件B 不論真假都會(huì)返回B
    console.log(1 && 123); // 123
    
  • 在邏輯或運(yùn)算中, 如果參與運(yùn)算的不是布爾類(lèi)型, 返回值有一個(gè)特點(diǎn)

    如果條件A成立, 那么就返回條件A

    如果條件A不成立, 無(wú)論條件B是否成立, 都會(huì)返回條件B

    // 條件A為flase 那么就會(huì)返回條件B 值為123
    console.log(0 || 123); // 123
    // 條件A為true 那么條件B 不論真假都會(huì)返回A 值為1
    console.log(1 || 123); // 1
    

6. 三元(目)運(yùn)算符

三元運(yùn)算符格式:條件表達(dá)式 ? 返回結(jié)果A : 返回結(jié)果B

在三元運(yùn)算符中如果條件表達(dá)式為真澳淑,那么返回結(jié)果A

在三元表達(dá)式中如果條件表達(dá)式為假比原,那么返回結(jié)果B

// 10 > 6 返回 true 返回條件A Hello
console.log(10 > 6 ? 'Hello' : 'World'); // Hello 
// 5 > 6 返回 false 返回條件B World
console.log(5 > 6 ? 'Hello' : 'World'); // World
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市杠巡,隨后出現(xiàn)的幾起案子春寿,更是在濱河造成了極大的恐慌,老刑警劉巖忽孽,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绑改,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兄一,警方通過(guò)查閱死者的電腦和手機(jī)厘线,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)出革,“玉大人造壮,你說(shuō)我怎么就攤上這事。” “怎么了耳璧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵成箫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我旨枯,道長(zhǎng)蹬昌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任攀隔,我火速辦了婚禮皂贩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昆汹。我一直安慰自己明刷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布满粗。 她就那樣靜靜地躺著辈末,像睡著了一般。 火紅的嫁衣襯著肌膚如雪映皆。 梳的紋絲不亂的頭發(fā)上本冲,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音劫扒,去河邊找鬼檬洞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沟饥,可吹牛的內(nèi)容都是我干的添怔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼贤旷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼广料!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起幼驶,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤艾杏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后盅藻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體购桑,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年氏淑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勃蜘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡假残,死狀恐怖缭贡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤阳惹,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布谍失,位于F島的核電站,受9級(jí)特大地震影響莹汤,放射性物質(zhì)發(fā)生泄漏快鱼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一体啰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗽仪,春花似錦荒勇、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至窿凤,卻和暖如春仅偎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雳殊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工橘沥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人夯秃。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓座咆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親仓洼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子介陶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 運(yùn)算符基本概念 JavaScript運(yùn)算符的概念和C語(yǔ)言一樣, 都是告訴程序執(zhí)行特定算術(shù)或邏輯操作的符號(hào)。 運(yùn)算符...
    極客江南閱讀 2,227評(píng)論 0 19
  • 01javascript語(yǔ)法規(guī)范 <!DOCTYPE html> javascript語(yǔ)法...
    ouyangqinbin閱讀 1,302評(píng)論 0 0
  • 算術(shù)運(yùn)算符 和C語(yǔ)言不同的是JavaScript中整數(shù)除以整數(shù)結(jié)果是小數(shù) 任何值和NaN運(yùn)算, 得到的結(jié)果都是Na...
    籮篼閱讀 327評(píng)論 0 0
  • JS基本數(shù)據(jù)類(lèi)型及變量聲明在js中有三種聲明變量的方式:var let const,let var const的區(qū)...
    web佳閱讀 902評(píng)論 1 8
  • 2016年的春節(jié)假期終于過(guò)去了色建。丙申年開(kāi)始了哺呜。猴年。C記FY16上半年的業(yè)績(jī)不錯(cuò)箕戳。大家的心情也不錯(cuò)某残。今年,ACI有...
    taoza閱讀 202評(píng)論 0 0