这是我得不到的.

使用object时,truefalse都可以正常工作.表达式(false && { teacher: 2 })显然是false,扩散算子根本没有抱怨:

console.log({
  ...(true && { foo: 'bar' }),
  ...(false && { bar: 'baz' }),
});

结果{ foo: 'bar' }.

另一方面,这不适用于数组,或者更好地说,只适用于true个条件:

console.log([
  'foo',
  ...(true && ['bar']),
  ...(false && ['baz']),
]);

TypeError:(false&["baz"])不可编辑

推荐答案

好的,根据docs,扩散算子最初只适用于iterables(例如数组,对象不可iterable),你可以将其用于对象,因为他们后来添加了这个特性,但事实上,用于对象的扩散算子是Object.assign的"包装器".

就你而言:

对象大小写:

console.log({
  ...(true && { foo: 'bar' }),
  ...(false && { bar: 'baz' }),
});

因为基本上,在"虚假"条件下,它可以:

console.log(Object.assign({}, false)) // Output: { }

数组情况:

console.log([
  'foo',
  ...(true && ['bar']),
  ...(false && ['baz']),
]);

在这种情况下不起作用,因为在"falsy"条件下,js将在false上搜索iterable方法,当然它不存在,因此会产生错误

Javascript相关问答推荐

如何在react js中显示文本字段或2个不同的组件?

v-textfield的规则找不到数据中声明的元素

在Phaser中查找哪个物体处于碰撞中

单击按钮后未清除 Select

使用axios.获取实时服务器时的404响应

我可以使用CSS有效地实现最大宽度=100%和最大高度=100%,而无需父母有明确的/固定的宽度和高度,替代方法吗?

防止用户在selectizeInput中取消 Select 选项

类型自定义lazy Promise. all

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

S文本内容和值不必要的不同

如何使用JavaScript拆分带空格的单词

如何在使用rhandsontable生成表时扩展数字输入验证?

如何在不影响隐式类型的情况下将类型分配给对象?

变量在导入到Vite中的另一个js文件时成为常量.

Vaadin定制组件-保持对javascrip变量的访问

更新Redux存储中的对象数组

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

如何找到带有特定文本和测试ID的div?

本地损坏的Java脚本

如何在独立的Angular 应用程序中添加Lucide-Angel?