我偶然发现了验证库中的某项内容,其中他们将required-validation用作验证功能的一部分。
现在,我似乎找不到或无法理解的怪异与自我执行功能有关。这是来自代码。
value => !(0,req)(value) || [...some more checks]
现在.. req()
方法接受一个参数,到目前为止我们还不错。让我感兴趣的是,我们也可以写req(value)
或(req)(value)
。.但是前面的零似乎完全没用。
我在这里使用alert()尝试了很多东西,得出了一个奇怪的结论。我运行了这些案例检查器控制台以测试输出。 效果与以下效果一样好:
(alert)('hello')
»发出“你好”警报
(0,alert)('hello')
»发出“你好”警报
(0,1,3,5,1,alert)('hello')
»发出“你好”警报
(console.log,alert)('hello')
»发出“你好”警报
(alert,1)('hello')
»给出错误(alert,1) is not a function
(alert,console.log)('hello')
»提供控制台日志“你好
(alert,1,"test",console.log)('hello')
»提供控制台日志“你好
有人可以向我解释此决议的工作方式吗?
为什么它似乎提供了最新的方法,因此(0,alert)
与(alert)
和(0, console.log, "test", alert)
一样?
答案 0 :(得分:1)
因为它要从方括号中获取最后一个值并执行代码:
a = [1, 2, 3]
b = [4, 5, 6]
console.log((a,b)[0]) //prints 4
//because Its JavaScript's default behaviour
x = function(){alert("foo")};
y = function(){alert("bar")};
(x,y)() // alerts bar
//because it takes last function which is y
//also for simple variable
p = 10;
q = 20;
console.log((p,q)); //prints 20
答案 1 :(得分:0)
这里没有关于方法/功能的任何具体说明。您只是看到Comma operator在起作用。
逗号运算符计算每个操作数(从左到右)并返回最后一个操作数的值。
例如,(alert,1,"test",console.log)
的求值为console.log
,然后('hello')
之后只是对该函数的调用。
这令人困惑,因为此代码中的括号用于两个单独的内容:围绕表达式或调用函数。如果跟随函数,则仅表示“调用函数”。否则,逗号运算符将起作用。
(请注意,缩小符可以使用逗号运算符来缩减代码,但请不要在实际代码中使用,因为它太深奥了。)