Javascript - 使用字符串连接设置变量[重复]

Posted

技术标签:

【中文标题】Javascript - 使用字符串连接设置变量[重复]【英文标题】:Javascript - set a variable using concatenation of strings [duplicate] 【发布时间】:2013-11-10 22:36:14 【问题描述】:

是否可以通过将两个字符串连接在一起形成名称来设置变量?

如果可能的话,我想根据用户单击的对象的类名来确定要设置的变量。我知道我可以硬编码一堆 if/else if 语句,但如果我可以间接引用这些变量,那就太酷了。我在想这样的事情:

var owner_read;
var group_read;

function setVariableIndirectly(object)
    var second = object.className; // returns "read"
    var first = object.parentElement.className; // returns "group"

    first + "_" + second = "set this as the new variable";

有什么办法吗?

编辑:

这是数据来自的 html

<p class="owner">
    <span class="read" onclick="permissionClick(this)">r</span>
    <span class="write" onclick="permissionClick(this)">w</span>
    <span class="execute" onclick="permissionClick(this)">x</span>
</p>

【问题讨论】:

javascript 中没有带有“动态名称”的变量(不包括evalnew Function 恶作剧);存在的是具有“动态名称”的(对象的)属性。我会避免使用 window 作为这样的容器以避免冲突(你找到这些!)并减轻“全球污染”,而是使用一些 [internal] 对象的属性。 【参考方案1】:

这是可能的,但您必须注意上下文和范围。

1.在浏览器环境中设置全局范围的变量:

window[str1 + str2] = value

2。在节点环境中设置全局范围的变量:

global[str1 + str2] = value

3.在闭包内并在该闭包内:

this[str1 + str2] = value

在闭包内,global 和 window 仍然会设置全局。请注意,如果您在被调用的函数中,“this”可能会引用另一个对象。

【讨论】:

局部变量或函数参数呢?【参考方案2】:

不清楚您要完成什么,但您可以按名称访问变量作为对象的属性。

// this is the container to hold your named variables 
//    (which will be properties of this object)
var container = ;

function setVariableIndirectly(obj)
    var second = obj.className; // returns "read"
    var first = obj.parentNode.className; // returns "group"

    // this is how you access a property of an object 
    //    using a string as the property name    
    container[first + "_" + second] = "set this as the new variable";

   // in your example container["read_group"] would now be set

最好将变量放在您自己的容器对象上,如上所示,但您也可以通过window 对象上的属性访问全局变量。

【讨论】:

完美!!对不起,如果我在描述中不清楚。我将编辑我的原始帖子,html 使其更清晰。 @ChrisSchmitz - 仅供参考,您可能想要使用像 data-permissiontype="read" 属性而不是 class="read" 这样的属性,因为按照您的方式,您不能使用任何其他类进行样式设置。 啊,很好的一点。再次感谢!【参考方案3】:

你可以这样设置一个全局变量:

window[first + "_" + second] = "set this as the new variable";

并以如下方式访问它:

console.log(group_read);

【讨论】:

我不建议使用window[..] 作为演示,因为它具有固有的副作用。一旦理解了属性 - 并且 window 只是一个对象,以及 JavaScript 如何解析标识符 - 其余的就到位了。

以上是关于Javascript - 使用字符串连接设置变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将连接字符串设置为Azure函数中的应用设置/环境变量

javaScript运算符

如何在 Javascript 连接的字符串上强制换行?

通过连接字符串或连接对象设置 MySQL 变量?

PHP_JavaScript核心编程

javascript 比较与运算符