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

ES6扩展运算符在对象上的应用是否为标准ECMAScript规范?

严兴言
2023-03-14
问题内容

MDN将散布运算符的用法定义为仅对数组起作用。

例如,对散布运算符的正确用法看起来像

var parts = ['shoulders', 'knees'];
var lyrics = ['head', ...parts, 'and', 'toes']; // ["head", "shoulders", "knees", "and", "toes"]

我们在 数组 上应用了散布运算符parts

但是在React文档中,他们对此类
对象 使用了散布运算符

var props = {}; 
props.foo = x; 
props.bar = y; 
var component = <Component {...props} />;

如果实际上尝试在控制台中执行此操作,则会收到TypeError

var a = {b:1,c:2}
console.log(...a);  // TypeError

我的问题是:

  • 是否在对象上使用了散布运算符是规范中实现的标准(并且在MDN文档中以某种方式省略了该用例,而我尝试显示的控制台示例未正确完成,因此给出了TypeError)?
  • 如果不是标准实现,那么幕后将发生什么事情,以允许React组件对散布运算符进行细化处理,使其以其所执行的非标准方法(即,作用于对象)来执行操作,并抑制在发生以下情况时不可避免地发生的TypeError这样做?

问题答案:

如果实际上尝试在控制台中执行此操作,则会收到TypeError

您在这里有些困惑(如果它们看起来相似,就不能怪您)。

在您的示例中

console.log(...a);

...a没有 对象传播的应用。它有时被称为 扩展语法
(即使此名称实际上并没有真正的名称),在ES2015中已标准化。它在函数调用中用作最后一个“参数”,并且仅在 可迭代对象上
起作用。对象不是可迭代的,因此会出现错误。

对象传播 ,目前是一个建议,仅用于
对象文字中

var foo = {x: 42};
var bar = {y: 21, ...foo}; // equivalent to Object.assign({y: 21}, foo);

引擎盖下发生了什么

JSX(<Component {...props} />)内部的用法稍有不同,它是
JSXSpreadAttribute
,但是它确实对对象散布了糖。如果您在Babel中尝试一下,可以看到将其转换为:

var _extends = Object.assign || /* polyfill */;

React.createElement(Component, _extends({ foo: true }, props));


 类似资料:
  • 主要内容:1.运算符类型可以将操作符定义为告诉系统实施特定操作的符号。 在JavaScript中,有很多运算符,通过使用特定的运算符,可以执行任何特定的任务。运算符在表达式中用于评估不同的操作数。 表达式是一种返回值的语句,表达式包括: 运算符:它负责对操作数执行一些运算。 操作数:它代表数据。 例如:假设像这样的表达式。 在此表达式中,和是操作数,星号()符号是乘法运算符。 1.运算符类型 JavaScript中的运算

  • 主要内容:1.散布运算符和数组操作,2.散布运算符和字符串ES6引入了一个称为散布运算符的新运算符,它由三个点()组成。 它允许迭代器在期望参数超过零的地方扩展。 它赋予从数组中获取参数的特权。 传播()运算符的语法与参数相似,但是完全相反。 让我们了解一下散布运算符的语法。 语法 上面语法中的三个点()是散布运算符,其目标是特定变量中的整个值。 让我们尝试了解散布运算符在不同情况下的用法: 1.散布运算符和数组操作 下面来看看如何使用散布运算符来操纵数

  • 为什么一定要使用 ...path 才能正确的运行,在上面代码中测试的结果是一样的,而下面则一定要用 ... ?否则就会出现如图2所示的结果 这段代码是 解决 (给定两个整数 n 和 k,返回范围 [1,n] 中所有可能的 k 个数的组合。) 这个问题的 ,用的回溯

  • 主要内容:1.ES6对象文字语法扩展,2.合并ES6中的对象,3.对象解构对象是键/值对的集合,可以像哈希或字典一样在对象的整个生命周期中对其进行修改。在JavaScript中使用对象可以定义自定义数据类型。 与原始数据类型不同,使用对象表示复杂或多个值。 这些值可以是对象数组或标量值,也可以是函数。对象内部的数据是无序的,值可以是任何类型。 可以使用大括号以及可选的属性列表来创建对象。 该属性是“键:值”对,其中键是字符串或属性名称,值可以是任何值。 语法 创建空对象

  • 我有一个函数可以给传入的对象添加一个键,但是我被告知要使用spread运算符,我被告知可以使用spread运算符创建一个具有相同属性的新对象,然后在它上面设置isAvailable。 所以我试过这样的方法,但是不能成功,你能帮我吗?和困惑,我应该这样使用spread运算符,从一个函数返回?

  • 主要内容:1.Boolean属性,2.Boolean方法ES6 Boolean对象可以表示两个值,即或。 在JavaScript中,布尔值用作获取对象,变量,条件,表达式等值的函数,它们包括和。 如果省略参数或,负数,,,,或空()字符串,则对象具有初始值。 语法 对象有三种方法和两个属性。下面来详细的了解对象的属性和方法。 1.Boolean属性 布尔对象的两个属性列表如下: 序号 属性 说明 1. 此属性返回对象的构造函数。 2. 用于将属性和方法