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重建星际争霸
Dec 22 Javascript
javascript 闭包详解
Feb 15 Javascript
javascript 实现动态侧边栏实例详解
Nov 11 Javascript
JQuery获取鼠标进入和离开容器的方向
Dec 29 Javascript
jQuery实用密码强度检测
Mar 02 Javascript
vue实现一个炫酷的日历组件
Oct 08 Javascript
小程序文字跑马灯效果
Dec 28 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
Apr 08 Javascript
详解vue中使用protobuf踩坑记
May 07 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
Feb 16 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
Aug 18 Javascript
vue实现前端列表多条件筛选
Oct 26 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
在PHP中使用XML
2006/10/09 PHP
木翼下载系统中说明的PHP安全配置方法
2007/06/16 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
ajax异步刷新实现更新数据库
2012/12/03 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
Python 模板引擎的注入问题分析
2017/01/01 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
详谈python http长连接客户端
2017/06/12 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
django修改models重建数据库的操作
2020/03/31 Python
解决pip安装的第三方包在PyCharm无法导入的问题
2020/10/15 Python
python3爬虫GIL修改多线程实例讲解
2020/11/24 Python
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
Java基础知识面试题
2014/03/25 面试题
酒店总经理职务说明书
2014/02/26 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
python关于集合的知识案例详解
2021/05/30 Python