为什么在Google代码段中使用1 * new Date()而不是new Date()。getTime()?

谢尔盖·巴沙罗夫(Sergei Basharov)

在TypeScript代码中插入了GA代码段,并看到以下内容:

i[r].l = 1 * new Date();

TypeScript编译器抱怨新的Date()必须为数字或任何数字,但不能为Date。

我把这个变成了:

i[r]['l'] = new Date().getTime();

导致相同的结果。

如果优先考虑减小尺寸,那么我会发现它更紧凑,并且具有相同的结果:

i[r]['l'] = +new Date();

我不知道为什么要使用带有隐式转换的smart-ass变体。

有什么我不了解的隐藏东西吗?还是只是想让男人看起来更聪明?是为了缩短长度?

菲利普·沃尔顿

有什么我不明白的隐藏...

不,绝对是为了缩短长度,绝对是100%。

实际上,如果您查看最新的推荐代码段,它将使用just +new Date,它比您的+new Date()版本短两个字节

<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js'> </script>

的确,很多短子和代码构建工具都会抱怨这些做法,这是有充分理由的。您可能不应该在源代码中使用这样的巧妙技巧,因为它们更难阅读,并且不总是清楚其意图,令人困惑等。

但是,几乎每个缩小器都使用它们来生成最有效的代码,并且从技术上讲,它们绝对没有错。

关键是您应该编写可读的代码,然后依靠缩小器/编译器使其尽可能小和高效。

但是,Google Analytics(分析)不能仅仅假设所有使用其摘要的人都可以通过一个缩小器来运行它,因此它为开发人员提供了预先缩小的摘要。


处理源文件中包含预缩小代码并避免linter / compiler警告的最常见方法是忽略整个块,几乎每个linter都提供此功能。

例如,使用ESLint,您可以通过在要忽略的代码块之前和之后直接添加注释来做到这一点(我在许多人的Google Analytics(分析)代码段中看到了一些源代码):

/*eslint-disable */
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
/*eslint-enable */

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么+ new Date()返回与new Date()。getTime()相同的内容?

javascript中的Date(d.getTime())和new Date(d.getTime())有什么区别?

Date.now()、new Date().getTime() 和 +new Date 的区别

Javascript 不支持 64 位整数,为什么 new Date().getTime() 返回 41 位数字?

转换Javascript new Date()。getTime(); 放入R识别的时间戳记(最好使用lubridate)

如何使用 Firebase 中的“new Date().getTime()”检索 DD/MM/YY 日期类型?

什么是1 * new Date()?

为什么表达式new Date()。getTime()中的运算符严格按从左到右的顺序应用?

为什么(new Date()== new Date())为假,而(Date()== Date())为真?

new Date和+ new Date有什么区别?

+ new Date()和1 * new Date()之间的区别

什么更快?System.currentTimeMillis()或Date()。getTime()?

为什么New Date()总是返回null?

現代 JS new Date().getTime() 字符串的確定性長度:Unix Epoch Time

如何解决像new Date()。getTime()这样的表达式中的歧义?

为什么不新建Date(ms)==(new Date())。setMilliseconds(ms)

new Date('dd/mm/yyyy') 而不是 newDate('mm/dd/yyyy')

new Date()与Utilities.formatDate(new Date())

IE new Date(string)在做什么?

javascript: `Date()` 和 `new Date()`

JavaScript new Date()使用哪个时区?

使用 JS 的 new Date() 的 UTC 时间

getTime() 和 Date.now() 有什么区别

javascript new Date()错误

javascript为什么isNaN(new Date())为false

new Date()在不同环境中的行为不同,为什么?

JavaScript中new Date()。valueOf()和new Date()* 1之间的区别

在目标活动中使用date.setTime在活动中传递date.getTime,从而获得NullPointerException

在javascript中使用new Date()时得到错误的日期