Javascript 在对象内获取键值时出现问题

Javascript 在对象内获取键值时出现问题,javascript,arrays,json,object,Javascript,Arrays,Json,Object,我对这段代码有一个问题: var Etudiants = { "N13213316" : { "name" : "Touati Mohammed", "birthDate" : "05 June 2001", "age" : (Math.round((new Date().getTime() - new Date(this.Etudiants.N1321

我对这段代码有一个问题:

var Etudiants = {
"N13213316" : {
    "name" : "Touati Mohammed",
    "birthDate" : "05 June 2001",
    "age" : (Math.round((new Date().getTime() - new Date(this.Etudiants.N13213316[birthDate]).getTime()) / 1000 / 60 / 60 / 24 / 365.25)),
    "isStudent" : true,
    "departement" : {
            "2021" : "USMBA ENCG Fes",
            "2021" : "USMBA FLDM Fes"
    }
}
}
保存时,我会得到以下错误代码:

未捕获引用错误:未定义生日


因此,基本上我正在训练获取值“05 June 2001”以将其作为参数传递给Date函数,但我不能这样做,但是我可以从浏览器控制台访问该值,在那里我确实犯了错误,并提前表示感谢。

有三种方法可以访问JavaScript中的对象属性:

  • 带点:

    object.property

  • 方括号内:

    object['property']

  • 破坏:

    const{property}=object

  • 所以,基本上,您混合了这两种访问对象属性的方法


    注意:不要访问所提到的@roperzh对象文本中的字段。

    有三种方法可以访问JavaScript中的对象属性:

  • 带点:

    object.property

  • 方括号内:

    object['property']

  • 破坏:

    const{property}=object

  • 所以,基本上,您混合了这两种访问对象属性的方法

    请注意,不要访问所提到的@roperzh对象文本中的字段。

    以下表达式中的出生日期位:

    this.Etudiants.N13213316[birthDate]
    
    引用birthDate变量-不要与“birthDate”字符串混淆。这个变量实际上没有在这里定义-因此您的错误消息

    您应该更改代码以引用字符串:

    this.Etudiants.N13213316["birthDate"]
    
    或者让代码保持原样,但事先将birthDate变量声明为指向“birthDate”字符串:

    请注意,您可能会在此处遇到其他问题:

    • 如果您的代码在严格模式下运行,这将在此处未定义-在这种情况下,this.Etudiants将触发TypeError
    • 即使代码在非严格模式下运行,在此处计算this.Etudiants表达式时,它实际上是未定义的-尚未对Etudiants变量赋值-因此this.Etudiants.N13213316将导致类型错误
    编辑:要解决后面的问题,您需要推迟执行this.Etudiants.N13213316表达式,直到实际发生对Etudiants变量的初始赋值之后。一个简单的解决办法如下:

    var Etudiants = {
    "N13213316" : {
        "name" : "Touati Mohammed",
        "birthDate" : "05 June 2001",
        "isStudent" : true,
        "departement" : {
                "2021" : "USMBA ENCG Fes",
                "2021" : "USMBA FLDM Fes"
        }
    }
    }
    Etudiants.N13213316.age = (Math.round((new Date().getTime() - new Date(Etudiants.N13213316["birthDate"]).getTime()) / 1000 / 60 / 60 / 24 / 365.25)),
    
    以下表达式中的生日位:

    this.Etudiants.N13213316[birthDate]
    
    引用birthDate变量-不要与“birthDate”字符串混淆。这个变量实际上没有在这里定义-因此您的错误消息

    您应该更改代码以引用字符串:

    this.Etudiants.N13213316["birthDate"]
    
    或者让代码保持原样,但事先将birthDate变量声明为指向“birthDate”字符串:

    请注意,您可能会在此处遇到其他问题:

    • 如果您的代码在严格模式下运行,这将在此处未定义-在这种情况下,this.Etudiants将触发TypeError
    • 即使代码在非严格模式下运行,在此处计算this.Etudiants表达式时,它实际上是未定义的-尚未对Etudiants变量赋值-因此this.Etudiants.N13213316将导致类型错误
    编辑:要解决后面的问题,您需要推迟执行this.Etudiants.N13213316表达式,直到实际发生对Etudiants变量的初始赋值之后。一个简单的解决办法如下:

    var Etudiants = {
    "N13213316" : {
        "name" : "Touati Mohammed",
        "birthDate" : "05 June 2001",
        "isStudent" : true,
        "departement" : {
                "2021" : "USMBA ENCG Fes",
                "2021" : "USMBA FLDM Fes"
        }
    }
    }
    Etudiants.N13213316.age = (Math.round((new Date().getTime() - new Date(Etudiants.N13213316["birthDate"]).getTime()) / 1000 / 60 / 60 / 24 / 365.25)),
    

    这回答了你的问题吗?这回答了你的问题吗?你提到的方法没有一个有效,我试过,但总是一样的错误你提到的方法没有一个有效,我试过,但总是一样的错误谢谢你的帮助,是的,确实发生了什么,但是我按照你的建议做了,我再次收到了相同的错误消息。请确保确认错误现在指的是哪个变量或表达式。是的,确定,未定义的变量是N1323316 nowOk,这正是我在回答的最后一部分中指出的问题。我现在添加了一些注释,为您指出解决此问题的正确方向。是的,现在它正在工作。非常感谢您的帮助,是的,确实发生了什么,但是我按照您的建议做了,我再次收到了相同的错误消息。请确保确认错误现在指的是哪个变量或表达式。是的,确定,未定义的变量是N1323316 Nook,这正是我在回答的最后一部分中指出的问题。我现在添加了一些注释,为您指出解决此问题的正确方向。是的,现在它正在工作,非常感谢