JS學(xué)習(xí)筆記(二)

<h2 id="3.6">3.6 語句</h2>

<h3 id="3.6.1">3.6.1 if語句</h3>

  • 語法:if(condition) statement1 else statement2
  • 注意:condition可以是任何值。ECMAScript會自動調(diào)用Boolean()轉(zhuǎn)換函數(shù)

<h3 id="3.6.2">3.6.2 do-while語句</h3>

<h3 id="3.6.3">3.6.3 while語句</h3>

<h3 id="3.6.4">3.6.4 for語句</h3>

注意:在循環(huán)內(nèi)部定義的變量可以在外部訪問
<h3 id="3.6.5">3.6.5 for-in語句</h3>

  • 語法:for (property in expression) statement

  • 示例:

            for (var proName in window) {  
          ...
      }
    
  • 在這個例子中焰宣,使用for-in循環(huán)來顯示BOM中window對象的所有屬性捕仔。每次執(zhí)行循環(huán)時,都會將對象中存在的一個屬性名賦值給變量proName盅粪。這個過程會一直持續(xù)到對象中的所有屬性都被枚舉一遍為止悄蕾。

  • ECMAScript對象的屬性沒有順序。因此for-in循環(huán)輸出的屬性名的順序不可預(yù)測

  • 如果表示要迭代的對象的變量值為null或undefined奠骄,for-in語句會拋出錯誤。ECMAScript5更正了這一行為戚揭;對這種情況不再跑出錯誤(不執(zhí)行循環(huán)體)撵枢。嫁衣先檢測該對象的值是不是null或undefined

<h3 id="3.6.6">3.6.6 label語句</h3>

  • 語法:label:statement

  • 示例:

     start:for(var i = 0; i < count; i++){
         alert(i);
     }
    

<h3 id="3.6.7">3.6.7 break和continue語句</h3>

<h3 id="3.6.8">3.6.8 with語句</h3>

  • 語法:with (expression) statement

  • 作用:將代碼的作用域設(shè)置到一個特定的對象中

  • 示例:

      var qs = location.search.substring(1);
    

可以改為

    with(location){
        var qs = search.substring(1);
    }

在with語句的代碼塊內(nèi)部锄禽,每個變量首先被認(rèn)為是一個局部變量,而如果在局部環(huán)境中找不到該變量的定義磁滚,就會查詢location對象中是否有同名的屬性宵晚。如果發(fā)現(xiàn)了同名屬性淤刃,則以location對象屬性的值作為變量的值。嚴(yán)格模式下不允許使用with語句陨仅。with語句會導(dǎo)致性能下降铝侵,不建議使用with語句灼伤。

<h3 id="3.6.9">3.6.9 switch語句</h3>

  • expression可以使用任何數(shù)據(jù)類型
  • case的值不一定是常量咪鲜,可以是變量甚至是表達(dá)式
  • switch語句在比較時使用的是全等操作符嗜诀,因此不會發(fā)生類型轉(zhuǎn)換

<h2 id="3.7">3.7 函數(shù)</h2>

嚴(yán)格模式對函數(shù)的一些限制:1.不能把函數(shù)命名為eval或arguments;2.不能把參數(shù)命名為eval或arguments发皿;3.不能出現(xiàn)兩個明明參數(shù)同名的情況

<h3 id="3.7.1">3.7.1 理解參數(shù)</h3>

ECMAScript中的參數(shù)在內(nèi)部都是用一個數(shù)組來表示的穴墅。ECMAScript不介意傳幾個參數(shù)玄货,也不介意參數(shù)的數(shù)據(jù)類型。在函數(shù)體內(nèi)可以通過arguments對象來訪問這個參數(shù)數(shù)組夹界。

  • 比如第一個參數(shù)就是arguments[0]

  • arguments對象的length屬性可以獲知有多少個參數(shù)傳遞給了函數(shù)

  • arguments的值永遠(yuǎn)和對應(yīng)明命名參數(shù)的值保持同步

      function doAdd(num1, num2){
          ...
      }
    

這里當(dāng)改變arguments[0]=1后可柿,num1就會自動改變复斥。但是在函數(shù)內(nèi)修改num1并不會使arguments[0]改變械媒。另外纷捞,如果只傳一個參數(shù)主儡,修改arguments[1]也不會改變num2的值

