距开课0天0时0分-9623560秒
PHP中文网2017-06-30 09:59:14 0 8 364
[JavaScript讨论组]举报回复话题 ↕
在学习正则表达式的时候,发现exec方法返回了这样一个数组,请问这是什么数组?
我在浏览器控制台输入了这个数组,发现报错了
8
0
分享
巴扎黑 2017-06-30 10:01:148楼
我typeof 看它,说是一个对象,不过typeof检查数据也会告诉你是对象。
我又用 Array.isArray 检查,返回true。
所以我看了一下 MDN 上面关于这个函数的解释:
https://developer.mozilla.org...
它说返回值是一个数组。
我看了一下 ECMA 5.1 上面数组相关描述也没有找到
http://ecma-international.org...
所以我也在这里等大神来解答 =。=
----------------- 强行解释的分割线 -----------------
数组的实例也是一个对象,所以确实可以给它添加属性并赋值。
但是要注意,不是复合类型的变量,是没有办法给它们的实例添加属性并赋值的。因为做了也没有用。
我记混了,所以以为没有办法给数值的实例添加属性赋值。。。。。
赞 +0添加回复
怪我咯 2017-06-30 10:01:147楼
let a = ["Box"]; a.index = 10; a.input = "This is a Box! That is a Box!";
过去多啦不再A梦 2017-06-30 10:01:146楼
正则的exec返回值虽然说是数组, 但是有其他属性, 具体可以看文档文档, 多翻翻犀牛书或者高程吧
大家讲道理 2017-06-30 10:01:145楼
var a = []; a[0] = 'tets' a[1] = 'fasfasf' a.index = '对象属性'
输出 a 得到,在JavaScript里面,数组也是一个对象
a
["tets", "fasfasf", index: "哈哈哈"]
怪我咯 2017-06-30 10:01:144楼
我的理解是数组的成员和数组对象上的成员。]
淡淡烟草味 2017-06-30 10:01:143楼
var a={0:"Box"}; a.index=10; a.input="This is a Box! That is a Box!"; var b=["Box"]; b.index=10; b.input="This is a Box! That is a Box!" console.log(a,b);
其实这里最让人迷惑的是,["Box"].index=10为什么可以设置成功?先看打印结果:
为了更清晰地说明,我们将其展开,观察其原型链。对象a的原型链:数组b的原型链:由上图可以看出,数组从原型链上继承了Obejct对象类型的方法。当["box"]在Array(0)中找不到对应方法时,会沿着原型链向下,到Object中去寻找方法。所以理论上来说,数组类型也可以认为是对象类型的一种。
天蓬老师 2017-06-30 10:01:142楼
var a = ['box']; a.index = 'dsfsaf'; a.input = 'gfhdsgsadreqw'; console.log(a)
迷茫 2017-06-30 10:01:141楼
第一个问题:就是普通的数组
第二个问题:语法错误
[] 定义数组
巴扎黑 2017-06-30 10:01:148楼
我typeof 看它,说是一个对象,不过typeof检查数据也会告诉你是对象。
我又用 Array.isArray 检查,返回true。
所以我看了一下 MDN 上面关于这个函数的解释:
https://developer.mozilla.org...
它说返回值是一个数组。
我看了一下 ECMA 5.1 上面数组相关描述也没有找到
http://ecma-international.org...
所以我也在这里等大神来解答 =。=
----------------- 强行解释的分割线 -----------------
数组的实例也是一个对象,所以确实可以给它添加属性并赋值。
但是要注意,不是复合类型的变量,是没有办法给它们的实例添加属性并赋值的。因为做了也没有用。
我记混了,所以以为没有办法给数值的实例添加属性赋值。。。。。
赞 +0添加回复
怪我咯 2017-06-30 10:01:147楼
赞 +0添加回复
过去多啦不再A梦 2017-06-30 10:01:146楼
正则的exec返回值虽然说是数组, 但是有其他属性, 具体可以看文档文档, 多翻翻犀牛书或者高程吧
赞 +0添加回复
大家讲道理 2017-06-30 10:01:145楼
输出
a
得到,在JavaScript里面,数组也是一个对象 赞 +0添加回复
怪我咯 2017-06-30 10:01:144楼
我的理解是数组的成员和数组对象上的成员。
]
赞 +0添加回复
淡淡烟草味 2017-06-30 10:01:143楼
其实这里最让人迷惑的是,["Box"].index=10为什么可以设置成功?
![](/img/bVPY1X?w=454&h=62)
先看打印结果:
为了更清晰地说明,我们将其展开,观察其原型链。
![](http://img.php.cn/upload/image/000/000/000/542868eedb2e84984a45a86a234fa6ac-1.png)
![](http://img.php.cn/upload/image/000/000/000/78cf0f5e022031d8df2a238a5d3d6620-2.png)
对象a的原型链:
数组b的原型链:
由上图可以看出,数组从原型链上继承了Obejct对象类型的方法。
当["box"]在Array(0)中找不到对应方法时,会沿着原型链向下,到Object中去寻找方法。
所以理论上来说,数组类型也可以认为是对象类型的一种。
赞 +0添加回复
天蓬老师 2017-06-30 10:01:142楼
赞 +0添加回复
迷茫 2017-06-30 10:01:141楼
第一个问题:就是普通的数组
第二个问题:语法错误
赞 +0添加回复