关于js中‘use strict‘使用的一些看法
今天通过廖雪峰大佬写的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‘使用的一些看法相关推荐
- JS笔记 | JS中的strict model(严格模式)
仅做笔记分享,如有错误请高手指出 ECMAscript5中引入了strict model.严格模式下的JS程序需要比非严格模式下的程序更加规范.严格模式对语法做了比较严格的要求, 变量上的不同 mes ...
- JS中“use strict”的含义以及使用它的区别
use strict:使用严格模式:不会支持一些不规范的语法: 使用严格模式与不使用严格模式的区别: 使调试更加容易: 变量在赋值之前必须要声明,防止意外的全局变量: "use strict ...
- js中为什么你不敢用 “==”
文章引用:http://0313.name/archives/480 前言 类型转换在各个语言中都存在,而在 JavaScript 中由于缺乏对其的了解而不慎在使用中经常造成bug被人诟病.为了避免某 ...
- c语言socket句柄函数传递,通过源码解析 Node.js 中进程间通信中的 socket 句柄传递...
在 Node.js 中,当我们使用 child_process 模块创建子进程后,会返回一个 ChildProcess 类的实例,通过调用 ChildProcess#send(message[, se ...
- import export php,import与export在node.js中的使用方法
import与export是es6中模块化的导入与导出,node.js现阶段不支持,需要通过babel进行编译,使其变成node.js的模块化代码.(关于node.js模块,可参考其他node.js模 ...
- 认清js中var a=b=1和var a=1,b=1的区别
js中一次性定义多个变量的时候,可以用:var a=1,b=1这种中间用逗号隔开的方式,但有些时候为了省事,直接定义var a=b=1.那这两种写法方式最后效果是一样的吗?有没有什么区别呢?请大家看下 ...
- js中两个对象的比较
代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> & ...
- js自动触发onclick_每日一题JS中最基本的this情况分析
关注"前端学苑" ,坚持每天进步一点点 「~this情况分析 ~」 每日一题,希望让爱学习.思考的前端技术伙伴在一起学习.复盘.成长. 基础知识要夯实,原理源码要深入,深度广度要扩 ...
- 彻底搞懂 JS 中 this 机制
彻底搞懂 JS 中 this 机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 目录 this 是什么 this 的四种绑定规 ...
最新文章
- android 锁屏应用,创建一个Android锁屏应用。
- C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案
- python使用方法-Python中bisect的使用方法
- linux kernel中__setup()函数介绍
- 面向对象和面向过程的区别_面向过程和面向对象的区别
- 小白学编程“Java小白”入门解疑大全
- 数据结构与算法专题——第九题 鸡尾酒排序
- 2017西安交大ACM小学期数据结构 [树状数组]
- 洛谷 P4012 深海机器人问题【费用流】
- uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限
- 11g新特性-自动sql调优(Automatic SQL Tuning)
- MySQL8.0卸载教程
- 两万字深入解密 Go 语言接口的那些事儿 | 技术头条
- 键盘皇者 RealForce 104Pro独家评测
- Redis与LRU实现
- 微信防撤回补丁来了!更新也不会失效
- 医药箱APP静态小项目
- word自动生成目录的最后一个大标题页码前没有点点点连接线解决方案
- HBuilderX格式化css
- ROSBridge - ROS系统与非ROS外部系统的通信的C++客户端实现