2. 引用類型

1.Array

1.1數(shù)組的length屬性

數(shù)組的length屬性很有特點(diǎn)——它不是只讀的,因此通過這個屬性,我們可以在數(shù)組的末尾移除項(xiàng)或者添加項(xiàng).

1.2 檢測類型

instanceof

  • 語法: arr instanceof Array // true
    但是趣倾,instanceof存在問題侧馅,加入頁面當(dāng)中有多個框架,那么就會產(chǎn)生多個array暖庄,當(dāng)兩個環(huán)境不一致的時候弊予,檢測就會出錯

Array.isArray()

  • 語法: Array.isArray(value) //true
    這個方法是判斷這個值是不是數(shù)組祥楣,而不去管它是在哪個執(zhí)行環(huán)境

1.3 類型轉(zhuǎn)換

toStringtoLocaleStringvalueOf 每個對象身上都有的方法荣堰,在對數(shù)組進(jìn)行類型轉(zhuǎn)換的時候床未,數(shù)組的每一項(xiàng)都會默認(rèn)調(diào)用toString() 這個方法。

1.4 數(shù)組的方法

1.41 棧方法

arr.push()
語法: arr.push(value);
作用: 在數(shù)組的最后插入項(xiàng)振坚,并返回插入項(xiàng)之后數(shù)組的長度薇搁。

arr.pop()
語法: arr.pop();
作用: 將數(shù)組的最后一項(xiàng)刪除,返回被刪除的項(xiàng)渡八。

1.42 隊(duì)列方法

arr.unshift()
語法: arr.unshift(value);
作用: 在數(shù)組的最前面插入項(xiàng),并返回插入項(xiàng)之后數(shù)組的長度.

arr.shift()
語法: arr.shift()
作用: 刪除數(shù)組的第一項(xiàng),并返回被刪除的項(xiàng).

1.43 重排序方法

arr.reverse()
語法: arr.reverse(value);
作用: 逆轉(zhuǎn)數(shù)組.

arr.sort()
語法: arr.sort()
作用: 重排序, 如果不傳比較函數(shù)的話,sort()會調(diào)用數(shù)組每一項(xiàng)的toString()方法,然后比較得到的字符串,但是,sort()還是很強(qiáng)大的,里面可以傳入一個比較的函數(shù).

function compare(value1, value2) {
    return value1-value2;
}
arr.sort(compare);
1.44 操作方法

arr.concat()
語法: arr.concat(value);
作用: 拷貝一個數(shù)組的副本,但是不改變原數(shù)組,value的值可以是字符串,也可以是數(shù)組,任何類型都可以.

arr.slice()
語法: arr.slice(起始位置, 結(jié)束位置);
作用: 截取數(shù)組,從起始位置開始,到結(jié)束位置結(jié)束,但是不包含結(jié)束位置.然后返回一個新的數(shù)組,不會改變原數(shù)組.

arr.splice()
語法: arr.splice(起始位置, 操作的項(xiàng)數(shù), 新的項(xiàng));
作用; 拼接數(shù)組,向數(shù)組當(dāng)中插入項(xiàng),有多種用法.

var arr = [1, 2, 3, 4]
arr.splice(0, 1) // 刪除操作,從第一項(xiàng)開始,刪除一項(xiàng),返回刪除的項(xiàng)組成的數(shù)組 [1];
console.log(arr) // [2, 3, 4]  
 arr.splice(0, 0, 5, 6)    //插入操作, 從第一項(xiàng)開始,刪除0項(xiàng),然后在開始的位置加上5, 6兩項(xiàng), 返回的是一個空數(shù)組.
console.log(arr) // [5,6,1,2,3,4]      
arr.splice(0,1, 5) //替換操作,從第一項(xiàng)開始,刪除一項(xiàng),然后將5插入, 返回被刪除的項(xiàng)組成的數(shù)組 [1];
console.log(arr) // [5,2,3,4]
1.45 位置方法

arr.indexOf()
語法: arr.indexOf(value)
作用: 查詢數(shù)組當(dāng)中是否有某個值,如果有的話返回索引,如果沒有返回-1;

arr.lastIndexOf()
語法: arr.lastIndexOf(value);
作用: 查詢數(shù)組當(dāng)中是否包含某個值,從右往左的順序,如果有的話返回索引,如果沒有的話返回-1;

1.46 迭代方法

foreach()啃洋、map()、filter()屎鳍、some()宏娄、every()、reduce()逮壁、reduceRight()這幾個方法已經(jīng)記錄過了孵坚。

2. Data類型

Data類型使用的時間是自1970年1月1日起經(jīng)過的毫秒數(shù).

