JS对象未定义的问题

时间:2011-05-11 12:11:02

标签: javascript

<script type="text/javascript">
var X = {
   a: [{name:john, phone:777},{name:john, phone:777},{name:john, phone:777}],
   b: [{name:john, phone:777},{name:john, phone:777},{name:john, phone:777}],
   c: [{name:john, phone:777},{name:john, phone:777},{name:john, phone:777}],
   d: [{name:john, phone:777},{name:john, phone:777},{name:john, phone:777}]


}

var str = JSON.stringify(X);
alert(str);


</script>

这个对象出了什么问题?它警告“Uncaught ReferenceError:john未定义” 怎么来的?

3 个答案:

答案 0 :(得分:8)

你需要约翰周围的报价。否则它指的是尚未创建的变量/对象:

var X = {
  a: [{name:"john", phone:777},{name:"john", phone:777},{name:"john", phone:777}]
...

如果先前已定义john,您的代码将有效:

var john = "john";
var X = {
  a: [{name:john, phone:777},{name:john, phone:777},{name:john, phone:777}]
  ...

现在john是一个表示字符串“john”的变量,JSON是有效的。

答案 1 :(得分:5)

尝试name: 'john',您希望它是一个字符串。

如果您只是编写john,它将被解释为对名为john的变量(包括可能的函数)的查找。由于它没有找到具有该名称的变量,因此会说它没有定义。

phone相同,如果值可以是123-456-78(将被解释为123减去456减去78)。如果只有数字,那么您的解决方案就像现在一样好,否则请使用'123-456-78'

答案 2 :(得分:0)

如下所示更改X.对象属性名称应为单引号或双引号。字符串值也应该引用。

var X = {
   a: [{"name":"john", "phone":777},{"name":"john", "phone":777},{"name":"john", "phone":777}],
...
};