js中typeof和instanceof用法区别

typeof和instanceof判断变量,typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,function(函数),object(NULL,数组,对象),undefined。;例:

alert(typeof(1));//number
alert(typeof("abc"));//string
alert(typeof(true));//boolean
alert(typeof(m));//undefined

如果我们想要判断一个变量是否存在,可以使用typeof:(不能使用if(a) 若a未声明,则报错)

if(typeof a != 'undefined'){
    //变量存在
}

正因为typeof遇到null,数组,对象时都会返回object类型,所以当我们要判断一个对象是否是数组时或者判断某个变量是否是某个对象的实例则要选择使用另一个关键语法instanceof,instanceof返回的是一个布尔值,如:

var a = {};
alert(a instanceof Object);  //true
var b = [];
alert(b instanceof Array);  //true

需要注意的是,instanceof只能用来判断对象和函数,不能用来判断字符串和数字等,如:

var b = '123';
alert(b instanceof String);  //false
alert(typeof b);  //string
var c = new String("123");
alert(c instanceof String);  //true
alert(typeof c);  //object

另外,用instanceof可以判断变量是否为数组有几种方法可以拿来判断:

(1)、constructor属性

这个属性在我们使用js系统或者自己创建的对象的时候,会默认的加上,例如:

var arr = [1,2,3];  //创建一个数组对象
arr.prototype.constructor = Array;  //这一句是系统默认加上的

所以我们就可以这样来判断:

var arr = [1,2,3,1]; 
alert(arr.constructor === Array);   // true

(2)、instanceof

instanceof是检测对象的原型链是否指向构造函数的prototype对象的,所以我们也可以用它来判断:

var arr = [1,2,3]; 
alert(arr instanceof Array);   // true

最后,为了给大家一个结果,现写出一个终极解决方案:

判断数组终极解决方案

var arr = [1,2,3]; 
function isArrayFn(obj){  //封装一个函数
  if (typeof Array.isArray === "function") { 
    return Array.isArray(obj); //浏览器支持则使用isArray()方法
  }else{  //否则使用toString方法
    return Object.prototype.toString.call(obj) === "[object Array]"; 
  } 
} 
alert(isArrayFn(arr));// true


JavaScript中,`instanceof``typeof`是两个常用的操作符,用于检查变量的类型。它们的用法如下: 1. `instanceof`操作符用于检查一个对象是否是某个类的实例。语法如下: ```javascript obj instanceof Class ``` 这里,`obj`是要检查的对象,`Class`是要检查的类。如果`obj`是`Class`的实例或者是其子类的实例,则返回`true`,否则返回`false`。 示例: ```javascript class Person {} const person = new Person(); console.log(person instanceof Person); // true console.log(person instanceof Object); // true,因为所有对象都是Object的实例 ``` 2. `typeof`操作符用于确定一个值的数据类型。语法如下: ```javascript typeof value ``` 这里,`value`是要检查的值。返回值为一个表示数据类型的字符串,可能的取值包括: - `'undefined'`:未定义的变量或属性 - `'boolean'`:布尔值 - `'number'`:数值 - `'string'`:字符串 - `'symbol'`:符号值(ES6新增) - `'function'`:函数 - `'object'`:对象(包括数组、null等) 示例: ```javascript console.log(typeof undefined); // 'undefined' console.log(typeof true); // 'boolean' console.log(typeof 42); // 'number' console.log(typeof 'hello'); // 'string' console.log(typeof Symbol('symbol')); // 'symbol' console.log(typeof function() {}); // 'function' console.log(typeof {}); // 'object' console.log(typeof []); // 'object' console.log(typeof null); // 'object',注意这里的历史遗留问题 ``` 希望以上解释对你有帮助!如果还有其他问题,请继续提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值