JavaScript對象基礎(chǔ)

一搁吓、基本對象

1.定義:屬性的無序集合原茅,每個(gè)屬性都是一個(gè)名/值對,屬性值可以包括基本值擎浴,對象员咽,函數(shù)。

2.分類

  • 內(nèi)置對象:JavaScript已經(jīng)規(guī)定好的一些對象
  • 宿主對象:是由JavaScript解釋器所嵌入的宿主環(huán)境(比如Web瀏覽器)定義的贮预。
  • 自定義對象:開發(fā)者自己定義的一些對象

3.對象定義方法

  • 字面量方法
    var 變量 = {};
    var 變量 = {
        屬性名 : 屬性值;
        屬性名 : 屬性值契讲;
        ...
    }
  • new關(guān)鍵字方法
    var obj = new Object({
        屬性名 : 屬性值;
        屬性名 : 屬性值仿吞;
        ...
    });
  • 構(gòu)造函數(shù)
    function 函數(shù)名(){}
    var 變量 = new 函數(shù)名();
  • Object.create()
    var 變量 = Object.create({neir9ong})

4.對象的屬性

? 屬性名:描述元素某個(gè)特征的名稱,對應(yīng)的值我們稱之為屬性值

? 屬性名和屬性值需要對應(yīng)捡偏,常常稱之為鍵值對(key-value),使用‘唤冈,’隔開

5.屬性的操作

? 動(dòng)態(tài)屬性:屬性值可以不斷添加和修改

? 修改:對象.屬性名 = 屬性值;/對象["屬性名"] = 屬性值;

? 添加:對象.屬性名 = 屬性值;/對象["屬性名"] = 屬性值银伟;

? 刪除:delete 對象.屬性名;

? 獲饶愫纭:對象.屬性/對象[“屬性”];

6.屬性的遍歷

? for in循環(huán):

    for (var 變量 in 對象名){
        變量             就是每個(gè)屬性名
        對象[變量]      屬性值
    }
二绘搞、string

1.構(gòu)造方法:

var str = new Srting(s)    //構(gòu)造函數(shù)
function String(s)   //轉(zhuǎn)換函數(shù)

和其他數(shù)據(jù)昨晚運(yùn)算之后會(huì)變成基本數(shù)據(jù)類型

2.屬性:length-該字符串中的字符數(shù)

3.方法API

function description
charAt() 取出字符串中指定位置的元素
charCodeAt() 返回字符串中指定位置的字符的Unicode編碼
concat() 將一個(gè)或者多個(gè)值連接成一個(gè)字符串
indexOf() 查找指定字符在字符串中第一次出現(xiàn)的位置
lastIndexOf() 在指定字符串中從后開始尋找一個(gè)字符或者子串
localeCompare() 使用本地定義的順序比較字符串
match() 使用正則表達(dá)式執(zhí)行模式匹配
replace() 使用正則表達(dá)式執(zhí)行查找與替換操作
search() 在一個(gè)字符串中查找匹配某個(gè)正則表達(dá)式的子串
slice() 返回字符串中的一個(gè)切片或子串
split() 將一個(gè)字符串分割為由字符串組成的數(shù)組
substr() 提取字符串的一個(gè)子串
substring() 提取字符串的一個(gè)子串
toUpperCase() 將所有字符轉(zhuǎn)化為大寫
toLowerCase() 將所有字符轉(zhuǎn)化為小寫
trim() 刪除空白字符
valueOf 返回原始字符串的值
fromCharCode() 從字符編碼創(chuàng)建一個(gè)字符串
charCodeAt() 取得字符串中指定字符的編碼
includes() 方法用來判斷一個(gè)數(shù)組是否包含一個(gè)指定的值
matchAll() 可在字符串內(nèi)檢索指定的值,或找到一個(gè)或多個(gè)正則表達(dá)式的匹配
三傅物、Number
  1. 定義方法
    var 變量名 = new Number();    //引用數(shù)據(jù)類型夯辖,Object,與別人運(yùn)算之后變?yōu)榛緮?shù)據(jù)類型
  1. isNaN()----內(nèi)置數(shù)據(jù)類型:true--是NAN類型 false--不是NAN類型

    常用來判斷是不是數(shù)字類型:false--數(shù)字類型 true--不是數(shù)字類型

  2. number.tofixed(保留的小數(shù)位)----將數(shù)字進(jìn)行四舍五入董饰,保留指定小數(shù)位蒿褂,返回字符串

四、Boolean
    var 變量名 = new Boolean(true);    //引用數(shù)據(jù)類型卒暂,Object
