Javascript 为什么不是';这个脚本在internet explorer中不工作吗?(使用V7)
我在stack overflow上的另一个线程中看到了这个脚本,并尝试使用它。现在问题来了,除了internet explorer(我使用的是版本7)之外,脚本在所有浏览器中都可以正常工作,在这里它只返回第一个字符串(如果是较大的字符串,则返回该字符串的第一行),但在所有其他浏览器中,它返回我想要的,换句话说,最长的公共子字符串。我只是想知道下面的代码中是否有一些明显的错误,你们这些聪明的家伙可以指出Internet explorer不喜欢,如果是,如何改进它? 提前感谢=)Javascript 为什么不是';这个脚本在internet explorer中不工作吗?(使用V7),javascript,html,Javascript,Html,我在stack overflow上的另一个线程中看到了这个脚本,并尝试使用它。现在问题来了,除了internet explorer(我使用的是版本7)之外,脚本在所有浏览器中都可以正常工作,在这里它只返回第一个字符串(如果是较大的字符串,则返回该字符串的第一行),但在所有其他浏览器中,它返回我想要的,换句话说,最长的公共子字符串。我只是想知道下面的代码中是否有一些明显的错误,你们这些聪明的家伙可以指出Internet explorer不喜欢,如果是,如何改进它? 提前感谢=) 函数longest
函数longestCommonSubstring(string1、string2){
//初始最大值
var longestCommonSubstring=0;
var theCommonString='';
//使用0初始化二维数组
var table=数组(string1.length);
对于(a=0;aIE7,不允许您在执行操作时以数组的形式访问字符串;您需要改用substring属性:
if(string1.substring(i, i + 1)==string2.substring(j, j + 1)){
如果你想知道的话,我在这里和那里放置了一些警告语句来解决这个问题:在字符串比较成功后,Firefox显示“a=a”,而IE7显示“undefined=undefined”:^ \好吧,这些可能不是你的问题,但请确保“a”和“b”是正确的在第一个嵌套循环中,使用var
声明,并且在初始化数组时,只使用[]
而不是Array(something)
@Pointy不,谢谢=)请确保您使用的是!==和===它们不执行类型强制。@Greg Guida我这样做了,但仍然不起作用:/抱歉,这里还有一个小小的修正,@Pointy忘了提到table=[string1.length]
只会生成table[0]==string1.length
。JavaScript中的数组是动态的,因此不需要像Java中那样为它们指定长度。
function longestCommonSubstring(string1, string2){
// init max value
var longestCommonSubstring = 0;
var theCommonString = '';
var a;
var b;
// init 2D array with 0
var table = [string1.length];
for(a = 0; a <= string1.length; a++){
table[a] = [string2.length];
for(b = 0; b <= string2.length; b++){
table[a][b] = 0;
}
}
// fill table
for(var i = 0; i < string1.length; i++){
for(var j = 0; j < string2.length; j++){
if(string1[i]===string2[j]){
if(table[i][j] === 0){
table[i+1][j+1] = 1;
} else {
table[i+1][j+1] = table[i][j] + 1;
}
if(table[i+1][j+1] > longestCommonSubstring){
longestCommonSubstring = table[i+1][j+1];
theCommonString = string1.substr(i + 1 - longestCommonSubstring, longestCommonSubstring);
}
} else {
table[i+1][j+1] = 0;
}
}
}
return theCommonString;
}
if(string1.substring(i, i + 1)==string2.substring(j, j + 1)){