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

在JavaScript中,切换先前分配的变量的数据类型是好的做法吗?还是偏好问题?[已关闭]

  •  0
  • fresh  · 技术社区  · 11 年前

    我是JavaScript新手,所以我很好奇JS变量赋值的灵活性。

    使用以下代码作为示例:

    var container = "hello";
    container = 43;
    

    在JavaScript中更改变量的数据类型是好的做法(还是常见做法)?还是偏好问题?

    4 回复  |  直到 11 年前
        1
  •  2
  •   jfriend00    11 年前

    Javascript给你很多绳子。你可以用那根绳子创作一部杰作,也可以编写可怕的代码。因为语言并不能阻止你做坏事,所以你必须知道语言中不同的事情是合适的还是不合适的。

    为此,变量的使用或用途应与其名称相匹配,且不应更改。换句话说,您不应将同一变量用于许多不同的目的。

    如果您有不同的用途,请创建一个不同的变量,并为该新变量指定一个描述其用途的不同描述性名称。

    有可能有一个变量具有一致的用途,适合一个描述性名称,并且该用途可以包含不同的类型,但这不是特别常见。大多数时候,你使用不同的类型,这是因为你有不同的用途,可以更好地适应不同的变量。

    我倾向于按照以下顺序考虑我的编码目标:

    1. 正确、可靠的代码
    2. 清晰、易于理解、可维护和可扩展的代码
    3. 针对情况的适当表现
    4. 简洁紧凑

    请注意,清晰、可维护的代码被赋予了相当高的优先级。这将使我能够在几年后回来处理这段代码,修复一个bug或添加一个功能,并仍然了解它的工作原理。或者,它将允许团队中的其他人立即处理代码,并且几乎不难理解代码的工作方式或如何安全地修改代码。

    使用不同的类型为多个目的重载同一变量不太可能清晰、易于理解和维护。我并不是说这样做永远都不可能,但代码最好能非常、非常清楚地表明,这是意料之中的事情,而且这种情况通常不会发生。


    注意,在代码示例中,变量的名称 container 如果包含 "hello" 43 .

        2
  •  2
  •   Liviu Mandras    11 年前

    虽然语言完全允许你这样做,但我会尽可能避免。这只是容易出错和误导。通常,变量名会描述其内容,如果您传递完全不同的内容,我认为您在滥用语言特性。

    JS中有以下概念 duck typing 例如,如果您有:

    function doStuff(myComplexType){
       var i = myComplexType.myProperty;
    }
    

    实际类型的 myComplexObject 只要满足 合同 并且有一个 myProperty 定义

        3
  •  1
  •   sergeyz    11 年前

    始终如一总是更好的。特别是如果你在团队中工作。这真的会让那些不得不仔细阅读代码的人感到沮丧,因为有时人们只是没有时间,他们会从一个地方跳到另一个地方,所以很容易不注意到代码中的这种变化。

    此外,切勿在数组中混合数据类型。相信我,你不想成为那个人。

        4
  •  -1
  •   kumarharsh    10 年前

    对相同类型的数据使用相同的变量是一种“好的做法”。特别是,不要在数组中混合类型,因为像V8(chrome)和SpiderMonkey(Firefox)这样的javascript引擎会在运行时优化代码,而数组中的混合类型(除其他外)不会让这种情况发生。你还想养成这个习惯,这样以后,如果你使用的是 Typed Arrays ,它会派上用场的。

    但抛开迂腐不谈,你可以随意快速地使用javascript designed that way 。有时,这也是不可避免的,因为函数中的参数可能有一个整数作为其参数,或者如果未传递,则为“undefined”,这是 一个物体 不是整数!

    玩JS很开心,它是一种学习起来很有趣的语言,而且很快就能上手。