美文网首页
js类型判断

js类型判断

作者: 为君梳作半面妆 | 来源:发表于2017-10-15 12:31 被阅读0次

typeof

console.log(typeof('yayu'))//string

console.log(typeof 'yayu')//string

typeof 是一元操作符,放在其单个操作数的前面,操作数可以是任意类型。返回值为表示操作数类型的一个字符串。

那我们都知道,在 ES6 前,JavaScript 共六种数据类型,分别是:

Undefined、Null、Boolean、Number、String、Object

然而当我们使用 typeof 对这些数据类型的值进行操作的时候,返回的结果却不是一一对应,分别是:

undefined、object、boolean、number、string、object

注意以上都是小写的字符串。Null 和 Object 类型都返回了 object 字符串。

尽管不能一一对应,但是 typeof 却能检测出函数类型:

functiona() {}console.log(typeof a);//function

所以 typeof 能检测出六种类型的值,但是,除此之外 Object 下还有很多细分的类型呐,如 Array、Function、Date、RegExp、Error 等。

如果用 typeof 去检测这些类型,举个例子:

vardate=newDate();varerror=newError();console.log(typeofdate);//objectconsole.log(typeoferror);//object

返回的都是 object 呐,这可怎么区分~ 所以有没有更好的方法呢?

Object.prototype.toString();

当 toString 方法被调用的时候,下面的步骤会被执行:

如果 this 值是 undefined,就返回 [object Undefined]

如果 this 的值是 null,就返回 [object Null]

让 O 成为 ToObject(this) 的结果

让 class 成为 O 的内部属性 [[Class]] 的值

最后返回由 "[object " 和 class 和 "]" 三个部分组成的字符串

通过规范,我们至少知道了调用 Object.prototype.toString 会返回一个由 "[object " 和 class 和 "]" 组成的字符串,而 class 是要判断的对象的内部属性。

让我们写个 demo:

console.log(Object.prototype.toString.call(undefined));//[object undefined]

console.log(Object.prototype.toString.call(null));//[object null]

var  date=new Date();

console.log(Object.prototype.toString.call(date)); //[object Date]

正是因为这种特性,我们可以用 Object.prototype.toString 方法识别出更多类型!

那到底能识别多少种类型呢?

至少 12 种!

var number=1;//[object Number]

var string='123';//[object String]

var boolean=true;//[object Boolean]

var und=undefined;//[object Undefined]

var nul=null;//[object Null]

var obj={a:1}//[object Object]

var array=[1,2,3];//[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]

function checkType() {

for(vari=0; i<arguments.length;i++){

  console.log(Object.prototype.toString.call(arguments[i]))

}

}

checkType(number,string,boolean,und,nul,obj,array,date,error,reg,func)

除了以上 11 种之外,还有:

console.log(Object.prototype.toString.call(Math));//[object Math]

console.log(Object.prototype.toString.call(JSON));//[object JSON]

除了以上 13 种之外,还有:

functiona() {console.log(Object.prototype.toString.call(arguments));//[object Arguments]}a();

所以我们可以识别至少 14 种类型,当然我们也可以算出来,[[class]] 属性至少有 12 个。

相关文章

网友评论

      本文标题:js类型判断

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