欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

javascript基礎(chǔ)入門,javascript基礎(chǔ)入門菜鳥

《JavaScript從入門到精通第二版》pdf下載在線閱讀全文,求百度網(wǎng)盤云資源

《JavaScript從入門到精通第二版》百度網(wǎng)盤pdf最新全集下載:

專注于為中小企業(yè)提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)鐘樓免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

鏈接:

?pwd=zk58 提取碼:zk58

簡(jiǎn)介:《JavaScript從入門到精通(第3版)/軟件開發(fā)視頻大講堂》共分25章,包括初識(shí)JavaScript、JavaScript基礎(chǔ)、流程控制、函數(shù)、JavaScript對(duì)象與數(shù)組、字符串與數(shù)值處理對(duì)象、正則表達(dá)式、程序調(diào)試與錯(cuò)誤處理、事件處理、文檔(document)對(duì)象、文檔對(duì)象模型(DOM對(duì)象)、window窗口對(duì)象、級(jí)聯(lián)樣式表、表單和表單元素、頁面打印、使用Cookie、圖像處理、瀏覽器檢測(cè)、嵌入式對(duì)象、JavaScript中的XML、JavaScript的安全、Ajax技術(shù)、iQuery技術(shù)、常用前端框架簡(jiǎn)介、JavaScript+Ajax+iQuery網(wǎng)頁開發(fā)等。書中的大多數(shù)知識(shí)點(diǎn)都結(jié)合具體實(shí)例進(jìn)行介紹,涉及的程序代碼給出了詳細(xì)的注釋,讀者可輕松領(lǐng)會(huì)JavaScript程序開發(fā)的精髓,快速提高開發(fā)技能。 ?

TypeScript 入門指南

新系列 深入淺出TypeScript 來了,本系列至少20+篇。本文為第一篇,來介紹一下TypeScript 以及常見的類型。

TypeScript是一門由微軟推出的開源的、跨平臺(tái)的編程語言。它是JavaScript的超集,擴(kuò)展了 JavaScript 的語法,最終會(huì)被編譯為JavaScript代碼。

TypeScript的主要特性:

TypeScript 主要是為了實(shí)現(xiàn)以下兩個(gè)目標(biāo):

下面就來看看這兩個(gè)目標(biāo)是如何實(shí)現(xiàn)的。

為什么要給JavaScript加上類型呢?

我們知道,JavaScript是一種輕量級(jí)的解釋性腳本語言。也是弱類型、動(dòng)態(tài)類型語言,允許隱式轉(zhuǎn)換,只有運(yùn)行時(shí)才能確定變量的類型。正是因?yàn)樵谶\(yùn)行時(shí)才能確定變量的類型,JavaScript代碼很多錯(cuò)誤在運(yùn)行時(shí)才能發(fā)現(xiàn)。TypeScript在JavaScript的基礎(chǔ)上,包裝了類型機(jī)制,使其變身成為 靜態(tài)類型 語言。在 TypeScript 中,不僅可以輕易復(fù)用 JavaScript 的代碼、最新特性,還能使用可選的靜態(tài)類型進(jìn)行檢查報(bào)錯(cuò),使得編寫的代碼更健壯、更易于維護(hù)。

下面是 JavaScript 項(xiàng)目中最常見的十大錯(cuò)誤,如果使用 TypeScript,那么在 編寫階段 就可以發(fā)現(xiàn)并解決很多 JavaScript 錯(cuò)誤了:

類型系統(tǒng)能夠提高代碼的質(zhì)量和可維護(hù)性,經(jīng)過不斷的實(shí)踐,以下兩點(diǎn)尤其需要注意:

可以認(rèn)為,在所有操作符之前,TypeScript 都能檢測(cè)到接收的類型(在代碼運(yùn)行時(shí),操作符接收的是實(shí)際數(shù)據(jù);在靜態(tài)檢測(cè)時(shí),操作符接收的則是類型)是否被當(dāng)前操作符所支持。當(dāng) TypeScript 類型檢測(cè)能力覆蓋到所有代碼后,任意破壞約定的改動(dòng)都能被自動(dòng)檢測(cè)出來,并提出類型錯(cuò)誤。因此,可以放心地修改、重構(gòu)業(yè)務(wù)邏輯,而不用擔(dān)憂因?yàn)榭紤]不周而犯下低級(jí)錯(cuò)誤。

在一些語言中,類型總是有一些不必要的復(fù)雜的存在方式,而 TypeScript 盡可能地降低了使用門檻,它是通過如下方式來實(shí)現(xiàn)的。

TypeScript 與 JavaScript 本質(zhì)并無區(qū)別,我們可以將 TypeScipt 理解為是一個(gè)添加了類型注解的 JavaScript,為JavaScript代碼提供了編譯時(shí)的類型安全。

