我更喜欢使用自称,全名变量在我的代码开头声明所有全局变量:
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);
- 是否可以使用缩写(例如_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_ms
或start_ms
和end_ms
。其中var interval_ms
是具有start
和end
属性的对象数组。
,但这也取决于您声明的其他全局变量。
另一件事是,您不应该在JavaScript中过多依赖全局变量。