五啄栓、Array
  1. 數(shù)組定義:數(shù)組是值的有序集合

  2. 定義數(shù)組的方法

    • 字面量方式
     var 變量名 = [];     
     var 變量名 = [值1,值2,值3...];  
    
    • 關(guān)鍵字new
     var 變量名 = new Array(數(shù)字);     //數(shù)字就是數(shù)組的長度
     var 變量名 = new Array(非數(shù)字);   //為數(shù)組的元素
     var 變量名 = new Array(值1,值2...);    //數(shù)組的元素
     var 變量名 = new Array();        //空數(shù)組
    
  3. JavaScript數(shù)組是無類型的,數(shù)組元素可以是任意類型也祠。

  4. 訪問方式

    • 下標(biāo):每個(gè)元素對應(yīng)的編號(hào)
    • 訪問數(shù)組元素:數(shù)組[下標(biāo)]昙楚;
    • 修改/添加:數(shù)組[下標(biāo)] = 值;
  5. 屬性:數(shù)組.length----返回?cái)?shù)組的長度

  6. 遍歷數(shù)組:

     for(var i = 0, len = arr.length; i < len; i++) {
         console.log(arr[i]);
     }
    
  7. 數(shù)組的分類

    • 按照數(shù)組的維度:一維數(shù)組和多維數(shù)組

    • 索引數(shù)組---下標(biāo)是數(shù)字诈嘿,從0開始 關(guān)聯(lián)數(shù)組----下標(biāo)不是數(shù)字

      var arr[];
      arr["name"] = "張三";
      arr["age"] =20;
      

      關(guān)聯(lián)數(shù)組的length屬性不可靠祈匙,使用for in遍歷

  8. 方法API:

    function description
    concat(值1芦昔,值2) 將參數(shù)拼接到數(shù)組的尾部。返回新數(shù)組
    join() 將數(shù)組使用連接符變?yōu)樽址瑳]有參數(shù)默認(rèn)使用逗號(hào)連接
    toString() 將數(shù)組轉(zhuǎn)化為字符串思犁,不能傳入連接符。
    slice(start,end) 截取數(shù)組的一部分罪治,形成新的數(shù)組
    push(值1鹃答,值2...) 往數(shù)組末尾添加元素,返回?cái)?shù)組的新長度,改變原來的數(shù)組
    pop() 從數(shù)組末未刪除元素李滴,返回被刪除的那個(gè)元素螃宙,改變原來的數(shù)組
    unshift(值1,值2...) 在數(shù)組頭添加新元素,返回?cái)?shù)組的新長度所坯,改變原來的數(shù)組
    shift() 在數(shù)組的開頭刪除一個(gè)元素谆扎,返回刪除的元素的值,改變了原來的數(shù)組
    reverse() 將數(shù)組進(jìn)行反轉(zhuǎn)芹助,改變了原數(shù)組
    indexOf() 查找指定字符在數(shù)組中出現(xiàn)的位置堂湖,返回第一次出現(xiàn)的下標(biāo)
    forEach(function()) 遍歷數(shù)組,接收一個(gè)匿名數(shù)組作為參數(shù)状土,函數(shù)三個(gè)參數(shù)无蜂,值、下標(biāo)蒙谓、數(shù)組
    map(function()) 遍歷數(shù)組,與forEach相同斥季,但是在匿名函數(shù)里必須return,將值作為新的數(shù)組
    sort() 數(shù)組排序累驮。改變原來的數(shù)組酣倾,返回排序后的數(shù)組舵揭,用排序函數(shù)/比較函數(shù)
    splice(start,num,值1,值2...) 會(huì)修改原數(shù)組躁锡,從第一個(gè)參數(shù)截取午绳,第二個(gè)參數(shù)刪除的個(gè)數(shù),第三個(gè)之后是添加的元素稚铣。
六箱叁、Object
方法 描述
對象.hasOwnProperty() 判斷對象是有有這個(gè)屬性,返回布爾值
delete 對象.屬性 刪除屬性
對象.proto 屬性 指向的是實(shí)例化它的類
七惕医、Math

數(shù)學(xué)操作相關(guān)的:往往和數(shù)字類型的數(shù)據(jù)一起操作耕漱,不需要new-------==權(quán)威指南p778==

function description
Math.abs() 取絕對值
Math.ceil() 向上取整
Math.floor() 向下取整
Math.round() 四舍五入取整
Math.max() 最大值
Math.min() 最小值
Math.random() 返回0-1之間的隨機(jī)小數(shù),包含0不含1=
八抬伺、Date
  1. 創(chuàng)建