實(shí)際上,TypeScript 是一門“ 中間語言 ”,因?yàn)樗罱K會(huì)轉(zhuǎn)化為JavaScript,再交給瀏覽器解釋、執(zhí)行。不過 TypeScript 并不會(huì)破壞 JavaScript 原有的體系,只是在 JavaScript 的基礎(chǔ)上進(jìn)行了擴(kuò)展。

準(zhǔn)確的說,TypeScript 只是將JavaScript中的方法進(jìn)行了標(biāo)準(zhǔn)化處理:

這段代碼在TypeScript中就會(huì)報(bào)錯(cuò),因?yàn)門S會(huì)知道a是一個(gè)數(shù)字類型,不能將其他類型的值賦值給a,這種類型的推斷是很有必要的。

上面說了,TypeScript會(huì)盡可能安全的推斷類型。我們也可以使用類型注釋,以實(shí)現(xiàn)以下兩件事:

在一些語言中,類型總是有一些不必要的復(fù)雜的存在方式,而 TypeScript 的類型是結(jié)構(gòu)化的。比如下面的例子中,函數(shù)會(huì)接受它所期望的參數(shù):

為了便于把 JavaScript 代碼遷移至 TypeScript,即使存在編譯錯(cuò)誤,在默認(rèn)的情況下,TypeScript 也會(huì)盡可能的被編譯為 JavaScript 代碼。因此,我們可以將JavaScript代碼逐步遷移至 TypeScript。

雖然 TypeScript 是 JavaScript 的超集,但它始終緊跟ECMAScript標(biāo)準(zhǔn),所以是支持ES6/7/8/9 等新語法標(biāo)準(zhǔn)的。并且,在語法層面上對(duì)一些語法進(jìn)行了擴(kuò)展。TypeScript 團(tuán)隊(duì)也正在積極的添加新功能的支持,這些功能會(huì)隨著時(shí)間的推移而越來越多,越來越全面。

雖然 TypeScript 比較嚴(yán)謹(jǐn),但是它并沒有讓 JavaScript 失去其靈活性。TypeScript 由于兼容 JavaScript 所以靈活度可以媲美 JavaScript,比如可以在任何地方將類型定義為 any(當(dāng)然,并不推薦這樣使用),畢竟 TypeScript 對(duì)類型的檢查嚴(yán)格程度是可以通過 tsconfig.json 來配置的。

在搭建TypeScript環(huán)境之前,先來看看適合TypeScript的IDE,這里主要介紹Visual Studio Code,筆者就一直使用這款編輯器。

VS Code可以說是微軟的親兒子了,其具有以下優(yōu)勢(shì):

因?yàn)?VS Code 中內(nèi)置了特定版本的 TypeScript 語言服務(wù),所以它天然支持 TypeScript 語法解析和類型檢測(cè),且這個(gè)內(nèi)置的服務(wù)與手動(dòng)安裝的 TypeScript 完全隔離。因此, VS Code 支持在內(nèi)置和手動(dòng)安裝版本之間動(dòng)態(tài)切換語言服務(wù),從而實(shí)現(xiàn)對(duì)不同版本的 TypeScript 的支持。

如果當(dāng)前應(yīng)用目錄中安裝了與內(nèi)置服務(wù)不同版本的 TypeScript,我們就可以點(diǎn)擊 VS Code 底部工具欄的版本號(hào)信息,從而實(shí)現(xiàn) “use VS Code's Version” 和 “use Workspace's Version” 兩者之間的隨意切換。

除此之外,VS Code 也基于 TypeScript 語言服務(wù)提供了準(zhǔn)確的代碼自動(dòng)補(bǔ)全功能,并顯示詳細(xì)的類型定義信息,大大的提升了我們的開發(fā)效率。

1)全局安裝TypeScript:

2)初始化配置文件:

執(zhí)行之后,項(xiàng)目根目錄會(huì)出現(xiàn)一個(gè) tsconfig.json 文件,里面包含ts的配置項(xiàng)(可能因?yàn)榘姹静煌渲寐杂胁煌?/p>

可以在 package.json 中加入script命令:

3)編譯ts代碼:

TSLint 是一個(gè)通過 tslint.json 進(jìn)行配置的插件,在編寫TypeScript代碼時(shí),可以對(duì)代碼風(fēng)格進(jìn)行檢查和提示。如果對(duì)代碼風(fēng)格有要求,就需要用到TSLint了。其使用步驟如下: (1)在全局安裝TSLint:

(2)使用TSLint初始化配置文件:

