我是javascript的新手,这是一个新手问题:
在php中,有一个extract()方法可以从关联数组中导入变量。例如:
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array);
// $color is a defined varible here with the value of "blue"
我想知道在标准Javascript中是否存在方法,或者在jQuery或下划线等流行的库中是否存在对Javascript对象执行相同操作的方法。我的意思是这样的:
jsObject = {"color" : "blue",
"size" : "medium",
"shape" : "sphere"};
extract(jsObject); // Is there such a thing?
// Here, color is a defined variable
答案 0 :(得分:3)
您可以这样做:
Object.getOwnPropertyNames(obj).forEach(k => window[k] = obj[k]);
或限制新变量的范围:
Object.getOwnPropertyNames(obj).forEach(k => this[k] = obj[k]);
答案 1 :(得分:2)
您可以使用
function extract(jsObject){
for (var key in jsObject) {
window[key] = jsObject[key];
}
}
console.log(size) //medium
答案 2 :(得分:2)
标准Javascript中的任何内容都没有,但是如果您使用ES6,则可以像这样对对象进行构造
const obj = {
color: 'blue',
size: 'medium',
shape: 'sphere',
}
const { color, size, shape } = obj;
console.log(color, size, shape) // blue medium sphere
您可以使用Babel将代码转换为ES6。如果您刚刚开始使用它可能会有点先进,所以我建议您坚持使用直观的方法,但几周之后一定要查看Babel。它给你一些很酷的东西。
答案 3 :(得分:0)
使用窗口对象有两个问题:
它及其所有属性都是默认的全局变量。可能没有兴趣。
必须假设它存在于所有浏览器中(现在是它)。想想Nodejs
你可以这样做:
for (var key in jsObject) {
eval('var ' + key + ' = ' + jsObject[key]);
}
试试这个,可能会有所帮助:
(function () {
var jsObject = {color: 'blue'};
// Dynamically assign to local variables
for (var key in jsObject) {
eval('var ' + key + ' = ' + jsObject[key]);
}
// Test locally
console.log(color);
})();
// Test globally
console.log(color);
结果:
'blue'
[error] color is not defined