js內(nèi)置對象

1 - 內(nèi)置對象

1.1 內(nèi)置對象

? JavaScript 中的對象分為3種:自定義對象 厅贪、內(nèi)置對象、 瀏覽器對象
? 前面兩種對象是JS 基礎(chǔ) 內(nèi)容堤结,屬于 ECMAScript; 第三個瀏覽器對象屬于 JS 獨有的鸭丛, JS API 講解內(nèi)置對象就是指 JS 語言自帶的一些對象竞穷,這些對象供開發(fā)者使用,并提供了一些常用的或是最基本而必要的功能(屬性和方法)鳞溉,內(nèi)置對象最大的優(yōu)點就是幫助我們快速開發(fā)

? JavaScript 提供了多個內(nèi)置對象:Math瘾带、 Date 、Array熟菲、String等

1.2 查文檔

? 查找文檔:學(xué)習(xí)一個內(nèi)置對象的使用看政,只要學(xué)會其常用成員的使用即可,我們可以通過查文檔學(xué)習(xí)抄罕,可以通過MDN/W3C來查詢允蚣。
? Mozilla 開發(fā)者網(wǎng)絡(luò)(MDN)提供了有關(guān)開放網(wǎng)絡(luò)技術(shù)(Open Web)的信息,包括 HTML贞绵、CSS 和萬維網(wǎng)及 HTML5 應(yīng)用的 API厉萝。
? MDN:https://developer.mozilla.org/zh-CN/

1.3 Math對象

? Math 對象不是構(gòu)造函數(shù),它具有數(shù)學(xué)常數(shù)和函數(shù)的屬性和方法。跟數(shù)學(xué)相關(guān)的運算(求絕對值谴垫,取整章母、最大值等)可以使用 Math 中的成員。

屬性翩剪、方法名 功能
Math.PI 圓周率
Math.floor() 向下取整
Math.ceil() 向上取整
Math.round() 四舍五入版 就近取整 注意 -3.5 結(jié)果是 -3
Math.abs() 絕對值
Math.max()/Math.min() 求最大和最小值
Math.random() 獲取范圍在[0,1)內(nèi)的隨機(jī)值

? 注意:上面的方法使用時必須帶括號

? 獲取指定范圍內(nèi)的隨機(jī)整數(shù)

function getRandom(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min; 
}

1.4 日期對象

? Date 對象和 Math 對象不一樣乳怎,Date是一個構(gòu)造函數(shù),所以使用時需要實例化后才能使用其中具體方法和屬性前弯。Date 實例用來處理日期和時間

  • 使用Date實例化日期對象

    • 獲取當(dāng)前時間必須實例化:
    var now = new Date();
    
    • 獲取指定時間的日期對象
    var future = new Date('2019/5/1');
    

    注意:如果創(chuàng)建實例時并未傳入?yún)?shù)蚪缀,則得到的日期對象是當(dāng)前時間對應(yīng)的日期對象

  • 使用Date實例的方法和屬性

    圖片1.png

  • 通過Date實例獲取總毫米數(shù)

    • 總毫秒數(shù)的含義

      ? 基于1970年1月1日(世界標(biāo)準(zhǔn)時間)起的毫秒數(shù)

    • 獲取總毫秒數(shù)

      // 實例化Date對象
      var now = new Date();
      // 1. 用于獲取對象的原始值
      console.log(date.valueOf()) 
      console.log(date.getTime()) 
      // 2. 簡單寫可以這么做
      var now = + new Date();         
      // 3. HTML5中提供的方法,有兼容性問題
      var now = Date.now();
      

1.5 數(shù)組對象

