Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
除了下面的方法之外,还有其他方法在Javascript中声明对象吗?_Javascript - Fatal编程技术网

除了下面的方法之外,还有其他方法在Javascript中声明对象吗?

除了下面的方法之外,还有其他方法在Javascript中声明对象吗?,javascript,Javascript,我在工作中查看的几个javascript示例中都看到过这种类型的代码。我认为,但不确定tempBall是否应该是具有属性的对象,例如x、y、nextX、nextY等等 是否有一种更具可读性的方法可以做到这一点,并使代码工作相同。对我来说,声明这样的变量似乎很奇怪 var tempBall; 然后开始向变量添加属性 问题:您是否可以声明一个var变量,然后在有需要时为其分配属性?是否有更好的做法可以遵循? 代码: 在javascript中,您只需执行以下操作: var tempBall = {

我在工作中查看的几个javascript示例中都看到过这种类型的代码。我认为,但不确定tempBall是否应该是具有属性的对象,例如x、y、nextX、nextY等等

是否有一种更具可读性的方法可以做到这一点,并使代码工作相同。对我来说,声明这样的变量似乎很奇怪

var tempBall;
然后开始向变量添加属性

问题:您是否可以声明一个var变量,然后在有需要时为其分配属性?是否有更好的做法可以遵循?

代码:


在javascript中,您只需执行以下操作:

 var tempBall = {x:tempX,y:tempY, nextX: tempX, nextY: tempY, radius:tempRadius, speed:tempSpeed, angle:tempAngle, velocityx:tempvelocityx, velocityy:tempvelocityy, mass:tempRadius};
如果您需要在变量的作用域中使用它,那么您将首先声明变量并在以后分配值的唯一时间是获取它

假设我有一个全局变量tempBall,我想在函数中设置它的属性,但仍然保持全局可用:

var tempBall;

function someFuntion(someInput){
     tempBall = someInput;
}
在此处阅读有关javascript变量作用域的更多信息:


当您第一次阅读JavaScript时,它可能会让您感到困惑,特别是因为它并不能让您声明变量的类型。任何未声明变量的默认值都是未定义的

所以,你可以选择

var tempBall = {};

   tempBall = {x:tempX,y:tempY, nextX: tempX, nextY: tempY, radius:tempRadius, speed:tempSpeed, angle:tempAngle, velocityx:tempvelocityx, velocityy:tempvelocityy, mass:tempRadius};

tempBall.foo = 'bar';
或者只是

var tempBall = {x:tempX,y:tempY, nextX: tempX, nextY: tempY, radius:tempRadius, speed:tempSpeed, angle:tempAngle, velocityx:tempvelocityx, velocityy:tempvelocityy, mass:tempRadius};
但没有什么能阻止你在下一行这样做:

tempBall = 'str';

当然,我并不是建议您这样做:)。

JavaScript有两种主要的方法在声明对象后为其分配属性:

var tempBall = {};
// Explicitly named property
tempBall.foo = 'bar';
// Property name as a string
tempBall['foo'] = 'bar';

// You can also pass a variable rather than a static string
var key = 'foo';
tempBall[key] = 'bar';
问:您是否可以声明一个var变量,然后在有需要时为其分配属性?是否有更好的做法可以遵循

我想你可能指的是这样的东西

function dothings(){
  var anArray=[],
  i=0,
  j=0,
  ball,
  person;

  //... do some stuff

  person = { name: "..." };
  ball = { x: 0, y: 0 };

  // etc..
}
为什么所有变量都是在函数开始时声明的,而不是在需要时稍后声明的?(也许这就是你要找的)

如果是这样的话,这基本上是为了让你免于评论中提到的变量提升带来的麻烦


克罗克福德也这么说。这就是惯例。请参阅变量声明

您可以像以前一样静态声明javascript对象和属性,也可以随时使用代码添加属性,只需使用
tempBall.whatever=“foo”为对象指定属性/值即可。这两种技术都可以使用。使用哪一种取决于具体情况。如果适合您的情况,通常认为一个包含多个属性的静态声明比使用单独的代码行添加每个属性更好。您应该在JavaScript中查找变量提升,以了解为什么声明和初始化经常是分开的。
function dothings(){
  var anArray=[],
  i=0,
  j=0,
  ball,
  person;

  //... do some stuff

  person = { name: "..." };
  ball = { x: 0, y: 0 };

  // etc..
}