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