javascript深入理解系列(十)——判断基本类型的方法typeof、instanceof以及Object.prototype.toString.call(value)

javascript深入理解系列文章网址
https://www.jianshu.com/p/451eed9094f5

1.typeof(能判断6种类型)

typeof其实就是判断参数是什么类型的实例,就一个参数

typeof 一般只能返回如下几个结果(一共六个):

"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。(这些值都是小写)
(温馨提示:此处要和js的数据类型区别开)
js的简单数据类型:string,number,boolean,null,undefined
js的复杂数据类型:object
运算数为数字 typeof(x) = "number" 

字符串 typeof(x) = "string" 

布尔值 typeof(x) = "boolean" 

特别注意对象,数组和null typeof(x) = "object"(因为null和数组都属于对象) 

函数 typeof(x) = "function" 

2.instanceof

要知道使用typeof判断array,null都会返回"object",所以这个时候可以使用instanceof判断
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。(直白点说就是判断左边的值是否是右边对象的实例)


例如:var a=[1,2];

a instanceof Array则为true

因为console.log(a.__proto__===Array.prototype);为true所以上面为true
其实也就是判定a是Array的实例

3.Object.prototype.toString.call(value)(至少14中类型)

1.判断基本类型:(输出的值是字符串,并且用中括号括起来,左边是object(小写),右边是类型(首字母大写))


Object.prototype.toString.call(null);//”[object Null]”
Object.prototype.toString.call(undefined);//”[object Undefined]”
Object.prototype.toString.call(“abc”);//”[object String]”
Object.prototype.toString.call(123);//”[object Number]”
Object.prototype.toString.call(true);//”[object Boolean]”

2.判断原生引用类型:

函数类型
Function fn(){console.log(“test”);}
Object.prototype.toString.call(fn);//”[object Function]”
日期类型
var date = new Date();
Object.prototype.toString.call(date);//”[object Date]”
数组类型
var arr = [1,2,3];
Object.prototype.toString.call(arr);//”[object Array]”
正则表达式
var reg = /[hbc]at/gi;
Object.prototype.toString.call(arr);//”[object Array]”
自定义类型
function Person(name, age) {
    this.name = name;
    this.age = age;
}
var person = new Person("Rose", 18);
Object.prototype.toString.call(arr); //”[object Object]”
**很明显这种方法不能准确判断person是Person类的实例,而只能用instanceof 操作符来进行判断,如下所示:
console.log(person instanceof Person);//输出结果为true**

3.判断原生JSON对象:

var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON);
console.log(isNativeJSON);//输出结果为”[object JSON]”说明JSON是原生的,否则不是;
注意:Object.prototype.toString()本身是允许被修改的,而我们目前所讨论的关于Object.prototype.toString()这个方法的应用都是假设toString()方法未被修改为前提的。

参考:http://www.zhufengpeixun.cn/JavaScriptmianshiti/2014-02-28/271.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,684评论 0 13
  • Javascript有很多数组的方法,有的人有W3C的API,还可以去MDN上去找,但是我觉得API上说的不全,M...
    顽皮的雪狐七七阅读 4,544评论 0 6
  • JavaScript语言精粹 前言 约定:=> 表示参考相关文章或书籍; JS是JavaScript的缩写。 本书...
    微笑的AK47阅读 683评论 0 3
  • 我的那条鱼,小金鱼,从超市门口的花草铺子里买的,8块一条,买了5条。那个时候很穷,住在村民楼的小单间,它们就被放...
    苏向晚阅读 558评论 0 0
  • 2018年6月11日 星期一 晴 286篇 “你爱你的孩子吗?”很简单的一句话。99%的人都会回答“会!”但...
    我是快乐的老爸阅读 253评论 2 1

友情链接更多精彩内容