在編程語言當(dāng)中抚太,運(yùn)算符是處理數(shù)據(jù)的基本方法塘幅,能夠根據(jù)現(xiàn)有的值得到新的值。
運(yùn)算符也叫操作符尿贫,通過運(yùn)算符可以對一個或多個值進(jìn)行運(yùn)算电媳,并獲取運(yùn)算結(jié)果。比如:typeof就是運(yùn)算符庆亡,可以來獲得一個值的類型匾乓。
在JavaScript
當(dāng)中,存在下列的運(yùn)算符又谋。
- 賦值運(yùn)算符
- 比較運(yùn)算符
- 算數(shù)運(yùn)算符
- 位運(yùn)算符
- 邏輯運(yùn)算符
- 字符串運(yùn)算符
- 條件(三元)運(yùn)算符
- 逗號運(yùn)算符
- 一元運(yùn)算符
- 關(guān)系運(yùn)算符
賦值運(yùn)算符
賦值運(yùn)算符(assignment operator)基于右值(right operand)的值拼缝,給左值(left operand)賦值娱局。
在之前的內(nèi)容中,我們通過下面的寫法來創(chuàng)建變量咧七。
var a = 10;
上面我們通過=
來將右邊的10
存儲到左邊的變量a身上衰齐。而這種操作,我們在編程當(dāng)中稱之為賦值
继阻。
而=
也就是賦值運(yùn)算符
耻涛。也可以使用鏈?zhǔn)劫x值。
var a = b = c = 15;
console.log(a,b,c);//15,15,15
順序是從右向左的進(jìn)行賦值操作瘟檩。
下面的列表中包含全部的賦值運(yùn)算符
抹缕。
- 賦值
x = y
- 加賦值
x += y
- 減賦值
x -= y
- 乘賦值
x *= y
- 除賦值
x /= y
- 模賦值
x %= y
- 指數(shù)賦值
x **= y
- 左移賦值
x <<= y
- 右移賦值
x >>= y
- 無符號右移賦值
x >>>= y
- 按位與賦值
x &= y
- 按位異或賦值
x ^= y
- 按位或賦值
x |= y
賦值
簡單的賦值運(yùn)算符,把一個值賦給一個變量芒帕。為了把一個值賦給多個變量歉嗓,可以以鏈?zhǔn)绞褂觅x值運(yùn)算符。
加賦值
加賦值運(yùn)算符把一個右值與一個變量
相加背蟆,然后把相加的結(jié)果賦給該變量鉴分。兩個操作數(shù)的類型決定了加賦值運(yùn)算符的行為。算術(shù)相加或字符串連接都有可能带膀。
例如:
var x = 10;
var y = 20;
x += y;
console.log(x);
// 相當(dāng)于
x = x + y;
減賦值
減賦值運(yùn)算符使一個變量減去右值志珍,然后把結(jié)果賦給該變量。
例如:
var x = 10;
var y = 20;
x -= y;
console.log(x); // -10
// 相當(dāng)于
x = x - y;
乘賦值
乘賦值運(yùn)算符使一個變量乘以右值垛叨,然后把相成的結(jié)果賦給該變量伦糯。
例如:
var x = 10;
var y = 20;
x *= y;
console.log(x); // 200
// 相當(dāng)于
x = x * y;
除賦值
除賦值運(yùn)算符使一個變量除以右值,然后把結(jié)果賦給該變量嗽元。
例如:
var a = 10;
var b = 20;
a /= b;
console.log(a);
// 相當(dāng)于
a = a / b;
模賦值
模賦值運(yùn)算符使一個變量除以右值敛纲,然后把余數(shù)交給該變量。
var a = 10;
var b = 20;
a %= b;
console.log(a);
//等同于
a = a % b;
指數(shù)賦值
指數(shù)賦值運(yùn)算符使一個變量為底數(shù)剂癌、以右值為指數(shù)的指數(shù)運(yùn)算(乘方)結(jié)果賦給該變量淤翔。
例如:
var x = 2;
var y = 3;
x **= y;
console.log(x); // 8
// 相當(dāng)于
x = x ** y
比較運(yùn)算符
比較運(yùn)算符包括下列內(nèi)容:
- 等于
==
如果兩邊操作數(shù)相等時返回true。 - 不等于
!=
如果兩邊操作數(shù)不相等時返回true - 全等
===
兩邊操作數(shù)相等且類型相同時返回true佩谷。 - 不全等
!==
兩邊操作數(shù)不相等或類型不同時返回true旁壮。 - 大于
>
左邊的操作數(shù)大于右邊的操作數(shù)返回true - 大于等于
>=
左邊的操作數(shù)大于或等于右邊的操作數(shù)返回true - 小于
<
左邊的操作數(shù)小于右邊的操作數(shù)返回true - 小于等于
<=
左邊的操作數(shù)小于或等于右邊的操作數(shù)返回true
=>
并不是一個運(yùn)算符,而是箭頭函數(shù)谐檀。
/*
下面是比較運(yùn)算符的示例:
*/
// == 相等運(yùn)算符
console.log(10 == 10); // true
console.log(20 == "20"); // true
// 抡谐!= 不等運(yùn)算符
console.log(3 != 2); // true
console.log(2 != "hello"); // true
// === 全等
console.log(3 === 3); // true
console.log(3 === "3"); // false 值雖然相等,但是類型不相等桐猬。
// !== 不全等
console.log(3 !== "3"); // true
console.log(3 !== 2); // true
// > 大于
console.log(3 > 2); // true
console.log("3" > "4"); // false
// < 小于
console.log(2 < 1); // false
console.log(3 < 4); // true
// >= 大于等于
// <= 小于等于
console.log(2 >= 1); // true
console.log(2 >= 2); // true
console.log(3 <= 3); // true
console.log(3 <= 4); // true
關(guān)系操作符
關(guān)系操作符對操作數(shù)進(jìn)行比較麦撵,根據(jù)比較結(jié)果真或假,返回相應(yīng)的布爾值。
算數(shù)運(yùn)算符
當(dāng)對非Number類型
的值進(jìn)行運(yùn)算時厦坛,會將這些值轉(zhuǎn)化為Nunber然后再運(yùn)算(字符串除外)五垮,任何值和NaN
做運(yùn)算都得NaN
;
在js
當(dāng)中,除了提供基礎(chǔ)的+
,-
,*
,/
以外杜秸,還提供了一些其他的運(yùn)算符,下面是所有的算術(shù)運(yùn)算符:
-
+
加法運(yùn)算+ 可以對兩個值進(jìn)行加法運(yùn)算润绎,并將結(jié)果返回撬碟,
如果對兩個字符串進(jìn)行加法運(yùn)算,都會先轉(zhuǎn)化為字符串莉撇,并返回呢蛤,任何的值和字符串做加法運(yùn)算,都會先轉(zhuǎn)化為字符串棍郎,然后在和字符串做拼串的操作 -
-
減法運(yùn)算 -
*
乘法運(yùn)算 -
/
除法運(yùn)算 -
%
求余運(yùn)算(求模運(yùn)算) -
+
一元正值符 -
-
一元負(fù)值符 -
++
自增運(yùn)算 -
--
自減運(yùn)算 -
**
指數(shù)運(yùn)算符
例子:
/*
下面是一些算數(shù)運(yùn)算符的案例:
*/
var a,b;
a = 10;
b = 3;
console.log(a + b); // 13
console.log(a - b); // 7
console.log(a * b); // 30
console.log(a / b); // 3.3333333333333335
console.log(a % b); // 1
console.log(++a); // 11 自增|自減符號在前其障,則先運(yùn)算,在使用值
console.log(a++); // 11 自增|自減符號在后涂佃,則先使用值励翼,在運(yùn)算
console.log(a); // 12 // 上面a++后a由11變成了12
// 指數(shù)運(yùn)算符
var f = 2;
var x = 3;
console.log(f ** x); // 8 相當(dāng)于2 的 3 次冪
自增和自減
-
++
自增運(yùn)算
通過自增可以使變量在自身的基礎(chǔ)上增加1,
自增分兩種:后++(a++)和前++(++a);
a++的值等于原變量的值(自增前的值)辜荠;
++a的值等于原變量的新值(自增后的值)汽抚;
var a = 10;
console.log(a++); // 10
console.log(++a); // 11
-
--
自減運(yùn)算:自減和自增同理
邏輯運(yùn)算符
邏輯運(yùn)算符常用于布爾(邏輯)值之間; 當(dāng)操作數(shù)都是布爾值時,返回值也是布爾值伯病。 不過實(shí)際上&&
和||
返回的是一個特定的操作數(shù)的值造烁,所以當(dāng)它用于非布爾值的時候,返回值就可能是非布爾值午笛。
下面是邏輯運(yùn)算符:
- 邏輯與
(&&)
- 邏輯或
(||)
- 邏輯非
(!)
邏輯與:
邏輯與&&
運(yùn)算符又稱為且運(yùn)算符
惭蟋,往往用于多個表達(dá)式之間的求值。
它的運(yùn)算規(guī)則是:如果第一個運(yùn)算子的布爾值為true
药磺,則返回第二個運(yùn)算子的值(注意是值告组,不是布爾值);如果第一個運(yùn)算子的布爾值為false
与涡,則直接返回第一個運(yùn)算子的值惹谐,且不再對第二個運(yùn)算子求值。
語法:
exrp1 && exrp2;
邏輯或:
邏輯或||
運(yùn)算符又稱為或運(yùn)算符
驼卖,同樣用于在多個表達(dá)式之間求值氨肌。
它的運(yùn)算規(guī)則是:如果第一個運(yùn)算子的布爾值為true
,則返回第一個運(yùn)算子的值酌畜,且不再對第二個運(yùn)算子求值怎囚;如果第一個運(yùn)算子的布爾值為false
,則返回第二個運(yùn)算子的值。
語法:
exrp1 || exrp2
例如:
// 邏輯與
// 當(dāng)運(yùn)算符的前后都為條件語句的時候恳守,當(dāng)條件同時為true考婴,則返回true,否則返回false
var a = 1;
var b = 2;
console.log(a > 0 && b > a); //true 第一個條件判斷為true催烘,第二個條件判斷為true沥阱,那么整體返回true
console.log(a > b && b > 1); // false 第一個條件判斷為false,第二個條件判斷為true伊群,整體返回false
console.log(a > 0 && b > 2); // false 第一個條件為true考杉,第二個條件為false,整體返回false
//
console.log("dog" && "cat"); // cat 當(dāng)運(yùn)算符的前后是一個直接量的時候舰始,如果運(yùn)算符前后都為true崇棠,則返回第二個直接量
// 邏輯或
console.log(a > b || b > a); //true 其中只要有一個條件成立,那么就會返回true
console.log(a > 2 || b > 2); // false 兩個條件都不成立丸卷,所以返回fasle
// 第一個條件如果成立枕稀,那么就不會去讀取后面的條件
console.log(a > 0 || b > 2); // true
在上面的兩個邏輯運(yùn)算符的使用過程中,容易造成短路效果
谜嫉。
-
false
&& anything // 被短路求值為false -
true
|| anything // 被短路求值為true
在上面的短路代碼中萎坷,anything部分不會被求值,也就意味著不會對代碼產(chǎn)生任何的影響骄恶。
邏輯與運(yùn)算符和邏輯或的連用:
邏輯與運(yùn)算符可以多個連用食铐,這時返回第一個布爾值為false
的表達(dá)式的值。如果所有表達(dá)式的布爾值都為true
僧鲁,則返回最后一個表達(dá)式的值虐呻。
true && 'foo' && '' && 4 && 'foo' && true
// ''
1 && 2 && 3
// 3
上面代碼中,例一里面寞秃,第一個布爾值為false
的表達(dá)式為第三個表達(dá)式斟叼,所以得到一個空字符串。例二里面春寿,所有表達(dá)式的布爾值都是true
朗涩,所有返回最后一個表達(dá)式的值3
。
運(yùn)算符可以多個連用绑改,這時返回第一個布爾值為true
的表達(dá)式的值谢床。如果所有表達(dá)式都為false
,則返回最后一個表達(dá)式的值厘线。
false || 0 || '' || 4 || 'foo' || true
// 4
false || 0 || ''
// ''
上面代碼中识腿,例一里面,第一個布爾值為true
的表達(dá)式是第四個表達(dá)式造壮,所以得到數(shù)值4渡讼。例二里面,所有表達(dá)式的布爾值都為false
,所以返回最后一個表達(dá)式的值成箫。
邏輯或運(yùn)算符
通常情況下用于給一個變量設(shè)置默認(rèn)值展箱。
var a = username || "zhangsan";
邏輯非:
邏輯非(!)
運(yùn)算符又叫取反運(yùn)算符
,就是取一個值的反值蹬昌。主要用于將一個布爾值變?yōu)橄喾粗祷斐邸<?code>true變?yōu)?code>false,false
變?yōu)?code>true。
如果使用取反運(yùn)算符的值不是一個布爾值凳厢,那么取反運(yùn)算符就會將其變?yōu)橐粋€布爾值账胧,然后再取反。
下面的六個值使用取反運(yùn)算符取反后都為true
先紫,其他都為false
。
undefined
null
false
0
NaN
- 空字符串
('')
!undefined // true
!null // true
!0 // true
!NaN // true
!"" // true
!54 // false
!'hello' // false
![] // false
!{} // false
不管什么類型的值筹煮,經(jīng)過取反運(yùn)算后都會變成布爾值遮精。
如果對一個值連續(xù)做兩次的取反運(yùn)算,等于將其轉(zhuǎn)換為對應(yīng)的布爾值败潦,與
Boolean
函數(shù)的作用相同本冲。這是一種較為常見的類型轉(zhuǎn)換的方法。例如:
var a = "hello"; console.log(!!a); // true
字符串運(yùn)算符
字符串運(yùn)算符
指的是+
劫扒,通過加號檬洞,我們可以對兩個字符串進(jìn)行拼接從而返回一個新的字符串。
var a = "hello,";
var b = "world!";
console.log(a + b); // hello,world!
也可以采用簡寫的形式來拼接字符串沟饥。
var str = "hello,";
var str += "world!";
console.log(str); // hello,world!
我們也可以在使用的過程中進(jìn)行數(shù)據(jù)的拼接添怔。
var sayHello = "hello,my name is ";
console.log(sayHello + "zhangsan");// hello,my name is zhangsan
條件運(yùn)算符
條件運(yùn)算符
也稱之為三元運(yùn)算符
。
條件運(yùn)算符是JavaScript中唯一需要三個操作數(shù)的運(yùn)算符贤旷。運(yùn)算的結(jié)果根據(jù)給定條件在兩個值中取其一广料。語法為:
條件 ? 值1 : 值2
如果條件
為真,則結(jié)果取值1
幼驶。否則為值2
艾杏。你能夠在任何允許使用標(biāo)準(zhǔn)運(yùn)算符的地方使用條件運(yùn)算符。
var status = (age >= 18) ? "adult" : "minor";
當(dāng) age
大于等于18的時候盅藻,將“adult”賦值給status
购桑;否則將“minor”賦值給 status
。
逗號運(yùn)算符
逗號操作符(,)對兩個操作數(shù)進(jìn)行求值并返回最終操作數(shù)的值氏淑。它常常用在 for 循環(huán)中勃蜘,在每次循環(huán)時對多個變量進(jìn)行更新。
當(dāng)然夸政,我們在console.log()
的過程中元旬,如果輸出多個值,也會用到逗號運(yùn)算符。
console.log("hello","world");
一元運(yùn)算符
-
+
一元正值符 -
-
一元負(fù)值符
// 一元正值符匀归,如果操作數(shù)不是Number坑资,則會先將操作數(shù)轉(zhuǎn)換為Number,然后在運(yùn)算穆端,原理和Nunber()函數(shù)
var c = "3";
console.log(+c,typeof +c); // 3 number
// 一元負(fù)值負(fù)袱贮,將一個值變?yōu)樨?fù)數(shù)
var d = 3;
console.log(-d); // -3
var e = '3';
console.log(-e,typeof -e); //-3 number 也起到了轉(zhuǎn)換的效果
console.log(-3 === -e); // true
一元操作符()
一元操作符僅對應(yīng)一個操作數(shù)。
常用的一元操作符有如下幾個:
- delete
- typeof
- void
delete
主要用于刪除對象當(dāng)中的某個元素体啰。
void
主要用于表明一個運(yùn)算沒有返回值攒巍。
例如:
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
delete trees[3]; // 刪除數(shù)組當(dāng)中的一個元素
<a href="javascript:void(0)">Click here to do nothing</a> // 用戶點(diǎn)擊這個鏈接不會有任何效果
上面的demo中的兩個運(yùn)算符,我們暫時還沒有用到荒勇,所以可以先放在這柒莉,后面再來理解。
至于typeof
運(yùn)算符沽翔,主要用來查看數(shù)據(jù)的類型兢孝,將獲取的數(shù)據(jù)類型以一個字符串的形式展示出來。
var a = "hello,world!";
console.log(typeof a); // "string"
var b = 13;
console.log(typeof (b)); // "number"
在上面的demo中仅偎,我們發(fā)現(xiàn)typeof
有兩種使用方式跨蟹。運(yùn)算符后面的括號可以選擇省略或者不省略。
案例:
console.log(typeof "hello,world"); // "string"
console.log(typeof 10); // "number"
console.log(typeof true); // "boolean"
console.log(typeof false); // "boolean"
console.log(typeof null); // "object"
console.log(typeof undefined); // "undefined"
// 查看typeof返回的數(shù)據(jù)的類型
console.log(typeof typeof(10)); // "string"
in
in
:用來遍歷對象橘沥,in右操作數(shù)必須是一個對象值窗轩。例如,你可以指定使用String構(gòu)造函數(shù)創(chuàng)建的字符串座咆,但不能指定字符串文字痢艺;
var color1 = new String("green");
"length" in color1 // 返回true
var color2 = "coral";
"length" in color2 // 報錯(color2不是對象)
instanceof
-
instanceof
:用來判斷對象的構(gòu)造函數(shù)。
運(yùn)算符優(yōu)先級
運(yùn)算符的優(yōu)先級箫措,用于確定一個表達(dá)式的計(jì)算順序腹备。在你不能確定優(yōu)先級時,可以通過使用括號顯式聲明運(yùn)算符的優(yōu)先級斤蔓。
下表列出了描述符的優(yōu)先級植酥,從最高到最低。
Operator type | Individual operators | ||
---|---|---|---|
member | . [] |
||
call / create instance | () new |
||
negation/increment | ! ~ - + ++ -- typeof void delete |
||
multiply/divide | * / % |
||
addition/subtraction | + - |
||
bitwise shift | << >> >>> |
||
relational | < <= > >= in instanceof |
||
equality | == != === !== |
||
bitwise-and | & |
||
bitwise-xor | ^ |
||
bitwise-or | ` | ` | |
logical-and | && |
||
logical-or | ` | ` | |
conditional | ?: |
||
assignment | `= += -= *= /= %= <<= >>= >>>= &= ^= | =` | |
comma | , |
小練習(xí):
1弦牡、為抵抗洪水友驮,戰(zhàn)士連續(xù)作戰(zhàn)89小時,編程計(jì)算共多少天零多少小時驾锰?
var sum_hour = 89;
var day = parseInt(89 / 24);
var hour = 89 % 24 ;
console.log("共計(jì)用了" + day + "天" + hour + "小時");
2卸留、小明要到美國旅游,可是那里的溫度是以華氏度為單位記錄的椭豫。
它需要一個程序?qū)⑷A氏溫度(80度)轉(zhuǎn)換為攝氏度耻瑟,并以華氏度和攝氏度為單位分別顯示該溫度旨指。
提示:攝氏度與羋氏度的轉(zhuǎn)換公式為:攝氏度 = 5/9.0*(華氏度-32)保留3位小數(shù)
var a_temperature = 80;
var local_c = ( 5 / 9.0 * ( a_temperature - 32) ) .toFixed(3);
console.log("當(dāng)前的溫度是:"+local_c+"攝氏度");
3、計(jì)算兩個文本框內(nèi)數(shù)字的和
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>兩個文本框內(nèi)的和</title>
</head>
<body>
<input type="text" name="v1" placeholder="請輸入第一個數(shù)值" id="v1"> +
<input type="text" name="v2" placeholder="請輸入第二個數(shù)值" id="v2"> =
<input type="text" name="add_v" value="當(dāng)前的數(shù)值之和是:" id="add_v">
<button onclick="add()">點(diǎn)擊計(jì)算</button>
</body>
<script>
function add(){
// 獲取三個輸入框元素
var v1,v2,v3;
v1 = document.getElementById("v1");
v2 = document.getElementById("v2");
v3 = document.getElementById("add_v");
var add = Number(v1.value) + Number(v2.value);
v3.value = "當(dāng)前的數(shù)值之和是:" + add;
}
</script>
</html>
3喳整、計(jì)算 var k=0; console.log(k++ + ++k +k +k++);
結(jié)果是6
谆构。