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
String(null) // 'null'
String(undefined) // 'undefined'
複製代碼
Object類存在較多內容,後面會單獨抽出一章來寫,敬請期待
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哦!你們的鼓勵是不斷學習進步的動力,謝謝你們!!!