精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

快速判斷JavaScript對象是否存在的十個方法

開發 前端
你可能會覺得,寫出這段代碼很容易。但是實際上,它涉及的語法問題,遠比我們想象的復雜。Juriy Zaytsev指出,判斷一個Javascript對象是否存在,有超過50種寫法。只有對Javascript語言的實現細節非常清楚,才可能分得清它們的區別。

JavaScript語言的設計不夠嚴謹,很多地方一不小心就會出錯。

舉例來說,請考慮以下情況。

現在,我們要判斷一個全局對象myObj是否存在,如果不存在,就對它進行聲明。用自然語言描述的算法如下:

  1.  if (myObj不存在){  
  2.     聲明myObj;  
  3.   } 

你可能會覺得,寫出這段代碼很容易。但是實際上,它涉及的語法問題,遠比我們想象的復雜。Juriy Zaytsev指出,判斷一個Javascript對象是否存在,有超過50種寫法。只有對Javascript語言的實現細節非常清楚,才可能分得清它們的區別。

***種寫法

根據直覺,你可能覺得可以這樣寫:

  1.  if (!myObj) {  
  2.     myObj = { };  
  3.   } 

但是,運行這段代碼,瀏覽器會直接拋出ReferenceError錯誤,導致運行中斷。請問錯在哪里?

對了,if語句判斷myObj是否為空時,這個變量還不存在,所以才會報錯。改成下面這樣,就能正確運行了。

  1. if (!myObj) {  
  2.     var myObj = { };  
  3.   } 

為什么加了一個var以后,就不報錯了?難道這種情況下,if語句做判斷時,myObj就已經存在了嗎?

要回答這個問題,就必須知道Javascript解釋器的工作方式。Javascript語言是"先解析,后運行",解析時就已經完成了變量聲明,所以上面的代碼實際等同于:

  1. var myObj;  
  2.   if (!myObj) {  
  3.     var myObj = { };  
  4.   } 

因此,if語句做判斷時,myObj確實已經存在了,所以就不報錯了。這就是var命令的"代碼提升"(hoisting)作用。Javascript解釋器,只"提升"var命令定義的變量,對不使用var命令、直接賦值的變量不起作用,這就是為什么不加var會報錯的原因。

第二種寫法

除了var命令,還可以有另一種改寫,也能得到正確的結果:

  1. if (!window.myObj) {  
  2.     myObj = { };  
  3.   } 

window是javascript的頂層對象,所有的全局變量都是它的屬性。所以,判斷myobj是否為空,等同于判斷window對象是否有myobj屬性,這樣就可以避免因為myObj沒有定義而出現ReferenceError錯誤。不過,從代碼的規范性考慮,***還是對第二行加上var:

  1. if (!window.myObj) {  
  2.     var myObj = { };  
  3.   } 

或者寫成這樣:

  1.  if (!window.myObj) {  
  2.     window.myObj = { };  
  3.   } 

第三種寫法

上面這種寫法的缺點在于,在某些運行環境中(比如V8、Rhino),window未必是頂層對象。所以,考慮改寫成:

  1.  if (!this.myObj) {  
  2.     this.myObj = { };  
  3.   } 

在全局變量的層面中,this關鍵字總是指向頂層變量,所以就可以獨立于不同的運行環境。

第四種寫法

但是,上面這樣寫可讀性較差,而且this的指向是可變的,容易出錯,所以進一步改寫:

  1.  var global = this;  
  2.   if (!global.myObj) {  
  3.     global.myObj = { };  
  4.   } 

用自定義變量global表示頂層對象,就清楚多了。

第五種寫法

還可以使用typeof運算符,判斷myObj是否有定義。

  1. if (typeof myObj == "undefined") {  
  2.     var myObj = { };  
  3.   } 

這是目前使用最廣泛的判斷javascript對象是否存在的方法。

#p#

第六種寫法

由于在已定義、但未賦值的情況下,myObj的值直接等于undefined,所以上面的寫法可以簡化:

  1. if (myObj == undefined) {  
  2.     var myObj = { };  
  3.   } 

