声明这样的数组之间的真正区别是什么:
var myArray = new Array();
Run Code Online (Sandbox Code Playgroud)
和
var myArray = [];
Run Code Online (Sandbox Code Playgroud) JavaScript中的函数是否类似于Python range()?
我认为应该有一个更好的方法,而不是每次写下面的行:
array = new Array();
for (i = 0; i < specified_len; i++) {
array[i] = i;
}
Run Code Online (Sandbox Code Playgroud) 作为测试一些代码的副作用,我编写了一个小函数来比较使用array.push方法与直接寻址(array [n] = value)的速度.令我惊讶的是,推送方法通常表现得更快,特别是在Firefox中,有时在Chrome中.只是出于好奇:任何人都有解释吗?您可以在此页面找到测试(单击"数组方法比较")
有人可以解释这个(奇怪的)行为吗?为什么第一个例子中的长度为3而不是2,最重要的是,为什么第二个例子中的长度为0?只要键是数字的,长度就有效.如果不是,则长度为0.如何从第二个示例中获得正确的长度?谢谢.
a = [];
a["1"] = {"string1":"string","string2":"string"};
a["2"] = {"string1":"string","string2":"string"};
alert(a.length); // returns 3
b = [];
b["key1"] = {"string1":"string","string2":"string"};
b["key2"] = {"string1":"string","string2":"string"};
alert(b.length); // returns 0
Run Code Online (Sandbox Code Playgroud) 让我说我有
myArray = ['item1', 'item2']
Run Code Online (Sandbox Code Playgroud)
我试过了
for (var item in myArray) {console.log(item)}
Run Code Online (Sandbox Code Playgroud)
它打印0 1
我希望有item1 item2
是否有任何其他语法无需使用
for (var i = 0; i < myArray.length; i++)
Run Code Online (Sandbox Code Playgroud) 我有两个数组,我想检查是否所有元素arr2都在arr1.如果重复元素的值arr2,则它需要arr1具有相同的次数.这样做的最佳方法是什么?
arr1 = [1, 2, 3, 4]
arr2 = [1, 2]
checkSuperbag(arr1, arr2)
> true //both 1 and 2 are in arr1
arr1 = [1, 2, 3, 4]
arr2 = [1, 2, 5]
checkSuperbag(arr1, arr2)
> false //5 is not in arr1
arr1 = [1, 2, 3]
arr2 = [1, 2, 3, 3]
checkSuperbag(arr1, arr2)
> false //3 is not in arr1 twice
Run Code Online (Sandbox Code Playgroud) 在Javascript中,如果我做了类似的事情
var alpha = [];
alpha[1000000] = 2;
Run Code Online (Sandbox Code Playgroud)
这会浪费内存吗?我记得读过一些关于Javascript数组仍然为未指定的索引设置值的东西(可能将它们设置为未定义?),但我认为这可能与删除有关.我真的不记得了.
可能重复:
Javascript数组是否稀疏?
我正在学习JavaScript,并且已经阅读了一些简单的介绍和教程.在查看Array对象时,我偶然发现了一些细节,这些细节让我非常奇怪,来自其他语言,如C/Java/Scala/......
所以我们假设我们定义一个数组:
var arr = ['foo','bar','qux']
Run Code Online (Sandbox Code Playgroud)
我们现在分配
arr[5] = 'baz'
Run Code Online (Sandbox Code Playgroud)
这导致我们的数组看起来像这样:
arr
>> ["foo", "bar", "qux", undefined, undefined, "baz"]
Run Code Online (Sandbox Code Playgroud)
长度如预期
arr.length
>> 6
Run Code Online (Sandbox Code Playgroud)
JavaScript已经将我们的数组扩展到所需的长度 - 六 - 并且新项目被设置为undefined - 除了我们实际赋值的那个.
从低级别的角度来看,这是一种可怕的记忆.通常,数组在内存中是连续的范围 - 使数组更大通常涉及将整个数组复制到足够大小的新内存位置.这是一项非常昂贵的操作.
现在,我确实意识到这可能不是 JavaScript引擎正在做的事情,因为复制数组会非常昂贵,并且内存空间将被浪费在所有这些"未定义"的值上.
有人能告诉我门后究竟发生了什么吗?
我是JavaScript的新手,有一件事困扰着我.我有一个非常简单的代码:
var a = [];
a[1] = 1;
i = typeof(a[0]);
index = a.indexOf(undefined);
len = a.length;
console.log(a);
console.log("\n" + len);
console.log("\n" + i);
console.log("\n" + index);
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么indexOf返回-1而不是0.我知道这个方法比较===,但我用作参数关键字undefined.如果我将方法参数更改为"未定义"它也不起作用(但这对我来说很明显).有人可以解释一下这个并告诉我在数组中找到未定义值的最简单方法是什么?
我有一个页面,我正在尝试获取许多共享一个公共类的div的类数组.例如:
<div class="common lorem ipsum"></div>
<div class="common dolor sit"></div>
<div class="common hello world"></div>
Run Code Online (Sandbox Code Playgroud)
我想获取每个common类div并获取它的类的数组.目前,我正在通过使用这个jQuery来做到这一点:
$('.common').each(function(index) {
var classes = $(this).attr('class').split(" ");
for(var i in classes) {
alert(classes[i]);
}
});
Run Code Online (Sandbox Code Playgroud)
查看第一个结果classes变量给出了:
classes: Array (3)
0: "common"
1: "lorem"
2: "ipsum"
length: 3
__proto__: Array
Run Code Online (Sandbox Code Playgroud)
问题是,for(var i in classes)似乎是在迭代__proto__阵列并深入研究它 - 有没有人曾经遇到过这个问题?我使用的是最新版本的Chrome(6.0.453.1).
javascript ×10
arrays ×8
memory ×2
node.js ×2
browser ×1
css ×1
declaration ×1
firefox ×1
indexof ×1
iteration ×1
jquery ×1
performance ×1
python ×1