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 25 Javascript
文本框文本自动补全效果示例分享
Jan 19 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
Jan 24 Javascript
Js为表单动态添加节点内容的方法
Feb 10 Javascript
input输入框鼠标焦点提示信息
Mar 17 Javascript
jQuery多级联动下拉插件chained用法示例
Aug 20 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
Apr 13 Javascript
JS+HTML5实现图片在线预览功能
Jul 22 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
Dec 21 Javascript
基于 D3.js 绘制动态进度条的实例详解
Feb 26 Javascript
JS数组扁平化(flat)方法总结详解
Jun 24 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
总结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
基于mysql的bbs设计(四)
2006/10/09 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
9个比较实用的php代码片段
2016/03/15 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
jquery 学习之一 对象访问
2010/11/23 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
JS中数据结构之栈
2019/01/01 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
学生生病请假条范文
2014/02/16 职场文书
C++程序员求职信范文
2014/04/14 职场文书
施工工地安全标语
2014/06/07 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书