我认为我的代码很明显。
如果我使用!==
运算符,为什么我的代码会返回整个字符串?我知道Javascript中的数组从索引0
开始,在这里我输入整个文件名作为参数,因此indexOf(".")
将始终大于0
。不,我没有在这里传递.htaccess文件。
function getFileExtension(i) {
// return the file extension (with no period) if it has one, otherwise false
if(i.indexOf(".") !== 0) { //
return i.slice(i.indexOf(".") + 1, i.length);
} else {
return false;
}
}
// here we go! Given a filename in a string (like 'test.jpg'),
getFileExtension('pictureofmepdf'); return given string
// both operand are same type and value
但如果我将比较改为
(i.indexOf(".") > 0) // logs false
P.S。我是你要问的情况,这是形式usvsth3m。
答案 0 :(得分:2)
indexOf()
返回子字符串的索引,因此可以返回0
,这意味着子字符串出现在位置0
。如果未找到子字符串,则返回-1
,因此请更改if
语句以反映此逻辑:
if(i.indexOf(".") >= 0)
此外,您应该使用substring()
从字符串中提取子字符串 - slice()
用于数组。
return i.substring(i.indexOf(".") + 1, i.length);
不过,我认为更好的方法是使用split()
:
var fileNameArray = i.split("."); // "foo.txt" --> ["foo" "txt"]
if(fileNameArray.length >= 2) {
return fileNameArray[1];
} else {
return false; //maybe you want to return "" instead?
}
答案 1 :(得分:2)
String方法indexOf
返回(如果已建立)您搜索的字符串的第一个索引,并记住,index可以为零,这就是为什么您必须进行严格的比较以检查{{1它没有返回布尔值false 。
我建议您在这种情况下使用indexOf
,因为名为lastIndexOf
的文件会将something.min.js
作为有效的扩展名返回,而不是。
答案 2 :(得分:1)
嗯,为了简化,我省略indexOf返回索引这是一个数字类型,或 -1 ,如果找不到给定值,则不返回布尔值FALSE。所以在比较-1到0的情况下,结果是真的,这就是为什么我实际上输出了给定的字符串,而不是假。好吧,MDN现在在我的书签栏中
var z = -1;
console.log(z >= 0); // evaluates false because -1 < 0
console.log(z !== 0); // evaluates true because -1 !== 0
// also if z > 0 it is !== 0, but could be < 0
所以下一个代码就像魅力一样。
function getFileExtension(i) {
// i will be a string, but it may not have a file extension.
// return the file extension (with no period) if it has one, otherwise false
if(i.indexOf(".") >= 0) {
return i.substring(i.indexOf(".") + 1, i.length);
} else {
return false;
}
}
getFileExtension('pictureofmepdf');