創(chuàng)建數(shù)組的兩種方式

  • 字面量方式

    • 示例代碼如下:

      var arr = [1,"test",true];
      
  • new Array()

    • 示例代碼如下:

      var arr = new Array();
      

      ? 注意:上面代碼中arr創(chuàng)建出的是一個空數(shù)組恕出,如果需要使用構(gòu)造函數(shù)Array創(chuàng)建非空數(shù)組询枚,可以在創(chuàng)建數(shù)組時傳入?yún)?shù)

      ? 參數(shù)傳遞規(guī)則如下:

      • 如果只傳入一個參數(shù),則參數(shù)規(guī)定了數(shù)組的長度

      • 如果傳入了多個參數(shù)浙巫,則參數(shù)稱為數(shù)組的元素

檢測是否為數(shù)組

  • instanceof 運算符

    • instanceof 可以判斷一個對象是否是某個構(gòu)造函數(shù)的實例

      var arr = [1, 23];
      var obj = {};
      console.log(arr instanceof Array); // true
      console.log(obj instanceof Array); // false
      
  • Array.isArray()

    • Array.isArray()用于判斷一個對象是否為數(shù)組金蜀,isArray() 是 HTML5 中提供的方法

      var arr = [1, 23];
      var obj = {};
      console.log(Array.isArray(arr));   // true
      console.log(Array.isArray(obj));   // false
      

添加刪除數(shù)組元素的方法

  • 數(shù)組中有進(jìn)行增加、刪除元素的方法的畴,部分方法如下表


    圖片2.png

    注意:push渊抄、unshift為增加元素方法;pop丧裁、shift為刪除元素的方法

數(shù)組排序

  • 數(shù)組中有對數(shù)組本身排序的方法护桦,部分方法如下表


    圖片3.png

    注意:sort方法需要傳入?yún)?shù)來設(shè)置升序、降序排序

    • 如果傳入“function(a,b){ return a-b;}”煎娇,則為升序
    • 如果傳入“function(a,b){ return b-a;}”二庵,則為降序

數(shù)組索引方法

  • 數(shù)組中有獲取數(shù)組指定元素索引值的方法,部分方法如下表


    圖片4.png

數(shù)組轉(zhuǎn)換為字符串

  • 數(shù)組中有把數(shù)組轉(zhuǎn)化為字符串的方法逊桦,部分方法如下表


    圖片5.png

    注意:join方法如果不傳入?yún)?shù)眨猎,則按照 “ , ”拼接元素

其他方法

  • 數(shù)組中還有其他操作方法,同學(xué)們可以在課下自行查閱學(xué)習(xí)


    圖片6.png

1.6 字符串對象

基本包裝類型

? 為了方便操作基本數(shù)據(jù)類型强经,JavaScript 還提供了三個特殊的引用類型:String睡陪、Number和 Boolean。

? 基本包裝類型就是把簡單數(shù)據(jù)類型包裝成為復(fù)雜數(shù)據(jù)類型匿情,這樣基本數(shù)據(jù)類型就有了屬性和方法兰迫。

// 下面代碼有什么問題?
var str = 'andy';
console.log(str.length);

? 按道理基本數(shù)據(jù)類型是沒有屬性和方法的炬称,而對象才有屬性和方法汁果,但上面代碼卻可以執(zhí)行,這是因為

? js 會把基本數(shù)據(jù)類型包裝為復(fù)雜數(shù)據(jù)類型玲躯,其執(zhí)行過程如下 :

// 1. 生成臨時變量据德,把簡單類型包裝為復(fù)雜數(shù)據(jù)類型
var temp = new String('andy');
// 2. 賦值給我們聲明的字符變量
str = temp;
// 3. 銷毀臨時變量
temp = null;

字符串的不可變

? 指的是里面的值不可變鳄乏,雖然看上去可以改變內(nèi)容,但其實是地址變了棘利,內(nèi)存中新開辟了一個內(nèi)存空間橱野。

? 當(dāng)重新給字符串變量賦值的時候,變量之前保存的字符串不會被修改善玫,依然在內(nèi)存中重新給字符串賦值水援,會重新在內(nèi)存中開辟空間,這個特點就是字符串的不可變茅郎。
? 由于字符串的不可變蜗元,在大量拼接字符串的時候會有效率問題

