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



我今天试着这么做了。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是一个简单的琐碎问题,其想法是我想在表达式上使用赋值运算符,但它似乎不够强大,无法以这种方式工作。

这并不是赋值运算符是否"强大"。JS的一个基本特性是,变量不包含对其他变量的引用,换句话说,你不能"别名"变量。换句话说,您不能计算或以其他方式持有指向变量的"指针"。

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

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

最新更新