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类库Bindows1.3中的内存释放方式分析
Mar 08 Javascript
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
Dec 02 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
Dec 27 Javascript
JavaScript按值删除数组元素的方法
Apr 24 Javascript
原生JS实现图片轮播切换效果
Dec 15 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
Mar 03 Javascript
AngularJS select设置默认值的实现方法
Aug 25 Javascript
VUE脚手架的下载和配置步骤详解
Apr 01 Javascript
一百行JS代码实现一个校验工具
Apr 30 Javascript
在Vue环境下利用worker运行interval计时器的步骤
Aug 01 Javascript
基于jQuery拖拽事件的封装
Nov 29 jQuery
一起来了解一下JavaScript的预编译(小结)
Mar 01 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将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
Python笔记之代理模式
2019/11/20 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
pandas数据拼接的实现示例
2020/04/16 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
EJB的几种类型
2012/08/15 面试题
大学生学业生涯规划
2014/01/05 职场文书
酒店总经理助理职责
2014/02/12 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS