今天通过廖雪峰大佬写的js教程学习前端开发,在学到sort排序这一节,出现了一个小问题

js前端开发教程链接:https://www.liaoxuefeng.com/wiki/1022910821149312/1024328479098336

首先是一个小小的排序练习,我按照教程中给出的示例定义了一个数组,并且将排序后的数组arr赋值给一个变量a,再使用document.write(a + "<br>")语句来输出。

<script>
'use strict';
vararr = [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';varr,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';
vara,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,让你变成一个更好的程序员。

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

  1. JS笔记 | JS中的strict model(严格模式)

    仅做笔记分享,如有错误请高手指出 ECMAscript5中引入了strict model.严格模式下的JS程序需要比非严格模式下的程序更加规范.严格模式对语法做了比较严格的要求, 变量上的不同 mes ...

  2. JS中“use strict”的含义以及使用它的区别

    use strict:使用严格模式:不会支持一些不规范的语法: 使用严格模式与不使用严格模式的区别: 使调试更加容易: 变量在赋值之前必须要声明,防止意外的全局变量: "use strict ...

  3. js中为什么你不敢用 “==”

    文章引用:http://0313.name/archives/480 前言 类型转换在各个语言中都存在,而在 JavaScript 中由于缺乏对其的了解而不慎在使用中经常造成bug被人诟病.为了避免某 ...

  4. c语言socket句柄函数传递,通过源码解析 Node.js 中进程间通信中的 socket 句柄传递...

    在 Node.js 中,当我们使用 child_process 模块创建子进程后,会返回一个 ChildProcess 类的实例,通过调用 ChildProcess#send(message[, se ...

  5. import export php,import与export在node.js中的使用方法

    import与export是es6中模块化的导入与导出,node.js现阶段不支持,需要通过babel进行编译,使其变成node.js的模块化代码.(关于node.js模块,可参考其他node.js模 ...

  6. 认清js中var a=b=1和var a=1,b=1的区别

    js中一次性定义多个变量的时候,可以用:var a=1,b=1这种中间用逗号隔开的方式,但有些时候为了省事,直接定义var a=b=1.那这两种写法方式最后效果是一样的吗?有没有什么区别呢?请大家看下 ...

  7. js中两个对象的比较

    代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> & ...

  8. js自动触发onclick_每日一题JS中最基本的this情况分析

    关注"前端学苑" ,坚持每天进步一点点 「~this情况分析 ~」 每日一题,希望让爱学习.思考的前端技术伙伴在一起学习.复盘.成长. 基础知识要夯实,原理源码要深入,深度广度要扩 ...

  9. 彻底搞懂 JS 中 this 机制

    彻底搞懂 JS 中 this 机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 目录 this 是什么 this 的四种绑定规 ...

最新文章

  1. android 锁屏应用,创建一个Android锁屏应用。
  2. C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案
  3. python使用方法-Python中bisect的使用方法
  4. linux kernel中__setup()函数介绍
  5. 面向对象和面向过程的区别_面向过程和面向对象的区别
  6. 小白学编程“Java小白”入门解疑大全
  7. 数据结构与算法专题——第九题 鸡尾酒排序
  8. 2017西安交大ACM小学期数据结构 [树状数组]
  9. 洛谷 P4012 深海机器人问题【费用流】
  10. uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限
  11. 11g新特性-自动sql调优(Automatic SQL Tuning)
  12. MySQL8.0卸载教程
  13. 两万字深入解密 Go 语言接口的那些事儿 | 技术头条
  14. 键盘皇者 RealForce 104Pro独家评测
  15. Redis与LRU实现
  16. 微信防撤回补丁来了!更新也不会失效
  17. 医药箱APP静态小项目
  18. word自动生成目录的最后一个大标题页码前没有点点点连接线解决方案
  19. HBuilderX格式化css
  20. ROSBridge - ROS系统与非ROS外部系统的通信的C++客户端实现

热门文章

  1. JavaWeb学习笔记-Tomcat虚拟目录与虚拟主机介绍
  2. 使用TTS实现Oracle跨版本迁移
  3. Rockland Mcl-1抗体说明书
  4. 【深度学习】2022年最值得关注的十篇论文,你都看了吗?来卷来学习
  5. 学习-霸天虎LWIP代码移植到原子开发板的注意事项-标记
  6. 这次终于有人把企业升级、转型、转行分清楚了
  7. 计算机网络--考前最后一练
  8. 单串口扩展为4串口的芯片WK2114的使用(一)
  9. 【职业规划】第二篇:程序员分级之中级程序员
  10. android打电话、发短信实现