根據(jù)字符返回位置

? 字符串通過基本包裝類型可以調(diào)用部分方法來操作字符串,以下是返回指定字符的位置的方法:


圖片7.png

案例:查找字符串"abcoefoxyozzopp"中所有o出現(xiàn)的位置以及次數(shù)

  1. 先查找第一個o出現(xiàn)的位置
  2. 然后 只要indexOf 返回的結(jié)果不是 -1 就繼續(xù)往后查找
  3. 因為indexOf 只能查找到第一個系冗,所以后面的查找奕扣,利用第二個參數(shù),當(dāng)前索引加1毕谴,從而繼續(xù)查找

根據(jù)位置返回字符

? 字符串通過基本包裝類型可以調(diào)用部分方法來操作字符串成畦,以下是根據(jù)位置返回指定位置上的字符:


圖片8.png

在上述方法中,charCodeAt方法返回的是指定位置上字符對應(yīng)的ASCII碼涝开,ASCII碼對照表如下:


圖片9.png

案例:判斷一個字符串 'abcoefoxyozzopp' 中出現(xiàn)次數(shù)最多的字符,并統(tǒng)計其次數(shù)
  1. 核心算法:利用 charAt() 遍歷這個字符串

  2. 把每個字符都存儲給對象框仔, 如果對象沒有該屬性舀武,就為1,如果存在了就 +1

  3. 遍歷對象离斩,得到最大值和該字符

    ? 注意:在遍歷的過程中银舱,把字符串中的每個字符作為對象的屬性存儲在對象總,對應(yīng)的屬性值是該字符出現(xiàn)的次數(shù)

字符串操作方法

? 字符串通過基本包裝類型可以調(diào)用部分方法來操作字符串跛梗,以下是部分操作方法:


圖片10.png

replace()方法

? replace() 方法用于在字符串中用一些字符替換另一些字符寻馏,其使用格式如下:

字符串.replace(被替換的字符串, 要替換為的字符串)核偿;

split()方法

? split()方法用于切分字符串诚欠,它可以將字符串切分為數(shù)組。在切分完畢之后漾岳,返回的是一個新數(shù)組轰绵。

? 其使用格式如下:

字符串.split("分割字符")

2 - 簡單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型

2.1 簡單數(shù)據(jù)類型

? 簡單類型基本數(shù)據(jù)類型值類型):在存儲時變量中存儲的是值本身尼荆,包括string 左腔,number,boolean捅儒,undefined液样,null

2.2 復(fù)雜數(shù)據(jù)類型

? 復(fù)雜數(shù)據(jù)類型(引用類型):在存儲時變量中存儲的僅僅是地址(引用)振亮,通過 new 關(guān)鍵字創(chuàng)建的對象(系統(tǒng)對象、自定義對象)鞭莽,如 Object双炕、Array、Date等撮抓;

2.3 堆棧

  • 堆椄窘铮空間分配區(qū)別:

1、棧(操作系統(tǒng)):由操作系統(tǒng)自動分配釋放存放函數(shù)的參數(shù)值丹拯、局部變量的值等站超。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧;

簡單數(shù)據(jù)類型存放到棧里面

2乖酬、堆(操作系統(tǒng)):存儲復(fù)雜類型(對象)死相,一般由程序員分配釋放,若程序員不釋放咬像,由垃圾回收機(jī)制回收算撮。


圖片11.png
  • 簡單數(shù)據(jù)類型的存儲方式

    ? 值類型變量的數(shù)據(jù)直接存放在變量(棧空間)中


    圖片12.png
  • 復(fù)雜數(shù)據(jù)類型的存儲方式

    ? 引用類型變量(椣匕海空間)里存放的是地址肮柜,真正的對象實例存放在堆空間中


    圖片13(1).png

2.4 簡單類型傳參

