一: 检测值类型 基本类型:(Undefined、Null、Boolean、Number 和 String)
javascript 之所以被称为一门弱类型的语言,是因为其为变量赋值时会自动判断类型并进行转换。那么我们在编写函数的时候,如何判断一个变量究竟是什么类型的呢?这个时候我们就可以用到 typeof 操作符。我们先分析以下这段代码输出的值:
- var a ="123";
- var b = 123;
- var c = true;
- var d;
- var e = null;
- var f = new Object();
- console.log("a的数据类型是"+typeof a);
- console.log("b的数据类型是"+typeof b);
- console.log("c的数据类型是"+typeof c);
- console.log("d的数据类型是"+typeof d);
- console.log("e的数据类型是"+typeof e);
- console.log("f的数据类型是"+typeof f);
打开浏览器的 f12,我们可以看到输出了以下这些内容:
从输出的内容中我们可以发现,变量 a,b,c,d,f 的类型很好理解,可为什么变量 e 的值为 null, 输出的数据类型却是 object 呢?我们可以参考参考 4.3.11 节中对 null 值的描述:
二:检测引用类型(Object Function array)
引用类型值是指可能由多个值构成的对象。引用类型值保存在内存中,而 JS 是不能直接访问内存的,所以对于引用类型,操作的不是实际的对象而是对象的引用。先看一下代码理解到底什么是引用类型:
- function myArray(){
- var a = ["林冲"];
- var b = a;
- console.log(a[0]);//林冲
- b[0] = '林二狗';
- console.log(a[0]); //林二狗
- }
- myArray();
从以上代码的输出结果可以看出,修改 b[0] 的值也改变了 a[0] 的值,这是因为引用类型复制和简单类型不同,复制完成后新值和之前的值都是引用的同一个对象,所以之前的值改变,也会影响复制后的值。如图:
以上的例子我们了解了什么是引用类型,但是根据规定所有引用类型的值都是 Object 的实例,那么我们是要 typeof 操作符输出的值肯定是 object,但是引用类型值是指可能由多个值构成的对象,那我们怎样才能知道这个引用类型究竟是什么类型的对象呢?这个时候我们就要用到 instanceof 操作符,其语法如下所示:
我们在上面的代码作出以下修改:
- function myArray(){
- var a = ["林冲"];
- var b = a;
- console.log(a[0]);
- console.log(typeof a);
- console.log(a instanceof Function); //false
- console.log(a instanceof Array); //true
- b[0] = '林二狗';
- console.log(a[0]);
- console.log(b instanceof Array); //true
- }
- myArray();
从上面的代码可以看出,检测引用类型 a 是否为 Function 的时候会返回 false,二是否为数组则会返回 true, 引用类型 b 也是同理。这里要注意的是:使用 instanceof 操作符检测基本类型会一直返回 false,因为基本类型值不是对象。
来源: http://www.cnblogs.com/momozjm/p/6644849.html