- 基本类型有6种,分别是undefined,null,bool,string,number,symbol(ES6新增)
- 虽然 typeof null 返回的值是 object,但是null不是对象,而是基本数据类型的一种。
- 基本数据类型存储在栈内存,存储的是值。
- 复杂数据类型的值存储在堆内存,地址(指向堆中的值)存储在栈内存。当我们把对象赋值给另外一个变量的时候,复制的是地址,指向同一块内存空间,当其中一个对象改变时,另一个对象也会变化。
/**
* isComplex判断是否是复杂数据类型,如果是返回true,否则返回false
* @param {*} data 需要被判断类型的数据
*/
function isComplex(data) {
if (data && (typeof data === 'object' || typeof data === 'function')) {
return true;
}
return false;
}
封装一个获取变量准确类型的函数
- 首先 typeof 能够正确的判断基本数据类型,但是除了 null, typeof null输出的是对象。
- 但是对象来说,typeof 不能正确的判断其类型, typeof 一个函数可以输出 'function',而除此之外,输出的全是 object,这种情况下,我们无法准确的知道对象的类型。
所以封装了一个获取变量准确类型的函数
function gettype(obj) {
var type = typeof obj;
if (type !== 'object') {
return type;
}
//如果不是object类型的数据,直接用typeof就能判断出来
//如果是object类型数据,准确判断类型必须使用Object.prototype.toString.call(obj)的方式才能判断
return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');
}
使typeof判断类型
console.log(
typeof 123, //"number"
typeof 'dsfsf', //"string"
typeof false, //"boolean"
typeof [1,2,3], //"object"
typeof {a:1,b:2,c:3}, //"object"
typeof function(){console.log('aaa');}, //"function"
typeof undefined, //"undefined"
typeof null, //"object"
typeof new Date(), //"object"
typeof /^[a-zA-Z]{5,20}$/, //"object"
typeof new Error() //"object"
);
null 与 undefined的区别
null 是 javascript 的关键字,表示一个特殊值,常用来描述"空值",typeof 运算返回"object",所以可以将 null 认为是一个特殊的对象值,含义是"非对象"。
undefined 是预定义的全局变量,他的值就是"未定义", typeof 运算返回 "undefined"