<h3 id="3.7.2">3.7.2 沒有重載</h3>

如果定義了兩個名字相同的函數(shù)。就以后定義的函數(shù)為準(zhǔn)

<h2 id="3.8">3.8 小結(jié)</h2>

  • 基本數(shù)據(jù)類型:Undefined、Null臀玄、Boolean健无、Number累贤、String
  • 沒有定義整數(shù)和浮點(diǎn)數(shù)臼膏。Number類型用于表示所有數(shù)值
  • 復(fù)雜數(shù)據(jù)類型:Object
  • 嚴(yán)格模式為這門語言中容易出錯的地方加了限制
  • 算術(shù)操作符渗磅、布爾操作符始鱼。關(guān)系操作符、相等操作符起暮、賦值操作符
  • if负懦、for密似、switch
  • 無須指定函數(shù)返回值
  • 未指定返回值的函數(shù)返回的是一個特殊的undefined值
  • 沒有函數(shù)簽名的概念
  • 可以向ECMAScript函數(shù)傳遞任意數(shù)量的參數(shù)残腌,通過arguments對象來訪問這些參數(shù)
  • 不能重載

<h1 id="4">第4章 變量抛猫、作用域和內(nèi)存問題</h1>

<h2 id="4.1">4.1 基本類型和引用類型的值</h2>

<h3 id="4.1.2">4.1.2 復(fù)制變量值</h3>

  • 如果一個變量向另一個變量復(fù)制基本類型的值闺金,會在變量對象上創(chuàng)建一個新值峰档,然后把該值復(fù)制到為新變量分配的位置上
  • 如果是引用類型讥巡,兩個變量將引用同一個對象欢顷。

<h3 id="4.1.3">4.1.3 傳遞參數(shù)</h3>

所有參數(shù)都按值傳遞±虑桑基本類型的傳遞和基本類型變量的復(fù)制一樣陕悬,引用類型的傳遞和引用類型變量的復(fù)制一樣

<h3 id="4.1.4">4.1.4 檢測類型</h3>

  • 檢測基本數(shù)據(jù)類型:typeof操作符
  • 檢測引用類型:instanceof操作符
    • person instanceof Array;//變量person是Array嗎
    • person instanceof Object;//變量person是Object嗎

<h2 id="4.2">4.2 執(zhí)行環(huán)境及作用域</h2>

一個函數(shù)就是一個執(zhí)行環(huán)境
<h3 id="4.2.1">4.2.1 延長作用域鏈</h3>

  1. try-catch的catch語句塊:會創(chuàng)建一個新的變量對象墩莫,其中包含的是被拋出的錯誤對象的聲明
  2. with語句:會將指定的對象添加到作用域鏈中

<h3 id="4.2.2">4.2.2 沒有塊級作用域</h3>

注意不是像C語言那樣用{}來區(qū)分作用域
比如說for(var i = 0; i < 5; i++)這里的i在外面也能訪問狂秦。

  1. 聲明變量

    • 使用var聲明的變量會自動被添加到最接近的環(huán)境中裂问。在函數(shù)內(nèi)部就是局部環(huán)境堪簿,with語句中就是函數(shù)環(huán)境椭更。
    • 不使用var聲明虑瀑,變量自動添加到全局環(huán)境
  2. 查詢標(biāo)識符

    • 從作用域鏈前端開始,向上逐級查詢

<h2 id="4.3">4.3 垃圾收集</h2>

<h3 id="4.3.1">4.3.1 標(biāo)記清除</h3>

  • 最常用的垃圾收集方式
  • 給所有存儲在內(nèi)存中的變量加上標(biāo)記滴须,再去掉環(huán)境中的變量以及被環(huán)境中的變量引用的標(biāo)記

<h3 id="4.3.2">4.3.2 引用計數(shù)</h3>

  • 不太常見
  • 跟蹤記錄每個值被引用的次數(shù)
  • 循環(huán)引用會導(dǎo)致錯誤

<h3 id="4.3.3">4.3.3 性能問題</h3>

  • 確定垃圾收集的時間間隔

<h3 id="4.3.4">4.3.4 管理內(nèi)存</h3>

  • 一旦數(shù)據(jù)不再有用扔水,最好通過將其值設(shè)置為null來釋放其因引用(適用于大多數(shù)全局變量和全局變量的屬性)

