携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
这个小文章是一个关于严格模式的详细探究,分别是鉴别了严格模式中变量、对象和函数在严格模式的不同。其中严格模式中函数的变化较大。希望大家可以详细的看一看。
喜欢(❤ ω ❤)就点个赞吧~~
变量
- 变量使用之前要声明
- 变量不能执行delet操作 这是因为在严格模式中变量的属性描述中configurable:false,在非严格模式configurable:true。
- 静默失败--->报错error
对象
- 对象中的属性描述中只有enumerable不会静默失败报错。
- 在修改了configurable和writable之后就会在严格模式中使用delete和重新赋值都会出现报错
- 静默失败--->报错error
“use strict”
var obj={
name:'你好'
}
Object.getOwnPropertyDescriptor(obj, 'name')
//当改变obj中name的属性在严格模式就会出现报错
Object.defineProperty(obj, 'name', {
configurable:false
writable:false
})
函数
- 当函数的形参参数给了默认值之后就会默认开启严格模式
- 参数是唯一的,函数中不能出现两个相同的形参
- 实参和形参是没有映射关系的
- 不能使用arguments.callee 和argument.caller
- 不允许使用eval()和with(),存在着重大隐患,在严格模式中被禁止了
- 不允许出现八进制的数,由于八进制前边是加一个0,使得会出现歧义,可能是补位
- 不允许eval 和argument字眼的变量名称
- 函数的默认this指向undifined,函数的this,
这个案例说明了两个东西一个是实参和形参之间没有了关系,另一个是当 形参有默认的值时就会自动开启严格模式。
function test(a=30){
arguments[0] = 20
//a=20
console.log(a)
}
test(10) //10
在这个案例中说明不能使用argumengts的callee和caller方法。
“use strict”
function test(){
console.log(arguments.callee === test)
}
//报错
function outer(){
inner()
}
function inner(){
console.log(inner.caller === outer)
}
outer()
//在非严格模式:true 严格模式报错
进制表示
- 二进制开头0b
- 八进制开头0
- 十六进制开头0x
var value = ob10101010
var value= 010101010
var value = 0x10101010