在这个琐碎的问题上,我几个小时都在撞墙。
我只是想尝试执行以下代码所显示的内容,但它对我不起作用。它在JSFiddle中工作正常,但不适用于我的环境。如果你之前读过这篇文章,我会重新发布,因为我很绝望,每个人都抓住了错字,这不是真正的问题。哎呀。我
如果我定义了一个toString方法,那么由于某种原因。如果我定义了一个getMid()函数,那就不行了。如果我使用toString作为一个hacky getMid()函数,它的工作原理。我很困惑。
我的doctype或任何其他html / js标题可能会影响它吗?我只是使用<!DOCTYPE HTML>
。
这在所有浏览器中都失败了,我在另一台计算机上尝试过。谢谢你帮我解开这个谜。
function Card (first , last , mid) {
this.first = first ;
this.last = last ;
this.mid = mid ;
}
var testArray = [ new Card("A", "B", "C"), new Card("D", "E", "E") ];
alert(testArray[1].mid);
再次感谢,戴尔
编辑在testArray赋值后添加“可选”分号。
我期待任何事情,但未定义。我想我已经把它缩小了。正在构建testArray:
alert(availableCardsForSet[0].cost);
for (var int = 0; int < 10 && testArray.length < 10; int++) {
testArray.push(availableCardsForSet.splice(Math.floor(Math.random()*availableCardsForSet.length),1));
}
alert(testArray[0].cost);
alert(testArray[0].toString());
第一个警报给了我一个有效的结果。第二个警报给我未定义。奇怪的是,finalSet [0] .toString给了我一个有效的结果。所以我认为这可能是由于我如何在我的for循环中打破这个东西。当我通过JSLint运行它时出现以下错误/警告问题在“第15行字符14:无法设置属性'第一个'未定义”第15行是for循环的内容。我感谢所有的回复。希望这些新信息能够提供帮助。
答案 0 :(得分:1)
splice函数返回一个包含已删除元素的数组。如果仅删除一个元素,则返回一个元素的数组。 (source)
这意味着此代码将包含对象的数组添加到testArray,而不是仅添加对象:
testArray.push(availableCardsForSet.splice(Math.floor(Math.random()*availableCardsForSet.length),1));
可以使用[0]
testArray.push(availableCardsForSet.splice(Math.floor(Math.random()*availableCardsForSet.length),1)[0]);
以下是一个示例:http://jsfiddle.net/grc4/8Auvm/
答案 1 :(得分:0)
我尝试使用下面的doctype,它适用于我,
浏览器测试:IE8,Firefox3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
功能卡(第一,最后,中){
this.first = first;
this.last = last;
this.mid = mid;
}
var testArray = [新卡(“A”,“B”,“C”),新卡(“D”,“E”,“F”)];
警报(testArray [1] .mid) ;