<h2 id="4.4">4.4 小結(jié)</h2>

基本類型和引用類型:

  • 基本類型值保存在棧內(nèi)存中魔市,在內(nèi)存中占據(jù)固定大小的控件
  • 從一個變量向另一個變量復(fù)制基本類型的值待德,會創(chuàng)建這個值的一個副本
  • 引用類型的值是對象磅网,保存在堆內(nèi)存中
  • 包含引用類型值的變量實際上包含的并不是對象本身涧偷,而是一個指向該對象的指針
  • 從一個變量向另一個變量復(fù)制引用類型的值燎潮,復(fù)制的其實是指針确封。兩個變量最終都指向同一個對象
  • typeof爪喘,instanceof

執(zhí)行環(huán)境:

  • 全局執(zhí)行環(huán)境秉剑、函數(shù)執(zhí)行環(huán)境
  • 每次進(jìn)入一個新執(zhí)行環(huán)境侦鹏,都會創(chuàng)建一個用于搜索變量和函數(shù)的作用域鏈
  • 局部環(huán)境有權(quán)訪問其包含(父)環(huán)境
  • 全局環(huán)境只能訪問全局環(huán)境
  • 變量的執(zhí)行環(huán)境有助于確定應(yīng)該合適釋放內(nèi)存

垃圾收集:

  • 離開作用域的值將被自動標(biāo)記為可以回收
  • 標(biāo)記清除
  • 引用計數(shù)略水。JavaScript引擎目前不再使用這種算法慎璧;但在IE中訪問非原生JavaScript對象(如DOM)時炸卑,這種算法仍然可能導(dǎo)致問題
  • 循環(huán)引用
  • 及時解除變量的引用

<h1 id="5">第5章 引用類型</h1>

<h2 id="5.1">5.1 Object類型</h2>

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

    2. 對象字面量表示法

       var person = {           //花括號表示表達(dá)式的開始
           name : "Nicholas",   //逗號分隔不同的屬性
           age : 29             //最后一個屬性不能加逗號
       }
      

      注意:

      • 屬性名可以用字符串表示盖文。

      • 可以留空:

          var person = {};         //與new一個對象相同
          person.name = "Nicholas";
          person.age = 29;
        
      • 最適合需要向函數(shù)傳入大量可選參數(shù)的情形

      • 用這個方法時不會調(diào)用構(gòu)造函數(shù)

    3. 最好的做法是對那些必需值使用命名參數(shù)五续,使用對象字面量來封裝多個可選參數(shù)

  1. 訪問對象屬性:一般使用點(diǎn)表示法
    1. 方括號:person["name"]
      • 優(yōu)點(diǎn):可以通過變量來訪問屬性

          var propertyName = "name"; 
          alert(person[propertyName]);
        
      • 屬性名中包含會導(dǎo)致語法錯誤的字符疙驾,或?qū)傩悦褂玫氖顷P(guān)鍵字或保留字

    2. 點(diǎn)表示法:person.name

<h2 id="5.2">5.2 Array類型</h2>

ECMAScript數(shù)組的每一項可以保存任何類型的數(shù)據(jù)
大小可以動態(tài)調(diào)整

創(chuàng)建數(shù)組:

  1. new
    • var colors = new Array();
    • var colors = new Array(20);
    • var colors = new Array("red","blue","green");
    • 也可以省略new
  2. 數(shù)字字面量表示法
    • var colors = ["red","blue","green"];
    • var colors = [];
    • 不要在最后加逗號

讀取和設(shè)置數(shù)組:

  • 方括號:colors[0];

length屬性:

  • 不是只讀的。所以通過設(shè)置這個屬性傻挂〗鹁埽可以從數(shù)組的末尾移除項或向數(shù)組中添加新項

  • 不存在的項是undefined

      var colors = ["red","blue","green"];
      colors[99] = "black";
    

這時候length會變成100幢码,colors[3]——colors[98]都是undefined

<h3 id="5.2.1">5.2.1 檢測數(shù)組</h3>

  • Array.isArray()方法
  • 一個全局作用域可以用instanceof操作符

