免责声明:我知道下面的问题可能被视为"征求意见"(因此它不属于主题).
但事实并非如此:我正在寻找在考虑这一点时应该考虑的利弊事实.
我只是阅读(来自优秀的探索ES6)一个关注constvs letvsvar的摘录,其中结论表明(粗体是我的):
然后我们有两种方法:
- 首选
const:const标记不可变绑定.- 首选
let:const标记不可变的值.我略微倾向于#1,但#2也很好.
让我感到困惑的是:这种偏好似乎是基于两种方法之间产生的差异的深层技术意义,好像作者感到基本上关注代码如何在低级别工作.
但是我也感到担心(也许是第一个!)可读性方面:从这个角度来看,#2似乎更好地使代码在处理数据发生的事情上更具语义意义.
但也许我错过了#1选择的一些优势......?
编辑,利用建议重复的链接:为什么大多数时候我应该使用const而不是让javascript?
事实上,对这个问题的公认答案实际上是以这样一种方式暴露事物,而不是强迫我遵循我以前的观点,即#2胜过#1.
顺便说一句,我意识到我的问题可能不是那么清楚,所以这里有一个更详细的重写:
const和let,所以我的问题并没有询问有关的事情.const 在那里,我很惊讶作者更喜欢#1,因为(从我的观点来看)这是相当误导的.
使用对象的最常见方式是它们的内容在此过程中发生变化,因此const如果使用#1,则在其声明级别读取:
另一方面,选择使用#2,我们可以相信 - 声明的const对象不会改变(实际上除了疏忽和/或错误).
所以回到我的问题:由于上面的反思似乎显然导致选择#2,我想知道我可能错过了哪一点,这使得作者更喜欢#1.
分析这个SO问题所显示的代码,我刚刚注意到它使用jQuery迭代JSON数组的方式:
$(data).each(function() {
Run Code Online (Sandbox Code Playgroud)
而在我看来,数组应该以这种方式迭代:
$.each(data, function() {
Run Code Online (Sandbox Code Playgroud)
实际上,jQuery.each()手册页指出:
$ .each()函数与$(selector).each()不同,后者用于独占于jQuery对象进行迭代.
但是由于OP似乎让他的代码至少部分工作,我很想测试,并发现它有效!
这是证明:
var data = [
{"key": "value-1"},
{"key": "value-2"},
{"key": "value-3"}
];
$(data).each(function() {
document.write('<br />' + this.key);
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>Run Code Online (Sandbox Code Playgroud)
所以,如果$(data).each()工作时data是一个JSON阵列,这似乎意味着该数组是一个可以接受的内容$(data)返回一个jQuery对象.
然后进行调查我检查了jQuery(elementArray)手册页并查看了jQuery( elementArray )一节,其中说明:
elementArray
类型:Array 包含要包装在jQuery对象中的一组DOM元素
的数组.
根据以上所述,对象数组(而不是DOM元素)应该失败.
所以我测试比较这个$(data)和简单的返回对象$('body').结果如下:
var data = [
{"key": "value-1"},
{"key": "value-2"},
{"key": "value-3"}
];
function log(obj, init) {
for (var prop …Run Code Online (Sandbox Code Playgroud)