如何扭转回报价值?

时间:2015-02-11 02:15:40

标签: javascript

var arr = [];


var a1;
arr.push( ( (a1 = [1, 2, 'random']).num = 5 ) && a1 )

有没有办法不必定义变量a1并在设置a1属性后推送数组num

如果我要取出&& a1,则5号码会被推送到arr。所以无论如何都要推送数组而不必定义a1

2 个答案:

答案 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完全没问题!