js严格模式(use strict)

原创 2018年04月17日 19:43:43

1 使用方法

  • 在代码最上面使用
// ie 10+以上支持
'use strict'

// other code
a = 1   // 有效,报错
  • 在代码中间使用
a = 1
'use strict'    // 这里使用无效
b = 2   // 不报错
  • 函数内使用
function foo() {
    'use strict'
    return 010    // 函数内为严格模式
}

2 规则

  • 不允许使用未定义的变量
a = 1   // a is not defined

// 允许变量提升(hoist),加上后不报错
var a
  • 不允许删除变量
var a = 1

delete a    // Delete of an unqualified identifier in strict mode

// 对象的属性可以删除
let o = {a: 1, b: 2}
delete o.a
  • 不允许对只读属性赋值
let o = {}
Object.defineProperty(o, 'a', {
  writable: false
})
// Cannot assign to read only property 'a' of object '#<Object>'
o.a = 1     // 非strict模式不报错,只是赋值不成功
  • 不允许对只有getter的属性赋值
let o = {get x() {return 0}}
o.x = 1
// TypeError: Cannot set property x of #<Object> which has only a getter
  • 不允许使用八进制
var a = 010
// SyntaxError: Octal literals are not allowed in strict mode.
  • 禁止this指向全局对象(global)
function foo() {
    return this     // global,node环境
}

function foo() {
    'use strict'
    return this     // undefined
}
  • 函数参数不允许重名
// SyntaxError: Duplicate parameter name not allowed in this context
function foo(a, a) {return}
  • 不允许使用保留关键字作为变量名
// Unexpected eval or arguments in strict mode
var eval = 1
var arguments = 1

// Unexpected strict mode reserved word
// 其他:implements interface let package private
// protected public static yield
var public = 1
  • 不允许使用eval()中定义的变量
eval('var a = 1')

console.log(a)  // a is not defined
  • 不允许使用with
var a = 1
with(Math) {a = sin(2)}
// SyntaxError: Strict mode code may not include a with statement

参考:
http://www.runoob.com/js/js-strict.html

版权声明:本文为个人知识整理,欢迎指正、交流、转载。 https://blog.csdn.net/u014711094/article/details/79979614

Javascript 严格模式(use strict)详解

一、概述除了正常运行模式,ECMAscript 5添加了第二种运行模式:”严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。 设立”严格模式”的目...
  • SakuraLLj
  • SakuraLLj
  • 2016-03-16 16:47:58
  • 950

javacript use strict 严格模式作用及深析

严格模式(strict mod)的作用: Strict mode是JavaScript1.8.5引进的技术,今天,所有主流的浏览器都在他们的最新版本中支持了严格模式(包括IE10,Opera12和A...
  • yummy_go
  • yummy_go
  • 2016-03-07 15:09:42
  • 471

webpack取消严格模式打包use strict

有时候用webpack打包,引入的require文件中有报错,是由于严格模式引起的。es6自动打包成es5会加上严格模式。如何取消掉,直接在webpack配置文件中设置: var config = ...
  • xuyanquan
  • xuyanquan
  • 2017-07-25 11:19:10
  • 2973

Js中的严格模式use strict

第一次看到use strict并不知道是什么含义,Java中也有严格模式,不过那是为了调试用的。今天在前人们的基础上,总结归纳下JavaScript的严格模式:1.由来除了正常运行模式,ECMAscr...
  • zhangbuzhangbu
  • zhangbuzhangbu
  • 2016-10-07 10:44:46
  • 1057

JavaScript严格模式(use strict)

说明 对于小白们来说(也包括我)也可能都知道JavaScript的变量可以不用声明就可以直接使用,但是在(ECMAScript5)中新增了严格模式,即JavaScript严格模式(strict ...
  • qq_34908844
  • qq_34908844
  • 2017-07-22 14:54:51
  • 235

gulp插件之-----转化es6代码到es5 取消严格模式 remove "use strict" directive Installation npm install babel-plugin-t

gulp插件之-----转化es6代码到es5 取消严格模式 remove "use strict" directive Installation npm install babel-pl...
  • abcde158308
  • abcde158308
  • 2017-08-21 15:10:26
  • 566

是否该使用严格模式?use strict

其实这篇文章是在2012年就写的,想想自己落后了几年了。很早一段时间我就看到过介绍严格模式的文章,但当时还是没有重视,因为两种模式下的区别还是挺大的,长年的书写习惯让我不太想去改变。但后来在我优化自己...
  • a250758092
  • a250758092
  • 2017-08-04 12:03:24
  • 771

use strict 严格模式

JavaScript在ES5版本中引入了一个新的模式’严格模式’,这在javascript的各类源码中应用非常广泛。目的是帮助消除那些容易出错的语法和限制使用容易导致问题的编程方式。所以相当于一个Ja...
  • Half_open
  • Half_open
  • 2016-11-16 10:35:31
  • 2106

不同JS环境use strict对重复属性处理的差异

即使在严格模式下,各个运行环境对部分细节的处理也是不尽相同的。safari和nodejs的严格模式下对象字面量禁止重复属性声明,而chrome和Firefox则没有这方面的限制。chrome和node...
  • xingqiliudehuanghun
  • xingqiliudehuanghun
  • 2015-06-04 23:38:49
  • 956
收藏助手
不良信息举报
您举报文章:js严格模式(use strict)
举报原因:
原因补充:

(最多只允许输入30个字)