Data常用方法

  • getFullYear(): 返回年份,四位;
  • getMonth(): 返回月份, 其中0表示一月,11表示12月,在操作的時候要注意.
  • getDate(): 返回日期月份當(dāng)中的天數(shù)(1到31)
  • getDay(): 返回日期當(dāng)中的星期幾,其中0代表的是星期日, 6代表星期六;
  • getHours(): 返回小時數(shù),從0到23;
  • getMinutes(): 返回日期中的分鐘數(shù),從0到59;
  • getSeconds(): 返回日期當(dāng)中的秒數(shù),從0到59;

3.Function類型

函數(shù)實(shí)際上是對象,也有屬性和方法,這樣來說的話,函數(shù)是引用類型,函數(shù)名其實(shí)是指向函數(shù)對象的一個指針,不會與函數(shù)方法綁定.

3.1 函數(shù)沒有重載

個人理解:由于函數(shù)名是函數(shù)對象的指針,并不是函數(shù)方法,所以定義相同名字的函數(shù),相當(dāng)于是給變量綁定了一個新的對象.

3.2 函數(shù)聲明和函數(shù)表達(dá)式

函數(shù)聲明有函數(shù)聲明提升,函數(shù)表達(dá)式?jīng)]有,除了這一點(diǎn)兩者沒有任何區(qū)別

3.3 作為值的函數(shù)

由于函數(shù)名本來就是變量名,所以函數(shù)也就相當(dāng)于賦值給變量的值,可以當(dāng)做值來使用. 也就是說,不僅可以像傳遞參數(shù)一樣把一個函數(shù)傳遞給另一個函數(shù),而且可以將一個函數(shù)作為另一個函數(shù)的結(jié)果返回,這就是高級函數(shù)與閉包

<script>
        function demo(arg1, arg2) {
            return arg1(arg2);
        }
        function add(num) {
            num += 10;
            return num;
        }
        var a = demo(add, 20);
        console.log(a); // 30
    </script>

3.4 函數(shù)的內(nèi)部屬性

函數(shù)的內(nèi)部有兩個特殊的對象——arguments和this. 其中,arguments就是傳參列表,你變我也變,我變你也要變. 另一個特殊對象this,就是函數(shù)執(zhí)行時的環(huán)境對象的引用,在全局作用域中執(zhí)行,this就指向window

3.5 函數(shù)的屬性和方法

3.51 函數(shù)的屬性

因?yàn)楹瘮?shù)是對象,所以函數(shù)也有屬性和方法,每個函數(shù)都包含兩個屬性——length和prototype。其中窥淆,length表示的是函數(shù)希望接收的實(shí)參的個數(shù)卖宠。prototype屬性,后面原型會深入研究忧饭,它是一個指向原型對象的指針

3.52 函數(shù)的方法

每個函數(shù)都有兩個非繼承而來的方法:apply()和call().這兩個方法的用途都是在特定的作用域當(dāng)中調(diào)用函數(shù),實(shí)際上等于設(shè)置函數(shù)體內(nèi)this對象的值,(因?yàn)閠his指向的是函數(shù)運(yùn)行時所在的作用域?qū)ο罂肝椋詫⑻囟ǖ淖饔糜驅(qū)ο髠鬟M(jìn)來,就改變了this對象的值)

apply()
語法: fn.apply(context, [arg1, arg2, arg3...])
作用: 改變this指向,注意傳的參數(shù)要是個數(shù)組;

call()
語法: fn.call(context, arg1, arg2, arg3...)
作用: 改變this指向, 注意傳的參數(shù),是一個一個傳的,而不是數(shù)組.

bind()
語法: fn.bind(context, arg1, arg2....)
作用: 改變this指向, 返回一個新的函數(shù),該函數(shù)的this指向的是context;

<script>
        var color = 'red';
        var obj = {
            color: 'blue'
        }
        function getColor() {
            console.log(this.color);
        }
        var getNewColor = getColor.bind(obj);
        getNewColor() //blue;
        getColor() // red;
    </script>

4. 基本包裝類型

為了便于操作基本類型,ECMAScript還提供了3個特殊的引用類型:Boolean词裤、Number和String,這些類型與其他的引用類型相似刺洒,但同時又有各自基本類型對應(yīng)的特殊行為。實(shí)際上每當(dāng)讀取一個特殊類型的值的時候吼砂,后臺就會創(chuàng)建一個對應(yīng)的基本的包裝類型的對象逆航,從而讓我們能夠調(diào)用一些方法來操作這些數(shù)據(jù)。

例:

var s1 = 'hello world';
var s2 = s1.substring(2);

