关于js中‘use strict‘使用的一些看法

今天通过廖雪峰大佬写的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,让你变成一个更好的程序员。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值