美文网首页Web 前端开发
JavaScript(三)数据类型的判断

JavaScript(三)数据类型的判断

作者: 范小饭_ | 来源:发表于2020-01-12 16:04 被阅读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方法被调用时,是会执行下面的操作步骤的:

  • 1、如果this的值为undefined,则返回"[object Undefined]".
  • 2、如果this的值为null,则返回"[object Null]".
  • 3、让O成为调用ToObject(this)的结果.
  • 4、让class成为O的内部属性[[Class]]的值.
  • 5、最后返回由 "[object "和 class 和 "]" 三个部分组成的字符串.
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:

  • 可以是标准类型(Null 除外)
  • 不可识别具体的对象类型(Function 除外)

Object.prototype.toString:

  • 可识别标准类型及内置对象类型(例如,Object, Date, Array)
  • 不能识别自定义对象类型

constructor:

  • 可以识别标准类型(Undefined/Null 除外)
  • 可识别内置对象类型
  • 可识别自定义对象类型

instanceof:

  • 不可判别原始类型
  • 可判别内置对象类型
  • 可判别自定义对象类型

相关文章

网友评论

    本文标题:JavaScript(三)数据类型的判断

    本文链接:https://www.haomeiwen.com/subject/rxiknctx.html