【问题标题】:Why does javascript reads var as a string if i add '+' to it?如果我在其中添加“+”,为什么 javascript 会将 var 读取为字符串?
【发布时间】:2021-03-11 13:36:05
【问题描述】:

我的 firestore 文档中有字段名称

videolink1-“一些视频链接”

videolink2-“一些视频链接”

videolink3-“一些视频链接”

我正在使用 for 循环来获取文档中存在的所有视频链接。

                if (doc.exists) {
                  
                   for (var i = 1; i == videocount; i++) { //videocount is 3

                    var data = doc.data();
                    var videolink = data.videolink+i;

  //creating new paragraph
                    var p = '<p class ="trackvideostyle">'+"Your Video Link : "+String(videolink)+'</p>\';

                    document.getElementById("btn").insertAdjacentHTML('beforebegin', p);

                    }

但是这个 for 循环正在创建 var 值,这些值被读取为字符串,而 firestore 正在返回 NaN,因为我没有这些字段:

data.videolink+1

data.videolink+2   //Firestore is returning null as i dont have these document fields

data.videolink+3

如何编写 for 循环,以便像这样创建 var 值,而 firestore 将其读取为:

videolink1

videolink2

videolink3

【问题讨论】:

    标签: javascript html google-cloud-firestore


    【解决方案1】:

    我觉得你可以试试这样的,

    var videolink = data[`videolink${i}`];
    

    参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

    【讨论】:

      【解决方案2】:

      你可以使用

      1。模板字符串

      ..
      var videolink = `${data.videolink}${i}`
      ..
      

      2。连接()

      .. 
      var videolink = data.videolink.concat(i.toString());
      ..
      

      【讨论】:

        【解决方案3】:

        您正在使用“data.videolink+i”,而 javascript 不会评估“。”之后的值。相反,它被视为对象的属性。您需要使用 [] 进行评估。试试这个,我希望这会奏效

                if (doc.exists) {
                                
                    for (var i = 1; i == videocount; i++) {
        
                    var data = doc.data();
                    var videolink = data[videolink+i];
        
                //creating new paragraph
                    var p = '<p class ="trackvideostyle">'+"Your Video Link : 
                "+String(videolink)+'</p>\';
        
                    document.getElementById("btn").insertAdjacentHTML('beforebegin', 
                 p);
        
                    }
        

        【讨论】:

          【解决方案4】:

          为什么它不起作用

          点运算符(属性访问器)具有higher precendense,因此首先对其求值,因此您获取属性的值,然后连接您的i 变量的值。

          你应该怎么做

          您可以使用另一个属性访问器 - 方括号,就像在数组中一样:

          data['videolink']
          

          您可以在方括号内构建您的属性名称:

          data['videolink' + i]
          

          或使用模板文字:

          data[`videolink${i}`]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-19
            • 1970-01-01
            • 1970-01-01
            • 2013-03-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多