<h3 id="5.2.2">5.2.2 轉(zhuǎn)換方法</h3>

  1. toString():返回由數(shù)組中每個值的字符串形式拼接而成的一個以逗號分隔的字符串。調(diào)用的是數(shù)組每一項的toString()
  2. valueOf():返回數(shù)組。
  3. toLocaleString():也是逗號分隔咕娄。調(diào)用的是每一項的toLocaleString()

注意:

  • alert()調(diào)用的是每一項的toString()
  • 想要改變分隔符可以用join()方法:people.join("||");

<h3 id="5.2.3">5.2.3 棧方法</h3>

push()方法和pop()方法實現(xiàn)的是類似棧的行為(后進(jìn)先出,在頂部操作)

  • push():可以接收任意數(shù)量的參數(shù)圣贸,并逐個添加到數(shù)組末尾吁峻,返回修改后的數(shù)組長度
  • pop():從數(shù)組末尾移除最后一項,返回移除的項

<h3 id="5.2.4">5.2.4 隊列方法</h3>

隊列:在末端添加項用含,從前端移除項。shift()和push()模擬了隊列的行為痪寻。unshift()和pop()模擬的事相反方向的隊列

  • shift():移除數(shù)組的第一個項并返回該項
  • unshift():在數(shù)組前端添加任意個項并返回新數(shù)組長度

<h3 id="5.2.5">5.2.5 重排序方法</h3>

  • reserve():反轉(zhuǎn)數(shù)組原來的順序,返回排序后的數(shù)組

  • sort():先調(diào)用每一項的toString(),再比較得到的字符串佣蓉。返回排序后的數(shù)組

  • 最佳方案:給sort()方法一個比較函數(shù)作為參數(shù)

      var values = [0, 1, 5, 10, 15];
      values.sort(compare);
    
      functiong compare(value1, value2){
          return value2 - value1;   //降序
      }
    

<h3 id="5.2.6">5.2.6 操作方法</h3>

  • concat():先創(chuàng)建當(dāng)前數(shù)組的一個副本然后將接收到的參數(shù)添加到這個副本的末尾疚膊,返回新構(gòu)建的數(shù)組

  • slice():基于當(dāng)前數(shù)組的項創(chuàng)建新數(shù)組。接收兩個參數(shù):返回項的起始位置和結(jié)束位置。返回起始和結(jié)束位置之間的項(不包括結(jié)束位置的項

    • 如果參數(shù)出現(xiàn)負(fù)數(shù)善炫,則length+該參數(shù)
    • 如果結(jié)束位置<起始位置,則返回空數(shù)組
  • splice():主要用途是向數(shù)組的中部插入項

    • 刪除:2個參數(shù):要刪除的第一項的位置和要刪除的項數(shù)宪萄。
    • 插入:3個參數(shù):起始位置静汤、0(要刪除的項數(shù))和要插入的任意數(shù)量的項。splice(2,0,"red","green")
    • 替換:3個參數(shù):起始位置、要刪除的項數(shù)和要插入的任意數(shù)量的項
    • 返回一個數(shù)組嫁佳,包含從原數(shù)組中刪除的項湿弦。如果沒有刪除班利,則返回一個空數(shù)組

<h3 id="5.2.7">5.2.7 位置方法</h3>

  • indexOf()和lastIndexOf()
    • 參數(shù):要查找的項和表示查找起點(diǎn)位置(可選)的索引
    • indexOf()從數(shù)組的開頭開始找,lastIndexOf()從末尾開始找
    • 返回值:要查找的項在數(shù)組中的位置罗标。-1表示沒找到
    • 參數(shù)與項嚴(yán)格相等(全等操作符)

<h3 id="5.2.8">5.2.8 迭代方法</h3>

5個迭代方法的參數(shù):要在每一項上運(yùn)行的函數(shù)和運(yùn)行該函數(shù)的作用域?qū)ο?br> 傳入函數(shù)接收的參數(shù):數(shù)組項的值庸队、該項在數(shù)組中的位置和數(shù)組對象本身
以下方法都不改變數(shù)組中包含的值

  • every():如果傳入的函數(shù)對每一項都返回true,則返回true

  • filter():返回 能返回true的項組成的 數(shù)組

  • forEach():數(shù)組的每一項都運(yùn)行給定函數(shù)闯割。沒有返回值

  • map():返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組

  • some():給定函數(shù)對任一項返回true彻消,則返回true

      var numbers = [1, 2, 3, 4, 5];
      var everyResult = numbers.every(function(item, index, array){
          return (item>2);
      });
    

