gpt4 book ai didi

javascript:for (i in str),FF 之外嵌套的奇怪结果?

转载 作者:行者123 更新时间:2023-11-29 18:35:14 25 4
gpt4 key购买 nike

我现在很困惑,有人能给我解释一下吗?也许这是我没有注意到的小事,但我很困惑为什么这不是我预期的结果。

我已经创建了一个示例来展示我遇到的问题...

Sample 1

var dataString = "abc";

document.write(" This is a test ... " + "<br/>")
for (i in dataString ) {
document.write("<br/> +" + dataString[i] + ": ")
for (k in dataString ) {
document.write(" ="+dataString[k] +", ");
}
}

现在,我在 Chrome 中的结果是:

This is a test ... 

+a:
+b:

FireFox 中是:(这是我预期的结果)

This is a test ... 

+a: =a, =b, =c,
+b: =a, =b, =c,
+c: =a, =b, =c,

IE8 中的结果是:

This is a test ... 

谁能给我解释一下这里发生了什么?我错过了一些重要的事情吗?

注意:根据 this example,您可以使用 "abc".split("") 跨浏览器将字符串转换为数组, 请记住,这不再是字符串,现在如果您输出它,它将输出为数组 a,b,c

最佳答案

for (i in dataString ) {
document.write("<br/> +" + dataString[i] + ": ")

这不是 JavaScript 标准 (*) 的一部分,字符串应该将其字符作为编号属性进行访问;这是最初由 Mozilla 引入的扩展。因此 dataString[i] 在包括 IE<8 在内的旧浏览器上将是 undefined

要正确访问字符串中的字符,您应该使用 charAt

出于同样的原因,for...in 不会遍历所有浏览器中的索引。

即使这样做了,使用它也是错误的,因为 for...in 用于枚举 Object 中的属性 ({ }) 映射,遍历序列。 for...in 不应在 ArrayString 上使用,因为您将获得该实例的所有成员,而不仅仅是数字-索引的,并且不能保证您会以任何特定的顺序获得它们。

对于 ArrayString,正确的循环是老式的 for i 循环。并且您应该使用 var,即使它是一个全局变量。

document.write(' This is a test ... <br/>');
for (var i= 0; i<dataString.length; i++) {
document.write('<br/> +'+dataString.charAt(i)+': ');
for (var k= 0; k<dataString.length; k++) {
document.write(' ='+dataString.charAt(k)+', ');
}
}

(*:好吧......不是在 ECMAScript 第三版中。新的第五版声明字符串具有“数组索引名称”,这可能是对该功能的认可。似乎有点不清楚)

关于javascript:for (i in str),FF 之外嵌套的奇怪结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3918043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com