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