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

資訊專欄INFORMATION COLUMN

javascript操作符知識(shí)點(diǎn)整理

JerryZou / 3565人閱讀

摘要:中的操作符的不同之處在于,它們能夠適用于很多值,例如字符串?dāng)?shù)字值布爾值甚至對(duì)象。在應(yīng)用于布爾值時(shí),先將其轉(zhuǎn)換為再執(zhí)行加減的操作。布爾值變量變?yōu)閿?shù)值變量。在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值。

前言

初學(xué)者會(huì)覺(jué)得操作符的知識(shí)很簡(jiǎn)單,但是隨著學(xué)習(xí)的深入會(huì)發(fā)現(xiàn)很多語(yǔ)句都可以用操作符來(lái)簡(jiǎn)化,所以深入理解操作符可以幫助你寫出高性能的代碼。這篇文章主要記錄不同操作符所遵循的規(guī)則。
javascript的操作符有一元操作符位操作符、布爾操作符、乘性操作符加性操作符、關(guān)系操作符、相等操作符、條件操作符賦值操作符。其中值得注意的是,一元操作符和相等操作符都有可能改變操作數(shù)的數(shù)值類型。js中的操作符的不同之處在于,它們能夠適用于很多值,例如字符串、數(shù)字值、布爾值、甚至對(duì)象。不過(guò)在應(yīng)用于對(duì)象時(shí),相應(yīng)的操作符都會(huì)調(diào)用對(duì)象的valueOf()方法或者toString()方法來(lái)轉(zhuǎn)換成可以操作的數(shù)據(jù)類型。

一元操作符

遞增操作符 ++

遞減操作符 --

正數(shù) +

負(fù)數(shù) -

遞增和遞減操作符遵循的規(guī)則.
1.在應(yīng)用于包含有效數(shù)字的字符串時(shí),先將其轉(zhuǎn)換為數(shù)字值,再執(zhí)行加減1的操作。字符串變量變成數(shù)值變量。
2.在應(yīng)用于一個(gè)不包含有效數(shù)字字符的字符串時(shí),將變量的值設(shè)置為NaN。字符串變量變成數(shù)值變量。
3.在應(yīng)用于布爾值false/true時(shí),先將其轉(zhuǎn)換為0再執(zhí)行加減1的操作。布爾值變量變?yōu)閿?shù)值變量。
4.在應(yīng)用于浮點(diǎn)數(shù)值時(shí),執(zhí)行加減1的操作。
5.在應(yīng)用于對(duì)象時(shí),先調(diào)用對(duì)象的valueOf()方法以取得一個(gè)可供操作的值,然后對(duì)該值應(yīng)用前面的四條規(guī)則。如果結(jié)果是NaN,則在調(diào)用toSring()方法后再應(yīng)用前面的規(guī)則。對(duì)象變量變成數(shù)值變量。

var num = 1;
++num;    //2

var num ="12s";
++num;    //NaN
typeof num;    //number

var num = false;
++num;    //1
typeof num;    //number
位操作符

位操作符用于最基本的層次上,我們一般比較少用到。ECMAscript中所有數(shù)值都以IEEE-754 64位格式存儲(chǔ),但是位操作符并不直接操作64位的值,而是先將64位轉(zhuǎn)換成32位的整數(shù),然后執(zhí)行操作,最后將結(jié)果轉(zhuǎn)換回64位。這會(huì)帶來(lái)一個(gè)嚴(yán)重的副效應(yīng),即在對(duì)特殊的NaN和Infinity值應(yīng)用位操作時(shí),兩個(gè)值都會(huì)被當(dāng)做0來(lái)處理。

按位非 ~

按位與 &

按位或 |

按位異或 ^

左移 <<

有符號(hào)右移 >>

無(wú)符號(hào)右移 >>>

布爾操作

布爾操作的重要性不言而喻。布爾操作用來(lái)測(cè)試兩個(gè)值的關(guān)系,如果沒(méi)有它們,那么如if...else這類的判斷語(yǔ)句也就無(wú)用武之地了。

邏輯非 !

邏輯與 &&

邏輯或 ||

邏輯非(!)

只操作1個(gè)操作數(shù),無(wú)論操作數(shù)是什么數(shù)據(jù)類型,都返回一個(gè)布爾值。邏輯非操作不會(huì)改變操作數(shù)的數(shù)據(jù)類型。
邏輯非(!)操作符的規(guī)則:
1.如果操作數(shù)是一個(gè)對(duì)象,則返回false。
2.日字旁操作數(shù)是一個(gè)空字符串,則返回true。
3.如果操作數(shù)是一個(gè)非空字符串,則返回false。
4.如果操作數(shù)值是0,則返回true。
5.如果操作數(shù)是任意非0數(shù)值(包括Infinity),返回false。
6.如果操作數(shù)是null,返回true。
7.如果操作數(shù)是NaN,返回true。
8.如果操作數(shù)是undefined,返回true。

邏輯與(&&)