? 函數(shù)的形參也可以看做是一個變量,當(dāng)我們把一個值類型變量作為參數(shù)傳給函數(shù)的形參時倒彰,其實是把變量在椛蠖矗空間里的值復(fù)制了一份給形參,那么在方法內(nèi)部對形參做任何修改待讳,都不會影響到的外部變量芒澜。

function fn(a) {
    a++;
    console.log(a); 
}
var x = 10;
fn(x);
console.log(x);

? 運行結(jié)果如下:


圖片14.png

2.5 復(fù)雜數(shù)據(jù)類型傳參

? 函數(shù)的形參也可以看做是一個變量创淡,當(dāng)我們把引用類型變量傳給形參時痴晦,其實是把變量在棧空間里保存的堆地址復(fù)制給了形參琳彩,形參和實參其實保存的是同一個堆地址誊酌,所以操作的是同一個對象。

function Person(name) {
    this.name = name;
}
function f1(x) { // x = p
    console.log(x.name); // 2. 這個輸出什么 ?    
    x.name = "張學(xué)友";
    console.log(x.name); // 3. 這個輸出什么 ?    
}
var p = new Person("劉德華");
console.log(p.name);    // 1. 這個輸出什么 ?   
f1(p);
console.log(p.name);    // 4. 這個輸出什么 ?  

? 運行結(jié)果如下:


圖片15.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汁针,一起剝皮案震驚了整個濱河市术辐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌施无,老刑警劉巖辉词,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猾骡,居然都是意外死亡瑞躺,警方通過查閱死者的電腦和手機(jī)敷搪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幢哨,“玉大人赡勘,你說我怎么就攤上這事±塘” “怎么了闸与?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長岸售。 經(jīng)常有香客問我践樱,道長,這世上最難降的妖魔是什么凸丸? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任拷邢,我火速辦了婚禮,結(jié)果婚禮上屎慢,老公的妹妹穿的比我還像新娘瞭稼。我一直安慰自己,他們只是感情好腻惠,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布环肘。 她就那樣靜靜地躺著,像睡著了一般妖枚。 火紅的嫁衣襯著肌膚如雪廷臼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天绝页,我揣著相機(jī)與錄音,去河邊找鬼寂恬。 笑死续誉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的初肉。 我是一名探鬼主播酷鸦,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼牙咏!你這毒婦竟也來了臼隔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妄壶,失蹤者是張志新(化名)和其女友劉穎摔握,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丁寄,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡氨淌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年泊愧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盛正。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡删咱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出豪筝,到底是詐尸還是另有隱情痰滋,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布续崖,位于F島的核電站敲街,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏袜刷。R本人自食惡果不足惜聪富,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望著蟹。 院中可真熱鬧墩蔓,春花似錦、人聲如沸萧豆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涮雷。三九已至阵面,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洪鸭,已是汗流浹背样刷。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留览爵,地道東北人置鼻。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像蜓竹,于是被迫代替她去往敵國和親箕母。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 什么是對象JavaScript 中的所有事物都是對象俱济,如:字符串嘶是、數(shù)值、數(shù)組蛛碌、函數(shù)等聂喇,每個對象帶有屬性和方法。對象...
    阿r阿r閱讀 445評論 0 9
  • mark相關(guān)的知識點: 首先左医,什么是js的內(nèi)置對象授帕,它包括了些什么內(nèi)容同木?(以下內(nèi)容轉(zhuǎn)自網(wǎng)上資源的整合) (W3sh...
    Lnannan閱讀 592評論 0 0
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,237評論 0 4
  • 標(biāo)準(zhǔn)內(nèi)置對象 ObjectObject.createObject.prototype.toStringObject...
    Rella7閱讀 504評論 0 1
  • 第一章: JS簡介 從當(dāng)初簡單的語言,變成了現(xiàn)在能夠處理復(fù)雜計算和交互跛十,擁有閉包彤路、匿名函數(shù), 甚至元編程等...
    LaBaby_閱讀 1,674評論 0 6