var time = new Date()螟够;    //時(shí)間對象
  1. 計(jì)算機(jī)的系統(tǒng)時(shí)間:1970年 01-01 00:00:00

  2. 獲取時(shí)間信息:

    • 獲取年:time.getFullYear()
    • 獲取月:time.getMonth() //月份從0開始
    • 獲取日:time.getDate()
    • 獲取星期:time.getDay()
    • 獲取小時(shí):time.getHours()
    • 獲取分鐘:time.getMinutes()
    • 獲取秒:time.getSeconds()
    • 獲取毫秒:time.getMilliseconds()
  3. 獲取完整的日期信息

    • time.toLocalString()
    • 只獲取時(shí)間:time.toLocalTimeString()
    • 只獲取日期:time.toLocalDateString()
  4. 封裝一個(gè)獲取日期時(shí)間對象

      function getTime(type) {
        var time = new Date();
        var y = time.getFullYear();
        var m = time.getMonth() + 1;
        var d = time.getDate();
        var h = time.getHours();
        var i = time.getMinutes();
        var s = time.getSeconds();
        //進(jìn)行補(bǔ)位
        y < 10 ? "0" + y : y;
        m < 10 ? "0" + m : m;
        d < 10 ? "0" + d : d;
        h < 10 ? "0" + h : h;
        i < 10 ? "0" + i : i;
        s < 10 ? "0" + s : s;
        if(type) {
          if(!isNaN(type)){
            if(type === 1){
              return y + "/" + m + "/" + d;
            }
            else if(type === 2) { 
              return h + ":" + i + ":"+ s;
            }
            else {
              console.log("0:獲取完整的日期時(shí)間  1:獲取日期  2:獲取時(shí)間");
            }
          }
          else {
            console.log("0:獲取完整的日期時(shí)間  1:獲取日期  2:獲取時(shí)間");
          }
        }
        else {
          return y + "/" + m + "/" + d + " " + h + ":" + i + ":"+ s;
        }
      }
    
    
  5. 設(shè)置時(shí)間

    var timeStr = "2019-12-12T12:00:00";
    var time = new Date(timeStr);
    console.log(time.getFullYear());
    
  6. 時(shí)間計(jì)算

    //獲取從計(jì)算機(jī)開始到現(xiàn)在的毫秒數(shù)
    var curTime = new Date();
    console.log(curTime.getTime());
    //將毫秒數(shù)變?yōu)闀r(shí)間
    console.log(new Date(1576158669683).toLocaleString());
    
    var time1 = "2019-12-12T19:23:34";
    var time2 = "2019-12-13T21:24:34";
    var his1 = new Date(time1);
    var his2 = new Date(time2);
    var res = his2 - his1;
    var s = res/1000;
    var days = parseInt(s/(24*60*60));
    var hours = parseInt((s - (24 * 60 * 60 * days)) / (60 * 60));
    var minutes = parseInt((s - (24 * 60 * 60 * days) - (60 * 60 * hours)) / 60);
    var ms = s - (24 * 60 * 60 * days) - (60 * 60 * hours) - (60 * minutes);
    
    
  7. 定時(shí)器

    • 定義:過一段時(shí)間要做某個(gè)事情

    • 分類:一次性定時(shí)器 周期性定時(shí)器

    • 如何定義定時(shí)器

      var time = setTimeout(function(){},3000);//一次性定時(shí)器,時(shí)間3000ms,要做的事在function內(nèi)
      
      var time1 = setInterval(function(){},3000); //周期性定時(shí)器,時(shí)間3s峡钓,要做的事在function里
      
    • 清除定時(shí)器

      清除一次性定時(shí)器:

      clearTimeout(一次性定時(shí)器的序號(hào));
      

      清除周期性定時(shí)器:

      clearInterval(周期性定時(shí)器的序號(hào));
      
九妓笙、RegExp----正則表達(dá)式
  1. 正則的概念:由普通字符和特殊字符組成的文字模式

  2. 定義正則:

    ①new關(guān)鍵字:
    var 變量 = new RegExp("文字模式","修飾符");
    正則.test(字符串內(nèi)容);

    var str = "sadfbkawebf";
    var par = new RegExp("a");
    var res = par.test(str);   //返回true
    

    ②字面量
    var 變量 = /文字模式/修飾符;

    var str = "shiufhuhefo";
    var par = /a/;
    var res = par.test(str);   //返回true
    
  3. 修飾符

    修飾符 說明
    i 忽略大小寫
    g 全文匹配
    m 多行匹配
  4. 正則.exec(字符串)----返回第一次正則匹配到的信息,沒有匹配到返回null

    exec方法能岩,同正則匹配同內(nèi)容多次寞宫,后面的一次檢索是從上一次檢索到的位置開始

  5. 元字符:是擁有特殊含義的字符

