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 相关文章推荐
用ADODB.Stream转换
Jan 22 Javascript
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
Apr 12 Javascript
初窥JQuery-Jquery简介 入门了解篇
Nov 25 Javascript
Js四则运算函数代码
Jul 21 Javascript
JS判断是否360安全浏览器极速内核的方法
Jan 29 Javascript
javascript数组去重的方法汇总
Apr 14 Javascript
15个常用的jquery代码片段
Dec 19 Javascript
AngularJS基础 ng-if 指令用法
Aug 01 Javascript
javascript代码调试之console.log 用法图文详解
Sep 30 Javascript
Vue.js render方法使用详解
Apr 05 Javascript
解决vue scoped html样式无效的问题
Oct 24 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
Jan 11 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自定义函数之递归删除文件及目录
2010/08/08 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
vue实现微信分享功能
2018/11/28 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
工作的心得体会
2013/12/31 职场文书
生物学学生自我评价
2014/01/17 职场文书
终止劳动合同通知书
2015/04/16 职场文书
捐书活动倡议书
2015/04/27 职场文书
会议主持人开场白台词
2015/05/28 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技