代码之家  ›  专栏  ›  技术社区  ›  Toadfish

在JavaScript中动态键入:这是个好主意吗?

  •  1
  • Toadfish  · 技术社区  · 9 年前

    直到最近,我还没有用动态类型语言(如JavaScript)编写过很多代码,现在我开始理解什么是可能的,我开始想知道什么是好主意,什么不是。具体来说,我不确定随着函数在一系列操作中的进展而改变变量的类型是否被认为是良好的做法。

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

    接下来是我有点不确定的部分。这是ExpressJS应用程序的一部分,因此这些对象的数组将作为render()调用中的数据传入,然后进入Jade模板进行渲染。但如果我想在Moment中使用一种显示方法呢。js来控制日期看起来像字符串的方式?在传入日期属性之前,将其类型再次更改为String是否合理?

    例子:

    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"
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   Community c0D3l0g1c    7 年前

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

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

    因此,回答你的问题:不,在函数进行过程中更改变量的类型不是一个好的做法。

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