《JavaScript高級(jí)程序設(shè)計(jì)》Chapter 5 引用類(lèi)型

Chapter 5 引用類(lèi)型

Object類(lèi)型

  1. 創(chuàng)建Object實(shí)例

    • new Object()
    var person = new Object();
    person.name = "Hello";
    
    • 使用對(duì)象字面量表示法(向函數(shù)傳遞大量參數(shù)的首選方式)
    var person = {
        name: "Hello",
        age: 29
    };
    //屬性名可以使用字符串,效果相同
    var person = {
        "name": "Hello",
        "age": 29
    };
    
    • 使用空花括號(hào)(等價(jià)于new Object())
    var person = {};
    person.name = "Hello";
    
    • 訪問(wèn)對(duì)象可以使用點(diǎn)表示法也可以使用方括號(hào)表示法
    alert(person["name"]);
    alert(person.name);
    var propertyName = "name";
    alert(person[propertyName]);
    
    • 屬性名中包含會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤的字符,或者屬性名使用的是關(guān)鍵字或保留字,可以使用方括號(hào)表示法。
    • 通常,除非必須使用方括號(hào)表示法,否則推薦使用點(diǎn)表示法。

Array類(lèi)型

  1. 一個(gè)數(shù)組的每一項(xiàng)可以保存不同的數(shù)據(jù)類(lèi)型

  2. 創(chuàng)建Array實(shí)例

    • var colors = new Array();
    • var colors = new Array(20);
    • var colors = new Array("red", "green", "blue");
    • var colors = ["red", "green", "blue"];
    • var names = [];
    • var values = [1, 2,]; //這樣會(huì)創(chuàng)建不一定2或3個(gè)元素的數(shù)組。
    • var opts = [ , , , , , ]; //這樣會(huì)創(chuàng)建不一定5或6個(gè)元素的數(shù)組。
  3. 數(shù)組的length屬性不是只讀的

    var colors = ["red", "green", "blue"];
    colors.length = 2;
    alert(colors[2]); //undefined
    
    var colors = ["red", "green", "blue"];
    colors.length = 4;
    alert(colors[3]); //undefined
    
  4. 數(shù)組元素個(gè)數(shù)變化后,其length屬性會(huì)自動(dòng)更新

    var colors = ["red", "green", "blue"];
    colors[colors.length] = "black";
    
    var colors = ["red", "green", "blue"];
    colors[99] = "black";
    alert(colors.length); //100
    
  5. 可以使用檢測(cè)數(shù)組

    • values instanceof Array
  6. ES5+之后,使用Array.isArray()方法也可以檢測(cè)數(shù)組

    • Array.isArray(values);
  7. 轉(zhuǎn)換方法

    • toString(): 得到一個(gè)以逗號(hào)分隔的字符串
    • valueOf(): 返回?cái)?shù)組
    • alert(valueOf())會(huì)后臺(tái)調(diào)用toString()
    • toLocaleString()通常返回和toString()同樣的值,但是允許分別定義toString()與toLocaleString以達(dá)到不同的輸出
    var person1 = {
        toLocaleString: function() {
            return "Nikolaos";
        },
        toString: function() {
            return "Nicholas";
        }
    };
    var person2 = {
        toLocaleString: function() {
            return "Grigorios";
        },
        toString: function() {
            return "Greg";
        }
    };
    
    • join(): 使用不同的分隔符連接數(shù)組元素
    var colors = ["red", "green", "blue"];
    alert(colors.join(","));
    alert(colors.join("||"));
    
  8. 棧方法

    • colors.push(arg1, arg2, ...); //在colors數(shù)組末尾逐個(gè)添加元素,返回值是推入個(gè)數(shù)
    • colors.pop(); //彈出數(shù)組末尾的元素,并同時(shí)將數(shù)組長(zhǎng)度減1
  9. 隊(duì)列方法

    • colors.shift(); //取得第一項(xiàng),并同時(shí)將數(shù)組長(zhǎng)度減1
    • colors.unshift(arg1, arg2, ...); //在數(shù)組的前端添加項(xiàng),返回值是推入個(gè)數(shù)
    var colors = new Array();
    var count = colors.unshift("red", "green");
    count = colors.unshift("black");
    alert(colors.pop()); // "green"
    
  10. 重排序方法

    • values.reverse(); //將數(shù)組元素順序顛倒
    • values.sort(); //將數(shù)組按照一定規(guī)則排序(可以接收一個(gè)比較函數(shù),默認(rèn)升序)
    • 返回值是經(jīng)過(guò)排序后的數(shù)組
    function compare(value1, value2) {
        if(value1 < value2) {
            return -1;
        } else if (value1 > value2) {
            return 1;
        } else {
            return 0;
        }
    }
    var values = [0, 1, 5, 10, 15];
    values.sort(compare);
    alert(values);
    
    function compare(value1, value2) {
        return value1 - value2;
    }
    
  11. 操作方法

    • concat()
    var colors = ["red", "green", "blue"];
    var colors2 = colors.concat("yellow", ["black", "brown"]); //傳入一個(gè)值元素yellow和一個(gè)包含兩個(gè)值(black, brown)的數(shù)組元素
    alert(colors2); //red, green, blue, yellow, black, brown
    
    • slice()
    var colors = ["red", "green", "blue", "yellow", "purple"];  var colors2 = colors.slice(1);
    var colors3 = colors.slice(1, 4);
    alert(colors2); //green, blue, yellow, purple
    alert(colors3); //green, blue,  yellow
    
    • splice() 向數(shù)組的中部插入項(xiàng)
      • 刪除:splice(0, 2)刪除數(shù)組中的前兩項(xiàng)
      • 插入:splice(2, 0, "red", "green")從當(dāng)前數(shù)組的位置2開(kāi)始插入字符串"red"和"green"。
      • 替換:splice(2, 1, "red", "green")刪除當(dāng)前數(shù)組位置2的項(xiàng),并從位置2開(kāi)始插入字符串"red"和"green"。
      • 始終返回一個(gè)數(shù)組,包含從原數(shù)組中刪除的項(xiàng)(如果沒(méi)有刪除的項(xiàng),則返回空數(shù)組)。
  12. 位置方法

    • indexOf() 從數(shù)組的開(kāi)頭(位置0)開(kāi)始向后查找
    • lastIndexOf() 從數(shù)組的末尾開(kāi)始向前查找
    • 接收兩個(gè)參數(shù):要查找的項(xiàng)、查找起點(diǎn)位置的索引(可選)
    • 返回 要查找的項(xiàng)在數(shù)組中的位置/不存在時(shí)返回-1
  13. 迭代方法

    • every() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回true,則返回true
    • filter() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組
    • forEach() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),無(wú)返回值
    • map() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組
    • some() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回true,則返回true
    • 傳入這些方法中的函數(shù)會(huì)接收三個(gè)參數(shù):數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的位置、數(shù)組對(duì)象本身
    • 以上方法都不會(huì)修改數(shù)組中的包含的值
    • Example
    var numbers = [1, 2, 3, 4];
    var everyResult = numbers.every(function(item, index, array) {
        return (item > 2);
    });
    alert(everyResult); //false
    
  14. 歸并方法

    • reduce() 從數(shù)組的第一項(xiàng)開(kāi)始,逐個(gè)遍歷到最后,并構(gòu)建一個(gè)返回值
    • reduceRight() 從數(shù)組的最后一項(xiàng)開(kāi)始,向前遍歷到第一項(xiàng),并構(gòu)建一個(gè)返回值
    • 以上方法都接收兩個(gè)參數(shù):在每一項(xiàng)上調(diào)用的函數(shù)、作為歸并基礎(chǔ)的初始值(可選);調(diào)用函數(shù)接收4個(gè)參數(shù):前一個(gè)值、當(dāng)前值、項(xiàng)的索引和數(shù)組對(duì)象本身。
    • Example
    var values = [1, 2, 3, 4, 5];
    var sum = values.reduce(function(prev, cur, index, array) {
        return prev + cur;
    });
    alert(sum); //15
    

