1

我通过两种不同的方式创建对象并尝试接触它们并操纵它们。我通过对象构造函数创建的对象它可以工作,但我尝试通过文字表示法做的同样的事情不起作用。我不明白。

这是代码,它会比我更好地解释自己:

var numberOne = new Object();
rand = Math.random();
numberOne[rand] = "random number";
console.log(numberOne); //return 0.6761925128922479: "random number"



var numberTwo = {}; //code doesnt work.
numberTwo.rando = Math.random();
numberTwo[rando] = "another random number";

console.log(numberTwo); //error
4

5 回答 5

0

有用:

var numberTwo = {};
rand = Math.random();
numberTwo[rand] = "another random number";
console.log(numberTwo);

在您的解决方案numberTwo中没有初始化rand属性

于 2015-02-03T16:32:17.373 回答
0

它不起作用,因为您的索引 random 保存到 numberTwo 对象而不是 rando 变量中。您需要引用保存到 numberTwo 对象中的索引,如下所示:

 numberTwo[numberTwo.rando];

所以,你的代码必须是这样的:

var numberTwo = {}; 
numberTwo.rando = Math.random(); // numberTwo.rando contains some random number
numberTwo[numberTwo.rando] = "another random number"; //now it is correct
于 2015-02-03T16:36:33.910 回答
0

我相信这就是你想要的:

var numberOne = new Object();
var rand = Math.random();
numberOne[rand] = "random number";
console.log(numberOne);

var numberTwo = {};
rand = Math.random();
numberTwo[rand] = "another random number";

console.log(numberTwo);

numberTwo[rando] = "another random number";你的代码因为rando不存在而中断。

于 2015-02-03T16:38:39.673 回答
0

这两个不是等价的。

在第一个中,您创建一个名称为随机数的属性,并为该属性分配一个字符串作为值:

rand = Math.random();
numberOne[rand] = "random number";

您的测试表明://return 0.6761925128922479: "random number"

在第二个中,您创建一个名为“rando”的属性并为其分配一个随机数值。然后您尝试将字符串值分配给不存在的属性,因为您正在使用rando(不存在的变量)而不是"rando"(字符串)来尝试访问您之前创建的属性。

numberTwo.rando = Math.random();
numberTwo[rando] = "another random number";

如果您对两者都使用相同的方法,它们都会起作用。像这样:

var numberOne = new Object();
rand = Math.random();
numberOne[rand] = "random number";
console.log(numberOne);

var numberTwo = {};
rando = Math.random(); // <---- The different line
numberTwo[rando] = "another random number";
console.log(numberTwo);
于 2015-02-03T16:39:31.577 回答
0

这些不是一回事。

在第一种情况下,您将字符串分配给随机生成的密钥。

var numberOne = new Object();  // create an object
rand = Math.random();  // make a random number
numberOne[rand] = "random number";  // use the random number as a key name and assign the string as its value

在第二个中,您将一个随机数分配给一个名为 的键rando,然后尝试将一个字符串分配给一个名为该rando变量的键(未定义)。

var numberTwo = {}; // create an object.
numberTwo.rando = Math.random();  // assign a random number to key named rando
numberTwo[rando] = "another random number";  // here, rando is undefined variable and causes an error.

要使第二个示例正常工作,只需执行您在第一个示例中所做的 wkat,只需将新的 Object 构造函数更改为对象文字,或者:

var numberTwo = {}; // create an object.
numberTwo.rando = Math.random();  // assign a random number to key named rando
numberTwo[numberTwo.rando] = "another random number";   // use the value of numberTwo.rando as a key name

现在numberTwo看起来像这样:

Object {rando: 0.7977171319071203, 0.7977171319071203: "another random number"}

这里的关键区别在于,object.keyname = x将值分配给名为 的键keyname,而object[keyname] = x解析名为的变量keyname的值并将值分配给以该值命名的键。(例如var keyname = "xy"; object[keyname] = 'x';将产生一个对象{ xy: 'x' }

于 2015-02-03T16:42:36.657 回答