摘抄
這個例子中的s1包含一個字符串渔肩,字符串當(dāng)然是基本類型的值因俐。而下一行調(diào)用了s1的substring()方法,并將返回的結(jié)果保存在了s2當(dāng)中赖瞒。 我們知道基本類型不是對象女揭,因而從邏輯上講它們不應(yīng)該有方法才對蚤假。其實(shí)為了讓我們實(shí)現(xiàn)這種直觀的操作栏饮,后臺已經(jīng)自動完成了一系列的處理。當(dāng)?shù)诙写a訪問s1的時候磷仰,訪問過程處于一種讀取模式袍嬉,也就是要從內(nèi)存中讀取這個字符串的值。而在讀取模式中訪問字符串時,后臺都會自動完成下列操作

  • 1.創(chuàng)建String類型的一個實(shí)例伺通;
  • 2.在實(shí)例上調(diào)用指定的方法箍土;
  • 3.銷毀這個實(shí)例;
    可以將上面的三步想象成這個代碼:
  • var s1 = new String("hello world");
  • var s2 = s1.substring(2);
  • s1 = null;
4.1 String包裝類型

Boolean類型和 Number類型的包裝類很少用罐监,也沒有什么方法吴藻,不討論,String類型的包裝類定義了很多的方法弓柱。

1.字符方法

charAt()
語法: str.charAt(index);
作用: 返回索引位置上的單個字符沟堡;

charCodeAt()
語法: str.charCodeAt(index);
作用: 返回索引位置的字符編碼;

2. 字符串操作方法

concat()
語法: str.concat(str2矢空, str3);
作用: 拼接字符串航罗,并返回拼接好的字符串,原字符串不變屁药,但一般不用都用+號粥血;

slice()
語法: str.slice(index1, index2);
作用: 截取字符串,從index1的位置開始酿箭,到index2的位置結(jié)束复亏,但是不包括index2,然后返回截取的字符串七问,對原字符串沒有影響蜓耻。

substring()
語法: str.substring(index1, index2);
作用: 截取字符串,從index1的位置開始械巡,到index2的位置結(jié)束刹淌,但是不包括index2,然后返回截取的字符串讥耗,對原字符串沒有影響有勾。

substr()
語法: str.substr(index1, length);
作用: 截取字符串,并返回截取的字符串古程,從index1的位置開始蔼卡,第二個參數(shù)length代表的是截取的長度,對原字符串沒有影響挣磨。

3.字符串位置方法

indexOf()
語法: str.indexOf(str1);
作用: 從一個字符串中查找給定的字符串有沒有雇逞,如果有返回index索引位置,如果沒有返回-1茁裙,順序是從左往右查找塘砸。

lastIndexOf()
語法: str.lastIndexOf(str1);
作用: 從一個字符串中查找給定的字符串有沒有,如果有返回index索引位置晤锥,如果沒有返回-1掉蔬,順序是從右往左查找廊宪。

4.trim()方法

trim()
語法: str.trim()
作用: 刪除字符串前面和后面的空格;

5.字符串大小寫轉(zhuǎn)換方法

toLowerCase()
語法: str.toLowerCase();
作用: 將字符串轉(zhuǎn)換為小寫女轿;

toUpperCase()
語法: str.toUpperCase();
作用: 將字符串轉(zhuǎn)換為大寫箭启;

5.字符串模式匹配的方法

match()
語法: str.match(正則表達(dá)式或者RegExp對象);
作用: 匹配字符串蛉迹,返回的是一個數(shù)組傅寡。

search()
語法: str.search(正則表達(dá)式或者RegExp對象);
作用: 該方法返回字符串當(dāng)中第一個匹配項(xiàng)的索引,如果沒有找到返回-1北救,始終是從開頭向結(jié)尾查找赏僧;

replace()
語法: str.replace(字符串或正則,字符串或回調(diào)函數(shù))
作用: 替換字符串扭倾。如果第一個參數(shù)是字符串淀零,那么只會替換第一個子字符串。要想替換所有的字符串膛壹,第一個參數(shù)要使用正則匹配驾中。如果第二個參數(shù)是字符串,那么還可以使用一些特殊的字符序列(下圖列出)模聋,將正則表達(dá)式匹配到的值插入到結(jié)果字符串當(dāng)中肩民。第二個參數(shù)也可以是個函數(shù),在只有一個匹配項(xiàng)的情況下链方,會向這個函數(shù)傳遞三個參數(shù):模式的匹配項(xiàng)持痰,模式匹配項(xiàng)在字符串中的位置、原始字符串祟蚀,如果定義的正則表達(dá)式有多個捕獲組的話工窍,那么第二個參數(shù)是第一個捕獲組的匹配項(xiàng),依次類推

