Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关于文字对象语法的限制_Javascript - Fatal编程技术网

Javascript 关于文字对象语法的限制

Javascript 关于文字对象语法的限制,javascript,Javascript,我知道literal对象语法的限制是名称必须是literal 顺便问一下,我需要完成以下任务,你推荐我用哪种方式 我有一个对象obj1,我想遍历它,然后传递给另一个函数,该函数只接受文本对象类参数 我只是写了一个基本的例子来了解我所问问题的基本思路 问题在最后一个循环中,请参阅内联注释 obj1 = {k1 : 1} // simple literal object fn = function (json) { // this function can accept just lit

我知道literal对象语法的限制是名称必须是literal

顺便问一下,我需要完成以下任务,你推荐我用哪种方式

我有一个对象obj1,我想遍历它,然后传递给另一个函数,该函数只接受文本对象类参数

我只是写了一个基本的例子来了解我所问问题的基本思路

问题在最后一个循环中,请参阅内联注释

obj1 = {k1 : 1} // simple literal object

fn = function (json) {
    // this function can accept just  literal object 
    console.log("result: ", json); // {key : true}, but I want {k1 : true}
}

for (key in obj1) {
    obj = [];
    fn ({
        key : true // I want the key to be k1 and not key
    })
};
就这么做吧

var obj = {};
obj[key] = true;
fn(obj);
这是你将得到的最优雅的。请不要使用
eval()

将变量用作键

function fn(obj) {
    console.log("result: ", obj);
}

for (var key in obj1) {
    var temp = {};
    temp[key] = true;
    fn (temp);
};
还要注意使用(因此您不需要创建全局范围变量)和不同样式的函数声明

 // this function can accept just  literal object 
否。该函数不关心参数对象是如何构造的

你能行

 obj = {};
 key = "k1";
 obj[key] = true;
 fn(obj);
另一个只接受文本对象的函数,如参数

没有这样的事。在创建对象的那一刻之外,使用文字创建的对象和以其他方式创建的对象之间没有区别

for (key in obj1) {
    obj = [];
    var foo = {};
    foo[key] = true;
    fn (foo);
};
可以试试这个吗

for (key in obj1) {
  var obj = {};
  obj[key] = true;
  fn (obj);
};

不过,在循环中声明
var
(在循环中没有自己的作用域)有点让人困惑。只是想让OP清楚一些。你认为声明
var-temp对n00bs来说不会那么困惑在循环之外,然后在循环中设置它?不幸的是,Javascript中变量作用域的工作方式总是会让新手感到困惑,如果他们以前用过其他语言编程,可能会更加困惑。是的,在循环顶部声明var就不那么容易混淆了,因为它更接近变量的实际工作方式。这是一种不自然的写作方式,但强迫自己这样做就是强迫自己思考这个问题。或者使用CoffeeScript;-)谢谢你的回复,它们都是有效的。所以我奖励第一个。