1. 程式人生 > >javascript學習(二)——第一部分 JavaScript語言核心

javascript學習(二)——第一部分 JavaScript語言核心

第四章 表示式和運算子

4.1原始表示式

        常量、直接量、關鍵字(this返回當前物件)和變數

4.2物件和陣列的初始化表示式

          物件和陣列初始化表示式實際上是一個新建立的物件和陣列。這些初始化表示式優勢稱作“物件直接量”和“陣列直接量”,但它們不是原始表示式。

      陣列直接量中的列表逗號之間的元素可以省略,空位會填充值undefined。var sparseArray=[1,,,5];在元素列表結尾處可以留下單個逗號,這時並不會建立一個新的undefined的元素。

      物件直接量中的屬性名稱可以是字串而不是識別符號

4.3函式定義表示式

     可稱為函式直接量,典型的函式定義表示式包含關鍵字function,跟隨其後的是一對圓括號,括號內是以逗號分割的列表,列表含有0個或多個識別符號(引數名),然後再 根叔一個由花括號包裹的js程式碼段(函式體)

     var square=function(x)  {return x*x};

4.4屬性訪問表示式

        得到一個物件屬性或一個數組元素的值。

           expression.identifier

           expression[expression]

       如果計算結果是null或者undefined,表示式會丟擲一個型別錯誤異常,因為這兩個值都不能包含任意屬性

       第一種寫法更加簡單,但要注意這種方式值適用於要訪問的屬性名稱是合法的識別符號,並且要知道要訪問的屬性的名字。如果屬性名稱是一個保留字或者包含空格和標點符號,或是一個數字,則必須使用方括號的寫法,當屬姓名通過計算得出而不是固定值是也不需使用方括號寫法

4.5呼叫表示式

            f(0);

       Math.max(x,y,z);

       a.sort();

4.6物件的建立表示式

              建立一個物件並呼叫一個函式(這個函式陳谷總建構函式)初始化新物件的屬性。

           new Object;

           new Point(2,3);

                不用傳入任何引數給建構函式的話,那麼這對空圓括號是可以省略掉的:new Object         new Date

4.7運算子概述

    P66有運算子表

4.7.1運算元的個數  

       二元 *    一元  -       三元   ?:

4.7.2運算元型別和結果型別

               運算子通常會根據需要對運算元進行型別轉換

4.7.3左值

            指表示式只能出現在賦值運算子的左側

            變數、物件屬性和陣列元素均是左值

            規範允許內建函式返回一個左值,但自定義的函式則不能返回左值

4.7.4運算子的副作用

         賦值運算子、函式呼叫表示式和物件建立表示式

4.7.5運算子優先順序

         當實在不知道優先順序時可用括號強行制定運算次序

4.7.6運算子的結合性

              左結合和右結合

4.7.7運算順序

              從左到右           b=(a++)+a  //3:計算a是a已經是2了

4.8算數表示式

                      *求餘%運算元可以是整數

4.8.1  “+”運算子

              必要的型別轉換    *null->0    undefined->NaN

4.8.2一元算數運算子

                 +、-、++、--

4.8.3位運算子

           儘管不是傳統的數學運算,這裡也將其歸類為算數運算子

           ^、|、&、~、<<、>>、>>>

4.9關係表示式

4.9.1相等和不等運算

           根據關係是否存在而返回true或false

        ==、===、!=、!==

        ===:

        型別不同不相等。null、undefined、NaN自己本身都不相等

        ==:

         null和undefined相等,可進行型別轉換

4.9.2比較運算子

         <、>、<=、>=

          *字串的比較注意大寫字母都小於小寫字母

            String.localCompare() String.toLowerCase()   String.toUpperCase()

            *當其中一個運算元是NaN的時候,所有4個比較運算子均返回false

4.9.3 in運算子

          左運算元是一個字串或可以轉換為字串,右運算元是一個物件

4.9.4 instanceof運算子

         左側是物件,右側是標識物件的類。左側是右側的例項返回true,否則false

            *所有物件都是Object的例項,判斷會包含對父類的檢測

           原型鏈:js的繼承機制6.2.2

4.10邏輯表示式

                  &&:可能不會計算右運算元的情況  “短路”

           ||:函式體內的用法

           !

