成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js-數(shù)據(jù)運(yùn)算

sf190404 / 2463人閱讀

摘要:跳過第二個(gè)運(yùn)算子的機(jī)制,被稱為短路有些程序員喜歡用它取代結(jié)構(gòu)等價(jià)于運(yùn)算符可以多個(gè)連用返回第一個(gè)布爾值為的表達(dá)式的值。

一、運(yùn)算符概述 1、定義

JavaScript中運(yùn)算符主要用于連接簡(jiǎn)單表達(dá)式,組成一個(gè)復(fù)雜的表達(dá)式

2、運(yùn)算符類別

算數(shù)運(yùn)算符

賦值表達(dá)式

比較表達(dá)式

布爾運(yùn)算符

位運(yùn)算符

二、算數(shù)運(yùn)算符 1、加法運(yùn)算符(Addition):x + y

加法運(yùn)算符是在運(yùn)行時(shí)決定,到底是執(zhí)行相加,還是執(zhí)行連接。也就是說,運(yùn)算子的不同,導(dǎo)致了不同的語法行為,這種現(xiàn)象稱為“重載”(overload)

(1)、在兩個(gè)操作數(shù)都是數(shù)字的時(shí)候,會(huì)做加法運(yùn)算

console.log(2+4);//6

(2)、兩個(gè)參數(shù)都是字符串或在有一個(gè)參數(shù)是字符串的情況下,會(huì)把另外一個(gè)參數(shù)轉(zhuǎn)換為字符串做字符串拼接

console.log("2"+"4");//"24"
"3" + 4 + 5 // "345"
3 + 4 + "5" // "75"

(3)、在參數(shù)有對(duì)象的情況

3.1首先自動(dòng)調(diào)用對(duì)象的valueOf方法

一般來說,對(duì)象的valueOf方法總是返回對(duì)象自身,,也可自定義

3.2再自動(dòng)調(diào)用對(duì)象的toString方法,將其轉(zhuǎn)為字符串(如果valueOf方法直接返回一個(gè)原始類型的值,就不會(huì)調(diào)用tostring

對(duì)象的toString方法默認(rèn)返回[object Object],也可自定義

var obj = { p: 1 };
obj + 2 // "[object Object]2"

3.3自定義valueOf方法或toString方法,得到想要的結(jié)果

var obj = {
  valueOf: function () {
    return 1;
  }
};

obj + 2 // 3
var obj = {
  toString: function () {
    return "hello";
  }
};

obj + 2 // "hello2"

3.4 Date對(duì)象特例

如果運(yùn)算子是一個(gè)Date對(duì)象的實(shí)例,那么會(huì)優(yōu)先執(zhí)行toString方法。

var obj = new Date();
obj.valueOf = function () { return 1 };
obj.toString = function () { return "hello" };

obj + 2 // "hello2"

(4)、在只有一個(gè)字符串參數(shù)和+號(hào)的時(shí)候會(huì)嘗試將其轉(zhuǎn)換為數(shù)字,轉(zhuǎn)換失敗輸出NaN

console.log(+"4");//4 
+"ffffdffffd"
NaN
2、其他算術(shù)運(yùn)算符

對(duì)于其他運(yùn)算符,在運(yùn)算前都強(qiáng)制轉(zhuǎn)換數(shù)字,再運(yùn)算。對(duì)象就調(diào)用valueOf或者toString,如果不能轉(zhuǎn)換的,輸出NaN
減法運(yùn)算符(Subtraction): x - y
乘法運(yùn)算符(Multiplication): x * y
除法運(yùn)算符(Division):x / y
余數(shù)運(yùn)算符(Remainder):x % y
自增運(yùn)算符(Increment):++x(先加后賦值) 或者 x++(先賦值后加)
自減運(yùn)算符(Decrement):--x 或者 x--
求負(fù)運(yùn)算符(Negate):-x
數(shù)值運(yùn)算符(Convert to number): +x

三、賦值運(yùn)算符

賦值運(yùn)算符用于給變量賦值,最常見的賦值運(yùn)算符,當(dāng)然就是等號(hào),表達(dá)式x=y表示將y賦值給x。除此之外,JavaScript還提供其他11個(gè)賦值運(yùn)算符。

運(yùn)算時(shí)從右到左,如var z=y=x;

x += y // 等同于 x = x + y
x -= y // 等同于 x = x - y
x *= y // 等同于 x = x * y
x /= y // 等同于 x = x / y
x %= y // 等同于 x = x % y
x >>= y // 等同于 x = x >> y
x <<= y // 等同于 x = x << y
x >>>= y // 等同于 x = x >>> y
x &= y // 等同于 x = x & y
x |= y // 等同于 x = x | y
x ^= y // 等同于 x = x ^ y
四、比較運(yùn)算符

比較運(yùn)算符比較兩個(gè)值,然后返回一個(gè)布爾值,表示是否滿足比較條件。
JavaScript提供了8個(gè)比較運(yùn)算符。

1、 == 比較兩個(gè)值是否相等

相等運(yùn)算符(==)會(huì)將它們轉(zhuǎn)換成同一個(gè)類型,再用嚴(yán)格相等運(yùn)算符進(jìn)行比較。

2、=== 嚴(yán)格相等,比較它們是否為同一個(gè)值(數(shù)據(jù)類型也要相同)
內(nèi)容較多,多帶帶寫了一篇文章去說相等和嚴(yán)格相等

3、!=不相等

4、!== 嚴(yán)格不相等
它的算法就是先求嚴(yán)格相等運(yùn)算符的結(jié)果,然后返回相反值。

5、其他比較運(yùn)算符(< 小于 <= 小于或等于 > 大于 >= 大于或等于)

5.1同為字符串按照Unicode 順序進(jìn)行比較
首先比較首字符的 Unicode 碼點(diǎn),如果相等,再比較第二個(gè)字符的 Unicode 碼點(diǎn),以此類推
5.2不全為字符串的比較,分成以下兩種情況
1)原始類型值(數(shù)值、字符串、布爾值)

