Web 前端开发

JavaScript(三)数据类型的判断

2020-01-12  本文已影响0人  范小饭_

一、typeof()

typeof() 用于区分不同类型的原始值,并区分原始值和对象,但是在区分不同类型的对象(包括null)时,是没有用的

typeof 3 // "number"
typeof "abc" // "string"
typeof {} // "object"
typeof true // "boolean"
typeof undefined // "undefined"
typeof function(){} // "function"
typeof null // "object"
var array1 = []
var array2 = new Array();
var date = new Date();
var error = new Error();
console.log(typeof array1); // object
console.log(typeof array2); // object
console.log(typeof date); // object
console.log(typeof error); // object

二、Object.prototype.toString

在toString方法被调用时,是会执行下面的操作步骤的:

function checkTypes() {
    for (var i = 0; i < arguments.length; i++) {
        console.log(Object.prototype.toString.call(arguments[I]))
    }
}

var number = 1;          // [object Number]
var string = '123';      // [object String]
var bool = true;      // [object Boolean]
var unde = undefined;     // [object Undefined]
var nul = null;          // [object Null]
var obj = {}         // [object Object]
var array = [];   // [object Array]
var date = new Date();   // [object Date]
var error = new Error(); // [object Error]
var reg = /a/g;          // [object RegExp]
var func = function a(){}; // [object Function]

// 除此之外,还有
console.log(Object.prototype.toString.call(Math)); // [object Math]
console.log(Object.prototype.toString.call(JSON)); // [object JSON]

function a() {
    console.log(Object.prototype.toString.call(arguments)); // [object Arguments]
}
a()
// 所以我们可以识别至少 14 种类型

三、instanceof

instanceof用来判断一个对象是否是一个类的实例。

var d = new Date()
d instanceof Date // true
d instanceof Object // true  d是Date的一个实例
d instanceof Number // false  所有的对象都是object实例

var a = [1,2,3]
a instanceof Array // true  a是一个数组
a instanceof Object // true 所有的数组都是对象

需要注意的是,所有对象都是Object实例。

但是instanceof不适用于原始类型:字符串,数字,布尔

3 instanceof Number // false
true instanceof Boolean // false
'abc' instanceof String // false

四、constructor

javascript 的所有对象都有一个 constructor 属性,这个属性可以帮我们判断 object 数据类型

//alert(1.constructor); //报错 数字常量无 constructor 属性   
var num = 1;   
console.log(num.constructor == Number); //true   

var str = "luckfine";   
console.log(str.constructor == String); //true   

var obj= null;   
console.log(obj.constructor); //报错,null 没有 constructor 属性   

var none = undefined;   
console.log(obj.constructor); //报错,undefined 没有 constructor 属性 

null 和 undefined 都没有 constructor 属性,所以不能使用constructor判断。

五、练习

如何判断一个对象是不是数组?

如何判断一个对象是不是函数?

总结

typeof:

Object.prototype.toString:

constructor:

instanceof:

上一篇 下一篇

猜你喜欢

热点阅读