執(zhí)行之后,項(xiàng)目根目錄下多了一個(gè) tslint.json 文件,這就是TSLint的配置文件了,它會(huì)根據(jù)這個(gè)文件對(duì)代碼進(jìn)行檢查,生成的 tslint.json 文件有下面幾個(gè)字段:

這些字段的含義如下;

在說TypeScript數(shù)據(jù)類型之前,先來看看在TypeScript中定義數(shù)據(jù)類型的基本語法。

在語法層面,缺省類型注解的 TypeScript 與 JavaScript 完全一致。因此,可以把 TypeScript 代碼的編寫看作是為 JavaScript 代碼添加類型注解。

在 TypeScript 語法中,類型的標(biāo)注主要通過類型后置語法來實(shí)現(xiàn):“ 變量: 類型 ”

在 JavaScript 中,原始類型指的是 非對(duì)象且沒有方法 的數(shù)據(jù)類型,包括:number、boolean、string、null、undefined、symbol、bigInt。

它們對(duì)應(yīng)的 TypeScript 類型如下:

JavaScript原始基礎(chǔ)類型TypeScript類型 numbernumber booleanboolean stringstring nullnull undefinedundefined symbolsymbol bigIntbigInt

需要注意 number 和 Number 的區(qū)別:TypeScript中指定類型的時(shí)候要用 number ,這是TypeScript的類型關(guān)鍵字。而 Number 是 JavaScript 的原生構(gòu)造函數(shù),用它來創(chuàng)建數(shù)值類型的值,這兩個(gè)是不一樣的。包括 string 、 boolean 等都是TypeScript的類型關(guān)鍵字,而不是JavaScript語法。

TypeScript 和 JavaScript 一樣,所有數(shù)字都是 浮點(diǎn)數(shù) ,所以只有一個(gè) number 類型。

TypeScript 還支持 ES6 中新增的二進(jìn)制和八進(jìn)制字面量,所以 TypeScript 中共支持 2、8、10和16 這四種進(jìn)制的數(shù)值:

字符串類型可以使用單引號(hào)和雙引號(hào)來包裹內(nèi)容,但是如果使用 Tslint 規(guī)則,會(huì)對(duì)引號(hào)進(jìn)行檢測(cè),使用單引號(hào)還是雙引號(hào)可以在 Tslint 規(guī)則中進(jìn)行配置。除此之外,還可以使用 ES6 中的模板字符串來拼接變量和字符串會(huì)更為方便。

類型為布爾值類型的變量的值只能是true或者false。除此之外,賦值給布爾值的值也可以是一個(gè)計(jì)算之后結(jié)果為布爾值的表達(dá)式:

在 JavaScript 中,undefined和 null 是兩個(gè)基本數(shù)據(jù)類型。在 TypeScript 中,這兩者都有各自的類型,即 undefined 和 null,也就是說它們既是實(shí)際的值,也是類型。這兩種類型的實(shí)際用處不是很大。

注意,第一行代碼可能會(huì)報(bào)一個(gè)tslint的錯(cuò)誤: Unnecessary initialization to 'undefined' ,就是不能給一個(gè)變量賦值為undefined。但實(shí)際上給變量賦值為undefined是完全可以的,所以如果想讓代碼合理化,可以配置tslint,將" no-unnecessary-initializer "設(shè)置為 false 即可。

默認(rèn)情況下,undefined 和 null 是所有類型的子類型,可以賦值給任意類型的值,也就是說可以把 undefined 賦值給 void 類型,也可以賦值給 number 類型。當(dāng)在 tsconfig.json 的"compilerOptions"里設(shè)置為 "strictNullChecks": true 時(shí),就必須嚴(yán)格對(duì)待了。這時(shí) undefined 和 null 將只能賦值給它們自身或者 void 類型。這樣也可以規(guī)避一些錯(cuò)誤。

BigInt是ES6中新引入的數(shù)據(jù)類型,它是一種內(nèi)置對(duì)象,它提供了一種方法來表示大于 2- 1 的整數(shù),BigInt可以表示任意大的整數(shù)。

使用 BigInt 可以安全地存儲(chǔ)和操作大整數(shù),即使這個(gè)數(shù)已經(jīng)超出了JavaScript構(gòu)造函數(shù) Number 能夠表示的安全整數(shù)范圍。

我們知道,在 JavaScript 中采用雙精度浮點(diǎn)數(shù),這導(dǎo)致精度有限,比如 Number.MAX_SAFE_INTEGER 給出了可以安全遞增的最大可能整數(shù),即 2- 1 ,來看一個(gè)例子:

可以看到,最終返回了true,這就是超過精讀范圍造成的問題,而 BigInt 正是解決這類問題而生的:

這里需要用 BigInt(number) 把 Number 轉(zhuǎn)化為 BigInt ,同時(shí)如果類型是 BigInt ,那么數(shù)字后面需要加 n 。

