读取未定义的对象属性时强制 JavaScript 异常/错误?

2024-03-31

我是一位经验丰富的 C++/Java 程序员,第一次使用 Javascript。我使用 Chrome 作为浏览器。

我创建了几个带有字段和方法的 Javascript 类。当我读取一个不存在的对象字段时(由于我的拼写错误),Javascript 运行时不会抛出错误或异常。显然这样的读取字段是“未定义的”。例如:

var foo = new Foo();
foo.bar = 1;
var baz = foo.Bar; // baz is now undefined

我知道我可以检查“未定义”是否相等,如“检测 JavaScript 中未定义的对象属性 https://stackoverflow.com/questions/27509/detecting-an-undefined-object-property-in-javascript”,但这似乎很乏味,因为我经常在代码中读取对象字段。

当我读取未定义的属性时,有什么方法可以强制抛出错误或异常吗?

为什么当我读取未定义的变量(而不是未定义的对象属性)时会引发异常?


这可以通过使用来实现ES6 代理 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy:

function disallowUndefinedProperties(obj) {
    const handler = {
        get(target, property) {
            if (property in target) {
                return target[property];
            }

            throw new Error(`Property '${property}' is not defined`);
        }
    };

    return new Proxy(obj, handler);
}

// example
const obj = { key: 'value' };
const noUndefObj = disallowUndefinedProperties(obj);

