" undefined不是一个函数"与pop分开

时间:2014-08-14 17:58:00

标签: javascript split pop

我有一个名为ret的文件名数组。 我想得到每个文件名的扩展名。

var cList="";
var fName="";
var ext="";
for(var i=0;i<=ret.length-1;i++){                       
    fName=ret[i];               
        ext=fName.split('.').pop();
        if(ext=="msi"){
            cList+="<br><span class='bld'>Yield Monitor Simulators</span><p>";
        }   
        cList+="<a target='_blank' href='"+httpBase+"cheatsheets/"+fName+"'>"+fName+"</a><br>";
}   

但是就行了:

ext=fName.split('.').pop();

我收到错误:“Uncaught TypeError:undefined不是函数”

为什么?

加入: 如果我只是注意到违规行,我会按预期获得文件列表。

                var cList="";
                var fName="";
                var ext="";
                for(var i=0;i<=ret.length-1;i++){                       
                        fName=ret[i];               
                        //ext=fName.split('.').pop();
                        if(ext=="msi"){
                            cList+="<br><span class='bld'>Yield Monitor Simulators</span><p>";
                        }   
                        cList+="<a target='_blank' href='"+httpBase+"cheatsheets/"+fName+"'>"+fName+"</a><br>";


                    }   

enter image description here

仍然是jsfiddle,所以它必须是我的代码中的东西......

2 个答案:

答案 0 :(得分:2)

解决方案是将toString()添加到fName变量。

fName=ret[i].toString();    

显然从字符串值数组中获取的值不是字符串?

稍后补充:

for(var i=0;i<=ret.length-1;i++){                   
      console.log(i, ret[i]);
      console.log(i, ret[i], ret[i].split('.'), ret[i].split('.').pop());       
        fName=ret[i].toString();    
第一个迭代控制台上的

说:

0 ["2020.pdf"] index.js:115
Uncaught TypeError: undefined is not a function 

答案 1 :(得分:1)

ret是一个包含数组的数组,其中包含一个字符串...而不是您期望的字符串数组,请检查ret的值:

[] means an array in javascript
["astring"] is an array containing a string
["astring",99] is an array containing a string at index 0 and a number at index 1

如果你在循环之前调试.log(ret),你可能会得到类似的东西:

[["string"],["string"],["string"]...]
instead of ["string","string","string"...]

这里需要一些javascript语法修改...努力工作