JS中的數據類型
1、數據類型
值類型(基本類型):字符串(String)、數字(Number)、布爾(Boolean)、空(Null)、未定義(Undefined)、Symbol、bigint 。
引用數據類型:Object(包括Array,Function、Object類等)。JavaScript中可以說一切皆對象。
區別:前七種原生數據類型的存放在棧中,引用數據類型存放在堆中,它的地址在棧中,一般我們訪問就是它的地址。
console.log(typeof 123); //number console.log(typeof "abc"); //string console.log(typeof true); //boolean console.log(typeof null); //object console.log(typeof undefined); //undefined console.log(typeof [1, 2, 3]); //object console.log(typeof {a:123,b:456}); //object console.log(typeof function a(){return 123}); //function 實際上,在判斷引用類型時,除了function其他的都為object
可參考:http://www.runoob.com/js/js-datatypes.html
1.1、JS中Null與Undefined的區別
區別:
- Undefined類型只有一個值,即undefined。當聲明的變量還未被初始化時,變量的默認值為undefined。undefind 是全局對象的一個屬性,當一個變量沒有被賦值或者一個函數沒有返回值或者某個對象不存在某個屬性卻去訪問或者函數定義了形參但沒有傳遞實參,這時候都是undefined。
- Null類型也只有一個值,即null。null用來表示尚未存在的對象,常用來表示函數企圖返回一個不存在的對象。
var val; val== undefined //輸出 "true" 這段代碼顯示為true,代表 val 的值即為undefined,因為我們沒有初始化它。 null == document.getElementById('notExistElement') // 當想要獲取頁面上一個不存在的DOM節點時,這段代碼顯示為"true",因為我們嘗試獲取一個不存在的對象。
alert(typeof undefined); //output "undefined" alert(typeof null); //output "object"
第一行代碼很容易理解,undefined的類型為Undefined;第二行代碼卻讓人疑惑,為什么null的類型是Object?其實這是JavaScript最初實現的一個錯誤,后來被ECMAScript沿用下來。在今天我們可以解釋為,null即是一個不存在的對象的占位符,但是在實際編碼時還是要注意這一特性。
alert(null == undefined); //output "true"
ECMAScript認為undefined是從null派生出來的,所以把它們定義為相等的。但是,如果在一些情況下,我們一定要區分這兩個值,那應該怎么辦呢?可以使用下面的兩種方法。
alert(null === undefined); //output "false" alert(typeof null == typeof undefined); //output "false"
使用typeof方法在前面已經講過,null與undefined的類型是不一樣的,所以輸出"false"。而===代表絕對等于,在這里null === undefined輸出false。
2、判斷數據類型
2.1、判斷是否為對象
var obj = {a: 123, b: 456} console.log(Object.prototype.toString.call(obj) === '[object Object]'); //true console.log(obj.constructor === Object); //true console.log(obj instanceof Object); //true
2.2、判斷是否為數組
var obj = [1,2] console.log(Array.isArray(obj)); //true console.log(obj instanceof Array); //true console.log(Object.prototype.toString.call(obj) === '[object Array]'); //true console.log(obj.constructor === Array); //true console.log(obj.push != undefined); //true 有兼容性問題
2.3、判斷是否為字符串
var str = 'aaa' console.log(typeof str); //string console.log(str.constructor); //? String() { [native code] } console.log(Object.prototype.toString.call(str)); //[object String] var str2 = new String(); console.log(str2 instanceof String); //true 只有通過new方式聲明一個字符串時,使用instanceof方法才是true

浙公網安備 33010602011771號