javascript - 为什么一个简单的 JS 未定义检查会触发错误?

标签 javascript javascript-objects

我正在遍历一个内部属性不完全一致的大对象。但是,当我在对象周围抛出 if(typeof){} 语句时,它仍然会触发错误:

声明

if (typeof pendingTripDropoffMarkers[i].trip.id !== "undefined") {// do stuff}

错误

Uncaught TypeError: Cannot read property 'trip' of undefined

收获

但是,具有相同作用域的同一个函数中的姐妹对象就可以了。

if (typeof pendingTripPickupMarkers[i].trip.id !== "undefined") {// do stuff}

如果我在创建对象内容后对其进行打印,它们看起来就很好。那么是什么邪恶势力在这里插手呢?谢谢。

最佳答案

您应该测试任何可能 undefined object 。

if (pendingTripDropoffMarkers[i] 
       && pendingTripDropoffMarkers[i].trip
       && pendingTripDropoffMarkers[i].trip.id !== undefined) {

如果您真的担心 undefined 被覆盖,请不要使用 typeof hack。只需使用 void 运算符获取一个新的 undefined

if (pendingTripDropoffMarkers[i] 
       && pendingTripDropoffMarkers[i].trip
       && pendingTripDropoffMarkers[i].trip.id !== void 0) {

如果您确定应该定义 pendingTripDropoffMarkers[i],那么某处还有其他问题。

关于javascript - 为什么一个简单的 JS 未定义检查会触发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027399/

相关文章:

JavaScript 对象和 getter 属性

Javascript 继承和特权函数

javascript - 检查至少一个空白

javascript - 如何在 JavaScript 和 NodeJS WebSocket 之间进行 Ping/Pong?

javascript - 如何在 Ionic 中仅传递 Controller 变量的值作为参数

javascript - SockJS 对 WebSocket 使用无效 URL

javascript - 导航到 Javascript 对象中的上一个和下一个项目

JavaScript 对象 : Why Doesn't This Work?

javascript - 使用 javascript 绑定(bind)方法保留函数属性

javascript - 在 JavaScript 中通过另一个对象引用一个对象时未定义