如果兩個(gè)運(yùn)算子都是原始類型的值,則是先轉(zhuǎn)成數(shù)值再比較

5 > "4" // true
// 等同于 5 > Number("4")
// 即 5 > 4

true > false // true
// 等同于 Number(true) > Number(false)
// 即 1 > 0

2 > true // true
// 等同于 2 > Number(true)
// 即 2 > 1

2)有一方或者雙方為對(duì)象的比較
調(diào)用valueOf方法和toString方法,轉(zhuǎn)為原始類型的值,再進(jìn)行比較

var x = [2];
x > "11" // true
// 等同于 [2].valueOf().toString() > "11"
// 即 "2" > "11"
{ x: 2 } >= { x: 1 } // true
// 等同于 { x: 2 }.valueOf().toString() >= { x: 1 }.valueOf().toString()
// 即 "[object Object]" >= "[object Object]"
五、布爾運(yùn)算符 1、! 取反運(yùn)算符

對(duì)數(shù)據(jù)取反,得到的都是布爾值!

2、&& 且運(yùn)算符

1)用途:且運(yùn)算符(&&)往往用于多個(gè)表達(dá)式的求值。

2) 運(yùn)算規(guī)則是:如果第一個(gè)運(yùn)算子的布爾值為true,則返回第二個(gè)運(yùn)算子的值(注意是值,不是布爾值);如果第一個(gè)運(yùn)算子的布爾值為false,則直接返回第一個(gè)運(yùn)算子的值,且不再對(duì)第二個(gè)運(yùn)算子求值。

var x = 1;
(1 - 1) && ( x += 1) // 0
x // 1

3)跳過第二個(gè)運(yùn)算子的機(jī)制,被稱為“短路”,有些程序員喜歡用它取代if結(jié)構(gòu)

if (i) {
  doSomething();
}

// 等價(jià)于

i && doSomething();

4)運(yùn)算符可以多個(gè)連用
返回第一個(gè)布爾值為false的表達(dá)式的值。如果所有表達(dá)式的布爾值都為true,則返回最后一個(gè)表達(dá)式的值。

true && "foo" && "" && 4 && "foo" && true
// ""

1 && 2 && 3
// 3
3、|| 或運(yùn)算符

1)運(yùn)算規(guī)則:
如果第一個(gè)運(yùn)算子的布爾值為true,則返回第一個(gè)運(yùn)算子的值,且不再對(duì)第二個(gè)運(yùn)算子求值;如果第一個(gè)運(yùn)算子的布爾值為false,則返回第二個(gè)運(yùn)算子的值

"t" || "f" // "t"
"" || "f" // "f"

2)或運(yùn)算符可以多個(gè)連用
這時(shí)返回第一個(gè)布爾值為true的表達(dá)式的值。如果所有表達(dá)式都為false,則返回最后一個(gè)表達(dá)式的值。