4.11賦值表示式

                  帶操作的賦值運算         a op=b

4.12表示式計算

                  eval()     解釋執行由JS原始碼組成的字串,併產生一個值

            是一個函式,但已經被當成運算子來對待

            *當把eval當成一個函式是,一個問題是,如果一個函式呼叫了eval(),那麼直譯器將無法對這個函式做進一步優化,另一個問題是它可以被賦予其他的名字,直譯器將無法放心的優化///

         所以要對eval()實施更多的限制,以便讓它的行為更接近運算子

4.12.1 eval()

           只有一個引數,當引數不是字串時直接返回該引數,是字串時,將把它當成JS程式碼進行編譯,編譯失敗會丟擲一個語法錯誤,成功就開始執行這段艾瑪,並返回字串中的最後一個表示式或語句的值,如果最後一個表示式或語句沒有值,則最終返回undefined。如果丟擲一個異常,這個異常將把該呼叫傳遞給eval()

        *它使用了呼叫它的變數作用域環境

4.12.2 全域性eval()

       由於具有更改區域性變數的能力,3規定了任何解釋其都不允許對eval()賦予別名。如果eval()函式通過別名呼叫的話會丟擲一個EvalError異常

         5是反對該異常的,並且規範了eval()的行為,當直接呼叫時,它總是在呼叫它的上下文作用域內執行,其他的間接呼叫則使用全域性物件作為其上下文作用域,並且無法讀、寫、定義區域性變數和函式(使用別名呼叫eval將是全域性eval)

4.12.3 嚴格eval()

    5的嚴格模式對函式的行為施加了更多的限制,在嚴格模式下呼叫eval時,或者以use strict指令開始。。。

4.13其他運算子

4.13.1 條件運算子 ?:

4.13.2typeof運算子    null   Object          NaN   number    宿主物件  object/字串    函式   function

4.13.3 delete運算子

                   是一元操作符,它用來刪除物件屬性或者陣列元素(刪除後陣列長度沒有變)。就像賦值、遞增、遞減運算子一樣。

                  刪除後讀取一個不存在的屬性將返回undefined,但是可以通過in運算子檢測屬性是否存在

                  delete希望他的運算元是一個左值,如果他不是左值,那麼delete將不進行任何操作同時返回true。

                 不是所有屬性都可刪除,一些內建核心和客戶端屬性是不能刪除的,使用者通過var語句宣告的變數不能刪除。同樣,通過function語句頂一頂函式和函式引數也不能刪除。

                 5的嚴格模式下,如果運算元是非法的,將會丟擲一個語法錯誤異常。嚴格模式下,delete刪除不可配置的屬性是會丟擲一個型別錯誤異常。在非嚴格模式下,這些delete操作不會報錯,只是簡單地返回false

4.13.4 void運算子

                  運算元會正常計算,但忽略計算結果並返回undefined

                 最常用在客戶端的URL——javascript:URL中,在URL中可以寫帶有副作用的表示式,而void讓瀏覽器不必顯示這個表示式的計算結果。

4.13.5 逗號運算子(,)

第五章 語句

           表示式語句、宣告語句

       條件語句(if、switch)、迴圈語句(while,for)、跳轉語句(break、return、throw)

5.1表示式語句

            有副作用的表示式是最簡單的語句

5.2 複合語句和空語句

              用花括號將多條語句括起來就形成一條複合語句

        ;空語句

5.3宣告語句

5.3.1 var

         *var宣告的變數是無法通過delete刪除的

         “提前”

5.3.2 function

         *花括號是必須的

5.4條件語句

5.4.1 if

         if,else(else總是與就近的if匹配,所以要適當新增花括號)

5.4.2 else if

5.4.3 switch

             case break default

5.5迴圈

             while  do/while   for(迴圈變數可以是物件)  for/in(列舉,物件的屬性只有“可列舉“的才會被遍歷到)

5.6跳轉

5.6.1標籤語句

             通過給語句定義標籤,就可以在程式的任何地方通過標籤名引用這條語句

5.6.2 break語句

                   switch中,迴圈語句中,後跟一個語句標籤(程式將跳轉到標籤所標識的語句塊的結束,或者直接終止)

                控制權無法越過函式的邊界

5.6.3 continue語句

            也可代標籤,只能在迴圈體中使用

