<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                #第四章數據類型 講師:_無腦碼農(張磊)_ 博客:http://www.h5code.com 課程內容: [TOC] * * * * * >ECMAScript 中有5種簡單數據類型:Undefined、Null、Boolean、Number 和String。還有一種復雜數據類型——Object。ECMAScript不支持任何創建自定義類型的機制,所有值都成為以上6種數據類型之一。 ###1.>typeof 操作符 >typeof 操作符是用來檢測變量的數據類型。對于值或變量使用typeof 操作符會返回如下字符串。 | 字符串|描述| | -- | -- | | undefined| 未定義| | boolean| 布爾值 | | string| 字符串 | | number | 數值 | | object | 對象或null | | function | 函數 | ~~~ var box = '無腦碼農'; alert(typeof box); alert(typeof '無腦碼農'); ~~~ >typeof 操作符可以操作變量,也可以操作字面量。雖然也可以這樣使用:typeof(box),但,typeof 是操作符而非內置函數。PS:函數在ECMAScript 中是對象,不是一種數據類型。所以,使用typeof 來區分function 和object 是非常有必要的。 ###2.>Undefined 類型 >Undefined 類型只有一個值,即特殊的undefined。在使用var聲明變量,但沒有對其初始化時,這個變量的值就是undefined。 ~~~ var box; alert(box); ~~~ *PS:我們沒有必要顯式的給一個變量賦值為undefined,因為沒有賦值的變量會隱式的(自動的)賦值為undefined;而undefined主要的目的是為了用于比較,ECMAScript第3版之前并沒有引入這個值,引入之后為了正式區分空對象與未經初始化的變量。* >未初始化的變量與根本不存在的變量(未聲明的變量)也是不一樣的。 ~~~ var box; alert(age); //age is not defined ~~~ *PS:如果typeof box,typeof age都返回的undefined。從邏輯上思考,他們的值,一個是undefined,一個報錯;他們的類型,卻都是undefined。所以,我們在定義變量的時候,盡可能的不要只聲明,不賦值。* ###3.>Null 類型 >Null 類型是一個只有一個值的數據類型,即特殊的值null。它表示一個空對象引用(指針),而typeof 操作符檢測null 會返回object。 ~~~ var box = null; alert(typeof box); ~~~ >如果定義的變量準備在將來用于保存對象,那么最好將該變量初始化為null。這樣,當檢查null值就知道是否已經變量是否已經分配了對象引用了。 ~~~ var box = null; if (box != null) { alert('box 對象已存在!'); } ~~~ >有個要說明的是:undefined 是派生自null 的,因此ECMA-262 規定對它們的相等性測試返回true。 `alert(undefined == null);` >由于undefined 和null兩個值的比較是相等的,所以,未初始化的變量和賦值為null的變量會相等。這時,可以采用typeof變量的類型進行比較。但,建議還是養成編碼的規范,不要忘記初始化變量。 ~~~ var box; var car = null; alert(typeof box == typeof car) ~~~ ###4.>Boolean 類型 >Boolean 類型有兩個值(字面量):true 和false。而true 不一定等于1,false不一定等于0。JavaScript是區分大小寫的,True 和False 或者其他都不是Boolean類型的值。 ~~~ var box = true; alert(typeof box); ~~~ >雖然Boolean 類型的字面量只有true 和false 兩種,但ECMAScript 中所有類型的值都有與這兩個Boolean值等價的值。要將一個值轉換為其對應的Boolean 值,可以使用轉型函數 ~~~ Boolean()。 var hello = 'Hello World!'; var hello2 = Boolean(hello); alert(typeof hello); ~~~ >上面是一種顯示轉換,屬于強制性轉換。而實際應用中,還有一種隱式轉換。比如,在if 條件語句里面的條件判斷,就存在隱式轉換。 ~~~ var hello = 'Hello World!'; if (hello) { alert('如果條件為true,就執行我這條!'); } else { alert('如果條件為false,就執行我這條!'); } ~~~ **以下是其他類型轉換成 Boolean類型規則** | 數據類型|轉換為true 的值|轉換為false 的值 | | -- | -- | -- | | Boolean| true |false | | String| 任何非空字符串|空字符串 | | Number| 任何非零數字值(包括無窮大)| 0 和NaN | | Object| 任何對象|null | | Undefined| |undefined | ###5.>Number 類型 >Number 類型包含兩種數值:整型和浮點型。為了支持各種數值類型,ECMA-262 定義了不同的數值字面量格式。 >最基本的數值字面量是十進制整數。 `var box = 100; //十進制整數` >八進制數值字面量,(以8為基數),前導必須是0,八進制序列(0~7)。 ~~~ var box = 070; //八進制,56 var box = 079; //無效的八進制,自動解析為79 var box = 08; //無效的八進制,自動解析為8 ~~~ >十六進制字面量前面兩位必須是0x,后面是(0~9 及A~F)。 ~~~ var box = 0xA; //十六進制,10 var box = 0x1f; //十六進制,31 ~~~ >浮點類型,就是該數值中必須包含一個小數點,并且小數點后面必須至少有一位數字。 ~~~ var box = 3.8; var box = 0.8; var box = .8; //有效,但不推薦此寫法 ~~~ >由于保存浮點數值需要的內存空間比整型數值大兩倍,因此ECMAScript 會自動將可以轉換為整型的浮點數值轉成為整型。 ~~~ var box = 8.; //小數點后面沒有值,轉換為8 var box = 12.0; //小數點后面是0,轉成為12 ~~~ >對于那些過大或過小的數值,可以用科學技術法來表示(e表示法)。用e 表示該數值的前面10 的指數次冪。 ~~~ var box = 4.12e9; //即4120000000 var box = 0.00000000412; //即4.12e-9 ~~~ >雖然浮點數值的最高精度是17位小數,但算術運算中可能會不精確。由于這個因素,做判斷的時候一定要考慮到這個問題(比如使用整型判斷)。 `alert(0.1+0.2); //0.30000000000000004` >浮點數值的范圍在:Number.MIN_VALUE ~ Number.MAX_VALUE 之間。 ~~~ alert(Number.MIN_VALUE); //最小值 alert(Number.MAX_VALUE); //最大值 ~~~ >如果超過了浮點數值范圍的最大值或最小值,那么就先出現Infinity(正無窮)或者-Infinity(負無窮)。 ~~~ var box = 100e1000; //超出范圍,Infinity var box = -100e1000; //超出范圍,-Infinity ~~~ >也可能通過Number.POSITIVE_INFINITY和Number.NEGATIVE_INFINITY得到Infinity(正無窮)及-Infinity(負無窮)的值。 ~~~ alert(Number.POSITIVE_INFINITY); //Infinity(正無窮) alert(Number.NEGATIVE_INFINITY);//-Infinity(負無窮) ~~~ >要想確定一個數值到底是否超過了規定范圍,可以使用isFinite()函數。如果沒有超過,返回true,超過了返回false。 ~~~ var box = 100e1000; alert(isFinite(box)); //返回false 或者true ~~~ >NaN,即非數值(Not a Number)是一個特殊的值,這個數值用于表示一個本來要返回數值的操作數未返回數值的情況(這樣就不會拋出錯誤了)。比如,在其他語言中,任何數值除以0都會導致錯誤而終止程序執行。但在ECMAScript 中,會返回出特殊的值,因此不會影響程序執行。 ~~~ var box = 0 / 0; //NaN var box = 12 / 0; //Infinity var box = 12 / 0 * 0; //NaN ~~~ >可以通過Number.NaN得到NaN值,任何與NaN進行運算的結果均為NaN,NaN 與自身不相等(NaN 不與任何值相等)。 ~~~ alert(Number.NaN); //NaN alert(NaN+1); //NaN alert(NaN == NaN) //false ~~~ >ECMAScript 提供了isNaN()函數,用來判斷這個值到底是不是NaN。isNaN()函數在接收到一個值之后,會嘗試將這個值轉換為數值。 ~~~ alert(isNaN(NaN)); //true alert(isNaN(25)); //false,25 是一個數值 alert(isNaN('25')); //false,'25'是一個字符串數值,可以轉成數值 alert(isNaN('Zhang')); //true,'Zhang'不能轉換為數值 alert(isNaN(true)); //false true 可以轉成成1 ~~~ >isNaN()函數也適用于對象。在調用isNaN()函數過程中,首先會調用valueOf()方法,然后確定返回值是否能夠轉換成數值。如果不能,則基于這個返回值再調用toString()方法,再測試返回值。 ~~~ var box = { toString : function () { return '123'; //可以改成return 'Zhang'查看效果 } }; alert(isNaN(box)); //false ~~~ >有3 個函數可以把非數值轉換為數值:Number()、parseInt()和parseFloat()。Number()函數是轉型函數,可以用于任何數據類型,而另外兩個則專門用于把字符串轉成數值。 ~~~ alert(Number(true));//1,Boolean類型的true和false分別轉換成1 和0 alert(Number(25)); //25,數值型直接返回 alert(Number(null)); //0,空對象返回0 alert(Number(undefined)); //NaN,undefined 返回NaN ~~~ >如果是字符串,應該遵循一下規則: 1.只包含數值的字符串,會直接轉成成十進制數值,如果包含前導0,即自動去掉。 ~~~ alert(Number('456')); //456 alert(Number('070')); //70 ~~~ 2.只包含浮點數值的字符串,會直接轉成浮點數值,如果包含前導和后導0,即自動去掉。 `alert(Number('08.90')); //8.9` 3.如果字符串是空,那么直接轉成成0。 `alert(Number('')); //0` 4.如果不是以上三種字符串類型,則返回NaN。 `alert('Zhang123'); //NaN` 5.如果是對象,首先會調用valueOf()方法,然后確定返回值是否能夠轉換成數值。如果轉換的結果是NaN,則基于這個返回值再調用toString()方法,再測試返回值。 ~~~ var box = { toString : function () { return '123'; //可以改成return 'Zhang'查看效果 } }; alert(Number(box)); //123 ~~~ >由于Number()函數在轉換字符串時比較復雜且不夠合理,因此在處理整數的時候更常用的是parseInt()。 ~~~ alert(parsetInt('333Zhang')); //333,會返回整數部分 alert(parsetInt('Zhang123Zhang'));//NaN,如果第一個不是數值,就返回NaNalert(parseInt('32Wu43Nao')); //12,從第一數值開始取,到最后一個連續數值結束 alert(parseInt('45.34')); //56,小數點不是數值,會被去掉 alert(parseInt('')); //NaN,空返回NaN ~~~ >parseInt()除了能夠識別十進制數值,也可以識別八進制和十六進制。 ~~~ alert(parseInt('0xA')); //10,十六進制 alert(parseInt('070')); //56,八進制 alert(parseInt('0xAZhang')); //100,十六進制,Zhang 被自動過濾掉 ~~~ >ECMAScript 為parseInt()提供了第二個參數,用于解決各種進制的轉換。 ~~~ alert(parseInt('0xAF')); //175,十六進制 alert(parseInt('AF',16));//175,第二參數指定十六進制,可以去掉0x 前導 alert(parseInt('AF')); //NaN,理所當然 alert(parseInt('101010101',2)); //314,二進制轉換 alert(parseInt('70',8)) //56,八進制轉換 ~~~ >parseFloat()是用于浮點數值轉換的,和parseInt()一樣,從第一位解析到非浮點數值位置。 ~~~ alert(parseFloat('123Zhang')); //123,去掉不是別的部分 alert(parseFloat('0xA')); //0,不認十六進制 alert(parseFloat('123.4.5')); //123.4,只認一個小數點 alert(parseFloat('0123.400')); //123.4,去掉前后導 alert(parseFloat('1.234e7'));//12340000,把科學技術法轉成普通數值 ~~~ ###6.>String 類型 >String 類型用于表示由于零或多個16位Unicode字符組成的字符序列,即字符串。字符串可以由雙引號(")或單引號(')表示。 ~~~ var box = 'Zhang'; var box = "Zhang"; ~~~ >PS:在某些其他語言(PHP)中,單引號和雙引號表示的字符串解析方式不同,而ECMAScript中,這兩種表示方法沒有任何區別。但要記住的是,必須成對出現,不能穿插使用,否則會出錯。 `var box = '無腦碼農"; //出錯` String 類型包含了一些特殊的字符字面量,也叫轉義序列。 | 字面量|含義| | -- | -- | | \n| 換行 | | \t| 制表 | | \b| 空格 | | \r| 回車 | | \f| 進紙 | | \\| 斜杠 | | \'| 單引號 | | \"| 雙引號 | | \xnn| 以十六進制代碼nn 表示的一個字符(0~F)。例:\x41 | | \unnn| 以十六進制代碼nnn 表示的一個Unicode 字符(0~F)。例:\u03a3 | >ECMAScript 中的字符串是不可變的,也就是說,字符串一旦創建,它們的值就不能改變。要改變某個變量保存的字符串,首先要銷毀原來的字符串,然后再用另一個包含新值的字符串填充該變量。 ~~~ var box = 'Mr.'; box = box + ' Zhang'; ~~~ >toString()方法可以把值轉換成字符串。 ~~~ var box = 11; var box = true; alert(typeof box.toString()); ~~~ >toString()方法一般是不需要傳參的,但在數值轉成字符串的時候,可以傳遞進制參數。 ~~~ var box = 10; alert(box.toString()); //10,默認輸出 alert(box.toString(2)); //1010,二進制輸出 alert(box.toString(8)); //12,八進制輸出 alert(box.toString(10)); //10,十進制輸出 alert(box.toString(16)); //a,十六進制輸出 ~~~ >如果在轉型之前不知道變量是否是null 或者undefined 的情況下,我們還可以使用轉型函數String(),這個函數能夠將任何類型的值轉換為字符串。 ~~~ var box = null; alert(String(box)); ~~~ >PS:如果值有toString()方法,則調用該方法并返回相應的結果;如果是null 或者undefined,則返回"null"或者"undeinfed"。 ###7.>Object 類型 >ECMAScript 中的對象其實就是一組數據和功能的集合。對象可以通過執行new 操作符后跟要創建的對象類型的名稱來創建。 `var box = new Object();` >Object()是對象構造,如果對象初始化時不需要傳遞參數,可以不用寫括號,但這種方式我們是不推薦的。 `var box = new Object;` >Object()里可以任意傳參,可以傳數值、字符串、布爾值等。而且,還可以進行相應的計算。 ~~~ var box = new Object(2); //Object 類型,值是2 var age = box + 2; //可以和普通變量運算 alert(age); //輸出結果,轉型成Number 類型了 ~~~ >既然可以使用new Object()來表示一個對象,那么我們也可以使用這種new 操作符來創建其他類型的對象。 ~~~ var box = new Number(5); //new String('Zhang')、new Boolean(true) alert(typeof box); //Object 類型 ~~~ *PS:面向對象是JavaScript課程的重點,這里我們只是簡單做個介紹。詳細的課程將在以后的章節繼續學習。*
                  <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>

                              哎呀哎呀视频在线观看