gpt4 book ai didi

javascript - 在 Javascript 中,为什么 undefined object 的子键返回错误而不只是未定义?

转载 作者:行者123 更新时间:2023-11-29 21:59:38 25 4
gpt4 key购买 nike

假设我有一个当前未定义

的对象

myObject.property1

任何 child 关闭未定义的东西也应该评估为未定义是有道理的,对吧?

myObject.property1.description

但是当我进入 JS 控制台时,我会:

myObject.property1

未定义

myObject.property1.description

类型错误:无法读取未定义的属性“描述”

如果我正在做一个条件,这会变得困惑:

if(myObject.property1.description){
console.log("it is defined!");
}else{
console.log("it is not defined!");
}

我希望它能够控制台日志 它没有定义! 但是我得到了错误并且条件完全失败了。我希望它评估为未定义。

  1. 为什么它不返回 undefined 呢?
  2. 我想要条件检查值的存在。我该怎么做?

最佳答案

Why doesn't it return undefined as well?

因为那是指定的行为。一般而言,您希望在程序中及早捕获错误,而不是让它们在程序中传播并在程序的其他地方产生其他可能更严重的错误,在这些地方错误的原始来源可能很难确定。 undefined 值通常是错误的征兆(或者至少是某些可能未按预期工作的征兆),需要尽早检查它们非常好 事情。这意味着您需要在代码中尽早编写针对 undefined 值的保护措施。

I want the conditional to check for the existence of the value. How do I do this?

一个简单的解决方案如下所示:

if(myObject && myObject.property1 && myObject.property1.description){

当然,如果这个链中的任何值是假的,例如如果 description 是一个空字符串,这可能会产生意想不到的结果。如果你真的只是想看看这个值是否不是 undefined,你可以这样做:

if(myObject !== undefined && 
myObject.property1 !== undefined &&
myObject.property1.description !== undefined){

或者更冗长,但更健壮:

if(typeof myObject !== "undefined" && 
typeof myObject.property1 !== "undefined" &&
typeof myObject.property1.description !== "undefined"){

参见 Detecting an undefined object property in JavaScript进行全面讨论。

关于javascript - 在 Javascript 中,为什么 undefined object 的子键返回错误而不只是未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24530578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com