日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Javascript 你不知道的事

發(fā)布時間:2024/1/17 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Javascript 你不知道的事 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • NaN表示一個不能產(chǎn)生正常結(jié)果的運算結(jié)果。它不等于任何值,包括它自己??梢杂胕sNaN(number)來檢測。
  • 同Java中的字符串一樣,JS中的字符串是不可變的。也就是說一旦字符串被創(chuàng)建,就無法改變。下標(biāo)表達(dá)式(如s[3],代替s.charAt(3))可以讀取字符,但是不能用于改變字符。
  • null,undefined,空字符串'',0,NaN被當(dāng)做false,其余的值(包括"false")或?qū)ο蠖急划?dāng)做true。所謂的“被當(dāng)做”并不是說這些值就是布爾值true,例如true=="false"并不成立,而是在條件判斷語句如if("false")alert('"false" judge as true');中被當(dāng)做是true。之所以出現(xiàn)這樣的情況,是因為非空的字符串或者非null的對象相當(dāng)于!undefined或!null,其值被當(dāng)做true也就是很自然的了。我們可以用兩個取非的符號“!”將一個值強制轉(zhuǎn)換為布爾類型,對其真假進(jìn)行直觀的查看,例如alert(!!"false");輸出true。
  • 不同于C/C++、Java等語言,JavaScript的switch語句不光可以使用數(shù)字、字符做條件表達(dá)式,還可以使用字符串!其實JavaScript中沒有字符這個基本類型,單個的字符也是一個字符串。更強大的是,case語句的表達(dá)式可以是變量!下面是示例:
    [javascript]?view plaincopyprint?
  • function?t(p,v){??
  • ????switch?(p){??
  • ????????case?'c':??
  • ????????????alert('char');break;??
  • ????????case?'string':??
  • ????????????alert('string');break;??
  • ????????case?v:alert('variable:'?+?p);break;??
  • ????????default:alert(p);??
  • ????}??
  • }??
  • ??
  • t('c');//'char'??
  • t('string');//'string'??
  • t(123);//'123'??
  • t(123,123);//'variable:123'??
  • 程序隨時可以throw出一個異常,throw出來的可以是任意表達(dá)式、對象或常量;當(dāng)然,良好的異常處理系統(tǒng)是需要精心設(shè)計一下的。
  • switch、while、do、for語句允許有一個前置的標(biāo)簽,配合break或continue語句使用來完成一些跳轉(zhuǎn)。
  • JavaScript對象是可變的鍵控集合(keyed collections),是屬性的容器,屬性名甚至可以是空字符串"",屬性值可以是除undefined之外的任意值。簡單類型(number,string,boolean,null,undefined)貌似是對象,因為它們有方法;但它們是不可變的。
  • delete用來刪除對象的屬性,不會觸及原型鏈中的對象;刪除失敗的時候,該操作返回false。全局的函數(shù)和變量定義也是全局對象的屬性,因而可以用delete操作刪除,而函數(shù)內(nèi)部的變量聲明和函數(shù)定義則無法刪除,例如下列函數(shù)執(zhí)行的結(jié)果是彈出“false”。
    [javascript]?view plaincopyprint?
  • function?f(){??
  • ????var?a?=?3;??
  • ????alert(delete?a);??
  • }??
  • string的fromCharCode方法從一串代表ASCII碼的數(shù)字中,返回一個字符串,在某些情況下,這個方法可能會很有用。
    var a = String.fromCharCode(67,97,116);
    // a是'Cat'

  • string的replace()?方法的第一個參數(shù)是字符串或者正則表達(dá)式。第二個參數(shù)如果是字符串,可以指定正則表達(dá)式的匹配分組等信息,如$3代表第三個捕獲分組。第二個參數(shù)可以是函數(shù)而不是字符串。在這種情況下,每個匹配都調(diào)用該函數(shù),它返回的字符串將作為替換文本使用。
    該函數(shù)的參數(shù)與正則表達(dá)式exec方法返回的數(shù)組類似:第一個參數(shù)是匹配模式的字符串,接下來的參數(shù)是與模式中的子表達(dá)式匹配的字符串,可以有?0?個或多個這樣的參數(shù),再后面的參數(shù)是一個整數(shù),聲明了匹配在原字符串中出現(xiàn)的位置,最后一個參數(shù)是整個字符串。示例是最有力的說明手段:

    [javascript]?view plaincopyprint?
  • var?s?=?'fon230nva09dnfadsf';??
  • var?r?=?/(\d{2})([a-zA-z])/g;??
  • var?t?=?s.replace(r,function(){??
  • ????/*……*/??
  • });??
  • 相應(yīng)的第一次替換中,arguments的內(nèi)容為:
    Arguments[5]
  • 0:?"30n"
  • 1:?"30"
  • 2:?"n"
  • 3:?4
  • 4:?"fon230nva09dnfadsf"
  • exec方法的返回結(jié)果是一個JS數(shù)組,并附帶兩個額外的屬性index和input。與上面replace對應(yīng)的exec方法第一次執(zhí)行的返回結(jié)果對照如下:
    [javascript]?view plaincopyprint?
  • r.exec(s);??
  • Array[3]
  • 0:?"30n"
  • 1:?"30"
  • 2:?"n"
  • index:?4
  • input:?"fon230nva09dnfadsf"
  • length:?3
  • string的match方法根據(jù)g標(biāo)識來決定如何進(jìn)行匹配。如果沒有g(shù)標(biāo)識,那么調(diào)用string.match(regexp)的結(jié)果與第一次調(diào)用regexp.exec(string)的結(jié)果相同。如果regexp帶有g(shù)標(biāo)識,那么它返回一個包含所有匹配的字符串的數(shù)組。
    [javascript]?view plaincopyprint?
  • var?s?=?'fon230nva09dnfadsf';??
  • var?r?=?/(\d{2})([a-zA-z])/;??
  • s.match(r);??
  • 輸出結(jié)果:Array[3]
  • 0:?"30n"
  • 1:?"30"
  • 2:?"n"
  • index:?4
  • input:?"fon230nva09dnfadsf"
  • length:?3
  • [javascript]?view plaincopyprint?
  • var?r?=?/(\d{2})([a-zA-z])/g;??
  • s.match(r);??
  • 輸出結(jié)果:Array[2]
  • 0:?"30n"
  • 1:?"09d"
  • length:?2
  • string的split(separator,limit)方法把string分割成片段,來創(chuàng)建一個字符串?dāng)?shù)組。可選參數(shù)limit可以限制被分割的片段數(shù)量。separator參數(shù)可以是一個字符串或一個正則表達(dá)式,并且來自分組捕獲的文本將會被包含在被分割后的數(shù)組中。下面給出一個綜合的例子: [javascript]?view plaincopyprint?
  • var?s?=?'str1?,?str2?,?str3';s.split(/\s(,)\s/,4);??
  • //輸出結(jié)果:["str1",",","str2",","]??
  • string的substring函數(shù)的用法和slice一樣,但是它不能處理負(fù)數(shù)參數(shù)。ECMAscript中也沒有對substr方法進(jìn)行標(biāo)準(zhǔn)化,所以如果要取一個字符串的子串,就用slice方法吧!
  • 如果一個正則表達(dá)式對象reg帶有g(shù)標(biāo)識,則exec方法的查找不是從字符串的起始位置開始,而是從reg.lastIndex開始;遇到不成功的匹配時,才會將其重置為0。^因子也只匹配lastIndex為0的情形,所以某些情況下,可能會需要手動把lastIndex重置到0!
  • 不要對正則表達(dá)式的test方法使用g標(biāo)識,由于它在底層可能調(diào)用exec進(jìn)行判斷,test方法將與正則表達(dá)式的lastIndex屬性產(chǎn)生不必要的依賴。
  • 一個未被轉(zhuǎn)義的點號“."將匹配除行結(jié)束符以外的任何字符。
  • 正則表達(dá)式中,(?:exp)表示一個非捕獲組,它不會干擾捕獲型分組的編號。用非捕獲組替代不優(yōu)美的捕獲型分組是很好的方法,它減少了性能損失。而(?:exp)?表示一個可選的非捕獲分組,因為括號后面的“?”表示重復(fù)0或1次,所以該非捕獲組是可選的。
    應(yīng)避免使用/* */注釋,因為它可能與正則表達(dá)式字面量相沖突。
  • JS的數(shù)組可以用字符串形式的數(shù)字下標(biāo)來訪問,因為數(shù)組的元素其實是數(shù)組對象的屬性。delete可以用來從數(shù)組中移除元素,但由于一個元素就是一個屬性,delete會在數(shù)組中遺留一個“空洞”;使用splice方法可能是一個更好的辦法。例如要刪除arr數(shù)組的第3個元素,可以使用這樣的語句:arr.splice(2,1);不過對于大型數(shù)組來說,這個函數(shù)的效率可能不高。
  • 數(shù)組的length屬性不可枚舉。
  • 關(guān)于括號對作用域的影響,看下面的例子:?
    [javascript]?view plaincopyprint?
  • var?x=10;??
  • var?foo?=?{??
  • ????x:20,??
  • ????bar:function(){??
  • ????????var?x?=?30;??
  • ????????return?this.x;??
  • ????}??
  • }??
  • var?a?=?(foo.bar)();//括號不影響表達(dá)式的值,相當(dāng)于直接調(diào)用foo.bar()??
  • var?b?=?(foo.bar=foo.bar)();//括號表達(dá)式返回賦值操作的結(jié)果,也就是foo的成員bar函數(shù);而調(diào)用的時候已經(jīng)回到了全局作用域。??
  • var?c?=?(foo.bar,foo.bar)();//與上式相同,都是返回表達(dá)式的結(jié)果,也就是后面的bar函數(shù),同樣相當(dāng)于在全局作用域調(diào)用bar函數(shù)。??
  • 因此a、b、c的值分別為20,10,10。

    轉(zhuǎn)載于:https://www.cnblogs.com/xiaochao12345/p/3944129.html

    總結(jié)

    以上是生活随笔為你收集整理的Javascript 你不知道的事的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。