js严格模式(use strict)

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

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

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页