《JavaScript權威指南》學習筆記 第二天 下好一盤大棋

? ? ?前段學習js的時候總是零零散散的,以至于很多東西都模棱兩可。時間稍微一久,就容易忘記。最主要的原因是這些東西,原來學的時候就不是太懂,以至于和其他知識無法形成記憶鏈,所以孤零零的知識特別容易忘記。重溫犀牛書,加上最近對記憶宮殿的記憶方法有點感興趣,于是結合起來來做筆記。


?

開始吧,上去先扔一張我畫的js的數據類型。后面的所有東西,基本上都是基于這張圖的。

?

?

原始類型沒啥說的,就是string,number ,boolean 。

? ? ? 對象類型包括 對象。其實還有Array, func 也是特殊的對象。 ?對象其實就是一個鍵值對,在php里面叫關聯數組。值可以是原始類型即string, boolean、number,當然也可以還是一個對象。

? ? ? 這里面有兩個特殊的東西,叫null和undefined。null在各種語言里都比較常見。在js里面null == undefined。這兩個特殊的東西,叫做特殊的原始值,因為其數據類型就是其值,其值不能被修改(不可變 immutable).null和undefined的區別在哪里呢?區別在于null常表示我們程序級別的,正常的空值。如變量沒有賦值的時候,到了瀏覽器語法檢查的時候,會在該變量作用域的頂部聲明該變量,這個時候給這個變量賦的值就是null.但是當該變量不存在的時候,下面卻調用了,就會報undefined,因此可以認為undefined是系統級別的,類似于語法錯誤。?

? ? ? 有對象就有類,對象是實例化的類。js的對象是一個大對象,當create一個頁面的時候,就會被js構造器(construct)創造出來 數組對象(Array)、函數對象(function)、日期對象(date)、正則對象(RegExp)以及錯誤對象(Error).這點稍后會詳細的講下。

? ? ? 上面是從從數據類型維度來區分js的值的。數據類型是后面的基礎,從是否擁有方法又可以區分,可以擁有方法的類型,不擁有方法的類型。可變的類型,與不可改變的類型、

從擁有方法來講,其實原始類型是不擁有方法的,但是js的特殊性卻讓原始類型也擁有了方法。比如toString()的方法。這些不擁有方法的類型在調用方法的時候,會先變成包裝對象(一個調用后立即銷毀的對象),所以原始類型也是擁有方法的類型。但是特殊的類型 null 與 undefined 不擁有方法,因為其值不允許被改變,有方法有個毛用啊。

? ? ?從值可變與不可變的角度來說。原始類型的值是不能被改變的。平時在使用的過程中,確實發現其值改變了,那是因為我們將改變后的值賦給了新的變量。其原變量本身是沒有變化的。字符串是由字符組成的數組,這點和C語言一樣,比較好理解。

?

直接量:

什么叫直接量,就是簡單直接粗暴的賦值。類似 var a = 3; ??

直接量,直接賦值。區別于調用new String() ?new Number() 來產生的變量。使用直接量,程序沒有執行的時候,并不知道值得類型,等到語法解析編譯的時候,才會根據其具體的值,指定變量類型。因此這樣的方式聲明的變量就叫做直接量。

?

全局對象

瀏覽器啟動,create一個新的頁面。js的全局對象已經被創造好了。也就是一個大對象生下了一堆小對象。對于大對象來說,這是一堆小對象,但是對于我們來說。他們仍是一個對象類,我們需要去實例化。

大對象生出了一堆東西:

全局屬性: undefined、Infinity、Nan

全局函數:isNaN() ?、parseInt() 、eval()

構造函數:(我更喜歡稱為構造類)Date() 、RegExp()、String() 、Object() 、Array(). 之所以稱為是構造函數,是因為我們也可以直接把他們當做函數使用,在原始類型變成對象的時候,也充當包裝對象。

全局對象: Math() 、JSON。

?

包裝對象

