欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript 10件讓人費解的事情

 更新時間:2010年02月15日 15:16:17   作者:  
JavaScript 可算是世界上最流行的編程語言,它曾被 Web 開發(fā)設(shè)計師貼上噩夢的標(biāo)簽,雖然真正的噩夢其實是 DOM API,這個被大量的開發(fā)與設(shè)計師隨手拈來增強他們的 Web 前端的腳本語言,如今越來越被重視,雖則如此,JavaScript 仍然擁有很多讓人費解的東西。

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

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

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

2. Null 是個對象?

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

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

3. NaN !== NaN

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

這顯然不對,事實上,如果要判斷一個值確實是 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),事實上,這不是 JavaScript  的錯,是各個瀏覽器有意為之。比如,以下是用 JavaScript 探測 Safari 時得到的結(jié)果:

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

User Agent 是一段用來標(biāo)識當(dāng)前瀏覽器身份的字符串,世界上第一個瀏覽器 Mosaic, 曾這樣標(biāo)志自己:

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

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

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

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

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

參看以下代碼:

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

7. 位操作符

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

  • & - and
  • | - or
  • ^ - xor
  • ~ - not
  • >> - signed right shift
  • ??? - unsigned right shift
  • << - left shift

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

8. 太多的空值類型

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

9. 算術(shù)問題

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

Math

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

10. 莫名其妙的代碼錯誤

看看以下兩段代碼:

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

如果我們把其中的

換成

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

相關(guān)文章

  • js兼容火狐顯示上傳圖片預(yù)覽效果的方法

    js兼容火狐顯示上傳圖片預(yù)覽效果的方法

    這篇文章主要介紹了js兼容火狐顯示上傳圖片預(yù)覽效果的方法,涉及js調(diào)用FileReader實現(xiàn)圖片預(yù)覽功能的技巧,需要的朋友可以參考下
    2015-05-05
  • three.js?Mool3D模型類的使用

    three.js?Mool3D模型類的使用

    這篇文章主要為大家介紹了three.js?Mool3D模型類的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Qt6基于Qml的文件對話框演示效果

    Qt6基于Qml的文件對話框演示效果

    這篇文章主要介紹了Qt6基于Qml的文件對話框演示,包括打開單個文件配置和打開多個文件配置及保存文件配置的方法,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • 微信小程序把百度地圖坐標(biāo)轉(zhuǎn)換成騰訊地圖坐標(biāo)過程詳解

    微信小程序把百度地圖坐標(biāo)轉(zhuǎn)換成騰訊地圖坐標(biāo)過程詳解

    這篇文章主要介紹了微信小程序把百度地圖坐標(biāo)轉(zhuǎn)騰訊地圖坐標(biāo)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • JavaScript實現(xiàn)簡單輪播圖效果

    JavaScript實現(xiàn)簡單輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)圖片輪播,左右翻轉(zhuǎn),圖片切換顯示等效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • javascript實現(xiàn)緩動動畫效果

    javascript實現(xiàn)緩動動畫效果

    這篇文章主要為大家詳細(xì)介紹了javascript實現(xiàn)緩動動畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉查找樹的定義與表示方法

    JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉查找樹的定義與表示方法

    這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉查找樹的定義與表示方法,簡單講述了二叉查找樹的概念、特點及javascript針對二叉查找樹的創(chuàng)建、插入、遍歷等操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • JavaScript數(shù)據(jù)可視化:ECharts制作地圖

    JavaScript數(shù)據(jù)可視化:ECharts制作地圖

    這篇文章主要介紹了Echarts實現(xiàn)可視化地圖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • js 中的switch表達式使用示例

    js 中的switch表達式使用示例

    switch 這種表達式在很多語言中都有,比如java, C等待, 使用switch比使用if else 來得方便,來得清晰,下面為大家詳細(xì)介紹下其具體的使用,感興趣的朋友可以參考下
    2013-09-09
  • 微信小程序日期選擇器使用詳解

    微信小程序日期選擇器使用詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序日期選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評論