Date類(lèi)型

  1. 使用UTC時(shí)間1970年1月1日0時(shí)開(kāi)始經(jīng)過(guò)的毫秒數(shù)來(lái)保存日期,能精確到1970.1.1之前或之后的100 000 000年。
  2. 初始化
    • var now = new Date(); // 自動(dòng)獲取當(dāng)前的日期和時(shí)間
    • var time = new Date(1000) // 傳入指定日期的毫秒數(shù)以初始化為指定日期
      • 為了簡(jiǎn)化這個(gè)計(jì)算過(guò)程,ES提供了兩個(gè)方法:Date.parse()和Date.UTC();
      • Date.parse() 接收一個(gè)表字符串參數(shù),然后嘗試根據(jù)這個(gè)字符串返回相應(yīng)時(shí)期的毫秒數(shù)。
      • Date.UTC() 接收年份、基于0的月份(0-11)、月中的哪一天(1-31)、時(shí)、分、秒、毫秒,只有年月是必須的。
      • Date.UTC()的日期和時(shí)間都基于本地時(shí)區(qū)創(chuàng)建。
  3. Date.now() 返回調(diào)用該方法時(shí)的日期和時(shí)間的毫秒數(shù)
  4. 繼承的方法
    • toLocaleString() 按照與瀏覽器設(shè)置的地區(qū)相適應(yīng)的格式返回日期和時(shí)間
    • toString() 通常返回帶有時(shí)區(qū)信息的日期和時(shí)間,時(shí)間一般以軍用時(shí)間(0-23小時(shí))表示
    • valueOf() 不返回字符串,返回日期的毫秒表示
  5. 格式化方法
    • toDateString() 以特定于實(shí)現(xiàn)的格式顯示星期、月、日、年
    • toTimeString() 以特定于實(shí)現(xiàn)的格式顯示時(shí)、分、秒、時(shí)區(qū)
    • toLocaleDateString() 以特定于地區(qū)的格式顯示星期、月、日、年
    • toLocaleTimeString() 以特定于實(shí)現(xiàn)的格式顯示時(shí)、分、秒
    • toUTCString() 以特定于實(shí)現(xiàn)的格式顯示完整的UTC日期
  6. 日期/時(shí)間組件方法
    • 查閱手冊(cè)

