这是什么数组?

在学习正则表达式的时候,发现exec方法返回了这样一个数组,请问这是什么数组?

clipboard.png

我在浏览器控制台输入了这个数组,发现报错了

clipboard.png

阅读 5.9k
9 个回答

我typeof 看它,说是一个对象,不过typeof检查数据也会告诉你是对象。

我又用 Array.isArray 检查,返回true。

所以我看了一下 MDN 上面关于这个函数的解释:

https://developer.mozilla.org...

它说返回值是一个数组。

我看了一下 ECMA 5.1 上面数组相关描述也没有找到

http://ecma-international.org...

所以我也在这里等大神来解答 =。=

----------------- 强行解释的分割线 -----------------

数组的实例也是一个对象,所以确实可以给它添加属性并赋值。

但是要注意,不是复合类型的变量,是没有办法给它们的实例添加属性并赋值的。因为做了也没有用。

clipboard.png

我记混了,所以以为没有办法给数值的实例添加属性赋值。。。。。

let a = ["Box"];
a.index = 10;
a.input = "This is a Box! That is a Box!";

正则的exec返回值虽然说是数组, 但是有其他属性, 具体可以看文档文档, 多翻翻犀牛书或者高程吧

var a = [];
a[0] = 'tets'
a[1] = 'fasfasf'
a.index = '对象属性'

输出 a 得到,在JavaScript里面,数组也是一个对象

["tets", "fasfasf", index: "哈哈哈"]

我的理解是数组的成员和数组对象上的成员。
clipboard.png]

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为什么可以设置成功?
先看打印结果:
clipboard.png

为了更清晰地说明,我们将其展开,观察其原型链。
对象a的原型链:
clipboard.png
数组b的原型链:
clipboard.png
由上图可以看出,数组从原型链上继承了Obejct对象类型的方法。
当["box"]在Array(0)中找不到对应方法时,会沿着原型链向下,到Object中去寻找方法。
所以理论上来说,数组类型也可以认为是对象类型的一种。

var a = ['box'];
a.index = 'dsfsaf';
a.input = 'gfhdsgsadreqw';
console.log(a)

第一个问题:就是普通的数组

第二个问题:语法错误

图片描述

//[] 定义数组
//判断实例类型请尽量使用__proto__ 非 typeof

var instance = [];
typeof instance //用于字面量声明的
                //string,number,boolean,undefined
                //引用数据类型只返回 object ,null也是
instance.__proto__ //返回该对象所属 类的 原型 == 
                   //返回该实例的 构造函数的 原型

exec(),前几天我也遇到过这样的问题,你可以这样去看。
var a=pattern.exec(str);
console.log(Array.isArray(a));返回true
console.log(a.length);1
console.log(a[0]);检查到的值
console.log(a[1]);undefined
于是可以看出返回的值是一个长度为1的数组,内容就是检查到的内容。你在控制台上看到的,感觉上就是给你看的。index表示找到的索引的位置,length就代表长度
然后正则这样写/(box)/ig,同样运用上面的检查方法
你会看到返回的是长度为2的数组且数组索引0和1值一样。这点也是不知所措。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题