1
990
自从
ES2015
,javascript的概念是
这将在 pretty much all browsers except IE 8, 9 and 10 . 有些人可能也需要 strict mode 启用。
你可以使用
|
2
304
您是否试图保护变量不被修改?如果是,则可以使用模块模式:
使用此方法,无法修改值。但是,必须在config()上使用get()方法。 如果不需要严格保护变量值,那么只需按照建议进行操作,并使用所有上限的约定。 |
3
119
这个
|
4
65
见
Object.freeze
. 你可以
use
|
5
64
IE支持常量,比如:
|
6
58
ECMAScript 5介绍
它是 supported in every modern browser (以及IE_9)。 |
7
24
不,不是一般情况。Firefox实现
@John 指的是在其他语言中使用了多年的consts的一种常见命名实践,我看不出您为什么不能使用它。当然,这并不意味着有人无论如何都不会重写变量的值。:) |
8
20
Mozillas MDN Web Docs
包含关于
但遗憾的是,IE9/10仍然不支持
他们没有实现它,因为其他浏览器没有正确地实现它?!太害怕做得更好?无论标准定义与否,常量都是常量:设置一次,永不更改。
对于所有的想法:每个函数都可以被覆盖(XSS等)。所以没有区别
更新:
IE11
supports
|
9
18
在JavaScript中,我的首选是使用函数返回常量值。
|
10
17
如果您不介意使用函数:
这种方法为您提供函数而不是常规变量,但它保证 * 一旦设置了值,就没有人能改变它。
我个人觉得这相当令人愉快,特别是在我习惯了这种从淘汰的观察器模式之后。
*除非有人重新定义了函数
|
11
17
使用“new”对象API,您可以这样做:
看一看
this
关于Mozilla MDN的更多细节。它不是第一级变量,因为它附加到一个对象上,但是如果你有一个作用域,任何东西,你都可以附加到它上。
注意:赋值将在控制台中返回赋值,但变量的值不会更改。 |
12
14
尽可能将常量分组到结构中: 例如,在我当前的游戏项目中,我使用了以下内容:
任务:
比较:
最近我正在使用,用于比较:
IE11采用了新的ES6标准,具有“const”声明。
|
13
12
您可以很容易地为脚本配备一种可设置但不可更改的常量机制。尝试更改它们会产生错误。
|
14
11
忘记IE然后用
|
15
9
然而,没有确切的跨浏览器预定义方法来实现这一点,您可以通过控制变量的范围来实现,如其他答案所示。 但我建议使用名称空间来区分其他变量。这将把碰撞的可能性从其他变量减少到最小。 适当的名称间距,如
所以在使用的时候
您还可以使用object.freeze方法阻止添加任何新键或更改IW_常量内的任何键。但是,传统浏览器不支持它。 前任:
对于较旧的浏览器,可以使用 polyfill 冻结法。 如果您可以调用函数,那么下面是定义常量的最佳跨浏览器方法。在自执行函数中确定对象范围,并返回常量的get函数 前任:
//要获取值,请使用
**在这两个示例中,您必须非常小心名称间距,这样就不应该通过其他库替换对象或函数。(如果对象或函数本身将被替换,则整个常量将消失) |
16
7
有一段时间,我在传递给的对象文本中指定了“常量”(实际上还不是常量)。
在过去,我也创造了
现在,我只是这样做
|
17
6
我的意见(仅适用于对象)。
尝试!但是理解——这是对象,但不是简单的变量。 也尝试一下:
|
18
5
我也有这个问题。经过一段时间的寻找答案和每个人的回答,我想我已经想出了一个可行的解决办法。 我看到的大多数答案似乎都是使用函数来保存常量。正如许多论坛的用户所发布的那样,用户可以很容易地在客户端重写这些功能。我被基思·伊维特的答案所吸引,即常量对象不能被外部访问,只能从内部的函数访问。 所以我想出了这个解决方案: 将所有内容都放在匿名函数中,这样客户端就不能更改变量、对象等。另外,通过让其他函数从内部调用“real”函数来隐藏“real”函数。我还考虑使用函数来检查客户端的用户是否更改了函数。如果函数已更改,请使用内部“受保护”且无法更改的变量将其更改回原来的状态。
似乎安全性确实是一个问题,并且没有办法从客户端“隐藏”您的编程。我的一个好主意是压缩您的代码,这样任何人,包括您,程序员,都很难阅读和理解它。您可以访问以下网站: http://javascriptcompressor.com/ . (这不是我的网站,别担心我没有做广告。)这是一个可以让你免费压缩和混淆javascript代码的网站。
|
19
5
显然,这表明需要一个标准化的跨浏览器常量关键字。 但现在:
或
这两个看起来都足够了,其他的都像是用火箭筒射杀一只苍蝇。 |
20
4
我用
|
21
4
在JavaScript中,我的实践是尽可能避免常量,而是使用字符串。当您想将常量暴露于外部世界时,会出现常量问题: 例如,可以实现以下日期API:
但简单地写:
这样,“天”和“小时”就真的像常量,因为你不能从外部改变“小时”代表多少秒。但很容易改写
这种方法也有助于调试。如果萤火虫告诉你
|
22
4
好吧,这很难看,但它在火狐和Chromium中给了我一个常量,一个常量(wtf?)在游猎和歌剧中,以及在IE中的变量。 当然eval()是邪恶的,但是没有它,IE就会抛出一个错误,阻止脚本运行。 Safari和Opera支持const关键字,但是 你可以改变常量的值 . 在本例中,服务器端代码正在将javascript写入页面,并将0替换为一个值。
这对什么有好处?不多,因为它不是跨浏览器。充其量,也许有点心平气和至少 一些 浏览器不会让书签或第三方脚本修改该值。 使用Firefox 2、3、3.6、4、Iron 8、Chrome 10、12、Opera 11、Safari 5、IE 6、9进行测试。 |
23
4
如果值得一提,您可以在
angular
使用
|
24
4
改进版
Burke's answer
你可以这么做
它需要IE9+或真正的Web浏览器。
*只有当初始值不可变时,属性才是只读的。 |
25
4
Javascript ES6(重新)引入了
除此之外,
对于基本数据类型(布尔、空、未定义、数字、字符串、符号),它的行为与预期一致:
注意: 注意物体的缺陷:
如果你真的需要一个不变的,绝对不变的对象:只需使用
|
26
3
另一种选择是:
然后简单地说:
如果你愿意
|
27
3
|
28
3
关键字“const”是早先提出的,现在它已正式包含在es6中。通过使用const关键字,可以传递将作为不可变字符串的值/字符串。 |
29
2
在javascript中引入常量充其量是一种黑客行为。 在javascript中实现持久的和全局可访问的值的一个好方法是使用一些“只读”属性声明一个对象文本,如下所示:
您将把所有常量分组到一个单独的“我的”附件对象中,您可以在该对象中查找存储的值或其他您决定将其放在该对象中的内容。现在让我们测试一下它是否有效:
如我们所见,“my.constant1”属性保留了其原始值。你做了一些很好的“绿色”临时常量… 但当然,这只会防止您在直接访问时意外地修改、更改、取消或清空属性常量值,如在给定示例中所示。 否则,我仍然认为常量是用于假人的。 我仍然认为,把你的巨大自由换成一个欺骗性安全的小角落是最糟糕的交易。 |
30
2
|
Codename K · VB6-如何使窗体排在第二位? 6 年前 |
spice · 条件语句PHP 5.4出现意外“)”错误[重复] 6 年前 |
snuff · c语法的问题-const*const*定义 6 年前 |
DCR · 为什么要触发onclick事件 6 年前 |
ClementNerma · 如何在C中生成“实”常量?[副本] 6 年前 |