2018年11月14日晚上,我在“深入理解javascript”书上第一次知道“严格模式”“非严格模式”这2个名词;

“严格模式”使用指令:“use strict”;

这个指令我其实有经常看到,在其他人的js文件里。当然我是不知道含义的,且我也没有想过要去询问,写在那就在那吧,又不影响我。

今天做这个笔记的原因在于:既然在我学习中遇到了,那我就仔细的学习一下也还是不错的!!!!

为什么使用严格模式?

1.消除js语法的一些不合理、不严谨之处,减少一些怪异行为;

    1).消除代码运行的一下不安全之处,保证代码运行的安全;

    2).提高编译器效率,增加运行速度;

    3).为未来新版本的js做好铺垫。

2.“严格模式”提现了js更合理、更安全、更严谨的发展方向,包括IE10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。

3.另一方面,同样的代码,在“严禁模式”中,可能会有不一样的运行结果;一些在“正常模式”下可以运行的语句,在“严禁模式”下将不能运行。掌握这些内容,有助于更细致深入地理解js,让你成为更好的程序员。

0.严格模式其指令出现的位置:

0-1:直接写在<script></script>中的第一行;(表示该篇js都处于严格模式下)

0-2:写在方法中的第一行;(表示该方法下的代码格式都处于严格模式)

<script>
"use strict"
// 以下的所有代码都处于严格模式 <script>
<script>
function foo(){
"use strict"
//该方法下的代码处于严格模式
}
</script>

  

1.严格模式下,不能使用未声明的变量

//严格模式

<script>
"use strict"
x=123; //报错( Uncaught ReferenceError: x is not defined)
</script>

//非严格模式

<script>
x=123;
console.log(x) //输出:123
</script>

//严格模式及非严格模式

<script>
x=123;
console.log(x) //输出:123 foo(); //Uncaught ReferenceError: y is not defined
function foo(){
"use strict"
y=234; //报错,y未定义
}
</script>

2.严格模式下,不允许删除 变量或对象   (强调:只有configurable设置为true的对象属性,才能被删除。)

<script>
"use strict";
var x = 123;
delete x; //Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
</script> <script>
"use strict";
var x;
第一种:
delete x; //Uncaught SyntaxError: Delete of an unqualified identifier in strict mode. 第二种:
var o = Object.create(null,{
'x':{
value:1234,
configurable:true
}
}); console.log(o.x)  //输出:1234
delete o.x; //删除成功
console.log(o.x) //输出:undefined </script>

  

3.严格模式下,不允许删除函数

<script>
"use strict";
function foo(p1,p2){}
delete foo; //Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
</script>

  

4.严格模式下,不允许参数名相同

<script>
"use strict";
function foo(p1,p1){}
delete foo; //Uncaught SyntaxError: Duplicate parameter name not allowed in this context
</script>

  

 5.严格模式下,不允许使用八进制

<script>
"use strict";
var x = 010; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.
</script>

6.严格模式下,不允许使用转义字符

<script>
"use strict";
var x = \010; //Uncaught SyntaxError: Invalid or unexpected token(无效或意外的令牌)
</script>

7.严格模式下,不允许对只读属性赋值

<script>
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {
value: 0,
writable: false
});
obj.x = 3.14; //Uncaught TypeError: Cannot assign to read only property 'x' of object '#<Object>'
</script>

  

8.严格模式下,不允许对一个使用getter方法读取的属性进行赋值

<script>
"use strict";
var obj = {
get x() {
return 0
}
};
obj.x = 3.14; //Uncaught TypeError: Cannot set property x of #<Object> which has only a getter
</script>

  

9.严格模式下,不允许删除一个不允许删除的属性

<script>
"use strict";
delete Object.prototype; //Uncaught TypeError: Cannot delete property 'prototype' of function Object() { [native code] }(不能删除函数对象()的属性“原型”{ [本机代码] })
</script>

  

10.严格模式下,变量名不能使用 "eval" 字符串

//严格模式下
<script>
"use strict";
var eval = 3.14; //Uncaught SyntaxError: Unexpected eval or arguments in strict mode(严格模式下的意外EVE或参数)
console.log(eval)
</script> //非严格模式下
<script>
var eval = 3.14;
console.log(eval) //3.14
</script>

  

11.严格模式下,变量名不能使用 "arguments" 字符串

//严格模式下
<script>
"use strict";
var arguments = 3.14; //Uncaught SyntaxError: Unexpected eval or arguments in strict mode(严格模式下的意外EVE或参数)
console.log(arguments)
</script> //非严格模式下
<script>
vararguments = 3.14;
console.log(arguments) //3.14
</script>

12.严格模式下,不允许使用以下这种语句

<script>
"use strict"
with(Math) {
x = cos(2)
}; //Uncaught SyntaxError: Strict mode code may not include a with statement
</script>

  

13.严格模式下,由于一些安全原因,在作用域 eval() 创建的变量不能被调用

