Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中将字符串文字提取到常量是最佳做法吗? 在爪哇中,我认为将字符串字替换为常量变量是最好的做法,只要它们在一个以上的地方使用,并希望匹配。例如,如果您要设置一个cookie,然后再将其读回,cookie的名称应该是一个常量,这样编译器就可以帮助您捕获拼写错误,更不用说允许您拥有一个可读的变量名和字符串的实际值_Javascript_Constants - Fatal编程技术网

在Javascript中将字符串文字提取到常量是最佳做法吗? 在爪哇中,我认为将字符串字替换为常量变量是最好的做法,只要它们在一个以上的地方使用,并希望匹配。例如,如果您要设置一个cookie,然后再将其读回,cookie的名称应该是一个常量,这样编译器就可以帮助您捕获拼写错误,更不用说允许您拥有一个可读的变量名和字符串的实际值

在Javascript中将字符串文字提取到常量是最佳做法吗? 在爪哇中,我认为将字符串字替换为常量变量是最好的做法,只要它们在一个以上的地方使用,并希望匹配。例如,如果您要设置一个cookie,然后再将其读回,cookie的名称应该是一个常量,这样编译器就可以帮助您捕获拼写错误,更不用说允许您拥有一个可读的变量名和字符串的实际值,javascript,constants,Javascript,Constants,我正在回顾JavaScript中的一些类似代码,我倾向于建议将文本替换为常量。然而,我不确定同样的原因是否适用,因为没有编译器,cookie名称与变量名称一样具有描述性 编辑:关于到目前为止收到的评论和回复,我肯定更关心常量的使用,而不是它们的实际实现方式。我在Java和其他编译语言中看到了它们的价值,这是一种防止错误的方法,但我不确定在Javascript中看到了相同的价值 作为一种文档机制,比如对于幻数,我认为拥有一个命名变量(即使它不是作为常量强制的)仍然是提高可读性的好方法。但对于字符串

我正在回顾JavaScript中的一些类似代码,我倾向于建议将文本替换为常量。然而,我不确定同样的原因是否适用,因为没有编译器,cookie名称与变量名称一样具有描述性

编辑:关于到目前为止收到的评论和回复,我肯定更关心常量的使用,而不是它们的实际实现方式。我在Java和其他编译语言中看到了它们的价值,这是一种防止错误的方法,但我不确定在Javascript中看到了相同的价值

作为一种文档机制,比如对于幻数,我认为拥有一个命名变量(即使它不是作为常量强制的)仍然是提高可读性的好方法。但对于字符串文字,我不确定:

var trackingCookieName = "trackingCookie";

比仅仅使用“trackingCookie”要好得多,因为您可以键入文字或变量名,并且无论哪种方式,都只能在运行时捕获。

答案是主观的。正如您所写,没有编译器或常量


因此,如果字符串存储在变量中有助于您读取和维护代码,那么就这样做,否则就避免这样做……

无论使用哪种语言,使用常量总是更好的(好的,也许您可以找到一个很好的例外)。我唯一一次使用字符串文字是在制作文件解析器时,或者在时间紧迫且不想制作常量列表时

当然,太多的常量可能更难读取。。。这实际上取决于字符串文字的模糊程度


无论如何,Javascript是一种字符串密集型语言(就像任何解释语言一样)。您可以根据对象的字符串名称从对象中提取字段(
container[“innerObject”]
),通过字符串运行代码几乎太容易了。

Javascript const没有得到广泛的支持,所以我想说没有,这不是最佳实践

“const的当前实现是一个特定于Mozilla的扩展,不是ECMAScript 5的一部分。Firefox和Chrome(V8)支持它Opera 9+和Safari部分支持。Internet Explorer 6-9或Internet Explorer 10的预览版不支持此功能。const关键字当前在函数范围内声明常量(与使用var声明的变量类似)

const将由ECMAScript 6定义,但语义不同。与let语句声明的变量类似,使用const声明的常量将在块范围内。“-

