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中void(0)的具体含义解释
Feb 27 Javascript
jQuery 性能优化指南(3)
May 21 Javascript
仿百度输入框智能提示的js代码
Aug 22 Javascript
JavaScript学习笔记之基础语法
Jan 22 Javascript
jQuery插件slider实现拖动滑块选取价格范围
Apr 30 Javascript
常用DOM整理
Jun 16 Javascript
jQuery自定义数值抽奖活动代码
Jun 11 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
Nov 15 Javascript
jQuery实现炫丽的3d旋转星空效果
Jul 04 jQuery
浅析vue-router原理
Oct 19 Javascript
简单了解JavaScript异步
May 23 Javascript
jquery多级树形下拉菜单的实例代码
Jul 09 jQuery
总结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程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
Python yield的用法实例分析
2020/03/06 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
教师自我评价范文
2013/12/16 职场文书
学籍证明模板
2014/11/21 职场文书
个园导游词
2015/02/04 职场文书
医生个人年度总结
2015/02/28 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
Redis分布式锁Redlock的实现
2021/08/07 Redis