<script>
"use strict"
eval ("var x = 2");
alert (x); //Uncaught ReferenceError: x is not defined
</script>

  

 

JS-严格模式、非严格模式的更多相关文章

  1. js中的严格模式和非严格模式的比较

    前言 es5的严格模式是采用具有限制性JavaScript变体的一种方式,从而使代码显示地脱离'懒散模式/非严格模式' 严格模式 严格模式通过抛出错误来消除一些原有静默错误 严格模式修复了一些导致Ja ...

  2. JavaScript 正则表达式——预定义类,边界,量词,贪婪模式,非贪婪模式,分组,前瞻

    ㈠预定义类    示例:匹配一个ab+数字+任意字符的字符串:ab\d.   ㈡边界 正则表达式常用的边界匹配字符   ⑴示例1:第一个是没写单词边界             第二个是加上字符边界的效 ...

  3. oracle非归档模式下的冷备份和恢复

    查看归档的相关信息 SQL> archive log list数据库日志模式             非存档模式自动存档             禁用存档终点            USE_DB ...

  4. Oracle归档模式与非归档模式设置

    (转自:http://www.cnblogs.com/spatial/archive/2009/08/01/1536429.html) Oracle的日志归档模式可以有效的防止instance和dis ...

  5. Oracle之rman数据库在非归档模式下的备份和恢复

    1.数据库在非归档模式下的备份 SQL> archive log list;数据库日志模式 非存档模式自动存档 禁用存档终点 USE_DB_RECOVERY_FILE_DEST最早的联机日志序列 ...

  6. JS严格模式和非严格模式的区别

    严格模式和非严格模式的区别 //f1.js 'use strice'; //整个js文件都是严格模式下执行的 var n = 1; var foo = function(){...}; //... v ...

  7. JS在严格模式和非严格模式的区别

    若想在严格模式下使用JS,需要在文件的第一行加上“use strict”,在实际开发中,常常将“use strict”加入到闭包的内部 具体是: 整个脚本中使用:在这个JavaScript文件开头写' ...

  8. js正则中的贪婪和非贪婪模式问题总结

    var b="abeeee:eeeee:eeeeeab"; console.log(b.match(/e+\:e+/g));//["eeee:eeeee"]贪婪 ...

  9. JS正则表达式从入门到入土(6)—— 贪婪模式与非贪婪模式

    贪婪模式 之前说了正则的量词,但是量词会带来一个到底该匹配哪个的问题. 如下正则表达式: \d{3,6} 这个正则表达式是匹配3到6个数字,但是当这个正则表达式被用来匹配12345678这个字符串,到 ...

随机推荐

  1. Linux常见的系統进程

    前言 在日常运维工作中,经常会看到一些奇怪的系统进程占用资源比较高.而且总是会听到业务线同学询问“xxx这个是啥进程啊?咋开启了这么多?” 而这些系统级的内核进程都是会用中括号括起来的,它们会执行一些 ...

  2. linux命令学习-2

    1. 对于已经在前台执行的命令,可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用jobs查看进程编号n:2. bg命令将停止的作业放到后台运行 bg %n3. kill -9 XX ...

  3. (转)iOS静态库与动态库的区别

    一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用 ...

  4. Insertion Sort Gym - 101955C 思路+推公式

    题目:题目链接 题意:对长为n的1到n的数列的前k个数排序后数列的最长上升子序列长度不小于n-1的数列的种数,训练赛时怎么都读不明白这个题意,最后还是赛后问了旁队才算看懂,英语水平急需拯救55555 ...

  5. Linux命令之---cat

    命令简介 cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 命令格式 cat [选项] [文 ...

  6. 巧用Windows Server 2008的NPS策略

    单位员工大部分是移动办公一族,由于病毒库更新不及时.系统补丁没有安装,使移动办公设备处于危险状态,访问内部网络时很可能威胁整个网络.该如何防守网络访问这扇门呢? 笔者所在的单位是一家传媒公司,有数百人 ...

  7. 【Best Time to Buy and Sell Stock】cpp

    题目: Say you have an array for which the ith element is the price of a given stock on day i. If you w ...

  8. [转载]在Robotium中使用ID

    原文地址:在Robotium中使用ID作者:逍遥云翳 在Robotium的API中不提供使用ID的方式. 如果我们想在Robotium中使用ID就需要自己通过ID来找到控件的实例,然后通过Roboti ...

  9. Monkey官方帮助翻译&介绍

    都说想学好就看原文,英文不好为了翻译这个可费了大劲了.表格从GOOGLE官网复制到WORD里编辑,结果贴上来格式全乱了,只得不弄表格了.表格中官网的事件不是最新的,比最新的少2个,具体我会另发一篇文章 ...

  10. 区分Activity的四种加载模式【转载】

    此文为转载,文章来源:http://marshal.easymorse.com/archives/2950 文章作者:   Marshal's Blog 参考文章:http://blog.csdn.n ...