此外,如果您想在javascript中实现一个真正的常量,那么将其包装在一个对象中,并且只提供get功能

大概是这样的:

var Cookies = (function()
{
 var consts = 
 {
  'APPLICATION': '21930857a3e',
  'SERVER': '435a3456jh5'
 };
 return
 {
  get: function(name)
  { 
   return consts [name];
  }
 };
}
)();
然后检索它们:

document.write('<img src="' + Cookies.get('APPLICATION') + '" />')
document.write(“”)

或者您希望如何使用常量。

我同意gdoron的观点,他说这是主观的,事实上,我们称之为编程语言的约定,实际上是开发人员之间的一种协议,在他们看来,代码将更清晰,更易于维护等等

我带来了“约定”的东西,因为这个“const”的东西基本上就是关于它的,有一些人/组织经常使用这些语言,并为他们定义了一些好的实践。您可以以更适合您的方式使用这些约定,因为它们之间略有不同,因此您可以根据经验进行调整。这是:


好的,我同意这可能是主观的选择。以下是我倾向于在JavaScript中使用等同于常量的东西的原因。首先,这里是我如何定义我的常量(或者更像枚举):

然后,在全局范围内,可能在某个文件中,我这样做了

ENUM("MSG_DOOR_OPEN");
ENUM("MSG_DOOR_CLOSED");
我在我的代码中使用它,比如:

obj.notify(MSG_DOOR_OPEN);
我更喜欢这个的原因是:

  • 如果我拼错了什么,我会得到一些未定义的引用错误,这使得在任何JavaScript控制台中都很容易发现
  • 这样,我指的是预先分配的字符串对象,而不是创建新的字符串对象
  • 我不必引用这句话——看起来更好,尤其是在vim中
  • 缺点:

  • 是的,这是一个全局变量
  • 没有名称间隔(MSG_uuu前缀除外)
  • 如果你什么都想这么做,那就麻烦了。(你不必)

  • 但是对于重要的事情,比如消息名等,我喜欢这样做。此外,将所有消息名定义在一个位置是很好的。我不是JavaScript专家,所以如果我错了,请纠正我…

    将字符串文字提取到常量意味着

    • 像JSHint这样的工具可以识别拼写错误的变量名
    • 压缩器可以缩写变量名以获得较小的输出
    • 您只需在一个位置更改字符串值

    在JavaScript常量的争论中,我个人更喜欢以下方法(实际上更接近枚举)

    这使其易于使用,如:

    var myDirection = DIR.SouthEast;
    
    此外,现代IDE可以为真正有帮助的值提供
    Intellisense

    @Travis-J提到的另一种方法很好,很多框架都使用它(Sencha等)。但对于JS中接近常量或枚举的内容,我更喜欢上面的方法

    但你当然可以像特拉维斯提到的那样:

    var Directions = (function() {
        var consts = {
            'North': [-1, 0],
            'NorthEast': [-1, 1],
            'East': [0, 1],
            'SouthEast': [1, 1],
            'South': [1, 0],
            'SouthWest': [1, -1],
            'West': [0, -1],
            'NorthWest': [-1, -1]
        };
    
        return {
            get: function(name) {
                return consts[name];
            }
        }
    })();
    
    但我现在的问题是你必须知道正确的钥匙

    var myDirection = Directions.get('SouthEast');
    var myDirection = Directions.get('SOUTHEAST');  //  null
    
    希望这能提供一些帮助。

    @JeffreySwe
    var Directions = (function() {
        var consts = {
            'North': [-1, 0],
            'NorthEast': [-1, 1],
            'East': [0, 1],
            'SouthEast': [1, 1],
            'South': [1, 0],
            'SouthWest': [1, -1],
            'West': [0, -1],
            'NorthWest': [-1, -1]
        };
    
        return {
            get: function(name) {
                return consts[name];
            }
        }
    })();
    
    var myDirection = Directions.get('SouthEast');
    var myDirection = Directions.get('SOUTHEAST');  //  null