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 相关文章推荐
js 判断js函数、变量是否存在的简单示例代码
Mar 04 Javascript
JQuery给网页更换皮肤的方法
May 30 Javascript
JQuery实现鼠标滚轮滑动到页面节点
Jul 28 Javascript
JavaScript生成带有缩进的表格代码
Jun 15 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
Mar 06 Javascript
详解JavaScript中return的用法
May 08 Javascript
SpringMVC简单整合Angular2的示例
Jul 31 Javascript
vue-router配合ElementUI实现导航的实例
Feb 11 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
Jul 25 Javascript
js中console在一行内打印字符串和对象的方法
Sep 10 Javascript
jQuery操作元素追加内容示例
Jan 10 jQuery
JS 设计模式之:单例模式定义与实现方法浅析
May 06 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
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
php创建图像具体步骤
2017/03/13 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
JavaScript Split()方法
2015/12/18 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
详解Python中的文本处理
2015/04/11 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
Python PIL库图片灰化处理
2020/04/07 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
python 批量将中文名转换为拼音
2021/02/07 Python
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
中科软笔试题和面试题
2014/10/07 面试题
高三英语教学反思
2014/01/13 职场文书
工作过失检讨书
2014/02/23 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
2014年学习部工作总结
2014/11/12 职场文书
小学毕业教师寄语
2019/06/21 职场文书
七年级作文之秋游
2019/10/21 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
apache ftpserver搭建ftp服务器
2022/05/20 Servers