今天通过廖雪峰大佬写的js教程学习前端开发,在学到sort排序这一节,出现了一个小问题
js前端开发教程链接:https://www.liaoxuefeng.com/wiki/1022910821149312/1024328479098336
首先是一个小小的排序练习,我按照教程中给出的示例定义了一个数组,并且将排序后的数组arr赋值给一个变量a,再使用document.write(a + "<br>")语句来输出。
<script>
'use strict';
var
arr = [1, 20, 2, 10, 99, 100, 200];
a = arr.sort();
document.write(a + "<br>");
</script>
我尝试运行结果却是这个样子的:
没错,是完完全全的空白。
我一开始以为是我的输出方式有问题,于是乎我让他直接输出arr:
结果还是一片空白。
打开控制台一看,它告诉我a没有定义
此时我不得不使用万能的console大法了:
但是事实证明arr是已经被排序好了的。
a没有定义,你给我报错,我输出不出来,我能理解,但是arr可是已经被排序好了的啊,你为啥也不给我输出任何东西出来?
就在这时,代码头的'use strict'引起了我的注意。
我试着删去了这段代码:
结果是a跟arr都正常被输出了,而且控制台也自动输出了arr的内容。
然后我又急忙翻出之前学习的一个数组去重代码块,里面也是明明使用了'use strict',但却是可以正常输出去重后的内容的:
<script>
'use strict';
var
r,
arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
r = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
document.write(r + "<br>");
</script>
对比以上两段代码块,我发了自己犯的一个致命的错误:
我没有声明变量a
所以当初廖雪峰大佬在写这段代码时,看似“多余”地在var第一行声明了一个变量r的原因,似乎也说得通了。
我重新加上了'use strict',定义了变量a与数组arr
<script>
'use strict';
var
a,
arr,
arr = [1, 20, 2, 10, 99, 100, 200];
a = arr.sort();
console.log(arr);
document.write(a + "<br>");
document.write(arr + "<br>");
</script>
终于,我得到了我想要的结果,控制台也没有再次提示我没有定义变量a。
"use strict" 指令不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。
"use strict" 的目的是指定代码在严格条件下执行。
严格模式下你不能使用未声明的变量。
"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。
另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。