我一直在网上阅读,有些地方说这是不可能的,有人说它是,然后给出一个例子,其他人反驳这个例子,等等.
如何在JavaScript中声明二维数组?(假设有可能)
我如何访问其成员?(myArray[0][1]或myArray[0,1]?)
我在一个Angular示例中遇到了这个构造,我想知道为什么选择它:
_ => console.log('Not using any parameters');
Run Code Online (Sandbox Code Playgroud)
我理解变量_意味着不关心/不使用但因为它是唯一的变量是有任何理由更喜欢使用_ over:
() => console.log('Not using any parameters');
Run Code Online (Sandbox Code Playgroud)
当然,这不能是一个字符少于键入.()语法在我看来更好地传达了intent,并且更具特定类型,因为否则我认为第一个示例应该是这样的:
(_: any) => console.log('Not using any parameters');
Run Code Online (Sandbox Code Playgroud)
如果重要,这就是使用它的背景:
submit(query: string): void {
this.router.navigate(['search'], { queryParams: { query: query } })
.then(_ => this.search());
}
Run Code Online (Sandbox Code Playgroud) 大多数人都知道_IRB作为最后回报值的持有人的特殊含义,但这不是我在这里要求的.
相反,我问的是什么_时候用作普通旧Ruby代码中的变量名.在这里它似乎有特殊的行为,类似于"不关心变量"(àlaProlog).以下是一些说明其独特行为的有用示例:
lambda { |x, x| 42 } # SyntaxError: duplicated argument name
lambda { |_, _| 42 }.call(4, 2) # => 42
lambda { |_, _| 42 }.call(_, _) # NameError: undefined local variable or method `_'
lambda { |_| _ + 1 }.call(42) # => 43
lambda { |_, _| _ }.call(4, 2) # 1.8.7: => 2
# 1.9.3: => 4
_ = 42
_ * 100 # => 4200 …Run Code Online (Sandbox Code Playgroud) 在这篇文章中,Nick Craver提供了一个答案:
function(_, id)
Run Code Online (Sandbox Code Playgroud)
在使用它之前,此代码不会将下划线声明为变量.我在谷歌和此处的搜索仅指向使用下划线作为前缀的引用,而不是作为变量本身.它有什么作用?我喜欢Nick的解决方案,但这让我感到烦恼.
这是一个例子:
const initObject = {
a: 0,
b: 0,
c: 0
}
const { a, ...rest } = initObject
Run Code Online (Sandbox Code Playgroud)
我们a从对象中省略属性,但随后const a为它分配了一个值,但从未使用过-eslint(无未使用的变量)产生错误。是否可以完全省略const a?
当我编译我的打字稿项目时,我正在使用该noImplicitAny选项,以便我不会忘记在我的变量和参数上指定类型.
但是,有时您会有不使用的参数.例如:
jQuery.ajaxTransport("+*", function (options: JQueryAjaxSettings) {
return {
abort: function (_, callback: JQueryCallback) {
Run Code Online (Sandbox Code Playgroud)
我对中止函数的第一个参数不感兴趣,所以我通过命名它来忽略它.
这是在TypeScript中这样做的正确方法吗?我在指南中找不到它.我怀疑这不是正确的方法,因为我只能命名一个参数_.
Typescript引发以下错误:
错误TS7006:参数'_'隐式具有'any'类型.
我可以输入,_:any但对于我不使用的参数来说,这似乎有点矫枉过正.
有没有办法在箭头函数参数中指示不需要的参数(以及在解构过程中)?
_我在箭头函数中使用指示不需要的参数的人为案例:
import _ from 'lodash';
const m = [];
m.push({k: 1, v: 'a'});
m.push({k: 2, v: 'b'});
m.push({k: 3, v: 'c'});
const bExists = _.filter(m, ( {_,v}, _1, _2)=>{
return v==='b';
}).length > 0;
Run Code Online (Sandbox Code Playgroud)
对上面代码的两个抱怨:
_(用于 F# 等语言)与 lodash 导入相同。不是语法错误,但仍然令人困惑随后_必须重命名为_1,_2否则会得到:
SyntaxError:es6/app.js:严格模式下参数名称冲突
我可以简单地省略_1和_2参数,但这只是因为在这个特定的示例中,不需要的参数出现在参数列表的末尾。
上述第一个抱怨显然可以通过使用其他名称来解决,但第二个仍然有效(无论采用什么名称作为约定,都必须在后续不必要的争论中被破坏)。
那么,是否有语言支持来指示箭头函数中未使用的参数或(如果失败)对此建立的约定?
我有以下代码片段:
加价:
<tr name="tr3" id="tr3">
<td>
<input type="text" class="common_cls" name="dt[]" id="dt1">
</td>
<td>
<input type="hidden" name="fn[]" id="fn1">
<span id="sp1"><a href="#" id="ah1">choose file</a><span>
<input type="file" name="fff[]" id="ff">
<input type="text" style="display:none">
</td>
</tr>';
Run Code Online (Sandbox Code Playgroud)
JAVASCRIPT
$(document).on('click', '#add_row', function() {
var row = $("table#DocTable tr:eq(3)");
row.clone(true)
.show()
.find("a, input, span").each(function() {
$(this)
.val('')
.attr('id', function(_, id) {
var newcnt = id + count;
return id + count;
});
})
.end()
.appendTo("table");
count++;
Run Code Online (Sandbox Code Playgroud)
我在一年前写过这篇文章,我对这个问题有所帮助.
作为.attr方法中调用的函数的第一个参数,下划线的目的是什么?
这个功能究竟如何运作?它是否只是替换当前id的所有数据a,span而input标签的数字是递增的?