请考虑以下javaScript代码。
var obj = /e/.exec("The best things in life are free!");
var k = "";
var x;
for (x in obj) {
k = k + " " + obj[x] + " " + x + "<br>";
}
document.getElementById("demo").innerHTML = (obj instanceof Array) + " " + obj[0] + " " + obj[1] + " " + obj.index + "<br>" + k;
<h2>JavaScript Regular Expressions</h2>
<p id="demo"></p>
提供输出
JavaScript Regular Expressions
true e undefined 2
e 0
2 index
The best things in life are free! input
undefined groups
现在,在上面的代码中,我使用了obj[0]
obj [1] (which are array only notations), and also
obj.index`(该数组不适用于数组)。
现在我真的对obj
到底是什么感到困惑。...
答案 0 :(得分:4)
现在在上面的代码中,我使用了obj [0],obj 1(它们是仅数组表示法)
不,不是。例如:
const obj = {answer: 42, 42: "is the answer"};
const str = "answer";
console.log(obj[str]); // 42
console.log(obj[42]); // is the answer
....以及obj.index(对于数组不应该使用)
是的,他们应该。 :-)
javaScript中的标准数组根本不是数组。它们只是以下对象:
Array.prototype
。length
的属性有特殊的行为。n
时,其范围为0 <= n <2 32 -1)。这些是与数组条目对应的属性。我们通常将它们写成不带引号(myArray[0]
),但从正式意义上来说,它们是字符串。[]
)。由于它们是对象,因此它们也可以具有属性:
const a = [1, 2, 3];
a.answer = 42;
console.log(a.answer); // 42
JavaScript本身在几个地方(但不是很多)利用了这一事实,包括您发现的RegExp.prototype.exec
函数。另一个地方是传递给tag function的第一个参数,该参数包含模板中字符串段的条目以及带有这些段的原始版本的raw
属性。
我贫乏的小博客中的更多内容:A Myth of Arrays