console.log(noUndefObj.key);
console.log(noUndefObj.undefinedProperty); // throws exception
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取未定义的对象属性时强制 JavaScript 异常/错误? 的相关文章

  • Jquery获取选中的复选框

    您好 我想获取页面中选定复选框的列表 实际上我真正需要的是获取复选框旁边的元素的文本 该元素是一个 html 元素 li 代码如下 但它不起作用 这是我当前的 jQuery document ready function target cl
  • createHTMLNotification() 替换

    我创建了一个 Chrome 扩展程序 其中使用createHTMLNotification 在所有内容之上显示一个窗口 然而 从 Chrome 28 开始 谷歌决定放弃createHTMLNotification 完全 为什么 谷歌 为什么
  • jQuery mobile 中的文本区域高度和宽度?

    我修复了 jQuery mobile 中文本区域元素的高度 并且在纵向中得到了完美的高度和宽度 但在横向中宽度没有放大 谁能帮我 提前致谢 HTML
  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • 显示具有多个父代的 D3 树

    我目前有this http bl ocks org mbostock 4339083图已实现 我希望在描述具有多个父节点的子节点时保持结构和可折叠性 有没有办法做到这一点 我研究了力图 但我也想保留一组层次结构 这意味着 1 级的父级可以有
  • Angular.js:如何从无序列表中获取 orderBy 或过滤器来工作?

    尝试根据价格和评级 在返回的对象中 进行排序 我宁愿用 ng click 和 li 来代替使用选择菜单 有没有办法做到这一点 我环顾四周 这是我能想到的最接近的 ul class restaurant filter li i class i
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 如何使用有角度的材料创建卡片网格?

    我正在尝试使用 ng repeat 创建每行三张卡片的网格 我有一个普通的 javascript 对象数组附加到范围 下面的代码将为每张卡创建一个新行 div div
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • 为什么 setTimeout 在 Chrome 中触发两次,而在 IE 或 Firefox 中则不然?

    有人能告诉我为什么 javascript 函数 生成新号码 在 Chrome 中触发两次 但在 IE 或 Firefox 中则不会 使用 Chrome 20 0 1132 57 IE9 和 Firefox 13
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 如何始终将焦点保持在文本框中

    我创建了一个包含两个 div 的 HTML 页面 左侧的 div 页面的 90 是 ajax 结果的目标 右侧的 div 页面的 10 包含一个文本框 该页面的想法是在文本框中输入零件编号 通过条形码扫描仪 并显示与该零件编号匹配的绘图 显
  • 使用 Google 日历源时如何禁用 FullCalendar 中的活动链接?

    我正在使用 FullCalendar 库从 Google 日历加载日历中的事件 不幸的是 事件添加到日历后 它们是可点击的 当您点击该活动时 您会自动重定向到 Google 日历页面以查看该特定活动 或者如果您有足够的访问权限 则可以直接对
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐

  • 可以在 PHP 的类中使用静态常量吗?

    我预计以下内容会起作用 但似乎没有
  • 将可点击的 SVG 图像插入 Sphinx 文档

    我有 SVG 图像文件 其中有多个节点 每个节点都与 URL 关联 如果我直接在浏览器中打开此文件 我可以单击每个节点 它将打开不同的 URL 但是 当我在 Sphinx 文档中使用这张图片时 它不起作用 图片作为一个整体呈现 所以我需要通
  • Android CookieManager setCookie 创建多个cookie

    在我的 Android 应用程序中 我有一个网络视图 它从多个域加载 URL 我需要删除特定域中的所有 cookie 我想保留来自其他域的 cookie 但我需要删除一个域中的所有 cookie 我对处理我的请求的所有其他解决方案持开放态度
  • IT公司项目选择时如何决策? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 他们选择项目的标准是什么 他们选择项目的依据是什么 如果他们想继续经营下去 就需要投资回报
  • Groovy 中的单元测试抽象类

    我是单元测试和模拟的新手 我正在尝试对 Grails 中的抽象域类进行单元测试 我应该如何模拟实现 以便可以对域类的约束进行单元测试 有没有办法使用 groovy 或 grails 附带的模拟库 我应该只实现一个简单地扩展抽象类的类吗 gr
  • 如何从 javascript 发送curl 请求?

    我想发送这个 curl https fcm googleapis com fcm send H Content Type application json H Authorization key
  • 从加载到内存的 24 位 BMP 文件中获取 HBITMAP

    我有一个 24 位 BMP 文件加载到 RAM 中 我正在尝试为此图像文件创建一个 HBITMAP 我发现了一些我一直在尝试的例子 但似乎无法发挥作用 基本上 我需要该文件的 HBITMAP 以便我可以卸载该文件并保留 HBITMAP 稍后
  • savefig - 文本被截断

    假设我创建了一个情节 import matplotlib pyplot as plt plt clf import numpy as np props np random randint 0 100 200 x np arange 1 20
  • python:具有多态性的类属性/变量继承?

    在我作为一名 python 学徒的努力中 如果我尝试使用类属性 我最近会陷入一些奇怪的 从我的角度来看 行为 我不是在抱怨 但希望能提供一些有用的评论来阐明这个问题 为了将复杂的问题简化为更简洁的问题 我会这样表述 确保类属性的行为更像继承
  • 函数“SUM 不存在”

    我正在使用 mysql 5 5 11 当我执行下面的脚本时 INSERT INTO payments created Amount user Remarks orderid paymethod VALUES 2016 09 03 0 0 a
  • 如何手动发布JAR到mavencentral?

    我创建了一个开源项目 https github com Kshitiz Sharma log4j weblayout我想将其发布到 Maven Central 以便用户只需在 pom xml 中引用该库即可使用该库 就像这样
  • 防止 jquery-validate 使用 title 属性作为错误消息?

    Jquery 验证使用title属性作为错误消息 我用title属性来提供用户工具提示 但我不希望它取代验证错误消息 在这个完整的示例中 我设置了姓字段有一个title属性 同时离开名场没有title属性 当表单提交时 名字段正确显示错误消
  • MSTest V2 按顺序执行单元测试 -> [DoNotParallelize]

    我有一个关于按顺序运行单元测试的问题 不幸的是 在这种情况下 不能选择并行运行它们或模拟数据库 该项目是用 NET core 3 1编写的 UnitTests需要在Unittest运行之前和之后执行数据库操作 看完之后https www m
  • 将列表传递给 python 类[重复]

    这个问题在这里已经有答案了 我有这个简单的课程 class revs def init self rev us accs self rev rev self us us self accs accs 我有这段代码用于将值分配给列表并且位于循
  • 放弃 gridview 固定标题

    正在开发 asp net Gridview 控件 好吧 我试了又试 也许搜索了整个网络 但我找不到任何适合我的 ASP NET gridviewcontrol 的东西 它可以修复标题并允许排序 但最重要的是 所有浏览器都可以工作 而不仅仅是
  • 如何在 C++ 中存储位数组?

    在 C 中存储位数组 无 Boost 只是标准容器 例如表示卷分配位图 的最佳方式是什么 我想std vector
  • Ruby on Rails 数据库迁移不会在 MySQL 表中创建外键

    我正在尝试修改 Ruby on Rails 应用程序中的数据库迁移 我使用 MySQL 作为数据库 并且想将外键添加到正在创建的表中 我正在使用以下代码 虽然遵循在适当列上创建空值的规范 但没有应用外键约束 class CreateBook
  • 如何在 Bootstrap 表单上放置背景图像?

    我正在尝试使用 Bootstrap 框架在表单上放置背景图像 例如在文本和输入后面 就像我网站的背景图像 但图像出现在底部 我希望它位于 容器 内 我的代码是这样的 div class container div class thumbna
  • 将时间设置为 00:00:00

    我在 Java 中重置时间时遇到问题 对于给定日期 我想将时间设置为 00 00 00 这是我的代码 Resets milliseconds seconds minutes and hours from the provided date
  • 读取未定义的对象属性时强制 JavaScript 异常/错误?

    我是一位经验丰富的 C Java 程序员 第一次使用 Javascript 我使用 Chrome 作为浏览器 我创建了几个带有字段和方法的 Javascript 类 当我读取一个不存在的对象字段时 由于我的拼写错误 Javascript 运