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

那些容易被忽視的JavaScript細節(jié)總結

開發(fā) 前端
在這之前犀牛書已經(jīng)翻閱了差不多六七遍,很多內(nèi)容都已經(jīng)深深地刻在了腦海里,但時間久了也會忘記些,時而鞏固復習下,畢竟是前端最基礎部分。

《JavaScript 權威指南》這本書從第四版開始,一直到第六版,每個版本我都逐字逐句讀過幾遍,然而每一遍下來的感受卻完全不一樣。上上周的周一,再次翻開了這本犀牛書,這一次我是帶著批判精神和研究精神過來的,所以看的時候也寫下了一些感受和筆記,都是些容易被忽略的點,部分內(nèi)容犀牛書上不一定有提到。

之前都發(fā)在 微博 上,稍微整理了一番,放在這里,方便閱讀。

語句/表達式

換個角度理解語句(statemaents)和表達式(expressions):表達式不會改變程序的運行狀態(tài),而語句會。還有一種叫做表達式語句,可以理解為表達式和語句的交集,如({a:1})"use strict;"等,我覺得沒必要死扣,意義不大。

字符集

ES3 要求 JS 必須實現(xiàn) Unicode 2.1 及后續(xù)版本,而 ES5 只要求支持 Unicode 3 及后續(xù)版本。Unicode 字符 2005 年超過了十萬字符,至今仍在不斷增修,***版本是 8.0。

分號

