“類型” 對語言引擎和開發(fā)人員來說弄贿,類型是值的內(nèi)部特征沟蔑,它定義了值的行為湿诊,以使其區(qū)別于其他值
Javascript 有七種內(nèi)置類型
- 空值(null)
- 未定義(undefined)
- 布爾值(boolean)
- 數(shù)字(number)
- 字符串(string)
- 對象(object)
- 符號(symbol,ES6新增)
除對象外其他統(tǒng)稱為“基本類型”
使用typeof運算符來查看值的類型
typeof undefined // 'undefined'
typeof Symbol //'symbol'
注意點:
typeof null === 'object'; // true
需要使用復(fù)合條件檢測null值的類型
(!a&&typeof a ==='object'); // true
后者是用來排除其他類型!a為false的情況,如undefined, true等的情況typeof function a(){/*..*/} === 'function' // true
函數(shù)實際上是object的一個子類型————“可調(diào)用對象”瘦材,它有一個內(nèi)部屬性[[Call]]厅须,該屬性使其可以被調(diào)用,因此函數(shù)可以像對象一樣擁有屬性typeof [1,2,3] === 'object' // true
數(shù)組也是object的一個“子類型”,也屬于對象食棕,數(shù)組的元素按數(shù)字順序來進行索引(而非普通對象那樣通過字符串鍵值),其length屬性是元素的個數(shù)對變量使用typeof操作時朗和,得到的結(jié)果并不是該變量的類型,而是該變量持有的值的類型(字符串表示)簿晓,因為Javascript中的變量沒有類型
Javascript中的變量是沒有任何類型的眶拉,只有值才有,變量可以隨時持有任何類型的值,即Javascript不做“類型強制”抢蚀,也就是說镀层,語言引擎不要求變量總是持有與其初始值同類型的值
undefined和undeclared
變量在未持有值的時候為undefined,此時typeof返回'undefined'
var a ;
typeof a ; // 'undefined'
已在作用域中聲明但還沒有賦值的變量皿曲,是undefined的,相反唱逢,還沒有在作用域中聲明過的變量,是undeclared的
var a ;
a;//undefined
b;//ReferenceError: b is not defined
typeof a ;// 'undefined'
typeof b ;// 'undefined'
什么gui !typeof undeclared是一種安全防范機制屋休,在某些情況下是個不錯的辦法
(1)在程序中使用全局變量DEBUG作為“調(diào)試模式”的開關(guān)
(2)在別人在他們的程序或模塊中復(fù)制粘貼你的代碼的時候坞古,檢查你用到的變量是否已經(jīng)在宿主程序中定義過