【问题标题】:What does JS return when asked for myArray[index] when index = -1当 index = -1 时询问 myArray[index] 时 JS 会返回什么
【发布时间】:2016-03-25 10:08:50
【问题描述】:

我正在尝试将 Javascript 脚本转换为 C#,并且在其中一个 for 循环中偶尔将变量设置为另一个数组 -1 索引的值,即

var newVar = oldVar[index];//But sometimes index = -1

显然 C# 在这里抛出了一个越界错误,但 Javascript 没有,所以我想知道 newVar 是否等于 oldVar[0] 或 'undefined'。

有问题的实际代码是这样的

feature[k].px[q] = orig_feature[k].px[q] * 4 + orig_feature[k].py[q] * step[orig_feature[k].pz[q]];

但是在最后设置'step'的索引时,orig_feature[k].pz[q]有时等于-1

【问题讨论】:

  • 如果您尝试以您正在做的方式访问具有未定义索引的数组,newVar 将是undefined,它不会抛出错误。您可以自己轻松测试 -> jsfiddle.net/adeneo/0r6mpk7m
  • 这很容易自己测试。只需在控制台中输入[][-1]
  • var a=[];a[-1]=42; a[-1] (将显示 42)...首先让 JavaScript 以您期望的方式运行可能比转换为 C# 更好。
  • 好的,在这种情况下,关于我发布的实际代码 feature[k].px[q] 有时可能会以 NaN 值结束,对吧?所以我想这不会导致任何错误,因为如果你执行 NaN

标签: javascript c# arrays indexoutofrangeexception


【解决方案1】:

访问任何未定义的数组将返回undefined

var array = [1, 2, 3];

array[-1] === undefined

【讨论】:

  • 请不要将代码发布为图片。 (这充其量只是答案的一半)。
【解决方案2】:

没有简单的方法将 javascript 转换为 C#,因为 C# 是一种强类型语言,而 javascript 没有。 Javascript 是透明语言 C# 是不透明的..

我能想到的最好的方法是使用仿真、脚本或编译,将 javascript 转换为可以在 C# 上下文(和运行时)中执行的东西。

尝试查看 JInt : https://jint.codeplex.com/

【讨论】:

  • 当 OP 进行代码转换时,问题本身与该过程本身无关,而是 JavaScript 数组中 OOB 的行为。
猜你喜欢
  • 1970-01-01
  • 2018-05-30
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 2020-04-02
  • 2015-02-11
相关资源
最近更新 更多