2014-09-24 30 views
10

如果创建对象的引用,并且引用不会改变(即使该对象将会改变),使用const代替var会更好吗?在JavaScript中我应该尽可能使用const而不是var?

例如:

const moment = require('moment') 

exports.getQuotation = function(value) { 

    const quotation = {}; 
    quotation.value = value; 
    quotation.expiryDate = moment().add(7, 'days'); 

    // Do some other stuff with quotation perhaps 

    return quotation; 

}; 
+0

我不会乱搞const,是ES6,它不会增加你的代码性能,但它会使有点难以修复和重构。坚持var(总是声明你的变量) – donnanicolas 2014-09-24 11:41:17

+1

@donnanicolas ES6'const'和'let'几乎是最后的 – fmsf 2014-09-24 12:10:06

回答

3

如果检查MDN,它的参考,你可以发现它的实验技术是ES6建议的一部分。它的浏览器支持有限。从MDN

参考为const

这是一个实验的技术,(6的ECMAScript) 提案和谐的一部分。由于此技术的规格未稳定,因此请检查兼容性表以了解各种浏览器的使用情况。还请注意 ,随着规范的变化,实验技术的语法和行为在未来版本的浏览器中受到 更改。

所以这回答你是否应该到处使用。 :)

另外,如果您想在对象中创建不应该被允许更改的属性,那么您应该检查Object.defineProperties()并使用writable属性。

+0

我不认为这是请求者的意思。我认为这个问题是“如果我在一个支持'const'和'let'的环境中,我应该选择哪一个?”他说'var',但我认为这个问题更多的是关于'let',它具有相同的块范围。 – Pipo 2015-06-25 18:28:25

+0

@Pipo:对不起。我从你的评论中得到了这个。但问题在哪里? – mithunsatheesh 2015-06-26 03:07:19

+0

我认为这是这部分“如果创建一个对象的引用,并且引用不会改变(即使该对象将会改变),使用'const'而不是'foo'?'会更好吗?我把'var'改成了'foo',以表明我想_他不想真正比较'var'(或'let'),但是看第一部分,我想他想知道,如果如果对象的内容发生变化,则通常使用'const'作为对象。 – Pipo 2015-06-26 09:01:12

1

const用于变量常数,即一旦声明,它的值不应该改变,而var可以根据意愿改变。

使用constvar完全是您的意愿。对我来说,去如下

  • 如果我100%肯定,一个变量的值是不会改变的,它不是要重新声明,我将它定义为一个常量。
  • 在所有其他情况下,我将使用var。

请注意,重新申报const会立即抛出错误。

4

您可以使用const的,但你必须在--harmony

node app.js --harmony 

运行节点您还可以设置"use strict",否则你将有运行时执行的问题:

exports.getQuotation = function(value) { 
    "use strict"; 

    const I_AM_CONSTANT = {}; 
    let quotation = {}; 
    ... 

其他如果你正在运行--harmony节点,那么在语义上,使用const作为常量更有意义。对于实际的变量,你应该使用let而不是var,因为let只定义了范围内的变量(避免了提升问题)

相关问题