當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript权威指南学习笔记
生活随笔
收集整理的這篇文章主要介紹了
javascript权威指南学习笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?一.數據類型:
js中,所有的數字都是浮點型的。 isNaN()/isFinite() ? ? //檢測數據類型 Infinity ? ? ? ? ? ? ? //無窮大 Number.MAX_VALUE ? ? ? //可表示的最大數字 Number.MIN_VALUE ? ? ? //可表示的最小數字 數字轉字符串 n+"" String(N) n.toString() ? ? ? //可以加參數 2-2進制 8-8進制 16-16進制 n.toFixed() ? ? ? ?//顯示小數點后的指定位數 n.toExponential() ?//指數表示 n.toPrecision() ? ?//指定有意思的位數 字符串轉數字 +字符串? parseInt(string,16) ? ?//截取整數,支持另一個參數指定解析的數字基數(2-36) parseFloat() ? ? ? ? ? //截取整數和浮點數 布爾類型轉換 1.布爾轉其他 true-1 ?true-"true" false-0 false-"false" 2.其他轉布爾 數字 ?0/NaN-false 其他-true 字符串 ?空字符串-false ?其他-true 對象 ? ?空值/未定義的值-false ?非空對象、數組、函數-true 3.顯示轉換 Boolean(x)/!!x null的轉換 布爾 ? null-false 數字 ? null-0 字符串 null-"null" undefined的轉換 布爾 ? undefined-false 數字 ? undefined-NaN 字符串 undefined-"undefined" date類型轉換/格式化 date -- string date.toGMTString() date.toLocaleString() string -- date new Date(s) string -- string var date = new Date(s) date.toLocaleString() ===等同 數值和string只要值相等就完全相等。 兩個值同為null或undefined就完全相等。 只要有一個為NaN就不完全相等。 引用同一個對象、數組或函數就完全相等。 ==相等 同類型數據比較,相等就相等。 不同類型數據比較,先轉換成同類型數據再比較。 null和undefined相等。 二.變量 未用var聲明的變量會被創建為全局變量。 js中沒有塊級作用域,函數中聲明的所有變量在函數內都有定義。 ---------------------------------------------- function test(){ for(var k=0;k<10;k++){ alert(k); } alert(k); ? ? ? ? ? ? //10 } ---------------------------------------------- js解釋器運行時先創建一個全局對象,對象的屬性就是js程序的全局變量。 js函數都運行在自己獨有的執行環境。具有自己的調用對象。調用的對象的屬性就是該函數的局部變量。 三.運算符 in 要求左邊是字符串或可以被轉換成字符串,右邊是數組或函數。 delete var聲明的變量不能刪除,當delete操作的不是屬性、數組元素或變量時返回true ------------------------------------------ delete 1; ? ? ? ? ? //true delete x; ? ? ? ? ? //true ------------------------------------------ void 舍棄運算數的值,返回undefined,常用在客戶端的javascript:URl中,計算表達式的值,而瀏覽器不會顯示這個值。 另一個用途是專門生成undefined值。undefined是在javascript1.5中實現,考慮向后兼容,用void 0比undefined更有用。 <a href="javascript:void window.open();">Open New Window</a> a href="javascript:void(0)" 如果是個# ,就會出現跳到頂部的情況,:個人收藏的幾種方法: 1:<a href="####"></a> 2:<a href="javascript:void(0)"></a> 3:<a href="javascript:void(null)"></a> 4:<a href="#" false"></a> 5:<span style="cursor:hand"></span>(在FF中不能顯示) 方法2和3有可能導致頁面中的GIF動畫停止播放,推薦使用方法4 ,運算符 先計算左邊的參數,再計算右邊的參數,然后返回右邊參數的值 undefined不是保留字,為了確保其值不被改變,可以聲明一個未賦值的變量 -------------------------------------------- var undefined; ? ? ? ? ? ? ? ?//undefined為undefined -------------------------------------------- 未聲明的變量alert會報error錯,typeof會返回undefined null與undefined關系 undefined實際是null派生的,兩者相等 var t1 = 56; ? var t2 = 070; ? var t3 = 0x38; ? alert(t1==t2); //output:true ? alert(t2==t3); //output:true ? 這說明無論是8進制、16進制,其變量都保存的是10進制的值。 數值運算優先調用valueOf,字符串或輸出運算優先調用toString. 四.語句 switch語句 匹配case表達式是用===等同運算符判斷的,所以表達式必須在沒有類型轉換的情況下進行。 for/in語句 for(variable in object) statement with語句(代碼很難優化,運行速度慢,不建議使用) with語句用于暫時修改作用域鏈 with(object) statement 這條語句將object添加到作用域鏈的頭部,然后執行statement,在把作用域鏈恢復到原始狀態。 五.對象和數組 對象創建: ---------------------------------------------------- var obj = {}; var obj = new Object(); ---------------------------------------------------- 遍歷對象: ---------------------------------------------------- for(var name in o) statement ---------------------------------------------------- 檢測屬性的存在: ---------------------------------------------------- if("x" in o) if(o.x !==undefined) //區別當一個屬性定義為o.x=undefined時,上一個有操作,后一個不做任何操作。 ---------------------------------------------------- 刪除屬性: ---------------------------------------------------- delete o.xxx ---------------------------------------------------- 刪除操作將屬性從對象中移除,for/in不會枚舉該屬性。 Object的constructor屬性 每個對象都有一個constructor屬性,他引用初始化之個對象的構造函數。 ---------------------------------------------------------------------------------------------------- if((type o == "object")&&(o.constructor == Date)) ? ? ? ?//確定一個位置值的類型。 if((type o == "object")&&(o instanceof Date)) ? ? ? ? ? ?//instanceof檢查constructor屬性的值。 ---------------------------------------------------------------------------------------------------- 檢測對象的一個屬性是不是非繼承屬性 ---------------------------------------------------- o.hasOwnProperty("a"); ---------------------------------------------------- 檢測一個對象的類型強烈建議使用Object.property.toString方法。 typeof只使用在檢測一個變量是否已經定義。 ---------------------------------------------------- Object.prototype.toString.call([]) //"[object Array]" typeof foo !== 'undefined' ---------------------------------------------------- instanceof 操作符用來比較兩個操作數的構造函數。只有在比較自定義的對象時才有意義。? 如果用來比較內置類型,將會和 typeof 操作符 一樣用處不大。應該僅僅用來比較來自同一個 JavaScript 上下文的自定義對象 數組: Array對象的創建 1.new Array(10) 2.new Array("1","2") 3.["1","2"] js中數組是稀疏的,所以數組的下標不必落在一個連續的數字范圍 ------------------------------------------- a[0] = 1; a[10000] = 10000; //js解釋器只給下標為0和10000的元素分配內存 ------------------------------------------- 遍歷數組: js中數組是對象,用for in循環會枚舉原型鏈上所有屬性,過濾屬性的方式是用hasOwnProperty函數,會比普通的for慢。 推薦使用經典的for循環,通過l=list.length來緩存數組的長度。 --------------------------------------- var list = [1,2,3,4,......10000000000]; for(var i=0;l=list.length;i<l;i++){ alert(i); } --------------------------------------- delete操作和對對象的操作不同,對數組操作元素設置為undefined ,元素本身還存在 數組方法: join()? 把數組中所有元素轉換成字符串 ---------------------------------------- var array = [1,2,3]; alert(array.join("|")); ? ? //1|2|3 ---------------------------------------- reverse() 顛倒數組元素的順序。 ?--改變原數組 sort() 排序 ?默認是按字母順序。 a.sort(function(a,b){ return a-b; }); ? ? ? ? ? ? ? ? ? --改變原數組 concat() 數組連接。如果參數是數組將被展開連接,但不支持遞歸的展開。 ? ?--不改變原數組 --------------------------------------------------------------- var a = [1,2,3]; alert(a.concat(4,[5,[6,7]])); ? ? ? ? //[1,2,3,4,5,[6,7]] --------------------------------------------------------------- slice() 截數組。第一個參數是起始位置,第二個參數是結束位置。參數為負則相對于數組最后一個元素。 ? --不改變原數組 --------------------------------------------------------------- var a = [1,2,3,4,5]; alert(a.slice(1,-1)); ? ? ? ? ? ? ? ? //[2,3,4] --------------------------------------------------------------- splice() 插入或刪除數組元素。第一個參數是插入或刪除元素的位置,第二個參數是刪除的個數,后面元素是插入的元素。 --改變原數組 --------------------------------------------------------------- var a = [1,2,3,4,5]; ? ? ? ? ? ? ? ? ?//Returns [3,4] alert(a.splice(2,2,[1,2],3)); ? ? ? ? //a=[1,2,[1,2],3,5]? --------------------------------------------------------------- push()/pop() 從數組的尾部添加或刪除元素。返回數組新長度。 unshift()/shift() 從數組的頭部添加或刪除元素。返回數組新長度。 toStirng()/valueOf ? 每個數組元素調用toString()然后用","連接. 六.函數 函數定義 function square(x){ return x*x;} var square = function(x) { return x*x;} var square = new Functioin("x","return x*x;"); 函數參數 js函數可以以任意數目的參數來調用,而不管函數定義中的參數個數 函數中判斷一個參數是否傳進來 --------------------------------------------- if(!a) a=[]; a=a||[]; --------------------------------------------- arguments對象; 實際傳的參數列表,類似數組功能,有數組下標屬性和length屬性 arguments對象為其內部屬性以及函數形式參數創建getter和setter方法。 改變形參的值會影響到arguments對象的值,反之亦然。 ------------------------------------------- function foo(a,b,c){ arguments[0] = 2; a; ? ? ? ? ? ? ?//2 b=4; arguments[1]; ? //4 var d = c; d = 9; c; ? ? ? ? ? ? ?//3 } foo(1,2,3); ------------------------------------------- arguments是java標識符避免同名變量 callee屬性: 引用當前正在執行的函數,可以用作對未命名函數遞歸調用 -------------------------------------------- function(x){ if(x<=1) return 1; return x*arguments.callee(x-1); } -------------------------------------------- length屬性: 定義函數的實際參數數 prototype屬性: 每個函數都有一個prototype屬性,它引用的是預定義的原型對象。 call和apply方法: 第一個參數是要調用函數的對象,后面參數是函數的參數。 apply傳遞給函數的參數是由數組指定。 Function構造函數: 最后一個參數是函數體,如果前面有參數是函數參數 閉包: 定義在函數內部的函數: 用于讀取函數的局部變量, 函數返回局部變量 讓這些變量的值始終保持在內存中 調用閉包的變量聲明為全局變量。 當一個函數作為函數而不是方法來調用的時候,this指向的是全局對象 -------------------------------------------------------------- var name = "ferry_passion"; var obj = { "name":"ferry", getName:function(){ alert(this.name); ? ? ? ? ?//ferry return function(){ return this.name; } } }; alert(obj.learn()()); ? ? ? ? ? ? ? ? ? ? ?//ferry_passion -------------------------------------------------------------- 七.類、構造函數、原型 Math類 方法: random 前開后開,取0-1之間偽隨機數 ceil ?前開后閉,對一個數進行上舍入 floor 前閉后開,對一個數進行下舍入 round ?就近取整 max ? ?最大值 min ? ?最小值 String類 對象創建: new String("Hi") Stinrg("Hi") "Hi" 方法: indexOf ?檢索字符串 lastIndexOf ?從后向前檢索字符串 1、字符位置是從0開始索引 2、即使是從后往前查找,返回位置時也還是位置0開始計算 3、當在字符串中索引不到該子串時,返回-1值。 charAt ?返回在指定位置的字符 charCodeAt ?返回在指定位置的字符的Unicode編碼 slice(a[,b]) ?截取字符串 substring(a[,b]) ?取子串 substr(a[,length]) ?取子串 slice和substr,當a為負數從字符串尾部開始計算 substring為負數從0開始計算 match ? ?在字符串中檢索指定的值,返回匹配結果的數組 search 檢索指定的子字符串,返回相匹配的子串起始位置,沒有匹配返回-1 toLowerCase ?轉小寫 toUpperCase ?轉大寫 實例化obj對象三步: ------------------------------------------ function A(x){ this.x = x; } var obj = new A(1); ------------------------------------------ 1.創建obj對象:obj = new Object(); 2.將obj的內部_proto_指向構造他的函數A的prototype,同時obj.constructor===A.prototype.constructor 3.將obj作為this去調用構造函數A,初始化 區分繼承屬性和常規屬性的方法: Object.hasOwnProperty() 在原型對像中定義方法,對象中都可以用,原型對象的endsWith方法是唯一的副本共享,每個對象不創建單獨副本。 String.prototype.endsWith = function(c){} 絕對不能在Object.prototype添加屬性,因為添加的屬性可以用for/in循環枚舉,而{}對象沒有可枚舉屬性,在對象用作關聯數組代碼會出錯。 要在js中定義一個類方法只要讓相應的函數成為構造函數的一個屬性。 -------------------------------------------- function Circle(radius){ this.r = radius; } Circle.max = function(a,b){}; Circle.max(c,d); -------------------------------------------- 一個類的屬性聲明為私有的可以使用閉包。 -------------------------------------------- function f(a,b){ this.a = function(){return a;} this.b = function(){return b;} } -------------------------------------------- typeof null ?-- ?object typeof undefined -- undefined typeof 數組 ?-- object typeof 函數 ?-- function 原型eg1: ------------------------------------------------ 1 ?function A(x){ 2 ? this.x = x; 3 ?} 4 ?A.prototype.a = "a"; 5 ?function B(x,y){ 6 ? this.y = y; 7 ? A.call(this,x); 8 ?} 9 ?B.prototype.b1 = function(){ 10 ? alert("b1"); 11 ?} 12 ?B.prototype = new A(); 13 ?B.prototype.b2 = function(){ 14 ? alert("b2"); 15 ?} 16 ?B.prototype.constructor = B; 17 ?var obj = new B(1,3); ------------------------------------------------ 這個例子講的就是B繼承A。第7行類繼承:A.call(this.x);。實現原型繼承的是第12行:B.prototype = new A(); 就是說把B的原型指向了A的1個實例對象,這個實例對象具有x屬性,為undefined,還具有a屬性,值為"a"。所以B原型也具有了這2個屬性(或者說,B和A建立了原型鏈, B是A的下級)。而因為方才的類繼承,B的實例對象也具有了x屬性,也就是說obj對象有2個同名的x屬性,此時原型屬性x要讓位于實例對象屬性x,所以obj.x是1, 而非undefined。第13行又定義了原型方法b2,所以B原型也具有了b2。雖然第9~11行設置了原型方法b1,但是你會發現第12行執行后,B原型不再具有b1方法, 也就是obj.b1是undefined。因為第12行使得B原型指向改變,原來具有b1的原型對象被拋棄,自然就沒有b1了。 第12行執行完后,B原型(B.prototype)指向了A的實例對象,而A的實例對象的構造器是構造函數A, 所以B.prototype.constructor就是構造對象A了(換句話說,A構造了B的原型)。 alert(B.prototype.constructor)出來后就是"function A(x){...}" 。同樣地,obj.constructor也是A構造對象,alert(obj.constructor)出來后就是"function A(x){...}" , 也就是說B.prototype.constructor===obj.constructor(true),但是B.prototype===obj.constructor.prototype(false),因為前者是B的原型,具有成員:x,a,b2, 后者是A的原型,具有成員:a。如何修正這個問題呢,就在第16行,將B原型的構造器重新指向了B構造函數,那么B.prototype===obj.constructor.prototype(true), 都具有成員:x,a,b2。 如果沒有第16行,那是不是obj = new B(1,3)會去調用A構造函數實例化呢?答案是否定的,你會發現obj.y=3,所以仍然是調用的B構造函數實例化的。 雖然obj.constructor===A(true),但是對于new B()的行為來說,執行了上面所說的通過構造函數創建實例對象的3個步驟,第一步,創建空對象;第二步, obj.__proto__ === B.prototype,B.prototype是具有x,a,b2成員的,obj.constructor指向了B.prototype.constructor,即構造函數A; 第三步,調用的構造函數B去設置和初始化成員,具有了屬性x,y。雖然不加16行不影響obj的屬性,但如上一段說,卻影響obj.constructor和obj.constructor.prototype。 所以在使用了原型繼承后,要進行修正的操作。 關于第12、16行,總言之,第12行使得B原型繼承了A的原型對象的所有成員,但是也使得B的實例對象的構造器的原型指向了A原型,所以要通過第16行修正這個缺陷。 原型eg2: -------------------------------------------------------- function Foo() { this.value = 42; } Foo.prototype = { method: function() {} }; function Bar() {} // 設置Bar的prototype屬性為Foo的實例對象 Bar.prototype = new Foo(); Bar.prototype.foo = 'Hello World'; // 修正Bar.prototype.constructor為Bar本身 Bar.prototype.constructor = Bar; var test = new Bar() // 創建Bar的一個新實例 --------------------------------------------------------- // 原型鏈 test [Bar的實例] Bar.prototype [Foo的實例]? { foo: 'Hello World' } Foo.prototype {method: ...}; Object.prototype {toString: ... /* etc. */}; --------------------------------------------------------- test 對象從 Bar.prototype 和 Foo.prototype 繼承下來;因此,? 它能訪問 Foo 的原型方法 method。同時,它也能夠訪問那個定義在原型上的 Foo 實例屬性 value。 需要注意的是 new Bar() 不會創造出一個新的 Foo 實例,而是 重復使用它原型上的那個實例; 因此,所有的 Bar 實例都會共享相同的 value 屬性。 注意: 不要使用 Bar.prototype = Foo,因為這不會執行 Foo 的原型, 而是指向函數 Foo。 因此原型鏈將會回溯到 Function.prototype 而不是 Foo.prototype, 因此 method 將不會在 Bar 的原型鏈上。 當查找一個對象的屬性時,js會向上遍歷原型鏈,直到頂層沒找到就返回undefined。 要提防原型鏈過長帶來的性能問題,并知道如何通過縮短原型鏈來提高性能。? 更進一步,絕對不要擴展內置類型的原型,除非是為了和新的 JavaScript 引擎兼容。 js兩個小括號()()連用:函數會被立即執行 --------------------------------------- (function(){alert("aaa");})(); function foo(){alert(1);}foo(); --------------------------------------- hasOwnProperty函數判斷對象是否包含自定義屬性而不是原型鏈上的屬性。 如果hasOwnProperty被非法占用??梢杂猛獠康膆asOwnProperty函數獲取 {}.hasOwnProperty.call(foo,'bar'); for in 循環不會遍歷那些 enumerable 設置為 false 的屬性;比如數組的 length 屬性。 八.模塊和名字空間 當定義一個全局變量時,有被其他模塊覆蓋的危險,為了避免定義全局變量,使用模塊化編程。 --------------------------------------------- var ModuleClass={}; ModuleClass.函數名1 = function(){ }; ModuleClass.函數名2 = function(){ }; --------------------------------------------- 使用ModuleClass對象作為名字空間,將所有函數變量以及函數都放入其中。 如果名字沖突,可以使用域的方式做多級域名 --------------------------------------------- var util; if(!util)util={}; util.ModuleClass = {}; util.ModuleClass.函數名1 = function(){ }; util.ModuleClass.函數名2 = function(){ }; --------------------------------------------- 九.正則表達式 正則表達式方法: test() 檢測指定的字符串是否存在,返回true或false exec() 查找匹配 匹配失敗返回null 匹配成功返回一個數組,數組的0元素包含完整的匹配,其他元素包含的是匹配中任意一個子匹配,并更新RegExp對象屬性 index是匹配發生的字符位置,input是被檢索的字符串 String方法 search() 指明是否存在相應匹配,成功返回第一個成功檢索位置,失敗返回-1 replace()? 替換字符串,返回替換后的字符串 split() 分割字符串,返回分割數組 match() 如果沒有找到匹配返回null,否則返回一個數組 RegExp的方法test()和exec()受全局標志"g"和lastIndex的影響,而string的方法match(),search()等則不受影響 在一次匹配成功后,會設置lastIndex,下一次匹配,就會從這個lastindex所指示的位置開始嘗試匹配, 當匹配失敗時,lastIndex會被重新置為0 --------------------------------------------------------------------- var arr = [1,2,3,4,5]; var reg = /^\d+$/g; for(var i = 0;i<arr.length;i++){ document.write("源字符串:"+arr[i]+" 驗證結果:"+reg.test(arr[i])+" lastindex:"+reg.lastIndex+"<br/>"); } document.write("<br>"); var reg = /^\d+$/; for(var j = 0;j<arr.length;j++){ document.write("源字符串:"+arr[j]+" 驗證結果:"+reg.test(arr[j])+" lastindex:"+reg.lastIndex+"<br/>"); } 結果: 源字符串:1 驗證結果:true lastindex:1 源字符串:2 驗證結果:false lastindex:0 源字符串:3 驗證結果:true lastindex:1 源字符串:4 驗證結果:false lastindex:0 源字符串:5 驗證結果:true lastindex:1 源字符串:1 驗證結果:true lastindex:1 源字符串:2 驗證結果:true lastindex:1 源字符串:3 驗證結果:true lastindex:1 源字符串:4 驗證結果:true lastindex:1 源字符串:5 驗證結果:true lastindex:1 --------------------------------------------------------------------- [\u4e00-\u9fa5] ?匹配任意一個漢字 \s 任意空白字符 ?(\r\n\f\t\v) \b單詞邊界 . 匹配除\n以外的字符,匹配所有字符一般用[\s\S]或.加(?s)匹配模式 ?s Single-line模式 用new RegExp()創建的正則要注意引號內的轉義 js只支持順序環視,不支持逆序環視。java中支持順序環視和確定長度表達式的逆序環視。 0-100的數字 ^([1-9]?[0-9]|100)$ 捕獲組 普通捕獲組()/命名捕獲組(?<name>(Expression)) 非捕獲組 (?:Expression) 消除一些不得不使用(),卻又不需要使用捕獲組而帶來內存被占用,匹配效率降低的情況。 環視? 匹配內容不計入最終匹配結果,零寬度[(?=Expression),(?<=Expression)] ---------------------------------------------------------------------- var str = "aa<p>one</p>bb<div>two</div>cc"; var reg = /<(?!\/?p\b)[^>]+>/; alert(str.match(reg)); ? ? ? ? ? ? ? ? ?//div ---------------------------------------------------------------------- 匹配優先[貪婪模式]({m},{m,n},{m},?,*,+)/忽略優先[非貪婪模式]({m}?,{m,n}?,{m,}?,??,*?,+?) 在匹配成功的情況下,貪婪模式進行了更少的回溯,回溯過程需要進行控制權的交接 反向引用 捕獲組在匹配成功時,會將子表達式匹配到的內容,保存到內存中一個以數字編號的組里,可以通過反向引用方式,引用這個局部變量的值 \1/\k<name> 年份0001-9999,格式yyyy-MM-dd或yyyy-M-d ^(?:(?!0000)[0-9]{4}([-/.]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)| (?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00) ([-/.]?)0?2\2(?:29))$ 取img中的屬性。 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- var data = [' <img alt="" border="0" name="g6-o44-1" src="/bmp/foo1.jpg" />', ' <img src="/bmp/foo2.jpg" alt="" border="0" name="g6-o44-2" />'] ; ? var reg = /<img\b(?=(?:(?!name=).)*name=(['"]?)([^'"\s>]+)\1)(?:(?!src=).)*src=(['"]?)([^'"\s>]+)\3[^>]*>/i; ? for(var i=0;i<data.length;i++) ? { ? var s = data[i]; ? document.getElementById("result").value += "源字符串:" + s + "\n"; ? document.write("<br />"); ? if(reg.test(s)) ? { ? document.getElementById("result").value += "name: " + RegExp.$2 + "\n"; ? document.getElementById("result").value += "src: " + RegExp.$4 + "\n"; ? } ? }? Results: 源字符串: <img alt="" border="0" name="g6-o44-1" src="/bmp/foo1.jpg" /> name: g6-o44-1 src: /bmp/foo1.jpg 源字符串: <img src="/bmp/foo2.jpg" alt="" border="0" name="g6-o44-2" /> name: g6-o44-2 src: /bmp/foo2.jpg --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <html> <head> </head> <body> <script type="text/javascript"> var s = " ? ?f e r ? r y ?"; alert("s="+s.replace(/\s*/g,"")+"!"); ?//去所有空格 alert("s="+s.replace(/^\s*/g,"")+"!"); //去左空格 alert("s="+s.replace(/\s*$/g,"")+"!"); //去右空格 alert("s="+s.replace(/^\s*|\s*$/g,"")+"!"); //去左右空格 </script> </body> </html>轉載于:https://blog.51cto.com/smile2010/725729
總結
以上是生活随笔為你收集整理的javascript权威指南学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]XCode中修改缺省公司名称/开发
- 下一篇: TwinVQ解码框图