RegExp類(lèi)型

  1. 通過(guò)RegExp類(lèi)型來(lái)支持正則表達(dá)式

  2. 字面量形式創(chuàng)建正則表達(dá)式:var expression = / pattern / flags;

    • pattern 模式部分:可以是任何簡(jiǎn)單或復(fù)雜的正則表達(dá)式,可以包含字符串、限定符、分組、向前查找以及反向引用。每個(gè)正則表達(dá)式都可以帶有一個(gè)或多個(gè)標(biāo)志(flags),用以表明正則表達(dá)式的行為。
    • flags 標(biāo)志:
      • g: 表示全局模式,即模式將被應(yīng)用于所有字符串,而非在發(fā)現(xiàn)第一個(gè)匹配項(xiàng)時(shí)立即停止。
      • i: 表示不區(qū)分大小寫(xiě)模式,即在確定匹配項(xiàng)時(shí)忽略模式與字符串的大小寫(xiě)。
      • m: 表示多行模式,即在到達(dá)一行文本末尾時(shí)還會(huì)繼續(xù)查找下一行中是否存在與模式匹配的項(xiàng)。
    • Examples
      • var pattern1 = /at/g; 匹配字符串中所有的"at"實(shí)例
      • var pattern2 = /[bc]at/i; 匹配第一個(gè)"bat"或"cat",不區(qū)分大小寫(xiě)
      • var pattern3 = /.at/gi; 匹配所有以"at"結(jié)尾的3個(gè)字符的組合,不區(qū)分大小寫(xiě)
    • 模式中使用的所有元字符必須轉(zhuǎn)義。包括:( [ { \ ^ & | ? * + . ] )
      • var pattern4 = /[bc]at/i; 匹配第一個(gè)"[bc]at",不區(qū)分大小寫(xiě)
      • var pattern5 = /.at/gi; 匹配所有".at",不區(qū)分大小寫(xiě)
  3. 使用RegExp構(gòu)造函數(shù)創(chuàng)建正則表達(dá)式

    • 接收兩個(gè)參數(shù):要匹配的字符串模式、標(biāo)志字符串(可選)

      • var pattern1 = /[bc]at/i;
      • var pattern2 = new RegExp("bc[at]", "i");
    • 不能把正則表達(dá)式的字面量直接傳給RegExp構(gòu)造函數(shù)。

    • 需要雙重轉(zhuǎn)義

      字面量模式 等價(jià)的字符串
      /[bc]at/ "\[bc\]at"
      /.at/ "\.at"
      /name/age/ "name\/age"
      /\d.\d{1,2}/ "\d.\d{1,2}"
      /\w\hello\123/ "\w\\hello\\123"
    • Example

    var re = null;
    for(i = 0; i < 10; i++) {
        re = /cat/g; // 即便是循環(huán)也只創(chuàng)建一次RegExp實(shí)例,所以只有第一次調(diào)用test()的時(shí)候會(huì)成功,這是因?yàn)榈谝淮握{(diào)用test()時(shí)找到了"cat",但第二次調(diào)用是從索引為3的字符(上一次匹配的末尾)開(kāi)始的。
        re.test("catastrophe");
    }
    for(i = 0; i < 10; i++) {
        re = new RegExp("cat", "g"); // 每一次迭代都會(huì)創(chuàng)建新的RegExp實(shí)例,所以每次循環(huán)都會(huì)創(chuàng)建一個(gè)新的正則表達(dá)式。
        re.test("catastrophe");
    }
    
  4. RegExp實(shí)例屬性

    • global: 布爾值,表示是否設(shè)置了g標(biāo)志。
    • ignoreCase: 布爾值,表示是否設(shè)置了i標(biāo)志。
    • lastIndex: 整數(shù),表示開(kāi)始搜索下一個(gè)匹配項(xiàng)的字符位置,從0算起。
    • multiline: 布爾值,表示是否設(shè)置了m標(biāo)志。
    • source: 正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)中的字符串模式返回。
  5. RegExp實(shí)例方法

    • exec() 專(zhuān)門(mén)為捕獲組設(shè)計(jì),接受一個(gè)參數(shù):要應(yīng)用模式的字符串;返回:包含第一個(gè)匹配項(xiàng)信息的數(shù)組|沒(méi)有匹配項(xiàng)返回null。

      • 返回的數(shù)組是Array實(shí)例,但是包含兩個(gè)額外的屬性:index(表示匹配項(xiàng)在字符串中的位置)、input(表示應(yīng)用的正則表達(dá)式的字符串)。在數(shù)組中,第一項(xiàng)是與整個(gè)模式匹配的字符串,其他項(xiàng)是與模式中捕獲組普配的字符串(如果沒(méi)有捕獲組,則該數(shù)組只包含一項(xiàng))。
      • Example
      var text = "mom and dad and baby";
      var pattern = /mom( and dad( and baby)?)?/gi;
      var matches = pattern.exec(text);
      alert(matches.index); // 0;
      alert(matches.input); // "mom and dad and baby"
      alert(matches[0]); // "mom and dad and baby"
      alert(matches[1]); // " and dad and baby"
      alert(matches[2]); // " and baby"
      
      • 對(duì)于exec()方法而言,即使在模式中設(shè)置了全局標(biāo)志(g),它每次也只會(huì)返回一個(gè)匹配項(xiàng)。在不設(shè)全局標(biāo)志的情況下,在同一個(gè)字符串上多次調(diào)用exec()將始終返回第一個(gè)匹配項(xiàng)的信息;而設(shè)置全局標(biāo)志后,每次調(diào)用exec()則會(huì)在字符串中繼續(xù)查找新的匹配項(xiàng)。(IE除外)
    • test() 接受一個(gè)字符串參數(shù),在模式與該參數(shù)匹配的情況下返回true,否則返回false。

    • toString()和toLocaleString() 返回正則表達(dá)式的字面量。

  6. 構(gòu)造函數(shù)屬性

    • 查閱手冊(cè)
  7. 局限性 (JS不支持的高級(jí)正則表達(dá)式)

    • 匹配字符串開(kāi)始和結(jié)尾的\A和\Z錨。
    • 向后查找
    • 并集和交集類(lèi)
    • 原子組
    • Unicode支持(單個(gè)字符除外)
    • 命名的捕獲組
    • s(單行)標(biāo)志和x(無(wú)間隔)標(biāo)志匹配模式
    • 條件匹配
    • 正則表達(dá)式注釋

