JS中如何区分变量是数组还是对象

这篇具有很好参考价值的文章主要介绍了JS中如何区分变量是数组还是对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

总结: 

这里提供三种方法:

var arr=[]
var arr2={}

1、constructor:
    数组的constructor是function Array(){};
    对象的constructor是function Object(){}

2、instanceof:
    数组 instanceof Array:为true;
    对象 instanceof Array: 为false;

3、Object.prototype.toString.call([数组]) 返回的字符串可以判断是否是数组
    //正常使用toString 方法是 obj.toString;toString方法里面的this,谁调用的就是谁

    Object.prototype.toString=function (){
        //识别 this
        //返回相应的结果
    }
    obj.toString();
    //obj.toString();这里obj调用的this指向的就是obj,所以想要改变this指向就可以使用call函数

JS中如何区分变量是数组还是对象,前端,javascript,前端,typescript

 详解:

先了解一些概念:

对象的查询属性的两种方法:

var obj = {
    name: '张三',
    age: 18,
    sex: 'man',
    testName1: '1111',
    testName2: '22222',
    testName3: '333333'
}
1:obj.name
其实第一种和第二种是一样的,只不过第一种在其内部做了隐式转换;

obj.name----->在内部做了obj['name']的操作

所以也就是第一中的速度会比第二种方法更慢
2:obj['name']
对象名加[], 然后加属性名字的字符串形式:obj['age'];

使用字符串的形式可以进行字符串拼接,更加灵活;obj['testName'+num],根据num的值;可以得到不同的值

如果是变量则不需要加引号:obj[param], param是变量可以是name,也可以是age

对象的枚举:

对象枚举共有四个重要的方法

1、for in 循环遍历
2、hasOwnProperty
3、in   
4、instanceof
for in 用法
var obj = {
    name: 'wq',
    age: 12,
    sex: 'man'
}

1、
for (const objKey in obj) {
    console.log(objKey)
}  
//打印的是obj的属性名

2、
for (const objKey in obj) {
    console.log(obj.objKey)
} 
//打印的全部是undefined;为什么呢
//上面说了obj.objKey相当于内部隐式的使用了obj['objKey']去获取;
//obj里面没有objKey这个属性所有打印的全部是undefined;所以不能使用这种方式

3、
for (const objKey in obj) {
console.log(obj[objKey])
} 
//这样才能打印出属性的值,这里objKey相当于一个变量
hasOwnProperty用法
var obj = {
    name: 'wq',
    age: 12,
    sex: 'man',
    __proto__:{
        last:'a'
    }
}

Object.prototype.abc=123;
for (const objKey in obj) {
    console.log(obj[objKey])
}

打印结果:JS中如何区分变量是数组还是对象,前端,javascript,前端,typescript

         你会发现打印出来的东西里面既然会有 原型上的属性,本来这个原型上的属性你是不想打印的,结果有,那该怎么办?

        这里就可以使用hasOwnProperty方法,这方法可以判断该属性是你自己的还是原型上的;返回值是Boolean值。可以使用以下代码:

这里就可以使用hasOwnProperty方法,这方法可以判断该属性是你自己的还是原型上的;返回值是Boolean值
for (const objKey in obj) {
    if(obj.hasOwnProperty(objKey)){
        console.log(obj[objKey])
    }
}

JS中如何区分变量是数组还是对象,前端,javascript,前端,typescript

instanceof用法:A instanceof B

官方解释: A对象 是不是 B构造函数构造出来的
自己理解:看A对象的原型链上 有没有B的原型,既A是不是B的孩子,或者孙子或者重孙
 

function Person() {}
var obj={}
var person = new Person();
//person instanceof Person   person是不是由Person构造出来的

JS中如何区分变量是数组还是对象,前端,javascript,前端,typescript文章来源地址https://www.toymoban.com/news/detail-663338.html

到了这里,关于JS中如何区分变量是数组还是对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包