在TypeScript中, number 類型雖然和 BigInt 都表示數(shù)字,但是實(shí)際上兩者類型是完全不同的:

symbol我們平時(shí)用的比較少,所以可能了解也不是很多,這里就詳細(xì)來說說symbol。

symbol 是 ES6 新增的一種基本數(shù)據(jù)類型,它用來表示獨(dú)一無二的值,可以通過 Symbol 構(gòu)造函數(shù)生成。

注意:Symbol 前面不能加 new關(guān)鍵字,直接調(diào)用即可創(chuàng)建一個(gè)獨(dú)一無二的 symbol 類型的值。

可以在使用 Symbol 方法創(chuàng)建 symbol 類型值的時(shí)候傳入一個(gè)參數(shù),這個(gè)參數(shù)需要是一個(gè)字符串。如果傳入的參數(shù)不是字符串,會(huì)先自動(dòng)調(diào)用傳入?yún)?shù)的 toString 方法轉(zhuǎn)為字符串:

上面代碼的第三行可能會(huì)報(bào)一個(gè)錯(cuò)誤:This condition will always return 'false' since the types 'unique symbol' and 'unique symbol' have no overlap. 這是因?yàn)榫幾g器檢測(cè)到這里的 s1 === s2 始終是false,所以編譯器提醒這代碼寫的多余,建議進(jìn)行優(yōu)化。

上面使用Symbol創(chuàng)建了兩個(gè)symbol對(duì)象,方法中都傳入了相同的字符串,但是兩個(gè)symbol值仍然是false,這就說明了 Symbol 方法會(huì)返回一個(gè)獨(dú)一無二的值。Symbol 方法傳入的這個(gè)字符串,就是方便我們區(qū)分 symbol 值的??梢哉{(diào)用 symbol 值的 toString 方法將它轉(zhuǎn)為字符串:

在TypeScript中使用symbol就是指定一個(gè)值的類型為symbol類型:

在ES6中,對(duì)象的屬性是支持表達(dá)式的,可以使用于一個(gè)變量來作為屬性名,這對(duì)于代碼的簡(jiǎn)化有很多用處,表達(dá)式必須放在大括號(hào)內(nèi):

symbol 也可以作為屬性名,因?yàn)閟ymbol的值是獨(dú)一無二的,所以當(dāng)它作為屬性名時(shí),不會(huì)與其他任何屬性名重復(fù)。當(dāng)需要訪問這個(gè)屬性時(shí),只能使用這個(gè)symbol值來訪問(必須使用方括號(hào)形式來訪問):

在使用obj.name訪問時(shí),實(shí)際上是字符串name,這和訪問普通字符串類型的屬性名是一樣的,要想訪問屬性名為symbol類型的屬性時(shí),必須使用方括號(hào)。方括號(hào)中的name才是我們定義的symbol類型的變量name。

使用 Symbol 類型值作為屬性名,這個(gè)屬性是不會(huì)被 for…in遍歷到的,也不會(huì)被 Object.keys() 、 Object.getOwnPropertyNames() 、 JSON.stringify() 等方法獲取到:

雖然這些方法都不能訪問到Symbol類型的屬性名,但是Symbol類型的屬性并不是私有屬性,可以使用 Object.getOwnPropertySymbols 方法獲取對(duì)象的所有symbol類型的屬性名:

除了這個(gè)方法,還可以使用ES6提供的 Reflect 對(duì)象的靜態(tài)方法 Reflect.ownKeys ,它可以返回所有類型的屬性名,Symbol 類型的也會(huì)返回:

Symbol 包含兩個(gè)靜態(tài)方法, for 和 keyFor 。 1)Symbol.for()

用Symbol創(chuàng)建的symbol類型的值都是獨(dú)一無二的。使用 Symbol.for 方法傳入字符串,會(huì)先檢查有沒有使用該字符串調(diào)用 Symbol.for 方法創(chuàng)建的 symbol 值。如果有,返回該值;如果沒有,則使用該字符串新創(chuàng)建一個(gè)。使用該方法創(chuàng)建 symbol 值后會(huì)在全局范圍進(jìn)行注冊(cè)。

上面代碼中,創(chuàng)建了一個(gè)iframe節(jié)點(diǎn)并把它放在body中,通過這個(gè) iframe 對(duì)象的 contentWindow 拿到這個(gè) iframe 的 window 對(duì)象,在 iframe.contentWindow上添加一個(gè)值就相當(dāng)于在當(dāng)前頁面定義一個(gè)全局變量一樣。可以看到,在 iframe 中定義的鍵為 TypeScript 的 symbol 值在和在當(dāng)前頁面定義的鍵為'TypeScript'的symbol 值相等,說明它們是同一個(gè)值。

