javascript - JavaScript 中的动态类型 : Is this a good idea?

标签 javascript node.js momentjs dynamic-typing

直到最近我才用 JavaScript 等动态类型语言进行了大量编码,现在我开始了解什么是可能的,我开始想知道什么是好主意,什么不是。具体来说,我不确定当函数通过一系列操作进行时更改变量的类型是否被认为是好的做法。

例如,我有一堆包含日期作为字符串的文件。我正在使用front-matter提取日期属性并将它们存储在表示原始文件的对象中。字符串本身不太一致,因此我使用 Moment.js 来解析它们,并将结果存储回同一对象 article.date 的同一属性中。这对我来说或多或少是正确的,因为 article.date 在被解析并存储为 Date/'Moment' 类型之前只是一个用于一次操作的字符串。

接下来是我有点不确定的部分。这是 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"

最佳答案

我们之所以拥有类型安全,是为了尽早发现代码中的错误:防止无效的内存访问/非法操作/等。在面向对象语言中允许解耦和代码重用(多态性)。不仅仅是为了让你作为程序员的生活变得更加困难,而是为了确保你的程序能够运行。

因为 JavaScript 不提供类型安全,所以这取决于程序员。 必须确保对变量的操作有效,并且不会导致导致程序停止运行的异常。 必须确保可以在任何对象上调用方法调用。

所以回答你的问题:不,随着函数的进行而改变变量的类型不是一个好的做法。

要在 Jade 模板中使用 Moment.js:How do I display todays date in Node.js Jade?

关于javascript - JavaScript 中的动态类型 : Is this a good idea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35216772/

相关文章:

javascript - 覆盖时刻js默认无效日期文本

javascript - Node Js根据unix时间戳排序Json对象

javascript - Node 跨 3 个文件导出

javascript - 使用 es6 模块和 webpack 导入 momentjs 无法分配给只读属性

javascript - 全日历刷新/重新定义所有事件

node.js - 如何在 NodeJs 中扩展 express js res 对象

javascript - 为什么 moment.js 年份 diff 年份不完全匹配 1?

javascript - 表情符号输入正则表达式搞砸了

javascript - 动态添加代码后单击事件不起作用

javascript - 在html中使用ajax处理HTTP获取响应