请考虑以下代码段:
.ico
通过存储在let variableName = 'internalVariable';
{
let internalVariable = 'whatever';
console.log(eval(propertyKey)); // prints 'whatever'
}
中的字符串访问internalVariable
有什么选择?我本来希望像variableName
这样的东西,但似乎没有什么比它好。
鉴于这种特殊情况,是否有使用scope[variableName]
的替代方法?
答案 0 :(得分:1)
在需要动态访问诸如 之类的变量的情况下,惯用的做法是使用一个对象并根据需要动态计算属性名称。
$.ajax({
url: url + '/' + id,
method: "get",
success: function (data) {
var json = $.parseJSON(data);
$("#preview").html(json.content);
$('#viewM').modal({show:true});
}
});
在带有var obj = {};
obj[getPropertyName()] = "hello world";
,var
或let
的函数中声明的变量确实以对象之类的属性(函数调用的结束)的形式存在,但是JavaScript不提供任何变量将该事物称为对象的方式。使用const
是可能的,但是通常这不是一个好主意,因为在现代运行时系统中没有尝试进行运行时优化,因为eval()
使其变得非常复杂。
在JavaScript中对变量进行别名的唯一方法是通过eval()
对象,这很奇怪,在“严格”模式下明确建议不要使用它。
[edit] —在以下内容中:Bergi在下面的评论中,(通常不推荐使用)arguments
语句允许隐式引用对象属性,模块的with
机制可以创建别名,尽管对我而言很难想象在实际实践中这是件好事。