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 相关文章推荐
十个优秀的Ajax/Javascript实例网站收集
Mar 31 Javascript
event对象获取方法总结在google浏览器下测试
Nov 03 Javascript
js鼠标点击图片实现随机变换图片的方法
Feb 16 Javascript
深入探究AngularJS框架中Scope对象的超级教程
Jan 04 Javascript
完美的js图片轮换效果
Feb 05 Javascript
详解Sea.js中Module.exports和exports的区别
Feb 12 Javascript
详解angularJS自定义指令间的相互交互
Jul 05 Javascript
boostrap模态框二次弹出清空原有内容的方法
Aug 10 Javascript
JavaScript变量作用域及内存问题实例分析
Jun 10 Javascript
vue动态配置模板 'component is'代码
Jul 04 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
Mar 16 Javascript
vue2.0实现列表数据增加和删除
Jun 17 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高级编程-函数-郑阿奇
2011/07/04 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
jQuery实现自动调整字体大小的方法
2015/06/15 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
在Django框架中编写Contact表单的教程
2015/07/17 Python
Python函数中的函数(闭包)用法实例
2016/03/15 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
python 切换root 执行命令的方法
2019/01/19 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
what is the difference between ext2 and ext3
2015/08/25 面试题
乡镇三项教育实施方案
2014/03/30 职场文书
大学生社会实践评语
2014/04/25 职场文书
五心教育心得体会
2014/09/04 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
学校百日安全活动总结
2015/05/07 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书