這里有兩個地方需要注意,首先第二行的var關鍵字不能少,否則會出現ReferenceError錯誤,其次undefined不能加單引號或雙引號,因為這里比較的是undefined這種數據類型,而不是"undefined"這個字符串。

第七種寫法

上面的寫法在"精確比較"(===)的情況下,依然成立:

  1.  if (myObj === undefined) {  
  2.     var myObj = { };  
  3.   } 

第八種寫法

根據javascript的語言設計,undefined == null,所以比較myObj是否等于null,也能得到正確結果:

  1.  if (myObj == null) {  
  2.     var myObj = { };  
  3.   } 

不過,雖然運行結果正確,但是從語義上看,這種判斷方法是錯的,應該避免。因為null指的是已經賦值為null的空對象,即這個對象實際上是有值的,而undefined指的是不存在或沒有賦值的對象。因此,這里只能使用"比較運算符"(==),如果這里使用"精確比較運算符"(===),就會出錯。

第九種寫法

還可以使用in運算符,判斷myObj是否為頂層對象的一個屬性:

  1.  if (!('myObj' in window)) {  
  2.     window.myObj = { };  
  3.   } 

第十種寫法

***,使用hasOwnProperty方法,判斷myObj是否為頂層對象的一個屬性:

  1. if (!this.hasOwnProperty('myObj')) {  
  2.     this.myObj = { };  
  3.   } 

總結

1. 如果只判斷對象是否存在,推薦使用第五種寫法。

2. 如果除了對象是否存在,還要判斷對象是否有null值,推薦使用***種寫法。

3. 除非特殊情況,所有變量都應該使用var命令聲明。

4. 為了跨平臺,建議避免使用window表示頂層對象。

5. 在Javascript語言中,null和undefined容易產生混淆。在可能同時涉及兩者的情況下,建議使用"精確比較"運算符(===)。

【編輯推薦】

  1. JavaScript重構深入剖析
  2. 15款超棒的JavaScript開發工具推薦
  3. 從零開始學習jQuery之你必須知道的JavaScript
  4. 高性能WEB開發之如何加載JavaScript
  5. 泄露你的JavaScript技術很爛的五個表現
責任編輯:陳貽新 來源: 阮一峰博客
相關推薦

2011-05-25 10:46:39

Javascript

2023-10-16 07:55:15

JavaScript對象技巧

2023-09-06 07:22:48

控制臺UI工具

2023-07-24 07:11:43

2023-12-07 08:02:48

document前端JavaScript

2014-02-13 17:22:08

2022-11-25 14:55:43

JavaScriptweb應用程序

2019-02-01 10:05:33

開源游戲開發游戲引擎

2010-12-06 09:49:28

Linux快速啟動

2022-12-13 16:44:10

JavaScrip工具開發

2024-03-04 16:32:02

JavaScript運算符

2025-03-27 10:03:17

PythonPandas代碼

2023-10-29 17:12:26

Python編程

2019-10-18 18:26:13

銀行數字化銀行數字化

2022-07-07 09:19:24

JavaScript代碼樣式規則

2023-08-03 16:14:06

JavaScriptAPI

2023-06-14 15:51:48

JavaScript

2024-12-02 14:28:17

JavaScriptWeb開發

2010-09-16 15:20:36

sql server表

2023-04-03 06:38:41

點贊
收藏

51CTO技術棧公眾號

