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 相关文章推荐
javascript 有趣而诡异的数组
Apr 06 Javascript
JS替换字符串中空格方法
Apr 17 Javascript
JS选项卡动态替换banner图片路径的方法
May 11 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
Oct 21 Javascript
js实现异步循环实现代码
Feb 16 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
Apr 18 Javascript
js 获取范围内的随机数实例代码
Aug 02 Javascript
浅谈js中子页面父页面方法 变量相互调用
Aug 04 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
Jul 12 Javascript
webpack4.x打包过程详解
Jul 18 Javascript
Node.js Buffer模块功能及常用方法实例分析
Jan 05 Javascript
JavaScript 装逼指南(js另类写法)
May 10 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站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
2019/12/22 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
Python中的作用域规则详解
2015/01/30 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
SVM基本概念及Python实现代码
2017/12/27 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
自荐书模板
2013/12/19 职场文书
会计演讲稿范文
2014/05/23 职场文书
先进工作者申报材料
2014/12/23 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
浅析python中特殊文件和特殊函数
2022/02/24 Python