false || 0 || "" || 4 || "foo" || true
// 4

false || 0 || ""
// ""
4、condition? true case : false case 三元條件運(yùn)算符

1)簡(jiǎn)介:三元條件運(yùn)算符由問號(hào)(?)和冒號(hào)(:)組成,分隔三個(gè)表達(dá)式。
2)規(guī)則:如果第一個(gè)表達(dá)式的布爾值為true,則返回第二個(gè)表達(dá)式的值,否則返回第三個(gè)表達(dá)式的值。

console.log(true ? "T" : "F");
六、位運(yùn)算符

就是把兩個(gè)做位運(yùn)算的值,都按照二進(jìn)制一位一位的按照符號(hào)規(guī)則進(jìn)行運(yùn)算
位運(yùn)算符只對(duì)整數(shù)起作用,如果一個(gè)運(yùn)算子不是整數(shù),會(huì)自動(dòng)轉(zhuǎn)為整數(shù)后再執(zhí)行

1、或運(yùn)算(or):
符號(hào)為|,表示兩個(gè)二進(jìn)制位中有一個(gè)為1,則結(jié)果為1,否則為0。
0000 0010 | 0000 0001 就等0000 0011(3)

2、與運(yùn)算(and):
符號(hào)為&,表示兩個(gè)二進(jìn)制位都為1,則結(jié)果為1,否則為0。
0000 0010 & 0000 0001 就等0000 0000(0)

3、否運(yùn)算(not):
符號(hào)為~,表示將一個(gè)二進(jìn)制位變成相反值。
~ 0000 0010 就等于1111 1101
4、異或運(yùn)算(xor):
符號(hào)為?,表示兩個(gè)二進(jìn)制位中有且僅有一個(gè)為1時(shí),結(jié)果為1,否則為0。

5、左移運(yùn)算(left shift):符號(hào)為<<

1(數(shù)值)<<1(左移的位數(shù)) //2
1<<2 //4
1<<3 //8

6、右移運(yùn)算(right shift):符號(hào)為>>

8>>1 //4

7、帶符號(hào)位的右移運(yùn)算(zero filled right shift):符號(hào)為>>>

七、其他運(yùn)算符 1、()小括號(hào)

圓括號(hào)是一種運(yùn)算符,它有兩種用法:
1)如果把表達(dá)式放在圓括號(hào)之中,作用是求值
2)如果跟在函數(shù)的后面,作用是調(diào)用函數(shù)。

2、逗號(hào)運(yùn)算符

逗號(hào)運(yùn)算符用于對(duì)兩個(gè)表達(dá)式求值,并返回后一個(gè)表達(dá)式的值。

var x = 0;
var y = (x++, 10);
x // 1
y // 10
八、運(yùn)算符的優(yōu)先級(jí)

運(yùn)算符的優(yōu)先級(jí),建議還是查看mdn。全部記住很難,簡(jiǎn)單理一下順序,加深直覺(不準(zhǔn)確喲)
自增 > 邏輯非>typeof > 加減乘除 > 判斷大?。?<=) >邏輯運(yùn)算(與或)>三元條件運(yùn)算符 >賦值 >,

1、typeof的優(yōu)先級(jí)相當(dāng)?shù)母?/strong>,比加減乘除神馬的都高,所以雖然是操作符,在在復(fù)雜表達(dá)式的時(shí)候我們還是習(xí)慣加括號(hào),看個(gè)例子

 typeof 2*3;//NaN
 typeof (2*3);//"number"
 typeof 2+3;// "number3"

2、 ++、--是右結(jié)合的操作符(優(yōu)先級(jí)最高的幾個(gè)都是右結(jié)合),而且比加減乘除優(yōu)先級(jí)高。同時(shí)自增、自減運(yùn)算符的運(yùn)算數(shù)得是左值(可以放在賦值符號(hào)左邊的值),而不能是常數(shù)

 var a=0,b=0;
 a+++b;//0
 a;//1,a++優(yōu)先級(jí)比++b高,所以相當(dāng)于(a++)+b
 b;//0

3、賦值運(yùn)算符的優(yōu)先級(jí)相當(dāng)?shù)牡?/strong>

 a = b == c; //等同于a = (b==c)

4、邏輯非!也在優(yōu)先級(jí)隊(duì)列的前端,比加減乘除高,但邏輯與、邏輯或優(yōu)先級(jí)很低,不如加減乘除

 !2*0; //0, 等價(jià)于(!2)*0

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108649.html

