JavaScript子对象不可访问

JavaScript子对象不可访问,javascript,object,Javascript,Object,我不熟悉JavaScript中的对象处理,我遇到了一个问题。我希望你能帮助我 为了理解我在这里做什么:我有一个多层次的对象,每个国家有两个不同的电话号码(短代码)。由于列表太长,我为“欧洲”添加了一个类别。当我尝试访问子对象的数据时,我的引用总是未定义的,但是我的console.log(l2)声明子对象在那里,并且应该具有已定义的属性 你能帮我理解为什么属性没有定义或者我做错了什么吗 小提琴: JS: langs={ “CRA:{标志:'',cs:'4262',as:''}, “审阅”:{标志:

我不熟悉JavaScript中的对象处理,我遇到了一个问题。我希望你能帮助我

为了理解我在这里做什么:我有一个多层次的对象,每个国家有两个不同的电话号码(短代码)。由于列表太长,我为“欧洲”添加了一个类别。当我尝试访问子对象的数据时,我的引用总是未定义的,但是我的console.log(l2)声明子对象在那里,并且应该具有已定义的属性

你能帮我理解为什么属性没有定义或者我做错了什么吗

小提琴:

JS:

langs={
“CRA:{标志:'',cs:'4262',as:''},
“审阅”:{标志:“”,cs:'72074301',as:''},
“欧洲”:{
“保加利亚语”:{国旗:'bg',cs:'4668',as:''},
“克罗地亚语”:{国旗:'hr',cs:'4671',as:'4707'},
“捷克语”:{旗:cz',cs:'4365',as:'4553'},
“丹麦语”:{旗帜:'dk',cs:'4357',as:'4526'},
“荷兰语”:{国旗:'nl',cs:'4343',as:'4511'},
“英语”:{国旗:'gb',cs:'4164',as:'4482'},
“芬兰语”:{标记:'fi',cs:'4092',as:''},
“佛兰芒语”:{旗帜:'be',cs:'4500',as:''},
“法语”:{国旗:'fr',cs:'4344',as:'4781'},
“德语”:{国旗:'de',cs:'4345',as:'4473'},
“匈牙利语”:{国旗:'hu',cs:'4221',as:'4729'},
“意大利语”:{旗:'it',cs:'4348',as:'4485'},
“拉脱维亚语”:{国旗:'lv',cs:'4674',as:''},
“立陶宛语”:{国旗:'lt',cs:'4673',as:'''},
“挪威语”:{国旗:'no',cs:'4356',as:'4533'},
“波兰语”:{旗:'pl',cs:'4351',as:'4512'},
“西班牙文”:{国旗:“es”,cs:“4346”,as:“4524”},
“瑞典语”:{国旗:'se',cs:'4349',as:'4554'},
“葡萄牙语(PT)”:{旗:'PT',cs:'4347',as:'4522'},
“罗马尼亚语”:{国旗:'ro',cs:'4675',as:''},
“土耳其语”:{国旗:'tr',cs:'4355',as:'4530'},
},
“粤语”:{标志:'cn',cs:'',as:''},
“中文”:{国旗:'cn',cs:'4353',as:'4752'},
“英语”:{国旗:'us',cs:'4164',as:'4482'},
“爱沙尼亚语”:{旗帜:'ee',cs:'4669',as:''',
“希伯来语”:{旗帜:'il',cs:'4670',as:'4727'},
“冰上登陆”:{旗:'is',cs:'4672',as:''},
“印度尼西亚”:{国旗:“id”,cs:“4368”,as:“4713”},
“日语”:{国旗:'jp',cs:'4265',as:'4717'},
“韩国语”:{国旗:'kp',cs:'4366',as:''},
“马来语”:{标志:'ms',cs:'4367',as:''},
“葡萄牙语(BR)”:{旗:'BR',cs:'4552',as:'4781'},
“俄语”:{国旗:'ru',cs:'4350',as:'4559'},
“塞尔维亚语”:{国旗:'rs',cs:'4677',as:''},
“斯洛文尼亚语”:{国旗:'si',cs:'4676',as:''},
“Tagalog:{标志:'',cs:'4678',as:''},
“泰语”:{国旗:'th',cs:'4354',as:'4555'},
“越南语”:{国旗:'vn',cs:'4679',作为:'}
};
$。每个(语言,功能(键,l){
//log('length L:',Object.keys(L).length,L);
if(对象键(l).长度>3)
{
if(键=“欧洲”)旗=“欧盟”;
else标志=“”;
html='
  • ; html+=''; html+='
      ; $。每个(l,函数(键2,l2){ 控制台日志(键2,l2); 如果(l2.cs.长度<8) l2.cs='7108'+l.cs; 如果(l2.as.length<8&&l2.as.length>0) l、 as='7108'+l.as; 如果(l2.as!='') { html+='
    • ; html+=''; html+='
        ; html+='
      • '; html+='
      • '; html+='
      '; html+='
    • '; } 其他的 { html+='
    • '; html+=''; html+='
    • '; } }); $('btb#u lang_list').append(html); } 其他的 { 如果(长径小于8) l、 cs='7108'+l.cs; 如果(l.as.length<8&&l.as.length>0) l、 as='7108'+l.as; 如果(l.as!=='') { html='
    • ; html+=''; html+='
        ; html+='
      • '; html+='
      • '; html+='
      '; html+='
    • '; } 其他的 { html='
    • ; html+=''; html+='
    • '; } $('btb#u lang_list').append(html); } });
  • 如果您删除来自欧洲、保加利亚等国家的引号,它就会起作用。

    我认为您的第二个循环试图访问一个它没有的变量:

    $。每个(l,函数(键2,l2){

    在该函数中,您尝试在
    函数(键2,l2)
    中引用
    l.cs
    ,但该函数不知道
    l
    是什么,因此它返回一个空的本地对象(对于
    l.cs
    ,未定义的


    我不确定,但这是我看它的第一个猜测。

    错误在你小提琴的第81行

    改变

    l2.cs='7108'+l.cs;

    l2.cs='7108'+l[key2].cs;


    l
    是您的第一个分类(例如“欧洲”)wich没有名为
    cs
    的属性。您需要使用国家/地区的名称来获取您的属性。

    能否请您缩短代码/示例,并指出从何处获取未定义的引用?您是否尝试过:
    langs.Europe
    ?是的,这似乎是问题所在。不,问题是它应该是
    l2.cs='7108'+l2.cs;
    。但是谢谢。你指出了有错误的那一行。^^好吧,好吧,但是
    l[key2]。cs
    也能工作。很高兴你能解决你的问题。谢谢!我已经确定我在某处忘了一个“2”,但找不到它。现在它工作得很好。所以,我在这里错了。
    l
    可以访问
    langs = {
        "CRA": {flag: '',cs:'4262',as:''},
        "Reviews": {flag: '',cs:'72074301',as:''},
        "Europe": {
            "Bulgarian": {flag: 'bg',cs:'4668',as:''},
            "Croatian": {flag: 'hr',cs:'4671',as:'4707'},
            "Czech": {flag: 'cz',cs:'4365',as:'4553'},
            "Danish": {flag: 'dk',cs:'4357',as:'4526'},
            "Dutch": {flag: 'nl',cs:'4343',as:'4511'},
            "English": {flag: 'gb',cs:'4164',as:'4482'},
            "Finnish": {flag: 'fi',cs:'4092',as:''},
            "Flemish": {flag: 'be',cs:'4500',as:''},
            "French": {flag: 'fr',cs:'4344',as:'4781'},
            "German": {flag: 'de',cs:'4345',as:'4473'},
            "Hungarian": {flag: 'hu',cs:'4221',as:'4729'},
            "Italian": {flag: 'it',cs:'4348',as:'4485'},
            "Latvian": {flag: 'lv',cs:'4674',as:''},
            "Lithuanian": {flag: 'lt',cs:'4673',as:''},
            "Norwegian": {flag: 'no',cs:'4356',as:'4533'},
            "Polish": {flag: 'pl',cs:'4351',as:'4512'},
            "Spanish": {flag: 'es',cs:'4346',as:'4524'},
            "Swedish": {flag: 'se',cs:'4349',as:'4554'},
            "Portuguese (PT)": {flag: 'pt',cs:'4347',as:'4522'},
            "Romanian": {flag: 'ro',cs:'4675',as:''},
            "Turkish": {flag: 'tr',cs:'4355',as:'4530'},
        },
        "Cantonese": {flag: 'cn',cs:'',as:''},
        "Chinese": {flag: 'cn',cs:'4353',as:'4752'},
        "English": {flag: 'us',cs:'4164',as:'4482'},
        "Estonian": {flag: 'ee',cs:'4669',as:''},
        "Hebrew": {flag: 'il',cs:'4670',as:'4727'},
        "Icelanding": {flag: 'is',cs:'4672',as:''},
        "Indonesia": {flag: 'id',cs:'4368',as:'4713'},
        "Japanese": {flag: 'jp',cs:'4265',as:'4717'},
        "Korean": {flag: 'kp',cs:'4366',as:''},
        "Malay": {flag: 'ms',cs:'4367',as:''},
        "Portuguese (BR)": {flag: 'br',cs:'4552',as:'4781'},
        "Russian": {flag: 'ru',cs:'4350',as:'4559'},
        "Serbian": {flag: 'rs',cs:'4677',as:''},
        "Slovenian": {flag: 'si',cs:'4676',as:''},
        "Tagalog": {flag: '',cs:'4678',as:''},
        "Thai": {flag: 'th',cs:'4354',as:'4555'},
        "Vietnamese": {flag: 'vn',cs:'4679',as:''}
    };
    
    
    $.each( langs, function( key, l ) {
        //console.log('length L:',Object.keys(l).length,l);
        if(Object.keys(l).length > 3)
        {
                if(key == "Europe") flag = 'eu';
                else flag = '';
                html  = '<li class="dropdown-submenu">';
                html += '  <a href="#"><span class="flag flag-'+flag+'"></span> '+key+'</a>';
                html += '  <ul class="dropdown-menu">';
    
                $.each( l, function( key2, l2 ) {
                    console.log(key2,l2);
                    if(l2.cs.length < 8)
                        l2.cs = '7108' + l.cs;
                    if(l2.as.length < 8 && l2.as.length > 0)
                        l.as = '7108' + l.as;
                    if(l2.as !== '')
                    {
                        html += '<li class="dropdown-submenu">';
                        html += '  <a href="tel:'+l.cs+'"><span class="flag flag-'+l2.flag+'"></span> '+key2+'</a>';
                        html += '  <ul class="dropdown-menu">';
                        html += '    <li><a href="tel:'+l2.cs+'">CS: '+l2.cs.substring(4,8)+'</a></li>';
                        html += '    <li><a href="tel:'+l2.as+'">AS: '+l2.as.substring(4,8)+'</a></li>';
                        html += '  </ul>';
                        html += '</li>';
                    }
                    else
                    {
                        html += '<li data-lang="'+l2.flag+'">';
                        html += '  <a href="tel:'+l2.cs+'"><span class="flag flag-'+l2.flag+'"></span> '+key2+'</a>';
                        html += '</li>';
                    }
    
    
                });
    
                $('#btb_lang_list').append(html);
        }
        else
        {
            if(l.cs.length < 8)
                l.cs = '7108' + l.cs;
            if(l.as.length < 8 && l.as.length > 0)
                l.as = '7108' + l.as;
            if(l.as !== '')
            {
                html  = '<li class="dropdown-submenu">';
                html += '  <a href="tel:'+l.cs+'"><span class="flag flag-'+l.flag+'"></span> '+key+'</a>';
                html += '  <ul class="dropdown-menu">';
                html += '    <li><a href="tel:'+l.cs+'">CS: '+l.cs.substring(4,8)+'</a></li>';
                html += '    <li><a href="tel:'+l.as+'">AS: '+l.as.substring(4,8)+'</a></li>';
                html += '  </ul>';
                html += '</li>';
            }
            else
            {
                html  = '<li data-lang="'+l.flag+'">';
                html += '  <a href="tel:'+l.cs+'"><span class="flag flag-'+l.flag+'"></span> '+key+'</a>';
                html += '</li>';
            }
    
            $('#btb_lang_list').append(html);
        }
    });