Javascript。为什么这种情况s[i+;1]don';“不要出错”;超出范围;? var romanToInt=函数{ 数值=0; 对于(设i=0;i

Javascript。为什么这种情况s[i+;1]don';“不要出错”;超出范围;? var romanToInt=函数{ 数值=0; 对于(设i=0;i,javascript,conditional-statements,ternary,Javascript,Conditional Statements,Ternary,这是一个leetcode示例,我对这种情况感到困惑symbols[s[I]]

这是一个leetcode示例,我对这种情况感到困惑
symbols[s[I]]
,我不明白为什么s[I+1]不会超出范围?或者它超出了范围但被认为是错误的?

在javascript中,数组是对象,所以在javascript数组中没有超出范围的事情。数组索引存储为键。如果数组中不存在索引,则返回
undefined

var romanToInt = function(s) {
  value = 0;
  for (let i = 0; i < s.length; i += 1) {
    symbols[s[i]] < symbols[s[i + 1]] ? value -= symbols[s[i]] : value += symbols[s[i]]
  }
  return value
};

JavaScript数组的索引为零:数组的第一个元素位于索引0处,最后一个元素位于等于数组长度属性值减去1的索引处

使用无效的索引号返回未定义的。

重点补充


在您的情况下,将
与数字和
未定义的
进行任何比较都是错误的。

在JavaScript中,数组声明时没有固定大小。因此s[i+1]不会超出范围,它只是未定义。因此,最终输出将为false。

Javascript数组只是对象,索引就像任何其他字段的键一样

您可以在此处看到Javascript行为:

设a=[0,1,2];
for(设i=0;i<5;i++){
console.log(a[i]);
}
log(“其他字段相同:”)
console.log(a.foo);
控制台日志(a.bar);
a、 foo=“嗨!”

console.log(a.foo)欢迎来到JavaScript的精彩世界;-)“超出范围”在javascript中表示未定义,您尝试了什么解决方法?你检查了
s[i+1]
包含的内容了吗?谢谢你的快速回答,我现在就知道了谢谢你的快速回答,我现在就知道了谢谢你的快速回答,我现在就知道了
const arr = [1, 2, 3];
console.log(typeof arr);    // output: "object"
console.log(arr[4]);        // output: undefined