<h3 id="5.2.9">5.2.9 縮小方法</h3>

reduce()和reduceRight()的參數(shù):一個在每一項上調(diào)用的函數(shù)和作為縮小基礎(chǔ)的初始值(可選)。ruduce()從第一項開始纽谒,reduceRight()從最后一項開始

傳入函數(shù)的參數(shù):前一個值证膨,當(dāng)前值,項的索引和數(shù)組對象鼓黔。這個函數(shù)返回的任何值都會作為第一個參數(shù)自動傳給下一項央勒。

var values=[1, 2, 3, 4, 5];
var sum = values.reduce(function(prev, cur, index, array){
    return prev + cur;
});

<h2 id="5.3">5.3 Date類型</h2>

自1970.1.1開始經(jīng)過的毫秒數(shù)

創(chuàng)建日期對象:var now = new Date();//自動獲得當(dāng)前時間,是一個字符串

Date.parse():

  • 參數(shù):表示日期的字符串
  • 返回:相應(yīng)日期的毫秒數(shù)
  • 格式:2/28/2017澳化、February 28,2017崔步、Tuesday February 28 2017 00:00:00 GMT-0700、2017-02-28T00:00:00
  • 字符串不正確返回NaN
  • 直接將字符串傳給Date()函數(shù)缎谷,后臺以同樣會調(diào)用Date.parse()

Date.UTC():

  • 參數(shù):年份井濒、基于0的月份(0-11)、月中的哪一天(1-31)列林、小時數(shù)(0-23)瑞你、分鐘、秒希痴、毫秒者甲。年和月必須
  • 默認(rèn)天數(shù)1,其他0

Date.now():返回調(diào)用這個方法時的日期和時間的毫秒數(shù)

還有一種方法是用+操作符與把Date()對象轉(zhuǎn)換成毫秒數(shù)

<h3 id="5.3.1">5.3.1 繼承的方法</h3>

  • toLocaleString():按照與瀏覽器相適應(yīng)的格式返回日期和時間
  • toString():通常返回帶有時區(qū)信息的日期和時間砌创,一般以軍用時間表示(小時是0-23)
  • valueOf():返回毫秒數(shù)

<h3 id="5.3.2">5.3.2 日期格式化方法</h3>

  • toDateString()
  • toTimeString()
  • toLocaleDateString()
  • tolocalTimeString()
  • toUTCString()

<h3 id="5.3.3">5.3.3 日期/時間組件方法</h3>

很多..很多..

<h2 id="5.4">5.4 RegExp類型</h2>

正則表達(dá)式的兩種創(chuàng)建方法

  1. 字面量

    • 語法:var expression = / pattern / flags ;

    • flag:

      • g:global虏缸。全局模式
      • i:case-insensitive鲫懒。不區(qū)分大小寫模式
      • m:multiline:多行模式。
    • 注意轉(zhuǎn)義

  2. RegExp構(gòu)造函數(shù)

    • 參數(shù):要匹配的字符串模式刽辙,可選的標(biāo)志字符串
    • 要雙重轉(zhuǎn)義

正則表達(dá)式字面量始終共享同一個RegExp實例窥岩,而構(gòu)造函數(shù)創(chuàng)建的每一個新RegExp實例都是一個新實例。使用正則表達(dá)式字面量必須像直接調(diào)用RegExp一樣宰缤,每次都創(chuàng)建新的RegExp實例

<h3 id="5.4.1">5.4.1 RegExp實例屬性</h3>

  • global:是否設(shè)置g
  • ignoreCase:是否設(shè)置i
  • lastIndex:整數(shù)颂翼,表示開始搜索下一個匹配項的起始位置
  • multiline:是否設(shè)置m
  • source:正則表達(dá)式的字符串表示,按照字面量形式

