能直接向操作系統(tǒng)申請內(nèi)存的MS只有匯編,C,C++這類語言才能做到;其他語言,包括腳本都是間接申請內(nèi)存!關(guān)于瀏覽器方面的書嘛!我建議你看一下firefox的源碼,這是最好的教材!:lol:
成都創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、萊州網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為萊州等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
親愛的讀者朋友,如果你點開了這篇文章,說明你對正則很感興趣。
想必你也了解正則的重要性,在我看來正則表達(dá)式是衡量程序員水平的一個側(cè)面標(biāo)準(zhǔn)。
關(guān)于正則表達(dá)式的教程,網(wǎng)上也有很多,相信你也看了一些。
與之不同的是,本文的目的是希望所有認(rèn)真讀完的童鞋們,都有實質(zhì)性的提高。
本文內(nèi)容共有七章,用JavaScript語言完整地討論了正則表達(dá)式的方方面面。
如果覺得文章某塊兒沒有說明白清楚,歡迎留言,能力范圍之內(nèi),老姚必做詳細(xì)解答。
構(gòu)造正則表達(dá)式的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣。也就是用多種元字符與運算符可以將小的表達(dá)式結(jié)合在一起來創(chuàng)建更大的表達(dá)式。正則表達(dá)式的組件可以是單個的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。
正則表達(dá)式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為"元字符")組成的文字模式。模式描述在搜索文本時要匹配的一個或多個字符串。正則表達(dá)式作為一個模板,將某個字符模式與所搜索的字符串進(jìn)行匹配。
1、字符串的創(chuàng)建
創(chuàng)建一個字符串有幾種方法。最簡單的是用引號將一組字符包含起來,可以將其賦值給一個字符串變量。
var myStr = "Hello, String!";
我們在上面腳本創(chuàng)建了字符串,但本質(zhì)上,它們并不是真正的字符串對象,準(zhǔn)確地說,它們是字符串類型的值。要創(chuàng)建一個字符串對象,可使用如下語句:var strObj = new String("Hello, String!");
使用typeof運算符查看會發(fā)現(xiàn),上面的myStr類型為string,而strObj類型為object。
如果想知道字符串的長度,使用其length屬性:string.length。
得到字符串的指定位置的字符使用方法:string.charAt(index);
2、字符串的拼接
非常簡單,就用一個"+"將兩個字符串"相加":
var longString = "One piece " + "plus one more piece.";
要將多個字符串累積為一個字符串,還可以使用"+="操作符:
var result = "";
result += "My name is Anders"
result += " and my age is 25";
要在字符串中添加換行符,需要使用轉(zhuǎn)義字符"/n":
var confirmString = "You did not enter a response to the last " +
"question./n/nSubmit form anyway?";
var confirmValue = confirm(confirmString);
但這種方法只能用在像警告、確認(rèn)對話框之類的情況下,如果將這段文本作為HTML內(nèi)容呈現(xiàn),就無效了,此時用"br"代替它:
var htmlString = "First line of string.brSecond line of string.";
document.write(htmlString);
String對象還提供了方法concat(),它完成與"+"相同的功能:
string.concat(value1, value2, ...)
不過concat()方法顯然不如"+"來得直觀簡潔。
3、訪問字符串的子串
使用substring()或slice()方法(NN4+, IE4+),下面說明它們的具體用法。
substring()的原型為: string.substring(from, to)
第一個參數(shù)from指定了子字符串在原字符串中的起始位置(基于0的索引);第二個參數(shù)to是可選的,它指定了子字符串在原字符串的結(jié)束位置(基于0的索引),一般情況下,它應(yīng)比from大,如果它被省略,那么子字符串將一直到原字符串的結(jié)尾處。
如果參數(shù)from不小心比參數(shù)to大了會怎樣?JavaScript會自動調(diào)解子字符串的起止位置,也就是說,substring()總是從兩個參數(shù)中較小的那個開始,到較大的那個結(jié)束。不過要注意,它包含起始位置的那個字符,但不包含結(jié)束位置的那個字符。
var fullString = "Every dog has his day.";
var section = fullString.substring(0, 4); // section is "Ever".
slice()的原型為: string.slice(start, end)
參數(shù)start表示子串的起始位置,如果為負(fù)數(shù),那么可以理解為倒數(shù)第幾個開始,例如-3表示從倒數(shù)第三個開始;參數(shù)end表示結(jié)束位置,與start一樣,它也可以為負(fù)數(shù),其含義也表示到倒數(shù)第幾個結(jié)束。slice()的參數(shù)可以為負(fù)數(shù),所以要比substring()更加靈活,但沒那么寬容了,如果start比end要大,它將返回一個空字符串(示例略)。
還有一個方法是substr(),其原型為: string.substr(start, length)
從原型可以看出它的參數(shù)的含義,start表示起始位置,length則表示子字符串的長度。JavaScript標(biāo)準(zhǔn)不提倡使用該方法。
4、字符串的大小寫轉(zhuǎn)換
使用toLowerCase()和toUpperCase()方法:
var city = "ShanGHai";
city = city.toLowerCase(); // city is "shanghai" now.
5、判斷兩個字符串是否相等
先將用戶的輸入值全部轉(zhuǎn)換為大寫(或小寫),然后再行比較:
var name = document.form1.txtUserName.value.toLowerCase();
if(name == "urname")
{
// statements go here.
}
JavaScript有兩種相等運算符。一種是完全向后兼容的,標(biāo)準(zhǔn)的"==",如果兩個操作數(shù)類型不一致,它會在某些時候自動對操作數(shù)進(jìn)行類型轉(zhuǎn)換,考慮下面的賦值語句:
var strA = "i love you!";
var strB = new String("i love you!");
這兩個變量含有相同的字符序列,但數(shù)據(jù)類型卻不同,前者為string,后者為object,在使用"=="操作符時,JavaScript會嘗試各種求值,以檢測兩者是否會在某種情況下相等。所以下面的表達(dá)式結(jié)果為true: strA == strB。
第二種操作符是"嚴(yán)格"的"===",它在求值時不會這么寬容,不會進(jìn)行類型轉(zhuǎn)換。所以表達(dá)式strA === strB的值為false,雖然兩個變量持有的值相同。
有時代碼的邏輯要求你判斷兩個值是否不相等,這里也有兩個選擇:"!="和嚴(yán)格的"!==",它們的關(guān)系就類似于"=="和"==="。
討論:
"=="和"!="在求值時會盡可能地尋找值的匹配性,但你可能還是想在比較前進(jìn)行顯式的類型轉(zhuǎn)換,以"幫助"它們完成工作。比如,如果想判斷一個用戶的輸入值(字符串)是否等于一個數(shù)字,你可以讓"=="幫你完成類型轉(zhuǎn)換:
if(document.form1.txtAge.value == someNumericVar) { ... }
也可以提前轉(zhuǎn)換:
if(parseInt(document.form1.txtAge.value) == someNumericVar) { ... }
如果你比較習(xí)慣于強類型的編程語言(比如C#,Java等),那么這里你可以延續(xù)你的習(xí)慣(類型轉(zhuǎn)換),這樣也會增強程序的可讀性。
有一種情況需要注意,就是計算機的區(qū)域設(shè)置。如果用""和""來比較字符串,那么JavaScript把它們作為Unicode來比較,但顯然,人們在瀏覽網(wǎng)頁時不會把文本當(dāng)作Unicode來閱讀:) 比如在西班牙語中,按照傳統(tǒng)的排序,"ch"將作為一個字符排在"c"和"d"之間。localeCompare()提供了一種方式,可以幫助你使用默認(rèn)區(qū)域設(shè)置下的字符排序規(guī)則。
var strings; // 要排序的字符串?dāng)?shù)組,假設(shè)已經(jīng)得到初始化
strings.sort(function(a,b) { return a.localeCompare(b) }); // 調(diào)用sort()方法進(jìn)行排序
6、字符串的查找
使用string的indexOf()方法:
strObj.indexOf(subString[, startIndex])
strObj為要進(jìn)行判斷的字符串,subString為要在strObj查找的子字符串,startIndex是可選的,表示查找的開始位置(基于0的索引),如果startIndex省略,則從strObj開始處查找,如果startIndex小于0,則從0開始,如果startIndex大于最大索引,則從最大索引處開始。
indexOf()返回strObj中subString的開始位置,如果沒有找到,則返回-1。在腳本中,可以這么使用:
if(largeString.indexOf(shortString) != -1)
{
// 如果包含,進(jìn)行相應(yīng)處理;
}
也許一個字符串會包含另一字符串不止一次,這時第二個參數(shù)startIndex也許會派上用場,下面這個函數(shù)演示如何求得一個字符串包含另外一個字符串的次數(shù):
function countInstances(mainStr, subStr)
{
var count = 0;
var offset = 0;
do
{
offset = mainStr.indexOf(subStr, offset);
if(offset != -1)
{
count++;
offset += subStr.length;
}
}while(offset != -1)
return count;
}
String對象有一個與indexOf()對應(yīng)的方法,lastIndexOf():
strObj.lastIndexOf(substring[, startindex])
strObj為要進(jìn)行判斷的字符串,subString為要在strObj查找的子字符串,startIndex是可選的,表示查找的開始位置(基于0的索引),如果startIndex省略,則從strObj末尾處查找,如果startIndex小于0,則從0開始,如果startIndex大于最大索引,則從最大索引處開始。該方法自右向左查找,返回subString在strObj中最后出現(xiàn)的位置,如果沒有找到,返回-1。
沒有所謂的關(guān)聯(lián)數(shù)組與索引數(shù)組的這種分別。在js當(dāng)中所有要素都是繼承自O(shè)bject對象的,任何對象都能通過obj["name"]=something的形式來添加屬性.
其它語言中有區(qū)分關(guān)聯(lián)數(shù)組與索引數(shù)組。
任何語言都是解決問題的,單純的javascript是沒有意義的。你如果不了解其它前端技術(shù),如CSS,XHTML,XML,只知道Javascript,進(jìn)步就會很慢的。當(dāng)你了解了這些以后,你會想用Javascript實現(xiàn)更多的效果。這樣你才能進(jìn)步。還有就是多看別人的代碼。
1. JavaScript DOM 編程藝術(shù)
這本書作為被大家推薦的最多的前端入門書籍是有道理的。
他能真正讓大家了解dom腳本編程,或是說前端編程技術(shù)背后的思路和原則。
對于初學(xué)者來說,這本書沒有任何門檻,按部就班跟著書籍實例編寫代碼即可。
我們會知曉如何對瀏覽器元素操作和掌控,會學(xué)會如何實現(xiàn)簡單的頁面效果。
這種簡單易得的成就感是一個編程語言入門時最難能可貴的體驗。
閱讀建議:
這本書雖然簡單,但是能讓人快速對前端產(chǎn)生興趣和成就感。
不過后續(xù)學(xué)習(xí)jquery的時候可能會產(chǎn)生挫敗感。原生js dom操作的成就感會被jquery便捷的API所徹底打敗。所以一定要恰當(dāng)?shù)恼{(diào)整心態(tài),轉(zhuǎn)換思維方式,正確認(rèn)識到j(luò)query和原生js分別的優(yōu)劣之處。
在熟練使用jquery后還能想起來翻看這本書,找到之前未曾發(fā)現(xiàn)的閃光點,就是入門成功了。
2. JavsScript高級程序設(shè)計(第三版)
無論何時,這都是學(xué)習(xí)js最好的書。
如果說其他的書都是在合適的階段會有不一般的體驗。
這本書就是無論什么階段,都夠你感悟一番的。
當(dāng)你看完了市場上js相關(guān)(不包括框架類庫的最佳實踐類)的所有書籍。你再回去看這本書,也會發(fā)現(xiàn)其實95%的內(nèi)容早就寫在這本書里了,只不過你當(dāng)時等級不夠,根本沒有意識到。
這本書排版舒服,翻譯得體,內(nèi)容豐富,語言流暢。涵蓋了js語法(面向?qū)ο螅]包作用域等),js使用(dom,bom,html5API),編程實踐(高階函數(shù),編碼規(guī)范)等程序員使用javascript時會遇到的大部分問題。
(今天在上海面試了一天。大部分很順利,只是有幾個比較偏的問題沒回答好。晚上回去之后一翻高程三,果然在里面都寫得明明白白的。不得不服。)
閱讀建議:
人們喜歡把他和犀牛書拿一起推薦,不過就我看來,他們完全不是一個可讀性上的。
一個是課本一個是字典。而且還是佶屈聱牙的字典。
所以無論何時我都會把高程三排在js推薦書籍的第一位。
3. 鋒利的jQuery
圖忘了拍了,就不補了。
這本書如果緊接著dom編程看,會如我我說的那樣瞬間摧毀你的小小的成就感。
因為這本工具書級別的書簡單暴力到不給你思考什么“平穩(wěn)退化”,“js動畫計時器”這些dom編程中提及的問題,就直接就甩出一大片簡單有效的jqueryAPI顛覆你的世界觀。
這本書是如此的易懂以至于看完之后瞬間就覺得自己能把web玩出一片花來了。
作為工具書級別的書,或是說學(xué)習(xí)jqueryAPI的書,這是首選。
閱讀建議:
熟悉jquery是每個前端必須要會的事。
只是不要被Jquery的便捷迷惑,而拋離原生js,把原生js貶得一文不值,否則后面會付出昂貴的代價。
4. 學(xué)習(xí)Javascript數(shù)據(jù)結(jié)構(gòu)與算法
這本書相對是一本冷門書。
為什么我會推薦他,是因為他能解決每個半路出家的js程序員都曾思考過的一些問題:
1. 我們的數(shù)組Array這么強大,要棧Stack,隊列Queue這些功能少,半半拉拉的東西干什么呢?
2. 我們學(xué)的數(shù)據(jù)結(jié)構(gòu)搞來搞去好像也就那些玩意,為什么被大家這么推崇,還要分門別類討論呢?
所以這本書只是為何告訴你上面這些問題的答案:
1. 棧和隊列本來就沒有Array功能強。沒有Stack和Queue類只是因為ES5不去實現(xiàn)它而已。作為一種相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)集合,其存在意義是不應(yīng)該被其功能強大與否來決定的。
2. 數(shù)據(jù)結(jié)構(gòu)和編程語言無關(guān)。語言死了,他們會在下一門語言里重生。哪怕計算機死了,他們都會在下一個概念體里重生。
閱讀建議:
跟著書本把這里面的結(jié)構(gòu)全部敲一遍,快的話一天就能搞定。
從此你便再不怕懼怕js相關(guān)的簡單數(shù)據(jù)結(jié)構(gòu)問題。
但是,遇上高級的樹,圖等問題該跪還是要跪。因為這本書虎頭蛇尾,后面的高級點的數(shù)據(jù)結(jié)構(gòu)介紹的不夠深。
適合經(jīng)常反思“它從哪里來,要到哪里去?”的js程序員,或后悔以前數(shù)據(jù)結(jié)構(gòu)沒好好學(xué)的前端同學(xué)。
5. JavaScript設(shè)計模式與開發(fā)實踐
我認(rèn)為騰訊AlloyTeam的這本書對我?guī)椭敲栏叱倘?/p>
那時候我恰好換公司,從原來的開發(fā)方式切換成另一種完全不同的開發(fā)方式,讓我很不適應(yīng)。
這本書及時的蹦出來,他拿實際的應(yīng)用場景舉例,告訴你不同js項目里如何共通設(shè)計模式,還極其詳細(xì)的介紹了函數(shù)的高級用法,能讓你對js高階函數(shù)的認(rèn)知上升一個臺階。
難能可貴的是他還拿java作為靜態(tài)語言的類比。從語言統(tǒng)一高度來給你分析這些問題。
和上本介紹數(shù)據(jù)結(jié)構(gòu)的書一樣,這本書有的放矢,能完美的解決對js設(shè)計模式有疑問的同學(xué)的實際問題。
他比上本書更深刻,更易讀,也更貼近實踐。
閱讀建議:
這是本適合反復(fù)閱讀的書籍。
如果你的思路能根據(jù)應(yīng)用場景自動切換到最適合的設(shè)計模式,說明你已吃透這本書了。
6. 高性能JavaScript
作為Orelly唯一一本我確實認(rèn)可的javascript相關(guān)的書。作為Orelly唯一一本我確實認(rèn)可的javascript相關(guān)的書。
他摒棄了Orelly系列所有我不喜歡的特點:
老外的聊天說教式閱讀體驗,樣例不夠豐富,排版單一,破事水等。
他的優(yōu)點如下:
1. 情景豐富,基本涉及所有js性能優(yōu)化的場景。還會給出不同場景的實際測試數(shù)據(jù),真實可信。我們在閱讀這些場景實例的同時也豐富了自己js的使用經(jīng)驗。
2. 給出了很多看似"旁門左道"的解決方案,而這些冷門的解決方案恰恰是有些人死活百度不到的真正能解決問題的最優(yōu)解。
3. 在說問題的同時說原理,深入淺出,游刃有余。所以這本書不僅僅是一本介紹js性能相關(guān)的書,而是一本涉及瀏覽器原理,js解析原理,用戶體驗等知識的javascript最佳注解。
閱讀建議:
建議和高程三一起看,可以算是高程三閱讀的最佳伴侶。
高程三告訴你“他叫什么,他什么樣”,
這本書就告訴你“他為什么”,“他該怎樣”。
所以,當(dāng)別人還在為某些問題絞盡腦汁的時候,你已經(jīng)從起點上干翻他們了。
7. 你不知道的JavaScript(YOU DONT KNOW JAVASCRIPT)
大名鼎鼎的Github開源的書籍。大名鼎鼎的Github開源的書籍。
為了他的名氣我也得買一本實體書來拜讀下。
這本是上卷,只涉及作用域和閉包,this和對象原型兩部分。
不過其深入程度是其他js書籍難以企及的。
可以說,這已經(jīng)是大部分前端程序員對js語法可以深入了解的最底層了,再往下就直面編譯原理了。
網(wǎng)站欄目:javascript討論,javascript博客園
文章URL:http://chinadenli.net/article14/dsdssge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、網(wǎng)站改版、App開發(fā)、手機網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)