Function類(lèi)型

  1. 每個(gè)函數(shù)都是Function類(lèi)型的實(shí)例,并且與其他引用類(lèi)型一樣具有屬性和方法。

  2. 定義

    function sum (num1, num2) {
        return num1 + num2;
    }
    
    var sum = function(num1, num2) {
        return num1 + num2;
    };
    
    var sum = new Function("num1", "num2", "return num1 + num2"); //接收任意參數(shù),但最后一個(gè)參數(shù)始終被作為函數(shù)體。不推薦。
    
  3. 沒(méi)有重載

    • 使用相同名稱(chēng)定義的函數(shù),后一個(gè)會(huì)覆蓋前一個(gè)。
  4. 函數(shù)的聲明與函數(shù)表達(dá)式

    • 解析器會(huì)率先讀取函數(shù)聲明,使其在執(zhí)行任何代碼之前可用。但是函數(shù)表達(dá)式必須等到解析器執(zhí)行到它所在的代碼行才能被解釋執(zhí)行。

      alert(sum(10, 10));
      function sum (num1, num2) {
          return num1 + num2;
      } // 可以正確執(zhí)行
      
      alert(sum(10, 10));
      var sum = function(num1, num2) {
          return num1 + num2;
      }; // 無(wú)法正確執(zhí)行,因?yàn)楹瘮?shù)在一個(gè)初始化語(yǔ)句中,而不是聲明。會(huì)導(dǎo)致第一行代碼出現(xiàn)unexpected indentifier錯(cuò)誤。
      
  5. 作為值的函數(shù)

    • 函數(shù)名本身是變量,所以可以被當(dāng)做參數(shù)傳遞,但是要去掉圓括號(hào)。也可以當(dāng)做返回值被傳遞出去。
  6. 函數(shù)內(nèi)部屬性

    • arguments: 有一個(gè)callee屬性,是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù)。
    function factorial(num) {
        if (num <= 1) {
            return 1;
        } else {
            return num * arguments.callee(num - 1);
        }
    }
    
    • this: 引用函數(shù)執(zhí)行的環(huán)境對(duì)象。
    • caller: 保存著調(diào)用當(dāng)前函數(shù)的引用,如果在全局作用域調(diào)用當(dāng)前函數(shù),則它的值為null。
  7. 函數(shù)的屬性和方法

    • 屬性

      • length: 表示函數(shù)希望接收的命名參數(shù)的個(gè)數(shù)
      • prototype: 保存他們所有實(shí)例方法的真正所在。
    • 方法

      • apply(): 接收兩個(gè)參數(shù):在其中運(yùn)行函數(shù)的作用域、參數(shù)數(shù)組(可以是Array實(shí)例,也可以是arguments對(duì)象)
      function sum(num1, num2) {
          return num1 + num2;
      }
      function callSum(num1, num2) {
          return sum.apply(this, arguments);
      }
      function callSum_1(num1, num2) {
          return sum.apply(this, [num1, num2]);
      }
      
      • call(): 第一個(gè)參數(shù)是this沒(méi)有變化,其與參數(shù)直接傳遞給函數(shù)
      function sum(num1, num2) {
          return num1 + num2;
      }
      function callSum(num1, num2) {
          return sum.call(this, num1, num2);
      }
      
      • 真正作用:擴(kuò)充函數(shù)賴(lài)以運(yùn)行的作用域。
      window.color = "red";
      var o = { color: "blue"};
      function sayColor() {
          alert(this.color);
      }
      sayColor();
      sayColor().call(this); // "red"
      sayColor().call(window); // "red"
      sayColor().call(o); // "blue"
      
      • apply和call在特定的作用域中調(diào)用函數(shù),實(shí)際等于設(shè)置函數(shù)體內(nèi)this對(duì)象的值。
      • bind(): 創(chuàng)建一個(gè)函數(shù)的實(shí)例,其this值會(huì)被綁定到傳給bind()函數(shù)的值
      window.color = "red";
      var o = { color: "blue" };
      function sayColor() {
          alert(this.color);
      }
      var objectSayColor = sayColor.bind(o);
      objectSayColor(); // "blue"
      

