javascript中的({})和{}之间有什么区别吗?

时间:2017-05-29 11:14:17

标签: javascript

let obj1 = {
    a: 1,
    b: 2,
    c: 3
};
let obj2 = ({
    a: 1,
    b: 2,
    c: 3
});

obj1obj2完全相同吗?它们在javascript中定义对象的方式相同吗?

4 个答案:

答案 0 :(得分:7)

  

obj1obj2完全相同吗?

是。虽然它们在您的问题中严格相等(它们不是相同的对象引用),但它们基本相同。

  

javascript中({}){}之间是否存在差异?

是的。我知道两种情况,这可能会产生影响。

首先,您可能在ES6 arrow functions之前遇到过这种语法:

let array = [1, 2, 3, 4, 5];

let mappedArray = array.map(value => ({
    original: value,
    double: value * 2
}));

在这里,确实有所作为,因为大括号本身将被解释为作为map的参数传递的函数的边界。也就是说,如果没有额外的括号,您需要:

array.map(value => {
    return {
        original: value,
        double: value * 2
    };
});

作为附注,上述两个内容与以下内容相同(this的处理除外,不受ES6箭头语法的阻碍):

array.map(function (value) {
    return {
        original: value,
        double: value * 2
    };
});

其次,对象文字表达式本身在JavaScript中无效,因为大括号被解释为的左右括号。

所以虽然这是语法错误:

{
    a: 1,
    b: 2,
    c: 3
}

......以下不是(虽然它本身绝对没用):

({
    a: 1,
    b: 2,
    c: 3
})

答案 1 :(得分:1)

简单的答案是。没有区别。您可以省略括号并获得完全相同的结果。

答案 2 :(得分:1)

它们完全相同,实际上你可以在第二种情况下省略()。

答案 3 :(得分:1)

在你的例子中,它们完全相同。在这种情况下,括号无用于声明obj2

编程中的括号(在评估值时)就像在方程式中一样,因此具有:

let obj1 = {
    a: 1,
    b: 2,
    c: 3
};
let obj2 = ({
    a: 1,
    b: 2,
    c: 3
});

与:

相同
x = 2
x = (2)

在数学中