如果你寫 JS 代碼不喜歡帶分號,而又搞不清什么時候必須加分號,可以這么做:在以 “(“、”[“ 、”/“、”+”、”-“ 開頭的語句前面都加上一個分號,如 ;(a + b).toString()

進制

ES5 嚴格模式中禁止使用八進制。目前各種引擎對 JS 的實現(xiàn)是存在差異的,部分支持八進制,部分不支持。八進制被禁止的原因:String 和 Number 之間經(jīng)常被相互轉換,而以0 開頭的八進制數(shù)據(jù)特別容易讓人迷惑,也容易讓機器迷惑,比如 09 是該被轉換成 9 還是直接報錯?十六進制不存在這個問題,如 0x98。更多信息參閱 這里

精度

JS 采用 IEEE-754 浮點數(shù)表示法,這是一種二進制表示法,由于精度原因 JS 不能表示所有的實數(shù)。它能展示的浮點數(shù)個數(shù)是有限的,比如它不能準確地表示三分之一的數(shù)值字面量。這也導致了它在浮點數(shù)的計算上存在誤差,如 0.3-0.2 != 0.2-0.1,因為在計算的過程中,存在數(shù)據(jù)的溢出,丟失了精度。

null/undefined

系統(tǒng)級、出乎意料的或者類似錯誤的值的空缺使用 undefined,而程序級、正常的或意料之中的值的空缺使用 null。平時編程給變量賦值時,不要使用 undefined 而應該用 null。值得注意的是 ES3 中的 undefined 是可以被重新賦值的,ES5 修復了這個 bug。通常我們使用 void 0 來還原/代替 undefined 的值。

eval

eval 是個不好把握的東西,它在 ES3 中更像是 Function,而在 ES5 中更像是一個運算符(嚴格模式下不允許設置別名,否則報錯,且將其作為保留字)。實際上 ES3 中也不允許給 eval 設置別名,然而很多實現(xiàn)卻依然允許,并將其作為全局代碼來執(zhí)行,瀏覽器尤其是 IE 對它實現(xiàn)相當混亂,沒有什么規(guī)律可循,不過 IE 中提供了一個 execScript 函數(shù),類似全局的 eval,這個函數(shù)每次執(zhí)行都會返回 null。

需要使用 eval 的場景并不多,盡量少用,一般需求使用 new Function 就能滿足。

引用

刪除屬性存在的坑:a = {n: {x: 2}}, b = a.n; delete a.n; 這段代碼執(zhí)行之后,b.x 依然等于 2,原因是 {x:2} 這個對象被 a 和 b 同時引用,delete 指令只刪除了 a 對它的引用,b 上的引用依然存在。這種問題有可能造成內(nèi)存泄漏。

Object 擴展

Object 的 freeze 方法過于嚴格;defineGetter/lookupGetter 和對應的 Setter 是很好用的屬性。

toLocalString

如圖,你可能還不知道 JavaScript 的 toLocaleString 還可以這么玩。

this語義

this 上下文只存在兩種語義,一種是被當作方法調(diào)用,this 指向調(diào)用它的對象;一種是作為函數(shù)調(diào)用,指向 Global 對象(嚴格模式下為 undefined)。它沒有作用域的限制,如下圖所示,a 由于是作為函數(shù)被調(diào)用,所以它指向的是 window,故而返回 false。

類型

JavaScript 可以被調(diào)用執(zhí)行的均為 Function 類型,但是也存在可調(diào)用的 Object,如低版本 IE 中的一些宿主對象:document.getElementById、alert 等,在很多瀏覽器中 typeof RegExp 同樣是 Object。這絕對是一個不標準的實現(xiàn),在瀏覽器摒棄/修正這些錯誤類型之前應該盡量少依賴它們。

IE8 getter/setter

Object.defineProperty 雖然是 ES5 的東西,早在 IE8 就已經(jīng)支持了,但支持得并不完善,比如 writable、enumerable、configurable 這些配置項設置就無效,IE8 下主要支持 getter/setter。

JSON.stringify

JSON.stringify 接受三個參數(shù),很多人都知道第三個參數(shù)可以設置空白字符來美化輸出,但是你可能不知道第二個參數(shù)的作用,它為 {Array|Function} 類型,如果為 Array 則用于過濾 key,如果為 Function 則可以對 value 做處理,如圖所示。

Symbol

ES6 中添加了一種新的數(shù)據(jù)類型,Symbol,它是一種原始數(shù)據(jù)類型(圖一),具備對象的特性(圖二),并可以指向同一個引用(圖三),能夠作為對象的 key 但不可枚舉(圖四),內(nèi)置的 Symbol 會影響程序的執(zhí)行(圖五),Symbol.iterator 是個舉足輕重的符號,能夠讓元素具備迭代屬性(圖六),花樣很多。

附圖見:http://weibo.com/1812166904/DqMwR8O6z

偽數(shù)組添加 Symbol.iterator 的幾個辦法:鴨式辨型的 iterator 函數(shù)、yield 函數(shù)和直接使用 Array 的遍歷符號。

附圖見:http://weibo.com/1812166904/DqMBYebPw

Set/WeakSet

Set/WeakSet 這種數(shù)據(jù)結構,不能說沒用,但確實也沒啥大用,前者就是個不允許出現(xiàn)重復成員的數(shù)組,順便還帶了點 ES6 的特性,后者雖說可以一定程度上防止內(nèi)存泄漏,但是也容易出錯,比如某個引用已經(jīng)被垃圾回收了,再去使用它可能就返回 null。它們都是 ES6 的配套產(chǎn)物。而 Map/WeakMap 倒是兩個非常不錯的設計,常規(guī)的 Object 結構都為 String-Val 鍵值對,而它擴展為 AllType-Val,任意類型都可以作為它的 Key,無論是服務端編程還是客戶端編程,這個屬性都帶來了極大的便利性。

正則

理解正則零寬的含義:正則中所謂的零寬斷言,類似于錨點字符,它們匹配指定的位置而不會匹配內(nèi)容,如 ^ 匹配開頭,$ 匹配結尾,\b 匹配單詞邊界;(?=p) 匹配「接下來的字符與 p 匹配」的位置,(?!p) 匹配「接下來的字符不與 p 匹配」的位置。\b 字符匹配單詞邊界,實際上就是匹配 \w 與 \W 之間的位置(\w 匹配 [a-zA-Z0-9])。很少會有人用到 \B,它匹配的是非單詞邊界位置,簡單理解就是 \w & \w 之間位置或者 \W & \W 之間位置。

持續(xù)學習和分享…

內(nèi)容都是片段化的分享,比較多,也比較雜,就沒有全部列舉出來,感興趣的同學可以 follow 我的 微博,我的想法和筆記都會在上面同步。

感受

在這之前犀牛書已經(jīng)翻閱了差不多六七遍,很多內(nèi)容都已經(jīng)深深地刻在了腦海里,但時間久了也會忘記些,時而鞏固復習下,畢竟是前端最基礎部分。

帶著問題去看書,收獲是完全不一樣的。犀牛書不難啃,難的是你對這些知識點的理解深度。

責任編輯:張燕妮 來源: Barret李靖
相關推薦

2014-04-10 16:33:48

iOS 7新特性

2017-08-15 17:09:31

Linux命令

2012-11-28 15:53:16

災難恢復

2022-11-29 12:11:25

2023-08-04 14:31:43

Python核心項目

2024-02-29 07:48:55

Python編程語言上下文管理器

2017-11-27 12:08:10

后端服務spring mvc項目

2019-01-18 13:22:10

布線事項網(wǎng)絡

2009-11-17 16:14:28

無線路由器

2023-11-07 12:25:22

2009-11-09 09:57:39

交換機路由器

2019-08-30 12:01:48

2013-05-31 02:18:47

ASP.NET.Net

2010-01-28 10:11:18

IT金飯碗

2013-01-22 09:21:28

云計算成本私房云

2013-08-01 13:55:55

Android 4.3新特性

2023-10-24 18:05:00

2010-01-22 15:45:57

局域網(wǎng)交換機

2023-08-08 14:28:02

2011-04-29 09:35:43

打印紙打印機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: cao视频| 91成人小视频 | 亚洲精品一区二区在线观看 | 91久久精品一区二区三区 | 精品久久久久久亚洲精品 | 黄色三级毛片 | 日韩欧美一区二区三区在线播放 | 久久久精 | 一区二区精品在线 | 国产精品视频一区二区三区 | 亚洲经典一区 | 亚洲精品一区二区在线观看 | 国产午夜在线观看 | 黄色男女网站 | 97起碰| 午夜影院在线观看 | 久久一级免费视频 | 91一区 | 国产98色在线 | 日韩 | 欧美激情免费在线 | 亚洲一二三区不卡 | 中国一级特黄真人毛片免费观看 | 欧美1—12sexvideos | 欧美福利在线 | 91免费高清视频 | 九九热精品视频在线观看 | 五月天激情电影 | 免费看一区二区三区 | 国产亚洲人成a在线v网站 | 日韩精品不卡 | 91欧美| 日本三级电影免费观看 | 国产精品视频一区二区三区四蜜臂 | 成人在线视频免费观看 | 一区二区电影 | 国产精品不卡一区 | 少妇无套高潮一二三区 | 久草精品视频 | 操操操操操 | 亚洲国产成人精品女人久久久 | 一本一道久久a久久精品蜜桃 |