基本包裝類(lèi)型

  1. 特殊的引用類(lèi)型:Boolean Number String (基本包裝類(lèi)型)

  2. 基本類(lèi)型值不是對(duì)象,所以不應(yīng)該有方法。為了實(shí)現(xiàn)與訪問(wèn)對(duì)象一樣的方法,系統(tǒng)進(jìn)行了一系列處理,對(duì)于代碼:

    var s1 = "some text";
    var s2 = s1.substring(2);
    

    系統(tǒng)進(jìn)行了如下處理:

    • 創(chuàng)建String類(lèi)型的一個(gè)實(shí)例
    • 在實(shí)例上調(diào)用指定方法
    • 銷(xiāo)毀這個(gè)實(shí)例
  3. 引用類(lèi)型與基本包裝類(lèi)型的主要區(qū)別:對(duì)象的生存期

    • 使用new操作符創(chuàng)建的引用類(lèi)型的實(shí)例,在執(zhí)行流離開(kāi)當(dāng)前作用域之前都一直保存在內(nèi)存中;自動(dòng)創(chuàng)建的基本包裝類(lèi)型的對(duì)象,則只存在于一行代碼的執(zhí)行瞬間,然后被立即銷(xiāo)毀。
    • 所以,不能在運(yùn)行時(shí)為基本類(lèi)型值添加屬性和方法。
    • 可以顯式地調(diào)用Boolean Number String來(lái)創(chuàng)建基本包裝類(lèi)型的對(duì)象,但是不推薦。對(duì)基本包裝類(lèi)型的實(shí)例調(diào)用typeof會(huì)返回"object",而且所有基本包裝類(lèi)型的對(duì)象都會(huì)被轉(zhuǎn)換為布爾值true。
  4. Boolean類(lèi)型

    • var booleanObject = new Boolean(true);
    • 在布爾表達(dá)式中使用Boolean對(duì)象會(huì)出現(xiàn)問(wèn)題:
    var falseObject = new Boolean(false);
    var result = falseObject && true;
    alert(result); // true
    
    var falseValue = false;
    var result = falseValue && true;
    alert(result); // false
    
  5. Number類(lèi)型

    • var numberObject = new Number(10);
    • 可以為toString方法傳遞一個(gè)表示基數(shù)的參數(shù),告訴他返回幾進(jìn)制數(shù)值的字符串形式
    var num = 10;
    alert(num.toString(2)); // "1010"
    
    • 提供了一些用于將數(shù)值格式化為字符串的方法

      • toFixed() 按照指定的小數(shù)位返回值的字符串表示
      var num = 10;
      alert(num.toFixed(2)); // "10.00"
      
      var num = 10.005;
      alert(num.toFixed(2)); // "10.01"
      
      • toExponential() 返回以指定指數(shù)表示法表示的數(shù)值的字符串形式
      var num = 10;
      alert(num.toExponential(1)); // "1.0e+1"
      
      • toPrecision() 得到表示某個(gè)數(shù)值最合適的格式,接收一個(gè)參數(shù),表示數(shù)值的所有數(shù)字的位數(shù)(不包括指數(shù)部分)
      var num = 99;
      alert(num.toPrecision(1)); // "1e+2"
      alert(num.toPrecision(2)); // "99"
      alert(num.toPrecision(3)); //"99.0"
      
  6. String類(lèi)型

    • var stringObject = new String("Hello World!");

    • 實(shí)例方法

      • charAt()/charCodeAt() 用于訪問(wèn)字符串中的特定字符,接收一個(gè)參數(shù),即基于0的字符位置,以 單字符字符串/字符編碼 的形式,返回那個(gè)字符。
      • concat() 用于將一個(gè)或多個(gè)字符串拼接起來(lái),返回拼接得到的字符串
      var stringValue = "hello ";
      var result = stringValue.concat("world");
      alert(result); // "hello world"
      
      • slice() substr() substring() 接收兩個(gè)參數(shù):指定字符串開(kāi)始的位置、(可選)表示字符串到哪里結(jié)束/要返回的字符個(gè)數(shù)
      var stringValue = "hello world";
      alert(stringValue.slice(3)); // "lo world"
      alert(stringValue.substring(3)); // "lo world"
      alert(stringValue.substr(3)); // "lo world"
      alert(stringValue.slice(3, 7)); // "lo w"
      alert(stringValue.substring(3, 7)); // "lo w"
      alert(stringValue.substr(3, 7)); // "lo worl"
      
      var stringValue = "hello world";
      alert(stringValue.slice(-3)); // "rld" -3 會(huì)被轉(zhuǎn)換成 8 (-3 + 字符串長(zhǎng)度11 = 8)
      alert(stringValue.substring(-3)); // "hello world"
      alert(stringValue.substr(-3)); // "rld"
      alert(stringValue.slice(3, -4)); // "lo w"
      alert(stringValue.substring(3, -4)); // "hel"
      alert(stringValue.substr(3, -4)); // ""
      
      • indexOf() lastIndexOf() 從頭/從末尾搜索給定的字符串,然后返回該字符串的位置(未找到返回-1);可選參數(shù),表示從哪個(gè)位置開(kāi)始搜索。
      var stringValue = "hello world";
      alert(stringValue.indexOf("o")); // 4
      alert(stringValue.lastIndexOf("o")); // 7
      
      var stringValue = "hello world";
      alert(stringValue.indexOf("o", 6)); // 7
      alert(stringValue.lastIndexOf("o", 6)); // 4 (IMPORTANT)
      
      • trim() 創(chuàng)建一個(gè)字符串副本,刪除前置及后綴的所有空格,然后返回結(jié)果。
      • toLowerCase() toLocaleLowerCase() toUpperCase() toLocaleUpperCase() 帶Locale的會(huì)進(jìn)行地區(qū)優(yōu)化
      • 字符串模式匹配(基于String) match() search()(返回字符串中第一個(gè)匹配的索引/沒(méi)找到返回-1)
      var text = "cat, bat, sat, fat";
      var pattern = /.at/;
      var matches = text.match(pattern); // 等同于 var matches = pattern.exec(text);
      alert(matches.index); // 0
      alert(matches[0]); // "cat"
      alert(pattern.lastIndex) // 0
      
      var text = "cat, bat, sat, fat";
      var pos = text.search(/at/);
      alert(pos); // 1
      
      • replace() 字符串替換 第一個(gè)參數(shù)是一個(gè)RegExp對(duì)象或者一個(gè)字符串,第二個(gè)參數(shù)是一個(gè)字符串或者一個(gè)函數(shù)(參數(shù):模式的匹配項(xiàng)、模式匹配項(xiàng)在字符串中的位置、原始字符串),為了實(shí)現(xiàn)插入的效果,ES提供了一些特殊字符序列(查閱手冊(cè))
      var text = "cat, bat, sat, fat";
      var result = text.replace("at", "ond"); // 只替換找到的第一個(gè)
      var result = text.replace(/at/g, "ond"); // 按照正則規(guī)則,替換全部
      
      function htmlEscape(text) {
          return text.replace(/[<>"&]/g, function(match, pos, originalText) {
              switch(match) {
                  case "<" return "\<";
                  case ">" return "\>";
                  case "&" return "\&";
                  case "\" return "\"";s
              }
          });
      }
      alert(htmlEscape("<p class=\"greeting\">Hello World!</p>")); // <p class="greeting">Hello World!</p>
      
      • split() 基于指定分隔符將一個(gè)字符串分割成多個(gè)子字符串,并將結(jié)果放在一個(gè)數(shù)組中。分隔符可以是一個(gè)字符串,也可以是一個(gè)RegExp對(duì)象。split()可以接受可選的第二個(gè)參數(shù),用于指定數(shù)組的大小,以確保返回的數(shù)組不會(huì)超過(guò)既定大小。
      var colorText = "red, blue, green, yellow";
      var color = colorText.split(/[^\,]+/); // ["", ",", ",", ",", ""]
      
      • localeCompare() 比較兩個(gè)字符串,并返回下列值中的一個(gè)
        • 如果字符串在字母表中應(yīng)該排在字符串參數(shù)之前,則返回一個(gè)負(fù)數(shù)
        • 如果字符串等于字符串參數(shù),則返回0
        • 如果字符串在字母表中應(yīng)該排在字符串參數(shù)之后,則返回一個(gè)正數(shù)
      var stringValue = "yellow";
      alert(stringValue).localeCompare("brick"); // 1
      
      • fromCharCode() 靜態(tài)方法,接收一或多個(gè)字符編碼,然后將它們轉(zhuǎn)換成一個(gè)字符串。
      alert(String.fromCharCode(104, 101, 108, 111)); // "hello"
      
      • HTML方法 查閱手冊(cè)