這個名字起的比較好。假設原始類型string 、number 、boolean 分別是烤雞、烤鴨、烤兔。當他們變成商品(對象)去賣的時候、就會包上一層包裝紙,錫箔紙、包裝袋。但是這個包裝紙的作用是有限的,當其完成其固有的作用的時候,就會被丟棄(包裝對象被銷毀)。

所謂的包裝對象就是用完就丟棄,就像物品的包裝袋一樣。

?

類型轉換:

這個分為原始類型之間的轉換、對象之間的轉換、原始類型轉為對象、對象轉為原始類型三部分。

原始類型之間互轉主要通過內隱的方法進行自動轉換,也可以調用系統的構造函數。

原始類型變對象,通過包裝對象。

對象變原始類型。主要是變成字符串和數字兩種。 通過調用對象內的一個魔術方法。這個原理和php里面的將變量變成當成字符串輸出的原理是一樣的。

?

變量作用域與作用域

這種東西,畫個圖什么的,就清晰多了。

?

A的變量作用域在A - E,B的變量作用域在B-E,以此類推E的變量作用域在E。

但是E想使用A的一個變量怎么辦,js不像人一樣聰明,直接去D拿,況且js也不知道變量在哪。E先問D有沒有,D要沒有了,再問C,C沒有了問B,最后一直問到A。如果A也沒有咋辦,E發現自己上當受騙了,于是跑到頂層全局對象Error() 那里告狀,然后在頁面上引發一個ReferenceError(叫你不給我,哼!)的錯誤。這點很像冒泡,也許冒泡就是從這里面來的吧。

這就是JS的作用域鏈。


?

天寒,晚安。

?

轉載于:https://www.cnblogs.com/roverliang/p/4979538.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375348.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375348.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375348.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Win32ASM學習[17]:條件跳轉

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一.跳轉相關的標志位: 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF Z…

SUID或SGID程序中能不能用system函數

system()函數的聲明和說明如下: 注意它的描述那里,system()執行一個由command參數定義的命令,通過調用/bin/sh -c命令來實現這個功能。也就是說它的邏輯是這樣的! 進程調用system函數,system函數調用fork創建一個子進程…

史上最全的maven pom.xml文件教程詳解

<project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd >; <!-- 父項目的坐標。如果項目中沒有規定某個元素的值&am…

Win32ASM學習[18]:串指令-MOVS*、CMPS*、SCAS*、LODS*、REP、REPE、REPNE

-------------------------------------------------------------------------------------------------------------------------------------------------------- 一.字符串傳送指令 MOVSB/MOVSW/MOVSD 格式: MOVS OPD,OPS 功能: OPD<--OPS. 說明: 1. 其中OPS為源串符…

Xamarin iOS編寫第一個應用程序創建工程

Xamarin iOS編寫第一個應用程序創建工程 在Xcode以及Xamarin安裝好后&#xff0c;就可以在Xamarin Studio中編寫程序了。本節將主要講解在Xamarin Studio中如何進行工程的創建以及編寫代碼等內容XamariniOS編寫第一個應用程序創建工程本文選自Xamarin iOS開發實戰大學霸。 1.3.…

Jade之Extends

Extends jade允許多個jade文件繼承一個jade文件。 jade&#xff1a; //- layout.jade doctype html htmlheadblock titletitle Default titlebodyblock content //- index.jade extends ./layout.jadeblock titletitle Article Titleblock contenth1 My Article html&#xff1…

Win32ASM學習[19]:結構與聯合

結構和聯合分別用 struct、union 定義, 都是 ends 結束定義. 它們使用方法相同, 并可以互相嵌套; 主要區別是后者的各成員共用同一個地址. -------------------------------------------------------------------------------------------------------------------------------…

hdu 1257 最少攔截系統(貪心)

題意&#xff1a; 最少需要多少個攔截系統才能將所有的導彈攔截下來。 思路&#xff1a; 第1枚導彈一定需要第一個攔截系統&#xff0c;第2枚導彈如果比第1個高度高&#xff0c;則需要第二個攔截系統。 考慮第i枚導彈&#xff0c;如果前i-1枚導彈的高度都比它小&#xff0c;則需…