色哟哟一区二区在线观看| 激情偷乱视频一区二区三区| 国产婷婷成人久久av免费高清| 丰满爆乳一区二区三区| 国产午夜在线视频| 国产一区视频在线看| 97婷婷涩涩精品一区| 成人激情五月天| 2020最新国产精品| 色哟哟国产精品| 日本在线视频www色| 天天色棕合合合合合合合| 蜜臀久久久久久久| 69久久夜色精品国产69| 久久人妻无码aⅴ毛片a片app| 一区二区三区四区高清视频 | 中文字幕不卡每日更新1区2区| www.久久久久久久久久| 日韩av二区在线播放| 欧美国产视频日韩| 久久av红桃一区二区禁漫| 欧美日韩直播| 日韩欧美精品三级| 中文字幕一区二区三区四区在线视频| 福利在线导航136| 国产精品免费久久| 欧美另类一区| 四虎永久在线精品免费网址| 国产美女视频一区| 国产精品丝袜白浆摸在线| 亚洲精品午夜国产va久久成人| 永久亚洲成a人片777777| 亚洲女人天堂成人av在线| xxxxwww一片| 99综合久久| 欧美日韩免费一区二区三区 | 亚洲国产精品中文| 国产黄色一区二区三区| 欧美高清影院| 在线观看www91| 免费无码av片在线观看| 91豆花视频在线播放| 一区二区成人在线观看| 400部精品国偷自产在线观看| 自拍视频在线免费观看| 国产欧美一区二区在线观看| 九九热久久66| 亚洲 欧美 激情 小说 另类| caoporn国产一区二区| 91成人免费视频| 99久久一区二区| 国产美女视频一区| 999久久久| www.黄色av| 成人综合婷婷国产精品久久| 99久久自偷自偷国产精品不卡| 96亚洲精品久久久蜜桃| 久久爱www久久做| 91精品久久久久| 国产一区二区三区三州| 国产自产高清不卡| 99在线视频免费观看| 国产xxxx在线观看| 成人免费毛片片v| 国产伦精品一区二区三区高清版| 成人免费视频国产| 972aa.com艺术欧美| 免费日韩av电影| 激情视频在线观看免费| 欧美国产一区在线| 中文字幕一区二区三区精彩视频| 成人短视频在线| 亚洲一区二区三区四区中文字幕 | 快she精品国产999| 国产精品国产福利国产秒拍| 在线播放亚洲精品| 国产成人午夜99999| 国产伦精品一区二区三毛| 日韩av视屏| 国产精品丝袜91| 国产911在线观看| 欧美激情网站| 欧美天堂一区二区三区| 亚洲色图欧美自拍| 国产伦理久久久久久妇女| 亚洲精品丝袜日韩| 青青青手机在线视频| 欧美日韩专区| 国产www精品| 国产偷拍一区二区| 91美女片黄在线| 一区二区三区四区| 爱情岛亚洲播放路线| 91福利资源站| 男人女人拔萝卜视频| 免费成人网www| 超在线视频97| 无码人妻av免费一区二区三区 | 黄色在线免费播放| 国产一区二区三区电影在线观看 | 国产一区欧美一区| 久久久久国产精品视频| 在线中文字幕电影| 日韩欧美中文免费| 潘金莲一级淫片aaaaaaa| 国产一区二区三区四区五区传媒 | 韩日成人影院| 欧美大片免费久久精品三p| 亚洲黄色免费视频| 激情欧美丁香| 成人免费看吃奶视频网站| 天堂在线中文| 一区二区三区不卡在线观看| 成年人在线观看视频免费| 精品福利一区| 久久福利视频导航| 中文字幕第2页| 久久久久久久综合色一本| 91亚洲精品国产| 日韩黄色在线| 国产亚洲xxx| 91在线看视频| 成人做爰69片免费看网站| 一区二区三区四区久久| 欧美xnxx| 亚洲欧美日韩在线高清直播| 日本网站在线免费观看| 国产精品18久久久久久久久久久久 | 免费无码不卡视频在线观看| 秋霞一区二区| 美日韩在线视频| 91精品国产乱码久久久久| 国产欧美1区2区3区| 久久久一本二本三本| 国产suv精品一区| 欧美国产视频一区二区| 国产高清第一页| 亚洲色图清纯唯美| 一二三级黄色片| 欧美激情欧美| 国产日韩欧美视频在线| a视频网址在线观看| 91九色最新地址| 性猛交ⅹxxx富婆video | 97精品视频在线看| 国产精品亚洲第一区| av中文字幕在线| 在线日韩一区二区| 亚洲精品色午夜无码专区日韩| 国产欧美成人| 品久久久久久久久久96高清| 二区三区不卡| 这里只有精品在线播放| 在线观看免费高清视频| 自拍偷拍亚洲激情| 欧美性受xxxx黒人xyx性爽| 999国产精品999久久久久久| 成人黄色免费片| 伊人手机在线| 亚洲国产精品国自产拍av秋霞| 日本一区二区三区免费视频| 97久久超碰国产精品电影| 免费在线激情视频| 国产中文字幕一区二区三区| 国产精品爽黄69天堂a| 高h视频在线观看| 欧美成人三级在线| 亚洲精品1区2区3区| 久久影院午夜论| 亚洲无吗一区二区三区| 国产精品二区不卡| 99精品在线直播| 国产精品专区免费| 精品精品国产国产自在线| www.97av.com| 一区二区三区资源| 国产美女喷水视频| 蜜桃视频一区二区三区| 九九久久九九久久| 五月天亚洲色图| 成人福利网站在线观看| 国产丝袜在线观看视频| 亚洲人成在线播放| 国产人妻精品一区二区三区| 亚洲成人动漫在线观看| 国产又大又粗又爽的毛片| 国产自产2019最新不卡| 少妇人妻在线视频| 欧美一区二区三| 春色成人在线视频| 欧美色片在线观看| 欧美国产日韩二区| 国产区在线视频| 欧美mv和日韩mv的网站| 亚洲第一网站在线观看| 亚洲三级视频在线观看| 日本激情小视频| 国产一区二区三区综合| 18禁男女爽爽爽午夜网站免费 | 国产日韩欧美精品一区| 中文字幕第66页| 久久九九免费| 国产精品三级一区二区| 欧美在线色图| 久久99精品久久久久久久青青日本| jizz欧美| 青草热久免费精品视频| 日韩激情av| 自拍亚洲一区欧美另类| 台湾av在线二三区观看| 欧美一级欧美三级在线观看| 久久这里只有精品9| 亚洲成人一区在线| 国产成人久久久久| 日本一区二区不卡视频| aa片在线观看视频在线播放| 精品一区二区三区不卡| 8x8x最新地址| 午夜亚洲福利在线老司机| 三级在线免费观看| 91青青国产在线观看精品| 欧美一区二区综合| 免费成人三级| yy111111少妇影院日韩夜片| 国产国产一区| 国产精品1234| 亚洲成a人片| 97超碰国产精品女人人人爽 | 国产精品一区二区三区毛片淫片 | 99国内精品久久久久久久软件| 香蕉久久一区| 91精品国产自产在线老师啪| 免费在线观看一区| 国产精品99久久久久久www| 无码小电影在线观看网站免费| 欧美激情国产日韩精品一区18| 精品视频在线一区二区| 日韩在线观看免费网站 | 91福利国产成人精品播放| 亚洲专区免费| heyzo国产| 国产九九精品| 国内外成人激情视频| 国产欧美一级| 国产免费黄色av| 香蕉久久夜色精品国产| 黄色影院一级片| 亚洲欧美日韩在线观看a三区| 丰满爆乳一区二区三区| 亚洲欧美不卡| 北条麻妃在线一区| 日韩黄色一级片| 亚洲欧美视频二区| 久久91精品国产91久久小草| 精品亚洲视频在线| 国产精品一区免费视频| 亚洲 自拍 另类 欧美 丝袜| 成人动漫一区二区在线| 亚洲欧美在线不卡| 久久久99久久| 欧美乱大交做爰xxxⅹ小说| 国产精品传媒入口麻豆| 欧美日韩精品在线观看视频 | 欧产日产国产69| 欧美性大战xxxxx久久久| 一级片在线免费观看视频| 欧美一区二区播放| 国产 日韩 欧美 精品| 日韩成人中文字幕| 国产中文在线视频| 日韩中文在线观看| 免费av不卡在线观看| 97在线视频免费播放| 成人免费网站www网站高清| 国产欧美一区二区三区久久| 秋霞影院一区| 免费看成人片| 亚洲精品国产首次亮相| 男女视频网站在线观看| 三级久久三级久久| 国产在线视频三区| 91麻豆国产精品久久| www中文在线| 亚洲成人午夜电影| 中文字幕精品一区二区精| 日韩欧美在线影院| 免费成人av电影| 久久最新资源网| 亚洲最大成人| 91系列在线观看| 亚洲裸色大胆大尺寸艺术写真| 在线看无码的免费网站| 亚洲激情偷拍| 欧美丝袜在线观看| 久久先锋影音av鲁色资源网| 欧美日韩黄色网| 懂色av中文一区二区三区天美| 在线观看色网站| 亚洲精品99久久久久| 男人资源在线播放| 国产91|九色| 日韩精品一区二区三区中文 | 亚洲成人三区| 热久久精品国产| 成人免费毛片嘿嘿连载视频| 蜜桃视频最新网址| 黑人精品xxx一区| 成 人 黄 色 片 在线播放| 国产亚洲欧美日韩精品| sm在线观看| 国产日韩欧美中文在线播放| 欧美激情在线精品一区二区三区| 女女百合国产免费网站| 麻豆高清免费国产一区| 30一40一50老女人毛片| 亚洲一区av在线| 国产黄a三级三级三级| 中文字幕日韩av电影| 僵尸再翻生在线观看| 99精品99久久久久久宅男| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 91精品国产视频| 精品久久久久久中文字幕2017| 99久久综合精品| 久久久久成人片免费观看蜜芽| 欧美高清一级片在线| 成人77777| 国产精品69av| 校花撩起jk露出白色内裤国产精品| 国产精品久久国产| 国产不卡免费视频| 久草国产在线观看| 日韩欧美一区在线观看| 国产黄a三级三级三级av在线看| 国产精品影院在线观看| 欧美精品羞羞答答| www黄色在线| 久久精品男人天堂av| 台湾佬中文在线| 亚洲欧美在线免费| 午夜日韩成人影院| 日韩av一区二区三区在线观看| 性欧美暴力猛交另类hd| 超碰97人人干| 色视频欧美一区二区三区| 你懂的在线网址| 国产精品白嫩初高中害羞小美女| 男男gay无套免费视频欧美| 日韩av片在线看| 国产亚洲综合av| 在线观看中文字幕av| 日韩在线视频观看| 成人免费91| 2022中文字幕| 99久久精品免费观看| 九九热在线视频播放| 亚洲欧美日韩天堂一区二区| 本网站久久精品| 国产人妻互换一区二区| 国产91精品一区二区| 日韩欧美中文字幕一区二区| 亚洲老头同性xxxxx| 嫩草伊人久久精品少妇av杨幂| 亚洲国产精品123| 国产伦理精品不卡| 久久久久亚洲av片无码下载蜜桃| 亚洲精品国产综合久久| 欧美成人精品一区二区男人小说| 亚洲7777| 国产成人免费av在线| 制服.丝袜.亚洲.中文.综合懂色| 亚洲乱码av中文一区二区| 久久青草视频| 人妻激情另类乱人伦人妻| 久久伊99综合婷婷久久伊| 成人午夜精品视频| 九九热这里只有精品免费看| 男人的天堂久久| 色噜噜狠狠一区二区| 亚洲一二三专区| 国产日韩精品在线看| 成人黄色av网| 性高湖久久久久久久久| 国产一区二区三区视频播放| 精品成a人在线观看| 亚洲第一会所001| 91精品国产91久久久久麻豆 主演| 久久综合成人精品亚洲另类欧美 | 日韩最新在线视频| 成人福利免费在线观看| 在线观看免费成人av| 亚洲在线视频免费观看| 国产黄在线看| 国产精品v欧美精品v日韩| 日本成人中文字幕| 国产中文字幕免费| 日韩一区二区福利| 网曝91综合精品门事件在线| 青娱乐精品在线| 欧美三级中文字幕|