單體內(nèi)置對(duì)象

  1. 由ES實(shí)現(xiàn)提供的、不依賴(lài)于宿主環(huán)境的對(duì)象,如:Object Array String..

  2. Global對(duì)象

    • 不屬于任何其他對(duì)象的屬性和方法,最終都是它的屬性和方法。
    • URI編碼方法:使用encodeURI()和encodeURIComponent()方法可以對(duì)URI進(jìn)行編碼,以便發(fā)送給瀏覽器。encodeURI()不會(huì)對(duì)本身屬于URI的特殊字符編碼,而encodeURIComponent()會(huì)對(duì)它發(fā)現(xiàn)的任何非標(biāo)準(zhǔn)字符進(jìn)行編碼。
    • URI解碼方法:decodeURI()和decodeURIComponent()
    • eval()方法 完整的ES解析器,接收一個(gè)參數(shù):要執(zhí)行的ES字符串。
      • eval("alert('hi')"); // 等價(jià)于 alert("hi");
      • 在嚴(yán)格模式下,在外部訪問(wèn)不到eval()中創(chuàng)建的任何變量或者函數(shù)。
    • 屬性 查閱手冊(cè)
    • window對(duì)象:Global對(duì)象作為window對(duì)象的一部分加以實(shí)現(xiàn);因此,在全局作用域中聲明的所有變量和函數(shù),都成為了window對(duì)象的屬性。
    • 取得global對(duì)象:
    var global = function() {
        return this;
    }();
    
  3. Math對(duì)象

    • 為保存數(shù)學(xué)公式和信息提供
    • Math.random() 返回一個(gè) 0 - 1 的隨機(jī)數(shù)
    • 查閱手冊(cè)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一章: JS簡(jiǎn)介 從當(dāng)初簡(jiǎn)單的語(yǔ)言,變成了現(xiàn)在能夠處理復(fù)雜計(jì)算和交互,擁有閉包、匿名函數(shù), 甚至元編程等...
    LaBaby_閱讀 1,764評(píng)論 0 6
  • 第三章 基本概念 3.1 語(yǔ)法 ECMAScript標(biāo)識(shí)符一般采用駝峰大小寫(xiě)格式,也就是第一個(gè)字母小寫(xiě),剩下的每個(gè)...
    小雄子閱讀 670評(píng)論 0 1
  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,691評(píng)論 0 4
  • 1.Object類(lèi)型: 兩種創(chuàng)建實(shí)例的方式:1.new操作符創(chuàng)建——var person = new Object...
    會(huì)有貓惹閱讀 238評(píng)論 0 0
  • 芥川有時(shí)候會(huì)想,如果當(dāng)初他和中也先生并沒(méi)有產(chǎn)生更多的感情,那么現(xiàn)在的情景是不是會(huì)有所不同。 他的意思是說(shuō)他依舊成為...
    微云暮雨閱讀 2,345評(píng)論 2 3

友情鏈接更多精彩內(nèi)容