前端 —— JavaScript 进阶 29 --js中的typeof、 instanceof、Object.prototype.toString

本文探讨JavaScript中用于判断变量类型的typeof、instanceof运算符及其局限性。typeof主要返回'number'、'string'、'boolean'、'object'、'function'和'undefined',但在对象、数组和null上统一返回'object'。instanceof则检查对象的原型链中是否存在指定构造函数的prototype。为了更精确地判断数据类型,可以使用Object.prototype.toString方法,它能准确识别出对象的类型。
摘要由CSDN通过智能技术生成

JavaScript 中 typeof instanceof 经常用来判断一个变量是什么类型的,或者判断是否为空它们二者之间还是有区别的:

 typeof

    typeof 是一个一元运算符,放在运算数(表达式)之前,运算数可以是任意数据类型。

    它返回值是一个字符串,一个用来表示 运算数(表达式)的 数据类型 的 字符串。该字符串 说明运算数的 类型。

 typeof 一般只能返回如下几个结果

        "number"、"string"、"boolean"、"object"、"function" 和 "undefined"。

 

运算数为数字         typeof(x) = "number" 

     字符串               typeof(x) = "string" 

     布尔值               typeof(x) = "boolean" 

对象,数组和null      typeof(x) = "object" 

      函数                  typeof(x) = "function"

 

实例:】来看个例子 在控制台直接测试结果


console.log(typeof(1)); //number

console.log(typeof("123")); //string

var obj = new Object();
console.log(typeof(obj)); //object

var obj02 = {};
console.log(typeof(obj02)); //object

var arr = [];
console.log(typeof(arr)); //object

console.log(typeof(null)); //object

function fn(){}
console.log(typeof(fn)); //function

console.log(typeof(undefined)); //undefined

通过上面的例子可以看到 ,在 JavaScript 中,判断一个变量的类型会用 typeof 运算符,但是当对象是 object、array、null 这些引用类型存储的数据时,一律返回 Object 对象类型。要想知道是到底是哪个数据类型怎么办呢?这就要用到 instanceof 运算符了

instanceof

instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

返回值只有 true 和 false

语法:

       object  instanceof  construction 

参数说明:(和语法上下对照看)

    某个对象    是否是         某个构造函数

          A          是否是           B数据类型( Array Object Function )

instanceof  运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上

【 实例:】

var obj = {}
 console.log(obj instanceof Object); // true

var arr = [];
 console.log(arr instanceof Object);// true

实例 :


var obj = {}
console.log(obj instanceof Object);//true

var arr = [];
console.log(arr instanceof Object);//true   array是Objec的子类 (array也是Object)
console.log(arr instanceof Array);//true  

function test(){};
var a = new test();
console.log(a instanceof test);//true

function test02(){};
var a = new test02();
console.log(a instanceof test02);//true  变量 a 是 test02的实例 a存在于 test02.prototype的原型链上
console.log(a === test02); //false 变量 a 是实例对象 test02是函数 ===是绝对相等,数值和类型必须都相同才是true
console.log(a instanceof Function); //false
console.log(typeof(a));//object

总结的看下


console.log(object instanceof Object);//true
console.log(function instanceof Function);//true
console.log(function instanceof Object);//true
console.log(foo instanceof Function);//true

console.log(number instanceof Number);//false
console.log(string instanceof String);//false 这两个基本数据类型使用typeof来判断 就是true了

console.log(foo instanceof Foo);//false



若要精准的判断是哪种数据类型呢? JavaScript 中一切都是对象,任何都不例外。通过Object.prototype.toString方法,就能精准判断某个对象值属于哪种类型。直接看实例:


 console.log(Object.prototype.toString.call(123))//[object Number]

 console.log(Object.prototype.toString.call('123'));//[object String]

 var str = 'abc';
 console.log(Object.prototype.toString.call(str));//[object String]

 var arr02 = [];
 console.log(Object.prototype.toString.call(arr02));//[object Array]

 var obj03 = {}
 console.log(Object.prototype.toString.call(obj03));//[object Object]

 console.log(Object.prototype.toString.call(function(){}));//[object Function]

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

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

Object.prototype.toString 这个方法里面涉及原型和原型链的知识点,会在后面总结出来的!

 

我的文章都是学习过程中的总结,如果发现错误,欢迎留言指出,我及时更正。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值