国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JavaScript:什么時候能用==

開發 前端
給JavaScript初學者的建議是:完全忘掉==,總是使用===.實踐證明,這樣做是完全正確的.有五種案例看起來可以反駁這一論點,但其實沒有.從現在開始,我們的指導原則是:

答案是:永遠不要用.本文依次否定了五種看起來可以使用==的地方,同時解釋了為什么.

JavaScript中有兩個運算符用來判斷兩個值是否相等:

嚴格相等運算符===,必須類型相同且值相同.

普通的(寬容的)相等運算符==,在比較值是否嚴格相等之前,首先進行類型轉換.

給JavaScript初學者的建議是:完全忘掉==,總是使用===.實踐證明,這樣做是完全正確的.有五種案例看起來可以反駁這一論點,但其實沒有.從現在開始,我們的指導原則是:

比起簡潔,我們更喜歡意圖清晰的代碼.

記住:你的代碼只寫一次,但可能要讀很多次 – 請盡可能的讓你的代碼易讀.

案例1:你知道你在比較什么

例如,如果使用的是typeof操作符,你可以確定它返回來的是個字符串.那么使用==就是安全的,因為我們可以確定這樣的比較不會有任何的類型轉換:

  1. if (typeof x == "function") {  
  2.     ...  

可是,有兩個理由讓我們不去這樣做:

一致性: 如果你在這里使用了==,你不會得到任何的好處,那還何必破壞統一的規則去使用它?

簡單和性能: 通常來說, === 的操作更簡單,因為它不用去轉換它的操作數.在不同的JavaScript引擎上,該運算符的性能表現不同,但在大部分瀏覽器上,===總比==快,至少不會慢.

案例2: 比較undefined和null

使用==來比較的話,undefined和null是在一個相同的等價類上 – 他們和自己相等,同時互相之間也相等,但是不和其他任何值相等(包括那些JavaScript中的假值):

  1. null == null 
  2. true 
  3. > undefined == null 
  4. true 
  5. false == null 
  6. false 
  7. > 0 == null 
  8. false 

因此,下面的if語句可以檢測x是null或者是undefined(譯者注:一箭雙雕,jQuery1.81源碼中有36處地方使用了== null).

  1. if (x == null) {  
  2.      ...  

可是,代碼的簡潔性完全被代碼缺少明確的意圖這一缺點抵消掉了: 如果需要檢測undefined值,那你還不如把它也寫上. 否則,如果一個JavaScript新手讀你的代碼,他們會覺的你只是在檢測null.如果一個老手讀你的代碼,他們也許會認為也許是你犯了一個錯,這里應該用的是 ===.

  1. if (x === undefined || x === null) {  
  2.     ...  

如果你的需求不是那么的嚴格,那么上面的代碼可以簡寫為

  1. if (!x) {  
  2.     ...  

只要x為下面列出的這些假值,條件檢測就會通過.

  1. undefined  
  2. null 
  3. false 
  4. 0  
  5. "" 

譯者注:5種原始值類型中,剛好各有一個假值?不對,少了個NaN

案例3: 比較字符串和數字

案例場景是:你正在寫和用戶界面交互的代碼或者處理服務器返回參數的代碼.那么你很可能需要處理字符串類型的數字.如果x是這樣一個字符串,你可以這樣比較它:

  1. if (x == 123) {  
  2.     ...  

但是為什么不告訴讀你代碼的人x不是一個數字呢,更好的寫法是明確的將它轉換成數字再進行比較.

  1. if (Number(x) === 123) {  
  2.     ...  

案例4: 比較對象值和原始值

使用 ==,你可以比較兩個原始值,也可以比較一個原始值和它的包裝類型對象值:

  1. function isAbc(x) { return x == "abc" }  
  2. > isAbc("abc")  
  3. true 
  4. > isAbc(new String("abc"))  
  5. true 

使用 === 的話,不行:

  1. new String("abc") === "abc" 
  2. false 

等號左邊是一個對象值,等號右邊是一個原始值.因此,他們沒有相同的類型,也就不能嚴格相等.盡管如此,你仍然應該優先考慮,如何才能讓讀你代碼的人清楚的知道你這行代碼的意圖.如果用下面這個判斷的話

  1. x == "abc" 

你想要完成的任務是什么?

左側的值真的既可能是一個字符串包裝對象又可能是一個字符串原始值嗎?這似乎不太可能,但如果真是這樣的話,你應該在文檔中很清楚的寫明這到底是個什么樣的操作.

你是想把對象值轉換成原始值嗎? 那么你可以寫的更明確一點

  1. String(x) === "abc" 

你是想要拆箱出一個原始值嗎?那么你應該這么寫

  1. x.valueOf() === "abc" 

案例5: JavaScript是很靈活的 – 我寫的代碼也應該如此

這個論點是這樣的:我希望我的代碼能表現出和JavaScript同樣的靈活性.并且 == 能幫我實現它.下面是體現JavaScript靈活性的例子,它能自動轉換值的類型:

  1. "abc" + false 
  2. 'abcfalse' 
  3. > 3 + true 
  4. 4  
  5. > +"73" 
  6. 73 

下面是上述論點的幾個反駁:

標準的隱式轉換并不可能總是符合你的期望.例如:

  1. > !"false" 
  2. false 
  3. > 7 + "3" 
  4. '73' 
  5. > Number("")  

寬容的相等判斷和通常見到的隱式轉換有著不同的表現:

  1. > 2 == false 
  2. false 
  3. > 2 == true 
  4. false 
  5. > Boolean(2)  
  6. true 

明確的類型轉化加上嚴格的相等判斷能夠產生更具描述性的代碼.不好的寫法:用寬容相等來實現靈活性

  1. function is123Implicit(x) {  
  2.     return x == 123;  
  3. }  
  4. > is123Implicit(123)  
  5. true 
  6. > is123Implicit(new Number(123))  
  7. true 
  8. > is123Implicit("123")  
  9. true 

替代方法: 明確的類型轉換加嚴格相等實現靈活性:

  1. function is123Explicit(x) {  
  2.     x = Number(x);  
  3.     return x === 123;  
  4. }  
  5. > is123Explicit(123)  
  6. true 
  7. > is123Explicit(new Number(123))  
  8. true 
  9. > is123Explicit("123")  
  10. true 

誰說你的代碼必須要靈活?可以說JavaScript這種默認的靈活性是一個bug而不是特性.編寫防御型的代碼能更快的暴露出這些bug.一個更有防御性的函數is123Explicit()如下:

  1. function is123Defensive(x) {  
  2.     if (typeof x !== "number") {  
  3.         throw new TypeError("Not a number: "+x);  
  4.     }  
  5.     return x === 123;  
  6. }  

如果你想傳入一個非數字原始值的參數,那么你得首先進行類型轉換.

結論

我希望我已經說服了你,應該堅持以淺顯易懂為原則,堅決不使用==來做判斷.這樣做是有道理的,不光針對新手,通常來說,代碼中有更少技巧性的東西,就意味著代碼有更好的可讀性。

原文鏈接:http://www.cnblogs.com/ziyunfei/archive/2012/09/22/2696109.html

責任編輯:張偉 來源: 紫云飛的博客
相關推薦

2017-05-15 09:55:07

2020-05-12 11:25:50

MySQLES數據庫

2015-07-08 15:55:01

NSStringcopystrong

2013-11-28 16:03:24

2022-09-08 09:42:26

JavaScripMapObject

2022-05-19 10:27:34

機器學習人工智能

2024-08-05 01:22:16

2017-06-28 15:06:51

PythonLambda函數

2021-08-13 11:31:23

HTTP

2025-05-15 08:50:00

MQRPC架構

2015-10-20 15:59:57

注釋代碼程序

2015-10-26 09:38:52

避免注釋代碼

2021-09-29 09:24:21

GCGo STW

2020-01-05 23:28:51

MQ消息進程

2011-10-18 16:41:23

編程

2015-02-01 09:45:46

2015-03-02 14:44:48

AngularJS jQuery超越

2017-04-05 21:43:08

MQ互聯網架構

2012-07-26 10:27:31

PHP

2021-01-30 19:59:37

性能項目開源
點贊
收藏

51CTO技術棧公眾號

一夜七次郎国产精品亚洲| 91久久综合亚洲鲁鲁五月天| 猫咪成人官网| 午夜久久久久| 精品国偷自产在线视频99| 99re在线视频| 亚洲欧美乱综合| 成人毛片100部免费看| 国产精品va| 97视频在线观看免费| 涩涩视频在线免费看| 欧美色倩网站大全免费| av日韩在线免费| 成人污污视频在线观看| 九色综合日本| 久久视频国产| 午夜精品一区二区三区视频免费看| 9999热视频在线观看| 91久久国产最好的精华液| 在线视频日韩一区| 国产99久久久国产精品免费看| 精品一区二区国产| 91精品国产91久久久久久密臀| 国产91精品久久久久久| 一区二区三区四区视频免费观看 | 亚洲人成亚洲精品| 中文字幕国产亚洲2019| av文字幕在线观看| 欧美视频在线一区二区三区 | 国产精品69毛片高清亚洲| 久久综合给合久久狠狠色| 亚洲视频一区| 国产精品久久久久av福利动漫| 精品国产精品国产偷麻豆| 久久男人av资源网站| 蜜桃在线一区| 欧美激情欧美激情在线五月| 日韩一区二区三区在线看| 久久国产精彩视频| 99精品视频在线免费播放| 国产一区二区日韩| 国产成人毛片| 久久成年人视频| 国产精品乱战久久久| 91精品国产高清久久久久久| 日韩av字幕| 国产精品mp4| 欧美色网址大全| 成人高清视频观看www| 国产精品久久久久久久| 极品束缚调教一区二区网站| 中文字幕亚洲第一| 欧美高清xxx| 一区二区不卡在线视频 午夜欧美不卡在| 日本福利视频在线| 久久老女人爱爱| 欧美日韩大尺度| 国产精品乱码一区二区三区软件 | 欧美三区美女| 豆国产97在线| 久久激情一区| 一本大道东京热无码aⅴ| 成人激情免费电影网址| 成人中文字幕av| 国产精品午夜在线观看| 亚洲一本大道| 91豆麻精品91久久久久久| 黄色网在线免费观看| 日韩精品免费看| 国产精品亚洲欧美一级在线 | 六月丁香综合在线视频| 六月婷婷激情综合| 欧美高清在线视频| 色播视频在线观看| 在线不卡一区二区| 日本不良网站在线观看| 欧洲成人一区| 国产综合久久| 欧美一性一乱一交一视频| 成人精品天堂一区二区三区| 免费男同深夜夜行网站| 久久综合九色综合欧美就去吻| 中文在线字幕免费观看| 国产精品入口芒果| 久久99久久99精品中文字幕| 538在线观看| 五月天色一区| 欧美激情中文不卡| 岛国毛片av在线| 欧美在线观看网址综合| 国产精品自拍av| 麻豆传媒在线播放| 欧美一级日韩免费不卡| 日韩电影在线观看电影| 日本中文字幕在线观看| 亚洲三区四区| 欧美极品少妇xxxxⅹ裸体艺术| 日韩精品资源二区在线| 最近2018年手机中文在线| 欧美一区二区大片| 在线成人h网| 精品无人乱码| 国产二区不卡| 亚洲免费观看高清完整版在线观看熊| 成人黄色视屏网站| 亚洲一区二区三区乱码| 福利视频一区二区三区| 欧美xxxxx牲另类人与| 国产精品影音先锋| 国产精品主播在线观看| 亚洲高清国产拍精品26u| 91免费版网站在线观看| www.亚洲男人天堂| 中文字幕第一区| 成人情趣视频| 欧美亚洲成人网| 精品写真视频在线观看| 亚洲校园欧美国产另类| 国产一级揄自揄精品视频| 午夜精品久久久久99热蜜桃导演| 北条麻妃视频在线| 亚洲黄色片网站| 女人香蕉久久**毛片精品| 中文字幕第36页| 国产视频精品自拍| 999久久久91| 久久久久久蜜桃一区二区| 亚洲白虎美女被爆操| 午夜日本精品| 免费h片在线观看| 久久香蕉国产线看观看网| 奇米一区二区三区| 91最新在线| 久久久久99精品国产片| av日韩在线免费观看| 日韩一级性生活片| 日韩久久免费视频| 成人精品电影在线观看| 视频一区欧美| 亚洲最大黄网| 国产日韩精品视频一区| 精品视频999| 亚洲精品国产精华液| 亚洲国产成人av网| 中文字幕在线亚洲| 国内精品视频在线| 欧美国产日韩一区二区在线观看| 欧美老年两性高潮| 一区二区三区免费观看| 久久日韩粉嫩一区二区三区| 性欧美精品高清| 秋霞成人午夜伦在线观看| 色小子综合网| 日韩av电影天堂| 亚洲欧洲成人精品av97| 久久久亚洲国产美女国产盗摄| 黄色一级片网址| 日韩免费看网站| 久久蜜桃精品| 国产精品剧情| 秋霞久久久久久一区二区| 在线电影一区二区三区| 亚洲欧洲另类| 成人福利在线观看视频| 日本一区二区在线视频| 日韩一级高清毛片| 免费不卡在线视频| 极品少妇xxxx偷拍精品少妇| 爱情岛亚洲播放路线| 亚洲精品国产系列| 日韩av有码在线| 国产一区二区91| 欧美亚洲人成在线| 成人观看网站a| 成人免费在线视频网址| 在线免费精品视频| 欧美资源在线| 久久野战av| 午夜宅男在线视频| 国产99视频在线观看| 精品国产福利在线| 亚洲在线免费| 欧美电影网站| 日本成人中文字幕在线| 欧美专区日韩视频| 欧美日韩综合不卡| 国产一区二区成人久久免费影院 | 久久久久久香蕉网| 亚洲欧美另类在线| 国模大胆一区二区三区| 青春草在线视频| 国语对白做受xxxxx在线中国| 国产精品丝袜久久久久久不卡| 日韩欧美在线中文字幕| 天堂久久久久va久久久久| 户外露出一区二区三区| 婷婷丁香六月天| 日韩少妇中文字幕| 欧美精品电影免费在线观看| 在线观看日韩精品|