邏輯與有兩個(gè)操作數(shù),它可以應(yīng)用于任何類型的操作數(shù),而不僅僅是布爾值。在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值。
邏輯與(&&)操作符的規(guī)則
1.如果第一個(gè)操作數(shù)是對(duì)象,則返回第二個(gè)操作數(shù)。
2.如果第二個(gè)操作數(shù)是對(duì)象,則只有在第一個(gè)操作數(shù)的求值結(jié)果為true時(shí)才返回這個(gè)對(duì)象。
3.如果兩個(gè)操作數(shù)都是對(duì)象,則返回第二個(gè)操作數(shù)。
4.如果有一個(gè)操作數(shù)時(shí)null,則返回null。
5.如果有一個(gè)操作數(shù)時(shí)undefined,則返回undefined。
可見(jiàn)邏輯與是一種短路操作,如果第一個(gè)操作數(shù)能夠決定結(jié)果(如null,undefined),那么就不會(huì)對(duì)第二個(gè)操作數(shù)求值。

var a = {};
var b;
a && b;  //undefined

var a = 3;
var b = {};
a && b;  //b

var a = null;
var b = {};
a && b;  //null
邏輯或(||)

邏輯或的操作數(shù)有兩個(gè),如果其中有一個(gè)操作數(shù)不是布爾值,邏輯或也不一定返回布爾值,它遵循的規(guī)則如下:
1.如果第一個(gè)操作數(shù)是對(duì)象,則返回第一個(gè)操作數(shù);
2.如果第一個(gè)操作數(shù)求值結(jié)果為false,則返回第二個(gè)操作數(shù);
3.如果兩個(gè)操作數(shù)都為對(duì)象,則返回第一個(gè)操作數(shù);
4.如果兩個(gè)操作數(shù)都是null,則返回null;
5.如果兩個(gè)操作數(shù)都是NaN,則返回NaN;
6.如果連個(gè)操作數(shù)都是undefined,則返回undefined。
可見(jiàn)邏輯或也是一種短路語(yǔ)句,如果第一個(gè)操作數(shù)的求值結(jié)果為true則不會(huì)對(duì)第二個(gè)操作數(shù)進(jìn)行求值。
注意:由以上規(guī)則可知,邏輯操作符均不會(huì)改變操作數(shù)的數(shù)據(jù)類型。
利用邏輯與來(lái)避免為變量賦null或者undefined的值,如下:

var myObject = preferObject || backupObject;
乘性操作符

乘性操作符和其他語(yǔ)言中的乘性操作符用法類似,只不過(guò)在操作數(shù)為非數(shù)值的情況下會(huì)執(zhí)行自動(dòng)的類型轉(zhuǎn)換。即參與乘性計(jì)算的某個(gè)操作數(shù)不是數(shù)值,會(huì)先使用Number()轉(zhuǎn)型函數(shù)將其轉(zhuǎn)換為數(shù)值。但是乘性操作不會(huì)改變操作數(shù)數(shù)值類型。

乘法(*)

除法(/)

求模(%)

var a = 1;
var b = false;
a*b; //0
typeof b;  //boolean
加性操作符

加性操作符在操作數(shù)都為數(shù)值的時(shí)候執(zhí)行常規(guī)的加減法操作,在為非數(shù)值時(shí)會(huì)有特殊的轉(zhuǎn)化規(guī)則。但是同乘性操作符一樣加性操作符不會(huì)改變數(shù)值類型。

加法(+)

減法(-)

加性操作符

加性操作符在有操作數(shù)為字符串時(shí)遵循以下規(guī)則:
1.如果兩個(gè)操作數(shù)都為字符,則將第二個(gè)操作數(shù)與第一個(gè)操作數(shù)拼接起來(lái);
2.如果只有一個(gè)操作數(shù)是字符串,則將另一個(gè)操作數(shù)轉(zhuǎn)換為字符串,然后將兩個(gè)字符串拼接起來(lái);

減性操作符

1.如果有一個(gè)操作數(shù)是字符串,布爾值、null或者undefined,則先調(diào)用Number()方法,然后再根據(jù)數(shù)值減法規(guī)則執(zhí)行減法計(jì)算。
2.如果有一個(gè)操作數(shù)是對(duì)象,則調(diào)用對(duì)象的valueOf()方法取得該對(duì)象的數(shù)值。如果對(duì)象沒(méi)有valueOf()方法方法,則調(diào)用tostring()方法并將得到的字符串轉(zhuǎn)換為數(shù)值。

關(guān)系操作符

小于(<)

大于(>)

小于等于(<=)

大于等于(>=)

相等操作符

相等(==)

不相等(!=)

全等(===)

不全等(!==)

相等和不相等

這組操作符是先轉(zhuǎn)換再比較,即操作符會(huì)改變操作數(shù)的數(shù)值類型。
1.如果有一個(gè)操作數(shù)是布爾值,則在比較之前會(huì)轉(zhuǎn)換為數(shù)值;
2.一個(gè)操作數(shù)是字符,另一個(gè)是數(shù)值,那么在比較相等性之前會(huì)將字符串轉(zhuǎn)換為數(shù)值再進(jìn)行比較;
3.如果一個(gè)操作符是對(duì)象,另一個(gè)不是,則調(diào)用valueOf()方法,將得到的結(jié)果進(jìn)行比較。
4.如果兩個(gè)都是對(duì)象,則比較是否是同一個(gè)對(duì)象,如果兩個(gè)操作數(shù)都指向同一個(gè)對(duì)象,那么認(rèn)為它們相等。