Birt使用總結

把report放到其他服務器要重新建立Data Source ,這是配置&#xff0c;拷貝項目時不會同時拷貝 (1)在EXTJs中利用Report實現報表的刷新 Ext.getCmp("showview").body.update("<iframe idshowviewframe src" "> </iframe>"…

Win32ASM學習[20]:子程序

關于函數調用約定 :函數調用約定 這是以前的一個求和函數的例子 ---------------------------------------------------------------------------------------------------------------- .386 .model flat, stdcall include windows.inc include kernel32.inc include …

Mac聯網恢復系統重新安裝Lion

Mac的Lion系統&#xff0c;雖然不像Windows那樣需要經常重裝&#xff0c;但也難免會有要重置的時候&#xff0c;比如更換硬盤。本文介紹如何利用Mac的聯網恢復系統進行Lion系統的在線恢復。Mac的在線恢復系統只在近幾年的機型上才有&#xff0c;在進行系統恢復前&#xff0c;請…

【線性代數公開課MIT Linear Algebra】 第二十三課 微分方程與exp(At)

本系列筆記為方便日后自己查閱而寫&#xff0c;更多的是個人見解&#xff0c;也算一種學習的復習與總結&#xff0c;望善始善終吧~ 一階常系數微分方程 Aududt 將一階常系數微分方程轉換為線性代數問題的關鍵在于常系數微分方程的解一定是指數形式的。那么我們的需要求解的東西…

Win32ASM學習[21]:宏匯編(1)

-------------------------------------------------------------------------------------------------------------------- 嗯 上個星期到現在 把Win32ASM基礎匯編復習了下 在網上找到了 這個不錯系列 于是就轉載過來了 其中 根據我自己的水平 刪減了一些內容 或…

ubunu安裝軟件的一個錯誤

http://tonychiu.blog.51cto.com/656605/654776/ 由于ubuntu/debian軟件庫中有時候不同的庫更新速度不一致&#xff0c;apt-get 出出現如下的錯誤提示 Some packages could not be installed. This may mean that you have requested an impossible situation or if you are us…

常用的基本Windows數據類型

常用的基本Windows數據類型 --------------------------------------------------------------------------------------------------------------------------------------------------------- 類 型 …

刪除空文件夾 清除CS擴展名文件 bat

刪除空文件夾。刪的干凈。刪的徹底。 將下列代碼復制到txt中保存。并把后綴.txt命成.bat。然后運行即可。 方案&#xff11;.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 刪除指定目錄及其子目錄下的空文件夾.bat 代碼&#xff1a;…

ios 坐標轉換

// 將像素point由point所在視圖轉換到目標視圖view中&#xff0c;返回在目標視圖view中的像素值 - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view; // 將像素point從view中轉換到當前視圖中&#xff0c;返回在當前視圖中的像素值 - (CGPoint)convertPoint:(C…

80X86偽指令

8086 偽指令表 一、數據定義偽操作 偽 指 令 名 稱 語 句 格 式 功 能 定義字節類型的數據存儲區 [變量名] DB 表達式[&#xff0c;…] 定義一個以變量名為首址的字節類型數據存儲區&#xff0c;所含數據元素的個數由其后表達式的個數所決定&#xff0c;數據存儲單元…

jQuery慢慢啃之選擇器(二)

1.$("#myDiv");ID匹配一個元素 <span id"foo[bar]"></span> $("#foo\\[bar\\]);//轉義 2.$("div");//元素標簽名匹配 3.$(".myClass"); css類名匹配 4.$("*") 匹配所有元素&#xff0c;多用于結合上下文…

iOS學習之基本概念

學習iOS最重要的是態度和興趣&#xff0c;如果你對于學習始終抱有不斷的熱情和端正的態度&#xff0c;那么&#xff0c;無論是什么&#xff0c;你總會成功的&#xff01; 有一句話與大家共勉&#xff1a;過程中跌倒多少次都沒有關系&#xff0c;重要的是&#xff0c;跌倒后你能…