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下拉框内容左右移动效果的具体实现
Jul 10 Javascript
jQuery判断数组是否包含了指定的元素
Mar 10 Javascript
jQuery实现的背景动态变化导航菜单效果
Aug 24 Javascript
概述如何实现一个简单的浏览器端js模块加载器
Dec 07 Javascript
ES6概念 Symbol toString()方法
Dec 25 Javascript
JavaScript变量作用域_动力节点Java学院整理
Jun 27 Javascript
对layui中表单元素的使用详解
Aug 15 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
Sep 18 Javascript
JS无限级导航菜单实现方法
Jan 05 Javascript
Webpack中loader打包各种文件的方法实例
Sep 03 Javascript
javascript设计模式之装饰者模式
Jan 30 Javascript
JavaScript交换变量的常用方法小结【4种方法】
May 07 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
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
PHP常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
nodejs中函数的调用实例详解
2018/10/31 NodeJs
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
百度小程序自定义通用toast组件
2019/07/17 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
Python itertools模块详解
2015/05/09 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
python处理“
2019/06/10 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
前端实现打印图像功能
2019/08/27 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
航空学院求职信
2014/06/11 职场文书
关于远足的感想
2015/08/10 职场文书
python实现的web监控系统
2021/04/27 Python
golang生成vcf通讯录格式文件详情
2022/03/25 Golang