为什么下面的工作?
<something>.stop().animate(
{ 'top' : 10 }, 10
);
然而这是行不通的:
var thetop = 'top';
<something>.stop().animate(
{ thetop : 10 }, 10
);
更清楚地说:目前我还不能将CSS属性作为变量传递给动画函数。
为什么下面的工作?
<something>.stop().animate(
{ 'top' : 10 }, 10
);
然而这是行不通的:
var thetop = 'top';
<something>.stop().animate(
{ thetop : 10 }, 10
);
更清楚地说:目前我还不能将CSS属性作为变量传递给动画函数。
当前回答
这样也可以实现预期的输出
var jsonobj={}; 变量计数=0; $(document).on('click','#btnadd', function() { jsonobj[count]=new Array({ “1” : $(“#txtone”).val()},{ “2” : $(“#txttwo”).val()}); 计数++; console.clear(); console.log(jsonobj); }); <script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js”></script> <span>值 1</span><输入 id=“txtone” 类型=“文本”/> <span>值 2</span><输入 id=“txttwo” 类型=“文本”/> <按钮 id=“btnadd”>添加</button>
其他回答
ES5引用说它不应该工作
注意:ES6的规则已经更改:https://stackoverflow.com/a/2274327/895245
规范:http://www.ecma-international.org/ecma-262/5.1/ # sec-11.1.5
PropertyName : IdentifierName StringLiteral NumericLiteral [...] The production PropertyName : IdentifierName is evaluated as follows: Return the String value containing the same sequence of characters as the IdentifierName. The production PropertyName : StringLiteral is evaluated as follows: Return the SV [String value] of the StringLiteral. The production PropertyName : NumericLiteral is evaluated as follows: Let nbr be the result of forming the value of the NumericLiteral. Return ToString(nbr).
这意味着:
{theTop: 10}与{'theTop': 10}完全相同 PropertyName theTop是一个IdentifierName,所以它被转换为'theTop'字符串值,这是'theTop'的字符串值。 不可能用变量键编写对象初始化式(字面量)。 仅有的三个选项是IdentifierName(扩展为字符串文字),StringLiteral和NumericLiteral(也扩展为字符串)。
如果你想要对象键与变量名相同,在es2015有一个简短的手。 ECMAScript 2015中的新符号
var thetop = 10;
var obj = { thetop };
console.log(obj.thetop); // print 10
我已经使用下面的方法来添加一个具有“动态”名称的属性到对象:
var key = 'top';
$('#myElement').animate(
(function(o) { o[key]=10; return o;})({left: 20, width: 100}),
10
);
Key是新属性的名称。
传递给animate的属性对象将是{left: 20, width: 100, top: 10}
这只是使用了其他答案所推荐的必需的[]符号,但是代码行数更少!
你可以这样做:
var thetop = 'top';
<something>.stop().animate(
new function() {this[thetop] = 10;}, 10
);
{thetop: 10}是一个有效的对象字面值。这段代码将创建一个属性为thetop的对象,值为10。以下两种情况相同:
obj = { thetop : 10 };
obj = { "thetop" : 10 };
在ES5及更早的版本中,不能在对象文字中使用变量作为属性名。你唯一的选择是做以下事情:
var thetop = "top";
// create the object literal
var aniArgs = {};
// Assign the variable property name with a value of 10
aniArgs[thetop] = 10;
// Pass the resulting object to the animate method
<something>.stop().animate(
aniArgs, 10
);
ES6将ComputedPropertyName定义为对象字面量语法的一部分,这允许你像这样编写代码:
var thetop = "top",
obj = { [thetop]: 10 };
console.log(obj.top); // -> 10
您可以在每个主流浏览器的最新版本中使用这种新语法。