对于 JavaScript 类型,可以简单地概括为:相对于强类型语言来说,它是弱(松散)类型的语言;有原始类型和引用类型,他们是区别是一个有固定空间存在于栈内存中,一个没有固定空间保存在堆内存中并且在栈内存中保存了一个指向实现位置的指针。
一、基本类型与引用类型
基本类型:Undefined / Null / Boolean / Number / String
引用类型:Object / Array / Function / Date / RegExp …
二、JavaScript 类型的判断
在 JavaScript 有两个 operator 可以用以判断类型。他们是 typeof 和 instanceof。
typeof运算符的返回值:
-
undefined,如果变量是Undefined类型
-
boolean,如果变量是Boolean类型
-
number,如果变量是Number类型
-
string,如果变量是String类型
-
object,如果变量是一种引用类型或Null类型
typeof对于引用类型的判断不够精确,可用instanceof来做进一步判断,但也有时候判断不了。在jQuery等类库中对类型判断做了封装,让你可以方便地检测类型。
要检测具体的类型值,事实上也不麻烦,因为那句「在 JavaScript 中,一切都是对象」
/* 检测对象类型
* @param: obj {JavaScript Object}
* @param: type {String} 以大写开头的 JS 类型名
* @return: {Boolean}
*/
function is(obj,type) {
return Object.prototype.toString.call(obj).slice(8,-1)===type;
}
这样的话,我们就可以利用is这个函数来帮我们搞定类型判断了,并且这个简单的函数有很好的兼容性,可以用到你的项目中去。情况如:
is('sofish','String')// true
is(null,'Null')// true
is(newSet(),'Set')// true