<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 3.4 數據類型 ECMAScript中有5種簡單數據類型(基本數據類型):**Undefined、Null、Boolean、Number和String**。還有1種復雜數據類型-**Object**,Object本質上是由一組無序的名值對組成的。 注:在ES6中新增了Symbol。 ### 3.4.1 typeof操作符 JavaScript有三種方法,可以確定一個值到底是什么類型。 ~~~ typeof運算符 instanceof運算符 Object.prototype.toString方法 ~~~ typeof操作符用來檢測給定變量的數據類型,返回下列某個字符串: ~~~ "undefined" 這個值未定義 "boolean" 這個值是布爾值 "string" 這個值是字符串 "number" 這個值是數值 "object" 這個值是對象或null "function" 這個值是函數 ~~~ ### 3.4.2 Undefined類型 Undefined類型只有一個值,即特殊的**undefined**。 如果在使用var聲明變量但未對其加以初始化時,這個變量的值就是undefined。 ~~~ var name; console.log(name == undefined); // true ~~~ 對于未聲明過的變量,只能執行一項操作,即使用typeof操作符檢測其數據類型(對未聲明的變量調用`delete`不會導致錯誤(在非嚴格模式下)) ### 3.3.3 Null類型 Null類型也是只有一個值的數據類型,這個特殊值就是**null**。null值可以看作是一個**空對象指針**。 ~~~ console.log(typeof null); // "object" ~~~ undefined其實是派生自null值: ~~~ console.log(null == undefined); // true ~~~ **注意:** null和undefined沒有屬性,甚至連toString()這種標準方法都沒有。 **建議:**只要意在保存對象的變量還沒有真正保存對象,就應該明確地讓變量保存null值,而undefined不必。 ### 3.4.4 Boolean類型 Boolean類型有兩個字面值:**true和false**,兩個值是區分大小寫的。 要將一個值轉換為其對應的Boolean值,可有使用轉型函數Boolean(): ~~~ var name = 'tg'; console.log(Boolean(name); // true ~~~ 可以對任何類型的值調用Boolean函數,而且總會返回一個Boolean值(true或false) **轉換規則** | 數據類型 | 轉換為true的值 | 轉換為false的值 | | --- | --- | --- | | Boolean | true | false | | String | 任何非空字符串 | “”(空字符串) | | Number | 任何非零數字值(包括無窮大) | 0和NaN | | Object | 任何對象 | null | | Undefined | N/A | undefined | ### 3.4.5 Number類型 最基本的數值字面量格式是**十進制整數**。 ~~~ var num = 15; ~~~ 八進制(以8為基數) 以0開頭,后面是(0~7) ~~~ var num = 070; // 八進制的56 ~~~ 十六進制(以16為基數) 以0x開頭,后面是(0~9及A~F),字母A~F可以大小寫。 ~~~ var num = 0xA; //十六進制的10 ~~~ 注意:在進行算術計算時,所有以八進制和十六進制表示的數值都會被轉換成是十進制。 **1.浮點數值** 浮點數值:數值中必須**包含一個小數點**,且小數點后面必須至少有一位數字。 ~~~ var floatNum = 1.1; ~~~ 保存浮點數值需要的內存空間是保存整數值的兩倍。 對于那些極大或極小的數值,我們可以使用**科學計數法**(e表示法)來表示浮點數值。 e表示法表示的數值等于e前面的數值乘以10的指數次冪: ~~~ var floatNum = 3.125e7; //3125000 var floatNum1 = 3e-7; //0.0000003 ~~~ 默認情況下,ECMAScript會將那些小數點后面帶有6個零以上的浮點數值轉換為以e表示的數值。 ~~~ var floatNum1 = 3e-7; //0.0000003 ~~~ 浮點數的最高精度是17位小數。 ~~~ 0.1 + 0.2 = 0.3000000000000004; // 不是等于0.3 ~~~ 具體了解可參考下面鏈接內容: [http://www.tuicool.com/articles/EryqIzy](http://www.tuicool.com/articles/EryqIzy) **2.數值范圍** 基于內存的限制,ECMAScript只能保存有限的數值。 ECMAScript能夠表示的最小數值保存在Number.MIN_VALUE(最小值)中,這個值是**5e-324**;能夠表示的最大數值保存在Number.MAX_VALUE(最大值)中,這個值是**1.7976931348623157e+308.** 如果某次計算的結果得到了一個超出JavaScript數值范圍的值,那么這個數值就會被轉換成特殊的Infinity值;如果這個值是負數,則會被轉換為-Infinity(負無窮),如果這個數值是整數,則會轉換成Infinity(正無窮)。 注意:Infinity是不能參與計算的數值。 用isFinite()來判斷這個值是否無窮,該函數接受一個參數。如果參數位于最小與最大數值之間,返回true。 ~~~ console.log(isFinite(1)); //true console.log(isFinite(Infinity)); // false ~~~ **3.NaN** NaN(Not a Number)表示**非數值**,這個數值用于表示一個本來要返回數值的操作數未返回數值的情況。 **特點**: * **任何涉及NaN的操作都會返回NaN。** ~~~ console.log(typeof NaN/10); //NaN ~~~ * **NaN與任何值都不相等,包括NaN本身。** ~~~ console.log(NaN == NaN); //false ~~~ ECMAScript定義了isNaN()函數來判斷是否非數值,該函數接受一個**參數,可以是任何類型**。 console.log(isNaN(NaN)); // true isNaN()在接收到一個值(可以是任何類型)之后,會**嘗試將這個值轉換為數值**,某些不是數值的值會直接轉換為數值,而任何**不能被轉換為數值的值**都會導致這個函數返回**true**。 ~~~ console.log(isNaN(NaN)); // true console.log(isNaN(10)); // false console.log(isNaN("10")); //false (可以轉成數值10) console.log(isNaN(true)); //false (可以轉成數值1) console.log(isNaN('blue')); //true ~~~ **4.數值轉換** 有3個函數可以把非數值轉換為數值:**Number()、parseInt()和parseFloat()** Number()可以用于任何數據類型,后面兩個是專門用于把字符串轉換為數值。 **Number()函數的轉換規則:** * 如果是Boolean值,true和false將分別轉換為1和0 * 如果是數字值,只是簡單的傳入和返回 * 如果是null值,返回0 * 如果是undefined,返回NaN * 如果是字符串,遵循下列規則: 1. 如果是字符串中只包含數字(包括前面帶正負號),則將其轉換為十進制數值(前導的零會被忽略) 2. 如果字符串中包含有效的浮點格式,如1.1,則將其轉換為對應的浮點數值 3. 如果字符串中包含有效的十六進制,如0xf,則將其轉換為相同大小的十進制數值 4. 如果字符串是空的,返回0 5. 如果字符串中包含上述格式以外的字符,返回NaN * 如果是對象,則調用對象的valueOf()方法,然后依照前面的規則轉換返回的值。如果轉換的結果是NaN,則調用對象的toString()方法,然后再次依照前面的規則轉換返回字符串值 ~~~ console.log(Number('tg')); // NaN console.log(Number('')); // 0 console.log(Number('0011')); // 11 console.log(Number(true)); //1 ~~~ 一元加操作符的操作與Number函數規則相同。 **parseInt()函數轉換規則:** parseInt()會忽略字符串前面的空格,直到找到第一個非空格字符。**如果第一個字符不是數字字符或負號,就會返回NaN。如果第一個字符是數字字符,就會繼續解析,直到解析完所有后續字符或者遇到了一個非數字字符.** parseInt()也能識別八進制(在ECMAScript 5中無法識別,將開頭的0當作0)和十六進制,最后會轉換成十進制。 ~~~ console.log(parseInt('123tg')); // 123 console.log(parseInt('')); // NaN console.log(parseInt('070')); // 70 console.log(parseInt('0xf')); //15 console.log(parseInt(22.5)); // 22 ~~~ 我們還可以為parseInt()提供第二個參數,指定需要轉換的進制。如果提供了第二個參數,要轉換八進制和十六進制時,可省略0和0x。 ~~~ console.log(parseInt('0xAF',16)); // 175 console.log(parseInt('AF',16)); // 175 console.log(parseInt('AF')); // NaN console.log(parseInt('070',8)); // 56 console.log(parseInt('70',8)); // 56 ~~~ **parseFloat()**和parseInt()類似,也是從第一個字符(位置0)開始解析每個字符,而且一直解析到字符串末尾,或者解析到遇到一個無效的浮點數字字符為止。 即:字符串中的第一個小數點是有效的,后面的小數點是無效的,它還會忽略前導的零,只會解析十進制值。 ~~~ console.log(parseFloat('123tg')); // 123 console.log(parseFloat('22.12.4')); // 22.12 console.log(parseFloat('070')); // 70 console.log(parseFloat('0xf')); //0 console.log(parseFloat(22.5)); // 22.5 ~~~ ### 3.4.6 String類型 String類型用于表示由零或多個16位Unicode字符組成的字符序列,即**字符串**。字符串可以由雙引號或單引號表示(前后一致則無區別)。 ~~~ var name = 'tg'; 或 var name = "tg"; ~~~ 在ECMAScript 3中,字符串直接量必須寫在一行中,而在ECMAScript 5中,字符串直接量可以拆分成數行,每行必須以反斜杠(\)結束。 ~~~ // ES 5 'Hello \ world' ~~~ **1.字符字面量** String數據類型包含了一些特殊的字符字面量,也叫**轉義序列**,用于表示非打印字符,或者具有其他用途的字符。 這些字符字面量可以出現在字符串中的任一位置,而且也被當作**一個字符**來解析。 | 字面量 | 含義 | | --- | --- | | \n | 換行 | | \t | 制表 | | \b | 空格 | | \r | 回車 | | \f | 進紙 | | \\ | 斜杠 | | \' | 單引號 | | \" | 雙引號 | | \xnn | 以十六進制代碼nn表示的一個字符(n為0~F),比如:\x41表示"A" | | \unnn | 以十六進制代碼nnnn表示的一個Unicode字符(n為0~F)。比如:\u03a3表示Σ | ~~~ var name = 'tg\u03a3'; console.log(name); //tgΣ console.log(name.length); // 3 ~~~ **2.字符串的特點** ECMAScript中的字符串是不可變的。一旦創建,值就不會改變。 **后臺邏輯:**要改變某個變量保存的字符串,首先要銷毀原來的字符串,然后用另一個包含新值的字符串填充該變量。 **3.轉換為字符串** 要將一個值轉換為字符串有兩種方式: 使用幾乎每個值(null和undefined沒有)都有的**toString()**方法 還可以給toString()傳入一個參數作為輸出數值的基數。 ~~~ var num = 10; alert(num.toString()); //"10" alert(num.toString(2)); //"1010 ~~~ 可以使用轉型函數**String()**,**能將任何類型的值轉換為字符串**,轉換規則: * 如果值有toString()方法,則調用該方法并返回相應的結果 * 如果值是null,則返回null * 如果值是undefined,則返回undefined ~~~ console.log(String(10)); // "10" console.log(String(true)); // "true" console.log(String(null)); // "null" console.log(String(undefined)); // "undefined" ~~~ 要把某個值轉為字符串,還可以使用加號操作符實現隱式轉換 ~~~ console.log( true + ''); // "true" ~~~ ### 3.4.7 Object類型 ECMAScript中的對象其實就是**一組數據和功能的集合**。對象可通過執行new操作符后跟創建的對象類型的名稱來創建。 ~~~ var o = new Object(); ~~~ **在ECMAScript中,Object類型是所有它的實例的基礎,即Obeject類型所具有的任何屬性和方法也同樣存在于更具體的對象中。** Object的每個實例都具有下列屬性和方法: ~~~ Constructor:保存著用于創建當前對象的函數,比如上面的例子,構造函數就是Object() hasOwnProperty(propertyName):用于檢查給定的屬性在當前對象實例中是否存在(而不是在實例的原型中),參數必須是字符串形式 isPrototypeOf(object):用于檢查傳入的對象是否是另一個對象的原型 propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語句來枚舉,參數必須是字符串形式 toLocaleString():返回對象的字符串表示,該字符串與執行環境的地區對應 toString():返回對象的字符串表 valueOf():返回對象的字符串、數值或布爾值表示,通常和toString()返回的值相同 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看