JS數(shù)據(jù)類型

1.JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區(qū)別是什么?

1.JavaScript 定義了 6 種數(shù)據(jù)類型。

  • 數(shù)值(number):整數(shù)和小數(shù)(比如 1 和 3.14)

  • 字符串(string):字符組成的文本(比如"Hellow Word")

  • 布爾值(boolean):true 和 false 兩個特定值

  • undefined : 表示“未定義”或不存在,即此處目前沒有任何值

  • null :表示空缺,即此處應該有一個值,但目前為空

  • 對象 (object):各種值組成的結(jié)合

2.原始類型和復雜類型的區(qū)別是什么?

  • 數(shù)值、字符串、布爾值稱為原始類型(primitive type)的值,即他們是最基本的數(shù)據(jù)類型,不能再細分了。

  • 將對象稱為復雜類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。

  • 至于 undefined 和 null ,一般將它們看成兩個特殊值。

    2.typeof和instanceof的作用和區(qū)別?

  • typeof 是一個一元運算符,放在一個運算數(shù)之前,運算數(shù)可以是任意類型,可判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)

    • null的返回值是object,這是由于歷史原因造成的,1995年JavaScript語言的第一版,所有值都設(shè)計成32位,其中最低的3位用來表述數(shù)據(jù)類型,object對應的值是000。當時,只設(shè)計了五種數(shù)據(jù)類型(對象、整數(shù)、浮點數(shù)、字符串和布爾值),完全沒考慮null,只把它當作object的一種特殊值,32位全部為0。這是typeof null返回object的根本原因。
      為了兼容以前的代碼,后來就沒法修改了。這并不是說null就屬于對象,本質(zhì)上null是一個類似于undefined的特殊值。
  • instanceof用于判斷某個變量是否是某個對象的實例,返回值為true或false。

var 0 = {}; 
var a = [];

0 instanceof Array // false
a instanceof Array //true
a instanceof Object //true

typeof 對數(shù)組 []和對象{}的返回值都是Object,無法區(qū)分數(shù)組和對象,但是instanceof可以區(qū)分。
數(shù)組[]是對象的一個子類,所以 a instanceof Array返回值是true

3. 如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)

 數(shù)字
 var a = 1
 typeof a // "number"

 字符串
 var b = "abc"
 typeof b // "string"

 布爾
 var c = false
 typeof c // "boolean"

 函數(shù)
 var d = function(){}
 typeof d // "function"

4.NaN是什么? 有什么特別之處?

  • NaN表示 no number ,主要出現(xiàn)在將字符串解析成數(shù)字的場合
  • NaN和任何數(shù)值都不相等,包括它自己
  • NaN不是一種獨立的數(shù)據(jù)類型,而是一種特殊數(shù)值,它的數(shù)據(jù)類型依然屬于Number,使用typeof運算符可以判斷出來。
  • 任何一個涉及NaN的操作都會返回NaN