var a = "3";
var b = 3;
a == b;  //true
typeof a;  //number

var a = {};
var b = {};
a == b;  //false

var a = {};
var b = a;
var c = a;
b == c;  //true
全等和不全等

全等和不全等操作符不會(huì)改變操作數(shù)的數(shù)值類型。

條件操作符
value = boolean_expression ? true_value : false_value

條件操作符會(huì)根據(jù)boolean_expression的求值結(jié)果來(lái)決定給變量value賦哪個(gè)值,求值為真是賦true_value值,為假時(shí)賦false_value值。

賦值操作符

賦值(=)

乘/賦值(*=)

初/賦值(/=)

模/賦值(%=)

加/賦值(+=)

減/賦值(-=)

左移/賦值(<<=)

無(wú)符號(hào)右移/賦值(>>>=)

有符號(hào)右移/賦值(>>=)

逗號(hào)操作符

逗號(hào)操作符用于在一條語(yǔ)句中執(zhí)行多個(gè)操作。

var num1=1, num2=2, num3=3;
操作符優(yōu)先級(jí)

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

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

相關(guān)文章

  • 前端識(shí)點(diǎn)整理

    摘要:難怪超過(guò)三分之一的開(kāi)發(fā)人員工作需要一些知識(shí)。但是隨著行業(yè)的飽和,初中級(jí)前端就業(yè)形勢(shì)不容樂(lè)觀。整個(gè)系列的文章大概有篇左右,從我是如何成為一個(gè)前端工程師,到各種前端框架的知識(shí)。 為什么 call 比 apply 快? 這是一個(gè)非常有意思的問(wèn)題。 作者會(huì)在參數(shù)為3個(gè)(包含3)以內(nèi)時(shí),優(yōu)先使用 call 方法進(jìn)行事件的處理。而當(dāng)參數(shù)過(guò)多(多余3個(gè))時(shí),才考慮使用 apply 方法。 這個(gè)的原因...

    Lowky 評(píng)論0 收藏0
  • 前端識(shí)點(diǎn)整理

    摘要:難怪超過(guò)三分之一的開(kāi)發(fā)人員工作需要一些知識(shí)。但是隨著行業(yè)的飽和,初中級(jí)前端就業(yè)形勢(shì)不容樂(lè)觀。整個(gè)系列的文章大概有篇左右,從我是如何成為一個(gè)前端工程師,到各種前端框架的知識(shí)。 為什么 call 比 apply 快? 這是一個(gè)非常有意思的問(wèn)題。 作者會(huì)在參數(shù)為3個(gè)(包含3)以內(nèi)時(shí),優(yōu)先使用 call 方法進(jìn)行事件的處理。而當(dāng)參數(shù)過(guò)多(多余3個(gè))時(shí),才考慮使用 apply 方法。 這個(gè)的原因...

    snowLu 評(píng)論0 收藏0
  • JavaScript易錯(cuò)識(shí)點(diǎn)整理

    摘要:知識(shí)點(diǎn)變量作用域上方的函數(shù)作用域中聲明并賦值了,且在之上,所以遵循就近原則輸出等于。上方的函數(shù)作用域中被重新賦值,未被重新聲明,且位于之下,所以輸出全局作用域中的。上方利用方法進(jìn)行對(duì)象的深拷貝可以避免源對(duì)象被篡改的可能。 前言 本文是我學(xué)習(xí)JavaScript過(guò)程中收集與整理的一些易錯(cuò)知識(shí)點(diǎn),將分別從變量作用域,類型比較,this指向,函數(shù)參數(shù),閉包問(wèn)題及對(duì)象拷貝與賦值這6個(gè)方面進(jìn)行由...

    vincent_xyb 評(píng)論0 收藏0
  • JavaScript易錯(cuò)識(shí)點(diǎn)整理

    摘要:知識(shí)點(diǎn)變量作用域上方的函數(shù)作用域中聲明并賦值了,且在之上,所以遵循就近原則輸出等于。上方的函數(shù)作用域中被重新賦值,未被重新聲明,且位于之下,所以輸出全局作用域中的。若執(zhí)行則會(huì)輸出。上方利用方法進(jìn)行對(duì)象的深拷貝可以避免源對(duì)象被篡改的可能。 前言 本文是我學(xué)習(xí)JavaScript過(guò)程中收集與整理的一些易錯(cuò)知識(shí)點(diǎn),將分別從變量作用域,類型比較,this指向,函數(shù)參數(shù),閉包問(wèn)題及對(duì)象拷貝與賦值...

    2shou 評(píng)論0 收藏0
  • 【連載】前端個(gè)人文章整理-從基礎(chǔ)到入門

    摘要:個(gè)人前端文章整理從最開(kāi)始萌生寫文章的想法,到著手開(kāi)始寫,再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會(huì)繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開(kāi)始萌生寫文章的想法,到著手...

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

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

0條評(píng)論

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