JS严格模式知识点总结


Posted in Javascript onFebruary 27, 2018

所谓严格模式其实就是一个不会赋值给任何变量的字符串 “use strict”

如果在全局作用域下 给出这个提示,那整个脚本将采用严格模式。也可以只在函数中打开严格模式

1.严格模式下没有全局变量

a="test"

严格模式下会报错,非严格模式下正常

2.删除变量

var 有三种声明的情形

  • var 声明的全局变量
  • var 声明的局部变量
  • eval()中声明的全局变量

第一种和第二种情况是无法用 delete删掉的。

首先第一种情况声明的全局对象虽然是windows的属性,但这个属性的configurable=false 因此是无法删除的

第二种情况 局部变量更不行了,连依附的对象是谁都不知道,怎么删除

第三种情况eval()稍后会说到。

回归正题。也就是说非严格模式下,可以删除变量,但是会失败返回false.

严格模式下删除变量会报错。

3.对象

在下列情况下操作对象会报错

  1. 为只读属性赋值会报错
  2. 对不可配置的属性使用delete 会报错
  3. 为不可扩展的对象添加属性会报错
  4. 在使用对象字面量的时候,属性名必须唯一。比如
var person={
  name:"1",
  name:"2"
}

非严格模式下会默认取值第二个,严格模式下会报错。

4.函数

严格模式要求函数参数名称必须唯一

function(n,n){
  // todo
}

在非严格模式下,这个函数声明不会报错,通过参数名只能访问到第二个参数,第一个参数得通过arguments去访问。

arguments在两种模式下也有所不同

在非严格模式下,修改命名参数的值会反映到arguments对象中,在严格模式下两个值是独立的。

淘汰了 arguments.callee(引用函数本身),arguments.caller(引用调用函数)。

严格模式下函数名不能使用js保留字

**严格模式下只能在脚本的顶级和在函数内部声明函数,在if语句中声明函数会导致语法错误。**

if(true){
  function(){
   // 严格模式下报错
}
}

5.this

在非严格模式下使用函数的apply(),call(),传入null 或者undefined值会被转换为全局对象。在严格模式下,函数的this始终是指定的值,无论指定的是什么值。

var a="1";
function test(){
 console.log(this.a)
}
test.call(null) 在非严格模式下会输出1,严格模式下this就指代的就是null,null没有a属性,就会报错。

 

Javascript 相关文章推荐
JQuery this 和 $(this) 的区别
Aug 23 Javascript
JS声明变量背后的编译原理剖析
Dec 28 Javascript
js判断选择的时间是否大于今天的代码
Aug 20 Javascript
js QQ客服悬浮效果实现代码
Dec 12 Javascript
jQuery ajaxForm()的应用
Oct 14 Javascript
javascript轮播图算法
Oct 21 Javascript
Angularjs 与 bower安装和使用详解
May 11 Javascript
vue中如何让子组件修改父组件数据
Jun 14 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
Jul 28 Javascript
vue移动端屏幕适配详解
Apr 30 Javascript
layui 上传文件_批量导入数据UI的方法
Sep 23 Javascript
JavaScript创建表格的方法
Apr 13 Javascript
总结js函数相关知识点
Feb 27 #Javascript
详解jQuery中的isPlainObject()使用方法
Feb 27 #jQuery
详解Vue Elememt-UI构建管理后台
Feb 27 #Javascript
详解react-native WebView 返回处理(非回调方法可解决)
Feb 27 #Javascript
Vue2.5通过json文件读取数据的方法
Feb 27 #Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
Feb 27 #Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 #jQuery
You might like
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
很实用的js选项卡切换效果
2016/08/12 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
2016/10/13 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
Python实现的字典值比较功能示例
2018/01/08 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
Python实现DDos攻击实例详解
2019/02/02 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
python中uuid模块实例浅析
2020/12/29 Python
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
银行简历自我评价
2014/02/11 职场文书
酒店端午节促销方案
2014/02/18 职场文书
师德演讲稿范文
2014/05/06 职场文书
关于安全演讲稿
2014/05/09 职场文书
就业协议书
2014/09/12 职场文书
党员查摆剖析材料
2014/10/10 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书