若想在严格模式下使用JS,需要在文件的第一行加上“use strict”,在实际开发中,常常将“use strict”加入到闭包的内部

具体是:


整个脚本中使用:在这个JavaScript文件开头写'use strict';

在闭包内部中使用
funtion () {
'use strict';
}
  • 严格模式下,不允许使用with
with语句 扩展一个语句的作用域链。
with (expression) {
statement
}
  • 严格模式下,不允许给未声明的变量赋值
  • 严格模式下,arguments与参数不存在映射关系
function(h) {
arguments[0] = 100;
console.log(h); //100
}(1); function(h) {
'use strict';
arguments[0] = 100;
console.log(h); //1
}(1);
但是,但参数是对象时,是存在映射关系的:
function(h) {
'use strict';
console.log(h.a);//1
arguments[0].a = 100;
console.log(h.a); //100
}({a:1});
  • 严格模式下,删除参数名,函数名报错。非严格模式返回false,不报错也没有任何效果
function(h) {
console.log(h); //1
console.log(delete h); //false
console.log(a); //1
}(1); function(h) {
'use strict';
console.log(h); //1
delete h; //SyntaxError(语法错误)
console.log(h); //1
}(1)
  • 严格模式下,函数参数名重复报错。非严格模式最后一个重名参数会覆盖之前的重名参数。
function (a, a, b) {
console.log(a + b); //5
}(1, 2, 3); !function (a, a, b) {
'use strict';
console.log(a + b); //SyntaxError
}(1, 2, 3);
  • 严格模式下,删除不可配置(configurable=false)的属性报错。非严格模式返回false,不报错也没有任何效果
function (a){
var obj={};
Object.defineProperty(obj,'a',{ configurable: false });
console.log(delete obj.a); //flase
}(1); !function (a){
'use strict';
var obj={};
Object.defineProperty(obj, 'a', { configurable: false });
console.log(delete obj.a); //TypeError
}(1);
  • 严格模式下,修改不可写(writable=false)的属性报错
unction () {
var obj = { a: 1 };
Object.defineProperty(obj, 'a', { writable: false });
obj.a = 2;
console.log(obj.a); //1 //证明没有被修改
}(); !function () {
'use strict';
var obj = { a: 1 };
Object.defineProperty(obj, 'a', {writable: false});
obj.a = 2; //TypeError
}();
  • 严格模式下,一般函数调用,this指向undefined,而不是全局对象。
function () {
function fun() { return this; }
console.log( fun() ); //Window
}(); !function () {
'use strict';
function fun() { return this; }
console.log( fun() ); //undefined
}();
  • 严格模式下,不再支持arguments.callee/caller。

JS在严格模式和非严格模式的区别的更多相关文章

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

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

  2. JS-严格模式、非严格模式

    2018年11月14日晚上,我在“深入理解javascript”书上第一次知道“严格模式”“非严格模式”这2个名词: “严格模式”使用指令:“use strict”: 这个指令我其实有经常看到,在其他 ...

  3. socket异步通信-如何设置成非阻塞模式、非阻塞模式下判断connect成功(失败)、判断recv/recvfrom成功(失败)、判断send/sendto

    socket异步通信-如何设置成非阻塞模式.非阻塞模式下判断connect成功(失败).判断recv/recvfrom成功(失败).判断send/sendto 博客分类: Linux Socket s ...

  4. XCode工程中ARC模式与非ARC模式共用(转)

    Xcode 项目中经常会融合一些老的代码,它们可能采用非ARC的模式.混合编译时,就会碰到编译出错的情况. 如何共用ARC模式和非ARC模式呢? XCode除了提供整个项目是否使用ARC模式的选择外, ...

  5. oracle11g设置归档模式和非归档模式

    1.首先查看当前数据库是否处于归档模式            可使用如下两种方式查看 1.1  select name, log_mode from v$database;   log_mode的值为 ...

  6. Oracle之归档模式与非归档模式

    归档模式和非归档模式 在DBA部署数据库之初,必须要做出的最重要决定之一就是选择归档模式(ARCHIVELOG)或者非 归档模式(NOARCHIVELOG )下运行数据库.我们知道,Oracle 数据 ...

  7. Oracle归档模式和非归档模式的区别

    一.查看oracle数据库是否为归档模式: Sql代码1.select name,log_mode from v$database; NAME LOG_MODE ------------------ ...

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

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

  9. 怎样将Oracle数据库设置为归档模式及非归档模式

    怎样将Oracle数据库设置为归档模式及非归档模式 1.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和 redo lo ...

  10. MySQL MHA--故障切换模式(GTID模式和非GTID模式)

    GTID和非GTID故障切换模式选择 MySQL 5.6版本引入GTID来解决主从切换时BINLOG位置点难定位的问题,MHA从0.56版本开始支持基于GTID的复制,在切换时可以采用GTID模式和非 ...

随机推荐

  1. django之def get_response(self, request):

    class BaseHandler(object)方法get_response,控制着处理请求的流程,调用中间件,返回请求. def get_response(self, request): &quo ...

  2. jmap dump文件压缩后失效

    最近线上出问题,于是用jmap -dump拿到dump文件,再linux压缩后拿到windows下无效,后来又直接拿了一个没有压缩的竟然可以用...坑啊!~

  3. day01-MySQL介绍

    一.MySQL的介绍 1.1.MySQL介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 W ...

  4. redis如何清除所有的key

    redis比memcache好的地方之一,如果memcache,恐怕就得关掉重启了. 1 使用cli FLUSHDB 清除一个数据库,FLUSHALL清除整个redis数据. 2 使用shell re ...

  5. Java中==号与equals()方法的区别

    String str1 = new String("abc"); String str2 = new String("abc"); System.out.pri ...

  6. SpringBoot配置定时任务的两种方式

    一.导入相关的jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...

  7. jquery接触初级----- 一种新奇的选择器用法

    今天看到一个新奇的jquery 选择器的用法,因为以前没有见过,所以记录下来 1.jquery 选择器: 给body添加一个元素,添加元素的时候,同时把属性和点击事件都一起进行添加 <!DOCT ...

  8. 在postgresqlz中查看与删除索引

    查看索引 select * from pg_indexes where tablename='tbname';      或者     select * from pg_statio_all_inde ...

  9. Kotlin语言学习笔记(1)

    fun main(args: Array<String>) { println("Hello, World!") } 基本语法 声明常量用val,声明变量用var,声明 ...

  10. 【377】only one element in a tuple

    Recently I am doing the assignment of COMP9021. It is too difficult and it is about the Knight and K ...