5.6.4 return語句

             只能出現在函式體內,沒有事將返回undefined,單獨的return也返回undefined

5.6.5throw語

5.6.6 try/catch/final語句 P112

5.7其他語句型別

5.7.1 with語句

          用於臨時擴充套件作用域鏈

         with(object)

         statement

         這條語句將object新增到作用域鏈的頭部然後執行statement,最後把作用域鏈會發到原始狀態。

         嚴格模式中,是禁止使用的

5.7.2 debugger語句

        *當除錯程式可用並執行時,直譯器將以除錯模式執行。

        實際上這條語句用來產生一個斷點,程式碼的執行會停止在斷點的位置,這時可以使用偵錯程式輸出變數的值,檢查呼叫棧等(先啟用偵錯程式eg:Firebug)

5.7.3 “use strict”

        是5引入的一條指令,不是語句

        與普通語句的區別:不包含任何關鍵字,對於未實現5的只是條沒有副作用的表示式,將來用use做關鍵字;只能出現在程式碼開始或函式體開始

         使用該指令的目的是說明後續的程式碼將會解析為嚴格程式碼。如果頂層程式碼使用了這個指令,他們就是嚴格程式碼;如果函式體定義或函式體使用了這個指令,那麼函式體的程式碼也是嚴格程式碼。如果eval()呼叫時所處或要執行的字串中使用了“strict code”指令,則eval內的程式碼是嚴格程式碼

         嚴格程式碼:是該語言的一個受限制的子集,它修正了語言的重要缺陷,並提供健壯的差錯功能和增強的安全機制。嚴格模式和非嚴格模式之間的區別如下:

               1、嚴格模式中禁止使用with語句

               2、所有的變數都要先宣告,引用錯誤異常/給全域性物件新新增一個新屬性

               3、呼叫函式中的this值是undefined/全域性物件

               4、通過call()或apply()來呼叫函式是,其中的this就是通過它們傳入的第一個引數/null和undefined值被全域性物件和轉換為物件的非物件值所代替

               5、給只讀屬性賦值和給不可擴充套件的物件建立新成員都將丟擲一個型別錯誤異常/知識簡單的操作失敗,不會報錯

               6、eval()的程式碼不能再呼叫程式所在的上下文中宣告變數或定義函式/可以這樣做,作用域在返回時棄用

               P116

相關推薦

javascript學習——第一部分 JavaScript語言核心

第四章 表示式和運算子 4.1原始表示式         常量、直接量、關鍵字(this返回當前物件)和變數 4.2物件和陣列的初始化表示式           物件和陣列初始化表示式實際上是一個新建立的物件和陣列。這些初始化表示式優勢稱作“物件直接量”和“陣列直接量”,但

JavaScript學習:原始資料型別-字串、數字、布林值、null、undefined

資料型別 --- 能夠表示並操作值的型別,程式語言的最基本特性就是能夠支援多種資料型別。 JavaScript的資料型別分為兩種: 原始型別 (primitive type)  物件型別(object type) 原始資料型別包括:  數字   字串  布林值   ,

《Frustum PointNets for 3D Object Detection from RGB-D Data》論文及程式碼學習程式碼部分

《Frustum PointNets for 3D Object Detection from RGB-D Data》論文及程式碼學習(二)程式碼部分 文章目錄 《Frustum PointNets for 3D Object Detection from RG

C++語言學習——C++對C語言基礎語法的擴展

情況下 ces qtcreator 缺少 命令 ast 過多 匯編 lse C++語言學習(二)——C++對C語言基礎語法的擴展 C++是基於C語言擴展發展而來的面向對象的程序設計語言,本文將主要討論C++語言基於C語言擴展的方面。 一、實用性增強 C語言中變量的定義必須在

ArcGIS API for JavaScript學習1第一個地圖

樣式表 參數 資源 charset 底層 arcgis 順序 api navi 1.簡介 ArcGIS API for JavaScript跟隨ArcGIS 9.3同時發布,是ESRI根據JavaScript技術實現的調用ArcGIS Server REST API接口的一

javascript學習2循環

src .cn tin asc for循環 循環 分享 ava bre 一、for循環 1、for(i=1;i<6;i++)循環 2、for(x in arrayA)循環 二、while循環 1、while循環 2、do。。while循環 三、continue

