在打字稿文档中,它指出
\n\n\n\n
void表示不返回值的函数的返回值。每当函数没有任何 return 语句,或者不从这些 return 语句返回任何显式值时,它就是推断类型。
很清楚它的void作用,但我不明白为什么打字稿编译器似乎没有推断出第一个代码块的返回类型为 ,void因为没有返回值或返回语句。
为什么第一次forEach通话有效?forEach由于没有返回值,第一次调用不应该与第二次调用有相同的错误吗?
function forEach<T>(arr: T[], callbackFn: (arg: T, idx: number) => undefined): void {\n for (let i = 0; i < arr.length; i++) {\n callbackFn(arr[i], i)\n }\n}\n\n// works\nforEach([1, 2, 3], (arg, idx) => {\n console.log({arg, idx})\n})\n\n// error Type \'void\' is not assignable to type \'undefined\'\n// here void is inferred\nforEach([1, 2, 3], (arg, idx) => console.log({arg, idx}))\n …Run Code Online (Sandbox Code Playgroud) MDN 最近更新了他们的一些文档,我发现了下面的代码。谁能解释一下以下的实际用例是什么?
来自 MDN:
数组解构赋值的剩余属性可以是另一个数组或对象绑定模式。这允许您同时解压数组的属性和索引。
const [a, b, ...{ pop, push }] = [1, 2];
console.log(a, b); // 1 2
console.log(pop, push)Run Code Online (Sandbox Code Playgroud)
push()push()在数组上调用,那么从数组中解包该方法有什么意义呢?我想不出使用它的任何实际用途。
我在事件委托方面遇到了一个奇怪的情况,原因是元素被动态添加到 DOM 中。单击按钮打开模式
为了快速解释此代码,有一个用于桌面和移动设备的模态抽屉,并且此处都选择了两者,并且单击事件附加到两个模态内的颜色样本。模态框通过 js 动态添加到 DOM
现在让我困惑的部分是 currentTarget 是文档,如果我使用 e.target,这将是首先单击以打开模式的按钮。
为了打开模态,必须单击按钮,因此通过事件委托,currentTarget是文档,目标是按钮本身,所以我真的不知道如何将事件监听器附加到模态中的.swatch 。
$(document).on('click', '.modal-desk__content .swatch, .modal-mobile__content .swatch', e => {
const $swatch = $(e.currentTarget);
$('.product-form').find('.swatch[data-value="' + $swatch.data('value') + '"]').click();
$swatch.closest('.swatches').find('.swatch').removeClass('selected');
$swatch.addClass('selected');
})
Run Code Online (Sandbox Code Playgroud) javascript 有没有办法检查元素是否具有某个属性值?鉴于此代码:
<div class="wrapper">
<a href=#refresh-cart>view cart</a>
</div>
Run Code Online (Sandbox Code Playgroud)
有没有办法更具体而不是
document.addEventListener('click', e => {
if (e.target.hasAttribute('href')) {
//...
}
})
Run Code Online (Sandbox Code Playgroud)