javascript - 为什么没有报segmentation fault

标签 javascript node.js

考虑

const a = [1,2,3]
console.log(a[5]) // returns undefined

我是一名 C 和 Fortran 程序员,我预计会发生段错误。这里的内存是如何管理的? Node 是环境。

最佳答案

在 Javascript 中,a[n] 是许多抽象层,解析为类似的东西:

struct JsType *array_get(struct JsType *a, struct JsType *n) {
  struct JsArray *array = coerceTo(a, TYPE_ARRAY);
  struct JsInt *index = coerce(n, TYPE_INTEGER);
  if (array->length > index || index < 0) {
    return (struct JsType *) JSTYPE_UNDEFINED;
  }
  return array->contents[index->value];
}

地点:
coerceTo 是一个函数,它可以将可能相似的值转换为可用值,例如将字符串转换为整数(这意味着您可以使用字符串化整数作为数组索引),或者返回给它的值,如果它已经有了我们想要的类型。
JSTYPE_UNDEFINED 是 Javascript 的 undefined
的全局常量 struct JsType 是一个结构,Javascript 中使用的所有类型都由该结构组成,并且可以转换为。

关于javascript - 为什么没有报segmentation fault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58205335/

相关文章:

javascript - 方法/函数在 IntelliSense 中显示为变量

javascript - 获取对象中具有给定词的所有字段并转换这些字段的所有值

javascript - 我的 javascript 在复选框检查中有一些错误

javascript - Express app.all 声明 req/res 与 not

javascript - 如果javascript不存在,如何告诉css做什么

javascript - 为什么 JQuery 对话框在最大化模式下稍微超出主窗口

Javascript:在字符串中转义 %d

javascript - 在react.js中将no-cors包含到 header 中以获取json内容时出现奇怪的错误

node.js - 如何使用 Q-IO 设置 HTTP 请求超时

javascript - Node JS - 如何在同一 session 中逐一运行跨浏览器测试?