【基礎篇】零碎時間整理JS

數據類型

基本數據類型

  • Undefined
  • Null
  • Boolean
  • Number
  • String

引用數據類型

  • Object(引用數據類型)
    • Date
    • Array
    • Function
    • RegExp

特殊數據類型 (ES6 添加的數據類型)

  • Symbol

Undefined前端

在將變量聲明但未對其進行初始化時,這個變量的值就是undefinedgit

Nullgithub

從邏輯上看,null表示一個空對象指針,這也解釋了 typeof null 爲Object 的緣由
若是變量未來準備保存對象,最好先將變量保存爲Nullbash

Boolean函數

只有兩個值true和false,雖然只有兩個值可是全部類型的值都有與這兩個Boolean等價的值工具

數據類型 轉化爲true的值 轉化爲false的值
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 非零數值 零和NaN
Object 任何對象 null
Undefined undefined

Number學習

  • 整數
  • 浮點數
  • NaN
    NaN是一個特殊是數值,用來表示一個原本要返回數值的操做數未返回數值的狀況(表明計算出錯了,但未拋出異常以NaN顯示)
    特色
  • 任何涉及NaN的操做都會返回NaN,這個特色可能會有較多的影響
  • NaN與任何值都不相等

isNaN()函數ui

  • 接受一個參數,判斷這個參數是否‘不是數值’
  • isNaN在接受一個數值後,會先對這個數值進行類型轉換,任何不能轉換爲數值的參事都會致使這個函數返回true
console.log(isNaN(NaN))   //true
console.log(isNaN(10))   //false
console.log(isNaN('10'))   //false
console.log(isNaN('string'))   //true
console.log(isNaN(true))   //false
複製代碼

數值轉換 es5

  • Number() 將任何數據轉換爲數值
  • parseInt() 將字符串轉換爲整數值
  • parseFloat() 將字符串轉換爲浮點數值,只轉換十進制的數值
Number(true)     // 1
Number(false)     // 0
Number(null)     // 0
Number(undefined)     // NaN
Number('')     // 0
Number('123')     // 123
複製代碼

Number()函數在轉換字符串的時候存在不合理狀況,因此在實際開發中用到的基本是parseInt()函數spa

String

  • 字符串不可改變,也就是說字符串一旦建立就不可改變,要改變這個字符串就要先銷燬原來的字符串,而後用一個新的字符串填充該變量
  • 字符串轉換方法toString(),可是null和undefined類型沒有這個方法
  • 轉型函數String(),
String(null)  // 'null'
String(undefined)  // 'undefined'
複製代碼

Object類存在較多內容,後面會單獨抽出一章來寫,敬請期待

類型檢測

  • typeof
  • instanceof
  • Object.prototype.toString

typeof

typeof 是肯定一個變量是String、Boolean、Number和Undefined的最佳工具

typeof('1') // 'string'
typeof(1) // 'number'
typeof(true) // 'boolean'
typeof(undefined) // 'undefined'
typeof(null) // 'object'
typeof(function(){}) // 'function'
typeof(new Object())  // 'object'
typeof([])  // 'object'
複製代碼

typeof 只能檢測出基本數據類型,引用數據類型檢測不出來。 typeof(null) == 'object' 能夠理解爲null是一個未被賦值的空對象,因此返回object(實際上這個是js的一個bug,連接

instanceof

function Foo(){
    ....
}
var f = new Foo();

f instanceof Foo  // true
複製代碼

instanceof操做符左邊是一個對象,右邊是一個函數,instanceof所作的事情是,在f的整條原型鏈【prototype】中是否有指向Foo.prototype的對象

instanceof函數的簡單實現

! function Foo(){
    console.log('333333333')
}
var f = new Foo();
// f instanceof Foo 

function my_instanceof(leftObject, rightFunction){
    let leftObjectPrototype = leftObject.__proto__
    while(true){
        if(leftObjectPrototype === rightFunction.prototype){
            return true
        }
        if(leftObjectPrototype === null){
            return true
        }
        leftObjectPrototype = leftObjectPrototype.__proto__
    }
}
console.log(my_instanceof(f, Foo)) 
複製代碼

原型鏈的關係圖(後期會單開一章專門寫原型鏈)

Object.prototype.toString

es5規範說明js對象中存在[[class]]內部屬性,能夠表示類型屬性且在類型建立時已經規定好且不能改變的,Object.prototype.toString要作的就是拿到這個屬性值

Object.prototype.toString.call(null)    //'[object Null]'  
Object.prototype.toString.call(undefined)    //'[object Undefined]'
Object.prototype.toString.call(1)    //'[object Number]'
Object.prototype.toString.call(function(){})    //'[object Function]'
Object.prototype.toString.call()    //'[object Object]'
Object.prototype.toString.call('abc')    //'[object String]'
Object.prototype.toString.call(true)    //'[object Boolean]' 
Object.prototype.toString.call([])    //'[object Array]'

複製代碼

前端新手,從頭梳理一下js的基礎知識,文章中若是有不對的地方請各位大佬不吝賜教,也能夠在個人github上看,歡迎你們start哦!你們的鼓勵是不斷學習進步的動力,謝謝你們!!!

相關文章
相關標籤/搜索