[TOC]javascript
建立object實例有兩種 第一種:new操做符後跟Object構造函數var person = new Object();
第二種:對象字面量前端
var person = { name = "yohann"; age = 22; };
使用對象字面量語法,屬性名也能夠用字符串 開發人員更青睞對象字面量語法java
alert(person["name"]); alert(person.name);
方括號語法的優勢能夠經過變量名來訪問屬性 若是屬性包含致使語法錯誤的字符,或者屬性名是關鍵字或保留字,可使用方括號法 一般,除非必須使用變量來訪問屬性,建議使用點表示法正則表達式
var colors = new Array();
第二種:使用數組字面量var colors = ["red", "blue", "green"];
數組length屬性不是隻讀的,能夠對其讀寫肯定某個對象是否爲數組,能夠用Array.isArray()
方法,不用管是哪一個全局環境中建立的 兼容IE9+,Firefox4+,Safari 5+,Opera 10.5+,Chromeexpress
數組的toString方法會返回有數組中每一個值字符串拼接而成的以一個逗號分開的字符串 valueOf方法,toLocaleString方法 調用數組的toLocaleString方法會建立一個以逗號分開的字符串 使用join()方法,可使用不一樣的分隔符來構建這個字符串數組
ECMAScript爲數組提供push()方法和pop()方法,實現相似棧的行爲 push()方法接收任意數量的形參,逐個添加到數組末尾,並返回修改後的長度 pop()方法從數組移出最後一項,減小數組length值,而後返回移出的項瀏覽器
隊列的訪問規則是先進先出 shift()
方法,移除數組的第一個項並返回該項,同時數組長度減一。 unshift()
方法,在數組前端添加任意個項,並返回數組的長度 用unshift方法和pop方法能夠相反的模擬隊列app
數組中存在兩個直接用來重排序的方法:reverse(
)和sort()
reverse()方法
:反轉數組項的順序 sort()方法能夠接收一個比較函數做爲參數值,以便咱們指定哪一個值在哪一個值前面 比較函數經過返回一個小於零,等於零或大於零的值來影響排序結果dom
concat()
方法:基於當前數組中的全部項,建立一個數組。傳遞給該方法是一個或多個數組,則將每一項添加到結果數組中 slice()
方法: 基於當前數組中的一個或多個項建立數組。接收一個或者兩個參數。一個參數返回從這個參數開始到數組末尾的數組。兩個參數返回起始和結束位置的項,但不包含結束位置項 splice()
方法:向數組中部插入項函數
indexOf方法和lastIndexOf方法 兩個方法都接收兩個參數:要查找的項和表示查找起點位置的索引 前者從數組的開頭位置(0)開始向後查找,後者從數組的末尾開始向前查找 要查找的項必須嚴格相等
every()
: 對數組中的每一項運行給定函數,若是函數對每一項都返回true,則返回truefilter()
: 對數組的每一項運行給定函數,返回給函數會返回true的項組成的數組forEach()
: 對數組中的每一項運行給定函數,沒有返回值map()
: 對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組some()
: 對數組中的每一項運行給定函數,若是函數對任一項返回true,則返truereduce()和reduceRight()。迭代數組的全部項,構建一個最終的返回值。 reduce()
方法從數組的第一項開始,reduceRight()
則從數組的最後一項開始 接收兩個參數:一個在每一項調用的函和(可選的)做爲歸併基礎的初始值 傳遞的函數接收四個參數:前一個值,當前值,項的索引和數組對象 例如用此方法執行求數組中全部值之和操做
建立日期對象,使用new操做符和Data構造函數便可 不傳遞參數,自動得到當前的日期和時間。 若根據特定的日期和時間建立時間,必須傳入表示該日期的毫秒數 簡化這一計算過程提供了兩個方法:Data.parse()
和Data.UTC()
前者接收一個表示日期的字符串參數,根據這個字符串參數返回相應日期的毫秒數 Data.parse()
日期格式:
Data.UTC()
方法一樣返回日期的毫秒數,不一樣的是 Data.UTC()
的參數分別是年份,基於0的月份(一月是0,二月是1),月中的那一天(1到31),小時數(0到23),分鐘,秒以及毫秒數 例:var allFIves = new Data(Data.UTC(2005, 4, 5, 17, 55, 55));
Data構造函數會模仿Data.UTC()
,有一點明顯不一樣,日期和時間丟失基於本地時間而非GMT建立 ECMAScript5添加了Date.now()
方法,返回表示調用這個方法時的日期和時間的毫秒數Data類型也重寫了toLocaleString(),toString()和valueOf()方法 前兩個方法在不一樣的瀏覽器中返回的日期和時間格式截然不同
Data類型有專門用於將日期格式化爲字符串的方法
直接取得和設置日期值中特定部分的方法
ECMAScript經過RegExp類型來支持正則表達式
var expression = /pattern/flags ;
正則表達式的匹配模式支持下列的3個標誌
RegExp的主要方法是exec(),專門爲捕獲組而設計的。exec()接受一個參數,即要應用模式的字符串,而後返回包含第一個匹配項信息的數組;或者在沒有匹配項的狀況下返回null。返回的數組包含兩個額外的屬性:index和input。 index表示匹配項在字符串的位置,input表示應用正則表達式的字符串 RegExp的第二個方法是tes(),它接受一個字符串參數,在模式與該參數匹配的狀況下返回true,不然返回false RegExp實例繼承的toString
和toLocaleString
方法都會返回正則表達式的字面量
構造函數包含一些屬性,基於所執行的最近一次正則表達式操做而變化。這些屬性分別有一個長屬性名和短屬性名
ECMAScript正則表達式有一些不支持的特性
每一個函數都是Function類型的實例。 使用函數表達式定義函數,不必使用函數名
建立第二個函數會覆蓋引用第一個函數變量
函數聲明和函數表達式並不是徹底一致,
alert(sum (10, 10)); function sum(num1 + num2) { return num1 + num2; }
alert (sum (10,10)); var sum = function (num1, num2) { return num1 + num2; };
第一個代碼不會出錯,第二個代碼就會出錯
能夠將一個函數做爲另外一個函數的結果返回
function callSomeFunction (someFunction, someArgument) { return someFunction (someArgument); }
函數內部有兩個特殊的對象,就是arguments和this。arguments主要用途是保存函數參數,它有一個名叫callee的屬性,該屬性是一個指針,指向擁有arguments對象的函數
function factorial (num) { if (num < 1) { return 1; } else { return num * factorial (num - 1); } }
函數執行與函數名牢牢耦合在一塊兒,爲了消除這種緊密耦合現象可使用arguments.callee
function factorial (num) { if (num < 1) { return 1; } else { return num * arguments.callee(num - 1); } }
this引用的是函數執行的環境對象 函數的名字是一個包含指針的變量
每一個函數都包含兩個屬性:length和prototype。 在建立自定義引用類型和實現繼承是,prototype屬性極爲重要 每一個函數都包含兩個非繼承而來的方法:apply()
和call()
,實際上等於設置函數體內this對象的值 apply()方法接收兩個參數:一個是運行函數的做用域,另外一個是參數數組
function sum(num1, num2) { return num1 + num2; } function callsum (num1, num2){ return sum.apply(this, arguments); }
call方法和apply方法相同。第一個參數沒有變化,不過第二個參數要逐個枚舉出來 它們真正強大的地方在於可以擴充函數賴以運行的做用域
window.color = "red"; var o = { color: "blue"}; function sayColor(){ alert (this.color); } sayColor(); //red sayColor.call(this); //red sayColor.call(window) //red sayColor.call(o); //blue
另外一個方法bind()
這個方法會建立一個實例,其中this的值會被綁定傳給bind()函數的值
window.color = "red"; var o = { color: "blue"}; function sayColor(){ alert (this.color); } var objectSayColor = sayColor.bind(o); objectSayColor(); //blue
ECMAScript提供三個特殊的引用類:Boolean、Number、String. 每讀取一個基本類型值,後臺會建立一個對應的基本包裝類型的對象 基本類型值不是對象,於是不應有方法,其實後臺會自動進行處理,定義對象 引用類型與基本包裝類的主要區別在於對象的生存週期 new操做符建立的引用類型實例,在離開當前做用域前會一直保存在內存裏。而自動建立的基本包裝類型的對象,只存在於代碼的執行瞬間,而後當即被銷燬 使用new調用基本包裝類型的構造函數與直接調用同名的轉型函數是不同的 例如:
var value = "25"; var number = Number(value); //轉型函數 alert (typeof number); //number var obj = new Number(value); //構造函數 alert (typeof obj); //object
基本類型與引用類型的布爾值有很大的區別。 建議永遠不要使用Boolean對象
此類型提供了一些用於將數值格式化爲字符串的方法 toFixed()
按照指定的小數位返回字符串 toExponential()
返回以指數表示法 toPrecision()
可能返回固定大小(fixed)格式,也可能返回指數格式(Exponential)
charAt()
和charCodeAt()
其中charCodeAt()
會返回特定位置的字符編碼 ECMAScript5提供一種用方括號加數字索引來訪問字符串中特定字符concat()
方法:將一個或多個字符串拼接,返回拼接獲得的新字符串 但實踐中使用最多的仍是加號操做符 三個基於字符串建立新字符串的方法:slice()
、substr()
和substring()
slice和substring第一個參數指定字符串開始的位置,第二個參數指定字符串最後一個字符後面的位置。 substr第二個參數值指定返回的字符個數 若給定參數是負數,它們的行爲不盡相同 slice()
方法會將傳入的負值與字符串長度相加,substr()
會將負的第一個參數加上字符串的長度,第二個負的參數轉化爲0,substring()
方法會將全部負值轉化爲0indexOf()
和lastIndexOf()
方法 其中indexOf是從前向後查找。lastIndexOf是從後向前查找。 均可以接收可選的第二個參數,表示從那個位置開始查找 將返回的位置保存在數組positions中,以便未來調用toLowerCase()
、toUpperCase()
和toLocaleLowerCase()
、toLocaleUpperCase()
後二是針對特定地區實現match()
方法,只接受一個參數,要麼是一個正則表達式,要麼是一個RegExp對象 search()
方法,參數與match相同。此方法返回字符串第一個匹配項的索引;若是沒有匹配項,則返回-1 replace()
方法,替換字符串 split()
方法,基於指定的分隔符將一個字符串分割成多個字符串ECMA-262定義了兩個單體內置對象
全部在全局做用域中定義的屬性和函數都是Global對象的屬性
encodeURI()
主要用於整個URI,encodeURIComponent()
用於URI的某一段 encodeURI()
不會對自己屬於URI的特殊字符進行編碼,而encodeURIComponent()
對任何非標準字符進行編碼 與兩者對應的解碼分別是decodeURI()
和decodeURIComnent()