javascript
是一門解釋型的語言,瀏覽器充當解釋器。js
執行時,在同一個做用域內是先解釋再執行。解釋的時候會編譯function
和var
這兩個關鍵詞定義的變量,編譯完成後從上往下執行並向變量賦值。javascript
ECMASCript
中的一切(包括變量,函數名和操做符)都區分大小寫。html
變量在第一次用到時就設置於內存中,便於後來在腳本中引用。使用變量以前先進行聲明。可使用 var
關鍵字來進行變量聲明。java
var count, amount, level; // 用單個 var 關鍵字聲明的多個聲明。
正則表達式
變量名包括全局變量,局部變量,類變量,函數參數等等,他們都屬於這一類。segmentfault
變量命名都以類型前綴+有意義的單詞組成,用駝峯式命名法增長變量和函式的可讀性。例如:sUserName,nCount。
數組
前綴規範:
每一個局部變量都須要有一個類型前綴,按照類型能夠分爲:瀏覽器
s:表示字符串。例如:sName,sHtml; n:表示數字。例如:nPage,nTotal; b:表示邏輯。例如:bChecked,bHasLogin; a:表示數組。例如:aList,aGroup; r:表示正則表達式。例如:rDomain,rEmail; f:表示函數。例如:fGetHtml,fInit; o:表示以上未涉及到的其餘對象,例如:oButton,oDate; g:表示全局變量,例如:gUserName,gLoginTime;
JScript
是一種區分大小寫的語言。建立合法的變量名稱應遵循以下規則:函數
注意第一個字符不能是數字。學習
後面能夠跟任意字母或數字以及下劃線,但不能是空格 變量名稱必定不能是 保留字。
javascript
是一種弱類型語言,JavaScript
會忽略多餘的空格。您能夠向腳本添加空格,來提升其可讀性。ui
var
是javascript
的保留字,代表接下來是變量說明,變量名是用戶自定義的標識符,變量之間用逗號分開。
若是聲明瞭一個變量但沒有對其賦值,該變量存在,其值爲Jscript
值 undefined
。
在 Jscript
中,能夠對不一樣類型的值執行運算,沒必要擔憂 JScript
解釋器產生異常。相反,JScript
解釋器自動將數據類型之一改變(強制轉換)爲另外一種數據類型,而後執行運算。例如:
運算 結果 數值與字符串相加 將數值強制轉換爲字符串。 布爾值與字符串相加 將布爾值強制轉換爲字符串。 數值與布爾值相加 將布爾值強制轉換爲數值。
要想顯式地將字符串轉換爲整數,使用 parseInt
方法。要想顯式地將字符串轉換爲數字,使用 parseFloat
方法。
JavaScript
變量的生存期:當您在函數內聲明瞭一個變量後,就只能在該函數中訪問該變量。當退出該函數後,這個變量會被撤銷。這種變量稱爲本地變量。您能夠在不一樣的函數中使用名稱相同的本地變量,這是由於只有聲明過變量的函數可以識別其中的每一個變量。
若是您在函數以外聲明瞭一個變量,則頁面上的全部函數均可以訪問該變量。這些變量的生存期從聲明它們以後開始,在頁面關閉時結束。
jscript 有三種->主要數據類型、兩種->複合數據類型和兩種->特殊數據類型。
字符串 數值 布爾
對象 數組
Null `Undefined`
字符串數據類型:字符串數據類型用來表示 JScript
中的文本。在js
中,雖然雙引號("")和單引號('')都可表示字符串,並且它們幾乎沒有任何區別。但只使用雙引號
("")來表示字符串被認爲是最佳的。
一個字符串值是排在一塊兒的一串零或零以上的 Unicode
字符(字母、數字和標點符號)。
Unicode
爲每一個字符都提供了惟一的數值,不論是什麼平臺、什麼程序或什麼語言。開發unicode
是爲了給處理世界上存在的全部字符提供統一的編碼。
咱們須要明白一點,JScript
內部將全部的數值表示爲浮點值,所以,在 Jscript
中整數和浮點值沒有差異。
布爾(邏輯)只能有兩個值:true
或 false
。
詳情看我這篇文章->javascript學習總結— —數組和對象部分
Null 數據類型:能夠經過給一個變量賦 null 值來清除變量的內容。
Jscript
中 typeof
運算符將報告 null
值爲 Object
類型,而非類型 null
。
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title></title> <script type="text/javascript"> alert(typeof null); </script> </head> <body> </body> </html>
null
用來表示還沒有存在的對象,經常使用來表示函數企圖返回一個不存在的對象。
Undefined
數據類型:
以下狀況將返回 undefined
值:
對象屬性不存在, 聲明瞭變量但從未賦值。
alert(typeof undefined); //output "undefined" alert(typeof null); //output "object" alert(null == undefined); //output "true"
ECMAScript
認爲undefined
是從null
派生出來的,因此把它們定義爲相等的。
alert(null === undefined); //output "false" alert(typeof null == typeof undefined); //output "false"
null
與undefined
的類型是不同的,因此輸出"false
"。而===表明絕對等於,在這裏null === undefined
輸出false
另外,這裏介紹一種比較重要的數據類型——引用數據類型
javascript
引用數據類型是保存在堆內存中的對象,JavaScript
不容許直接訪問堆內存空間中的位置和操做堆內存空間,只能經過操做對象在棧內存中的引用地址。因此引用類型的數據,在棧內存中保存的其實是對象在堆內存中的引用地址。經過這個引用地址能夠快速查找到保存在堆內存中的對象。
下面咱們來演示這個引用數據類型賦值過程
天然,給obj2
添加name
屬性,其實是給堆內存中的對象添加了name
屬性,obj2
和obj1
在棧內存中保存的只是堆內存對象的引用地址,雖然也是拷貝了一份,但指向的對象倒是同一個。故而改變obj2
引發了obj1
的改變。
基本類型值指的是那些保存在棧內存中的簡單數據段,即這種值徹底保存在內存中的一個位置。
而引用類型值則是指那些保存在堆內存中的對象,即變量中保存的實際上只是一個指針,這個指針指向內存中的另外一個位置,該位置保存對象。
簡而言之,堆內存存放引用值,棧內存存放固定類型值。
在 ECMAScript
中,變量能夠存在兩種類型的值,即原始值和引用值。
原始值存儲在棧(stack
)中的簡單數據段,也就是說,它們的值直接存儲在變量訪問的位置。引用值存儲在堆(heap
)中的對象,也就是說,存儲在變量處的值是一個指針(point
),指向存儲對象的內存處。
<script type="text/javascript」> var box = new Object(); //建立一個引用類型 var box = "lee"; //基本類型值是字符串 box.age = 23; //基本類型值添加屬性很怪異,由於只有對象才能夠添加屬性。 alert(box.age); //不是引用類型,沒法輸出; </script>
優先級:指運算符的運算順序,通俗的說就是先計算哪一部分。
結合性:同一優先級運算符的計算順序,通俗的說就是從哪一個方向算起,是左到右仍是右到左。
String()
轉換爲字符串類型Number()
轉換爲數字類型Boolean()
轉換爲布爾類型
parseInt
:將字符串轉換爲整數。從字符串的開頭開始解析,在第一個非整數的位置中止解析,並返回前面讀到全部的整數。若是字符串不是以整數開頭的,將返回NaN。如:parseInt(「150 hi」)返回的值是:150,parseInt("hi")返回的值是:NaN。parseFloat
:將字符串轉換爲浮點數。 從字符串的開頭開始解析,在第一個非整數的位置中止解析,並返回前面讀到全部的整數。若是字符串不是以整數開頭的,將返回NaN。如:parseFloat("15.5 hi") 返回的值是:15.5,parseFloat("hi 15.5")返回的值是:NaN。
eval:將字符串做爲javascript表達式進行計算,並返回執行結果,若是沒有結果則返回undefined。
每當讀取一個基本類型值的時候,後臺就會建立一個對應的基本包裝類型的對象,從而能調用一些方法來操做這些數據。基本包裝類型包括Boolean
、Number
和String
var box = 'trigkit4'; //字面量 box.name = 'mike'; //無效屬性 box.age = function () { //無效方法 return 22; }; //new運算符寫法 var box = new String('trigkit4');//new 運算符 box.name = 'mike'; //有效屬性 box.age = function () { //有效方法 return 22; };
String
類型包含了三個屬性和大量的可用內置方法
屬性 描述 length :返回字符串的字符長度 Constructor : 返回建立String對象的函數 prototype : 經過添加屬性和方法擴展字符串定義
對於js流程控制語句,這裏只講幾個比較難懂的。其餘不贅述。等下附上一張思惟導圖。
1.for...in 語句對應於一個對象的每一個,或一個數組的每一個元素,執行一個或多個語句。
for (variable in [object | array]) statements
參數:
variable
:必選項。一個變量,它能夠是 object 的任一屬性或 array 的任一元素。object
, array
:可選項。要在其上遍歷的對象或數組。statement
:可選項。相對於 object 的每一個屬性或 array 的每一個元素,都要被執行的一個或多個語句。能夠是複合語句。
雖然條件控制語句(如if語句)只在執行多條語句的狀況下才要求使用代碼塊(左花括號"{"開頭,右花括號"}"結尾),但最佳實踐是始終使用代碼塊。
if(args) alert(args);//容易出錯 if(args){ alert(args);//推薦使用 }
js流程控制語句思惟導圖
函數是由事件驅動的或者當它被調用時執行的可重複使用的代碼塊。
Jscript
支持兩種函數:一類是語言內部的函數,另外一類是本身建立的。JavaScript
函數容許沒有參數(但包含參數的小括號不能省略),也能夠向函數傳遞參數供函數使用。
更多關於函數的知識請訪問個人另外一篇文章:javascript學習大總結(四)function函數部分
方法——函數:過程、動態的 屬性——變量:狀態、靜態的
最後,再附上一張前輩總結的思惟導圖:
javascript學習總結(二)數組和對象部分
javascript學習總結(三)BOM和DOM詳解
javascript學習總結(四)function函數部分
javascript學習總結(五)原型和原型鏈
javascript學習總結(六)數據類型和JSON格式