javascript 使用

註釋 使用 順序 分享 ntb 2.3 結束 保留 cnblogs 1.JavaScript 語句 JavaScript 語句是發給瀏覽器的命令。 這些命令的作用是告訴瀏覽器要做的事情。 下面的 JavaScript 語句向 id="demo" 的 HTML 元素輸出文本

前端javascript知識

如何實現 end spl 人員 每次 很多 params getprop ram documen.write和 innerHTML的區別 document.write只能重繪整個頁面 innerHTML可以重繪頁面的一部分 瀏覽器檢測通過什麽? (1) navigat

JavaScript OOP:this關鍵字以及call、apply、bind

col als == ole 構造 prototype logs rip .com JavaScript的this關鍵字非常靈活! this 返回的總是對象;即返回屬性或方法“當前”所在的對象 1 var o1={ 2 name:‘apple‘, 3

JavaScript學習

scrip eight alt bsp asc idt wid 14. mage JavaScript學習(四)

JavaScript學習——基礎知識查漏補缺

出現 個數字 時代 編寫代碼 條件 undefined 不支持 lock convert 標簽script 我們知道,html要使用js就要使用<script>標簽。 兩種方式: 一是直接在<script>這裏</script>寫入代碼

JavaScript學習

指定 只有一個 有一個 child one 使用 類型 子節點 判斷 1. 節點及其類型: 1). 元素節點 2). 屬性節點: 元素的屬性, 可以直接通過屬性的方式來操作. 3). 文本節點: 是元素節點的子節點, 其內容為文本. 2. 在 html 文檔的什麽

JavaScript學習

目錄   條件判斷語句: if語句: if...else語句 switch語句 while語句 do...while語句 for迴圈語句 跳轉語句: continue語句 break語句   條件判斷語句: if語句:

JavaScript學習1——快速入門

1、資料型別 (1)Number,JavaScript不區分整數和浮點數,統一用Number表示 NaN; // NaN表示Not a Number,當無法計算結果時用NaN表示 Infinity; // Infinity表示無限大,當數值超過了JavaScript的Number所能表示

JavaScript學習0——我的現狀

        2007年本科畢業,研究生還未開學,本著賺錢的目的,準備在諾基亞手機上寫遊戲,需要用J2ME。之前只寫過C和C++的程式碼,於是開始學Java。先學J2SE,然後寫了個網頁版的俄羅斯方塊。瀏覽器執行,頁面頂部會出現一個黃條提示是否執行,確認

web前端學習html學習筆記部分7--web儲存2

1.2.20  web儲存 1.2.20.1  Web儲存-客戶端儲存資料新方法   1.兩種方式     1)localStorage - 沒有時間限制的資料儲存     2)針對一個sessionStorage - 針對一個session的資料儲存   2.與coo

web前端學習html學習筆記部分8--伺服器推送事件3

1.2.22  html5伺服器推送事件 1.2.22.1  html5伺服器推送事件介紹   伺服器推送事件(Server-sent Events)是HTML5規範中的一個組成部分,可以用來從伺服器端實時推送資料到瀏覽器端。   傳統的伺服器端推送資料技術:Websocket:We

web前端學習html學習筆記部分8--服務器推送事件3

tcp event tex 適用於 表示 前端 增加 pen 傳輸 1.2.22 html5服務器推送事件 1.2.22.1 html5服務器推送事件介紹   服務器推送事件(Server-sent Events)是HTML5規範中的一個組成部分,可以用來從服務器端實時

web前端學習html學習筆記部分9-- 響應式布局

edi 現在 html 打開 解決 活性 height 移動 tao 1.2.23 響應式布局基礎 1.2.23.1 響應式布局介紹   1.響應式布局是2010年5月份提出的一個概念,簡而言之,就是一個網站能夠兼容多終端 -- 而不是為每個終端做一個特定的版本。這個概

web前端學習html學習筆記部分10-- HTML5構建應用佈局和頁面

1.2.25  HTML5構建應用佈局和頁面 1.2.25.1  HTML5在移動開發中的準則   1.儘量使用單頁面開發   2.慎重選擇前端UI框架   3.動畫、特效使用準則(60fps)     瀏覽器消耗最小的css屬性       位置  -&n