在Chrome 21中,[,]输入控制台输出
[undefined x 1]
并提供[undefined]输出
[未定义]
[undefined]和之间有什么区别[undefined x 1]?
符号是什么[undefined x 1]?
我写了一个小程序,生成数组,运行时间很长(几乎永远;-)):
var results = [];
var i = 1;
while (true) {
console.log(i++);
results.push([]);
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个长度稀疏的数组而不是空数组时,i程序崩溃得非常快:
var results = [];
var i = 1;
while (true) {
console.log(i);
results.push(new Array(i++));
}
Run Code Online (Sandbox Code Playgroud)
实际上我起床i等于17424,然后我收到一条错误消息告诉我
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)
和Node.js带我回到控制台.由于唯一的区别是第二个产生比前一个更大的"空"数组,这意味着一个空的稀疏长度数组n占用了n具有长度的空数组的空间1.
我是对的(特别是Node.js)吗?
还有一个问题:如果我跑了
var results = [];
var i = 1;
while (true) {
console.log(i);
var temp = [];
temp[i++] = i;
results.push(temp);
}
Run Code Online (Sandbox Code Playgroud)
然后我起床到1286175,然后再次崩溃: …
我的问题与Javascript数组稀疏相同吗?有一点不同......
JavaScript节点是否稀疏,如Node.js(和/或V8)中实现的那样?我假设了那些,但后来我做了以下测试:
var testArray = [];
testArray[10000] = 'test';
console.log(testArray);
Run Code Online (Sandbox Code Playgroud)
返回的是10,000个空白元素,最后是"test".这是因为调试输出的工作方式,还是Node.js在添加新元素时实际为未定义的数组元素分配内存?
这个程序:
var arr = [];
arr[100] = "foo";
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
输出:
(101) [undefined × 100, "foo"]
Run Code Online (Sandbox Code Playgroud)
但是,这个程序:
var arr = [];
for(var i = 0; i < 101; i++) {
arr[i] = (i === 100 ? "foo" : undefined);
}
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
输出这个("foo"当然最终有):
(101) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, …Run Code Online (Sandbox Code Playgroud) 可能重复:
Javascript数组是否稀疏?
JavaScript中有以下"安全"吗?(因为,可以期望在所有JavaScript引擎上可靠地工作)
a = [];
a[100] = "hello";
a[100] == "hello"; // should be true
Run Code Online (Sandbox Code Playgroud) 用例(首先是一些信息):
我制作了一些HTML/CSS3/Javascript游戏,可以在平台特定的可执行文件中在WebView/Embedded浏览器中的不同平台上运行.我自己设计了它,因为我厌倦了所有的"框架",告诉我使用它们的框架是多么简单.我不需要这些框架的所有臃肿与他们令人印象深刻的类和东西,它必须简单作为ABC,对吧?另外,因为webview比本机代码慢,所以它必须简单直接才能获得最佳性能.
所以我设计了一个在javascript中作为变量提供的接口,无需加载额外的javascript类(如cordova或phonegap或其他).因为我也使用Windows(Windows无法将对象变量的名称更改为'publish'),所以可以通过javascript通过window.external访问它.在webview /浏览器中加载html时,此变量将成为对象.
题
这一切都很好(在不同的平台上),但window.external变量似乎是Windows上的一个空对象,但是当你尝试调用一个类似的函数时window.external.vibrate(500),它将被执行而没有错误(此函数存在于该对象的所有平台版本中).
然而,类似的typeof window.external.vibrate结果'undefined'.遍历对象不会做任何事情,例如:
for( var p in window.external ) {
alert( p );
}
Run Code Online (Sandbox Code Playgroud)
因此,测试外部对象是否是"真正的"外部对象并且不可能看到支持哪些功能(如果需要)并不容易.
我该怎么办?我想念一些东西吗?
为了给你一些信息,我已经按照这个'指南':http: //www.delphidabbler.com/articles?article = 22.
我的代码(简化):
类型库:
unit WebBrowserBridge_TLB;
// ************************************************************************ //
// WARNING
// -------
// The types declared in this file were generated from data read from a
// Type Library. If this type library is explicitly or indirectly (via
// another type library referring to …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
var arr = [];
arr["abc"] = 1;
arr["bcd"] = 2;
console.log(arr.length); // outputs 0
arr["1"] = "one"; // notice the subscript content is in quotes
console.log(arr.length); // outputs 2
console.log(arr); // outputs [undifined, "one"]
console.log(arr["abc"]); // outputs 1
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,我已经定义了arr首先分配了字符串索引的数组,因此数组长度保持为0.我读到某处,当字符串值用于下标时,数组对象被视为普通对象.所以,我可以理解长度是否为零(可能是未定义的).
然后,当我使用下标时"1",应该将字符串类型作为数字并且长度递增.然后,当打印数组时0,索引1的值为undefined ,索引具有值"one"(请注意索引"abc"并且"bcd"在打印时不显示.
最后,当我尝试访问该"abc"值时,我得到了值.
所以我的问题如下:
- 在为数组分配字符串索引时会发生什么,为什么长度保持不变?
- 在使用之前,javascript解释器是否尝试将索引转换为数字?
- 存储数组字符串索引的值在哪里以及为什么在我尝试打印数组时它们没有显示?
- 最后,有人能指出我一篇很好的文章,解释了javascript功能的实现细节.
提前致谢.
我有类似下面的javascript代码来获取数组的大小,
var testvar = [ ];
testvar[1] = 2;
testvar[200] = 3;
alert(testvar.length); //201Run Code Online (Sandbox Code Playgroud)
但代码警告201提到了大小2,为什么?
我需要得到该数组中的总元素数.
var a = [undefined, undefined];
var b = new Array(2);
0 in a // returns true
1 in a // returns true
0 in b // returns false
1 in b // returns false
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释为什么会这样吗?
我正在寻找的是这个代码的Javascript等价物:
$map[$card][$bit] = $val;
Run Code Online (Sandbox Code Playgroud)
(如你所知,这也会立即实例化数组)
我尝试和研究了一下,但似乎有很多其他方法可以做到这一点,我想知道什么是我的具体代码的最佳方法.我正在从数据库中检索$ card和$ bit,并创建某种映射,为映射中的每个位置赋值.
Javascript代码:
var jPunten = JSON.parse(data);
var puntmap = [][];
for (var i=0;i<jPunten.length;i++)
{
puntmap[jPunten[i].CARDNR][jPunten[i].BITNR] = jPunten[i].STATDEV;
}
Run Code Online (Sandbox Code Playgroud) javascript ×10
arrays ×6
node.js ×2
sparse-array ×2
constructor ×1
delphi ×1
interface ×1
json ×1
object ×1
php ×1