<h3 id="5.4.2">5.4.2 RegExp實例方法</h3>

  • exec()

    • 參數(shù):要應(yīng)用模式的字符串
    • 返回:包含第一個匹配項信息的數(shù)組慨灭。沒有匹配項則返回null
    • 返回數(shù)組的兩個額外屬性:index(位置)疚鲤、input(輸入的字符串)
    • 返回的書組中,第一項是與整個模式匹配的字符串缘挑,其他項是與模式中的捕獲組匹配的字符串
    • 不設(shè)置g時,每次都從0開始查詢桶略。設(shè)置g時语淘,會接著上次查詢。但是都是只返回一個匹配項
  • test()

    • 參數(shù):字符串
    • 用來測試字符串和某個模式是否匹配
  • toLocaleString()/toString():返回正則表達(dá)式的字面量

  • valueOf():返回正則表達(dá)式本身

<h3 id="5.4.3">5.4.3 RegExp構(gòu)造函數(shù)屬性</h3>

  • input:最近一次要匹配的字符串
  • leftContext:字符串匹配項左邊的部分
  • RightContext:字符串匹配項右邊的部分
  • lastMatch:最近一次的匹配項
  • lastParen:最近一次的匹配的捕獲組
  • multiline:是否所有表達(dá)式都使用多行模式
  • $1——$9:第1-9個匹配的捕獲組

<h3 id="5.4.4">5.4.4 模式的局限性</h3>

不支持許多高級正則表達(dá)式的特性

<h2 id="5.5">5.5 Function類型</h2>

函數(shù)是對象际歼,函數(shù)名是指針惶翻。每個函數(shù)都是Function類型的實例。一個函數(shù)可能會有多個名字
定義函數(shù):

  1. function sum (num1, num2){
    ...
    }
  2. var sum = function(num1, num2){
    ...
    }

<h3 id="5.5.1">5.5.1 沒有重載</h3>

后定義的將覆蓋前面的
<h3 id="5.5.2">5.5.2 函數(shù)聲明與函數(shù)表達(dá)式</h3>

  • 函數(shù)聲明:

    • 形式:function sum(num1, num2){...}
    • 函數(shù)聲明會提前鹅心,解析器會將函數(shù)聲明提前添加到執(zhí)行環(huán)境
  • 函數(shù)表達(dá)式:

    • 形式: var sum = function(num1, num2){...};
    • 在執(zhí)行到函數(shù)所在語句之前吕粗,變量sum不會保存對函數(shù)的引用

<h3 id="5.5.3">5.5.3 作為值的函數(shù)</h3>

可以像傳遞參數(shù)一樣把一個函數(shù)傳遞給令一個函數(shù)⌒窭ⅲ可以將一個函數(shù)作為令一個函數(shù)的結(jié)果來返回

<h3 id="5.5.4">5.5.4 函數(shù)內(nèi)部屬性</h3>

  • arguments

    • 類數(shù)組對象颅筋,包含著傳入函數(shù)中的所有參數(shù)
    • callee:指向擁有這個arguments對象的函數(shù)
  • this

  • caller:保存調(diào)用當(dāng)前函數(shù)的函數(shù)的引用。如果在全局模式下输枯,則是null

<h3 id="5.5.5">5.5.5 函數(shù)屬性和方法</h3>

  • 屬性

    • length:表示函數(shù)希望接收的命名參數(shù)的個數(shù)
    • prototype
  • 方法

    • Functin.apply(obj, args)

      • 參數(shù):
        • obj:這個對象將代替Function類里的this對象
        • args:這個是數(shù)組议泵,它將作為參數(shù)傳遞給Function(也可以是arguments)
    • call()

      • 與apply()類似。只是傳遞給函數(shù)的參數(shù)必須逐個列舉出來桃熄。比如sum.call(this, num1, num2);
    • 作用:這兩種方法最主要的就是能擴(kuò)充函數(shù)的作用域先口。第一個參數(shù)可以是this、window等等

    • bind()

      • 也是同理瞳收,設(shè)置函數(shù)的this值的
      • var oSayColor = sayColor.bind(o);
      • 以上代碼會將函數(shù)oSayColor的this值設(shè)為對象o
    • toLocaleString()碉京、toString()、valueOf()返回函數(shù)的代碼

<h2 id="5.6">5.6 基本包裝類型</h2>

要從內(nèi)存中讀取字符串的值時螟深,后臺會自動:1.創(chuàng)建String類型的一個實例谐宙。2.在實例上調(diào)用指定的方法。3.銷毀這個實例
引用類型和基本包裝類型的主要區(qū)別就是對象的生存期血崭。new一個實例在執(zhí)行流離開作用域前一直保存在內(nèi)存中卧惜;而基本包裝類型的對象是自動創(chuàng)建的厘灼,只存在一行代碼的執(zhí)行瞬間,然后立即銷毀