2)Symbol.keyFor() 該方法傳入一個(gè) symbol 值,返回該值在全局注冊(cè)的鍵名:

看完簡(jiǎn)單的數(shù)據(jù)類型,下面就來看看比較復(fù)雜的數(shù)據(jù)類型,包括JavaScript中的數(shù)組和對(duì)象,以及TypeScript中新增的元組、枚舉、Any、void、never、unknown。

在 TypeScript 中有兩種定義數(shù)組的方式:

以上兩種定義數(shù)組類型的方式雖然本質(zhì)上沒有任何區(qū)別,但是更推薦使用第一種形式來定義。一方面可以避免與 JSX 語法沖突,另一方面可以減少代碼量。

注意,這兩種寫法中的 number 指定的是數(shù)組元素的類型,也可以在這里將數(shù)組的元素指定為其他任意類型。如果要指定一個(gè)數(shù)組里的元素既可以是數(shù)值也可以是字符串,那么可以使用這種方式: number|string[] 。

在JavaScript中,object是引用類型,它存儲(chǔ)的是值的引用。在TypeScript中,當(dāng)想讓一個(gè)變量或者函數(shù)的參數(shù)的類型是一個(gè)對(duì)象的形式時(shí),可以使用這個(gè)類型:

可以看到,當(dāng)給一個(gè)對(duì)象類型的變量賦值一個(gè)對(duì)象時(shí),就會(huì)報(bào)錯(cuò)。對(duì)象類型更適合以下場(chǎng)景:

在 JavaScript 中并沒有元組的概念,作為一門動(dòng)態(tài)類型語言,它的優(yōu)勢(shì)是支持多類型元素?cái)?shù)組。但是出于較好的擴(kuò)展性、可讀性和穩(wěn)定性考慮,我們通常會(huì)把不同類型的值通過鍵值對(duì)的形式塞到一個(gè)對(duì)象中,再返回這個(gè)對(duì)象,而不是使用沒有任何限制的數(shù)組。TypeScript 的元組類型正好彌補(bǔ)了這個(gè)不足,使得定義包含固定個(gè)數(shù)元素、每個(gè)元素類型未必相同的數(shù)組成為可能。

元組可以看做是數(shù)組的擴(kuò)展,它表示已知元素?cái)?shù)量和類型的數(shù)組,它特別適合用來實(shí)現(xiàn)多值返回。確切的說,就是已知數(shù)組中每一個(gè)位置上的元素的類型,可以通過元組的索引為元素賦值::

可以看到,定義的arr元組中,元素個(gè)數(shù)和元素類型都是確定的,當(dāng)為arr賦值時(shí),各個(gè)位置上的元素類型都要對(duì)應(yīng),元素個(gè)數(shù)也要一致。

當(dāng)訪問元組元素時(shí),TypeScript也會(huì)對(duì)元素做類型檢查,如果元素是一個(gè)字符串,那么它只能使用字符串方法,如果使用別的類型的方法,就會(huì)報(bào)錯(cuò)。

在TypeScript 新的版本中,TypeScript會(huì)對(duì)元組做越界判斷。超出規(guī)定個(gè)數(shù)的元素稱作越界元素,元素賦值必須類型和個(gè)數(shù)都對(duì)應(yīng),不能超出定義的元素個(gè)數(shù)。

這里定義了接口 Tuple ,它繼承數(shù)組類型,并且數(shù)組元素的類型是 number 和 string 構(gòu)成的聯(lián)合類型,這樣接口 Tuple 就擁有了數(shù)組類型所有的特性。并且指定索引為0的值為 string 類型,索引為1的值為 number 類型,同時(shí)指定 length 屬性的類型字面量為 2,這樣在指定一個(gè)類型為這個(gè)接口 Tuple 時(shí),這個(gè)值必須是數(shù)組,而且如果元素個(gè)數(shù)超過2個(gè)時(shí),它的length就不是2是大于2的數(shù)了,就不滿足這個(gè)接口定義了,所以就會(huì)報(bào)錯(cuò);當(dāng)然,如果元素個(gè)數(shù)不夠2個(gè)也會(huì)報(bào)錯(cuò),因?yàn)樗饕秊?或1的值缺失。

TypeScript 在 ES 原有類型基礎(chǔ)上加入枚舉類型,使得在 TypeScript 中也可以給一組數(shù)值賦予名字,這樣對(duì)開發(fā)者比較友好。枚舉類型使用enum來定義:

上面定義的枚舉類型的Roles,它有三個(gè)值,TypeScript會(huì)為它們每個(gè)值分配編號(hào),默認(rèn)從0開始,在使用時(shí),就可以使用名字而不需要記數(shù)字和名稱的對(duì)應(yīng)關(guān)系了:

