JS赋值运算符:赋值给由条件运算符表达式确定的变量

时间:2016-05-20 04:28:33

标签: javascript

我今天试着这样做。 JavaScript不允许我这样做。

没有解决方法吗?

$ node
> var x = []
undefined
> var y = [2]
undefined
> var f = false
undefined
> (f ? x : y).push(3)
2
> x
[]
> y
[ 2, 3 ]
> (f ? x : y) = [] // clear y
ReferenceError: Invalid left-hand side in assignment
    at Object.exports.createScript (vm.js:24:10)
    at yada yada...

这是难题。我可以这样写:

var z = (f ? x : y);
z = [];

这实际上无法清除y,因为xyz是引用(它们不是原始类型)

显然f这里介绍的是一个简单的平凡,我的想法是我想在表达式上使用赋值运算符,它看起来不够强大,无法以这种方式工作。

1 个答案:

答案 0 :(得分:2)

分配操作符不是或不是强大的"。 JS的一个基本特征是变量不包含对其他变量的引用,换句话说,你不能"别名"变量。换句话说,你不能计算或以其他方式持有一个"指针"变量。

明显的解决方法是使用对象属性,在这种情况下,您可以使用属性名称作为一种"指针":

var o = {x: [], y: [2]};
var z = f ? 'x' : 'y';
o[z] = [];