<h3 id="5.6.1">5.6.1 Boolean類型</h3>

Boolean類型的實例咽瓷。valueOf()返回基本類型值true或false设凹。toString()返回字符串"true"或"false"
<h3 id="5.6.1">5.6.2 Number類型</h3>

  • valueOf():返回基本類型的數(shù)值。另外兩個返回字符串類型的數(shù)值
  • toFixed():按照指定的小數(shù)位返回數(shù)值的字符串表示(四舍五入)
  • toExponential():返回e表示法表示的數(shù)值的字符串形式茅姜。接收一個小數(shù)位數(shù)的參數(shù)(四舍五入)
  • toPercision():返回數(shù)值的最合適格式闪朱。接收一個表示數(shù)值的所有數(shù)字的位數(shù)的參數(shù)。也就是說會自動決定調(diào)用toFixed()還是toExponential()

<h3 id="5.6.3">5.6.3 String類型</h3>

toString()等三個方法都返回字符串值
屬性:length

  1. 字符方法

    • charAt()钻洒、charCodeAt()
      • 參數(shù):字符位置
      • 返回:前者單字符字符串奋姿,后者返回字符編碼
      • 方括號也可以訪問單個字符
  2. 字符串操作方法

    • concat()

      • 參數(shù):任意多個字符串
      • 作用:拼接字符串
      • 返回:拼接得到的新字符串,原字符串保持不變
      • 一般還是用+操作符
    • slice()素标、substr()称诗、substring()

      • 參數(shù):第一個參數(shù)指定子字符串的開始位置。第二個參數(shù)(可選)slice()和substring()指定子字符串最后一個字符后面的位置头遭;substr()指定返回的字符個數(shù)
      • 作用:基于字符串創(chuàng)建新字符串
      • 返回:新的字符串寓免,原字符串不變
      • 在傳入負(fù)值的情況下。slice()負(fù)值+length计维;substr()第一個參數(shù)+length袜香,第二個=0;substring()都=0
  3. 字符串位置方法

    • indexOf()鲫惶、lastIndexOf()
      • 參數(shù):要搜索的子字符串蜈首,從哪個位置搜索(可選)
      • 返回:子字符串位置。沒有則返回-1
      • 一個從前往后欠母,一個從后往前
  4. trim()

    • 作用:創(chuàng)建一個字符串副本欢策,刪除前置和后置空格
    • 返回:新字符串
    • trimLeft()和trimRight()分別刪除開頭和結(jié)尾
  5. 字符串大小寫轉(zhuǎn)換方法
    toLowerCase()、toLocaleLowerCase()艺蝴、toUpperCase()猬腰、toLocaleUpperCase()

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

    • match()

      • 參數(shù):一個。正則表達(dá)式或RegRxp對象
      • 返回:和RegExp的exec()類似猜敢,返回一個數(shù)組
    • search()

      • 參數(shù):一個姑荷。正則表達(dá)式或RegRxp對象
      • 返回:第一個匹配項的索引。沒有則返回-1
      • 始終從開頭向后查找
    • replace()

      • 參數(shù):兩個缩擂。RegExp對象或字符串鼠冕,字符串或一個函數(shù)
      • 如果第一個是字符串,那么只替換第一個字符串胯盯。
      • 第一個參數(shù)提供一個正則表達(dá)式懈费,替換所有字符串,記得指定g
      • 如果第二個參數(shù)是字符串博脑,可以使用一些特殊的字符序列憎乙,將正則表達(dá)式操作得到的值插入到結(jié)果字符串中
      • 傳入的函數(shù)的參數(shù):模式的匹配項票罐,模式匹配項的位置,原始字符串泞边。返回字符串
    • split()

      • 參數(shù):字符串或RegExp對象该押,數(shù)組的大小(可選)
      • 作用:基于指定的分隔符將一個字符串分割成多個子字符串阵谚,將結(jié)果放在一個數(shù)組中
      • 返回:數(shù)組
  7. localeCompare()

    • 如果字符串在字母表中排在字符串參數(shù)之前蚕礼,返回一個負(fù)數(shù)
    • 如果相等,返回0
    • 如股票在之后梢什,返回正數(shù)
  8. fromCharCode()

    • 參數(shù):一或多個字符編碼
    • 返回:字符串
    • 和charCodeAt()相反的操作
    • 這是一個String本身的靜態(tài)方法
  9. HTML方法
    盡量不用

