JavaScript 中的所有大写常量。和要求。和进口

Posted

技术标签:

【中文标题】JavaScript 中的所有大写常量。和要求。和进口【英文标题】:All caps constants in JavaScript. And requireds. And imports 【发布时间】:2016-04-16 10:00:21 【问题描述】:

我习惯于使用全部大写来声明常量值。然后我开始将const 用于任何永远不会改变的值。突然间,大多数事情都是常数。没关系。

但是代码开始看起来很不一样了。

已经谈过了:https://softwareengineering.stackexchange.com/questions/278652/how-much-should-i-be-using-let-vs-const-in-es6

我对“继续const所有事情!”没有意见。我猜。我的代码周围会有很多大写字母。

但还有更多。

按照这个逻辑,所需的东西应该是常量吗?我从来没有重新分配一个必需的。所以,是吗?

const GULP = require('gulp');
const ESLINT = require('gulp-eslint');

并且导入是不可重新分配的,所以它应该是:

import SOMETHING from 'modules/something';

对吗?

我正在寻找参考资料。关于常量的最佳实践。有人比我迄今为止考虑得更久、更好。

或者我应该选择任何选项并从那时起保持一致?

至少考虑到所有这些要点,我找不到一个讨论来帮助我组织我的想法。然而。

【问题讨论】:

【参考方案1】:

一般来说,将常量大写是常见的做法。这是一个约定,它告诉其他程序员该值是固定的。 javascript 关键字const,虽然在这个意义上令人困惑并不是一个常数。我想这就是你感到困惑的地方。常量是一个概念/结构。不是语言中的原始类型。您可以使用const 来表示常量(并且您应该),但不是每个const 都是常量:-) 基本上,常量是一个变量,其值在程序执行期间不能或不会改变。 Javascripts 的const 变量可以改变它,只是不能重新分配。重新分配一个值和改变一个值是两件不同的事情。

const foo = [1];
// allowed
foo.pop()
push(2);

// not allowed
foo = [];

基本上,它或多或少是为了给程序员一个有点浅的不可变类型而添加的。每个人都使用 const,因为如果你想捕获赋值错误,它是最安全的变量类型,并且它像 let 一样是块范围的。使用 const 比使用 let 也有轻微的性能优势。

const gulp = require('gulp'); 这样的东西虽然在这里使用const 是完美的,但它不是一个常数。它是对值不断变化的函数的引用。

因此,请务必遵守约定,但仅限于涉及 CONSTANT 时。例如,如果您要构建某种 html5 视频播放器并提供不同的播放速度。

defaultPlaybackSpeed = 1; // Nothing wrong with this
doubleSpeedMultiplier = 2; // Nothing wrong with this
DEFAULT_PLAYBACK_SPEED = 1; // This though tells others this value is fixed
DOUBLE_SPEED_MULTIPLIER = 2; // Same here

【讨论】:

"类似 const gulp = require('gulp'); 虽然在这里使用 const 是完美的,但它不是一个常数。它是对具有不断变化的值的函数的引用。" +1。在选择常量大小写之前,请考虑字段真的是否感觉像是一个非常不可变的常量。【参考方案2】:

有趣。 我正在阅读You Don't Know JS: Up & Going 的书并看到:

按照惯例,JavaScript 变量作为常量通常是 大写,多个单词之间用下划线_

然后我研究了一下,发现其他一些开发者网站确实建议您使用大写,正如MDN 所说:

// NOTE: Constants can be declared with uppercase or lowercase, but a common
// convention is to use all-uppercase letters.

// define MY_FAV as a constant and give it the value 7
const MY_FAV = 7;

除此之外,我还注意到他们确实说这是在单词之间使用_ 的惯例。

我读到这在某些语言中是一种常见做法,但我没有注意到使用这种方式编写代码的 Javascript 项目。除此之外,我总是看到有人说 JS 是 camelCase,所以这让我有点困惑。反正我是新手。

我认为重要的是您编写的代码对您和可能使用您的代码的其他人都有好处。只要您与您的项目保持一致,并遵循您的团队编写代码的相同方式,我相信没问题。

如果你习惯大写和_,那么我会选择:

const GULP = require('gulp');
const ESLINT = require('gulp-eslint');

【讨论】:

【参考方案3】:

仅仅因为其他语言使用大写字母作为常量,我不认为这意味着 JavaScript 会自动应用。

我能想到的用于大写字母的唯一参数是在视觉上区分什么可以重新分配,什么不能。也就是说,使用 eslint 之类的工具可以在您执行以下操作时发出警告:

尝试重新分配使用const 声明的变量(即改用let)。 用let 声明一个变量并且永远不会重新分配它(即,改用const)。

此规则的一个例外是定义数学常数,或其他对外部配置没有意义的硬编码值 - 例如DECAY_RATE,或类似性质的东西。

【讨论】:

我认为常量的所有大写也适用于 JavaScript:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 我也不确定不变性与它有什么关系。 const 只是使变量不可重新分配。非常不同的事情......但是谢谢! 你说的很对!我最近一直在大量使用 immutable.js,肌肉记忆力太强了……答案已更新以反映这一点。

以上是关于JavaScript 中的所有大写常量。和要求。和进口的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中的常量是必须大写吗?比如final double PI=3.14

Java中的变量和常量

php的命名规范

java学习手札变量 常量

java基础知识点(在毕向东视频上总结的)

java基础学习——14代码格式