var arr = [];
var a1;
arr.push( ( (a1 = [1, 2, 'random']).num = 5 ) && a1 )
有没有办法不必定义变量a1
并在设置a1
属性后推送数组num
。
如果我要取出&& a1
,则5
号码会被推送到arr
。所以无论如何都要推送数组而不必定义a1
?
答案 0 :(得分:0)
为什么不定义辅助函数?
function set(obj, name, value) {
obj[name] = value;
return obj;
}
var arr = [];
arr.push( set([1, 2, 'random'], 'num', 5) );
甚至一个例子:
var arr = [];
var a1 = [1, 2, 'random'];
a1.num = 5;
arr.push(a1);
会更具可读性。
答案 1 :(得分:0)
我可以缩短此代码的唯一方法是完全不使用a1的变量声明:
var arr = [];
//var a1;
arr.push( ( (a1 = [1, 2, 'random']).num = 5 ) && a1 );
这实际上有效,但我认为保留变量定义可能更好。
你可以这样做:
var a1=( (a1 = [1, 2, 'random']).num = 5 ) && a1;
arr.push(a1);
至少现在你没有空的变量声明。
我对我的第二个解决方案进行了测试,看看a1是否实际上是全局定义的,然后才存储在本地变量a1中:
var array=[];
function scopeTest(){
biff=10;// Global
var a1 = (( a1 = [1, 2, 'random']).num = 5 ) && a1;// Private?
array.push(a1);
}
scopeTest();
alert("array: "+array);// 1,2,random
alert("array[0].num: "+array[0].num);// 5
alert("biff: "+biff);// 10
alert("a1: "+a1);//a1 is undefined and therefore not global.
以这种方式定义a1完全没问题!