<h2 id="5.7">5.7 單體內(nèi)置對象</h2>
<h3 id="5.7.1">5.7.1 Global對象</h3>

  1. URI編碼方法

    • encodeURI()奠蹬、enceodeURIComponent()
    • 前者主要用于整個URI,不會對本身屬于URI的特殊字符進(jìn)行編碼
    • 后者主要用于URI的某一段嗡午,會對任何非標(biāo)準(zhǔn)字符進(jìn)行編碼
    • decodeURI()囤躁、deceodeURIComponent()
  2. eval()

    • 在eval()中創(chuàng)建的任何變量或函數(shù)都不會被提升。
    • eval()就是用來解析ECMAScript語句的荔睹。
  3. Global對象的屬性
    很多

  4. window對象

    • 訪問Global對象的兩種方法

      • 就是訪問window割以。在全局中聲明的所有變量和函數(shù),都是window對象的屬性
    • 用this

        var global = function(){
            return this;
        }();
      

<h3 id="5.7.2">5.7.2 Math對象</h3>

  1. Math對象的屬性
    很多

  2. min()和max()方法

    • 參數(shù):任意多個

    • 數(shù)組中的最大值或最小值:

        var values = [1, 2, 3, 4, 5];
        var max = Math.max.apply(Math, values);
        //apply是一個很有用的東西应媚!
      
  3. 舍入方法

    • Math.ceil():向上舍
    • Math.floor():向下舍
    • math.round():四舍五入
  4. random()

    • 返回0-1間的一個隨機(jī)數(shù),不包括0和1
    • 值 = Math.floor(Math.random() * 可能值的總數(shù) + 第一個可能的值)
  5. 其他方法
    很多

<h2 id="5.8">5.8 小結(jié)</h2>

  • 引用類型與類相似猜极,但實現(xiàn)不同

  • Object

  • Array類型是一組值的有序列表中姜,同時提供了操作和轉(zhuǎn)換這些值的功能

  • Date

  • RegExp

  • 函數(shù)實際上是Function類型的實例,因此函數(shù)也是對象

  • JavaScript中的基本類型值可以被當(dāng)作對象訪問跟伏。三種基本包裝類:Boolean丢胚、Number、String受扳。

    • 每個包裝類型映射到同名的基本類型
    • 讀取模式下訪問基本類型携龟,就會創(chuàng)建對應(yīng)基本包裝類型的一個對象
    • 包裝對象會立即被銷毀
  • 內(nèi)置對象:Global、Math

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勘高,一起剝皮案震驚了整個濱河市峡蟋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌华望,老刑警劉巖蕊蝗,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赖舟,居然都是意外死亡蓬戚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門宾抓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來子漩,“玉大人豫喧,你說我怎么就攤上這事〈逼茫” “怎么了紧显?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旭绒。 經(jīng)常有香客問我鸟妙,道長,這世上最難降的妖魔是什么挥吵? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任重父,我火速辦了婚禮,結(jié)果婚禮上忽匈,老公的妹妹穿的比我還像新娘房午。我一直安慰自己,他們只是感情好丹允,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布郭厌。 她就那樣靜靜地躺著,像睡著了一般雕蔽。 火紅的嫁衣襯著肌膚如雪折柠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天批狐,我揣著相機(jī)與錄音扇售,去河邊找鬼。 笑死嚣艇,一個胖子當(dāng)著我的面吹牛承冰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播食零,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼困乒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贰谣?” 一聲冷哼從身側(cè)響起娜搂,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吱抚,沒想到半個月后涌攻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡频伤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年恳谎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡因痛,死狀恐怖婚苹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸵膏,我是刑警寧澤膊升,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站谭企,受9級特大地震影響廓译,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜债查,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一非区、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盹廷,春花似錦征绸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缸榄,卻和暖如春渤弛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甚带。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工暮芭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欲低。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像畜晰,于是被迫代替她去往敵國和親砾莱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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