【发布时间】:2016-02-05 05:19:11
【问题描述】:
直到最近,我才用 JavaScript 等动态类型语言编写了大量代码,现在我开始了解什么是可能的,我开始想知道什么是好主意,什么不是。具体来说,我不确定在函数通过一系列操作进行时更改变量的类型是否被认为是好的做法。
例如,我有一堆包含日期字符串的文件。我正在使用front-matter 提取日期属性并将它们存储在代表原始文件的对象中。字符串本身不是很一致,所以我使用 Moment.js 来解析它们,并将结果存储在同一对象 article.date 的同一属性中。这对我来说或多或少是正确的,因为article.date 在被解析和存储为日期/“时刻”类型之前只是一个操作的字符串。
接下来是我有点不确定的部分。这是 ExpressJS 应用程序的一部分,因此这些对象的数组在 render() 调用中作为数据传入,并在其中转到 Jade 模板进行渲染。但是如果我想在 Moment.js 中使用显示方法来控制日期显示为字符串的方式怎么办?在传入之前将日期属性的类型再次更改回字符串是否合理?
例子:
articles[i] = processArticle(content);
// creates an article object from YAML, object has a property article.attributes.date
articles[i].attributes.date = moment(articles[i].attributes.date);
// attribute is now a Date/Moment
articles[i].attributes.date = articles[i].attributes.date.format("dddd, MMMM Do YYYY, h:mm:ss a");
// attribute is now "Sunday, February 14th 2010, 3:25:50 pm"
【问题讨论】:
-
我不希望这样做。如果你写一些其他的中间方法,你怎么知道
attributes.date是不是一个字符串?我不喜欢匈牙利符号,但在这种情况下,我会调用一个dateString和另一个date或moment。 -
一些挑剔 :-) 变量和属性没有类型,值有。在这里,您处理的是对象属性,而不是变量。您可能会考虑一个额外的属性,例如 dateString,它是您的格式化字符串。从字符串转换为日期并按顺序转换回来的最大问题是性能(浪费的周期)以及您是否始终如一地解析和格式化字符串而不更改它所代表的值。只有你知道答案。 ;-)
-
@RobG 对不起,noob counter-nitpick/question:这是因为我们在谈论动态类型语言吗?即变量/属性没有类型,因为它可以包含任何类型的 value?或者这是一个基本概念?我正在考虑如何在静态类型语言中
int foo = 100将foo声明为 int,然后为其分配一个值(最好是 int,否则)
标签: javascript node.js momentjs dynamic-typing