2010-12-03 89 views
2
var adList = new Array(); 
    adList[0]["img"] = 'http://www.gamer-source.com/image/media/screenshot/thumbnail/489.jpg';/* 
    adList[0]["h3"] = 'Product title2'; 
    adList[0]["button"]["link"] = '#link-url'; 
    adList[0]["button"]["text"] = 'Buy now'; 
    adList[0]["h3"] = 'asdfasdfasdf'; 

    adList[1]["img"] = 'http://www.gamer-source.com/image/media/screenshot/thumbnail/489.jpg'; 
    adList[1]["h3"] = 'Product title2'; 
    adList[1]["button"]["link"] = '#link-url'; 
    adList[1]["button"]["text"] = 'Buy now'; 
    adList[1]["h3"] = 'asdfasdfasdf'; 

我得到一个错误adList[0] is undefined,我可以不定义这样的数组吗?在为变量赋值之前,是否需要指定adList[0]作为数组?JS阵列 - 如何构建阵列

回答

4

问题是,您正在尝试引用adList[0],它没有赋值给它。所以,当您尝试访问的adList[0]['img']值,出现这种情况:

adList   -> Array 
adList[0]  -> undefined 
adList[0]["img"] -> Error, attempting to access property of undefined. 

尝试使用数组和对象的文字符号,而不是定义它。

adList = [{ 
    img: 'http://www.gamer-source.com/image/media/screenshot/thumbnail/489.jpg', 
    h3: 'Product title 1', 
    button: { 
     text: 'Buy now', 
     url: '#link-url' 
    } 
}, 
{ 
    img: 'http://www.gamer-source.com/image/media/screenshot/thumbnail/489.jpg', 
    h3: 'Product title 2', 
    button: { 
     text: 'Buy now', 
     url: '#link-url' 
    } 
}]; 

或者你可以简单地定义adList[0]adList[1]分别与使用旧代码:

var adList = new Array(); 
adList[0] = {}; 
adList[1] = {}; 
adList[0]["img"] = 'http://www.gamer-source.com/image/media/screenshot/thumbnail/489.jpg'; 
... etc etc 
+1

打败我吧:P这里是一个JSFiddle,展示了我将要使用的数组/对象组合的实例。 http://jsfiddle.net/subhaze/A8vmX/ – subhaze 2010-12-03 02:31:07

2

你必须做到:

adList[0] = new Array(); 

以类似的方式你如何创建adList本身。

1

你必须指定数组包含的内容,然后才能开始使用它。它就像试图使用任何其他未初始化的变量。

var adList = new Array(); 
sizeOfArray = 5; 
for (var i=0; i < sizeOfArray; i++) { 
    adList[i] = new Array(); 
} 

adList[0]["img"] = 'http://www.gamer-source.com/image/media/screenshot/thumbnail/489.jpg'; 

这将用数组初始化0-4的adList的内容。那么你可以继续分配它们的值。

请注意,adList[0]["img"]实际上并未使用数组的索引。由于该数组是一个对象,它可以让你设置它的属性。这与adList[0].img相同。

2

您还可以使用对象的符号:

adList = [ 
{ 
    "img": 'http://www.gamer-source.com/image/media/screenshot/thumbnail/489.jpg', 
    "h3": 'Product title2', 
    "button": {"link": '#link-url', 
       "text": 'Buy now'}, 
    "h3": 'asdfasdfasdf' 
}, { 
    "img": 'http://www.gamer-source.com/image/media/screenshot/thumbnail/489.jpg', 
    "h3": 'Product title2', 
    "button": {"link": '#link-url', 
       "text": 'Buy now'}, 
    "h3": 'asdfasdfasdf' 
}]; 
+0

伟大的思想家都认为。更高的思想思考得更快:p。 – 2010-12-03 02:16:27

1

您的问题是adList[0]adList[1]尚未初始化。这与adList是一个数组无关。

因此,在分配属性值之前adList[0] = new Object();应该适用于您正在尝试执行的操作。

var adList = new Array(); 
    adList[0] = new Object(); 
    adList[0]["img"] = 'http://www.gamer-source.com/image/media/screenshot/thumbnail/489.jpg';/* 
    adList[0]["h3"] = 'Product title2'; 
    adList[0]["button"]["link"] = '#link-url'; 
    adList[0]["button"]["text"] = 'Buy now'; 
    adList[0]["h3"] = 'asdfasdfasdf'; 

    adList[1] = new Object(); 
    adList[1]["img"] = 'http://www.gamer-source.com/image/media/screenshot/thumbnail/489.jpg'; 
    adList[1]["h3"] = 'Product title2'; 
    adList[1]["button"]["link"] = '#link-url'; 
    adList[1]["button"]["text"] = 'Buy now'; 
    adList[1]["h3"] = 'asdfasdfasdf';