自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JS中所有對(duì)象隱式轉(zhuǎn)換都是True?除了他...

開發(fā) 前端
document.all會(huì)返回一個(gè)HTMLAllCollection集合,包含document下所有節(jié)點(diǎn)??梢岳斫鉃槭且粋€(gè)「包含頁(yè)面中所有DOM節(jié)點(diǎn)的集合」

[[437695]]

大家好,我卡頌。

根據(jù)ES規(guī)范[1]規(guī)定,所有非原始類型的對(duì)象轉(zhuǎn)化為Boolean都為true:

但是這里有個(gè)特例:document.all

本文就來(lái)聊聊這個(gè)冷知識(shí)。

document.all的作用

document.all會(huì)返回一個(gè)HTMLAllCollection集合,包含document下所有節(jié)點(diǎn)??梢岳斫鉃槭且粋€(gè)「包含頁(yè)面中所有DOM節(jié)點(diǎn)的集合」:

早期的web開發(fā)者用該API獲取DOM節(jié)點(diǎn),比如:

  1. // 獲取頁(yè)面中第一個(gè)節(jié)點(diǎn),即HTML 
  2. document.all[0]; 
  3.  
  4. // 獲取頁(yè)面中id為"abcd"的節(jié)點(diǎn) 
  5. document.all["abcd"]; 

隨著WEB發(fā)展,其作用已經(jīng)逐漸被document的其他方法取代,比如:

  • getElementById
  • querySelector
  • ......

負(fù)重前行的W3C

雖然有了更好用的API,但很多老頁(yè)面還在使用document.all。如何更好的過(guò)渡呢?

為了兼容,很多開發(fā)者會(huì)寫出如下代碼:

  1. if (document.all) { 
  2.   // 老瀏覽器 
  3. else if (document.getElementById) { 
  4.   // 支持getElementById的現(xiàn)代瀏覽器 

問(wèn)題是,很多現(xiàn)代瀏覽器也實(shí)現(xiàn)了document.all,這就會(huì)讓代碼在所有瀏覽器中都進(jìn)入「老瀏覽器」的邏輯。

從09年6月到10月,關(guān)于document.all的W3C郵件列表[2]有56封之多。

第一封討論郵件

最后的討論結(jié)果是:在現(xiàn)代瀏覽器中,document.all轉(zhuǎn)化為Boolean的結(jié)果為false。

這樣,上述代碼在現(xiàn)代瀏覽器下就不會(huì)進(jìn)入「老瀏覽器」的邏輯。

總結(jié)

除了以上特性,document.all還有些異于常人的特性,比如:

  • 當(dāng)被作為==和!=操作符的比較對(duì)象時(shí),會(huì)被當(dāng)作undefined
  • typeof document.all === 'undefined'

這些古怪結(jié)果都是為了瀏覽器向下兼容。雖然很多現(xiàn)代瀏覽器都支持document.all,但他已經(jīng)從標(biāo)準(zhǔn)中刪除。

我能想到他當(dāng)前唯一的作用,大概就是和面試官抬杠吧......

參考資料

[1]ES規(guī)范:

https://262.ecma-international.org/5.1/#sec-9.2

[2]W3C郵件列表:

https://www.w3.org/Search/Mail/Public/advanced_search?keywords=typeof+document.all&hdr-1-name=subject&hdr-1-query=&hdr-2-name=from&hdr-2-query=&hdr-3-name=message-id&hdr-3-query=&period_month=&period_year=&index-grp=Public__FULL&index-type=t&type-index=public-html&resultsperpage=100&sortby=date-asc

 

責(zé)任編輯:姜華 來(lái)源: 魔術(shù)師卡頌
相關(guān)推薦

2022-02-23 21:24:21

索引SQL字符

2009-09-04 10:49:19

C#隱式轉(zhuǎn)換

2009-07-21 13:54:55

Scala重載方法隱式轉(zhuǎn)換

2010-02-04 16:47:04

C++隱式轉(zhuǎn)換

2023-08-14 08:35:36

2017-12-20 14:14:16

數(shù)據(jù)庫(kù)MySQL數(shù)據(jù)類型

2023-04-27 09:08:19

JavaScript隱式類型轉(zhuǎn)換

2017-09-13 10:58:51

JavaScript轉(zhuǎn)換規(guī)則

2017-09-05 16:17:35

JavaScript運(yùn)算轉(zhuǎn)換

2023-09-22 09:04:00

C++編程

2010-11-16 15:11:52

Oracle隱式游標(biāo)

2023-12-12 08:50:22

MySQL隱式轉(zhuǎn)換varchar

2015-05-20 12:48:34

戴爾云計(jì)算

2025-02-21 10:46:16

JSForEachAPI

2024-09-26 12:33:29

JSAPI循環(huán)

2010-07-19 09:40:59

SQL Server數(shù)

2019-09-28 22:41:18

OracleMySQL隱式數(shù)據(jù)

2025-04-03 12:30:00

C 語(yǔ)言隱式類型轉(zhuǎn)換代碼

2022-06-01 08:12:32

JS類數(shù)組對(duì)象

2024-08-28 08:50:11

MySQL核心模塊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)