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 相关文章推荐
判断目标是否是window,document,和拥有tagName的Element的代码
May 31 Javascript
jquery阻止冒泡事件使用模拟事件
Sep 06 Javascript
asp.net+js实现金额格式化
Feb 27 Javascript
原生js制作简单的数字键盘
Apr 24 Javascript
利用js实现禁止复制文本信息
Jun 03 Javascript
详解JavaScript中的事件流和事件处理程序
May 20 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
深入理解jQuery事件绑定
Jun 02 Javascript
jQuery事件绑定方法学习总结(推荐)
Nov 21 Javascript
canvas轨迹回放功能实现
Dec 20 Javascript
vue 微信授权登录解决方案
Apr 10 Javascript
CSS3 动画卡顿性能优化的完美解决方案
Sep 20 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
php面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
PHP 年月日的三级联动实例代码
2017/05/24 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
js实现点击每个li节点,都弹出其文本值及修改
2016/12/15 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
iphone刘海屏页面适配方法
2019/05/07 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
python求crc32值的方法
2014/10/05 Python
python将图片文件转换成base64编码的方法
2015/03/14 Python
python实现ping的方法
2015/07/06 Python
TensorFlow如何实现反向传播
2018/02/06 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
python获取Linux发行版名称
2019/08/30 Python
python实现简易淘宝购物
2019/11/22 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
详解python tcp编程
2020/08/24 Python
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
暑期社会实践感言
2014/02/25 职场文书
刑事代理授权委托书
2014/09/17 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python