我今天试着这样做。 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
,因为x
,y
和z
是引用(它们不是原始类型)
显然f
这里介绍的是一个简单的平凡,我的想法是我想在表达式上使用赋值运算符,它看起来不够强大,无法以这种方式工作。
答案 0 :(得分:2)
分配操作符不是或不是强大的"。 JS的一个基本特征是变量不包含对其他变量的引用,换句话说,你不能"别名"变量。换句话说,你不能计算或以其他方式持有一个"指针"变量。
明显的解决方法是使用对象属性,在这种情况下,您可以使用属性名称作为一种"指针":
var o = {x: [], y: [2]};
var z = f ? 'x' : 'y';
o[z] = [];