当我们在使用JavaScript编写程序时,需要经常判断变量的数据类型,以便执行不同的操作。本文将介绍JS判断数据类型的几种方法。
方法一:typeof操作符
typeof操作符用于判断JS数据类型,返回值为一个字符串。
它可以判断的数据类型有:“undefined”、“boolean”、“number”、“string”、“object”(注意:null也是被typeof判断为object类型)和“function”等。
下面是使用typeof操作符进行判断的示例代码:
var str = 'hello world';
console.log(typeof str); //输出string
var arr = [1,2,3];
console.log(typeof arr); //输出object
var num = 100;
console.log(typeof num); //输出number
var obj = {name: '张三', age: 18};
console.log(typeof obj); //输出object
var fun = function(){console.log('我是函数')};
console.log(typeof fun); //输出function
需要注意的是,当判断null类型时,typeof操作符返回的类型为object,因为null被视为一个空对象指针。
方法二:instanceof操作符
instanceof操作符用于检测某个对象是否是另一个对象的实例,返回值为一个布尔类型。
它可以用来判断自定义对象的数据类型。
下面是使用instanceof操作符进行判断的示例代码:
var person = {name: '张三'};
console.log(person instanceof Object); //输出true
function Person(){};
var p1 = new Person();
console.log(p1 instanceof Person); //输出true
上述代码中,第一个例子中,person是一个普通的对象,它也是Object的实例,因此输出true。
第二个例子中,Person是一个自定义对象,p1是Person的一个实例,因此输出true。
需要注意的是,当检测基本数据类型(如字符串、数字、布尔等)时,instanceof总是返回false。
方法三:Object.prototype.toString
Object.prototype.toString方法,它与数据类型的constructor属性一样,都返回对象的构造函数名。不同之处在于,toString方法可以返回任意值的数据类型,而constructor属性只能返回自己的构造函数名。
下面是使用toString()方法进行判断的示例代码:
var str = 'hello world';
console.log(Object.prototype.toString.call(str)); //输出[object String]
var arr = [1,2,3];
console.log(Object.prototype.toString.call(arr)); //输出[object Array]
var num = 100;
console.log(Object.prototype.toString.call(num)); //输出[object Number]
var obj = {name: '张三', age: 18};
console.log(Object.prototype.toString.call(obj)); //输出[object Object]
var fun = function(){console.log('我是函数')};
console.log(Object.prototype.toString.call(fun)); //输出[object Function]
上述代码中,通过调用Object.prototype.toString方法,获取变量的类型。注意,在方法调用时需要使用call来改变toString方法的this指向,把它指向需要判断的变量。
总结
以上是JS判断数据类型的几种方法。对于简单的基本数据类型和null或undefined类型,使用typeof方法非常方便快捷。对于复杂的自定义对象,可以使用instanceof操作符来进行判断。而使用Object.prototype.toString方法时,可以判断任何类型的变量,但需要注意方法调用时的this指向。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js 判断数据类型的几种方法 - Python技术站