JS:如何将缩写用于完整命名的变量



我更喜欢使用自称,全名变量在我的代码开头声明所有全局变量:

var $interval_start_dates          = [];    // date intervals
var $interval_end_dates            = [];
var $interval_start_milli          = [];    // convert dates to milliseconds
var $interval_end_milli            = [];
var $interval_start_milli_sorted   = [];    // sort millisecond dates
var $interval_end_milli_sorted     = [];

这个命名约定通常会导致长的可变名称,在代码中使用它们时,我会发现这些命名标签。因此,我也更喜欢将缩写用于代码中的变量:

var _isd  = $interval_start_dates;
var _ied  = $interval_end_dates; 
var _ism  = $interval_start_milli; 
var _iem  = $interval_end_milli;
var _isms = $interval_start_milli_sorted;
var _iems = $interval_end_milli_sorted;

我在这方面的问题如下:

(1)是否可以使用缩写(例如_isd)输出中间变量(例如$ Intervel_start_dates)?

(2)此命名惯例是否会导致代码的性能较差(例如速度),如果可以的话,是否有更好的方法使用缩写?

一句话:我知道我可以使用注释来告知缩写变量的全名。但这意味着我必须在代码中多次重复这些评论。我正在寻找一个更"光滑"的解决方案,它允许我使用例如Console.log显示变量的全名(如果可能的话)。

为什么不使用某些数据结构。优势是更可读的格式,您可以使用缩写来访问变量。

var interval = {
    start: {
        dates: [], // date intervals
        milli: [], // convert dates to milliseconds
        milli_sorted: [] // sort millisecond dates
    },
    end: {
        dates: [],
        milli: [],
        milli_sorted: []
    }
};
// use
var ie = interval.end;
alert(ie.dates);
  1. 是否可以使用缩写(例如_isd)输出中间变量(例如$ Intervel_start_dates)?

是。他们都指的是相同的数组,所以您用哪个数组来输出数组都没关系。

(2)此命名惯例是否会导致代码的性能较差(例如速度),如果可以的话,是否有更好的方法使用缩写?

否。他们都指的是相同的数组,每个数组与另一个一样直接引用。

但是 ,还有其他潜在问题。例如,如果您需要过滤或映射这些数组,那么更新一个参考并忘记另一个引用真的很容易,例如:

_isd = _isd.filter(function(entry) { return entry.foo < bar; });
// OOOPS! Now `_isd` and `$interval_start_dates` don't refer to the same array anymore!

如果只是输入名称,任何好的IDE都可以使您更容易。

我正在寻找更多的"光滑"解决方案允许我使用例如console.log显示变量的全名(如果可能的话)。

我不确定您在这里问什么,但是如果您是说要在某个地方使用_isd(例如,一个函数),并且该函数在其输出中而不是_isd中显示$interval_start_dates,那么您可以't(合理地)这样做。_isd$interval_start_dates之间没有链接,除了它们指的是同一数组。但是,然后,您无法做到 yryany - 如果将 $interval_start_dates传递到函数中,它仍然无法推断出它的名称,因为接收值的函数的参数未链接在到$interval_start_dates的任何方法(除了它们指的是同一数组)。


旁注:如果所有这些都是数组,并且您想以某种方式知道"名称"。基于数组参考的数组中,您可以利用以下事实:JavaScript中的标准数组根本不是数组,它们只是对象,并为其分配一个名称中的属性,例如:

var $interval_start_dates          = [];    // date intervals
$interval_start_dates.name = "$interval_start_dates";
// ...
var _isd = $interval_start_dates;
console.log(_isd.name); // "$interval_start_dates"

如果这样做,请确保您不使用for-in循环循环(但是有更好的方法)。或使用Object.defineProperty定义名称:

var $interval_start_dates          = [];    // date intervals
Object.defineProperty($interval_start_dates, "name", {
    value: "$interval_start_dates"
});

...默认情况下添加的属性是不可算的。

在性能方面,这没关系。不过,您的代码将变得越来越不可阅读。因此,您将必须确定对您更重要的内容:更快的可读性或编码。您可以通过使用自动完成变量名称的IDE来实现这两者。

此外,大多数时候,您的变量名称可以变短,而不会失去任何含义,例如:

var $interval_start_milli可以更改为var interval_start_ms甚至var start_ms,因为间隔具有起点和结束,这意味着您将具有var interval_msstart_msend_ms。其中var interval_ms是具有startend属性的对象数组。

,但这也取决于您声明的其他全局变量。

另一件事是,您不应该在JavaScript中过多依赖全局变量。

相关内容

  • 没有找到相关文章