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

10件有關(guān)JavaScript讓人費(fèi)解的事情

開(kāi)發(fā) 前端
JavaScript可算是世界上最流行的編程語(yǔ)言,它曾被 Web 開(kāi)發(fā)設(shè)計(jì)師貼上噩夢(mèng)的標(biāo)簽,雖然真正的噩夢(mèng)其實(shí)是 DOM API,這個(gè)被大量的開(kāi)發(fā)與設(shè)計(jì)師隨手拈來(lái)增強(qiáng)他們的 Web 前端的腳本語(yǔ)言,如今越來(lái)越被重視,雖則如此,JavaScript 仍然擁有很多讓人費(fèi)解的東西。

JavaScript 可算是世界上***的編程語(yǔ)言,它曾被 Web 開(kāi)發(fā)設(shè)計(jì)師貼上噩夢(mèng)的標(biāo)簽,雖然真正的噩夢(mèng)其實(shí)是 DOM API,這個(gè)被大量的開(kāi)發(fā)與設(shè)計(jì)師隨手拈來(lái)增強(qiáng)他們的 Web 前端的腳本語(yǔ)言,如今越來(lái)越被重視,雖則如此,JavaScript 仍然擁有很多讓人費(fèi)解的東西。

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

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

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

2. Null 是個(gè)對(duì)象?

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

 

 

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

3. NaN !== NaN

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

 

 

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

4. 全局變量

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

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

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

 

 

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

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

 

 

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

 

 

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

 

 

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

 

 

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

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

參看以下代碼:

 

 

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

7. 位操作符

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

& - and

| - or

^ - xor

~ - not

>> - signed right shift

??? - unsigned right shift

<< - left shift

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

8. 太多的空值類(lèi)型

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

9. 算術(shù)問(wèn)題

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

 

Math

 

為什么會(huì)這樣?簡(jiǎn)單說(shuō),因?yàn)?JavaScript 使用 IEEE 標(biāo)準(zhǔn)進(jìn)行二進(jìn)制浮點(diǎn)運(yùn)算,不過(guò),對(duì)整數(shù)計(jì)算是沒(méi)問(wèn)題的。

10. 莫名其妙的代碼錯(cuò)誤

看看以下兩段代碼:

 

 

它們應(yīng)該是一樣的,只是 { 位置不同而已,是吧。然而我們?cè)倏聪旅娴拇a:

 

 

如果我們把其中的

 

 

換成

 

 

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

 

 

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

【編輯推薦】

  1. 面向?qū)ο蟮腏avaScript基本知識(shí)指南大全
  2. 是時(shí)候開(kāi)始使用JavaScript嚴(yán)格模式了
  3. 好用的高質(zhì)量JavaScript庫(kù)一覽

 

 

責(zé)任編輯:陳貽新 來(lái)源: 寒意的博客
相關(guān)推薦

2010-02-25 11:02:29

JavaScript

2016-09-18 16:13:30

2011-12-29 09:15:19

開(kāi)發(fā)

2009-05-10 18:44:39

教育程序訪問(wèn)

2013-12-05 17:07:29

openSUSEopenSUSE 13安裝

2011-06-24 14:18:40

Firefox 5

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程序員網(wǎng)頁(yè)

2009-01-18 09:34:00

2013-04-23 10:42:55

JavaScriptthis

2010-03-31 09:16:28

Oracle10g安裝

2021-12-09 11:59:49

JavaScript前端提案

2020-10-09 10:51:42

部署

2020-09-01 08:06:54

Kubernetes資源

2012-04-10 10:01:10

Ubuntu安裝事項(xiàng)

2019-02-15 14:47:47

Java程序員內(nèi)存

2014-10-15 10:49:27

程序員
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 日韩在线播放一区 | 色婷综合网 | 日韩亚洲视频在线 | 色影视 | 中文在线一区二区 | 中文字幕在线一区二区三区 | 欧美精品久久久久久久久久 | 亚洲精品一区二区在线观看 | 久久精品成人 | www.久久久.com | 国产精品96久久久久久 | 欧美a在线观看 | 日韩电影一区 | 婷婷久久一区 | 99免费精品视频 | 麻豆久久久久久 | 亚洲国产精品成人无久久精品 | 一区二区高清 | 黄色片在线观看网址 | 国产精品一区在线 | 久久久2o19精品 | 中文字幕一区二区三区日韩精品 | 日韩视频在线免费观看 | 久久国内精品 | 精品视频在线免费观看 | 免费黄色网址视频 | 免费一区 | 自拍偷拍第一页 | 久久成人18免费网站 | 亚洲精品1区 | 日韩久久久一区二区 | 亚洲精品女人久久久 | aaa在线| 成人亚洲视频 | 亚洲欧美日韩精品久久亚洲区 | 国产一区久久 | 欧美区在线观看 | 一区二区久久 | 人人做人人澡人人爽欧美 | 久久久久国产一级毛片高清网站 | 成人小视频在线观看 |