Javascript 在我的代码中${a}和=>是什么?

Javascript 在我的代码中${a}和=>是什么?,javascript,Javascript,函数未使用的数字…a{ 返回'0123456789`.split.filter b=>`${a}`.split.indexOfb==-1 参加 } document.writeunusedDigits12345 1,什么是${a} 这是ES2015添加的新JavaScript中的替代。它在发生的地方交换a的值。任何任意的表达都是可以接受的 2,什么是=> 这是一个ES2015 你没有问,但是。。。函数声明中的a参数前面是一个,表示将作为数组提供给函数的其余参数提供给我 如果有人能帮我破解这个密码

函数未使用的数字…a{ 返回'0123456789`.split.filter b=>`${a}`.split.indexOfb==-1 参加 } document.writeunusedDigits12345 1,什么是${a}

这是ES2015添加的新JavaScript中的替代。它在发生的地方交换a的值。任何任意的表达都是可以接受的

2,什么是=>

这是一个ES2015

你没有问,但是。。。函数声明中的a参数前面是一个,表示将作为数组提供给函数的其余参数提供给我

如果有人能帮我破解这个密码,那就太棒了

它返回一个字符串,其中包含传递给它的任何参数的字符串形式中未出现的数字:

unusedDigits函数接受任意数量的参数,由于ES2015。。。参数声明中的rest运算符。 它接受一个数字0-9的字符串并将其拆分以创建一个数组,例如[0]、[1]、…]。 然后,它通过filter函数在该数组中循环,得到一个新的数组,其中只包含filter回调函数说应该保留的条目。 ES2015 arrow函数的过滤器回调函数使用ES2015模板字符串创建包含数组的字符串。因为这涉及隐式调用a.toString,所以它最终会隐式地执行a.join,因为ArraytoString就是这样做的,然后检查要检查的数字b是否出现在结果字符串中。这不是很有效率;没有理由每次都重新创建字符串,也没有理由在这里使用模板字符串。只有当数字不在返回的-1的字符串indexOf中时,它才会返回一个真实值。 然后,它在剩余数字的末尾组合一个字符串并返回它。 这里有一个更有效的版本,FWIW:

与ES5中的功能相同:

var unusedDigits = (function() {
    var digits = [0,1,2,3,4,5,6,7,8,9];
    var slice = Array.prototype.slice;

    return function unusedDigits() {
        var astring = String(slice.call(arguments));
        return digits.filter(function(b) { return astring.indexOf(b) == -1}).join("");
    };
})();
切片将伪数组参数转换为真数组

var unusedDigits=函数{ 变量数字=[0,1,2,3,4,5,6,7,8,9]; var slice=Array.prototype.slice; 返回函数未使用的数字{ var astring=Stringslice.callarguments; 返回digits.filterfunctionb{return astring.indexOfb==-1}.join; }; }; snippet.logunusedigits12345; …第一行中的a是rest运算符-这将把arguments数组分配给函数体中的变量a,这样您就不必再处理array.prototype.slice.callarguments了。在本例中,var a=[12345]

“0123456789”。split将把0-9之间的所有数字分割成一个数组,然后对其进行过滤

b=>${a}.split.indexOfb==-1是筛选器的谓词函数。=>被称为“胖箭头语法”或“箭头函数”。这是ES6,它是函数的简写语法,也将当前的“This”绑定绑定到函数。如果主体在同一行上,它将隐式返回表达式

${a}是模板字符串语法-在本例中,将参数数组[12345]强制为“12345”,然后我们将其拆分,以执行操作索引,以查看拆分参数数组中是否存在0-9位的当前数字b。在结束时,我们将返回过滤所有不在arguments数组中的数字0-9的结果,这些数字以字符串形式连接-在本例中为“06789”。

语言功能:

`${1}`;
// gives "1"
var v = 1; `${v}${v}`;
// gives "11"
x => x != "2";
// same as function (x) { return x != "2"; } 
(x => x != "2")("1");
// gives true
((u, ...v) => v)(1, 2, 3);
// gives [2, 3]
字符串和数组方法:

"123".split("");
// gives ["1", "2", "3"]
["1", "2", "3"].join("");
// gives "123"
["1", "2", "3"].indexOf("2");
// gives 1
["1", "2", "3"].indexOf("4");
// gives -1
["1", "2", "3"].filter(x => x != "2");
// gives ["1", "3"]
与您的代码相近的东西转换函数非常糟糕,不要使用它们,我只想为前面的代码提供一些上下文:

var itos=i=>`${i}`;//整数到字符串 var stoa=s=>s.split;//字符串到数组 var atos=a=>a.join;//数组到字符串 var isIn=x,set=>set.indexOfx!=-1. var unusedDigits=函数i{ //所有数字都是[0,1,…,9] var allDigits=stoa0123456789; //如果i是12,那么usedGits是[1,2] var usedDigits=stoaitosi; //将筛选结果转换为字符串 返回atos //制作一组未使用的数字数字数字 allDigits.filter //d将是0然后是1…直到9 d=>!isInd,已用数字签名 ; }; document.writeJSON.stringify 未使用的数字13579//02468
;他们被称为“向下投票者”,我只是想以一种不同于TJCrowder的方式做出贡献。如果你不喜欢,请解释一下,这样会更有建设性。谢谢
`${1}`;
// gives "1"
var v = 1; `${v}${v}`;
// gives "11"
x => x != "2";
// same as function (x) { return x != "2"; } 
(x => x != "2")("1");
// gives true
((u, ...v) => v)(1, 2, 3);
// gives [2, 3]
"123".split("");
// gives ["1", "2", "3"]
["1", "2", "3"].join("");
// gives "123"
["1", "2", "3"].indexOf("2");
// gives 1
["1", "2", "3"].indexOf("4");
// gives -1
["1", "2", "3"].filter(x => x != "2");
// gives ["1", "3"]