我有这个代码:
var a = new Date();
var b = a.toISOString();
var c = b.slice(0, b.indexOf('.'));
var d = c.replace('T', ' ');
console.log('a:', a, 'nb:', b, 'nc:', c, 'nd:', d);
我想要实现的是,将所有四行合并为一行,不使用回调、类或承诺,只是纯粹的方法链接。 就像这样,即:new Date().toISOString().slice(0, *reference to ISO stringified date*.indexOf('.')).replace('T', ' ');
但问题是,this
关键字无法在方法之前和.toISOString()
方法之后指向/返回值.slice()
。 或者也许可以使用一些先进的技术,但我不知道它们。
那么有没有办法在不使用回调/承诺的情况下实现我想要的? 出于好奇,我要求我的个人目的。
这目前是不可能的。
然而,有一个名为管道运算符的 ECMAScript 提案试图解决这个问题。确切的语法目前尚未确定,该功能可能根本不会进入语言。
您的示例可能如下所示(同样,这只是一个建议,实际上不起作用(:
var res = new Date().toISOString() |> (_ => _.slice(0, _.indexOf('.')).replace('T', ' '));
但是,这几乎不会提高可读性。
现在可以使用ECMAScript 2015 中引入的默认参数和箭头函数来执行此操作,尽管它可能不完全具有您想要的功能。
如果您想访问更多中间结果,语法可能看起来很混乱。
var y = ((d = new Date().toISOString()) => d.slice(0, d.indexOf('.')).replace('T',' '))();
console.log(y);
在这种特殊情况下,UTC 时间戳表示为本地时间戳,因此在该上下文中不是一个好主意。