相關(guān)文章

  • JS的{} + {}與{} + []的結(jié)果是什么?

    摘要:對(duì)于與的設(shè)計(jì)在中所設(shè)計(jì)的純對(duì)象類型的與方法,它們的返回如下方法返回值對(duì)象本身。與三個(gè)強(qiáng)制轉(zhuǎn)換函數(shù),所對(duì)應(yīng)的就是在標(biāo)準(zhǔn)中的三個(gè)內(nèi)部運(yùn)算轉(zhuǎn)換的對(duì)照表。 在JS中的運(yùn)算符共同的情況中,(+)符號(hào)是很常見的一種,它有以下的使用情況: 數(shù)字的加法運(yùn)算,二元運(yùn)算 字符串的連接運(yùn)算,二元運(yùn)算,最高優(yōu)先 正號(hào),一元運(yùn)算,可延伸為強(qiáng)制轉(zhuǎn)換其他類型的運(yùn)算元為數(shù)字類型 當(dāng)然,如果考慮多個(gè)符號(hào)一起使用時(shí),...

    2json 評(píng)論0 收藏0
  • js溫故而知新——學(xué)習(xí)廖雪峰的js教程

    摘要:在設(shè)計(jì)時(shí),有兩種比較運(yùn)算符第一種是比較,它會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型再比較,很多時(shí)候,會(huì)得到非常詭異的結(jié)果第二種是比較,它不會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型,如果數(shù)據(jù)類型不一致,返回,如果一致,再比較。 數(shù)據(jù)類型和變量 數(shù)據(jù)類型計(jì)算機(jī)顧名思義就是可以做數(shù)學(xué)計(jì)算的機(jī)器,因此,計(jì)算機(jī)程序理所當(dāng)然地可以處理各種數(shù)值。但是,計(jì)算機(jī)能處理的遠(yuǎn)不止數(shù)值,還可以處理文本、圖形、音頻、視頻、網(wǎng)頁等各種各樣的數(shù)據(jù),不同的數(shù)據(jù)...

    taohonghui 評(píng)論0 收藏0
  • JS中的關(guān)系比較與相等比較運(yùn)算

    摘要:在中的關(guān)系比較運(yùn)算,指的是像這種大小值的關(guān)系比較。而相等比較,可區(qū)分為標(biāo)準(zhǔn)相等比較與嚴(yán)格相等比較兩大種類。 在JS中的關(guān)系比較(Relational Comparison)運(yùn)算,指的是像x < y這種大小值的關(guān)系比較。 而相等比較,可區(qū)分為標(biāo)準(zhǔn)相等(standard equality)比較x == y與嚴(yán)格相等(strict equality)比較x === y兩大種類。嚴(yán)格相等比較會(huì)...

    paraller 評(píng)論0 收藏0
  • 理解JS中的加號(hào)運(yùn)算

    摘要:中的基本數(shù)據(jù)類型有種,引用數(shù)據(jù)類型則是指除了上述基本數(shù)據(jù)類型以外的所有值,比如隱式類型轉(zhuǎn)換加法的隱式轉(zhuǎn)換轉(zhuǎn)換為原始值當(dāng)需要轉(zhuǎn)換為原始值時(shí),引擎內(nèi)部會(huì)進(jìn)行抽象操作。 showImg(https://segmentfault.com/img/bVbqjVM); 基本運(yùn)算規(guī)則 +的使用有兩種情況 當(dāng)+連接兩個(gè)變量或值時(shí)即為二元運(yùn)算符,比如a + b,當(dāng)+在變量或值前面時(shí),則為一元運(yùn)算符,比...

    nodejh 評(píng)論0 收藏0
  • JavaScript入門

    摘要:介紹編程數(shù)據(jù)結(jié)構(gòu),算法,內(nèi)存分配表單驗(yàn)證需要一門語言可以直接運(yùn)行在瀏覽器中,來完成表單驗(yàn)證的功能。 Javascript介紹編程(數(shù)據(jù)結(jié)構(gòu),算法,內(nèi)存分配)表單驗(yàn)證 需要一門語言可以直接運(yùn)行在瀏覽器中,來完成表單驗(yàn)證的功能。 瀏覽器廠商 網(wǎng)景 firefox js 標(biāo)準(zhǔn) js解釋器 IE js js解釋器 google js j...

    wangdai 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

sf190404

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<