image.png

兩個參數(shù)都是字符串

<script>
     var fruits = 'apple banana orange apple';
     var str = fruits.replace('apple', 'orange');
     console.log(str); // 'orange banana orange apple'
</script>

第一個參數(shù)是正則前酿,第二個參數(shù)是字符串

<script>
        var fruits = 'apple banana orange apple';
        var str = fruits.replace(/apple/g, 'orange');
        console.log(str);//'orange banana orange orange'
    </script>

第一個參數(shù)是正則患雏,第二個參數(shù)是字符串且應(yīng)用字符序列

<script>
        var fruits = 'apple banana orange apple';
        var str = fruits.replace(/(apple)/g, 'big($1)');
        console.log(str); //'big(apple) banana orange big(apple)'
    </script>

第一個參數(shù)是正則,第二個參數(shù)是函數(shù)

<script>
        var fruits = '2019-03-08 2017-04-12';
        var match = /(\d{4})-(\d{2})-(\d{2})/g;
        function demo(match, one,two,three) {
            return one+'/'+two+'/'+three;
        }
        var str = fruits.replace(match, demo);
        console.log(str); // '2019/03/08 2017/04/12'
    </script>

查看replace當(dāng)中的函數(shù)參數(shù)是什么罢维?

var str = '2012-12-11';
        function test() {
           var arr = [...arguments];
           arr.forEach(function(ele,index) {
               console.log(ele);
           })
        }
        var match = /(\d{4})-(\d{2})-(\d{2})/g;
        str.replace(match, test);
image.png

split()
語法:str.split(分割符淹仑,數(shù)組長度);
作用:基于指定的分隔符將一個字符串分割成多個子字符串肺孵,并將這些子字符串放在一個數(shù)組中返回匀借。

5.單體內(nèi)置對象

所謂的單體內(nèi)置對象就是不必顯示的實(shí)例化對象傻昙,因?yàn)镋CMAScript已經(jīng)給實(shí)例化好了焕刮,ECMA-262 定義了兩個內(nèi)置對象——Global和Math始绍。

5.1 Global對象

在web瀏覽器當(dāng)中的Global對象都是作為Window對象的一部分來實(shí)現(xiàn)的先馆,可以理解為Global就是Window,所有定義在全局的屬性和方法都會添加到Window對象的身上殖蚕。

5.2 Math對象

Math對象的屬性

image.png

Math對象的常用方法

Math.min()
語法: var num = Math.min(1,2,3);
作用: 返回一組數(shù)中的最小值骏啰;

Math.max()
語法: var max = Math.max(1,2,3);
作用: 返回一組數(shù)中的最大值片迅;

Math.ceil()
語法: Math.ceil(4.5) // 5
作用: 向上取整磅叛;

Math.floor()
語法: Math.floor(4.5) // 4
作用: 向下取整屑咳;

Math.round()
語法: Math.round(4.5) // 5
作用: 四舍五入;

Math.random()
語法: Math.random();
作用: 返回一個0到1之間的隨機(jī)數(shù)弊琴;

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兆龙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子敲董,更是在濱河造成了極大的恐慌紫皇,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腋寨,死亡現(xiàn)場離奇詭異聪铺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)萄窜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門铃剔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人查刻,你說我怎么就攤上這事键兜。” “怎么了穗泵?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵普气,是天一觀的道長。 經(jīng)常有香客問我佃延,道長现诀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任履肃,我火速辦了婚禮赶盔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榆浓。我一直安慰自己于未,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布陡鹃。 她就那樣靜靜地躺著烘浦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪萍鲸。 梳的紋絲不亂的頭發(fā)上闷叉,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音脊阴,去河邊找鬼握侧。 笑死蚯瞧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的品擎。 我是一名探鬼主播埋合,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼萄传!你這毒婦竟也來了甚颂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤秀菱,失蹤者是張志新(化名)和其女友劉穎振诬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衍菱,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赶么,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了脊串。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禽绪。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖洪规,靈堂內(nèi)的尸體忽然破棺而出印屁,到底是詐尸還是另有隱情,我是刑警寧澤斩例,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布雄人,位于F島的核電站,受9級特大地震影響念赶,放射性物質(zhì)發(fā)生泄漏础钠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一叉谜、第九天 我趴在偏房一處隱蔽的房頂上張望旗吁。 院中可真熱鬧,春花似錦停局、人聲如沸很钓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽码倦。三九已至,卻和暖如春锭碳,著一層夾襖步出監(jiān)牢的瞬間袁稽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工擒抛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留推汽,地道東北人补疑。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像歹撒,于是被迫代替她去往敵國和親莲组。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355