当前位置: 首页 > 面试题库 >

JavaScript对象文字:{a,b,c}到底是什么?

上官霄
2023-03-14
问题内容

我的问题最好通过此jsfiddle给出,其代码如下:

var a = 1, b = 'x', c = true;

var d = {a: a, b: b, c: c}; // <--- object literal
var e = [a, b, c];          // <--- array
var f = {a, b, c};          // <--- what exactly is this??

// these all give the same output:
alert(d.a  + ', ' + d.b +  ', ' + d.c );
alert(e[0] + ', ' + e[1] + ', ' + e[2]);
alert(f.a  + ', ' + f.b +  ', ' + f.c );

什么样的数据结构是f?这只是简写d吗?


问题答案:

它是ES6中的Object Initializer 属性简写。

var f = {a, b, c, d:1}; // Will be equal to {a:a, b:b, c:c, d:1}

这是可行的,因为属性值与属性标识符具有相同的名称。这是最新ECMAScript6草案Rev13中对象初始化程序第11.1.5节]的语法的新补充。当然,就像ECMAScript3中设置的限制一样,您不能使用保留字作为属性名称。

这样的简写不会显着改变您的代码,只会使所有内容变得更甜蜜!

function createCar(name, brand, speed) {
  return { type: 'Car', name: name, brand: brand, speed: speed };
}

// With the new shorthand form
function createSweetCar(name, brand, speed) {
  return { type: 'Car', name, brand, speed }; // Yes it looks sweet.
}

请参阅兼容性表以获取对这些符号的支持。在不支持的环境中,这些符号将导致语法错误。

这种简写形式可以很好地匹配对象:

ECMAScript5中 ,我们曾经做过的事情:

var tmp = getData();
var op  = tmp.op;
var lhs = tmp.lhs;
var rhs = tmp.rhs;

只需一行代码即可在 ECMAScript6 中完成:

var { op, lhs, rhs } = getData();


 类似资料:
  • 主要内容:面向对象编程(Object Oriented Programming,OOP)C++ 是一门面向对象的编程语言,理解 C++,首先要理解 类(Class)和 对象(Object)这两个概念。 C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如: 运行结果: 小明的年龄是 15,成绩是 92.500000 C++ 中的类

  • 问题内容: 我尝试了一些代码,使用XOR在Java中交换两个整数而不使用第三个变量。 这是我尝试的两个交换函数: 这段代码产生的输出是这样的: 我很好奇,为什么这样说: 与这个不同吗? 问题答案: 问题是评估的顺序: 参见JLS第15.26.2节 首先,对左操作数求值以产生一个变量。 如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;右边的操作数不会被评估,并且不会发生赋值。 否则,将保存

  • 我尝试了一些代码在Java中交换两个整数,而不使用第三个变量,即使用XOR。 以下是我尝试的两个交换函数: 该代码产生的输出如下: 我很想知道,为什么会有这样的说法: 和这个不一样?

  • 我有两个双向量。双的值在-1000到1000之间。 两个向量包含相同的数字,但顺序不同。 例如 假设通过以下方式求和,是否可以保证向量1的和与向量2的和完全相等: 我担心双重不精确。

  • 问题内容: 对于一个项目,开发人员向我们发送了一个.js文件,其代码类似于以下代码: 它适用于Opera 10.30,Firefox 3.6.x,但不适用于Opera 10.60和Chrome。 只是出于好奇,您是否有任何引用或链接说明此代码是否符合JS / ECMA标准? 你怎么看? 问题答案: 这是一个称为“ 分解分配”的功能,已在JavaScript 1.7和ECMAScript 6中添加。

  • 然而,今天我在处理一些代码时,意外地发现以下两个交换给出了不同的结果: 这让我难以置信。有人能给我解释一下这里发生了什么吗?