元字符 描述
. 查找單個(gè)字符,除了換行和行結(jié)束符
\w 單詞字符(字母+數(shù)字)
\W 非單詞字符(非數(shù)字拉鹃,非字母)
\d 數(shù)字
\D 非數(shù)字
\s 空白字符
\S 非空白字符
\b 匹配單詞邊界
\B 非匹配單詞邊界
\n 查找換行符
\f 查找換頁符
\r 查找回車
\t 查找制表
  1. 字符串.match(正則)辈赋;使用的時(shí)候需要正則開啟全局模式g

  2. 方括號(hào):用于查找某個(gè)范圍內(nèi)的字符

    表達(dá)式 描述
    [abc] 查找方括號(hào)之間的任何字符。
    [0-9] 查找任何從 0 至 9 的數(shù)字膏燕。
    [^0-9] 查找0-9之外的任何字符
    (x|y) 查找由 | 分隔的任何選項(xiàng)钥屈。
  3. 量詞

    量詞 描述
    n+ 匹配任何包含至少一個(gè) n 的字符串。
    n* 匹配任何包含零個(gè)或多個(gè) n 的字符串坝辫。
    n? 匹配任何包含零個(gè)或一個(gè) n 的字符串篷就。
    n{x} 匹配包含x個(gè)n的序列的字符串
    n{x,y} 匹配包含x至y個(gè)n的序列的字符串
    n{x,} 匹配包含至少x個(gè)n的序列的字符串
    n$ 匹配任何結(jié)尾為n的字符串
    ^n 匹配任何開頭為n的字符串
    ?=n 匹配任何其后綴緊接指定字串n的字符串
    ?!=n 匹配任何其后沒有緊接指定字串n的字符串
十、Function
  1. Function是JavaScript內(nèi)部的一個(gè)對象近忙,所有的函數(shù)都可以通過Function來進(jìn)行實(shí)例化竭业。
  2. new關(guān)鍵字,會(huì)導(dǎo)致代碼解析兩次
    • 第一次解析:es代碼解析
    • 第二次解析:解析這些字符串在內(nèi)部生成函數(shù)

3.this:關(guān)鍵字及舍,當(dāng)前對象永品,指的是自己

  • this指向的是當(dāng)前運(yùn)行的上下文對象,也就是當(dāng)前所在函數(shù)歸屬的對象
  • 全局的this就是window對象
  • 聲明方式定義的函數(shù)是window的方法
  • 在函數(shù)內(nèi)部以字面量或者聲明方式定義的函數(shù)击纬。this都指向window

4.屬性

  函數(shù)名.name
  函數(shù)名.length             //形參的個(gè)數(shù)
  arguments.length      //要在函數(shù)內(nèi)部打印,實(shí)參的個(gè)數(shù)
  函數(shù)名.prototype       //函數(shù)的原型

5.apply()
函數(shù)名.apply(使用函數(shù)的對象,[參數(shù)1,參數(shù)2......])
除了參數(shù)用[]以外钾麸,其余與call一樣
6.call()
函數(shù)名.call(使用函數(shù)的對象更振,函數(shù)參數(shù)1,函數(shù)參數(shù)2......)
將函數(shù)里面this指向改變?yōu)槭褂煤瘮?shù)的對象
如果使用函數(shù)的對象為null,則this指向window
7.bind()
函數(shù)名.bind(使用函數(shù)的對象) -----拿到此函數(shù)
函數(shù)名.bind(使用函數(shù)的對象)(參數(shù)1,參數(shù)2......)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炕桨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(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ī)與錄音雀鹃,去河邊找鬼幻工。 笑死,一個(gè)胖子當(dāng)著我的面吹牛黎茎,可吹牛的內(nèi)容都是我干的囊颅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼踢代!你這毒婦竟也來了盲憎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤胳挎,失蹤者是張志新(化名)和其女友劉穎饼疙,沒想到半個(gè)月后,有當(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
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了医窿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磅甩。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖留搔,靈堂內(nèi)的尸體忽然破棺而出更胖,到底是詐尸還是另有隱情,我是刑警寧澤隔显,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布却妨,位于F島的核電站,受9級(jí)特大地震影響括眠,放射性物質(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. 我叫王不留盖喷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓难咕,卻偏偏與公主長得像课梳,于是被迫代替她去往敵國和親距辆。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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