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

10件有關JavaScript讓人費解的事情

開發 前端
JavaScript可算是世界上最流行的編程語言,它曾被 Web 開發設計師貼上噩夢的標簽,雖然真正的噩夢其實是 DOM API,這個被大量的開發與設計師隨手拈來增強他們的 Web 前端的腳本語言,如今越來越被重視,雖則如此,JavaScript 仍然擁有很多讓人費解的東西。

JavaScript 可算是世界上***的編程語言,它曾被 Web 開發設計師貼上噩夢的標簽,雖然真正的噩夢其實是 DOM API,這個被大量的開發與設計師隨手拈來增強他們的 Web 前端的腳本語言,如今越來越被重視,雖則如此,JavaScript 仍然擁有很多讓人費解的東西。

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

它最初叫 Mocha, 接著改名為 LiveScript,***才確定命名為 JavaScript,根據歷史記錄,Java 的命名與 Netscape 和 Sun 之間的合作有關,作為交換條件,Netscape 在他們備受歡迎的瀏覽器中創建了 Java 運行時。值得一提的是,這個名字的出臺幾近一個玩笑,要知道,LiveScript 和 Java 在客戶端腳本方面存在敵對關系。

不管怎么說,人們后來不得不一再澄清的一件事就是,JavaScript 和 Java 毫無關系。

2. Null 是個對象?

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

 

 

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

3. NaN !== NaN

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

 

 

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

4. 全局變量

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

5. 那些統統被探測為 Mozilla User-Agent 的瀏覽器

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

 

 

是否注意到其中的***個單詞 Mozilla/5.0,為什么 Safari 會被探測為 Mozilla,盡管 Safari 后來已經糾正這一問題,但仍然不能解釋為什么它們要這樣誤導開發者。事實上,你會發現,絕大多數瀏覽器把他們的 User Agent 設置為 Mozilla,答案要回到10年前,這更多是一種策略。

User Agent 是一段用來標識當前瀏覽器身份的字符串,世界上***個瀏覽器 Mosaic, 曾這樣標志自己:

 

 

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

 

 

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

 

 

這讓 IE 很被動,因為 Netscape 已經能被很多服務器識別,因此,開發者們干脆希望 IE 被誤認為 Mozilla,然后,再單獨加一個 IE 的標簽。

 

 

如今,幾乎所有瀏覽器都步 IE 后塵,將自己標識為 Mozilla,這大概是一種連鎖反應。

6. 不一致的函數范圍

參看以下代碼:

 

 

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

7. 位操作符

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

& - and

| - or

^ - xor

~ - not

>> - signed right shift

??? - unsigned right shift

<< - left shift

看看***個 & 操作符,使用 && 應該更有效,因為 JavaScript 和 Java 不一樣,JavaScript 沒有整數,需要來回轉換,因此,轉換操作花的時間更長。

8. 太多的空值類型

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

9. 算術問題

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

 

Math

 

為什么會這樣?簡單說,因為 JavaScript 使用 IEEE 標準進行二進制浮點運算,不過,對整數計算是沒問題的。

10. 莫名其妙的代碼錯誤

看看以下兩段代碼:

 

 

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

 

 

如果我們把其中的

 

 

換成

 

 

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

 

 

原文:http://www.cnblogs.com/hnyei/archive/2012/03/23/2413471.html

【編輯推薦】

  1. 面向對象的JavaScript基本知識指南大全
  2. 是時候開始使用JavaScript嚴格模式了
  3. 好用的高質量JavaScript庫一覽

 

 

責任編輯:陳貽新 來源: 寒意的博客
相關推薦

2010-02-25 11:02:29

JavaScript

2011-12-29 09:15:19

開發

2016-09-18 16:13:30

2013-12-05 17:07:29

openSUSEopenSUSE 13安裝

2011-06-24 14:18:40

Firefox 5

2009-05-10 18:44:39

教育程序訪問

2011-08-29 09:52:55

JavaScript

2010-07-27 11:24:51

Flex

2010-09-17 10:31:14

VMworld 201

2011-01-13 10:05:48

Linux安裝軟件

2022-08-08 10:05:30

JavaScript程序員網頁

2009-01-18 09:34:00

2013-04-23 10:42:55

JavaScriptthis

2010-03-31 09:16:28

Oracle10g安裝

2020-10-09 10:51:42

部署

2020-09-01 08:06:54

Kubernetes資源

2012-04-10 10:01:10

Ubuntu安裝事項

2021-12-09 11:59:49

JavaScript前端提案

2014-10-15 10:49:27

程序員

2023-03-19 16:08:44

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品综合网 | 精品一区二区在线视频 | 亚洲三级在线观看 | 午夜视频网站 | 欧美成人精品一区二区男人看 | 国产精品片aa在线观看 | 国内毛片毛片毛片毛片 | 国产精品毛片一区二区三区 | 色必久久 | 国产亚洲一区二区精品 | 久久久久久高清 | 精品国产网| 女朋友的闺蜜3韩国三级 | 中文字幕第九页 | 欧美日韩精品在线一区 | 国产精品波多野结衣 | 成人精品在线 | 2021天天躁夜夜看 | 91中文字幕在线 | 国产一级片免费在线观看 | 亚洲成人av | 9久9久9久女女女九九九一九 | 羞羞视频在线观看 | 日韩免费一区二区 | 91高清在线观看 | 亚洲av毛片成人精品 | a级在线免费观看 | 精品一二区 | 国产视频久久久 | 日本精品在线一区 | 欧美一a一片一级一片 | 欧美 日韩 国产 成人 在线 | 日韩最新网站 | 日韩精品一区二区三区中文字幕 | 黑人巨大精品欧美一区二区免费 | 天天摸天天干 | 一级毛片视频在线观看 | 麻豆久久| 成人羞羞国产免费视频 | 在线国产一区二区 | 婷婷色国产偷v国产偷v小说 |