除此之外,還可以修改這個(gè)數(shù)值,讓SUPER_ADMIN = 1,這樣后面的值就分別是2和3。當(dāng)然還可以給每個(gè)值賦予不同的、不按順序排列的值:

我們可以將一個(gè)值定義為any類型,也可以在定義數(shù)組類型時(shí)使用any來指定數(shù)組中的元素類型為任意類型:

any 類型會(huì)在對(duì)象的調(diào)用鏈中進(jìn)行傳導(dǎo),即any 類型對(duì)象的任意屬性的類型都是 any,如下代碼所示:

需要注意:不要濫用any類型,如果代碼中充滿了any,那TypeScript和JavaScript就毫無區(qū)別了,所以除非有充足的理由,否則應(yīng)該盡量避免使用 any ,并且開啟禁用隱式 any 的設(shè)置。

void 和 any 相反,any 是表示任意類型,而 void 是表示沒有類型,就是什么類型都不是。這在 定義函數(shù),并且函數(shù)沒有返回值時(shí)會(huì)用到 :

需要注意: void 類型的變量只能賦值為 undefined 和 null ,其他類型不能賦值給 void 類型的變量。

never 類型指永遠(yuǎn)不存在值的類型,它是那些 總會(huì)拋出異常 或 根本不會(huì)有返回值的函數(shù)表達(dá)式的返回值 類型,當(dāng)變量被永不為真的類型保護(hù)所約束時(shí),該變量也是 never 類型。

下面的函數(shù),總是會(huì)拋出異常,所以它的返回值類型是never,用來表明它的返回值是不存在的:

never 類型是任何類型的子類型,所以它可以賦值給任何類型;而沒有類型是 never 的子類型,所以除了它自身以外,其他類型(包括 any 類型)都不能為 never 類型賦值。

上面代碼定義了一個(gè)立即執(zhí)行函數(shù),函數(shù)體是一個(gè)死循環(huán),這個(gè)函數(shù)調(diào)用后的返回值類型為 never,所以賦值之后 neverVariable 的類型是 never 類型,當(dāng)給neverVariable 賦值 123 時(shí),就會(huì)報(bào)錯(cuò),因?yàn)槌陨硗馊魏晤愋投疾荒苜x值給 never 類型。

基于 never 的特性,我們可以把 never 作為接口類型下的屬性類型,用來禁止操作接口下特定的屬性:

可以看到,無論給 props.name 賦什么類型的值,它都會(huì)提示類型錯(cuò)誤,這就相當(dāng)于將 name 屬性設(shè)置為了只讀 。

unknown 是TypeScript在3.0版本新增的類型,主要用來描述類型并不確定的變量。它看起來和any很像,但是還是有區(qū)別的,unknown相對(duì)于any更安全。

對(duì)于any,來看一個(gè)例子:

上面這些語句都不會(huì)報(bào)錯(cuò),因?yàn)関alue是any類型,所以后面三個(gè)操作都有合法的情況,當(dāng)value是一個(gè)對(duì)象時(shí),訪問name屬性是沒問題的;當(dāng)value是數(shù)值類型的時(shí)候,調(diào)用它的toFixed方法沒問題;當(dāng)value是字符串或數(shù)組時(shí)獲取它的length屬性是沒問題的。

當(dāng)指定值為unknown類型的時(shí)候,如果沒有 縮小類型范圍 的話,是不能對(duì)它進(jìn)行任何操作的??傊瑄nknown類型的值不能隨便操作。那什么是類型范圍縮小呢?下面來看一個(gè)例子:

這里由于把value的類型縮小為Date實(shí)例的范圍內(nèi),所以進(jìn)行了value.toISOString(),也就是使用ISO標(biāo)準(zhǔn)將 Date 對(duì)象轉(zhuǎn)換為字符串。

使用以下方式也可以縮小類型范圍:

關(guān)于 unknown 類型,在使用時(shí)需要注意以下幾點(diǎn):

在實(shí)際使用中,如果有類型無法確定的情況,要盡量避免使用 any,因?yàn)?any 會(huì)丟失類型信息,一旦一個(gè)類型被指定為 any,那么在它上面進(jìn)行任何操作都是合法的,所以會(huì)有意想不到的情況發(fā)生。因此如果遇到無法確定類型的情況,要先考慮使用 unknown。

入門JavaScript的書籍有哪些推薦

這個(gè)問題我有發(fā)言權(quán)。

因?yàn)槲揖褪钦罩跚叭送扑]的書一本本看過來的。

這是我這一年多點(diǎn)看的書。少了三四本書,給別人借走了。