5.如何把非數(shù)值轉(zhuǎn)化為數(shù)值?

  • 1 Number()

    • Boolean ,true 返回 1,false 返回 0。
     Number(true) // 1
     Number(false)// 0
    
    • 數(shù)字值,原樣返回
    • null 值,返回0.
    • underfined ,返回NaN
      Number(undefined)// NaN
    • 字符串
      • 如果是字符串中只包含數(shù)字(包括前面帶正號或負號的情況),則將其轉(zhuǎn)化成十進制數(shù)值。
          Number ('23')    // 23
          Number ('+23')   // 23 
          Number ('-23')   // -23
          Number ('011')   // 11  前面的0會忽略
      
      • 如果字符串中包含的有效的浮點數(shù),就會轉(zhuǎn)化成對應的浮點數(shù),前面的0會忽略。
        Number ('3.14')    //3.14
        Number ('03.14')   //3.14 
      
      • 如果字符串是空字符串,則返回 0。
        Number("")//0
      • 如果字符串中包含除上述格式外的其他字符,則轉(zhuǎn)化成NaN。
        Number("123blue")  // NaN
        Number(message)  // NaN,變量message未聲明
      
    1. parseInt()
    • parseInt方法用于將字符串轉(zhuǎn)為整數(shù)。返回值只有兩種可能,不是一個十進制整數(shù),就是NaN。
          parseInt ('120')       //120   整數(shù)轉(zhuǎn)化成整數(shù)
          parseInt ('3.14')    //3     浮點數(shù)轉(zhuǎn)化前面的整數(shù)部分
          parseInt ('    10')    //10    前面的空格會忽略
          parseInt ('000010')    //10    前面的0會忽略
      
    • 如果parseInt的參數(shù)不是字符串,則會先轉(zhuǎn)為字符串再轉(zhuǎn)換。
        parseInt(1.23) // 1
        // 等同于
        parseInt('1.23') // 1
      
    • 字符串轉(zhuǎn)為整數(shù)的時候,是一個個字符依次轉(zhuǎn)換,如果遇到不能轉(zhuǎn)為數(shù)字的字符,就不再進行下去,返回已經(jīng)轉(zhuǎn)好的部分。
        parseInt('8a') // 8
        parseInt('12**') // 12
        parseInt('12.34') // 12
        parseInt('15e2') // 15
        parseInt('15px') // 15
        //上面代碼中,parseInt的參數(shù)都是字符串,結(jié)果只返回字符串頭部可以轉(zhuǎn)為數(shù)字的部分。
      
    • 如果字符串的第一個字符不能轉(zhuǎn)化為數(shù)字(后面跟著數(shù)字的正負號除外),返回NaN
        parseInt('abc')   // NaN
        parseInt('.3')    // NaN
        parseInt('')      // NaN
        parseInt('+')     // NaN
        parseInt('+1')    // 1
      
    • parseInt方法還可以接受第二個參數(shù)(2到36之間),表示被解析的值的進制,返回該值對應的十進制數(shù)。默認情況下,parseInt的第二個參數(shù)為10,即默認是十進制轉(zhuǎn)十進制。
        parseInt('1000', 10)    // 1000  以十進制解讀(默認)
        parseInt('1000', 2)     // 8    以二進制解讀
        parseInt('1000', 6)     // 216   以六進制解讀
        parseInt('1000', 8)     // 512   以八進制解讀
        parseInt('10', 37) // NaN   進制超出范圍,就返回 NaN
        parseInt('10', 1) // NaN  進制超出范圍,就返回 NaN
        parseInt('10', 0) // 10
        parseInt('10', null) // 10
        parseInt('10', undefined) // 10  第二個參數(shù)是0、null、undefined 則直接忽略
      
    1. parseFloat()
    • parseFloat 用于將一個字符串轉(zhuǎn)為浮點數(shù)
          parseFloat('3.14')         // 3.14  浮點數(shù)轉(zhuǎn)浮點數(shù)
          parseFloat('314e-2')       // 3.14  
          parseFloat('0.0314E+2')    // 3.14  如果字符串符合科學計數(shù)法,則進行相應轉(zhuǎn)換
          parseFloat ('3.14abc')     // 3.14  如果字符串包含不能轉(zhuǎn)換為浮點數(shù)的字符,則不再往后轉(zhuǎn)換,返回已經(jīng)轉(zhuǎn)好的部分。
          parseFloat ('    3.14')    // 3.14
          parseFloat ('00003.14')    // 3.14  parseFloat方法會自動過濾字符串前面的空格
      
    • 如果參數(shù)不是字符串,或者字符串的第一個字符不能轉(zhuǎn)換為浮點數(shù),則返回NaN。
        parseFloat([])     // NaN  空數(shù)組返回 NaN
        parseFloat('FF2')  // NaN  第一個字符不能轉(zhuǎn)化浮點數(shù)
        parseFloat('')     // NaN  空字符串轉(zhuǎn)化為 NaN
      
    • parseFloat () 和 Number () 的區(qū)別
        parseFloat(true)       // NaN
        Number(true)           // 1
      
        parseFloat(null)       // NaN
        Number(null)           // 0
      
        parseFloat('')         // NaN
        Number('')             // 0
      
        parseFloat('123.45#')  // 123.45
        Number('123.45#')      // NaN
      
  • 區(qū)別(1):parseFloat()轉(zhuǎn)換時,第一個小數(shù)點有效,小數(shù)點對parseInt()無效

        parseInt(23.34.42)//23
        parseFloat(23.34.42)//23.34
    
  • 區(qū)別(2):parseFloat()始終會忽略前導的0

    parseFloat()可以識別前面討論過的所有浮點數(shù)值格式,也包括十進制整數(shù)格式。但十六進制格式的字符串則始終會被轉(zhuǎn)換成0。由于parseFloat()直解析十進制值,因此它沒有用第二個參數(shù)指定基數(shù)的用法。最后還要注意一點,如果字符串包含的是一個可解析為整數(shù)的數(shù)(沒有小數(shù)點,或者小數(shù)點后都是0),parseFloat()會返回整數(shù)。

    parseFloat("1234blue") //1234  
    parseFloat("0xA") //0
    parseFloat("22.5") //22.5
    parseFloat(22.34.5) //22.34
    parseFloat("0908.5") //908.5
    parseFloat("3.125e7") //31250000
    parseFloat("4.0000") //4

6.==與===有什么區(qū)別

  • == JavaScript會幫助我們作類型轉(zhuǎn)換,然后再比較
  • === 全等,嚴格意義上的相等,不僅比較值,而且還比較值的類型,只需要注意NaN不等

7.break與continue有什么區(qū)別

  • break結(jié)束整個循環(huán)體,continue結(jié)束本次循環(huán)

8.void 0 和 undefined在使用場景上有什么區(qū)別

  • undefined
    • 變量聲明后未賦值,則變量會自動賦值為undefined
    • 沒有返回值的函數(shù),默認返回undefined;
    • 調(diào)用函數(shù)時,應該提供的參數(shù)沒有提供,該參數(shù)等于undefined。
    • 對象沒有賦值的屬性,該屬性的值為undefined。
  • void運算符
    • void 運算符后面接一個表達式,無論表達式的內(nèi)容是什么,只要跟在void 之后都會被調(diào)用執(zhí)行,執(zhí)行完畢之后void操作符返回undefined;

    • 使用 void 運算符有三種用處:

      • 生成 undefined,既減少了在原形鏈上查找 window.undefined 的時間,也避免了誤用被修改過的 undefined。
      • 讓函數(shù)立即執(zhí)行
      • 充當 javascript: 協(xié)議的 URI
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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