什么是严格模式?
使JS编码更加规范化的模式,消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为
怎么使用?
直接添加下面的这句字符串就可以了,这种语法可以向后兼容,如果是不支持严格模式的javascript引擎,就会直接当成是一个未赋值的字符串字面量,会直接忽略,支持的引擎就会开启严格模式
'use strict'
说明:
1.在全局作用域使用的话,那整个js脚本就会开启这种模式
2.如果是只在函数内部使用的话,那么就只是该函数内部开启而已
function doSomething(){ 'use strict' // 其他代码 }
变量
1. 在严格模式中什么时候创建变量以及怎么创建变量都是有限制的.首先,不允许意外创建全局变量.在非严格模式下是可以像下面这样创建全局变量,但是严格模式中是不可以的
// 未声明变量
// 非严格模式:创建全局变量
// 严格模式 :抛出referenceEror错误
2.在严格模式下,对变量名也是有限制.特别的,不能使用implements,interface,let,package,private等保留字作为变量名,用这些变量命名的话,都会导出语法错误
对象
在严格模式下 操作对象比在非严格模式下更容易导致错误,下面几种情形会导致语法错误
1.为只读属性赋值会抛出TypeError
2.对不可配置的属性使用delete 操作符会抛出TypeError
3.对不可扩展的对象添加属性会抛出TypeError
函数
在严格模式下,要求命名函数的参数必须是唯一的
// 重命名参数的 // 非严格模式:没有错误,只能访问第二个参数,如果要访问第一个参数,就必须通过arguments // 严格模式语法错误 function sum(num,num){ //do something }
在严格模式下arguments对象的行为也有所不同.在严格模式下,修改命名参数的值也会反映到argument对象中,但是在严格模式下这两个值是完全独立的
function showValue(value){ value = 'foo' console.log(value) console.log(arguments[0]) // 非严格模式 : 'foo' 严格模式 :'hello' } showValu('hello')
函数
在严格模式中,函数的参数必须唯一
// 重名的参数 // 非严格模式中,没有错误,只能访问第一个参数 // 严格模式 :抛出错误 Uncaught SyntaxError: Duplicate parameter name not allowed in this context function sum(num,num){ 'use strict' // do something }
arguments对象
在非严格模式中,修改命名参数的值也会反应到arguments对象中,而严格模式坐下,这两个值是完全独立的
// 修改命名参数的值 // 非严格模式:修改会反应到arguments中 // 严格模式中不会反应到arguments中 function sum(num,num2){ 'use strict' num=3 console.log(arguments[0],num2)// 严格模式下输出为1,2 非严格模式下输出为3,2 } sum(1,2)
eval()
eval函数最大的变化就是他在包含上下文中不在创建变量或者函数:
// 使用eval函数创建变量 // 非严格模式中:弹出框弹窗 20 // 严格模式中:调用alert(x)时报错 function doSomething(){ eval('var x=20') alert(x) }
在严格模式中,可以在eval()中声明变量和函数,但这些边行或者函数只能在被求值的特殊作用域中有效,随后就将被销毁,下面这段代码执行就是没问题的
'use strict' var result=eval('x=1,y=13;x+y') alert(result)
在这里,eval中声明了变量x和y,然后将他们加在一起,反悔了他们的和,于是result变量的值就是21,即x+y的结果,在调用alert时,尽管x和y已经不存在了,result变量的值还是有效的
抑制this
在非严格模式下使用函数的apply()或则call()方法时,null和undefined值会被转换为全局对象,而在严格模式下,函数的this值始终是指定的值,无论指定的是什么值:
// 访问属性 // 非严格模式:访问全局实行 // 严格模式:抛出错误,因为this的值是null var color = "red"; function displayColor() { alert(this.color); } displayColor(null);
其他变化
在严格模式中with语句被抛弃掉了,在非严格模式中with语句能够改变解析标识符的路径,但在严格模式下,with语句被简化掉了,因此,在严格模式下使用with语句是导致语法错误
// with语句 // 非严格模式:允许 // 严格模式:抛出语法错误 with (location) { console.log(href); }
总结
以上所述是小编给大家介绍的JS中的严格模式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍深入浅析Nodejs的Http模块,包括了深入浅析Nodejs的Http模块的使用技巧和注意事项,需要的朋友参考一下 一、http服务器 我们知道传统的HTTP服务器是由Aphche、Nginx、IIS之类的软件来搭建的,但是Nodejs并不需要,Nodejs提供了http模块,自身就可以用来构建服务器,例如: http模块中封装了一个HTTP服务器和一个简易的HTTP客户端
本文向大家介绍深入浅析php json 格式控制,包括了深入浅析php json 格式控制的使用技巧和注意事项,需要的朋友参考一下 关于 json 这个问题,陆陆续续有新手朋友找我问,比如为什么我输出的是 {"1":"item1","2":"item2","3":"item3"} 而不是 ["item1","item2","item3"]。 php数组 与 js数组 我这里用 php 5.4 以上
本文向大家介绍深入浅析centos7中的systemd,包括了深入浅析centos7中的systemd的使用技巧和注意事项,需要的朋友参考一下 系统启动流程 systemd Unit 类型 服务管理 `centos7几乎一切服务都是由systemctl来管理service unit,centos7之前的service同时仍然兼容。 运行级别 CentOS7 引导启动顺序 service unit
本文向大家介绍深入浅析JavaScript中的3DES,包括了深入浅析JavaScript中的3DES的使用技巧和注意事项,需要的朋友参考一下 3DES简介: 3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥
本文向大家介绍深入浅析AngularJs模版与v-bind,包括了深入浅析AngularJs模版与v-bind的使用技巧和注意事项,需要的朋友参考一下 简介 v-bind与{{}}都可以对数据进行绑定,但是二者有区别的,v-bind不好,为什么说v-bind不好是因为v-bin做了完全替换的错做,如果你想做字符串的拼接那么v-bind不是很好的选择,下面看例子。 代码段来喽 比如我们有个这样的需求
本文向大家介绍深入浅析Node.js单线程模型,包括了深入浅析Node.js单线程模型的使用技巧和注意事项,需要的朋友参考一下 Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程、高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这个问题来探讨Node.js的单线程模型: 1、高并发 一般来说,高并发的