(上面的書并沒有全部看完,有些昏昏欲睡的書可能需要我境界再高點(diǎn)才適合看。順便請(qǐng)無視那本亂入的Android入門)

所謂的和書一拍即合相見恨晚,其實(shí)就是在合適的階段遇到了合適的書。

所以我會(huì)按照時(shí)間順序來推薦那些對(duì)我影響很大的書,我會(huì)給出在那個(gè)階段的思考和這本書對(duì)我的啟發(fā)。

希望你能和我一樣在合適的階段遇上合適的書。

---------------------------------------------------------------

3.7 晚 修正了一大堆拼寫錯(cuò)誤,讓語言得體了一點(diǎn)。

---------------------------------------------------------------

正文

1. JavaScript DOM 編程藝術(shù)

這本書作為被大家推薦的最多的前端入門書籍是有道理的。

他能真正讓大家了解dom腳本編程,或是說前端編程技術(shù)背后的思路和原則。

對(duì)于初學(xué)者來說,這本書沒有任何門檻,按部就班跟著書籍實(shí)例編寫代碼即可。

我們會(huì)知曉如何對(duì)瀏覽器元素操作和掌控,會(huì)學(xué)會(huì)如何實(shí)現(xiàn)簡(jiǎn)單的頁面效果。

這種簡(jiǎn)單易得的成就感是一個(gè)編程語言入門時(shí)最難能可貴的體驗(yàn)。

閱讀建議:

這本書雖然簡(jiǎn)單,但是能讓人快速對(duì)前端產(chǎn)生興趣和成就感。

不過后續(xù)學(xué)習(xí)jquery的時(shí)候可能會(huì)產(chǎn)生挫敗感。原生js dom操作的成就感會(huì)被jquery便捷的API所徹底打敗。所以一定要恰當(dāng)?shù)恼{(diào)整心態(tài),轉(zhuǎn)換思維方式,正確認(rèn)識(shí)到j(luò)query和原生js分別的優(yōu)劣之處。

2. JavsScript高級(jí)程序設(shè)計(jì)(第三版)

3. 鋒利的jQuery

4. 學(xué)習(xí)Javascript數(shù)據(jù)結(jié)構(gòu)與算法

5. JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐

6. 高性能JavaScript

7. 你不知道的JavaScript(YOU DONT KNOW JAVASCRIPT

JavaScript 入門哪本書最好

入門可以看《javascript高級(jí)程序設(shè)計(jì)》與《javascript dom 編程藝術(shù)》尤其是后者,真是好書。我以前看了許多視頻,翻那本很厚的指南與高程,最后還是靠《javascript dom 編程藝術(shù)》激發(fā)我學(xué)習(xí)興趣入門。

看了三四次《javascript高級(jí)程序設(shè)計(jì)》就可以看蝴蝶書《javascript語言精辟》,這是講JS的語法設(shè)計(jì),那些語法應(yīng)該用,那些不應(yīng)該用(如==、 with、 eval、 argument.caller),這提高你的代碼質(zhì)量必不可少。

如果你想寫一個(gè)插件或一個(gè)庫,就要涉及大量DOM,BOM知識(shí)了。畢竟javascript是膠水語言,而CSS與HTML在JS里都會(huì)映射為DOM,此外還有一些涉及瀏覽器的東西,叫BOM。

掌握各大瀏覽器提供的底層DOM、BOM API,及了解它們之間的差異,如何檢測(cè)它們是否支持,如果屏蔽它們之間的差異性,如何選用最佳的API是我們成為高手的關(guān)鍵。

《PPK 談 Javascript》,主要是說DOM的兼容性與可用性問題。

《JavaScript DOM高級(jí)程序設(shè)計(jì)》,這本非常優(yōu)秀,不知為何被理沒了(也可能是出版社的緣故,很早就買斷貨就不知道補(bǔ)課),我在這里了解許多操作CSS的API。

《JavaScript框架設(shè)計(jì)》這完全是本面向中高級(jí)的書,涉及一般書沒有講解過的模塊加載器,事件管理系統(tǒng),選擇器引擎,異步列隊(duì),動(dòng)畫引擎,及時(shí)下日益流行的MVVM架構(gòu)。

《數(shù)據(jù)結(jié)構(gòu)與算法JavaScript描述》,越復(fù)雜的系統(tǒng),最后都在架構(gòu)與算法與數(shù)據(jù)結(jié)構(gòu)上下功夫,雖然用得不多,但作為一個(gè)高手,算法不精真是一個(gè)痛點(diǎn)。比較實(shí)現(xiàn)一個(gè)選擇器引擎,人家都會(huì)問你比jQuery的快嗎?加之JS在這方面也有它的特殊點(diǎn),因此還得學(xué)習(xí)。

時(shí)下也有許多angular與backbone的書,我本人認(rèn)為他們基本上照搬官網(wǎng)的API文檔,很少能講到底層的實(shí)現(xiàn),能獲得的知識(shí)點(diǎn)太少了,它們只能用于入門(你英語不好的話),因此不建議入。

如何正確學(xué)習(xí)JavaScript

學(xué)習(xí)javascript沒HTMl基礎(chǔ)有點(diǎn)難度,建議你先熟悉html再學(xué)習(xí)。

JavaScript簡(jiǎn)稱JS,之前的基礎(chǔ)就是HTML,HTML這門課程如果入門的話不是很難,刻苦點(diǎn)一月到兩月就能搞定,有HTML基礎(chǔ)的話,只要繼續(xù)刻苦一個(gè)月左右JS就能入門,但是想學(xué)到高深那就不容易了,js入門后在繼續(xù)學(xué)可以說也是有些難度的??傊日莆誋TML,這是一個(gè)基礎(chǔ),正如你說話要先從aoe開始一樣,HTML也很容易學(xué)的

HTML推薦書籍:深入淺出HTML和CSS

JS推薦書籍:《javascript入門經(jīng)典》

這些書籍可以幫助你怎么學(xué)習(xí),其實(shí)不止看書,你也可以看看視頻,多看視頻講解學(xué)習(xí)可以讓你少走很多彎路,節(jié)省不少時(shí)間。遇見問題,常百度一下,現(xiàn)在百度只有你想不到的,沒有你查不到的,沒有你要的答案,也能查到相關(guān)的,何況可以提問嘛……

人就是在不斷的問題中解決問題,發(fā)現(xiàn)新的問題,繼續(xù)解決問題,這樣自己的自學(xué)能力和技術(shù)能夠得到很大的提升,關(guān)鍵就是不懂一定馬上問,千萬不要隨便拖,這樣進(jìn)步才叫快……

還有補(bǔ)充一下,學(xué)習(xí)重在實(shí)踐,因?yàn)橹挥袑?shí)踐你才能更好的發(fā)現(xiàn)自己的問題,一個(gè)問題解決了,一次不記得,下次繼續(xù)做的時(shí)候再手打一次,但是別抄之前自己寫過的代碼,除非你覺得自己這段代碼已經(jīng)掌握了,這樣為了節(jié)省時(shí)間才抄,否則還是練練手最好,,萬變不離其宗——熟能生巧……

