成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript最讓人費(fèi)解的十件事

開發(fā) 前端
JavaScript可算是世界上最流行的編程語言,如今也越來越被開發(fā)者們所重視,雖則如此,但JavaScript仍然擁有很多讓人費(fèi)解的東西,文章將分析這些難把握的細(xì)微之處。

JavaScript是一種廣泛用于客戶端Web開發(fā)的腳本語言,其可算是世界上***的編程語言,它曾被Web開發(fā)設(shè)計(jì)師貼上噩夢的標(biāo)簽,雖然真正的噩夢其實(shí)是DOM API,也曾經(jīng)有人認(rèn)為JavaScript語法中有很多陷阱,同時其也有很多讓人費(fèi)解的東西。

1. 它以Java命名,但并不是Java

它最初叫Mocha, 接著改名為 LiveScript,***才確定命名為JavaScript,根據(jù)歷史記錄,Java 的命名與 Netscape 和 Sun 之間的合作有關(guān),作為交換條件,Netscape 在他們備受歡迎的瀏覽器中創(chuàng)建了 Java 運(yùn)行時。值得一提的是,這個名字的出臺幾近一個玩笑,要知道,LiveScript 和 Java 在客戶端腳本方面存在敵對關(guān)系,不管怎么說,人們后來不得不一再澄清的一件事就是,JavaScript 和 Java 毫無關(guān)系。

2. Null 是個對象?

看看這段代碼,它返回的是object。

返回是object

這實(shí)在令人費(fèi)解,假如 null 表示空值,它怎么可以是對象?簡單說,它是JavaScript 最初版本的錯誤,這個錯誤甚至被微軟的 JScript 直接借用。

3. NaN !== NaN

NaN,表示一個非數(shù)字的值,然而問題是,NaN不等于任何東西,甚至不等于它自己。

NaN表示一個非數(shù)字值

這顯然不對,事實(shí)上,如果要判斷一個值確實(shí)是 NaN,你需要用 isNaN() 函數(shù)。

4. 全局變量

對全局變量的依賴一直被視為 JavaScript 最壞的部分(ECMA 的 JavaScript 5 已經(jīng)去掉了全局變量,請參閱 ECMA 推出 JavaScript 5 - 譯者注)。對簡單的頁面,這無所謂,但復(fù)雜的頁面,如果包含大量 JavaScript 腳本,你很難知道某個全局變量是在哪里聲明的,如果幾個全局變量不小心重名,就會引發(fā)錯誤。

5. 那些統(tǒng)統(tǒng)被探測為Mozilla User-Agent 的瀏覽器

必須承認(rèn),事實(shí)上,這不是JavaScript 的錯,是各個瀏覽器有意為之。比如,以下是用JavaScript 探測Safari 時得到的結(jié)果:

用JavaScript 探測Safari

是否注意到其中的***個單詞 Mozilla/5.0,為什么 Safari 會被探測為 Mozilla,盡管 Safari 后來已經(jīng)糾正這一問題,但仍然不能解釋為什么它們要這樣誤導(dǎo)開發(fā)者。事實(shí)上,你會發(fā)現(xiàn),絕大多數(shù)瀏覽器把他們的 User Agent 設(shè)置為 Mozilla,答案要回到10年前,這更多是一種策略。User Agent 是一段用來標(biāo)識當(dāng)前瀏覽器身份的字符串,世界上***個瀏覽器Mosaic,曾這樣標(biāo)志自己:

瀏覽器Mosaic這樣標(biāo)志自己

這很合理,因此當(dāng) Netscape 出來的時候,它保留了Mosaic這個傳統(tǒng),還在后面添加了一個加密方式部分。

Mosaic加密方式

到目前為止,一切安好,直到 IE3 發(fā)布,當(dāng) IE3 發(fā)布的時候,Netscape 正如日中天,那時,很多服務(wù)器和程序已經(jīng)部署了客戶端探測機(jī)制,以便認(rèn)出 Netscape,雖然現(xiàn)在看來,這很值得爭議,但當(dāng)時并沒什么。當(dāng)IE初次推出它們的User Agent 標(biāo)志的時候,是這個樣子:

最初的User Agent 標(biāo)志

這讓 IE 很被動,因?yàn)?Netscape 已經(jīng)能被很多服務(wù)器識別,因此,開發(fā)者們干脆希望 IE 被誤認(rèn)為 Mozilla,然后,再單獨(dú)加一個IE的標(biāo)簽。

IE標(biāo)簽

如今,幾乎所有瀏覽器都步 IE 后塵,將自己標(biāo)識為 Mozilla,這大概是一種連鎖反應(yīng)。 #p#

6. 不一致的函數(shù)范圍

參看以下代碼:

不一致的函數(shù)范圍

foo(bar.method) 返回結(jié)果不同原因是,method 函數(shù)是被當(dāng)作 windows 對象,而不是 bar 下的對象調(diào)用的。要解決這個問題,我們必須從傳遞的匿名函數(shù)中調(diào)用 bar.method() 。

