在 javascript 创建对象和操作属性
in javascript creating object and manipulating properties
我通过两种不同的方式创建对象并尝试访问它们并操纵它们。我通过对象构造函数创建的对象可以工作,但我尝试通过文字表示法做的同样的事情不起作用。没看懂。
这是代码,它会比我更好地解释自己:
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
有效:
var numberTwo = {};
rand = Math.random();
numberTwo[rand] = "another random number";
console.log(numberTwo);
在你的解决方案中 numberTwo
没有初始化 rand
属性
它不起作用,因为您的索引随机保存在 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
我相信这就是你想要的:
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
不存在。
这两个不等价。
在第一个中,您创建一个名称为随机数的 属性 并为该 属性 分配一个字符串作为值:
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);
这些不是一回事。
在第一种情况下,您将字符串分配给随机生成的密钥。
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.
要使第二个示例正常工作,只需将新的 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' }
.
我通过两种不同的方式创建对象并尝试访问它们并操纵它们。我通过对象构造函数创建的对象可以工作,但我尝试通过文字表示法做的同样的事情不起作用。没看懂。
这是代码,它会比我更好地解释自己:
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
有效:
var numberTwo = {};
rand = Math.random();
numberTwo[rand] = "another random number";
console.log(numberTwo);
在你的解决方案中 numberTwo
没有初始化 rand
属性
它不起作用,因为您的索引随机保存在 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
我相信这就是你想要的:
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
不存在。
这两个不等价。
在第一个中,您创建一个名称为随机数的 属性 并为该 属性 分配一个字符串作为值:
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);
这些不是一回事。
在第一种情况下,您将字符串分配给随机生成的密钥。
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.
要使第二个示例正常工作,只需将新的 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' }
.