如果你精通了,那就好辦了,一個(gè)網(wǎng)站可能就被你開發(fā)出來,然后就不愁找不到好工作了,至于你認(rèn)為學(xué)到什么地步算精通,這你自己在學(xué)習(xí)中就可以感受到自己的能力,說的夠多了,一時(shí)說不完,就這樣,最后祝你成功,嘎嘎嘎嘎……

當(dāng)前名稱:javascript基礎(chǔ)入門,javascript基礎(chǔ)入門菜鳥
網(wǎng)頁地址:http://aaarwkj.com/article18/dsiidgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、全網(wǎng)營(yíng)銷推廣、網(wǎng)站維護(hù)網(wǎng)站設(shè)計(jì)公司、網(wǎng)站改版、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
最新免费观看男女啪啪视频| 日本特黄高清免费大片| 国产自拍最新在线视频| 岛国毛片在线免费播放| 91啪在线观看91色| 国产黄色一区二区三区| 国产日韩久久免费电影| 91免费在线观看高清| 午夜精品久久福利视频| 91午夜福利国产在线观看| 日韩电影在线一本二本三本 | 四虎国产最新在线免费| 欧美大片免费久久精品| 久久综合亚洲鲁鲁五月天| 一区二区欧美日韩91| 欧美熟妇在线视频你懂的| 日韩精品欧美中文字幕| 亚洲精品一区二区三区不卡| 亚洲欧美高清一区二区| 在线免费观看日韩黄片| 免费可以看的黄片欧美| 人妻伦理一区二区三区| 亚洲精品一区二区三区毛片| 日韩欧美国产成人在线观看| 国产一级夫妻性生活欧美| 亚洲熟女少妇淫语高潮| 粉嫩av蜜臀一区二区三区| av高清不卡一区二区免费在线| 特级艳片在线观看免费| 亚洲五月综合激情综合久久| 天堂av在线播放观看| 中文色婷婷国产精品视频| 男人av天堂手机在线| 国产日韩欧美另类专区| 欧美日韩国产成人一区| 少妇高潮一区二区三区在线| 丁香六月色婷婷亚洲激情| 末满18周岁禁止观看| av天堂资源地址在线观看| 国产福利三级在线观看| 日本少妇入口一区二区|