7. 位操作符

JavaScript 和 Java 有不少共同之處,如位操作:

  1. ◦& - and  
  2. ◦| - or  
  3. ◦^ - xor  
  4. ◦~ - not  
  5. >> - signed right shift  
  6. ◦??? - unsigned right shift  
  7. << - left shift 

看看***個 & 操作符,使用 && 應(yīng)該更有效,因?yàn)?JavaScript 和 Java 不一樣,JavaScript 沒有整數(shù),需要來回轉(zhuǎn)換,因此,轉(zhuǎn)換操作花的時間更長。

8. 太多的空值類型

諸如 null, false, undefined 一類的值幾乎表示同樣的意思,它們之間的不同又讓人很迷惑。

9. 算術(shù)問題

雖然JavaScript包含很多算術(shù)操作,但你不妨運(yùn)行一下下面的算式,".2+.4" 應(yīng)該等于 ".6" 是不是,然而返回的確是 "0.6000000000000001"。JavaScript 在小數(shù)計(jì)算訪問存在一些小問題。

JavaScript算術(shù)操作

為什么會這樣?簡單說,因?yàn)?JavaScript 使用 IEEE 標(biāo)準(zhǔn)進(jìn)行二進(jìn)制浮點(diǎn)運(yùn)算,不過,對整數(shù)計(jì)算是沒問題的。 #p#

10. 莫名其妙的代碼錯誤

看看以下兩段代碼:

它們應(yīng)該是一樣的,只是 { 位置不同而已,是吧。然而我們再看下面的代碼:

莫名其妙的代碼錯誤

如果我們把其中的:

代碼實(shí)例

換成:

代碼實(shí)例

就會引發(fā)錯誤,這是因?yàn)?JavaScript 有一個功能,會糾正它認(rèn)為錯誤的代碼書寫,它會自作聰明地在 return 這個詞后面插入一個 ";" ,錯誤因此而生。

代碼實(shí)例

【編輯推薦】

  1. 詳解Javascript中checkbox樹的功能
  2. 詳解Javascript事件驅(qū)動的來龍去脈
  3. Javascript的this關(guān)鍵字與scope詳解
  4. 淺析利用Javascript獲取隨機(jī)顏色
  5. 詳解Javascript中的Array擴(kuò)展
責(zé)任編輯:王曉東 來源: comsharp
相關(guān)推薦

2009-05-26 09:48:34

2025-02-10 08:59:54

2009-04-24 08:17:15

MySpaceCEO社交網(wǎng)站

2016-12-26 11:34:23

2020-08-10 15:30:24

XDR網(wǎng)絡(luò)安全網(wǎng)絡(luò)威脅

2022-10-28 08:37:03

UbuntuLinux

2009-06-26 09:36:06

2015-10-26 16:34:08

安裝Ubuntu 15.1Linux

2017-05-02 11:36:00

Java

2013-01-21 09:58:41

vSphere網(wǎng)絡(luò)設(shè)置VMware vSph

2012-09-29 10:56:37

Google技術(shù)先驅(qū)

2023-05-18 15:50:59

Arch Linux命令

2015-03-04 14:54:47

DockerIT管理基礎(chǔ)設(shè)施

2025-04-10 07:00:00

GenAIChatGPT人工智能

2010-07-28 16:12:41

2013-11-13 11:05:41

2014-08-12 09:22:05

程序員

2012-04-27 09:24:39

Google Driv云存儲

2023-11-28 11:24:51

2018-06-19 07:58:35

區(qū)塊鏈比特幣專利申請
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 97碰碰碰 | 亚洲综合区 | 国产精品国产a级 | 自拍视频网 | 日韩毛片 | 午夜影院在线观看版 | 91免费高清视频 | 欧洲一区二区视频 | 日韩av在线一区 | 中文字幕精品视频 | 欧美三区 | 国产精品精品视频一区二区三区 | 日韩理论电影在线观看 | 日韩成人av在线 | 日韩一级免费大片 | 国产午夜亚洲精品不卡 | 午夜精品影院 | 亚洲看片网站 | 日韩视频在线播放 | 国产高清精品一区二区三区 | 国产精品久久亚洲7777 | 精品成人69xx.xyz | 一区二区中文字幕 | 999www视频免费观看 | 精品一区二区免费视频 | 国产亚洲一区二区精品 | 国产精品一区久久久久 | 成人免费三级电影 | 九九热免费在线观看 | 国产精品久久久99 | 精品真实国产乱文在线 | 911网站大全在线观看 | 97国产超碰 | 理论片午午伦夜理片影院 | 久久精品黄色 | 国产欧美一区二区三区久久 | 日韩免费1区二区电影 | 成人毛片在线视频 | 欧州一区| 九九九久久国产免费 | 一区二区三区在线 |